@agentshouse/mdruntime 0.1.0-alpha.2 → 0.1.0-alpha.21
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.
- package/AGENTS.md +87 -0
- package/dist/adapter.d.ts +145 -28
- package/dist/adapter.d.ts.map +1 -1
- package/dist/adapter.js +2 -1
- package/dist/adapter.js.map +1 -1
- package/dist/bootstrap.d.ts +11 -13
- package/dist/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +25 -24
- package/dist/bootstrap.js.map +1 -1
- package/dist/change-set.d.ts +33 -0
- package/dist/change-set.d.ts.map +1 -0
- package/dist/change-set.js +74 -0
- package/dist/change-set.js.map +1 -0
- package/dist/change.d.ts +70 -0
- package/dist/change.d.ts.map +1 -0
- package/dist/change.js +12 -0
- package/dist/change.js.map +1 -0
- package/dist/client.d.ts +66 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +229 -0
- package/dist/client.js.map +1 -0
- package/dist/collection.d.ts +25 -3
- package/dist/collection.d.ts.map +1 -1
- package/dist/collection.js +97 -25
- package/dist/collection.js.map +1 -1
- package/dist/connection.d.ts +87 -5
- package/dist/connection.d.ts.map +1 -1
- package/dist/connection.js +1653 -70
- package/dist/connection.js.map +1 -1
- package/dist/conversation.d.ts +57 -0
- package/dist/conversation.d.ts.map +1 -0
- package/dist/conversation.js +404 -0
- package/dist/conversation.js.map +1 -0
- package/dist/durability.d.ts +9 -0
- package/dist/durability.d.ts.map +1 -0
- package/dist/durability.js +11 -0
- package/dist/durability.js.map +1 -0
- package/dist/file.d.ts +20 -0
- package/dist/file.d.ts.map +1 -0
- package/dist/file.js +149 -0
- package/dist/file.js.map +1 -0
- package/dist/host.d.ts +13 -0
- package/dist/host.d.ts.map +1 -0
- package/dist/host.js +229 -0
- package/dist/host.js.map +1 -0
- package/dist/identity.d.ts +2 -0
- package/dist/identity.d.ts.map +1 -0
- package/dist/identity.js +16 -0
- package/dist/identity.js.map +1 -0
- package/dist/index.d.ts +13 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/log.d.ts +5 -0
- package/dist/log.d.ts.map +1 -0
- package/dist/log.js +15 -0
- package/dist/log.js.map +1 -0
- package/dist/memory.d.ts +17 -2
- package/dist/memory.d.ts.map +1 -1
- package/dist/memory.js +264 -21
- package/dist/memory.js.map +1 -1
- package/dist/model.d.ts +70 -0
- package/dist/model.d.ts.map +1 -0
- package/dist/model.js +28 -0
- package/dist/model.js.map +1 -0
- package/dist/outcome.d.ts +37 -0
- package/dist/outcome.d.ts.map +1 -0
- package/dist/outcome.js +23 -0
- package/dist/outcome.js.map +1 -0
- package/dist/overlay.d.ts +10 -0
- package/dist/overlay.d.ts.map +1 -0
- package/dist/overlay.js +245 -0
- package/dist/overlay.js.map +1 -0
- package/dist/paths.d.ts +6 -0
- package/dist/paths.d.ts.map +1 -0
- package/dist/paths.js +47 -0
- package/dist/paths.js.map +1 -0
- package/dist/query.d.ts +13 -0
- package/dist/query.d.ts.map +1 -0
- package/dist/query.js +18 -0
- package/dist/query.js.map +1 -0
- package/dist/refresh.d.ts +14 -0
- package/dist/refresh.d.ts.map +1 -0
- package/dist/refresh.js +65 -0
- package/dist/refresh.js.map +1 -0
- package/dist/replica.d.ts +33 -0
- package/dist/replica.d.ts.map +1 -0
- package/dist/replica.js +134 -0
- package/dist/replica.js.map +1 -0
- package/dist/save.d.ts +35 -0
- package/dist/save.d.ts.map +1 -0
- package/dist/save.js +561 -0
- package/dist/save.js.map +1 -0
- package/dist/status.d.ts +25 -0
- package/dist/status.d.ts.map +1 -0
- package/dist/status.js +32 -0
- package/dist/status.js.map +1 -0
- package/dist/store.d.ts +86 -4
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +394 -9
- package/dist/store.js.map +1 -1
- package/dist/transfer.d.ts +5 -0
- package/dist/transfer.d.ts.map +1 -0
- package/dist/transfer.js +5 -0
- package/dist/transfer.js.map +1 -0
- package/dist/wire.d.ts +63 -0
- package/dist/wire.d.ts.map +1 -0
- package/dist/wire.js +142 -0
- package/dist/wire.js.map +1 -0
- package/package.json +13 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"overlay.d.ts","sourceRoot":"","sources":["../src/overlay.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAU,WAAW,EAAgB,MAAM,aAAa,CAAC;AAErE,MAAM,MAAM,KAAK,GAAG;IAClB,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC5C,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CAC7C,CAAC;AAyIF,wBAAgB,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,WAAW,EAAE,GAAG,KAAK,CAezE;AAQD,wBAAgB,aAAa,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAQhE;AAqBD,wBAAgB,cAAc,CAC5B,IAAI,EAAE,KAAK,EACX,KAAK,EAAE,SAAS,WAAW,EAAE,EAC7B,YAAY,EAAE,KAAK,EACnB,aAAa,EAAE,SAAS,WAAW,EAAE,EACrC,eAAe,EAAE,KAAK,GACrB,KAAK,CAkFP"}
|
package/dist/overlay.js
ADDED
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
import { apply, parse, serialize } from '@agentshouse/mdmodel';
|
|
2
|
+
const EMPTY_FRONTMATTER = '---\n---\n';
|
|
3
|
+
function at(path, name) {
|
|
4
|
+
return `${path} ${name}`;
|
|
5
|
+
}
|
|
6
|
+
function priorsOf(preconditions) {
|
|
7
|
+
const fields = new Map();
|
|
8
|
+
const sections = new Map();
|
|
9
|
+
const preambles = new Map();
|
|
10
|
+
for (const precondition of preconditions){
|
|
11
|
+
if (precondition.kind === 'field') {
|
|
12
|
+
fields.set(at(precondition.path, precondition.name), precondition.value);
|
|
13
|
+
}
|
|
14
|
+
if (precondition.kind === 'section') {
|
|
15
|
+
sections.set(at(precondition.path, precondition.name), precondition.value);
|
|
16
|
+
}
|
|
17
|
+
if (precondition.kind === 'preamble') {
|
|
18
|
+
preambles.set(precondition.path, precondition.value);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
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) ?? ''
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
function compose(fields, sections) {
|
|
28
|
+
const body = Object.entries(sections).map(([name, value])=>`\n## ${name}\n${value}`).join('');
|
|
29
|
+
const skeleton = `${EMPTY_FRONTMATTER}${body}`;
|
|
30
|
+
const opened = parse(skeleton);
|
|
31
|
+
if (!opened.ok) return skeleton;
|
|
32
|
+
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;
|
|
41
|
+
}
|
|
42
|
+
return serialize(document);
|
|
43
|
+
}
|
|
44
|
+
function edited(document, change, priors) {
|
|
45
|
+
if (change.kind === 'field') {
|
|
46
|
+
return apply(document, {
|
|
47
|
+
kind: 'field',
|
|
48
|
+
name: change.name,
|
|
49
|
+
value: change.value,
|
|
50
|
+
prior: priors.field(change.path, change.name)
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
if (change.kind === 'preamble') {
|
|
54
|
+
return apply(document, {
|
|
55
|
+
kind: 'preamble',
|
|
56
|
+
value: change.value,
|
|
57
|
+
prior: priors.preamble(change.path)
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
if (change.kind !== 'section') return null;
|
|
61
|
+
return apply(document, {
|
|
62
|
+
kind: 'section',
|
|
63
|
+
name: change.name,
|
|
64
|
+
value: change.value,
|
|
65
|
+
prior: priors.section(change.path, change.name)
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
function edit(staged, change, priors) {
|
|
69
|
+
const text = staged.documents[change.path];
|
|
70
|
+
if (text === undefined) return;
|
|
71
|
+
const parsed = parse(text, change.path);
|
|
72
|
+
if (!parsed.ok) return;
|
|
73
|
+
const next = edited(parsed.document, change, priors);
|
|
74
|
+
if (next?.outcome === 'applied') staged.documents[change.path] = serialize(next.document);
|
|
75
|
+
}
|
|
76
|
+
function relocate(staged, from, to) {
|
|
77
|
+
const text = staged.documents[from];
|
|
78
|
+
if (text !== undefined) {
|
|
79
|
+
delete staged.documents[from];
|
|
80
|
+
staged.documents[to] = text;
|
|
81
|
+
} else if (staged.binaryTargets.delete(from)) {
|
|
82
|
+
staged.binaryTargets.add(to);
|
|
83
|
+
} else {
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
const revision = staged.revisions[from];
|
|
87
|
+
if (revision === undefined) return;
|
|
88
|
+
delete staged.revisions[from];
|
|
89
|
+
staged.revisions[to] = revision;
|
|
90
|
+
}
|
|
91
|
+
function erase(staged, path) {
|
|
92
|
+
delete staged.documents[path];
|
|
93
|
+
delete staged.revisions[path];
|
|
94
|
+
staged.binaryTargets.delete(path);
|
|
95
|
+
}
|
|
96
|
+
function stage(staged, change, priors) {
|
|
97
|
+
if (change.kind === 'field' || change.kind === 'section' || change.kind === 'preamble') {
|
|
98
|
+
edit(staged, change, priors);
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
if (change.kind === 'create') {
|
|
102
|
+
staged.documents[change.path] = compose(change.fields, change.sections);
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
if (change.kind === 'replace') {
|
|
106
|
+
if (staged.documents[change.path] === undefined) return;
|
|
107
|
+
staged.documents[change.path] = change.content;
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
if (change.kind === 'move') {
|
|
111
|
+
relocate(staged, change.path, change.to);
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
erase(staged, change.path);
|
|
115
|
+
}
|
|
116
|
+
export function overlay(base, queue) {
|
|
117
|
+
const staged = {
|
|
118
|
+
documents: {
|
|
119
|
+
...base.documents
|
|
120
|
+
},
|
|
121
|
+
binaryTargets: new Set(base.binaryTargets),
|
|
122
|
+
revisions: {
|
|
123
|
+
...base.revisions
|
|
124
|
+
}
|
|
125
|
+
};
|
|
126
|
+
for (const batch of queue){
|
|
127
|
+
const priors = priorsOf(batch.preconditions);
|
|
128
|
+
for (const change of batch.changes)stage(staged, change, priors);
|
|
129
|
+
}
|
|
130
|
+
return {
|
|
131
|
+
documents: staged.documents,
|
|
132
|
+
binaryTargets: [
|
|
133
|
+
...staged.binaryTargets
|
|
134
|
+
].sort(),
|
|
135
|
+
revisions: staged.revisions
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
function pathsOf(batch) {
|
|
139
|
+
return batch.changes.flatMap((change)=>change.kind === 'move' ? [
|
|
140
|
+
change.path,
|
|
141
|
+
change.to
|
|
142
|
+
] : [
|
|
143
|
+
change.path
|
|
144
|
+
]);
|
|
145
|
+
}
|
|
146
|
+
export function sameLayerText(left, right) {
|
|
147
|
+
const paths = Object.keys(left.documents);
|
|
148
|
+
return paths.length === Object.keys(right.documents).length && paths.every((path)=>left.documents[path] === right.documents[path]) && left.binaryTargets.length === right.binaryTargets.length && left.binaryTargets.every((path)=>right.binaryTargets.includes(path));
|
|
149
|
+
}
|
|
150
|
+
function replayRevisions(base, queue) {
|
|
151
|
+
const revisions = {
|
|
152
|
+
...base
|
|
153
|
+
};
|
|
154
|
+
for (const batch of queue){
|
|
155
|
+
for (const change of batch.changes){
|
|
156
|
+
if (change.kind === 'remove') {
|
|
157
|
+
delete revisions[change.path];
|
|
158
|
+
} else if (change.kind === 'move') {
|
|
159
|
+
const revision = revisions[change.path];
|
|
160
|
+
delete revisions[change.path];
|
|
161
|
+
if (revision !== undefined) revisions[change.to] = revision;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
return revisions;
|
|
166
|
+
}
|
|
167
|
+
export function overlayChanged(base, queue, previousBase, previousQueue, previousVisible) {
|
|
168
|
+
const before = previousQueue.map((batch)=>JSON.stringify(batch));
|
|
169
|
+
const after = queue.map((batch)=>JSON.stringify(batch));
|
|
170
|
+
if (before.length === after.length && before.every((id, index)=>id === after[index]) && sameLayerText(base, previousBase)) {
|
|
171
|
+
return {
|
|
172
|
+
documents: previousVisible.documents,
|
|
173
|
+
binaryTargets: previousVisible.binaryTargets,
|
|
174
|
+
revisions: replayRevisions(base.revisions, queue)
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
const affected = new Set();
|
|
178
|
+
const paths = new Set([
|
|
179
|
+
...Object.keys(base.documents),
|
|
180
|
+
...Object.keys(previousBase.documents),
|
|
181
|
+
...Object.keys(base.revisions),
|
|
182
|
+
...Object.keys(previousBase.revisions),
|
|
183
|
+
...base.binaryTargets,
|
|
184
|
+
...previousBase.binaryTargets
|
|
185
|
+
]);
|
|
186
|
+
for (const path of paths){
|
|
187
|
+
if (base.documents[path] !== previousBase.documents[path] || base.revisions[path] !== previousBase.revisions[path] || base.binaryTargets.includes(path) !== previousBase.binaryTargets.includes(path)) affected.add(path);
|
|
188
|
+
}
|
|
189
|
+
const oldIds = new Set(before);
|
|
190
|
+
const newIds = new Set(after);
|
|
191
|
+
for (const batch of previousQueue){
|
|
192
|
+
if (!newIds.has(JSON.stringify(batch))) for (const path of pathsOf(batch))affected.add(path);
|
|
193
|
+
}
|
|
194
|
+
for (const batch of queue){
|
|
195
|
+
if (!oldIds.has(JSON.stringify(batch))) for (const path of pathsOf(batch))affected.add(path);
|
|
196
|
+
}
|
|
197
|
+
let expanded = true;
|
|
198
|
+
while(expanded){
|
|
199
|
+
expanded = false;
|
|
200
|
+
for (const batch of queue){
|
|
201
|
+
const touched = pathsOf(batch);
|
|
202
|
+
if (!touched.some((path)=>affected.has(path))) continue;
|
|
203
|
+
for (const path of touched){
|
|
204
|
+
if (affected.has(path)) continue;
|
|
205
|
+
affected.add(path);
|
|
206
|
+
expanded = true;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
const documents = {};
|
|
211
|
+
const revisions = {};
|
|
212
|
+
for (const path of affected){
|
|
213
|
+
if (base.documents[path] !== undefined) documents[path] = base.documents[path];
|
|
214
|
+
if (base.revisions[path] !== undefined) revisions[path] = base.revisions[path];
|
|
215
|
+
}
|
|
216
|
+
const staged = overlay({
|
|
217
|
+
documents,
|
|
218
|
+
revisions,
|
|
219
|
+
binaryTargets: base.binaryTargets.filter((path)=>affected.has(path))
|
|
220
|
+
}, queue.filter((batch)=>pathsOf(batch).some((path)=>affected.has(path))));
|
|
221
|
+
const mergedDocuments = {
|
|
222
|
+
...previousVisible.documents
|
|
223
|
+
};
|
|
224
|
+
const mergedRevisions = {
|
|
225
|
+
...previousVisible.revisions
|
|
226
|
+
};
|
|
227
|
+
const mergedTargets = new Set(previousVisible.binaryTargets);
|
|
228
|
+
for (const path of affected){
|
|
229
|
+
delete mergedDocuments[path];
|
|
230
|
+
delete mergedRevisions[path];
|
|
231
|
+
mergedTargets.delete(path);
|
|
232
|
+
}
|
|
233
|
+
Object.assign(mergedDocuments, staged.documents);
|
|
234
|
+
Object.assign(mergedRevisions, staged.revisions);
|
|
235
|
+
for (const path of staged.binaryTargets)mergedTargets.add(path);
|
|
236
|
+
return {
|
|
237
|
+
documents: mergedDocuments,
|
|
238
|
+
revisions: mergedRevisions,
|
|
239
|
+
binaryTargets: [
|
|
240
|
+
...mergedTargets
|
|
241
|
+
].sort()
|
|
242
|
+
};
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
//# sourceMappingURL=overlay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/workspace/packages/mdruntime/src/overlay.ts"],"sourcesContent":["import { apply, parse, serialize, type Document } from '@agentshouse/mdmodel';\nimport type { Change, ChangeBatch, Precondition } from './change.js';\n\nexport type Layer = {\n documents: Readonly<Record<string, string>>;\n binaryTargets: readonly string[];\n revisions: Readonly<Record<string, string>>;\n};\n\ntype Staged = {\n documents: Record<string, string>;\n binaryTargets: Set<string>;\n revisions: Record<string, string>;\n};\n\ntype Priors = {\n field(path: string, name: string): unknown;\n section(path: string, name: string): string;\n preamble(path: string): string;\n};\n\nconst EMPTY_FRONTMATTER = '---\\n---\\n';\n\nfunction at(path: string, name: string) {\n return `${path} ${name}`;\n}\n\nfunction priorsOf(preconditions: readonly Precondition[]): Priors {\n const fields = new Map<string, unknown>();\n const sections = new Map<string, string>();\n const preambles = new Map<string, string>();\n for (const precondition of preconditions) {\n if (precondition.kind === 'field') {\n fields.set(at(precondition.path, precondition.name), precondition.value);\n }\n if (precondition.kind === 'section') {\n sections.set(at(precondition.path, precondition.name), precondition.value);\n }\n if (precondition.kind === 'preamble') {\n preambles.set(precondition.path, precondition.value);\n }\n }\n return {\n field: (path, name) => fields.get(at(path, name)),\n section: (path, name) => sections.get(at(path, name)) ?? '',\n preamble: (path) => preambles.get(path) ?? '',\n };\n}\n\nfunction compose(\n fields: Readonly<Record<string, unknown>>,\n sections: Readonly<Record<string, string>>,\n): string {\n const body = Object.entries(sections)\n .map(([name, value]) => `\\n## ${name}\\n${value}`)\n .join('');\n const skeleton = `${EMPTY_FRONTMATTER}${body}`;\n const opened = parse(skeleton);\n if (!opened.ok) return skeleton;\n let document: Document = opened.document;\n for (const [name, value] of Object.entries(fields)) {\n const next = apply(document, { kind: 'field', name, value, prior: undefined });\n if (next.outcome === 'applied') document = next.document;\n }\n return serialize(document);\n}\n\nfunction edited(document: Document, change: Change, priors: Priors) {\n if (change.kind === 'field') {\n return apply(document, {\n kind: 'field',\n name: change.name,\n value: change.value,\n prior: priors.field(change.path, change.name),\n });\n }\n if (change.kind === 'preamble') {\n return apply(document, {\n kind: 'preamble',\n value: change.value,\n prior: priors.preamble(change.path),\n });\n }\n if (change.kind !== 'section') return null;\n return apply(document, {\n kind: 'section',\n name: change.name,\n value: change.value,\n prior: priors.section(change.path, change.name),\n });\n}\n\nfunction edit(staged: Staged, change: Change, priors: Priors) {\n const text = staged.documents[change.path];\n if (text === undefined) return;\n const parsed = parse(text, change.path);\n if (!parsed.ok) return;\n const next = edited(parsed.document, change, priors);\n if (next?.outcome === 'applied') staged.documents[change.path] = serialize(next.document);\n}\n\nfunction relocate(staged: Staged, from: string, to: string) {\n const text = staged.documents[from];\n if (text !== undefined) {\n delete staged.documents[from];\n staged.documents[to] = text;\n } else if (staged.binaryTargets.delete(from)) {\n staged.binaryTargets.add(to);\n } else {\n return;\n }\n const revision = staged.revisions[from];\n if (revision === undefined) return;\n delete staged.revisions[from];\n staged.revisions[to] = revision;\n}\n\nfunction erase(staged: Staged, path: string) {\n delete staged.documents[path];\n delete staged.revisions[path];\n staged.binaryTargets.delete(path);\n}\n\nfunction stage(staged: Staged, change: Change, priors: Priors) {\n if (change.kind === 'field' || change.kind === 'section' || change.kind === 'preamble') {\n edit(staged, change, priors);\n return;\n }\n if (change.kind === 'create') {\n staged.documents[change.path] = compose(change.fields, change.sections);\n return;\n }\n if (change.kind === 'replace') {\n if (staged.documents[change.path] === undefined) return;\n staged.documents[change.path] = change.content;\n return;\n }\n if (change.kind === 'move') {\n relocate(staged, change.path, change.to);\n return;\n }\n erase(staged, change.path);\n}\n\nexport function overlay(base: Layer, queue: readonly ChangeBatch[]): Layer {\n const staged: Staged = {\n documents: { ...base.documents },\n binaryTargets: new Set(base.binaryTargets),\n revisions: { ...base.revisions },\n };\n for (const batch of queue) {\n const priors = priorsOf(batch.preconditions);\n for (const change of batch.changes) stage(staged, change, priors);\n }\n return {\n documents: staged.documents,\n binaryTargets: [...staged.binaryTargets].sort(),\n revisions: staged.revisions,\n };\n}\n\nfunction pathsOf(batch: ChangeBatch): readonly string[] {\n return batch.changes.flatMap((change) =>\n change.kind === 'move' ? [change.path, change.to] : [change.path],\n );\n}\n\nexport function sameLayerText(left: Layer, right: Layer): boolean {\n const paths = Object.keys(left.documents);\n return (\n paths.length === Object.keys(right.documents).length &&\n paths.every((path) => left.documents[path] === right.documents[path]) &&\n left.binaryTargets.length === right.binaryTargets.length &&\n left.binaryTargets.every((path) => right.binaryTargets.includes(path))\n );\n}\n\nfunction replayRevisions(\n base: Readonly<Record<string, string>>,\n queue: readonly ChangeBatch[],\n): Readonly<Record<string, string>> {\n const revisions = { ...base };\n for (const batch of queue) {\n for (const change of batch.changes) {\n if (change.kind === 'remove') {\n delete revisions[change.path];\n } else if (change.kind === 'move') {\n const revision = revisions[change.path];\n delete revisions[change.path];\n if (revision !== undefined) revisions[change.to] = revision;\n }\n }\n }\n return revisions;\n}\n\nexport function overlayChanged(\n base: Layer,\n queue: readonly ChangeBatch[],\n previousBase: Layer,\n previousQueue: readonly ChangeBatch[],\n previousVisible: Layer,\n): Layer {\n const before = previousQueue.map((batch) => JSON.stringify(batch));\n const after = queue.map((batch) => JSON.stringify(batch));\n if (\n before.length === after.length &&\n before.every((id, index) => id === after[index]) &&\n sameLayerText(base, previousBase)\n ) {\n return {\n documents: previousVisible.documents,\n binaryTargets: previousVisible.binaryTargets,\n revisions: replayRevisions(base.revisions, queue),\n };\n }\n const affected = new Set<string>();\n const paths = new Set([\n ...Object.keys(base.documents),\n ...Object.keys(previousBase.documents),\n ...Object.keys(base.revisions),\n ...Object.keys(previousBase.revisions),\n ...base.binaryTargets,\n ...previousBase.binaryTargets,\n ]);\n for (const path of paths) {\n if (\n base.documents[path] !== previousBase.documents[path] ||\n base.revisions[path] !== previousBase.revisions[path] ||\n base.binaryTargets.includes(path) !== previousBase.binaryTargets.includes(path)\n )\n affected.add(path);\n }\n const oldIds = new Set(before);\n const newIds = new Set(after);\n for (const batch of previousQueue) {\n if (!newIds.has(JSON.stringify(batch))) for (const path of pathsOf(batch)) affected.add(path);\n }\n for (const batch of queue) {\n if (!oldIds.has(JSON.stringify(batch))) for (const path of pathsOf(batch)) affected.add(path);\n }\n let expanded = true;\n while (expanded) {\n expanded = false;\n for (const batch of queue) {\n const touched = pathsOf(batch);\n if (!touched.some((path) => affected.has(path))) continue;\n for (const path of touched) {\n if (affected.has(path)) continue;\n affected.add(path);\n expanded = true;\n }\n }\n }\n const documents: Record<string, string> = {};\n const revisions: Record<string, string> = {};\n for (const path of affected) {\n if (base.documents[path] !== undefined) documents[path] = base.documents[path];\n if (base.revisions[path] !== undefined) revisions[path] = base.revisions[path];\n }\n const staged = overlay(\n {\n documents,\n revisions,\n binaryTargets: base.binaryTargets.filter((path) => affected.has(path)),\n },\n queue.filter((batch) => pathsOf(batch).some((path) => affected.has(path))),\n );\n const mergedDocuments = { ...previousVisible.documents };\n const mergedRevisions = { ...previousVisible.revisions };\n const mergedTargets = new Set(previousVisible.binaryTargets);\n for (const path of affected) {\n delete mergedDocuments[path];\n delete mergedRevisions[path];\n mergedTargets.delete(path);\n }\n Object.assign(mergedDocuments, staged.documents);\n Object.assign(mergedRevisions, staged.revisions);\n for (const path of staged.binaryTargets) mergedTargets.add(path);\n return {\n documents: mergedDocuments,\n revisions: mergedRevisions,\n binaryTargets: [...mergedTargets].sort(),\n };\n}\n"],"names":["apply","parse","serialize","EMPTY_FRONTMATTER","at","path","name","priorsOf","preconditions","fields","Map","sections","preambles","precondition","kind","set","value","field","get","section","preamble","compose","body","Object","entries","map","join","skeleton","opened","ok","document","next","prior","undefined","outcome","edited","change","priors","edit","staged","text","documents","parsed","relocate","from","to","binaryTargets","delete","add","revision","revisions","erase","stage","content","overlay","base","queue","Set","batch","changes","sort","pathsOf","flatMap","sameLayerText","left","right","paths","keys","length","every","includes","replayRevisions","overlayChanged","previousBase","previousQueue","previousVisible","before","JSON","stringify","after","id","index","affected","oldIds","newIds","has","expanded","touched","some","filter","mergedDocuments","mergedRevisions","mergedTargets","assign"],"mappings":"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"}
|
package/dist/paths.d.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
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
|
+
export declare function beneath(prefix: string, path: string): boolean;
|
|
5
|
+
export declare function covered(prefixes: readonly string[], path: string): boolean;
|
|
6
|
+
//# sourceMappingURL=paths.d.ts.map
|
|
@@ -0,0 +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"}
|
package/dist/paths.js
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
function dirname(path) {
|
|
2
|
+
const index = path.lastIndexOf('/');
|
|
3
|
+
return index === -1 ? '' : path.slice(0, index);
|
|
4
|
+
}
|
|
5
|
+
export function normalize(path) {
|
|
6
|
+
const parts = [];
|
|
7
|
+
for (const part of path.split('/')){
|
|
8
|
+
if (part === '' || part === '.') continue;
|
|
9
|
+
if (part === '..') {
|
|
10
|
+
if (parts.length === 0) return null;
|
|
11
|
+
parts.pop();
|
|
12
|
+
continue;
|
|
13
|
+
}
|
|
14
|
+
parts.push(part);
|
|
15
|
+
}
|
|
16
|
+
return parts.join('/');
|
|
17
|
+
}
|
|
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
|
+
export function beneath(prefix, path) {
|
|
38
|
+
return path === prefix || path.startsWith(`${prefix}/`);
|
|
39
|
+
}
|
|
40
|
+
export function covered(prefixes, path) {
|
|
41
|
+
return prefixes.some((prefix)=>{
|
|
42
|
+
const normalized = normalize(prefix);
|
|
43
|
+
return normalized !== null && (normalized === '' || beneath(normalized, path));
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
//# sourceMappingURL=paths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/workspace/packages/mdruntime/src/paths.ts"],"sourcesContent":["function dirname(path: string): string {\n const index = path.lastIndexOf('/');\n return index === -1 ? '' : path.slice(0, index);\n}\n\nexport function normalize(path: string): string | null {\n const parts: string[] = [];\n for (const part of path.split('/')) {\n if (part === '' || part === '.') continue;\n if (part === '..') {\n if (parts.length === 0) return null;\n parts.pop();\n continue;\n }\n parts.push(part);\n }\n return parts.join('/');\n}\n\nexport function resolve(from: string, reference: string): string | null {\n const base = dirname(from);\n return normalize(base === '' ? reference : `${base}/${reference}`);\n}\n\nexport function relative(from: string, target: string): string {\n const base = dirname(from)\n .split('/')\n .filter((part) => part !== '');\n const parts = target.split('/');\n let shared = 0;\n while (shared < base.length && shared + 1 < parts.length && base[shared] === parts[shared]) {\n shared += 1;\n }\n const up = Array.from({ length: base.length - shared }, () => '..');\n return [...up, ...parts.slice(shared)].join('/');\n}\n\nexport function beneath(prefix: string, path: string): boolean {\n return path === prefix || path.startsWith(`${prefix}/`);\n}\n\nexport function covered(prefixes: readonly string[], path: string): boolean {\n return prefixes.some((prefix) => {\n const normalized = normalize(prefix);\n return normalized !== null && (normalized === '' || beneath(normalized, path));\n });\n}\n"],"names":["dirname","path","index","lastIndexOf","slice","normalize","parts","part","split","length","pop","push","join","resolve","from","reference","base","relative","target","filter","shared","up","Array","beneath","prefix","startsWith","covered","prefixes","some","normalized"],"mappings":"AAAA,SAASA,QAAQC,IAAY;IAC3B,MAAMC,QAAQD,KAAKE,WAAW,CAAC;IAC/B,OAAOD,UAAU,CAAC,IAAI,KAAKD,KAAKG,KAAK,CAAC,GAAGF;AAC3C;AAEA,OAAO,SAASG,UAAUJ,IAAY;IACpC,MAAMK,QAAkB,EAAE;IAC1B,KAAK,MAAMC,QAAQN,KAAKO,KAAK,CAAC,KAAM;QAClC,IAAID,SAAS,MAAMA,SAAS,KAAK;QACjC,IAAIA,SAAS,MAAM;YACjB,IAAID,MAAMG,MAAM,KAAK,GAAG,OAAO;YAC/BH,MAAMI,GAAG;YACT;QACF;QACAJ,MAAMK,IAAI,CAACJ;IACb;IACA,OAAOD,MAAMM,IAAI,CAAC;AACpB;AAEA,OAAO,SAASC,QAAQC,IAAY,EAAEC,SAAiB;IACrD,MAAMC,OAAOhB,QAAQc;IACrB,OAAOT,UAAUW,SAAS,KAAKD,YAAY,GAAGC,KAAK,CAAC,EAAED,WAAW;AACnE;AAEA,OAAO,SAASE,SAASH,IAAY,EAAEI,MAAc;IACnD,MAAMF,OAAOhB,QAAQc,MAClBN,KAAK,CAAC,KACNW,MAAM,CAAC,CAACZ,OAASA,SAAS;IAC7B,MAAMD,QAAQY,OAAOV,KAAK,CAAC;IAC3B,IAAIY,SAAS;IACb,MAAOA,SAASJ,KAAKP,MAAM,IAAIW,SAAS,IAAId,MAAMG,MAAM,IAAIO,IAAI,CAACI,OAAO,KAAKd,KAAK,CAACc,OAAO,CAAE;QAC1FA,UAAU;IACZ;IACA,MAAMC,KAAKC,MAAMR,IAAI,CAAC;QAAEL,QAAQO,KAAKP,MAAM,GAAGW;IAAO,GAAG,IAAM;IAC9D,OAAO;WAAIC;WAAOf,MAAMF,KAAK,CAACgB;KAAQ,CAACR,IAAI,CAAC;AAC9C;AAEA,OAAO,SAASW,QAAQC,MAAc,EAAEvB,IAAY;IAClD,OAAOA,SAASuB,UAAUvB,KAAKwB,UAAU,CAAC,GAAGD,OAAO,CAAC,CAAC;AACxD;AAEA,OAAO,SAASE,QAAQC,QAA2B,EAAE1B,IAAY;IAC/D,OAAO0B,SAASC,IAAI,CAAC,CAACJ;QACpB,MAAMK,aAAaxB,UAAUmB;QAC7B,OAAOK,eAAe,QAASA,CAAAA,eAAe,MAAMN,QAAQM,YAAY5B,KAAI;IAC9E;AACF"}
|
package/dist/query.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
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 = {
|
|
5
|
+
room: string;
|
|
6
|
+
roomVersion: string;
|
|
7
|
+
documents: Readonly<Record<string, Document>>;
|
|
8
|
+
model: TypesResult;
|
|
9
|
+
typedSelection: TypesResult | null;
|
|
10
|
+
};
|
|
11
|
+
export type QueryBinding = (rooms: readonly QueryInput[], options: QueryOptions) => QueryResult;
|
|
12
|
+
export declare function rawQuery(rooms: readonly QueryInput[]): QueryResult;
|
|
13
|
+
//# sourceMappingURL=query.d.ts.map
|
|
@@ -0,0 +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"}
|
package/dist/query.js
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export function rawQuery(rooms) {
|
|
2
|
+
return {
|
|
3
|
+
roomVersions: Object.fromEntries(rooms.map((room)=>[
|
|
4
|
+
room.room,
|
|
5
|
+
room.roomVersion
|
|
6
|
+
])),
|
|
7
|
+
groups: null,
|
|
8
|
+
documents: rooms.flatMap((room)=>Object.entries(room.documents).filter(([path])=>path.endsWith('.md')).map(([path, document])=>({
|
|
9
|
+
...structuredClone(document),
|
|
10
|
+
type: document.type ?? 'any',
|
|
11
|
+
room: room.room,
|
|
12
|
+
path,
|
|
13
|
+
backlinks: []
|
|
14
|
+
})))
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
//# sourceMappingURL=query.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/workspace/packages/mdruntime/src/query.ts"],"sourcesContent":["import type { QueryOptions, QueryResult } from '@agentshouse/query';\nimport type { Document } from '@agentshouse/mdmodel';\nimport type { TypesResult } from './model.js';\n\nexport type QueryInput = {\n room: string;\n roomVersion: string;\n documents: Readonly<Record<string, Document>>;\n model: TypesResult;\n typedSelection: TypesResult | null;\n};\nexport type QueryBinding = (rooms: readonly QueryInput[], options: QueryOptions) => QueryResult;\nexport function rawQuery(rooms: readonly QueryInput[]): QueryResult {\n return {\n roomVersions: Object.fromEntries(rooms.map((room) => [room.room, room.roomVersion])),\n groups: null,\n documents: rooms.flatMap((room) =>\n Object.entries(room.documents)\n .filter(([path]) => path.endsWith('.md'))\n .map(([path, document]) => ({\n ...structuredClone(document),\n type: document.type ?? 'any',\n room: room.room,\n path,\n backlinks: [],\n })),\n ),\n };\n}\n"],"names":["rawQuery","rooms","roomVersions","Object","fromEntries","map","room","roomVersion","groups","documents","flatMap","entries","filter","path","endsWith","document","structuredClone","type","backlinks"],"mappings":"AAYA,OAAO,SAASA,SAASC,KAA4B;IACnD,OAAO;QACLC,cAAcC,OAAOC,WAAW,CAACH,MAAMI,GAAG,CAAC,CAACC,OAAS;gBAACA,KAAKA,IAAI;gBAAEA,KAAKC,WAAW;aAAC;QAClFC,QAAQ;QACRC,WAAWR,MAAMS,OAAO,CAAC,CAACJ,OACxBH,OAAOQ,OAAO,CAACL,KAAKG,SAAS,EAC1BG,MAAM,CAAC,CAAC,CAACC,KAAK,GAAKA,KAAKC,QAAQ,CAAC,QACjCT,GAAG,CAAC,CAAC,CAACQ,MAAME,SAAS,GAAM,CAAA;oBAC1B,GAAGC,gBAAgBD,SAAS;oBAC5BE,MAAMF,SAASE,IAAI,IAAI;oBACvBX,MAAMA,KAAKA,IAAI;oBACfO;oBACAK,WAAW,EAAE;gBACf,CAAA;IAEN;AACF"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { AttachedModelBinding } from './model.js';
|
|
2
|
+
import type { Adapter, AdapterFailure, Authorization } from './adapter.js';
|
|
3
|
+
import { type ConfirmedLayer } from './replica.js';
|
|
4
|
+
import { type Unconfirmed } from './transfer.js';
|
|
5
|
+
export type RefreshOutcome = {
|
|
6
|
+
kind: 'still-current';
|
|
7
|
+
} | {
|
|
8
|
+
kind: 'advanced';
|
|
9
|
+
confirmed: ConfirmedLayer;
|
|
10
|
+
} | {
|
|
11
|
+
kind: 'beyond-horizon';
|
|
12
|
+
} | Unconfirmed | AdapterFailure;
|
|
13
|
+
export declare function refreshRoom(adapter: Adapter, authorization: Authorization, confirmed: ConfirmedLayer, binding: AttachedModelBinding | null): Promise<RefreshOutcome>;
|
|
14
|
+
//# sourceMappingURL=refresh.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"refresh.d.ts","sourceRoot":"","sources":["../src/refresh.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AACvD,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,aAAa,EAAe,MAAM,cAAc,CAAC;AACxF,OAAO,EAAc,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AAC/D,OAAO,EAAe,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AAE9D,MAAM,MAAM,cAAc,GACtB;IAAE,IAAI,EAAE,eAAe,CAAA;CAAE,GACzB;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,SAAS,EAAE,cAAc,CAAA;CAAE,GAC/C;IAAE,IAAI,EAAE,gBAAgB,CAAA;CAAE,GAC1B,WAAW,GACX,cAAc,CAAC;AAEnB,wBAAsB,WAAW,CAC/B,OAAO,EAAE,OAAO,EAChB,aAAa,EAAE,aAAa,EAC5B,SAAS,EAAE,cAAc,EACzB,OAAO,EAAE,oBAAoB,GAAG,IAAI,GACnC,OAAO,CAAC,cAAc,CAAC,CAuDzB"}
|
package/dist/refresh.js
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { readStaged } from './replica.js';
|
|
2
|
+
import { unconfirmed } from './transfer.js';
|
|
3
|
+
export async function refreshRoom(adapter, authorization, confirmed, binding) {
|
|
4
|
+
const locator = confirmed.record.locator;
|
|
5
|
+
const fromRoomVersion = confirmed.record.roomVersion;
|
|
6
|
+
const first = await adapter.refresh(authorization, {
|
|
7
|
+
locator,
|
|
8
|
+
selection: confirmed.record.replica.selection,
|
|
9
|
+
fromRoomVersion
|
|
10
|
+
});
|
|
11
|
+
if (first.kind !== 'net-advancement') return first;
|
|
12
|
+
const roomVersion = first.roomVersion;
|
|
13
|
+
const documents = {
|
|
14
|
+
...confirmed.record.documents
|
|
15
|
+
};
|
|
16
|
+
const revisions = {
|
|
17
|
+
...confirmed.record.revisions
|
|
18
|
+
};
|
|
19
|
+
const binaryTargets = new Set(confirmed.record.binaryTargets);
|
|
20
|
+
const stage = (page)=>{
|
|
21
|
+
Object.assign(documents, page.documents);
|
|
22
|
+
Object.assign(revisions, page.revisions);
|
|
23
|
+
for (const path of Object.keys(page.documents))binaryTargets.delete(path);
|
|
24
|
+
for (const target of page.binaryTargets){
|
|
25
|
+
delete documents[target];
|
|
26
|
+
delete revisions[target];
|
|
27
|
+
binaryTargets.add(target);
|
|
28
|
+
}
|
|
29
|
+
for (const path of page.removals){
|
|
30
|
+
delete documents[path];
|
|
31
|
+
delete revisions[path];
|
|
32
|
+
binaryTargets.delete(path);
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
stage(first);
|
|
36
|
+
let pageToken = first.pageToken;
|
|
37
|
+
while(pageToken !== undefined){
|
|
38
|
+
const page = await adapter.refresh(authorization, {
|
|
39
|
+
locator,
|
|
40
|
+
selection: confirmed.record.replica.selection,
|
|
41
|
+
fromRoomVersion,
|
|
42
|
+
pageToken
|
|
43
|
+
});
|
|
44
|
+
if (page.kind === 'still-current' || page.kind === 'beyond-horizon') return unconfirmed;
|
|
45
|
+
if (page.kind !== 'net-advancement') return page;
|
|
46
|
+
if (page.roomVersion !== roomVersion) return unconfirmed;
|
|
47
|
+
stage(page);
|
|
48
|
+
pageToken = page.pageToken;
|
|
49
|
+
}
|
|
50
|
+
const advanced = readStaged({
|
|
51
|
+
...confirmed.record,
|
|
52
|
+
roomVersion,
|
|
53
|
+
documents,
|
|
54
|
+
binaryTargets: [
|
|
55
|
+
...binaryTargets
|
|
56
|
+
].sort(),
|
|
57
|
+
revisions
|
|
58
|
+
}, binding, confirmed);
|
|
59
|
+
return advanced === null ? unconfirmed : {
|
|
60
|
+
kind: 'advanced',
|
|
61
|
+
confirmed: advanced
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
//# sourceMappingURL=refresh.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/workspace/packages/mdruntime/src/refresh.ts"],"sourcesContent":["import type { AttachedModelBinding } from './model.js';\nimport type { Adapter, AdapterFailure, Authorization, RefreshPage } from './adapter.js';\nimport { readStaged, type ConfirmedLayer } from './replica.js';\nimport { unconfirmed, type Unconfirmed } from './transfer.js';\n\nexport type RefreshOutcome =\n | { kind: 'still-current' }\n | { kind: 'advanced'; confirmed: ConfirmedLayer }\n | { kind: 'beyond-horizon' }\n | Unconfirmed\n | AdapterFailure;\n\nexport async function refreshRoom(\n adapter: Adapter,\n authorization: Authorization,\n confirmed: ConfirmedLayer,\n binding: AttachedModelBinding | null,\n): Promise<RefreshOutcome> {\n const locator = confirmed.record.locator;\n const fromRoomVersion = confirmed.record.roomVersion;\n const first = await adapter.refresh(authorization, {\n locator,\n selection: confirmed.record.replica.selection,\n fromRoomVersion,\n });\n if (first.kind !== 'net-advancement') return first;\n const roomVersion = first.roomVersion;\n const documents: Record<string, string> = { ...confirmed.record.documents };\n const revisions: Record<string, string> = { ...confirmed.record.revisions };\n const binaryTargets = new Set(confirmed.record.binaryTargets);\n const stage = (page: RefreshPage) => {\n Object.assign(documents, page.documents);\n Object.assign(revisions, page.revisions);\n for (const path of Object.keys(page.documents)) binaryTargets.delete(path);\n for (const target of page.binaryTargets) {\n delete documents[target];\n delete revisions[target];\n binaryTargets.add(target);\n }\n for (const path of page.removals) {\n delete documents[path];\n delete revisions[path];\n binaryTargets.delete(path);\n }\n };\n stage(first);\n let pageToken = first.pageToken;\n while (pageToken !== undefined) {\n const page = await adapter.refresh(authorization, {\n locator,\n selection: confirmed.record.replica.selection,\n fromRoomVersion,\n pageToken,\n });\n if (page.kind === 'still-current' || page.kind === 'beyond-horizon') return unconfirmed;\n if (page.kind !== 'net-advancement') return page;\n if (page.roomVersion !== roomVersion) return unconfirmed;\n stage(page);\n pageToken = page.pageToken;\n }\n const advanced = readStaged(\n {\n ...confirmed.record,\n roomVersion,\n documents,\n binaryTargets: [...binaryTargets].sort(),\n revisions,\n },\n binding,\n confirmed,\n );\n return advanced === null ? unconfirmed : { kind: 'advanced', confirmed: advanced };\n}\n"],"names":["readStaged","unconfirmed","refreshRoom","adapter","authorization","confirmed","binding","locator","record","fromRoomVersion","roomVersion","first","refresh","selection","replica","kind","documents","revisions","binaryTargets","Set","stage","page","Object","assign","path","keys","delete","target","add","removals","pageToken","undefined","advanced","sort"],"mappings":"AAEA,SAASA,UAAU,QAA6B,eAAe;AAC/D,SAASC,WAAW,QAA0B,gBAAgB;AAS9D,OAAO,eAAeC,YACpBC,OAAgB,EAChBC,aAA4B,EAC5BC,SAAyB,EACzBC,OAAoC;IAEpC,MAAMC,UAAUF,UAAUG,MAAM,CAACD,OAAO;IACxC,MAAME,kBAAkBJ,UAAUG,MAAM,CAACE,WAAW;IACpD,MAAMC,QAAQ,MAAMR,QAAQS,OAAO,CAACR,eAAe;QACjDG;QACAM,WAAWR,UAAUG,MAAM,CAACM,OAAO,CAACD,SAAS;QAC7CJ;IACF;IACA,IAAIE,MAAMI,IAAI,KAAK,mBAAmB,OAAOJ;IAC7C,MAAMD,cAAcC,MAAMD,WAAW;IACrC,MAAMM,YAAoC;QAAE,GAAGX,UAAUG,MAAM,CAACQ,SAAS;IAAC;IAC1E,MAAMC,YAAoC;QAAE,GAAGZ,UAAUG,MAAM,CAACS,SAAS;IAAC;IAC1E,MAAMC,gBAAgB,IAAIC,IAAId,UAAUG,MAAM,CAACU,aAAa;IAC5D,MAAME,QAAQ,CAACC;QACbC,OAAOC,MAAM,CAACP,WAAWK,KAAKL,SAAS;QACvCM,OAAOC,MAAM,CAACN,WAAWI,KAAKJ,SAAS;QACvC,KAAK,MAAMO,QAAQF,OAAOG,IAAI,CAACJ,KAAKL,SAAS,EAAGE,cAAcQ,MAAM,CAACF;QACrE,KAAK,MAAMG,UAAUN,KAAKH,aAAa,CAAE;YACvC,OAAOF,SAAS,CAACW,OAAO;YACxB,OAAOV,SAAS,CAACU,OAAO;YACxBT,cAAcU,GAAG,CAACD;QACpB;QACA,KAAK,MAAMH,QAAQH,KAAKQ,QAAQ,CAAE;YAChC,OAAOb,SAAS,CAACQ,KAAK;YACtB,OAAOP,SAAS,CAACO,KAAK;YACtBN,cAAcQ,MAAM,CAACF;QACvB;IACF;IACAJ,MAAMT;IACN,IAAImB,YAAYnB,MAAMmB,SAAS;IAC/B,MAAOA,cAAcC,UAAW;QAC9B,MAAMV,OAAO,MAAMlB,QAAQS,OAAO,CAACR,eAAe;YAChDG;YACAM,WAAWR,UAAUG,MAAM,CAACM,OAAO,CAACD,SAAS;YAC7CJ;YACAqB;QACF;QACA,IAAIT,KAAKN,IAAI,KAAK,mBAAmBM,KAAKN,IAAI,KAAK,kBAAkB,OAAOd;QAC5E,IAAIoB,KAAKN,IAAI,KAAK,mBAAmB,OAAOM;QAC5C,IAAIA,KAAKX,WAAW,KAAKA,aAAa,OAAOT;QAC7CmB,MAAMC;QACNS,YAAYT,KAAKS,SAAS;IAC5B;IACA,MAAME,WAAWhC,WACf;QACE,GAAGK,UAAUG,MAAM;QACnBE;QACAM;QACAE,eAAe;eAAIA;SAAc,CAACe,IAAI;QACtChB;IACF,GACAX,SACAD;IAEF,OAAO2B,aAAa,OAAO/B,cAAc;QAAEc,MAAM;QAAYV,WAAW2B;IAAS;AACnF"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { AttachedModelBinding } from './model.js';
|
|
2
|
+
import { type ChangeBatch } from './change.js';
|
|
3
|
+
import { type Collection, type Composition } from './collection.js';
|
|
4
|
+
import { type Layer } from './overlay.js';
|
|
5
|
+
import { type Rewriting } from './save.js';
|
|
6
|
+
import type { ReplicaRecord } from './store.js';
|
|
7
|
+
export type ConfirmedLayer = {
|
|
8
|
+
record: ReplicaRecord;
|
|
9
|
+
collection: Collection;
|
|
10
|
+
};
|
|
11
|
+
export type VisibleLayer = Layer & {
|
|
12
|
+
collection: Collection;
|
|
13
|
+
};
|
|
14
|
+
export type Replica = {
|
|
15
|
+
confirmed: ConfirmedLayer;
|
|
16
|
+
queue: readonly ChangeBatch[];
|
|
17
|
+
visible: VisibleLayer;
|
|
18
|
+
replay: readonly ReplayStep[];
|
|
19
|
+
};
|
|
20
|
+
type ReplayStep = {
|
|
21
|
+
id: string;
|
|
22
|
+
before: Layer;
|
|
23
|
+
after: Layer;
|
|
24
|
+
effective: ChangeBatch;
|
|
25
|
+
collection?: Collection;
|
|
26
|
+
};
|
|
27
|
+
export declare function compositionOf(record: ReplicaRecord): Composition;
|
|
28
|
+
export declare function readConfirmed(record: ReplicaRecord, previous?: ConfirmedLayer): ConfirmedLayer | null;
|
|
29
|
+
export declare function readStaged(record: ReplicaRecord, binding: AttachedModelBinding | null, previous?: ConfirmedLayer): ConfirmedLayer | null;
|
|
30
|
+
export declare function applyReturned(confirmed: ConfirmedLayer, documents: Readonly<Record<string, string>>, revisions: Readonly<Record<string, string>>, removals: readonly string[], roomVersion: string, binding: AttachedModelBinding | null): ConfirmedLayer | null;
|
|
31
|
+
export declare function replicaOf(confirmed: ConfirmedLayer, queue: readonly ChangeBatch[], rewriting: Rewriting, previous?: Replica): Replica;
|
|
32
|
+
export {};
|
|
33
|
+
//# sourceMappingURL=replica.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"replica.d.ts","sourceRoot":"","sources":["../src/replica.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AACvD,OAAO,EAAa,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAIL,KAAK,UAAU,EACf,KAAK,WAAW,EACjB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAA0C,KAAK,KAAK,EAAE,MAAM,cAAc,CAAC;AAClF,OAAO,EAAqB,KAAK,SAAS,EAAE,MAAM,WAAW,CAAC;AAC9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,MAAM,MAAM,cAAc,GAAG;IAC3B,MAAM,EAAE,aAAa,CAAC;IACtB,UAAU,EAAE,UAAU,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG;IACjC,UAAU,EAAE,UAAU,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,OAAO,GAAG;IACpB,SAAS,EAAE,cAAc,CAAC;IAC1B,KAAK,EAAE,SAAS,WAAW,EAAE,CAAC;IAC9B,OAAO,EAAE,YAAY,CAAC;IACtB,MAAM,EAAE,SAAS,UAAU,EAAE,CAAC;CAC/B,CAAC;AAEF,KAAK,UAAU,GAAG;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,KAAK,CAAC;IACd,KAAK,EAAE,KAAK,CAAC;IACb,SAAS,EAAE,WAAW,CAAC;IACvB,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB,CAAC;AAEF,wBAAgB,aAAa,CAAC,MAAM,EAAE,aAAa,GAAG,WAAW,CAShE;AAED,wBAAgB,aAAa,CAC3B,MAAM,EAAE,aAAa,EACrB,QAAQ,CAAC,EAAE,cAAc,GACxB,cAAc,GAAG,IAAI,CASvB;AAED,wBAAgB,UAAU,CACxB,MAAM,EAAE,aAAa,EACrB,OAAO,EAAE,oBAAoB,GAAG,IAAI,EACpC,QAAQ,CAAC,EAAE,cAAc,GACxB,cAAc,GAAG,IAAI,CAkBvB;AAED,wBAAgB,aAAa,CAC3B,SAAS,EAAE,cAAc,EACzB,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAC3C,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAC3C,QAAQ,EAAE,SAAS,MAAM,EAAE,EAC3B,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,oBAAoB,GAAG,IAAI,GACnC,cAAc,GAAG,IAAI,CAoBvB;AAuDD,wBAAgB,SAAS,CACvB,SAAS,EAAE,cAAc,EACzB,KAAK,EAAE,SAAS,WAAW,EAAE,EAC7B,SAAS,EAAE,SAAS,EACpB,QAAQ,CAAC,EAAE,OAAO,GACjB,OAAO,CA2CT"}
|