@agentshouse/mdruntime 0.1.0-ca1eff92bbe73 → 0.1.0-ca4dc698bd0c4

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 (193) hide show
  1. package/AGENTS.md +265 -209
  2. package/README.md +13 -3
  3. package/dist/acquisition.d.ts +14 -0
  4. package/dist/acquisition.d.ts.map +1 -0
  5. package/dist/acquisition.js +24 -0
  6. package/dist/adapter.d.ts +76 -17
  7. package/dist/adapter.d.ts.map +1 -1
  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 +23 -0
  12. package/dist/binary.d.ts.map +1 -0
  13. package/dist/binary.js +8 -0
  14. package/dist/bootstrap.d.ts +17 -5
  15. package/dist/bootstrap.d.ts.map +1 -1
  16. package/dist/bootstrap.js +109 -37
  17. package/dist/change-set.d.ts +2 -0
  18. package/dist/change-set.d.ts.map +1 -1
  19. package/dist/change-set.js +48 -16
  20. package/dist/change.d.ts +15 -0
  21. package/dist/change.d.ts.map +1 -1
  22. package/dist/change.js +26 -1
  23. package/dist/chat/acts.d.ts +33 -0
  24. package/dist/chat/acts.d.ts.map +1 -0
  25. package/dist/chat/acts.js +36 -0
  26. package/dist/chat/context.d.ts +3 -0
  27. package/dist/chat/context.d.ts.map +1 -0
  28. package/dist/chat/context.js +10 -0
  29. package/dist/chat/input.d.ts +9 -0
  30. package/dist/chat/input.d.ts.map +1 -0
  31. package/dist/chat/input.js +99 -0
  32. package/dist/chat/kit.d.ts +60 -0
  33. package/dist/chat/kit.d.ts.map +1 -0
  34. package/dist/chat/kit.js +123 -0
  35. package/dist/chat/lasting.d.ts +6 -0
  36. package/dist/chat/lasting.d.ts.map +1 -0
  37. package/dist/chat/lasting.js +19 -0
  38. package/dist/chat/list.d.ts +26 -0
  39. package/dist/chat/list.d.ts.map +1 -0
  40. package/dist/chat/list.js +62 -0
  41. package/dist/chat/markdown.d.ts +20 -0
  42. package/dist/chat/markdown.d.ts.map +1 -0
  43. package/dist/chat/markdown.js +188 -0
  44. package/dist/chat/message.d.ts +6 -0
  45. package/dist/chat/message.d.ts.map +1 -0
  46. package/dist/chat/message.js +192 -0
  47. package/dist/chat/messages.d.ts +21 -0
  48. package/dist/chat/messages.d.ts.map +1 -0
  49. package/dist/chat/messages.js +151 -0
  50. package/dist/chat/name.d.ts +6 -0
  51. package/dist/chat/name.d.ts.map +1 -0
  52. package/dist/chat/name.js +37 -0
  53. package/dist/chat/opened.d.ts +11 -0
  54. package/dist/chat/opened.d.ts.map +1 -0
  55. package/dist/chat/opened.js +17 -0
  56. package/dist/chat/overlay.d.ts +31 -0
  57. package/dist/chat/overlay.d.ts.map +1 -0
  58. package/dist/chat/overlay.js +97 -0
  59. package/dist/chat/parts.d.ts +57 -0
  60. package/dist/chat/parts.d.ts.map +1 -0
  61. package/dist/chat/parts.js +119 -0
  62. package/dist/chat/process.d.ts +20 -0
  63. package/dist/chat/process.d.ts.map +1 -0
  64. package/dist/chat/process.js +32 -0
  65. package/dist/chat/provider.d.ts +63 -0
  66. package/dist/chat/provider.d.ts.map +1 -0
  67. package/dist/chat/provider.js +620 -0
  68. package/dist/chat/question.d.ts +9 -0
  69. package/dist/chat/question.d.ts.map +1 -0
  70. package/dist/chat/question.js +80 -0
  71. package/dist/chat/questions.d.ts +31 -0
  72. package/dist/chat/questions.d.ts.map +1 -0
  73. package/dist/chat/questions.js +111 -0
  74. package/dist/chat/read.d.ts +5 -0
  75. package/dist/chat/read.d.ts.map +1 -0
  76. package/dist/chat/read.js +13 -0
  77. package/dist/chat/ready.d.ts +33 -0
  78. package/dist/chat/ready.d.ts.map +1 -0
  79. package/dist/chat/ready.js +91 -0
  80. package/dist/chat/style.d.ts +4 -0
  81. package/dist/chat/style.d.ts.map +1 -0
  82. package/dist/chat/style.js +302 -0
  83. package/dist/chat.d.ts +14 -0
  84. package/dist/chat.d.ts.map +1 -0
  85. package/dist/chat.js +8 -0
  86. package/dist/client.d.ts +23 -11
  87. package/dist/client.d.ts.map +1 -1
  88. package/dist/client.js +67 -16
  89. package/dist/collection.d.ts +21 -12
  90. package/dist/collection.d.ts.map +1 -1
  91. package/dist/collection.js +271 -23
  92. package/dist/connection.d.ts +41 -15
  93. package/dist/connection.d.ts.map +1 -1
  94. package/dist/connection.js +1631 -378
  95. package/dist/conversation.d.ts +24 -10
  96. package/dist/conversation.d.ts.map +1 -1
  97. package/dist/conversation.js +307 -136
  98. package/dist/durability.d.ts +7 -1
  99. package/dist/durability.d.ts.map +1 -1
  100. package/dist/entry.d.ts +17 -0
  101. package/dist/entry.d.ts.map +1 -0
  102. package/dist/entry.js +156 -0
  103. package/dist/expectation.d.ts +21 -0
  104. package/dist/expectation.d.ts.map +1 -0
  105. package/dist/expectation.js +70 -0
  106. package/dist/failure.d.ts +13 -0
  107. package/dist/failure.d.ts.map +1 -0
  108. package/dist/failure.js +19 -0
  109. package/dist/fence.d.ts +6 -0
  110. package/dist/fence.d.ts.map +1 -0
  111. package/dist/fence.js +10 -0
  112. package/dist/host.d.ts +13 -2
  113. package/dist/host.d.ts.map +1 -1
  114. package/dist/host.js +48 -14
  115. package/dist/identity.d.ts +5 -0
  116. package/dist/identity.d.ts.map +1 -1
  117. package/dist/identity.js +19 -1
  118. package/dist/index.d.ts +14 -7
  119. package/dist/index.d.ts.map +1 -1
  120. package/dist/index.js +4 -0
  121. package/dist/memory.d.ts +6 -3
  122. package/dist/memory.d.ts.map +1 -1
  123. package/dist/memory.js +70 -22
  124. package/dist/model.d.ts +4 -2
  125. package/dist/model.d.ts.map +1 -1
  126. package/dist/model.js +9 -0
  127. package/dist/observation.d.ts +5 -2
  128. package/dist/observation.d.ts.map +1 -1
  129. package/dist/observation.js +22 -11
  130. package/dist/open.d.ts +2 -0
  131. package/dist/open.d.ts.map +1 -0
  132. package/dist/open.js +1 -0
  133. package/dist/outcome.d.ts +32 -3
  134. package/dist/outcome.d.ts.map +1 -1
  135. package/dist/outcome.js +42 -1
  136. package/dist/overlay.d.ts +15 -3
  137. package/dist/overlay.d.ts.map +1 -1
  138. package/dist/overlay.js +94 -77
  139. package/dist/query.d.ts +32 -3
  140. package/dist/query.d.ts.map +1 -1
  141. package/dist/query.js +5 -31
  142. package/dist/reach.d.ts +8 -2
  143. package/dist/reach.d.ts.map +1 -1
  144. package/dist/reach.js +60 -24
  145. package/dist/react.d.ts +28 -17
  146. package/dist/react.d.ts.map +1 -1
  147. package/dist/react.js +8 -6
  148. package/dist/read-side.d.ts +13 -6
  149. package/dist/read-side.d.ts.map +1 -1
  150. package/dist/read-side.js +291 -85
  151. package/dist/readiness.d.ts +53 -0
  152. package/dist/readiness.d.ts.map +1 -0
  153. package/dist/readiness.js +33 -0
  154. package/dist/recovery.d.ts +25 -0
  155. package/dist/recovery.d.ts.map +1 -0
  156. package/dist/recovery.js +197 -0
  157. package/dist/refresh.d.ts +10 -0
  158. package/dist/refresh.d.ts.map +1 -1
  159. package/dist/refresh.js +43 -38
  160. package/dist/replica.d.ts +8 -5
  161. package/dist/replica.d.ts.map +1 -1
  162. package/dist/replica.js +115 -67
  163. package/dist/room-draft.d.ts +26 -9
  164. package/dist/room-draft.d.ts.map +1 -1
  165. package/dist/room-draft.js +132 -23
  166. package/dist/rows.d.ts +8 -13
  167. package/dist/rows.d.ts.map +1 -1
  168. package/dist/rows.js +12 -14
  169. package/dist/save.d.ts +31 -1
  170. package/dist/save.d.ts.map +1 -1
  171. package/dist/save.js +376 -45
  172. package/dist/search.d.ts +31 -8
  173. package/dist/search.d.ts.map +1 -1
  174. package/dist/search.js +108 -45
  175. package/dist/shared.d.ts +11 -0
  176. package/dist/shared.d.ts.map +1 -0
  177. package/dist/shared.js +368 -0
  178. package/dist/status.d.ts +6 -2
  179. package/dist/status.d.ts.map +1 -1
  180. package/dist/status.js +0 -8
  181. package/dist/store.d.ts +73 -17
  182. package/dist/store.d.ts.map +1 -1
  183. package/dist/store.js +531 -198
  184. package/dist/turn.d.ts +7 -0
  185. package/dist/turn.d.ts.map +1 -0
  186. package/dist/turn.js +45 -0
  187. package/dist/wire.d.ts +9 -3
  188. package/dist/wire.d.ts.map +1 -1
  189. package/dist/wire.js +17 -2
  190. package/package.json +26 -14
  191. package/dist/attachment.d.ts +0 -3
  192. package/dist/attachment.d.ts.map +0 -1
  193. package/dist/attachment.js +0 -8
package/dist/overlay.js CHANGED
@@ -1,4 +1,19 @@
1
1
  import { apply, parse, serialize } from '@agentshouse/mdmodel';
2
+ import { differing, drafted, patched, settled } from './shared.js';
3
+ export function acceptedBinaries(files) {
4
+ return Object.fromEntries(Object.entries(files).map(([path, file]) => [path, { state: 'accepted', ...file }]));
5
+ }
6
+ export function sameBinary(left, right) {
7
+ if (left === undefined || right === undefined)
8
+ return left === right;
9
+ return (left.state === right.state &&
10
+ left.byteLength === right.byteLength &&
11
+ left.mediaType === right.mediaType &&
12
+ left.sha256 === right.sha256 &&
13
+ (left.state === 'accepted'
14
+ ? right.state === 'accepted' && left.fileRef === right.fileRef
15
+ : right.state === 'pending' && left.localId === right.localId));
16
+ }
2
17
  export function sameChange(left, right) {
3
18
  if (left === undefined || right === undefined)
4
19
  return left === right;
@@ -76,13 +91,15 @@ function edited(document, change, priors) {
76
91
  function edit(staged, change, priors) {
77
92
  const text = staged.documents[change.path];
78
93
  if (text === undefined)
79
- return;
94
+ return false;
80
95
  const parsed = parse(text, change.path);
81
96
  if (!parsed.ok)
82
- return;
97
+ return false;
83
98
  const next = edited(parsed.document, change, priors);
84
- if (next?.outcome === 'applied')
85
- staged.documents[change.path] = serialize(next.document);
99
+ if (next?.outcome !== 'applied')
100
+ return false;
101
+ staged.documents[change.path] = serialize(next.document);
102
+ return true;
86
103
  }
87
104
  function relocate(staged, from, to) {
88
105
  const text = staged.documents[from];
@@ -90,13 +107,15 @@ function relocate(staged, from, to) {
90
107
  delete staged.documents[from];
91
108
  staged.documents[to] = text;
92
109
  }
93
- else if (staged.binaryTargets.delete(from)) {
94
- staged.binaryTargets.add(to);
110
+ else if (staged.binaries[from] !== undefined) {
111
+ staged.binaries[to] = staged.binaries[from];
112
+ delete staged.binaries[from];
95
113
  }
96
114
  else {
97
- return;
115
+ return false;
98
116
  }
99
117
  moveHead(staged, from, to);
118
+ return true;
100
119
  }
101
120
  function moveHead(heads, from, to) {
102
121
  const revision = heads.revisions[from];
@@ -113,62 +132,84 @@ function erase(staged, path) {
113
132
  delete staged.documents[path];
114
133
  delete staged.revisions[path];
115
134
  delete staged.changes[path];
116
- staged.binaryTargets.delete(path);
135
+ delete staged.binaries[path];
117
136
  }
118
137
  function stage(staged, change, priors) {
119
138
  if (change.kind === 'field' || change.kind === 'section' || change.kind === 'preamble') {
120
- edit(staged, change, priors);
121
- return;
139
+ delete staged.revisions[change.path];
140
+ return edit(staged, change, priors);
122
141
  }
123
142
  if (change.kind === 'create') {
124
143
  staged.documents[change.path] =
125
144
  'content' in change ? change.content : compose(change.fields, change.sections);
126
145
  delete staged.changes[change.path];
127
- return;
146
+ return true;
128
147
  }
129
148
  if (change.kind === 'replace') {
149
+ delete staged.revisions[change.path];
130
150
  if (staged.documents[change.path] === undefined)
131
- return;
151
+ return false;
132
152
  staged.documents[change.path] = change.content;
133
- return;
153
+ return true;
154
+ }
155
+ if (change.kind === 'binary') {
156
+ if (staged.documents[change.path] !== undefined)
157
+ return false;
158
+ staged.binaries[change.path] = {
159
+ state: 'pending',
160
+ localId: change.localId,
161
+ byteLength: change.byteLength,
162
+ mediaType: change.mediaType,
163
+ sha256: change.sha256,
164
+ };
165
+ delete staged.revisions[change.path];
166
+ delete staged.changes[change.path];
167
+ return true;
134
168
  }
135
169
  if (change.kind === 'move') {
136
- relocate(staged, change.path, change.to);
137
- return;
170
+ return relocate(staged, change.path, change.to);
138
171
  }
139
172
  erase(staged, change.path);
173
+ return true;
140
174
  }
141
- export function overlay(base, queue) {
175
+ export function overlay(base, queue, unapplied) {
142
176
  const staged = {
143
- documents: { ...base.documents },
144
- binaryTargets: new Set(base.binaryTargets),
145
- revisions: { ...base.revisions },
146
- changes: { ...base.changes },
177
+ documents: drafted(base.documents),
178
+ binaries: drafted(base.binaries),
179
+ revisions: drafted(base.revisions),
180
+ changes: drafted(base.changes),
147
181
  };
148
182
  for (const batch of queue) {
149
183
  const priors = priorsOf(batch.preconditions);
150
- for (const change of batch.changes)
151
- stage(staged, change, priors);
184
+ for (const change of batch.changes) {
185
+ if (!stage(staged, change, priors))
186
+ unapplied?.();
187
+ }
152
188
  }
153
189
  return {
154
- documents: staged.documents,
155
- binaryTargets: [...staged.binaryTargets].sort(),
156
- revisions: staged.revisions,
157
- changes: staged.changes,
190
+ documents: settled(staged.documents),
191
+ binaries: settled(staged.binaries),
192
+ revisions: settled(staged.revisions),
193
+ changes: settled(staged.changes),
158
194
  };
159
195
  }
160
196
  function pathsOf(batch) {
161
197
  return batch.changes.flatMap((change) => change.kind === 'move' ? [change.path, change.to] : [change.path]);
162
198
  }
163
199
  export function sameLayerText(left, right) {
164
- const paths = Object.keys(left.documents);
165
- return (paths.length === Object.keys(right.documents).length &&
166
- paths.every((path) => left.documents[path] === right.documents[path]) &&
167
- left.binaryTargets.length === right.binaryTargets.length &&
168
- left.binaryTargets.every((path) => right.binaryTargets.includes(path)));
200
+ return (differing(left.documents, right.documents).size === 0 &&
201
+ differing(left.binaries, right.binaries, sameBinary).size === 0);
202
+ }
203
+ export function changedPaths(left, right) {
204
+ return new Set([
205
+ ...differing(left.documents, right.documents),
206
+ ...differing(left.revisions, right.revisions),
207
+ ...differing(left.changes, right.changes, sameChange),
208
+ ...differing(left.binaries, right.binaries, sameBinary),
209
+ ]);
169
210
  }
170
211
  function replayHeads(base, queue) {
171
- const heads = { revisions: { ...base.revisions }, changes: { ...base.changes } };
212
+ const heads = { revisions: drafted(base.revisions), changes: drafted(base.changes) };
172
213
  for (const batch of queue) {
173
214
  for (const change of batch.changes) {
174
215
  if (change.kind === 'remove') {
@@ -178,12 +219,22 @@ function replayHeads(base, queue) {
178
219
  else if (change.kind === 'create') {
179
220
  delete heads.changes[change.path];
180
221
  }
222
+ else if (change.kind === 'replace' ||
223
+ change.kind === 'field' ||
224
+ change.kind === 'section' ||
225
+ change.kind === 'preamble') {
226
+ delete heads.revisions[change.path];
227
+ }
228
+ else if (change.kind === 'binary') {
229
+ delete heads.revisions[change.path];
230
+ delete heads.changes[change.path];
231
+ }
181
232
  else if (change.kind === 'move') {
182
233
  moveHead(heads, change.path, change.to);
183
234
  }
184
235
  }
185
236
  }
186
- return heads;
237
+ return { revisions: settled(heads.revisions), changes: settled(heads.changes) };
187
238
  }
188
239
  export function overlayChanged(base, queue, previousBase, previousQueue, previousVisible) {
189
240
  const before = previousQueue.map((batch) => JSON.stringify(batch));
@@ -193,28 +244,11 @@ export function overlayChanged(base, queue, previousBase, previousQueue, previou
193
244
  sameLayerText(base, previousBase)) {
194
245
  return {
195
246
  documents: previousVisible.documents,
196
- binaryTargets: previousVisible.binaryTargets,
247
+ binaries: previousVisible.binaries,
197
248
  ...replayHeads(base, queue),
198
249
  };
199
250
  }
200
- const affected = new Set();
201
- const paths = new Set([
202
- ...Object.keys(base.documents),
203
- ...Object.keys(previousBase.documents),
204
- ...Object.keys(base.revisions),
205
- ...Object.keys(previousBase.revisions),
206
- ...Object.keys(base.changes),
207
- ...Object.keys(previousBase.changes),
208
- ...base.binaryTargets,
209
- ...previousBase.binaryTargets,
210
- ]);
211
- for (const path of paths) {
212
- if (base.documents[path] !== previousBase.documents[path] ||
213
- base.revisions[path] !== previousBase.revisions[path] ||
214
- !sameChange(base.changes[path], previousBase.changes[path]) ||
215
- base.binaryTargets.includes(path) !== previousBase.binaryTargets.includes(path))
216
- affected.add(path);
217
- }
251
+ const affected = new Set(changedPaths(base, previousBase));
218
252
  const oldIds = new Set(before);
219
253
  const newIds = new Set(after);
220
254
  for (const batch of previousQueue) {
@@ -245,6 +279,7 @@ export function overlayChanged(base, queue, previousBase, previousQueue, previou
245
279
  const documents = {};
246
280
  const revisions = {};
247
281
  const changes = {};
282
+ const binaries = {};
248
283
  for (const path of affected) {
249
284
  if (base.documents[path] !== undefined)
250
285
  documents[path] = base.documents[path];
@@ -252,32 +287,14 @@ export function overlayChanged(base, queue, previousBase, previousQueue, previou
252
287
  revisions[path] = base.revisions[path];
253
288
  if (base.changes[path] !== undefined)
254
289
  changes[path] = base.changes[path];
290
+ if (base.binaries[path] !== undefined)
291
+ binaries[path] = base.binaries[path];
255
292
  }
256
- const staged = overlay({
257
- documents,
258
- revisions,
259
- changes,
260
- binaryTargets: base.binaryTargets.filter((path) => affected.has(path)),
261
- }, queue.filter((batch) => pathsOf(batch).some((path) => affected.has(path))));
262
- const mergedDocuments = { ...previousVisible.documents };
263
- const mergedRevisions = { ...previousVisible.revisions };
264
- const mergedChanges = { ...previousVisible.changes };
265
- const mergedTargets = new Set(previousVisible.binaryTargets);
266
- for (const path of affected) {
267
- delete mergedDocuments[path];
268
- delete mergedRevisions[path];
269
- delete mergedChanges[path];
270
- mergedTargets.delete(path);
271
- }
272
- Object.assign(mergedDocuments, staged.documents);
273
- Object.assign(mergedRevisions, staged.revisions);
274
- Object.assign(mergedChanges, staged.changes);
275
- for (const path of staged.binaryTargets)
276
- mergedTargets.add(path);
293
+ const staged = overlay({ documents, revisions, changes, binaries }, queue.filter((batch) => pathsOf(batch).some((path) => affected.has(path))));
277
294
  return {
278
- documents: mergedDocuments,
279
- revisions: mergedRevisions,
280
- changes: mergedChanges,
281
- binaryTargets: [...mergedTargets].sort(),
295
+ documents: patched(previousVisible.documents, Object.entries(staged.documents), affected),
296
+ revisions: patched(previousVisible.revisions, Object.entries(staged.revisions), affected),
297
+ changes: patched(previousVisible.changes, Object.entries(staged.changes), affected),
298
+ binaries: patched(previousVisible.binaries, Object.entries(staged.binaries), affected),
282
299
  };
283
300
  }
package/dist/query.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  import { type Definition } from '@agentshouse/mdmodel';
2
2
  import type { HeadChange } from './adapter.js';
3
+ import type { BinaryFileRecord } from './binary.js';
3
4
  export type Value = string | number | boolean | null;
4
5
  export type Predicate = Value | {
5
6
  $eq: Value;
@@ -93,18 +94,44 @@ export type QueryDocument = {
93
94
  markdown?: string;
94
95
  backlinks?: readonly Backlink[];
95
96
  change?: HeadChange | null;
97
+ binaryFile?: BinaryFileRecord;
96
98
  };
97
99
  export type QueryGroup = {
98
100
  key: readonly unknown[];
99
101
  count: number;
100
102
  };
101
- export type DocumentResult = {
103
+ export type CoveredRoom = {
104
+ room: string;
105
+ generation: string;
106
+ current: boolean;
107
+ };
108
+ export type QueryCoverage = {
109
+ rooms: readonly CoveredRoom[];
110
+ indexes: readonly string[];
111
+ overlay: readonly string[];
112
+ };
113
+ export type Awaits = 'acquisition' | 'preparation' | 'index';
114
+ export type PendingRoom = {
115
+ room: string;
116
+ awaits: Awaits;
117
+ };
118
+ export type PendingResult = {
119
+ pending: readonly PendingRoom[];
120
+ };
121
+ export type DocumentRows = {
102
122
  documents: readonly QueryDocument[];
103
123
  };
104
- export type GroupResult = {
124
+ export type GroupRows = {
105
125
  groups: readonly QueryGroup[];
106
126
  };
107
- export type QueryResult = DocumentResult | GroupResult;
127
+ export type QueryRows = DocumentRows | GroupRows;
128
+ export type DocumentResult = DocumentRows & {
129
+ coverage: QueryCoverage;
130
+ };
131
+ export type GroupResult = GroupRows & {
132
+ coverage: QueryCoverage;
133
+ };
134
+ export type QueryResult = DocumentResult | GroupResult | PendingResult;
108
135
  export type QueryErrorCode = 'invalid-query' | 'unknown-type' | 'unknown-field' | 'wrong-kind';
109
136
  export type RoomFacts = {
110
137
  locator: string;
@@ -204,6 +231,8 @@ export type Plan = {
204
231
  limit: number | null;
205
232
  };
206
233
  export declare class QueryError extends Error {
234
+ readonly code: QueryErrorCode;
235
+ readonly retryable = false;
207
236
  constructor(code: QueryErrorCode, at: string, problem: string);
208
237
  }
209
238
  type Entries = Readonly<Record<string, unknown>>;
@@ -1 +1 @@
1
- {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"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"}
package/dist/query.js CHANGED
@@ -1,9 +1,12 @@
1
- import { ARRAY_INDEX, itemFacts, memberFacts, pointerSegments, } from '@agentshouse/mdmodel';
1
+ import { pointerFacts, } from '@agentshouse/mdmodel';
2
2
  import { referenceField } from './model.js';
3
3
  import { normalize } from './paths.js';
4
4
  export class QueryError extends Error {
5
+ code;
6
+ retryable = false;
5
7
  constructor(code, at, problem) {
6
8
  super(`${code} at ${at}: ${problem}`);
9
+ this.code = code;
7
10
  }
8
11
  }
9
12
  const RANGE = ['$gt', '$gte', '$lt', '$lte'];
@@ -117,39 +120,10 @@ function pointer(input, at) {
117
120
  }
118
121
  return input;
119
122
  }
120
- function stepped({ facts, through, conditional }, token) {
121
- if (facts.type === 'array' && ARRAY_INDEX.test(token)) {
122
- const item = itemFacts(facts, Number(token));
123
- return item === undefined ? undefined : { facts: item, through, conditional };
124
- }
125
- let reached = facts;
126
- let across = through;
127
- while (reached?.type === 'array') {
128
- reached = reached.items;
129
- across = true;
130
- }
131
- const member = reached === undefined ? undefined : memberFacts(reached, token);
132
- return member === undefined
133
- ? undefined
134
- : { facts: member, through: across, conditional: conditional || member.conditional === true };
135
- }
136
- function specAt(type, field) {
137
- let spec = {
138
- facts: { ...type.frontmatter, properties: type.fields },
139
- through: false,
140
- conditional: false,
141
- };
142
- for (const token of pointerSegments(field)) {
143
- if (spec === undefined)
144
- return undefined;
145
- spec = stepped(spec, token);
146
- }
147
- return spec;
148
- }
149
123
  function specs(typed, input, at) {
150
124
  const field = pointer(input, at);
151
125
  const declared = typed.types.flatMap((type) => {
152
- const spec = specAt(type, field);
126
+ const spec = pointerFacts(type, field);
153
127
  return spec === undefined ? [] : [spec];
154
128
  });
155
129
  if (declared.length === 0 && !typed.untyped) {
package/dist/reach.d.ts CHANGED
@@ -1,5 +1,7 @@
1
- import type { MdRuntime, RuntimeTopic } from './connection.js';
1
+ import type { ReferrerScope } from './adapter.js';
2
+ import type { MdRuntime, ReadinessPort, RuntimeTopic } from './connection.js';
2
3
  import type { Plan, PlanReach, QueryResult } from './query.js';
4
+ import type { Readiness } from './readiness.js';
3
5
  import type { SearchResult } from './search.js';
4
6
  export type ReachedDocument = {
5
7
  readonly room: string;
@@ -18,12 +20,16 @@ export type RuntimeView = {
18
20
  };
19
21
  export type NarrowedView = RuntimeView & {
20
22
  narrow(reach: PortReach | null): void;
23
+ facts(port: ReadinessPort): void;
21
24
  };
22
25
  export type Reachable = RuntimeView & {
23
26
  plan(input: unknown, reach: PortReach | null): Plan;
24
27
  query(plan: Plan): Promise<QueryResult>;
25
28
  watchPlan(plan: Plan, deliver: (message: unknown) => void): () => void;
26
29
  search(input: unknown, reach: PortReach | null): Promise<SearchResult>;
30
+ searching(target: string): void;
31
+ watchReadiness(port: ReadinessPort, reach: PortReach | null, deliver: (readiness: Readiness) => void): () => void;
32
+ referrerScope(referrer: unknown): ReferrerScope | null;
27
33
  };
28
34
  export declare function holds(reach: PortReach | null, room: string): boolean;
29
35
  export declare function governs(reach: PortReach | null, room: {
@@ -36,5 +42,5 @@ export declare function governs(reach: PortReach | null, room: {
36
42
  readonly selection: boolean;
37
43
  };
38
44
  export declare function planReach(reach: PortReach | null): PlanReach | null;
39
- export declare function narrowed(runtime: Reachable, given: PortReach | null): NarrowedView;
45
+ export declare function narrowed(runtime: Reachable, given: PortReach | null, told: ReadinessPort): NarrowedView;
40
46
  //# sourceMappingURL=reach.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"reach.d.ts","sourceRoot":"","sources":["../src/reach.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAW,SAAS,EAAe,YAAY,EAAc,MAAM,iBAAiB,CAAC;AAMjG,OAAO,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAI/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAGhD,MAAM,MAAM,eAAe,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAE/E,MAAM,MAAM,SAAS,GAAG;IACtB,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,SAAS,EAAE,SAAS,eAAe,EAAE,CAAC;IAC/C,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,OAAO,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;AAEjD,MAAM,MAAM,KAAK,GAAG,CAClB,KAAK,EAAE,YAAY,EACnB,KAAK,EAAE,SAAS,OAAO,EAAE,EACzB,OAAO,EAAE,OAAO,KACb,MAAM,IAAI,CAAC;AAEhB,MAAM,MAAM,WAAW,GAAG;IAAE,EAAE,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,KAAK,CAAA;CAAE,CAAC;AAE1D,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG;IAAE,MAAM,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,GAAG,IAAI,CAAA;CAAE,CAAC;AAEnF,MAAM,MAAM,SAAS,GAAG,WAAW,GAAG;IACpC,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,GAAG,IAAI,GAAG,IAAI,CAAC;IACpD,KAAK,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IACxC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IACvE,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,GAAG,IAAI,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;CACxE,CAAC;AA2BF,wBAAgB,KAAK,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAMpE;AAMD,wBAAgB,OAAO,CACrB,KAAK,EAAE,SAAS,GAAG,IAAI,EACvB,IAAI,EAAE;IAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,cAAc,EAAE;QAAE,KAAK,EAAE,SAAS,MAAM,EAAE,CAAA;KAAE,GAAG,IAAI,CAAA;CAAE,GAC/F;IAAE,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAU/D;AAcD,wBAAgB,SAAS,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI,CASnE;AA8ED,wBAAgB,QAAQ,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,GAAG,IAAI,GAAG,YAAY,CAgKlF"}
1
+ {"version":3,"file":"reach.d.ts","sourceRoot":"","sources":["../src/reach.ts"],"names":[],"mappings":"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"}
package/dist/reach.js CHANGED
@@ -1,25 +1,26 @@
1
1
  import { unheldView } from './conversation.js';
2
2
  import { modelTypes, NO_MODEL } from './model.js';
3
3
  import { applied, observing } from './observation.js';
4
+ import { runtimeError } from './failure.js';
5
+ import { failure, undeclared, } from './outcome.js';
4
6
  import { beneath } from './paths.js';
5
7
  import { reconciled } from './read-side.js';
6
- import { moveTarget, readParts } from './room-draft.js';
8
+ import { moveTarget, readParts, staleWrite, } from './room-draft.js';
7
9
  import { documentKey } from './rows.js';
8
10
  const UNHELD_TYPES = { collection: modelTypes(NO_MODEL), typedSelection: null };
9
- const UNDECLARED = { kind: 'undeclared' };
10
- function undeclared() {
11
- return Promise.resolve(UNDECLARED);
11
+ function unconversed(name) {
12
+ return () => Promise.resolve(undeclared(name));
12
13
  }
13
14
  const NO_CONVERSATION = {
14
15
  list: () => Promise.resolve([]),
15
16
  read: (conversation) => Promise.resolve(unheldView(conversation)),
16
- create: undeclared,
17
- send: undeclared,
18
- answer: undeclared,
19
- interrupt: undeclared,
20
- kill: undeclared,
21
- cancel: undeclared,
22
- delete: undeclared,
17
+ create: unconversed('conversation.create'),
18
+ send: unconversed('conversation.send'),
19
+ answer: unconversed('conversation.answer'),
20
+ interrupt: unconversed('conversation.interrupt'),
21
+ kill: unconversed('conversation.kill'),
22
+ cancel: unconversed('conversation.cancel'),
23
+ delete: unconversed('conversation.delete'),
23
24
  };
24
25
  const NO_CHAT_DRAFT = {
25
26
  write: () => Promise.resolve(),
@@ -51,6 +52,20 @@ function covers(reach, room, path) {
51
52
  function conversing(reach) {
52
53
  return reach === null || reach.conversations;
53
54
  }
55
+ function refers(reach, scope) {
56
+ if (reach === null)
57
+ return true;
58
+ if (scope === null)
59
+ return false;
60
+ if (scope.kind === 'conversations')
61
+ return reach.conversations;
62
+ return scope.path === undefined
63
+ ? wholly(reach, scope.locator)
64
+ : covers(reach, scope.locator, scope.path);
65
+ }
66
+ function unreachedReference(fileRef) {
67
+ return { kind: 'absent', code: 'binary-file-absent', fields: { fileRef }, retryable: false };
68
+ }
54
69
  export function planReach(reach) {
55
70
  return reach === null
56
71
  ? null
@@ -88,7 +103,7 @@ function shownDraft(reach, draft) {
88
103
  function writeWithin(reach, write) {
89
104
  return write.outcome === 'written'
90
105
  ? { outcome: 'written', roomDraft: shownDraft(reach, write.roomDraft) }
91
- : { outcome: 'stale', current: shownDraft(reach, write.current) };
106
+ : staleWrite(shownDraft(reach, write.current));
92
107
  }
93
108
  function savedWithin(reach, room, result) {
94
109
  if (reach === null || result.outcome === 'saved')
@@ -107,7 +122,7 @@ function savedWithin(reach, room, result) {
107
122
  function statusWithin(reach, status) {
108
123
  return {
109
124
  ...status,
110
- attentionRequired: status.attentionRequired.filter((entry) => covers(reach, entry.room, entry.path)),
125
+ attentionRequired: status.attentionRequired.filter((entry) => 'refusal' in entry ? wholly(reach, entry.room) : covers(reach, entry.room, entry.path)),
111
126
  };
112
127
  }
113
128
  function queueWithin(reach, room, entries) {
@@ -115,11 +130,12 @@ function queueWithin(reach, room, entries) {
115
130
  (change.kind !== 'move' || covers(reach, room, change.to))));
116
131
  }
117
132
  function unreached(room) {
118
- return new Error(`No Local Replica for ${room}`);
133
+ return runtimeError('room-not-held', `No Local Replica for ${room}`);
119
134
  }
120
- export function narrowed(runtime, given) {
135
+ export function narrowed(runtime, given, told) {
121
136
  const { md, watch } = runtime;
122
137
  let reach = given;
138
+ let port = told;
123
139
  const open = new Set();
124
140
  function following(begin) {
125
141
  let stop = begin();
@@ -137,6 +153,9 @@ export function narrowed(runtime, given) {
137
153
  if (topic === 'rooms') {
138
154
  return following(() => watch(topic, input, (rooms) => deliver(roomsWithin(reach, rooms))));
139
155
  }
156
+ if (topic === 'readiness') {
157
+ return following(() => runtime.watchReadiness(port, reach, deliver));
158
+ }
140
159
  if (topic === 'sync-status') {
141
160
  return following(() => watch(topic, input, (status) => deliver(statusWithin(reach, status))));
142
161
  }
@@ -174,7 +193,7 @@ export function narrowed(runtime, given) {
174
193
  if (next === null)
175
194
  return;
176
195
  held = next.keyed;
177
- deliver(next.change);
196
+ deliver(next.message);
178
197
  });
179
198
  });
180
199
  }
@@ -186,7 +205,7 @@ export function narrowed(runtime, given) {
186
205
  return () => { };
187
206
  });
188
207
  }
189
- if (topic === 'conversations') {
208
+ if (topic === 'conversations' || topic === 'agents') {
190
209
  return following(() => {
191
210
  if (conversing(reach))
192
211
  return watch(topic, input, deliver);
@@ -202,7 +221,10 @@ export function narrowed(runtime, given) {
202
221
  ...md,
203
222
  rooms: () => roomsWithin(reach, md.rooms()),
204
223
  query: ((input) => runtime.query(runtime.plan(input, reach))),
205
- search: (input) => runtime.search(input, reach),
224
+ search(input) {
225
+ runtime.searching(port.target);
226
+ return runtime.search(input, reach);
227
+ },
206
228
  types(room) {
207
229
  if (wholly(reach, room))
208
230
  return md.types(room);
@@ -216,13 +238,22 @@ export function narrowed(runtime, given) {
216
238
  throw unreached(room);
217
239
  const outside = roomDrafts.find(({ path }) => !covers(reach, room, path) ||
218
240
  !moves(reach, room, md.roomDraft.read(room, path)?.parts.move));
219
- if (outside !== undefined)
220
- return { outcome: 'refused', rule: 'stale', file: outside.path };
241
+ if (outside !== undefined) {
242
+ return { outcome: 'refused', code: 'stale', retryable: false, file: outside.path };
243
+ }
221
244
  return savedWithin(reach, room, await md.save(room, roomDrafts, writtenBy));
222
245
  },
223
246
  history: (room, path, query) => covers(reach, room, path)
224
247
  ? md.history(room, path, query)
225
- : Promise.resolve({ kind: 'room-not-readable', locator: room }),
248
+ : Promise.resolve(failure({ kind: 'room-not-readable', locator: room })),
249
+ binaryFile: {
250
+ read: (room, path, revision) => covers(reach, room, path)
251
+ ? md.binaryFile.read(room, path, revision)
252
+ : Promise.resolve(failure({ kind: 'room-not-readable', locator: room })),
253
+ readReference: (reference) => refers(reach, runtime.referrerScope(reference.referrer))
254
+ ? md.binaryFile.readReference(reference)
255
+ : Promise.resolve(unreachedReference(reference.fileRef)),
256
+ },
226
257
  reached: (room, roomVersion, path) => (path === undefined ? wholly(reach, room) : covers(reach, room, path)) &&
227
258
  md.reached(room, roomVersion, path),
228
259
  log: () => (reach === null ? md.log() : ''),
@@ -237,7 +268,7 @@ export function narrowed(runtime, given) {
237
268
  },
238
269
  async discard(room, path, revision) {
239
270
  if (!covers(reach, room, path))
240
- return { outcome: 'stale', current: null };
271
+ return staleWrite(null);
241
272
  return writeWithin(reach, await md.roomDraft.discard(room, path, revision));
242
273
  },
243
274
  },
@@ -245,7 +276,7 @@ export function narrowed(runtime, given) {
245
276
  list: () => conversation().list(),
246
277
  read: (id, options) => conversation().read(id, options),
247
278
  create: (input) => conversation().create(input),
248
- send: (id) => conversation().send(id),
279
+ send: (id, operation, draft) => conversation().send(id, operation, draft),
249
280
  answer: (id, answer) => conversation().answer(id, answer),
250
281
  interrupt: (id) => conversation().interrupt(id),
251
282
  kill: (id) => conversation().kill(id),
@@ -253,7 +284,7 @@ export function narrowed(runtime, given) {
253
284
  delete: (id) => conversation().delete(id),
254
285
  },
255
286
  chatDraft: {
256
- write: (id, draft) => chatDraft().write(id, draft),
287
+ write: (id, draft, revision) => chatDraft().write(id, draft, revision),
257
288
  discard: (id) => chatDraft().discard(id),
258
289
  },
259
290
  observe: observing(within),
@@ -266,5 +297,10 @@ export function narrowed(runtime, given) {
266
297
  for (const restart of [...open])
267
298
  restart();
268
299
  },
300
+ facts(next) {
301
+ port = next;
302
+ for (const restart of [...open])
303
+ restart();
304
+ },
269
305
  };
270
306
  }