@agentshouse/mdruntime 0.1.0-ce531b51ff088 → 0.1.0-ce5c5bb29be5a

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 (185) hide show
  1. package/README.md +24 -11
  2. package/dist/adapter.d.ts +172 -48
  3. package/dist/adapter.d.ts.map +1 -1
  4. package/dist/adapter.js +1 -9
  5. package/dist/attached-model.d.ts +15 -0
  6. package/dist/attached-model.d.ts.map +1 -0
  7. package/dist/attached-model.js +81 -0
  8. package/dist/attempt.d.ts +16 -0
  9. package/dist/attempt.d.ts.map +1 -0
  10. package/dist/attempt.js +70 -0
  11. package/dist/binary.d.ts +18 -0
  12. package/dist/binary.d.ts.map +1 -0
  13. package/dist/binary.js +8 -0
  14. package/dist/bootstrap.d.ts +36 -6
  15. package/dist/bootstrap.d.ts.map +1 -1
  16. package/dist/bootstrap.js +199 -48
  17. package/dist/chain.d.ts +11 -0
  18. package/dist/chain.d.ts.map +1 -0
  19. package/dist/chain.js +64 -0
  20. package/dist/change-set.d.ts +9 -14
  21. package/dist/change-set.d.ts.map +1 -1
  22. package/dist/change-set.js +11 -56
  23. package/dist/change.d.ts +45 -0
  24. package/dist/change.d.ts.map +1 -1
  25. package/dist/change.js +34 -0
  26. package/dist/client.d.ts +37 -15
  27. package/dist/client.d.ts.map +1 -1
  28. package/dist/client.js +159 -29
  29. package/dist/collection.d.ts +12 -14
  30. package/dist/collection.d.ts.map +1 -1
  31. package/dist/collection.js +52 -56
  32. package/dist/compile.d.ts +16 -0
  33. package/dist/compile.d.ts.map +1 -0
  34. package/dist/compile.js +773 -0
  35. package/dist/connection.d.ts +67 -28
  36. package/dist/connection.d.ts.map +1 -1
  37. package/dist/connection.js +3911 -1044
  38. package/dist/conversation.d.ts +59 -18
  39. package/dist/conversation.d.ts.map +1 -1
  40. package/dist/conversation.js +849 -248
  41. package/dist/digest.d.ts +7 -0
  42. package/dist/digest.d.ts.map +1 -0
  43. package/dist/digest.js +113 -0
  44. package/dist/durability.d.ts +4 -1
  45. package/dist/durability.d.ts.map +1 -1
  46. package/dist/durability.js +5 -0
  47. package/dist/entry.d.ts +20 -0
  48. package/dist/entry.d.ts.map +1 -0
  49. package/dist/entry.js +151 -0
  50. package/dist/expectation.d.ts +21 -0
  51. package/dist/expectation.d.ts.map +1 -0
  52. package/dist/expectation.js +70 -0
  53. package/dist/failure.d.ts +13 -0
  54. package/dist/failure.d.ts.map +1 -0
  55. package/dist/failure.js +19 -0
  56. package/dist/fence.d.ts +6 -0
  57. package/dist/fence.d.ts.map +1 -0
  58. package/dist/fence.js +10 -0
  59. package/dist/file.d.ts +2 -19
  60. package/dist/file.d.ts.map +1 -1
  61. package/dist/file.js +7 -122
  62. package/dist/fulltext.d.ts +27 -0
  63. package/dist/fulltext.d.ts.map +1 -0
  64. package/dist/fulltext.js +370 -0
  65. package/dist/host.d.ts +20 -2
  66. package/dist/host.d.ts.map +1 -1
  67. package/dist/host.js +166 -48
  68. package/dist/identity.d.ts +4 -0
  69. package/dist/identity.d.ts.map +1 -1
  70. package/dist/identity.js +16 -1
  71. package/dist/index.d.ts +20 -9
  72. package/dist/index.d.ts.map +1 -1
  73. package/dist/index.js +9 -0
  74. package/dist/live.d.ts +22 -0
  75. package/dist/live.d.ts.map +1 -0
  76. package/dist/live.js +124 -0
  77. package/dist/media.d.ts +8 -0
  78. package/dist/media.d.ts.map +1 -0
  79. package/dist/media.js +218 -0
  80. package/dist/memory.d.ts +22 -8
  81. package/dist/memory.d.ts.map +1 -1
  82. package/dist/memory.js +208 -47
  83. package/dist/messages.d.ts +28 -0
  84. package/dist/messages.d.ts.map +1 -0
  85. package/dist/messages.js +90 -0
  86. package/dist/model.d.ts +22 -14
  87. package/dist/model.d.ts.map +1 -1
  88. package/dist/model.js +13 -4
  89. package/dist/name.d.ts +4 -0
  90. package/dist/name.d.ts.map +1 -0
  91. package/dist/name.js +122 -0
  92. package/dist/observation.d.ts +21 -1
  93. package/dist/observation.d.ts.map +1 -1
  94. package/dist/observation.js +128 -17
  95. package/dist/open.d.ts +2 -0
  96. package/dist/open.d.ts.map +1 -0
  97. package/dist/open.js +1 -0
  98. package/dist/opened.d.ts +22 -0
  99. package/dist/opened.d.ts.map +1 -0
  100. package/dist/opened.js +107 -0
  101. package/dist/outcome.d.ts +72 -5
  102. package/dist/outcome.d.ts.map +1 -1
  103. package/dist/outcome.js +81 -1
  104. package/dist/overlay.d.ts +15 -5
  105. package/dist/overlay.d.ts.map +1 -1
  106. package/dist/overlay.js +136 -180
  107. package/dist/paths.d.ts +1 -1
  108. package/dist/paths.d.ts.map +1 -1
  109. package/dist/paths.js +4 -16
  110. package/dist/query.d.ts +78 -7
  111. package/dist/query.d.ts.map +1 -1
  112. package/dist/query.js +126 -43
  113. package/dist/reach.d.ts +54 -0
  114. package/dist/reach.d.ts.map +1 -0
  115. package/dist/reach.js +448 -0
  116. package/dist/react.d.ts +43 -0
  117. package/dist/react.d.ts.map +1 -0
  118. package/dist/react.js +54 -0
  119. package/dist/readiness.d.ts +52 -0
  120. package/dist/readiness.d.ts.map +1 -0
  121. package/dist/readiness.js +27 -0
  122. package/dist/recovery.d.ts +26 -0
  123. package/dist/recovery.d.ts.map +1 -0
  124. package/dist/recovery.js +224 -0
  125. package/dist/refresh.d.ts +19 -7
  126. package/dist/refresh.d.ts.map +1 -1
  127. package/dist/refresh.js +125 -53
  128. package/dist/replica.d.ts +58 -33
  129. package/dist/replica.d.ts.map +1 -1
  130. package/dist/replica.js +320 -158
  131. package/dist/room-draft.d.ts +60 -10
  132. package/dist/room-draft.d.ts.map +1 -1
  133. package/dist/room-draft.js +227 -42
  134. package/dist/rows.d.ts +39 -34
  135. package/dist/rows.d.ts.map +1 -1
  136. package/dist/rows.js +195 -81
  137. package/dist/save.d.ts +74 -6
  138. package/dist/save.d.ts.map +1 -1
  139. package/dist/save.js +898 -181
  140. package/dist/search.d.ts +41 -29
  141. package/dist/search.d.ts.map +1 -1
  142. package/dist/search.js +37 -105
  143. package/dist/seed.d.ts +16 -0
  144. package/dist/seed.d.ts.map +1 -0
  145. package/dist/seed.js +75 -0
  146. package/dist/shared.d.ts +15 -0
  147. package/dist/shared.d.ts.map +1 -0
  148. package/dist/shared.js +421 -0
  149. package/dist/status.d.ts +7 -2
  150. package/dist/status.d.ts.map +1 -1
  151. package/dist/status.js +3 -9
  152. package/dist/store.d.ts +109 -59
  153. package/dist/store.d.ts.map +1 -1
  154. package/dist/store.js +323 -344
  155. package/dist/stored.d.ts +130 -0
  156. package/dist/stored.d.ts.map +1 -0
  157. package/dist/stored.js +560 -0
  158. package/dist/tables.d.ts +325 -0
  159. package/dist/tables.d.ts.map +1 -0
  160. package/dist/tables.js +578 -0
  161. package/dist/transfer.d.ts +0 -5
  162. package/dist/transfer.d.ts.map +1 -1
  163. package/dist/turn.d.ts +9 -0
  164. package/dist/turn.d.ts.map +1 -0
  165. package/dist/turn.js +75 -0
  166. package/dist/validation.d.ts +29 -0
  167. package/dist/validation.d.ts.map +1 -0
  168. package/dist/validation.js +101 -0
  169. package/dist/windows.d.ts +22 -0
  170. package/dist/windows.d.ts.map +1 -0
  171. package/dist/windows.js +89 -0
  172. package/dist/wire.d.ts +194 -19
  173. package/dist/wire.d.ts.map +1 -1
  174. package/dist/wire.js +90 -61
  175. package/dist/words.d.ts +19 -0
  176. package/dist/words.d.ts.map +1 -0
  177. package/dist/words.js +156 -0
  178. package/package.json +33 -10
  179. package/AGENTS.md +0 -207
  180. package/dist/attachment.d.ts +0 -3
  181. package/dist/attachment.d.ts.map +0 -1
  182. package/dist/attachment.js +0 -8
  183. package/dist/read-side.d.ts +0 -14
  184. package/dist/read-side.d.ts.map +0 -1
  185. package/dist/read-side.js +0 -371
package/dist/host.js CHANGED
@@ -1,6 +1,9 @@
1
1
  import { composeRuntime, } from './connection.js';
2
- import { removeRuntimeStore } from './store.js';
3
- import { AUTHORIZATION_ENDED, carried, envelope, PROTOCOL_MISMATCH, request, } from './wire.js';
2
+ import { queryKey } from './query.js';
3
+ import { untilAnswered } from './recovery.js';
4
+ import { described } from './failure.js';
5
+ import { AUTHORIZATION_ENDED, request, WIRE, } from './wire.js';
6
+ const NARROWED = new Set(['within', 'whole']);
4
7
  function answered(md, app, writtenBy, member, input) {
5
8
  switch (member) {
6
9
  case 'rooms':
@@ -13,16 +16,34 @@ function answered(md, app, writtenBy, member, input) {
13
16
  return md.types(input[0]);
14
17
  case 'save':
15
18
  return md.save(input[0], input[1], writtenBy);
19
+ case 'saveParts':
20
+ return md.saveParts(input[0], input[1], writtenBy);
16
21
  case 'history':
17
22
  return md.history(input[0], input[1], input[2]);
23
+ case 'resolve':
24
+ return md.resolve(input[0], input[1], input[2]);
25
+ case 'binaryFile.read':
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]);
29
+ case 'binaryFile.show':
30
+ return md.binaryFile.show(input[0], input[1], input[2]);
31
+ case 'binaryFile.attach':
32
+ return md.binaryFile.attach(input[0], input[1]);
33
+ case 'binaryFile.part':
34
+ return md.binaryFile.part(input[0], input[1]);
18
35
  case 'call':
19
36
  return md.call(input[0], input[1]);
20
37
  case 'reached':
21
38
  return md.reached(input[0], input[1], input[2]);
22
39
  case 'log':
23
40
  return md.log();
41
+ case 'cleanUp':
42
+ return md.cleanUp();
24
43
  case 'persistence':
25
44
  return md.persistence();
45
+ case 'retry':
46
+ return md.retry();
26
47
  case 'reauthorize':
27
48
  return md.reauthorize();
28
49
  case 'roomDraft.list':
@@ -30,13 +51,15 @@ function answered(md, app, writtenBy, member, input) {
30
51
  case 'roomDraft.read':
31
52
  return md.roomDraft.read(input[0], input[1]);
32
53
  case 'roomDraft.write':
33
- return md.roomDraft.write(input[0], input[1], input[2], input[3]);
54
+ return md.roomDraft.write(input[0], input[1], input[2], input[3], input[4]);
34
55
  case 'roomDraft.discard':
35
56
  return md.roomDraft.discard(input[0], input[1], input[2]);
36
57
  case 'presentation.read':
37
58
  return md.presentation.read(app);
38
59
  case 'presentation.write':
39
60
  return md.presentation.write(app, input[0]);
61
+ case 'presentation.edit':
62
+ return md.presentation.edit(app, input[0]);
40
63
  case 'conversation.list':
41
64
  return md.conversation.list();
42
65
  case 'conversation.read':
@@ -44,7 +67,7 @@ function answered(md, app, writtenBy, member, input) {
44
67
  case 'conversation.create':
45
68
  return md.conversation.create(input[0]);
46
69
  case 'conversation.send':
47
- return md.conversation.send(input[0]);
70
+ return md.conversation.send(input[0], input[1], input[2]);
48
71
  case 'conversation.answer':
49
72
  return md.conversation.answer(input[0], input[1]);
50
73
  case 'conversation.interrupt':
@@ -56,11 +79,29 @@ function answered(md, app, writtenBy, member, input) {
56
79
  case 'conversation.delete':
57
80
  return md.conversation.delete(input[0]);
58
81
  case 'chatDraft.write':
59
- return md.chatDraft.write(input[0], input[1]);
82
+ return md.chatDraft.write(input[0], input[1], input[2]);
83
+ case 'chatDraft.prepend':
84
+ return md.chatDraft.prepend(input[0], input[1]);
60
85
  case 'chatDraft.discard':
61
86
  return md.chatDraft.discard(input[0]);
62
87
  }
63
88
  }
89
+ function attempted(work) {
90
+ try {
91
+ return Promise.resolve(work());
92
+ }
93
+ catch (error) {
94
+ return Promise.reject(error);
95
+ }
96
+ }
97
+ function answeredResult(value) {
98
+ return typeof value === 'object' && value !== null && !('pending' in value);
99
+ }
100
+ function answeredMessage(value) {
101
+ if (typeof value !== 'object' || value === null)
102
+ return false;
103
+ return !('result' in value) || answeredResult(value.result);
104
+ }
64
105
  export function serveMdRuntime(options) {
65
106
  const deploymentFacts = structuredClone(options.deploymentFacts);
66
107
  const closing = new AbortController();
@@ -71,82 +112,108 @@ export function serveMdRuntime(options) {
71
112
  if (options.signal?.aborted === true)
72
113
  close();
73
114
  const runtime = composeRuntime({ ...options, signal: closing.signal });
74
- const { md, watch } = runtime;
115
+ const { md } = runtime;
75
116
  const attachments = new Map();
76
117
  let authorized = true;
118
+ let opening = null;
119
+ const opened = () => (opening ??= untilAnswered(() => md.loaded(), closing.signal));
77
120
  const watchFacts = (deliver) => {
78
121
  deliver(structuredClone(deploymentFacts));
79
122
  return () => { };
80
123
  };
81
- function attach(port, app, release) {
124
+ function attach(port, app, release, reach, code = 'stored', search = 'unused') {
82
125
  if (!authorized)
83
126
  throw new Error(AUTHORIZATION_ENDED);
84
127
  const writtenBy = release === undefined ? undefined : { app, release };
85
- const subscriptions = new Map();
128
+ let facts = { target: app, code, space: null, search };
129
+ const view = runtime.within(reach ?? null, facts);
130
+ const observations = new Map();
131
+ const followed = new Set();
132
+ const answeredKeys = new Set();
133
+ let awaited = null;
86
134
  let serving = true;
135
+ const answeredQuery = (query) => {
136
+ answeredKeys.add(queryKey(query));
137
+ if (awaited === null || !awaited.keys.every((key) => answeredKeys.has(key)))
138
+ return;
139
+ const { done } = awaited;
140
+ awaited = null;
141
+ done();
142
+ };
87
143
  const send = (message) => {
88
- port.postMessage(envelope(message));
144
+ port.postMessage(message);
89
145
  };
90
146
  const detach = () => {
91
147
  if (!serving)
92
148
  return;
93
149
  serving = false;
94
- for (const end of subscriptions.values())
150
+ for (const end of observations.values())
151
+ end();
152
+ observations.clear();
153
+ for (const end of [...followed])
95
154
  end();
96
- subscriptions.clear();
97
155
  attachments.delete(detach);
98
156
  };
157
+ const observe = (id, topic, input) => {
158
+ let resolved = false;
159
+ const deliver = (value) => {
160
+ if (!serving)
161
+ return;
162
+ send(resolved ? { kind: 'event', id, value } : { kind: 'result', id, value });
163
+ resolved = true;
164
+ if (topic === 'query' && answeredMessage(value))
165
+ answeredQuery(input[0]);
166
+ };
167
+ observations.set(id, topic === 'deployment-facts'
168
+ ? watchFacts(deliver)
169
+ : (NARROWED.has(WIRE.topics[topic]) ? view : runtime).watch(topic, topic === 'presentation' ? [app] : input, deliver));
170
+ };
171
+ const reply = async (id, query, pending) => {
172
+ try {
173
+ const value = await pending;
174
+ if (!serving)
175
+ return;
176
+ send({ kind: 'result', id, value });
177
+ if (query !== undefined && answeredResult(value))
178
+ answeredQuery(query);
179
+ }
180
+ catch (error) {
181
+ if (serving)
182
+ send({ kind: 'failure', id, ...described(error) });
183
+ }
184
+ };
99
185
  const serve = async (message) => {
100
186
  if (message.kind === 'hello')
101
187
  return;
102
188
  if (message.kind === 'stop') {
103
- subscriptions.get(message.id)?.();
104
- subscriptions.delete(message.id);
189
+ observations.get(message.id)?.();
190
+ observations.delete(message.id);
105
191
  return;
106
192
  }
107
193
  try {
108
- if (message.kind !== 'observe' || message.topic !== 'room-drafts')
194
+ if (message.kind !== 'observe')
109
195
  await md.loaded();
196
+ else if (message.topic !== 'room-drafts')
197
+ await opened();
110
198
  if (message.kind === 'observe') {
111
- const { id, topic } = message;
112
- let resolved = false;
113
- const deliver = (value) => {
114
- if (!serving)
115
- return;
116
- send(resolved ? { kind: 'event', id, value } : { kind: 'result', id, value });
117
- resolved = true;
118
- };
119
- subscriptions.set(id, topic === 'deployment-facts'
120
- ? watchFacts(deliver)
121
- : watch(topic, topic === 'presentation' ? [app] : message.input, deliver));
199
+ if (serving)
200
+ observe(message.id, message.topic, message.input);
122
201
  return;
123
202
  }
124
- const value = await answered(md, app, writtenBy, message.member, message.input);
125
- if (serving)
126
- send({ kind: 'result', id: message.id, value });
127
203
  }
128
204
  catch (error) {
129
- if (serving) {
130
- send({
131
- kind: 'failure',
132
- id: message.id,
133
- message: error instanceof Error ? error.message : String(error),
134
- });
135
- }
205
+ if (serving)
206
+ send({ kind: 'failure', id: message.id, ...described(error) });
207
+ return;
136
208
  }
209
+ const { id, member, input } = message;
210
+ const pending = attempted(() => answered(NARROWED.has(WIRE.members[member].reach) ? view.md : md, app, writtenBy, member, input));
211
+ return reply(id, member === 'query' ? input[0] : undefined, pending);
137
212
  };
138
213
  port.addEventListener('message', (event) => {
139
214
  if (!serving)
140
215
  return;
141
- const wire = carried(event.data);
142
- if (wire === null)
143
- return;
144
- if (!wire.matching) {
145
- send({ kind: 'refusal', refusal: PROTOCOL_MISMATCH });
146
- detach();
147
- return;
148
- }
149
- const message = request(wire.message);
216
+ const message = request(event.data);
150
217
  if (message === null)
151
218
  return;
152
219
  void serve(message);
@@ -154,22 +221,73 @@ export function serveMdRuntime(options) {
154
221
  port.addEventListener('close', detach);
155
222
  port.start();
156
223
  attachments.set(detach, send);
157
- return detach;
224
+ return {
225
+ detach,
226
+ narrow(next) {
227
+ if (serving)
228
+ view.narrow(next);
229
+ },
230
+ code(next, space) {
231
+ if (!serving)
232
+ return;
233
+ facts = { ...facts, code: next, space };
234
+ view.facts(facts);
235
+ },
236
+ search(next) {
237
+ if (!serving)
238
+ return;
239
+ facts = { ...facts, search: next };
240
+ view.facts(facts);
241
+ },
242
+ answered(queries, done) {
243
+ const keys = queries.map(queryKey);
244
+ if (keys.every((key) => answeredKeys.has(key)))
245
+ done();
246
+ else
247
+ awaited = { keys, done };
248
+ },
249
+ readiness(deliver) {
250
+ if (!serving)
251
+ return () => { };
252
+ const stop = view.watch('readiness', [], (value) => {
253
+ if (serving)
254
+ deliver(value);
255
+ });
256
+ const end = () => {
257
+ followed.delete(end);
258
+ stop();
259
+ };
260
+ followed.add(end);
261
+ return end;
262
+ },
263
+ };
158
264
  }
159
265
  return {
160
266
  attach,
161
- async endAuthorization() {
267
+ seed(entry) {
268
+ runtime.seed(entry);
269
+ },
270
+ persisted(answer) {
271
+ runtime.persisted(answer);
272
+ },
273
+ async endAuthorization(holder) {
162
274
  authorized = false;
163
275
  for (const [detach, send] of [...attachments]) {
164
276
  send({ kind: 'ended' });
165
277
  detach();
166
278
  }
167
279
  close();
168
- await removeRuntimeStore();
169
- await options.shell.dropGeneration();
280
+ if (!(await options.database.ask({ kind: 'authored.end', holder: holder ?? null }))) {
281
+ await options.shell.dropGeneration();
282
+ }
283
+ },
284
+ lose(locators) {
285
+ return runtime.lose(locators);
170
286
  },
171
287
  stop() {
172
288
  return runtime.stop();
173
289
  },
174
290
  };
175
291
  }
292
+ export { entrySeedOf } from './seed.js';
293
+ export { createRecovery, retryDelay, } from './recovery.js';
@@ -1,3 +1,7 @@
1
1
  export declare function changeBatchIdentity(at?: number): string;
2
+ export declare function identityTime(identity: string): number;
2
3
  export declare function roomDraftRevision(): string;
4
+ export declare function chatDraftRevision(): string;
5
+ export declare function transferIdentity(): string;
6
+ export declare function binaryLocalId(): string;
3
7
  //# 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;AAED,wBAAgB,iBAAiB,IAAI,MAAM,CAI1C"}
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,aAAa,IAAI,MAAM,CAEtC"}
package/dist/identity.js CHANGED
@@ -10,8 +10,23 @@ 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 roomDraftRevision() {
13
+ export function identityTime(identity) {
14
+ return Number.parseInt(identity.replaceAll('-', '').slice(0, 12), 16);
15
+ }
16
+ function randomIdentity() {
14
17
  const bytes = new Uint8Array(16);
15
18
  crypto.getRandomValues(bytes);
16
19
  return [...bytes].map((byte) => byte.toString(16).padStart(2, '0')).join('');
17
20
  }
21
+ export function roomDraftRevision() {
22
+ return randomIdentity();
23
+ }
24
+ export function chatDraftRevision() {
25
+ return randomIdentity();
26
+ }
27
+ export function transferIdentity() {
28
+ return randomIdentity();
29
+ }
30
+ export function binaryLocalId() {
31
+ return randomIdentity();
32
+ }
package/dist/index.d.ts CHANGED
@@ -1,17 +1,28 @@
1
- export type { AcceptedMessage, ActionDeclaration, ActionRequest, ActionResult, Adapter, AdapterFailure, Authorization, BootstrapPage, BootstrapRequest, BootstrapResult, Capability, ChangeAuthor, ContractUnavailable, ConversationAction, ConversationCards, ConversationEvent, ConversationHistories, ConversationHistoryPage, ConversationHistoryRequest, ConversationMessage, ConversationStream, DiscoverResult, DiscoveredRoom, Discovery, HistoryAuthor, HistoryRequest, HistoryResult, HistoryRetention, HistoryRevision, MdModelIdentity, ModelRequest, MutationRequest, MutationResult, PageToken, ProviderLimit, ProviderRefusal, RefreshPage, RefreshRequest, RefreshResult, Retention, RetryableRefusal, RevokedAuthorization, RoomAttachment, RoomNotReadable, RoomVersionAt, RoomVersionNotification, SelectedRooms, ServiceMode, ServiceModeSignal, TransportUncertainty, TurnContext, TurnOperation, TypedSelection, } from './adapter.js';
2
- export type { Change, ChangeBatch, Precondition, WrittenBy } from './change.js';
3
- export type { ChatDraft, ChatDraftSurface, ConversationEntry, ConversationOptions, ConversationSurface, ConversationView, RunningTurn, } from './conversation.js';
4
- export type { ChatDraftFile, FileDeclaration } from './file.js';
5
- export type { AppRoom, AppTypedSelection, ConnectionRefusal, ConnectionRefusalReason, HistoryQuery, MdRuntime, MdRuntimeOptions, PresentationSurface, RoomDraftSurface, RoomTypes, SavedRoomDraft, SaveResult, } from './connection.js';
1
+ export type { AcceptedMessage, AcceptedRoom, ActionDeclaration, ActionRequest, ActionResult, Adapter, AdapterFailure, AttachRequest, AttachResult, Authorization, BinaryFile, BinaryLinkResult, BinaryRequest, BinaryResult, 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, 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, RoomMove, WrittenBy } from './change.js';
3
+ export type { ChatDraft, ChatDraftSurface, ConversationAgent, ConversationEntry, ConversationOptions, ConversationState, ConversationSurface, ConversationView, RunningTurn, } from './conversation.js';
4
+ export type { AppRoom, AppTypedSelection, BinaryFileSurface, ConnectionRefusal, ConnectionRefusalCode, HistoryQuery, MdRuntime, MdRuntimeOptions, PresentationSurface, RoomDraftSurface, RoomSchemas, SavedParts, SavedRoomDraft, SaveResult, } from './connection.js';
6
5
  export type { Observation } from './observation.js';
7
- export type { CallResult, QueueEntry, Submission } from './outcome.js';
8
- export type { ChangedPart, FieldValue, ReturnReason, RoomDraft, RoomDraftCreation, RoomDraftParts, RoomDraftWrite, } from './room-draft.js';
6
+ export type { AttachAnswer, BinaryAnswer, BinaryLinkAnswer, CallResult, DownloadAnswer, Failure, HistoryAnswer, Offline, QueueEntry, Resolution, Submission, } from './outcome.js';
7
+ export type { BinaryFileRecord } from './binary.js';
8
+ export type { RuntimeError } from './failure.js';
9
+ export type { ChangedPart, FieldValue, ReturnReason, RoomDraft, RoomDraftCreation, RoomDraftParts, RoomDraftWrite, TextParts, } from './room-draft.js';
9
10
  export type { SaveRefusal } from './save.js';
10
- export type { DocumentHit, DocumentPart, MessageHit, SearchRequest, SearchResult, } from './search.js';
11
+ export type { DocumentHit, DocumentPart, MessageHit, MessagePart, SearchCoverage, SearchHits, SearchPending, SearchRequest, SearchResult, SearchUndeclared, Snippet, } from './search.js';
12
+ export { departure } from './change.js';
13
+ export { partsAfter, partsChanges } from './room-draft.js';
14
+ export { cutName, nameFrom, transliterated } from './name.js';
15
+ export { HISTORY_CONVERSATIONS, SESSION_STARTED } from './conversation.js';
11
16
  export { changeBatchIdentity } from './identity.js';
17
+ export { paced, ROW_WEIGHT, stepped } from './turn.js';
18
+ export { untilAnswered } from './recovery.js';
19
+ export { entriesIn, patching, sortedKeys } from './shared.js';
20
+ export { attempts, identities, intentOf, type Answered, type Attempt, type Attempts, type Identities, } from './attempt.js';
21
+ export { expectedList, expecting, type ExpectedOf, type Expecting } from './expectation.js';
12
22
  export type { RuntimeShell } from './durability.js';
23
+ export type { CodeAvailability, ConnectionAvailability, ConversationCoverage, Durability, HouseOutcome, Installation, InstallationAmount, InstallationStep, Persistence, Readiness, ReadinessStatus, RoomCoverage, RoomPreparation, SearchObligation, Space, TargetCoverage, } from './readiness.js';
13
24
  export type { AttentionEntry, SyncStatus } from './status.js';
14
- 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';
15
26
  export type { MdType, ModelIdentity, ModelSnapshot, ModelState, ModelResult, TypesResult, ValidationReceipt, } from './model.js';
16
27
  export type { OperationScopes, ReplicaAdmission, ScopedRefusal } from './adapter.js';
17
28
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,eAAe,EACf,iBAAiB,EACjB,aAAa,EACb,YAAY,EACZ,OAAO,EACP,cAAc,EACd,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,UAAU,EACV,YAAY,EACZ,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,qBAAqB,EACrB,uBAAuB,EACvB,0BAA0B,EAC1B,mBAAmB,EACnB,kBAAkB,EAClB,cAAc,EACd,cAAc,EACd,SAAS,EACT,aAAa,EACb,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,YAAY,EACZ,eAAe,EACf,cAAc,EACd,SAAS,EACT,aAAa,EACb,eAAe,EACf,WAAW,EACX,cAAc,EACd,aAAa,EACb,SAAS,EACT,gBAAgB,EAChB,oBAAoB,EACpB,cAAc,EACd,eAAe,EACf,aAAa,EACb,uBAAuB,EACvB,aAAa,EACb,WAAW,EACX,iBAAiB,EACjB,oBAAoB,EACpB,WAAW,EACX,aAAa,EACb,cAAc,GACf,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAChF,YAAY,EACV,SAAS,EACT,gBAAgB,EAChB,iBAAiB,EACjB,mBAAmB,EACnB,mBAAmB,EACnB,gBAAgB,EAChB,WAAW,GACZ,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAChE,YAAY,EACV,OAAO,EACP,iBAAiB,EACjB,iBAAiB,EACjB,uBAAuB,EACvB,YAAY,EACZ,SAAS,EACT,gBAAgB,EAChB,mBAAmB,EACnB,gBAAgB,EAChB,SAAS,EACT,cAAc,EACd,UAAU,GACX,MAAM,iBAAiB,CAAC;AACzB,YAAY,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AACvE,YAAY,EACV,WAAW,EACX,UAAU,EACV,YAAY,EACZ,SAAS,EACT,iBAAiB,EACjB,cAAc,EACd,cAAc,GACf,MAAM,iBAAiB,CAAC;AACzB,YAAY,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAC7C,YAAY,EACV,WAAW,EACX,YAAY,EACZ,UAAU,EACV,aAAa,EACb,YAAY,GACb,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,YAAY,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,YAAY,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9D,YAAY,EACV,QAAQ,EACR,SAAS,EACT,aAAa,EACb,cAAc,EACd,MAAM,EACN,UAAU,EACV,WAAW,EACX,GAAG,EACH,UAAU,EACV,YAAY,EACZ,SAAS,EACT,aAAa,EACb,UAAU,EACV,WAAW,EACX,OAAO,EACP,MAAM,EACN,KAAK,EACL,KAAK,GACN,MAAM,YAAY,CAAC;AAEpB,YAAY,EACV,MAAM,EACN,aAAa,EACb,aAAa,EACb,UAAU,EACV,WAAW,EACX,WAAW,EACX,iBAAiB,GAClB,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1 +1,10 @@
1
+ export { departure } from './change.js';
2
+ export { partsAfter, partsChanges } from './room-draft.js';
3
+ export { cutName, nameFrom, transliterated } from './name.js';
4
+ export { HISTORY_CONVERSATIONS, SESSION_STARTED } from './conversation.js';
1
5
  export { changeBatchIdentity } from './identity.js';
6
+ export { paced, ROW_WEIGHT, stepped } from './turn.js';
7
+ export { untilAnswered } from './recovery.js';
8
+ export { entriesIn, patching, sortedKeys } from './shared.js';
9
+ export { attempts, identities, intentOf, } from './attempt.js';
10
+ 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;AAoCF,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,GAAG,GAAG,WAAW,CAuFvD"}
package/dist/live.js ADDED
@@ -0,0 +1,124 @@
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
+ plan.reach.areas.some((area) => area.room === locator && area.types.length > 0));
19
+ }
20
+ function affected(plan, set) {
21
+ if (set.rooms.some((locator) => reads(plan, locator)))
22
+ return true;
23
+ const paths = narrowed(plan) ? new Set(plan.paths) : null;
24
+ return set.documents.some(({ locator, path }) => reads(plan, locator) && (paths === null || path === null || paths.has(path)));
25
+ }
26
+ function shown(entry) {
27
+ const cover = entry.cover();
28
+ return JSON.stringify('pending' in cover ? cover : cover.coverage);
29
+ }
30
+ export function createLiveQueries(run) {
31
+ const entries = new Map();
32
+ let closed = false;
33
+ function deliver(entry, next) {
34
+ const previous = entry.digest;
35
+ entry.digest = digestOf(next);
36
+ entry.covered = JSON.stringify('pending' in next.result ? next.result : next.result.coverage);
37
+ const change = previous === undefined ? null : changeOf(previous, next);
38
+ if (change !== null) {
39
+ for (const listener of entry.ready)
40
+ listener(change);
41
+ }
42
+ for (const listener of entry.fresh) {
43
+ entry.ready.add(listener);
44
+ listener(next);
45
+ }
46
+ entry.fresh.clear();
47
+ }
48
+ function schedule(entry) {
49
+ if (closed || entry.listeners.size === 0)
50
+ return;
51
+ if (entry.running) {
52
+ entry.dirty = true;
53
+ return;
54
+ }
55
+ entry.running = true;
56
+ void (async () => {
57
+ try {
58
+ for (;;) {
59
+ entry.dirty = false;
60
+ const { current, ...next } = await run(entry.plan, entry.cover);
61
+ if (closed || entry.listeners.size === 0)
62
+ return;
63
+ deliver(entry, next);
64
+ if (!(entry.dirty && !current()) && shown(entry) === entry.covered)
65
+ break;
66
+ }
67
+ }
68
+ catch {
69
+ entry.dirty = false;
70
+ }
71
+ finally {
72
+ entry.running = false;
73
+ }
74
+ })();
75
+ }
76
+ return {
77
+ touched(set) {
78
+ for (const entry of entries.values()) {
79
+ if (affected(entry.plan, set))
80
+ schedule(entry);
81
+ }
82
+ },
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) {
92
+ let entry = entries.get(identity);
93
+ if (entry === undefined) {
94
+ entry = {
95
+ plan,
96
+ cover,
97
+ listeners: new Set(),
98
+ fresh: new Set(),
99
+ ready: new Set(),
100
+ digest: undefined,
101
+ covered: '',
102
+ dirty: false,
103
+ running: false,
104
+ };
105
+ entries.set(identity, entry);
106
+ }
107
+ const held = entry;
108
+ held.listeners.add(listener);
109
+ held.fresh.add(listener);
110
+ schedule(held);
111
+ return () => {
112
+ held.listeners.delete(listener);
113
+ held.fresh.delete(listener);
114
+ held.ready.delete(listener);
115
+ if (held.listeners.size === 0 && entries.get(identity) === held)
116
+ entries.delete(identity);
117
+ };
118
+ },
119
+ close() {
120
+ closed = true;
121
+ entries.clear();
122
+ },
123
+ };
124
+ }
@@ -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, registry?: CustomElementRegistry): 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,CAC7B,MAAM,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,eAAe,EAClD,QAAQ,GAAE,qBAAsC,GAC/C,IAAI,CA0LN"}