@agentshouse/mdruntime 0.1.0-alpha.9 → 0.1.0-c0105dbd22806

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 +299 -0
  2. package/README.md +54 -0
  3. package/dist/adapter.d.ts +246 -40
  4. package/dist/adapter.d.ts.map +1 -1
  5. package/dist/adapter.js +1 -10
  6. package/dist/attached-model.d.ts +11 -0
  7. package/dist/attached-model.d.ts.map +1 -0
  8. package/dist/attached-model.js +47 -0
  9. package/dist/attempt.d.ts +16 -0
  10. package/dist/attempt.d.ts.map +1 -0
  11. package/dist/attempt.js +70 -0
  12. package/dist/binary.d.ts +23 -0
  13. package/dist/binary.d.ts.map +1 -0
  14. package/dist/binary.js +8 -0
  15. package/dist/bootstrap.d.ts +17 -7
  16. package/dist/bootstrap.d.ts.map +1 -1
  17. package/dist/bootstrap.js +97 -41
  18. package/dist/change-set.d.ts +33 -0
  19. package/dist/change-set.d.ts.map +1 -0
  20. package/dist/change-set.js +90 -0
  21. package/dist/change.d.ts +24 -0
  22. package/dist/change.d.ts.map +1 -1
  23. package/dist/change.js +31 -5
  24. package/dist/chat/acts.d.ts +34 -0
  25. package/dist/chat/acts.d.ts.map +1 -0
  26. package/dist/chat/acts.js +36 -0
  27. package/dist/chat/context.d.ts +3 -0
  28. package/dist/chat/context.d.ts.map +1 -0
  29. package/dist/chat/context.js +10 -0
  30. package/dist/chat/input.d.ts +9 -0
  31. package/dist/chat/input.d.ts.map +1 -0
  32. package/dist/chat/input.js +99 -0
  33. package/dist/chat/kit.d.ts +60 -0
  34. package/dist/chat/kit.d.ts.map +1 -0
  35. package/dist/chat/kit.js +123 -0
  36. package/dist/chat/lasting.d.ts +6 -0
  37. package/dist/chat/lasting.d.ts.map +1 -0
  38. package/dist/chat/lasting.js +19 -0
  39. package/dist/chat/list.d.ts +26 -0
  40. package/dist/chat/list.d.ts.map +1 -0
  41. package/dist/chat/list.js +62 -0
  42. package/dist/chat/markdown.d.ts +20 -0
  43. package/dist/chat/markdown.d.ts.map +1 -0
  44. package/dist/chat/markdown.js +188 -0
  45. package/dist/chat/message.d.ts +6 -0
  46. package/dist/chat/message.d.ts.map +1 -0
  47. package/dist/chat/message.js +192 -0
  48. package/dist/chat/messages.d.ts +21 -0
  49. package/dist/chat/messages.d.ts.map +1 -0
  50. package/dist/chat/messages.js +151 -0
  51. package/dist/chat/name.d.ts +6 -0
  52. package/dist/chat/name.d.ts.map +1 -0
  53. package/dist/chat/name.js +37 -0
  54. package/dist/chat/opened.d.ts +11 -0
  55. package/dist/chat/opened.d.ts.map +1 -0
  56. package/dist/chat/opened.js +17 -0
  57. package/dist/chat/overlay.d.ts +31 -0
  58. package/dist/chat/overlay.d.ts.map +1 -0
  59. package/dist/chat/overlay.js +97 -0
  60. package/dist/chat/parts.d.ts +57 -0
  61. package/dist/chat/parts.d.ts.map +1 -0
  62. package/dist/chat/parts.js +119 -0
  63. package/dist/chat/process.d.ts +20 -0
  64. package/dist/chat/process.d.ts.map +1 -0
  65. package/dist/chat/process.js +32 -0
  66. package/dist/chat/provider.d.ts +63 -0
  67. package/dist/chat/provider.d.ts.map +1 -0
  68. package/dist/chat/provider.js +645 -0
  69. package/dist/chat/question.d.ts +9 -0
  70. package/dist/chat/question.d.ts.map +1 -0
  71. package/dist/chat/question.js +80 -0
  72. package/dist/chat/questions.d.ts +31 -0
  73. package/dist/chat/questions.d.ts.map +1 -0
  74. package/dist/chat/questions.js +111 -0
  75. package/dist/chat/read.d.ts +5 -0
  76. package/dist/chat/read.d.ts.map +1 -0
  77. package/dist/chat/read.js +13 -0
  78. package/dist/chat/ready.d.ts +33 -0
  79. package/dist/chat/ready.d.ts.map +1 -0
  80. package/dist/chat/ready.js +91 -0
  81. package/dist/chat/style.d.ts +4 -0
  82. package/dist/chat/style.d.ts.map +1 -0
  83. package/dist/chat/style.js +302 -0
  84. package/dist/chat.d.ts +14 -0
  85. package/dist/chat.d.ts.map +1 -0
  86. package/dist/chat.js +8 -0
  87. package/dist/client.d.ts +49 -33
  88. package/dist/client.d.ts.map +1 -1
  89. package/dist/client.js +164 -183
  90. package/dist/collection.d.ts +9 -17
  91. package/dist/collection.d.ts.map +1 -1
  92. package/dist/collection.js +83 -89
  93. package/dist/connection.d.ts +66 -48
  94. package/dist/connection.d.ts.map +1 -1
  95. package/dist/connection.js +1964 -1173
  96. package/dist/conversation.d.ts +65 -24
  97. package/dist/conversation.d.ts.map +1 -1
  98. package/dist/conversation.js +675 -334
  99. package/dist/durability.js +6 -6
  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/file.d.ts +2 -2
  113. package/dist/file.d.ts.map +1 -1
  114. package/dist/file.js +48 -71
  115. package/dist/host.d.ts +15 -3
  116. package/dist/host.d.ts.map +1 -1
  117. package/dist/host.js +109 -127
  118. package/dist/identity.d.ts +4 -0
  119. package/dist/identity.d.ts.map +1 -1
  120. package/dist/identity.js +22 -9
  121. package/dist/index.d.ts +17 -11
  122. package/dist/index.d.ts.map +1 -1
  123. package/dist/index.js +4 -3
  124. package/dist/log.js +5 -6
  125. package/dist/memory.d.ts +19 -8
  126. package/dist/memory.d.ts.map +1 -1
  127. package/dist/memory.js +304 -216
  128. package/dist/model.d.ts +16 -30
  129. package/dist/model.d.ts.map +1 -1
  130. package/dist/model.js +21 -21
  131. package/dist/observation.d.ts +27 -0
  132. package/dist/observation.d.ts.map +1 -0
  133. package/dist/observation.js +95 -0
  134. package/dist/open.d.ts +2 -0
  135. package/dist/open.d.ts.map +1 -0
  136. package/dist/open.js +1 -0
  137. package/dist/outcome.d.ts +37 -31
  138. package/dist/outcome.d.ts.map +1 -1
  139. package/dist/outcome.js +36 -18
  140. package/dist/overlay.d.ts +22 -4
  141. package/dist/overlay.d.ts.map +1 -1
  142. package/dist/overlay.js +236 -54
  143. package/dist/paths.d.ts +0 -2
  144. package/dist/paths.d.ts.map +1 -1
  145. package/dist/paths.js +6 -29
  146. package/dist/query.d.ts +219 -10
  147. package/dist/query.d.ts.map +1 -1
  148. package/dist/query.js +462 -15
  149. package/dist/reach.d.ts +42 -0
  150. package/dist/reach.d.ts.map +1 -0
  151. package/dist/reach.js +294 -0
  152. package/dist/react.d.ts +41 -0
  153. package/dist/react.d.ts.map +1 -0
  154. package/dist/react.js +64 -0
  155. package/dist/read-side.d.ts +18 -0
  156. package/dist/read-side.d.ts.map +1 -0
  157. package/dist/read-side.js +440 -0
  158. package/dist/refresh.d.ts +15 -5
  159. package/dist/refresh.d.ts.map +1 -1
  160. package/dist/refresh.js +64 -41
  161. package/dist/replica.d.ts +28 -5
  162. package/dist/replica.d.ts.map +1 -1
  163. package/dist/replica.js +249 -40
  164. package/dist/room-draft.d.ts +144 -0
  165. package/dist/room-draft.d.ts.map +1 -0
  166. package/dist/room-draft.js +438 -0
  167. package/dist/rows.d.ts +46 -0
  168. package/dist/rows.d.ts.map +1 -0
  169. package/dist/rows.js +145 -0
  170. package/dist/save.d.ts +33 -5
  171. package/dist/save.d.ts.map +1 -1
  172. package/dist/save.js +630 -366
  173. package/dist/search.d.ts +62 -0
  174. package/dist/search.d.ts.map +1 -0
  175. package/dist/search.js +125 -0
  176. package/dist/status.d.ts +6 -8
  177. package/dist/status.d.ts.map +1 -1
  178. package/dist/status.js +8 -20
  179. package/dist/store.d.ts +89 -34
  180. package/dist/store.d.ts.map +1 -1
  181. package/dist/store.js +513 -132
  182. package/dist/transfer.d.ts +5 -0
  183. package/dist/transfer.d.ts.map +1 -1
  184. package/dist/transfer.js +1 -5
  185. package/dist/wire.d.ts +59 -19
  186. package/dist/wire.d.ts.map +1 -1
  187. package/dist/wire.js +88 -105
  188. package/package.json +34 -16
  189. package/dist/adapter.js.map +0 -1
  190. package/dist/bootstrap.js.map +0 -1
  191. package/dist/change.js.map +0 -1
  192. package/dist/client.js.map +0 -1
  193. package/dist/collection.js.map +0 -1
  194. package/dist/connection.js.map +0 -1
  195. package/dist/conversation.js.map +0 -1
  196. package/dist/durability.js.map +0 -1
  197. package/dist/file.js.map +0 -1
  198. package/dist/host.js.map +0 -1
  199. package/dist/identity.js.map +0 -1
  200. package/dist/index.js.map +0 -1
  201. package/dist/log.js.map +0 -1
  202. package/dist/memory.js.map +0 -1
  203. package/dist/model.js.map +0 -1
  204. package/dist/outcome.js.map +0 -1
  205. package/dist/overlay.js.map +0 -1
  206. package/dist/paths.js.map +0 -1
  207. package/dist/query.js.map +0 -1
  208. package/dist/refresh.js.map +0 -1
  209. package/dist/replica.js.map +0 -1
  210. package/dist/save.js.map +0 -1
  211. package/dist/status.js.map +0 -1
  212. package/dist/store.js.map +0 -1
  213. package/dist/transfer.js.map +0 -1
  214. package/dist/wire.js.map +0 -1
package/dist/overlay.js CHANGED
@@ -1,4 +1,26 @@
1
1
  import { apply, parse, serialize } from '@agentshouse/mdmodel';
2
+ export function acceptedBinaries(files) {
3
+ return Object.fromEntries(Object.entries(files).map(([path, file]) => [path, { state: 'accepted', ...file }]));
4
+ }
5
+ export function sameBinary(left, right) {
6
+ if (left === undefined || right === undefined)
7
+ return left === right;
8
+ return (left.state === right.state &&
9
+ left.byteLength === right.byteLength &&
10
+ left.mediaType === right.mediaType &&
11
+ left.sha256 === right.sha256 &&
12
+ (left.state === 'accepted'
13
+ ? right.state === 'accepted' && left.fileRef === right.fileRef
14
+ : right.state === 'pending' && left.localId === right.localId));
15
+ }
16
+ export function sameChange(left, right) {
17
+ if (left === undefined || right === undefined)
18
+ return left === right;
19
+ return (left.time === right.time &&
20
+ left.author?.kind === right.author?.kind &&
21
+ left.author?.id === right.author?.id &&
22
+ left.author?.name === right.author?.name);
23
+ }
2
24
  const EMPTY_FRONTMATTER = '---\n---\n';
3
25
  function at(path, name) {
4
26
  return `${path} ${name}`;
@@ -7,7 +29,7 @@ function priorsOf(preconditions) {
7
29
  const fields = new Map();
8
30
  const sections = new Map();
9
31
  const preambles = new Map();
10
- for (const precondition of preconditions){
32
+ for (const precondition of preconditions) {
11
33
  if (precondition.kind === 'field') {
12
34
  fields.set(at(precondition.path, precondition.name), precondition.value);
13
35
  }
@@ -19,25 +41,24 @@ function priorsOf(preconditions) {
19
41
  }
20
42
  }
21
43
  return {
22
- field: (path, name)=>fields.get(at(path, name)),
23
- section: (path, name)=>sections.get(at(path, name)) ?? '',
24
- preamble: (path)=>preambles.get(path) ?? ''
44
+ field: (path, name) => fields.get(at(path, name)),
45
+ section: (path, name) => sections.get(at(path, name)) ?? '',
46
+ preamble: (path) => preambles.get(path) ?? '',
25
47
  };
26
48
  }
27
49
  function compose(fields, sections) {
28
- const body = Object.entries(sections).map(([name, value])=>`\n## ${name}\n${value}`).join('');
50
+ const body = Object.entries(sections)
51
+ .map(([name, value]) => `\n## ${name}\n${value}`)
52
+ .join('');
29
53
  const skeleton = `${EMPTY_FRONTMATTER}${body}`;
30
54
  const opened = parse(skeleton);
31
- if (!opened.ok) return skeleton;
55
+ if (!opened.ok)
56
+ return skeleton;
32
57
  let document = opened.document;
33
- for (const [name, value] of Object.entries(fields)){
34
- const next = apply(document, {
35
- kind: 'field',
36
- name,
37
- value,
38
- prior: undefined
39
- });
40
- if (next.outcome === 'applied') document = next.document;
58
+ for (const [name, value] of Object.entries(fields)) {
59
+ const next = apply(document, { kind: 'field', name, value, prior: undefined });
60
+ if (next.outcome === 'applied')
61
+ document = next.document;
41
62
  }
42
63
  return serialize(document);
43
64
  }
@@ -47,93 +68,254 @@ function edited(document, change, priors) {
47
68
  kind: 'field',
48
69
  name: change.name,
49
70
  value: change.value,
50
- prior: priors.field(change.path, change.name)
71
+ prior: priors.field(change.path, change.name),
51
72
  });
52
73
  }
53
74
  if (change.kind === 'preamble') {
54
75
  return apply(document, {
55
76
  kind: 'preamble',
56
77
  value: change.value,
57
- prior: priors.preamble(change.path)
78
+ prior: priors.preamble(change.path),
58
79
  });
59
80
  }
60
- if (change.kind !== 'section') return null;
81
+ if (change.kind !== 'section')
82
+ return null;
61
83
  return apply(document, {
62
84
  kind: 'section',
63
85
  name: change.name,
64
86
  value: change.value,
65
- prior: priors.section(change.path, change.name)
87
+ prior: priors.section(change.path, change.name),
66
88
  });
67
89
  }
68
90
  function edit(staged, change, priors) {
69
91
  const text = staged.documents[change.path];
70
- if (text === undefined) return;
92
+ if (text === undefined)
93
+ return false;
71
94
  const parsed = parse(text, change.path);
72
- if (!parsed.ok) return;
95
+ if (!parsed.ok)
96
+ return false;
73
97
  const next = edited(parsed.document, change, priors);
74
- if (next?.outcome === 'applied') staged.documents[change.path] = serialize(next.document);
98
+ if (next?.outcome !== 'applied')
99
+ return false;
100
+ staged.documents[change.path] = serialize(next.document);
101
+ return true;
75
102
  }
76
103
  function relocate(staged, from, to) {
77
104
  const text = staged.documents[from];
78
105
  if (text !== undefined) {
79
106
  delete staged.documents[from];
80
107
  staged.documents[to] = text;
81
- } else if (staged.binaryTargets.delete(from)) {
82
- staged.binaryTargets.add(to);
83
- } else {
84
- return;
85
108
  }
86
- const revision = staged.revisions[from];
87
- if (revision === undefined) return;
88
- delete staged.revisions[from];
89
- staged.revisions[to] = revision;
109
+ else if (staged.binaries[from] !== undefined) {
110
+ staged.binaries[to] = staged.binaries[from];
111
+ delete staged.binaries[from];
112
+ }
113
+ else {
114
+ return false;
115
+ }
116
+ moveHead(staged, from, to);
117
+ return true;
118
+ }
119
+ function moveHead(heads, from, to) {
120
+ const revision = heads.revisions[from];
121
+ const change = heads.changes[from];
122
+ delete heads.revisions[from];
123
+ delete heads.changes[from];
124
+ delete heads.changes[to];
125
+ if (revision !== undefined)
126
+ heads.revisions[to] = revision;
127
+ if (change !== undefined)
128
+ heads.changes[to] = change;
90
129
  }
91
130
  function erase(staged, path) {
92
131
  delete staged.documents[path];
93
132
  delete staged.revisions[path];
94
- staged.binaryTargets.delete(path);
133
+ delete staged.changes[path];
134
+ delete staged.binaries[path];
95
135
  }
96
136
  function stage(staged, change, priors) {
97
137
  if (change.kind === 'field' || change.kind === 'section' || change.kind === 'preamble') {
98
- edit(staged, change, priors);
99
- return;
138
+ return edit(staged, change, priors);
100
139
  }
101
140
  if (change.kind === 'create') {
102
- staged.documents[change.path] = compose(change.fields, change.sections);
103
- return;
141
+ staged.documents[change.path] =
142
+ 'content' in change ? change.content : compose(change.fields, change.sections);
143
+ delete staged.changes[change.path];
144
+ return true;
104
145
  }
105
146
  if (change.kind === 'replace') {
106
- if (staged.documents[change.path] === undefined) return;
147
+ if (staged.documents[change.path] === undefined)
148
+ return false;
107
149
  staged.documents[change.path] = change.content;
108
- return;
150
+ return true;
151
+ }
152
+ if (change.kind === 'binary') {
153
+ if (staged.documents[change.path] !== undefined)
154
+ return false;
155
+ staged.binaries[change.path] = {
156
+ state: 'pending',
157
+ localId: change.localId,
158
+ byteLength: change.byteLength,
159
+ mediaType: change.mediaType,
160
+ sha256: change.sha256,
161
+ };
162
+ delete staged.revisions[change.path];
163
+ delete staged.changes[change.path];
164
+ return true;
109
165
  }
110
166
  if (change.kind === 'move') {
111
- relocate(staged, change.path, change.to);
112
- return;
167
+ return relocate(staged, change.path, change.to);
113
168
  }
114
169
  erase(staged, change.path);
170
+ return true;
115
171
  }
116
- export function overlay(base, queue) {
172
+ export function overlay(base, queue, unapplied) {
117
173
  const staged = {
118
- documents: {
119
- ...base.documents
120
- },
121
- binaryTargets: new Set(base.binaryTargets),
122
- revisions: {
123
- ...base.revisions
124
- }
174
+ documents: { ...base.documents },
175
+ binaries: { ...base.binaries },
176
+ revisions: { ...base.revisions },
177
+ changes: { ...base.changes },
125
178
  };
126
- for (const batch of queue){
179
+ for (const batch of queue) {
127
180
  const priors = priorsOf(batch.preconditions);
128
- for (const change of batch.changes)stage(staged, change, priors);
181
+ for (const change of batch.changes) {
182
+ if (!stage(staged, change, priors))
183
+ unapplied?.();
184
+ }
129
185
  }
130
186
  return {
131
187
  documents: staged.documents,
132
- binaryTargets: [
133
- ...staged.binaryTargets
134
- ].sort(),
135
- revisions: staged.revisions
188
+ binaries: staged.binaries,
189
+ revisions: staged.revisions,
190
+ changes: staged.changes,
191
+ };
192
+ }
193
+ function pathsOf(batch) {
194
+ return batch.changes.flatMap((change) => change.kind === 'move' ? [change.path, change.to] : [change.path]);
195
+ }
196
+ export function sameLayerText(left, right) {
197
+ const paths = Object.keys(left.documents);
198
+ return (paths.length === Object.keys(right.documents).length &&
199
+ paths.every((path) => left.documents[path] === right.documents[path]) &&
200
+ sameBinaries(left.binaries, right.binaries));
201
+ }
202
+ function sameBinaries(left, right) {
203
+ const paths = Object.keys(left);
204
+ return (paths.length === Object.keys(right).length &&
205
+ paths.every((path) => sameBinary(left[path], right[path])));
206
+ }
207
+ function replayHeads(base, queue) {
208
+ const heads = { revisions: { ...base.revisions }, changes: { ...base.changes } };
209
+ for (const batch of queue) {
210
+ for (const change of batch.changes) {
211
+ if (change.kind === 'remove') {
212
+ delete heads.revisions[change.path];
213
+ delete heads.changes[change.path];
214
+ }
215
+ else if (change.kind === 'create') {
216
+ delete heads.changes[change.path];
217
+ }
218
+ else if (change.kind === 'binary') {
219
+ delete heads.revisions[change.path];
220
+ delete heads.changes[change.path];
221
+ }
222
+ else if (change.kind === 'move') {
223
+ moveHead(heads, change.path, change.to);
224
+ }
225
+ }
226
+ }
227
+ return heads;
228
+ }
229
+ export function overlayChanged(base, queue, previousBase, previousQueue, previousVisible) {
230
+ const before = previousQueue.map((batch) => JSON.stringify(batch));
231
+ const after = queue.map((batch) => JSON.stringify(batch));
232
+ if (before.length === after.length &&
233
+ before.every((id, index) => id === after[index]) &&
234
+ sameLayerText(base, previousBase)) {
235
+ return {
236
+ documents: previousVisible.documents,
237
+ binaries: previousVisible.binaries,
238
+ ...replayHeads(base, queue),
239
+ };
240
+ }
241
+ const affected = new Set();
242
+ const paths = new Set([
243
+ ...Object.keys(base.documents),
244
+ ...Object.keys(previousBase.documents),
245
+ ...Object.keys(base.revisions),
246
+ ...Object.keys(previousBase.revisions),
247
+ ...Object.keys(base.changes),
248
+ ...Object.keys(previousBase.changes),
249
+ ...Object.keys(base.binaries),
250
+ ...Object.keys(previousBase.binaries),
251
+ ]);
252
+ for (const path of paths) {
253
+ if (base.documents[path] !== previousBase.documents[path] ||
254
+ base.revisions[path] !== previousBase.revisions[path] ||
255
+ !sameChange(base.changes[path], previousBase.changes[path]) ||
256
+ !sameBinary(base.binaries[path], previousBase.binaries[path]))
257
+ affected.add(path);
258
+ }
259
+ const oldIds = new Set(before);
260
+ const newIds = new Set(after);
261
+ for (const batch of previousQueue) {
262
+ if (!newIds.has(JSON.stringify(batch)))
263
+ for (const path of pathsOf(batch))
264
+ affected.add(path);
265
+ }
266
+ for (const batch of queue) {
267
+ if (!oldIds.has(JSON.stringify(batch)))
268
+ for (const path of pathsOf(batch))
269
+ affected.add(path);
270
+ }
271
+ let expanded = true;
272
+ while (expanded) {
273
+ expanded = false;
274
+ for (const batch of queue) {
275
+ const touched = pathsOf(batch);
276
+ if (!touched.some((path) => affected.has(path)))
277
+ continue;
278
+ for (const path of touched) {
279
+ if (affected.has(path))
280
+ continue;
281
+ affected.add(path);
282
+ expanded = true;
283
+ }
284
+ }
285
+ }
286
+ const documents = {};
287
+ const revisions = {};
288
+ const changes = {};
289
+ const binaries = {};
290
+ for (const path of affected) {
291
+ if (base.documents[path] !== undefined)
292
+ documents[path] = base.documents[path];
293
+ if (base.revisions[path] !== undefined)
294
+ revisions[path] = base.revisions[path];
295
+ if (base.changes[path] !== undefined)
296
+ changes[path] = base.changes[path];
297
+ if (base.binaries[path] !== undefined)
298
+ binaries[path] = base.binaries[path];
299
+ }
300
+ const staged = overlay({ documents, revisions, changes, binaries }, queue.filter((batch) => pathsOf(batch).some((path) => affected.has(path))));
301
+ const mergedDocuments = { ...previousVisible.documents };
302
+ const mergedRevisions = { ...previousVisible.revisions };
303
+ const mergedChanges = { ...previousVisible.changes };
304
+ const mergedBinaries = { ...previousVisible.binaries };
305
+ for (const path of affected) {
306
+ delete mergedDocuments[path];
307
+ delete mergedRevisions[path];
308
+ delete mergedChanges[path];
309
+ delete mergedBinaries[path];
310
+ }
311
+ Object.assign(mergedDocuments, staged.documents);
312
+ Object.assign(mergedRevisions, staged.revisions);
313
+ Object.assign(mergedChanges, staged.changes);
314
+ Object.assign(mergedBinaries, staged.binaries);
315
+ return {
316
+ documents: mergedDocuments,
317
+ revisions: mergedRevisions,
318
+ changes: mergedChanges,
319
+ binaries: mergedBinaries,
136
320
  };
137
321
  }
138
-
139
- //# sourceMappingURL=overlay.js.map
package/dist/paths.d.ts CHANGED
@@ -1,6 +1,4 @@
1
1
  export declare function normalize(path: string): string | null;
2
- export declare function resolve(from: string, reference: string): string | null;
3
- export declare function relative(from: string, target: string): string;
4
2
  export declare function beneath(prefix: string, path: string): boolean;
5
3
  export declare function covered(prefixes: readonly string[], path: string): boolean;
6
4
  //# sourceMappingURL=paths.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"AAKA,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAYrD;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGtE;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAW7D;AAED,wBAAgB,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAE7D;AAED,wBAAgB,OAAO,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAK1E"}
1
+ {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"AAAA,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAYrD;AAED,wBAAgB,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAE7D;AAED,wBAAgB,OAAO,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAK1E"}
package/dist/paths.js CHANGED
@@ -1,13 +1,11 @@
1
- function dirname(path) {
2
- const index = path.lastIndexOf('/');
3
- return index === -1 ? '' : path.slice(0, index);
4
- }
5
1
  export function normalize(path) {
6
2
  const parts = [];
7
- for (const part of path.split('/')){
8
- if (part === '' || part === '.') continue;
3
+ for (const part of path.split('/')) {
4
+ if (part === '' || part === '.')
5
+ continue;
9
6
  if (part === '..') {
10
- if (parts.length === 0) return null;
7
+ if (parts.length === 0)
8
+ return null;
11
9
  parts.pop();
12
10
  continue;
13
11
  }
@@ -15,33 +13,12 @@ export function normalize(path) {
15
13
  }
16
14
  return parts.join('/');
17
15
  }
18
- export function resolve(from, reference) {
19
- const base = dirname(from);
20
- return normalize(base === '' ? reference : `${base}/${reference}`);
21
- }
22
- export function relative(from, target) {
23
- const base = dirname(from).split('/').filter((part)=>part !== '');
24
- const parts = target.split('/');
25
- let shared = 0;
26
- while(shared < base.length && shared + 1 < parts.length && base[shared] === parts[shared]){
27
- shared += 1;
28
- }
29
- const up = Array.from({
30
- length: base.length - shared
31
- }, ()=>'..');
32
- return [
33
- ...up,
34
- ...parts.slice(shared)
35
- ].join('/');
36
- }
37
16
  export function beneath(prefix, path) {
38
17
  return path === prefix || path.startsWith(`${prefix}/`);
39
18
  }
40
19
  export function covered(prefixes, path) {
41
- return prefixes.some((prefix)=>{
20
+ return prefixes.some((prefix) => {
42
21
  const normalized = normalize(prefix);
43
22
  return normalized !== null && (normalized === '' || beneath(normalized, path));
44
23
  });
45
24
  }
46
-
47
- //# sourceMappingURL=paths.js.map
package/dist/query.d.ts CHANGED
@@ -1,13 +1,222 @@
1
- import type { QueryOptions, QueryResult } from '@agentshouse/query';
2
- import type { Document } from '@agentshouse/mdmodel';
3
- import type { TypesResult } from './model.js';
4
- export type QueryInput = {
1
+ import { type Definition } from '@agentshouse/mdmodel';
2
+ import type { HeadChange } from './adapter.js';
3
+ import type { BinaryFileRecord } from './binary.js';
4
+ export type Value = string | number | boolean | null;
5
+ export type Predicate = Value | {
6
+ $eq: Value;
7
+ } | {
8
+ $ne: Value;
9
+ } | {
10
+ $in: readonly Value[];
11
+ } | {
12
+ $nin: readonly Value[];
13
+ } | {
14
+ $gt?: Value;
15
+ $gte?: Value;
16
+ $lt?: Value;
17
+ $lte?: Value;
18
+ } | {
19
+ $all: readonly Value[];
20
+ } | {
21
+ $size: number;
22
+ } | {
23
+ $exists: boolean;
24
+ };
25
+ export type Where = {
26
+ $and?: readonly Where[];
27
+ $or?: readonly Where[];
28
+ [field: string]: Predicate | readonly Where[] | undefined;
29
+ };
30
+ export type Related = {
31
+ types?: readonly string[];
32
+ where?: Where;
33
+ pathPrefix?: string;
34
+ };
35
+ export type Filter = {
36
+ rooms?: readonly string[];
37
+ types?: readonly string[];
38
+ where?: Where;
39
+ pathPrefix?: string;
40
+ hop?: Related & {
41
+ field: string;
42
+ };
43
+ backlinks?: Related & {
44
+ field?: string;
45
+ };
46
+ };
47
+ export type Key = 'room' | 'path' | 'type' | {
48
+ field: string;
49
+ };
50
+ export type Select = 'all' | {
51
+ fields?: 'all' | readonly string[];
52
+ sections?: 'all' | readonly string[];
53
+ preamble?: true;
54
+ markdown?: true;
55
+ backlinks?: true;
56
+ change?: true;
57
+ };
58
+ export type OrderOptions = {
59
+ nulls?: 'first' | 'last';
60
+ stringSort?: 'lexical' | 'locale';
61
+ locale?: string;
62
+ localeOptions?: Readonly<Record<string, unknown>>;
63
+ };
64
+ export type Direction = 'asc' | 'desc';
65
+ export type DocumentQuery = Filter & {
66
+ select: Select;
67
+ orderBy?: readonly ({
68
+ by: Key;
69
+ direction?: Direction;
70
+ } & OrderOptions)[];
71
+ limit?: number;
72
+ };
73
+ export type GroupQuery = Filter & {
74
+ groupBy: readonly Exclude<Key, 'path'>[];
75
+ orderBy?: readonly {
76
+ by: 'count' | Exclude<Key, 'path'>;
77
+ direction?: Direction;
78
+ }[];
79
+ limit?: number;
80
+ };
81
+ export type LocalQuery = DocumentQuery | GroupQuery;
82
+ export type Backlink = {
83
+ path: string;
84
+ type: string;
85
+ field: string;
86
+ };
87
+ export type QueryDocument = {
5
88
  room: string;
6
- roomVersion: string;
7
- documents: Readonly<Record<string, Document>>;
8
- model: TypesResult;
9
- typedSelection: TypesResult | null;
89
+ path: string;
90
+ type?: string;
91
+ fields?: Readonly<Record<string, unknown>>;
92
+ sections?: Readonly<Record<string, string>>;
93
+ preamble?: string;
94
+ markdown?: string;
95
+ backlinks?: readonly Backlink[];
96
+ change?: HeadChange | null;
97
+ binaryFile?: BinaryFileRecord;
98
+ };
99
+ export type QueryGroup = {
100
+ key: readonly unknown[];
101
+ count: number;
102
+ };
103
+ export type DocumentResult = {
104
+ documents: readonly QueryDocument[];
105
+ };
106
+ export type GroupResult = {
107
+ groups: readonly QueryGroup[];
108
+ };
109
+ export type QueryResult = DocumentResult | GroupResult;
110
+ export type QueryErrorCode = 'invalid-query' | 'unknown-type' | 'unknown-field' | 'wrong-kind';
111
+ export type RoomFacts = {
112
+ locator: string;
113
+ available: boolean;
114
+ types: readonly Definition[];
115
+ };
116
+ export type HeldRooms = {
117
+ listed: boolean;
118
+ rooms: readonly RoomFacts[];
119
+ };
120
+ export type Test = {
121
+ op: 'eq';
122
+ value: Value;
123
+ } | {
124
+ op: 'ne';
125
+ value: Value;
126
+ } | {
127
+ op: 'in';
128
+ values: readonly Value[];
129
+ } | {
130
+ op: 'nin';
131
+ values: readonly Value[];
132
+ } | {
133
+ op: 'range';
134
+ bounds: readonly (readonly ['gt' | 'gte' | 'lt' | 'lte', Value])[];
135
+ } | {
136
+ op: 'all';
137
+ values: readonly Value[];
138
+ } | {
139
+ op: 'size';
140
+ size: number;
141
+ } | {
142
+ op: 'exists';
143
+ exists: boolean;
144
+ };
145
+ export type Condition = {
146
+ every: readonly Condition[];
147
+ } | {
148
+ some: readonly Condition[];
149
+ } | {
150
+ field: string;
151
+ test: Test;
152
+ };
153
+ export type Scope = {
154
+ types: readonly string[] | null;
155
+ where: Condition | null;
156
+ pathPrefix: string | null;
157
+ };
158
+ export type KeyPlan = {
159
+ of: 'room';
160
+ } | {
161
+ of: 'path';
162
+ } | {
163
+ of: 'type';
164
+ } | {
165
+ of: 'field';
166
+ field: string;
167
+ };
168
+ export type DocumentShape = {
169
+ kind: 'documents';
170
+ fields: 'all' | readonly string[] | null;
171
+ sections: 'all' | readonly string[] | null;
172
+ preamble: boolean;
173
+ markdown: boolean;
174
+ backlinks: boolean;
175
+ change: boolean;
176
+ orderBy: readonly {
177
+ key: KeyPlan;
178
+ options: OrderOptions & {
179
+ direction: Direction;
180
+ };
181
+ }[];
182
+ };
183
+ export type GroupShape = {
184
+ kind: 'groups';
185
+ groupBy: readonly KeyPlan[];
186
+ orderBy: readonly {
187
+ by: 'count' | number;
188
+ direction: Direction;
189
+ }[];
190
+ };
191
+ export type PlanReach = {
192
+ rooms: readonly string[];
193
+ documents: readonly string[];
194
+ };
195
+ export type Plan = {
196
+ rooms: readonly string[] | null;
197
+ reach: PlanReach | null;
198
+ root: Scope;
199
+ hop: (Scope & {
200
+ field: string;
201
+ }) | null;
202
+ backlinks: (Scope & {
203
+ field: string | null;
204
+ }) | null;
205
+ shape: DocumentShape | GroupShape;
206
+ limit: number | null;
10
207
  };
11
- export type QueryBinding = (rooms: readonly QueryInput[], options: QueryOptions) => QueryResult;
12
- export declare function rawQuery(rooms: readonly QueryInput[]): QueryResult;
208
+ export declare class QueryError extends Error {
209
+ readonly code: QueryErrorCode;
210
+ readonly retryable = false;
211
+ constructor(code: QueryErrorCode, at: string, problem: string);
212
+ }
213
+ type Entries = Readonly<Record<string, unknown>>;
214
+ export declare function invalid(at: string, problem: string): never;
215
+ export declare function plain(value: unknown): value is Entries;
216
+ export declare function known(value: Entries, allowed: readonly string[], at: string): void;
217
+ export declare function planOf(input: unknown, facts: HeldRooms, reach?: PlanReach | null): Plan;
218
+ export declare function limitOf(input: unknown): number | null;
219
+ export declare function filterOf(input: unknown, facts: HeldRooms, reach?: PlanReach | null): Plan;
220
+ export declare function identityOf(plan: Plan): string;
221
+ export {};
13
222
  //# sourceMappingURL=query.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACpE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC9C,KAAK,EAAE,WAAW,CAAC;IACnB,cAAc,EAAE,WAAW,GAAG,IAAI,CAAC;CACpC,CAAC;AACF,MAAM,MAAM,YAAY,GAAG,CAAC,KAAK,EAAE,SAAS,UAAU,EAAE,EAAE,OAAO,EAAE,YAAY,KAAK,WAAW,CAAC;AAChG,wBAAgB,QAAQ,CAAC,KAAK,EAAE,SAAS,UAAU,EAAE,GAAG,WAAW,CAgBlE"}
1
+ {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"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"}