@agentshouse/mdruntime-adapter 0.1.0-cf6a7cf003c4b → 0.1.0-cfdb3a66f1a92
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 +75 -26
- package/dist/actions.d.ts.map +1 -1
- package/dist/actions.js +42 -4
- package/dist/adapter.d.ts.map +1 -1
- package/dist/adapter.js +102 -27
- package/dist/handed.d.ts +15 -0
- package/dist/handed.d.ts.map +1 -0
- package/dist/handed.js +38 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/read.d.ts +7 -6
- package/dist/read.d.ts.map +1 -1
- package/dist/read.js +61 -49
- package/dist/referrer.d.ts +7 -0
- package/dist/referrer.d.ts.map +1 -0
- package/dist/referrer.js +35 -0
- package/dist/site.d.ts.map +1 -1
- package/dist/site.js +32 -1
- package/dist/stream.d.ts.map +1 -1
- package/dist/stream.js +13 -6
- package/dist/transport.d.ts +14 -2
- package/dist/transport.d.ts.map +1 -1
- package/dist/transport.js +3 -0
- package/dist/write.d.ts +2 -9
- package/dist/write.d.ts.map +1 -1
- package/dist/write.js +54 -5
- package/package.json +3 -3
- package/dist/links.d.ts +0 -20
- package/dist/links.d.ts.map +0 -1
- package/dist/links.js +0 -104
package/dist/read.js
CHANGED
|
@@ -51,8 +51,19 @@ export function headChange(held) {
|
|
|
51
51
|
function headed(head) {
|
|
52
52
|
return head === undefined ? {} : { head };
|
|
53
53
|
}
|
|
54
|
-
function
|
|
55
|
-
|
|
54
|
+
export function binaryFileOf(held) {
|
|
55
|
+
if (held.file === undefined)
|
|
56
|
+
return undefined;
|
|
57
|
+
const { file, bytes, media_type: mediaType, sha256 } = held;
|
|
58
|
+
if (typeof file !== 'string' ||
|
|
59
|
+
typeof bytes !== 'number' ||
|
|
60
|
+
typeof mediaType !== 'string' ||
|
|
61
|
+
typeof sha256 !== 'string')
|
|
62
|
+
return null;
|
|
63
|
+
return { fileRef: file, byteLength: bytes, mediaType, sha256 };
|
|
64
|
+
}
|
|
65
|
+
function binaried(binary) {
|
|
66
|
+
return binary === undefined ? {} : { binary };
|
|
56
67
|
}
|
|
57
68
|
function parseFile(value, mode) {
|
|
58
69
|
if (typeof value !== 'object' || value === null)
|
|
@@ -61,16 +72,29 @@ function parseFile(value, mode) {
|
|
|
61
72
|
if (typeof file.path !== 'string')
|
|
62
73
|
return null;
|
|
63
74
|
const head = headChange(file);
|
|
64
|
-
|
|
75
|
+
const binary = binaryFileOf(file);
|
|
76
|
+
if (head === null || binary === null)
|
|
65
77
|
return null;
|
|
66
78
|
if (mode === 'site') {
|
|
67
79
|
if (typeof file.sha256 !== 'string')
|
|
68
80
|
return null;
|
|
69
|
-
return {
|
|
81
|
+
return {
|
|
82
|
+
path: file.path,
|
|
83
|
+
revision: binary?.sha256,
|
|
84
|
+
version: file.sha256,
|
|
85
|
+
...headed(head),
|
|
86
|
+
...binaried(binary),
|
|
87
|
+
};
|
|
70
88
|
}
|
|
71
89
|
if (typeof file.revision !== 'string')
|
|
72
90
|
return null;
|
|
73
|
-
return {
|
|
91
|
+
return {
|
|
92
|
+
path: file.path,
|
|
93
|
+
revision: file.revision,
|
|
94
|
+
version: file.revision,
|
|
95
|
+
...headed(head),
|
|
96
|
+
...binaried(binary),
|
|
97
|
+
};
|
|
74
98
|
}
|
|
75
99
|
function parseScope(value, mode) {
|
|
76
100
|
if (typeof value !== 'object' || value === null)
|
|
@@ -106,9 +130,7 @@ function parseScope(value, mode) {
|
|
|
106
130
|
return null;
|
|
107
131
|
contents.push({ path: content.path, content: content.content });
|
|
108
132
|
}
|
|
109
|
-
|
|
110
|
-
return { anchor: manifest.anchor, ...at, files, contents };
|
|
111
|
-
return { anchor: manifest.anchor, ...at, files, contents, attachments: [] };
|
|
133
|
+
return { anchor: manifest.anchor, ...at, files, contents };
|
|
112
134
|
}
|
|
113
135
|
function parseCursor(value) {
|
|
114
136
|
if (typeof value !== 'object' || value === null)
|
|
@@ -147,8 +169,15 @@ function parseChange(value, mode) {
|
|
|
147
169
|
if (held.removed === true)
|
|
148
170
|
return { path: held.path, removed: true };
|
|
149
171
|
const head = headChange(held);
|
|
150
|
-
|
|
172
|
+
const binary = binaryFileOf(held);
|
|
173
|
+
if (head === null || binary === null)
|
|
151
174
|
return null;
|
|
175
|
+
if (binary !== undefined) {
|
|
176
|
+
if (mode === 'credential' && typeof held.revision !== 'string')
|
|
177
|
+
return null;
|
|
178
|
+
const revision = typeof held.revision === 'string' ? held.revision : binary.sha256;
|
|
179
|
+
return { path: held.path, binary, revision, version: revision, ...headed(head) };
|
|
180
|
+
}
|
|
152
181
|
if (mode === 'site') {
|
|
153
182
|
if (typeof held.content !== 'string' || typeof held.sha256 !== 'string')
|
|
154
183
|
return null;
|
|
@@ -169,12 +198,6 @@ function parseChange(value, mode) {
|
|
|
169
198
|
...headed(head),
|
|
170
199
|
};
|
|
171
200
|
}
|
|
172
|
-
if (typeof held.reference === 'object' && held.reference !== null) {
|
|
173
|
-
const reference = held.reference;
|
|
174
|
-
if (typeof reference.revision !== 'string')
|
|
175
|
-
return null;
|
|
176
|
-
return { path: held.path, reference: { revision: reference.revision } };
|
|
177
|
-
}
|
|
178
201
|
return null;
|
|
179
202
|
}
|
|
180
203
|
export function parseEnumeration(body, mode) {
|
|
@@ -199,11 +222,7 @@ export function parseEnumeration(body, mode) {
|
|
|
199
222
|
return null;
|
|
200
223
|
changes.push(mapped);
|
|
201
224
|
}
|
|
202
|
-
|
|
203
|
-
authorities.push({ authority: held.authority, ...at, changes });
|
|
204
|
-
continue;
|
|
205
|
-
}
|
|
206
|
-
authorities.push({ authority: held.authority, ...at, changes, attachments: [] });
|
|
225
|
+
authorities.push({ authority: held.authority, ...at, changes });
|
|
207
226
|
}
|
|
208
227
|
return { authorities };
|
|
209
228
|
}
|
|
@@ -215,18 +234,15 @@ export function advancedScope(scope, view) {
|
|
|
215
234
|
contents.delete(change.path);
|
|
216
235
|
if ('removed' in change)
|
|
217
236
|
continue;
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
237
|
+
files.set(change.path, {
|
|
238
|
+
path: change.path,
|
|
239
|
+
revision: change.revision,
|
|
240
|
+
version: change.version,
|
|
241
|
+
...headed(change.head),
|
|
242
|
+
...('binary' in change ? { binary: change.binary } : {}),
|
|
243
|
+
});
|
|
244
|
+
if ('content' in change)
|
|
225
245
|
contents.set(change.path, change.content);
|
|
226
|
-
continue;
|
|
227
|
-
}
|
|
228
|
-
const { revision } = change.reference;
|
|
229
|
-
files.set(change.path, { path: change.path, revision, version: revision });
|
|
230
246
|
}
|
|
231
247
|
return {
|
|
232
248
|
...scope,
|
|
@@ -244,16 +260,16 @@ export function bootstrapOf(scope) {
|
|
|
244
260
|
const documents = {};
|
|
245
261
|
const revisions = {};
|
|
246
262
|
const changes = {};
|
|
247
|
-
const
|
|
263
|
+
const binaryFiles = {};
|
|
248
264
|
for (const file of scope.files) {
|
|
249
265
|
if (file.revision !== undefined)
|
|
250
266
|
revisions[file.path] = file.revision;
|
|
251
267
|
if (file.head !== undefined)
|
|
252
268
|
changes[file.path] = file.head;
|
|
253
269
|
const content = contents.get(file.path);
|
|
254
|
-
if (
|
|
255
|
-
|
|
256
|
-
else
|
|
270
|
+
if (file.binary !== undefined)
|
|
271
|
+
binaryFiles[file.path] = file.binary;
|
|
272
|
+
else if (content !== undefined)
|
|
257
273
|
documents[file.path] = content;
|
|
258
274
|
}
|
|
259
275
|
return {
|
|
@@ -262,8 +278,7 @@ export function bootstrapOf(scope) {
|
|
|
262
278
|
documents,
|
|
263
279
|
revisions,
|
|
264
280
|
changes,
|
|
265
|
-
|
|
266
|
-
...declared(scope.attachments),
|
|
281
|
+
binaryFiles,
|
|
267
282
|
};
|
|
268
283
|
}
|
|
269
284
|
export function schemaOf(scope, schema) {
|
|
@@ -284,23 +299,21 @@ export function refreshFrom(view, fromRoomVersion) {
|
|
|
284
299
|
const documents = {};
|
|
285
300
|
const revisions = {};
|
|
286
301
|
const changes = {};
|
|
287
|
-
const
|
|
302
|
+
const binaryFiles = {};
|
|
288
303
|
const removals = [];
|
|
289
304
|
for (const change of view.changes) {
|
|
290
305
|
if ('removed' in change) {
|
|
291
306
|
removals.push(change.path);
|
|
292
307
|
continue;
|
|
293
308
|
}
|
|
294
|
-
if ('content' in change)
|
|
309
|
+
if ('content' in change)
|
|
295
310
|
documents[change.path] = change.content;
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
binaryTargets.push(change.path);
|
|
303
|
-
revisions[change.path] = change.reference.revision;
|
|
311
|
+
else
|
|
312
|
+
binaryFiles[change.path] = change.binary;
|
|
313
|
+
if (change.revision !== undefined)
|
|
314
|
+
revisions[change.path] = change.revision;
|
|
315
|
+
if (change.head !== undefined)
|
|
316
|
+
changes[change.path] = change.head;
|
|
304
317
|
}
|
|
305
318
|
return {
|
|
306
319
|
kind: 'net-advancement',
|
|
@@ -308,8 +321,7 @@ export function refreshFrom(view, fromRoomVersion) {
|
|
|
308
321
|
documents,
|
|
309
322
|
revisions,
|
|
310
323
|
changes,
|
|
311
|
-
|
|
324
|
+
binaryFiles,
|
|
312
325
|
removals: removals.sort(),
|
|
313
|
-
...declared(view.attachments),
|
|
314
326
|
};
|
|
315
327
|
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { TrackedAuthority } from './discovery.js';
|
|
2
|
+
export type HouseReferrer = {
|
|
3
|
+
locator: string;
|
|
4
|
+
referrer: Readonly<Record<string, string>>;
|
|
5
|
+
};
|
|
6
|
+
export declare function houseReferrer(referrer: unknown, tracked: ReadonlyMap<string, TrackedAuthority>): HouseReferrer | null;
|
|
7
|
+
//# sourceMappingURL=referrer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"referrer.d.ts","sourceRoot":"","sources":["../src/referrer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAEvD,MAAM,MAAM,aAAa,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;CAAE,CAAC;AAgB5F,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,OAAO,EACjB,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,gBAAgB,CAAC,GAC7C,aAAa,GAAG,IAAI,CAqBtB"}
|
package/dist/referrer.js
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
function fields(value) {
|
|
2
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value)
|
|
3
|
+
? value
|
|
4
|
+
: null;
|
|
5
|
+
}
|
|
6
|
+
function named(held, ...keys) {
|
|
7
|
+
const present = Object.keys(held);
|
|
8
|
+
return (present.length === keys.length &&
|
|
9
|
+
keys.every((key) => typeof held[key] === 'string' && held[key] !== ''));
|
|
10
|
+
}
|
|
11
|
+
export function houseReferrer(referrer, tracked) {
|
|
12
|
+
const held = fields(referrer);
|
|
13
|
+
if (held === null)
|
|
14
|
+
return null;
|
|
15
|
+
if (named(held, 'room', 'path')) {
|
|
16
|
+
const entry = tracked.get(held.room);
|
|
17
|
+
if (entry === undefined)
|
|
18
|
+
return null;
|
|
19
|
+
return {
|
|
20
|
+
locator: entry.locator,
|
|
21
|
+
referrer: { room_ref: entry.authority, path: held.path },
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
if (named(held, 'room_ref', 'record')) {
|
|
25
|
+
const roomRef = held.room_ref;
|
|
26
|
+
const entry = [...tracked.values()].find((candidate) => candidate.authority === roomRef);
|
|
27
|
+
return {
|
|
28
|
+
locator: entry?.locator ?? roomRef,
|
|
29
|
+
referrer: { room_ref: roomRef, record: held.record },
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
if (named(held, 'message'))
|
|
33
|
+
return { locator: '', referrer: { message: held.message } };
|
|
34
|
+
return null;
|
|
35
|
+
}
|
package/dist/site.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"site.d.ts","sourceRoot":"","sources":["../src/site.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,OAAO,
|
|
1
|
+
{"version":3,"file":"site.d.ts","sourceRoot":"","sources":["../src/site.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,OAAO,EAOR,MAAM,wBAAwB,CAAC;AAsBhC,OAAO,EAOL,KAAK,kBAAkB,EACxB,MAAM,gBAAgB,CAAC;AAiCxB,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,kBAAkB,GAAG,OAAO,CA8KxE"}
|
package/dist/site.js
CHANGED
|
@@ -4,7 +4,8 @@ import { scopeModels, streamedModels, viewModels } from './model.js';
|
|
|
4
4
|
import { advancedScope, bootstrapOf, parseEnumeration, parseSiteBootstrap, refreshFrom, viewOf, } from './read.js';
|
|
5
5
|
import { classifyDoor, classifyRead, discoveryFailure } from './refusal.js';
|
|
6
6
|
import { houseNotifications } from './stream.js';
|
|
7
|
-
import { SITE_DOOR_BOOTSTRAP, SITE_DOOR_DISCOVER, SITE_DOOR_ENUMERATE, SITE_DOOR_SUBMIT, } from './transport.js';
|
|
7
|
+
import { SITE_DOOR_BOOTSTRAP, SITE_DOOR_DISCOVER, SITE_DOOR_ENUMERATE, SITE_DOOR_SUBMIT, SITE_FILE_RECORD, SITE_FILES, } from './transport.js';
|
|
8
|
+
import { houseReferrer } from './referrer.js';
|
|
8
9
|
import { followsVersion, logPosition, presented, reachedVersion, roomVersion, } from './version.js';
|
|
9
10
|
const UNCERTAIN = { kind: 'transport-uncertainty' };
|
|
10
11
|
function siteRoom(tracked) {
|
|
@@ -24,6 +25,10 @@ function settled(refused) {
|
|
|
24
25
|
export function createSiteAdapter(transport) {
|
|
25
26
|
const notifications = houseNotifications(transport, 'site');
|
|
26
27
|
const tracked = new Map();
|
|
28
|
+
function published(referrer) {
|
|
29
|
+
const named = houseReferrer(referrer, tracked);
|
|
30
|
+
return named === null || !tracked.has(named.locator) ? null : named;
|
|
31
|
+
}
|
|
27
32
|
async function enumeration(entry, from) {
|
|
28
33
|
const answer = await transport.door(SITE_DOOR_ENUMERATE, {
|
|
29
34
|
positions: [presented(entry.authority, from)],
|
|
@@ -120,6 +125,32 @@ export function createSiteAdapter(transport) {
|
|
|
120
125
|
async history() {
|
|
121
126
|
return { kind: 'no-history' };
|
|
122
127
|
},
|
|
128
|
+
async binary(_authorization, request) {
|
|
129
|
+
const named = published(request.kind === 'path' ? { room: request.locator, path: request.path } : request.referrer);
|
|
130
|
+
if (named === null) {
|
|
131
|
+
return { kind: 'rejected', code: 'referrer_unknown', fields: {}, retryable: false };
|
|
132
|
+
}
|
|
133
|
+
if (request.fileRef === undefined) {
|
|
134
|
+
return { kind: 'rejected', code: 'file_not_found', fields: {}, retryable: false };
|
|
135
|
+
}
|
|
136
|
+
const { room_ref, path, record } = named.referrer;
|
|
137
|
+
const read = await transport.download(`${SITE_FILES}${room_ref}/${encodeURIComponent(request.fileRef)}/${path === undefined
|
|
138
|
+
? `${SITE_FILE_RECORD}/${encodeURIComponent(record)}`
|
|
139
|
+
: encodeURIComponent(path)}`);
|
|
140
|
+
if (read.status === 404) {
|
|
141
|
+
return { kind: 'rejected', code: 'file_not_found', fields: {}, retryable: false };
|
|
142
|
+
}
|
|
143
|
+
return read.status === 200 && read.blob !== null
|
|
144
|
+
? { kind: 'binary', blob: read.blob }
|
|
145
|
+
: UNCERTAIN;
|
|
146
|
+
},
|
|
147
|
+
referrerScope(referrer) {
|
|
148
|
+
const named = published(referrer);
|
|
149
|
+
if (named === null)
|
|
150
|
+
return null;
|
|
151
|
+
const { path } = named.referrer;
|
|
152
|
+
return { kind: 'room', locator: named.locator, ...(path === undefined ? {} : { path }) };
|
|
153
|
+
},
|
|
123
154
|
reached(locator, version, target) {
|
|
124
155
|
return reachedVersion(version, target, tracked.get(locator)?.logEpoch);
|
|
125
156
|
},
|
package/dist/stream.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../src/stream.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../src/stream.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,kBAAkB,EAElB,WAAW,EACX,eAAe,EAEf,iBAAiB,EAElB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAEvD,OAAO,KAAK,EACV,SAAS,EACT,aAAa,EAEb,SAAS,EAET,gBAAgB,EAEjB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAe,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AAgB7D,MAAM,MAAM,YAAY,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC;AAEvE,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,WAAW,CAAC;IAClB,OAAO,EAAE,SAAS,gBAAgB,EAAE,CAAC;IACrC,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;CAChD,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IAC9D,IAAI,CAAC,KAAK,EAAE,SAAS,aAAa,EAAE,GAAG,IAAI,CAAC;IAC5C,MAAM,IAAI,IAAI,CAAC;IACf,KAAK,CAAC,WAAW,EAAE,SAAS,gBAAgB,EAAE,GAAG,IAAI,CAAC;IACtD,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,WAAW,GAAG,IAAI,CAAC;IAChD,OAAO,CACL,OAAO,EAAE,gBAAgB,EACzB,IAAI,EAAE,WAAW,EACjB,KAAK,CAAC,EAAE,YAAY,GACnB,mBAAmB,GAAG,IAAI,CAAC;IAC9B,aAAa,EAAE,kBAAkB,CAAC;IAClC,WAAW,EAAE,iBAAiB,CAAC;CAChC,CAAC;AAuBF,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,GAAG,kBAAkB,CA8S5F"}
|
package/dist/stream.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { acceptedMessage } from './actions.js';
|
|
2
|
-
import { headChange } from './read.js';
|
|
2
|
+
import { binaryFileOf, headChange } from './read.js';
|
|
3
3
|
import { roomVersion } from './version.js';
|
|
4
4
|
const HELD_FRAMES_MAX = 256;
|
|
5
5
|
function turnOperation(frame) {
|
|
@@ -265,6 +265,7 @@ export function houseNotifications(transport, mode) {
|
|
|
265
265
|
const documents = {};
|
|
266
266
|
const revisions = {};
|
|
267
267
|
const changes = {};
|
|
268
|
+
const binaryFiles = {};
|
|
268
269
|
const removals = [];
|
|
269
270
|
const applied = [];
|
|
270
271
|
const schemas = new Map();
|
|
@@ -272,6 +273,7 @@ export function houseNotifications(transport, mode) {
|
|
|
272
273
|
delete documents[path];
|
|
273
274
|
delete revisions[path];
|
|
274
275
|
delete changes[path];
|
|
276
|
+
delete binaryFiles[path];
|
|
275
277
|
const removed = removals.indexOf(path);
|
|
276
278
|
if (removed !== -1)
|
|
277
279
|
removals.splice(removed, 1);
|
|
@@ -292,7 +294,8 @@ export function houseNotifications(transport, mode) {
|
|
|
292
294
|
removals.push(entry.path);
|
|
293
295
|
continue;
|
|
294
296
|
}
|
|
295
|
-
|
|
297
|
+
const binary = binaryFileOf(entry);
|
|
298
|
+
if (binary === null || (binary === undefined && entry.text === undefined))
|
|
296
299
|
return null;
|
|
297
300
|
if (mode === 'credential' && entry.revision === undefined)
|
|
298
301
|
return null;
|
|
@@ -300,9 +303,13 @@ export function houseNotifications(transport, mode) {
|
|
|
300
303
|
if (head === null)
|
|
301
304
|
return null;
|
|
302
305
|
forget(entry.path);
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
+
if (binary === undefined)
|
|
307
|
+
documents[entry.path] = entry.text;
|
|
308
|
+
else
|
|
309
|
+
binaryFiles[entry.path] = binary;
|
|
310
|
+
const revision = entry.revision ?? binary?.sha256;
|
|
311
|
+
if (revision !== undefined)
|
|
312
|
+
revisions[entry.path] = revision;
|
|
306
313
|
if (head !== undefined)
|
|
307
314
|
changes[entry.path] = head;
|
|
308
315
|
}
|
|
@@ -316,7 +323,7 @@ export function houseNotifications(transport, mode) {
|
|
|
316
323
|
documents,
|
|
317
324
|
revisions,
|
|
318
325
|
changes,
|
|
319
|
-
|
|
326
|
+
binaryFiles,
|
|
320
327
|
removals: removals.sort(),
|
|
321
328
|
},
|
|
322
329
|
entries: applied,
|
package/dist/transport.d.ts
CHANGED
|
@@ -14,8 +14,15 @@ export type HouseDoorAnswer = {
|
|
|
14
14
|
status: number;
|
|
15
15
|
body: unknown;
|
|
16
16
|
};
|
|
17
|
-
export
|
|
18
|
-
export
|
|
17
|
+
export declare const DOOR_FILES_GET = "/door/files/get";
|
|
18
|
+
export declare const SITE_FILES = "/_house/files/";
|
|
19
|
+
export declare const SITE_FILE_RECORD = "record";
|
|
20
|
+
export type HouseByteAct = 'authored_batch_upload' | 'conversation_file_upload' | 'binary_stage';
|
|
21
|
+
export type HouseByteBody = string | ArrayBuffer | Uint8Array | Blob;
|
|
22
|
+
export type HouseBytesAnswer = {
|
|
23
|
+
status: number;
|
|
24
|
+
blob: Blob | null;
|
|
25
|
+
};
|
|
19
26
|
export type HouseByteTransfer = {
|
|
20
27
|
act: HouseByteAct;
|
|
21
28
|
url: string;
|
|
@@ -28,6 +35,9 @@ export type HouseStreamEntry = {
|
|
|
28
35
|
revision?: string;
|
|
29
36
|
sha256?: string;
|
|
30
37
|
text?: string;
|
|
38
|
+
file?: string;
|
|
39
|
+
bytes?: number;
|
|
40
|
+
media_type?: string;
|
|
31
41
|
author?: {
|
|
32
42
|
user: string;
|
|
33
43
|
name: string;
|
|
@@ -115,10 +125,12 @@ export type HouseDoor = {
|
|
|
115
125
|
};
|
|
116
126
|
export type HouseTransport = HouseDoor & {
|
|
117
127
|
transfer(request: HouseByteTransfer): Promise<HouseDoorAnswer>;
|
|
128
|
+
download(url: string): Promise<HouseBytesAnswer>;
|
|
118
129
|
};
|
|
119
130
|
export type HouseSiteTransport = HouseDoor & {
|
|
120
131
|
online(): boolean;
|
|
121
132
|
read(route: string): Promise<HouseDoorAnswer>;
|
|
133
|
+
download(route: string): Promise<HouseBytesAnswer>;
|
|
122
134
|
};
|
|
123
135
|
export {};
|
|
124
136
|
//# sourceMappingURL=transport.d.ts.map
|
package/dist/transport.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAE/E,eAAO,MAAM,aAAa,mBAAmB,CAAC;AAE9C,eAAO,MAAM,cAAc,oBAAoB,CAAC;AAEhD,eAAO,MAAM,cAAc,oBAAoB,CAAC;AAEhD,eAAO,MAAM,UAAU,gBAAgB,CAAC;AAExC,eAAO,MAAM,iBAAiB,uBAAuB,CAAC;AAEtD,eAAO,MAAM,cAAc,oBAAoB,CAAC;AAEhD,eAAO,MAAM,kBAAkB,0BAA0B,CAAC;AAE1D,eAAO,MAAM,mBAAmB,4BAA4B,CAAC;AAE7D,eAAO,MAAM,mBAAmB,2BAA2B,CAAC;AAE5D,eAAO,MAAM,gBAAgB,wBAAwB,CAAC;AAEtD,MAAM,MAAM,SAAS,GAAG,YAAY,GAAG,MAAM,CAAC;AAE9C,MAAM,MAAM,eAAe,GAAG;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,OAAO,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,uBAAuB,GAAG,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"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"}
|
package/dist/transport.js
CHANGED
|
@@ -8,3 +8,6 @@ export const SITE_DOOR_DISCOVER = '/_house/door/discover';
|
|
|
8
8
|
export const SITE_DOOR_BOOTSTRAP = '/_house/door/bootstrap/';
|
|
9
9
|
export const SITE_DOOR_ENUMERATE = '/_house/door/enumerate';
|
|
10
10
|
export const SITE_DOOR_SUBMIT = '/_house/door/submit';
|
|
11
|
+
export const DOOR_FILES_GET = '/door/files/get';
|
|
12
|
+
export const SITE_FILES = '/_house/files/';
|
|
13
|
+
export const SITE_FILE_RECORD = 'record';
|
package/dist/write.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type ChangeBatch, type HistoryResult, type MutationResult } from '@agentshouse/mdruntime';
|
|
2
2
|
import type { HouseBounds } from './discovery.js';
|
|
3
3
|
export type HouseOperation = Readonly<Record<string, unknown>>;
|
|
4
4
|
export type ChangeMapping = {
|
|
@@ -21,14 +21,7 @@ export declare function deltaBody(changes: readonly HouseOperation[]): string;
|
|
|
21
21
|
export declare function deltaBytes(delta: string): number;
|
|
22
22
|
export declare function uploadable(inline: Readonly<Record<string, unknown>>, bytes: number, bounds: Pick<HouseBounds, 'max_inline_body_bytes' | 'max_upload_bytes'>): boolean;
|
|
23
23
|
export declare function deltaDigest(delta: string): Promise<string>;
|
|
24
|
-
export
|
|
25
|
-
kind: 'accepted';
|
|
26
|
-
}> | (Extract<MutationResult, {
|
|
27
|
-
kind: 'accepted';
|
|
28
|
-
}> & {
|
|
29
|
-
originals: readonly RoomAttachment[];
|
|
30
|
-
});
|
|
31
|
-
export declare function mutationOutcome(status: number, body: unknown, locator: string, handle: string): SubmittedOutcome;
|
|
24
|
+
export declare function mutationOutcome(status: number, body: unknown, locator: string, handle: string): MutationResult;
|
|
32
25
|
export declare function rejectedMapping(mapping: Extract<ChangeMapping, {
|
|
33
26
|
kind: 'unmapped';
|
|
34
27
|
}>): {
|
package/dist/write.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"write.d.ts","sourceRoot":"","sources":["../src/write.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"write.d.ts","sourceRoot":"","sources":["../src/write.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,WAAW,EAEhB,KAAK,aAAa,EAElB,KAAK,cAAc,EAEpB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAOlD,MAAM,MAAM,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAE/D,MAAM,MAAM,aAAa,GACrB;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,SAAS,cAAc,EAAE,CAAA;CAAE,GACvD;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAwHrD,wBAAgB,YAAY,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,aAAa,CAQ9E;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,wBAAgB,aAAa,CAAC,KAAK,EAAE,WAAW,GAAG,aAAa,CAK/D;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,SAAS,cAAc,EAAE,GAAG,SAAS,MAAM,EAAE,CAQhF;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,SAAS,cAAc,EAAE,GAAG,MAAM,CAEpE;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED,wBAAgB,UAAU,CACxB,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACzC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,uBAAuB,GAAG,kBAAkB,CAAC,GACtE,OAAO,CAKT;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAE1D;AAiDD,wBAAgB,eAAe,CAC7B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,OAAO,EACb,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,GACb,cAAc,CA8EhB;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,CAAC,aAAa,EAAE;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,CAAC;IAEjF,IAAI,EAAE,UAAU;IAChB,QAAQ;IACR,IAAI;IACJ,MAAM;QAAI,IAAI;;IACd,SAAS;EAEZ;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAM1B;AA4BD,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,OAAO,EACb,OAAO,EAAE,MAAM,EACf,OAAO,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAC3C,aAAa,CAyDf"}
|
package/dist/write.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { departure, } from '@agentshouse/mdruntime';
|
|
2
|
+
import { binaryFileOf, headChange } from './read.js';
|
|
2
3
|
import { sha256Hex, textBytes } from './digest.js';
|
|
3
4
|
import { nativePath, roomLocalPath } from './map.js';
|
|
4
5
|
import { classifyDoor, doorRefusal, scopedRefusal } from './refusal.js';
|
|
@@ -73,6 +74,25 @@ function operationOf(batch, change, handle) {
|
|
|
73
74
|
const operation = created(change, path);
|
|
74
75
|
return operation === null ? { rule: 'type-missing' } : { operation };
|
|
75
76
|
}
|
|
77
|
+
if (change.kind === 'binary') {
|
|
78
|
+
const written = {
|
|
79
|
+
op: 'upload',
|
|
80
|
+
path,
|
|
81
|
+
local_id: change.localId,
|
|
82
|
+
bytes: change.byteLength,
|
|
83
|
+
sha256: change.sha256,
|
|
84
|
+
media_type: change.mediaType,
|
|
85
|
+
};
|
|
86
|
+
const from = departure(batch.changes, batch.changes.indexOf(change));
|
|
87
|
+
if (from === change.path && priorAbsence(batch, change.path) !== undefined)
|
|
88
|
+
return { operation: written };
|
|
89
|
+
const replaced = priorExistence(batch, from);
|
|
90
|
+
if (replaced === undefined)
|
|
91
|
+
return { rule: 'precondition-missing' };
|
|
92
|
+
if (!('base' in replaced))
|
|
93
|
+
return { rule: 'presence-base-unrepresentable' };
|
|
94
|
+
return { operation: { ...written, base: replaced.base } };
|
|
95
|
+
}
|
|
76
96
|
const existence = priorExistence(batch, change.path);
|
|
77
97
|
if (existence === undefined)
|
|
78
98
|
return { rule: 'precondition-missing' };
|
|
@@ -138,6 +158,9 @@ function material(value, handle) {
|
|
|
138
158
|
return null;
|
|
139
159
|
if (file.revision !== null && file.revision !== undefined && typeof file.revision !== 'string')
|
|
140
160
|
return null;
|
|
161
|
+
const binary = binaryFileOf(file);
|
|
162
|
+
if (binary === null)
|
|
163
|
+
return null;
|
|
141
164
|
const head = headChange(file);
|
|
142
165
|
if (head === null)
|
|
143
166
|
return null;
|
|
@@ -152,6 +175,7 @@ function material(value, handle) {
|
|
|
152
175
|
path,
|
|
153
176
|
content: file.content,
|
|
154
177
|
revision: typeof file.revision === 'string' ? file.revision : null,
|
|
178
|
+
...(binary === undefined ? {} : { binary }),
|
|
155
179
|
...(head === undefined ? {} : { head }),
|
|
156
180
|
});
|
|
157
181
|
}
|
|
@@ -225,13 +249,17 @@ export function mutationOutcome(status, body, locator, handle) {
|
|
|
225
249
|
const documents = {};
|
|
226
250
|
const revisions = {};
|
|
227
251
|
const changes = {};
|
|
252
|
+
const binaryFiles = {};
|
|
228
253
|
const removals = [];
|
|
229
254
|
for (const entry of contents) {
|
|
230
|
-
if (entry.
|
|
255
|
+
if (entry.revision === null) {
|
|
231
256
|
removals.push(entry.path);
|
|
232
257
|
continue;
|
|
233
258
|
}
|
|
234
|
-
|
|
259
|
+
if (entry.content !== null)
|
|
260
|
+
documents[entry.path] = entry.content;
|
|
261
|
+
if (entry.binary !== undefined)
|
|
262
|
+
binaryFiles[entry.path] = entry.binary;
|
|
235
263
|
revisions[entry.path] = entry.revision;
|
|
236
264
|
if (entry.head !== undefined)
|
|
237
265
|
changes[entry.path] = entry.head;
|
|
@@ -243,7 +271,7 @@ export function mutationOutcome(status, body, locator, handle) {
|
|
|
243
271
|
revisions,
|
|
244
272
|
changes,
|
|
245
273
|
removals: removals.sort(),
|
|
246
|
-
|
|
274
|
+
...(Object.keys(binaryFiles).length === 0 ? {} : { binaryFiles }),
|
|
247
275
|
};
|
|
248
276
|
}
|
|
249
277
|
export function rejectedMapping(mapping) {
|
|
@@ -274,6 +302,17 @@ function revisionAuthor(entry) {
|
|
|
274
302
|
}
|
|
275
303
|
return null;
|
|
276
304
|
}
|
|
305
|
+
function historyBinary(entry) {
|
|
306
|
+
if (entry.file === undefined)
|
|
307
|
+
return undefined;
|
|
308
|
+
const { file, bytes, media_type: mediaType, sha256 } = entry;
|
|
309
|
+
if (typeof file !== 'string' ||
|
|
310
|
+
typeof bytes !== 'number' ||
|
|
311
|
+
typeof mediaType !== 'string' ||
|
|
312
|
+
typeof sha256 !== 'string')
|
|
313
|
+
return null;
|
|
314
|
+
return { fileRef: file, byteLength: bytes, mediaType, sha256 };
|
|
315
|
+
}
|
|
277
316
|
export function historyOutcome(status, body, locator, request) {
|
|
278
317
|
const classified = classifyDoor(status, body, locator);
|
|
279
318
|
if (classified !== null)
|
|
@@ -304,6 +343,8 @@ export function historyOutcome(status, body, locator, request) {
|
|
|
304
343
|
retryable: false,
|
|
305
344
|
};
|
|
306
345
|
}
|
|
346
|
+
if (typeof named.file === 'string')
|
|
347
|
+
return { kind: 'no-history' };
|
|
307
348
|
if (typeof named.content !== 'string')
|
|
308
349
|
return { kind: 'transport-uncertainty' };
|
|
309
350
|
return { kind: 'revision', content: named.content };
|
|
@@ -318,7 +359,15 @@ export function historyOutcome(status, body, locator, request) {
|
|
|
318
359
|
typeof entry.created_at !== 'string') {
|
|
319
360
|
return { kind: 'transport-uncertainty' };
|
|
320
361
|
}
|
|
321
|
-
|
|
362
|
+
const binaryFile = historyBinary(entry);
|
|
363
|
+
if (binaryFile === null)
|
|
364
|
+
return { kind: 'transport-uncertainty' };
|
|
365
|
+
revisions.push({
|
|
366
|
+
revision: entry.revision,
|
|
367
|
+
author,
|
|
368
|
+
time: entry.created_at,
|
|
369
|
+
...(binaryFile === undefined ? {} : { binaryFile }),
|
|
370
|
+
});
|
|
322
371
|
}
|
|
323
372
|
const next = held.next_before;
|
|
324
373
|
return {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agentshouse/mdruntime-adapter",
|
|
3
|
-
"version": "0.1.0-
|
|
3
|
+
"version": "0.1.0-cfdb3a66f1a92",
|
|
4
4
|
"description": "Agents House Adapter for the MD Runtime",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
"LICENSE"
|
|
26
26
|
],
|
|
27
27
|
"dependencies": {
|
|
28
|
-
"@agentshouse/mdmodel": "0.1.0-
|
|
29
|
-
"@agentshouse/mdruntime": "0.1.0-
|
|
28
|
+
"@agentshouse/mdmodel": "0.1.0-ce29d61d6f303",
|
|
29
|
+
"@agentshouse/mdruntime": "0.1.0-c310ac72de8b0"
|
|
30
30
|
}
|
|
31
31
|
}
|
package/dist/links.d.ts
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import type { HeldRoom, MutationResult, RoomAttachment } from '@agentshouse/mdruntime';
|
|
2
|
-
import type { HouseScope, HouseView } from './read.js';
|
|
3
|
-
import type { StreamedAdvancement } from './stream.js';
|
|
4
|
-
export type RoomLinks = {
|
|
5
|
-
roomVersion: string;
|
|
6
|
-
handed: ReadonlyMap<string, RoomAttachment>;
|
|
7
|
-
paths: ReadonlyMap<string, ReadonlySet<string>>;
|
|
8
|
-
revisions: ReadonlyMap<string, string>;
|
|
9
|
-
};
|
|
10
|
-
export declare function scopeLinks(scope: HouseScope): RoomLinks;
|
|
11
|
-
export declare function heldLinks(held: HeldRoom): RoomLinks;
|
|
12
|
-
export declare function acceptedLinks(held: RoomLinks, accepted: Extract<MutationResult, {
|
|
13
|
-
kind: 'accepted';
|
|
14
|
-
}>, roomVersion: string, originals: readonly RoomAttachment[]): {
|
|
15
|
-
links: RoomLinks;
|
|
16
|
-
attachments?: readonly RoomAttachment[];
|
|
17
|
-
};
|
|
18
|
-
export declare function enumeratedLinks(view: HouseView, earlier: RoomLinks | undefined): RoomLinks;
|
|
19
|
-
export declare function streamedLinks(held: RoomLinks, advanced: StreamedAdvancement): RoomLinks | null;
|
|
20
|
-
//# sourceMappingURL=links.d.ts.map
|
package/dist/links.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"links.d.ts","sourceRoot":"","sources":["../src/links.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACvF,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACvD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAOvD,MAAM,MAAM,SAAS,GAAG;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAC5C,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;IAChD,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACxC,CAAC;AAcF,wBAAgB,UAAU,CAAC,KAAK,EAAE,UAAU,GAAG,SAAS,CAWvD;AAOD,wBAAgB,SAAS,CAAC,IAAI,EAAE,QAAQ,GAAG,SAAS,CAOnD;AAED,wBAAgB,aAAa,CAC3B,IAAI,EAAE,SAAS,EACf,QAAQ,EAAE,OAAO,CAAC,cAAc,EAAE;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,CAAC,EACvD,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,SAAS,cAAc,EAAE,GACnC;IAAE,KAAK,EAAE,SAAS,CAAC;IAAC,WAAW,CAAC,EAAE,SAAS,cAAc,EAAE,CAAA;CAAE,CA2B/D;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,CAgB1F;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,mBAAmB,GAAG,SAAS,GAAG,IAAI,CAoB9F"}
|