@agentshouse/mdruntime-adapter 0.1.0-ccd2ccb1f7214 → 0.1.0-ccda1a2da11c3
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 +50 -40
- package/dist/actions.d.ts +11 -5
- package/dist/actions.d.ts.map +1 -1
- package/dist/actions.js +77 -97
- package/dist/adapter.d.ts.map +1 -1
- package/dist/adapter.js +183 -139
- package/dist/discovery.d.ts +3 -2
- package/dist/discovery.d.ts.map +1 -1
- package/dist/discovery.js +24 -6
- package/dist/gather.d.ts +1 -1
- package/dist/gather.d.ts.map +1 -1
- package/dist/gather.js +4 -14
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/part.d.ts +13 -0
- package/dist/part.d.ts.map +1 -0
- package/dist/part.js +80 -0
- package/dist/read.d.ts +51 -27
- package/dist/read.d.ts.map +1 -1
- package/dist/read.js +241 -124
- package/dist/referrer.d.ts +2 -0
- package/dist/referrer.d.ts.map +1 -1
- package/dist/referrer.js +8 -2
- package/dist/room-types.d.ts +6 -0
- package/dist/room-types.d.ts.map +1 -0
- package/dist/room-types.js +66 -0
- package/dist/site.d.ts.map +1 -1
- package/dist/site.js +63 -76
- package/dist/stream.d.ts +3 -3
- package/dist/stream.d.ts.map +1 -1
- package/dist/stream.js +38 -34
- package/dist/transport.d.ts +6 -3
- package/dist/transport.d.ts.map +1 -1
- package/dist/write.d.ts +12 -1
- package/dist/write.d.ts.map +1 -1
- package/dist/write.js +90 -42
- package/package.json +2 -2
- package/dist/handed.d.ts +0 -15
- package/dist/handed.d.ts.map +0 -1
- package/dist/handed.js +0 -38
package/dist/site.js
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
|
+
import { stepped } from '@agentshouse/mdruntime';
|
|
1
2
|
import { actionOutcome, SITE_SUBMIT } from './actions.js';
|
|
2
3
|
import { mapDiscovery, parseSiteDiscovery, siteCapabilities, siteTracked, } from './discovery.js';
|
|
3
4
|
import { partModels, streamedModels, viewModels } from './model.js';
|
|
4
|
-
import { advancedScope,
|
|
5
|
-
import {
|
|
5
|
+
import { advancedScope, bootstrapping, emptyScope, housePart, parseEnumeration, parseSiteParted, refreshFrom, viewOf, wholeView, } from './read.js';
|
|
6
|
+
import { PART_ATTEMPTS, unverifiedPart } from './part.js';
|
|
6
7
|
import { classifyDoor, classifyRead, discoveryFailure } from './refusal.js';
|
|
8
|
+
import { HOUSE_ROOM_TYPES } from './room-types.js';
|
|
7
9
|
import { houseNotifications } from './stream.js';
|
|
8
10
|
import { SITE_DOOR_BOOTSTRAP, SITE_DOOR_DISCOVER, SITE_DOOR_ENUMERATE, SITE_DOOR_SUBMIT, SITE_FILE_RECORD, SITE_FILES, } from './transport.js';
|
|
9
11
|
import { houseReferrer } from './referrer.js';
|
|
@@ -18,8 +20,8 @@ function siteRoom(tracked) {
|
|
|
18
20
|
locator: tracked.locator,
|
|
19
21
|
handle: tracked.handle,
|
|
20
22
|
roomVersion: roomVersion(tracked),
|
|
21
|
-
operations: {
|
|
22
|
-
replica: { selection: tracked.locator, admission: 'admitted' },
|
|
23
|
+
operations: { write: [], delete: [] },
|
|
24
|
+
replica: { selection: tracked.locator, admission: 'admitted', offline: 'open' },
|
|
23
25
|
providerOwnedPaths: [],
|
|
24
26
|
};
|
|
25
27
|
}
|
|
@@ -29,6 +31,7 @@ function settled(refused) {
|
|
|
29
31
|
export function createSiteAdapter(transport, snapshot = false) {
|
|
30
32
|
const notifications = houseNotifications(transport, 'site');
|
|
31
33
|
const tracked = new Map();
|
|
34
|
+
const expired = new Map();
|
|
32
35
|
function published(referrer) {
|
|
33
36
|
const named = houseReferrer(referrer, tracked);
|
|
34
37
|
return named === null || !tracked.has(named.locator) ? null : named;
|
|
@@ -68,73 +71,48 @@ export function createSiteAdapter(transport, snapshot = false) {
|
|
|
68
71
|
const first = await enumerated(entry, from);
|
|
69
72
|
return 'kind' in first ? first : wholeView(first, (page) => enumerated(entry, from, page));
|
|
70
73
|
}
|
|
71
|
-
async function
|
|
72
|
-
const
|
|
73
|
-
|
|
74
|
-
...(offset === null ? [] : [`offset=${offset}`]),
|
|
75
|
-
];
|
|
76
|
-
const answer = await transport.read(`${SITE_DOOR_BOOTSTRAP}${entry.authority}${query.length === 0 ? '' : `?${query.join('&')}`}`);
|
|
74
|
+
async function partedRoom(entry) {
|
|
75
|
+
const cut = expired.get(entry.locator);
|
|
76
|
+
const answer = await transport.read(`${SITE_DOOR_BOOTSTRAP}${entry.authority}${cut === undefined ? '' : `?expired=${cut}`}`);
|
|
77
77
|
const classified = classifyDoor(answer.status, answer.body, entry.locator);
|
|
78
78
|
if (classified !== null)
|
|
79
|
-
return
|
|
80
|
-
const
|
|
81
|
-
return
|
|
79
|
+
return classified;
|
|
80
|
+
const room = parseSiteParted(answer.body);
|
|
81
|
+
return room === null || room.anchor !== entry.authority ? UNCERTAIN : room;
|
|
82
82
|
}
|
|
83
|
-
async function
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
if (piece === undefined ||
|
|
95
|
-
part.scope.contents.length !== 1 ||
|
|
96
|
-
piece.path !== path ||
|
|
97
|
-
piece.content.length === 0) {
|
|
98
|
-
return UNCERTAIN;
|
|
99
|
-
}
|
|
100
|
-
text += piece.content;
|
|
101
|
-
const more = siteBootstrapOffset(part.body);
|
|
102
|
-
if (more === null)
|
|
103
|
-
break;
|
|
104
|
-
if (more !== text.length)
|
|
105
|
-
return UNCERTAIN;
|
|
83
|
+
async function fetchedPart(entry, room, listed) {
|
|
84
|
+
for (let attempt = 0; attempt < PART_ATTEMPTS; attempt += 1) {
|
|
85
|
+
const answer = await transport.read(`${SITE_DOOR_BOOTSTRAP}${entry.authority}?part=${encodeURIComponent(listed.part)}`);
|
|
86
|
+
const failure = classifyRead(answer.status, answer.body, entry.locator);
|
|
87
|
+
if (failure?.kind === 'beyond-horizon')
|
|
88
|
+
expired.set(entry.locator, room.position);
|
|
89
|
+
if (failure !== null)
|
|
90
|
+
return failure;
|
|
91
|
+
const scope = await housePart(room, answer.body, listed, 'site');
|
|
92
|
+
if (scope !== null)
|
|
93
|
+
return scope;
|
|
106
94
|
}
|
|
107
|
-
|
|
108
|
-
if (file === undefined || (await sha256Hex(text)) !== file.version)
|
|
109
|
-
return UNCERTAIN;
|
|
110
|
-
return { ...scope, contents: [...scope.contents.slice(0, -1), { path, content: text }] };
|
|
95
|
+
return unverifiedPart(entry.locator);
|
|
111
96
|
}
|
|
112
|
-
async function caughtUp(entry,
|
|
113
|
-
const
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
const scope = await assembled(entry, part.scope, next, offset);
|
|
122
|
-
return 'kind' in scope ? { failure: scope } : { scope, next };
|
|
123
|
-
}
|
|
124
|
-
const { scope } = part;
|
|
125
|
-
if (after !== null || next !== null || roomVersion(scope) === roomVersion(entry)) {
|
|
126
|
-
return { scope, next };
|
|
127
|
-
}
|
|
97
|
+
async function caughtUp(entry, continued) {
|
|
98
|
+
const listed = continued.room.parts[continued.next];
|
|
99
|
+
const scope = listed === undefined
|
|
100
|
+
? emptyScope(continued.room)
|
|
101
|
+
: await fetchedPart(entry, continued.room, listed);
|
|
102
|
+
if ('kind' in scope)
|
|
103
|
+
return scope;
|
|
104
|
+
if (continued.room.parts.length > 1 || roomVersion(scope) === roomVersion(entry))
|
|
105
|
+
return scope;
|
|
128
106
|
const view = await enumeration(entry, scope);
|
|
129
107
|
if ('kind' in view)
|
|
130
|
-
return
|
|
131
|
-
return
|
|
108
|
+
return settled(view);
|
|
109
|
+
return stepped(advancedScope(scope, view));
|
|
132
110
|
}
|
|
133
111
|
async function refreshed(entry, fromRoomVersion) {
|
|
134
112
|
const from = logPosition(fromRoomVersion);
|
|
135
113
|
if (from === null)
|
|
136
114
|
return { kind: 'beyond-horizon' };
|
|
137
|
-
const streamed = notifications.advance(entry, from);
|
|
115
|
+
const streamed = await stepped(notifications.advance(entry, from));
|
|
138
116
|
if (streamed !== null) {
|
|
139
117
|
const models = await streamedModels(streamed.schemas, entry, 'site');
|
|
140
118
|
return models === undefined ? streamed.page : { ...streamed.page, models };
|
|
@@ -143,7 +121,7 @@ export function createSiteAdapter(transport, snapshot = false) {
|
|
|
143
121
|
if ('kind' in view)
|
|
144
122
|
return view;
|
|
145
123
|
notifications.reach(entry.authority, view);
|
|
146
|
-
const answer = refreshFrom(view, fromRoomVersion);
|
|
124
|
+
const answer = await refreshFrom(view, fromRoomVersion);
|
|
147
125
|
if (answer.kind !== 'net-advancement')
|
|
148
126
|
return answer;
|
|
149
127
|
const models = await viewModels(view, entry);
|
|
@@ -152,6 +130,7 @@ export function createSiteAdapter(transport, snapshot = false) {
|
|
|
152
130
|
return {
|
|
153
131
|
localSaves: true,
|
|
154
132
|
exhaustiveDiscovery: true,
|
|
133
|
+
roomTypes: HOUSE_ROOM_TYPES,
|
|
155
134
|
async authorize() {
|
|
156
135
|
return {};
|
|
157
136
|
},
|
|
@@ -174,23 +153,31 @@ export function createSiteAdapter(transport, snapshot = false) {
|
|
|
174
153
|
const entry = tracked.get(request.locator);
|
|
175
154
|
if (entry === undefined)
|
|
176
155
|
return { kind: 'room-not-readable', locator: request.locator };
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
156
|
+
let continued;
|
|
157
|
+
if (request.pageToken === undefined) {
|
|
158
|
+
const room = await partedRoom(entry);
|
|
159
|
+
if ('kind' in room)
|
|
160
|
+
return room;
|
|
161
|
+
continued = { room, next: 0, seen: [] };
|
|
162
|
+
}
|
|
163
|
+
else
|
|
164
|
+
continued = JSON.parse(request.pageToken);
|
|
165
|
+
const scope = await caughtUp(entry, continued);
|
|
166
|
+
if ('kind' in scope)
|
|
167
|
+
return scope;
|
|
168
|
+
notifications.reach(entry.authority, scope);
|
|
169
|
+
const next = continued.next + 1;
|
|
170
|
+
const more = next < continued.room.parts.length;
|
|
184
171
|
const seen = [
|
|
185
|
-
...
|
|
186
|
-
...entry.schemas.filter((schema) =>
|
|
172
|
+
...continued.seen,
|
|
173
|
+
...entry.schemas.filter((schema) => scope.files.some((file) => file.path === schema)),
|
|
187
174
|
];
|
|
188
|
-
const models = await partModels(
|
|
189
|
-
const
|
|
175
|
+
const models = await partModels(scope, entry, new Set(seen), !more);
|
|
176
|
+
const { folders: _folders, ...page } = await stepped(bootstrapping(scope));
|
|
190
177
|
return {
|
|
191
|
-
...
|
|
178
|
+
...page,
|
|
192
179
|
...(models === undefined ? {} : { models }),
|
|
193
|
-
...(
|
|
180
|
+
...(more ? { pageToken: JSON.stringify({ ...continued, next, seen }) } : {}),
|
|
194
181
|
};
|
|
195
182
|
},
|
|
196
183
|
async refresh(_authorization, request) {
|
|
@@ -219,8 +206,8 @@ export function createSiteAdapter(transport, snapshot = false) {
|
|
|
219
206
|
const read = await transport.download(route);
|
|
220
207
|
if (read.status === 404)
|
|
221
208
|
return unfound();
|
|
222
|
-
return read.status === 200 && read.
|
|
223
|
-
? { kind: 'binary',
|
|
209
|
+
return read.status === 200 && read.body !== null
|
|
210
|
+
? { kind: 'binary', body: read.body, mediaType: read.mediaType }
|
|
224
211
|
: UNCERTAIN;
|
|
225
212
|
},
|
|
226
213
|
async link(_authorization, request) {
|
|
@@ -238,7 +225,7 @@ export function createSiteAdapter(transport, snapshot = false) {
|
|
|
238
225
|
if (named === null)
|
|
239
226
|
return null;
|
|
240
227
|
const { path } = named.referrer;
|
|
241
|
-
return {
|
|
228
|
+
return { locator: named.locator, ...(path === undefined ? {} : { path }) };
|
|
242
229
|
},
|
|
243
230
|
reached(locator, version, target) {
|
|
244
231
|
return reachedVersion(version, target, tracked.get(locator)?.logEpoch);
|
package/dist/stream.d.ts
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type ConversationStream, type RefreshPage, type RoomStreamEvent, type ServiceModeSignal, type StreamReceipts } from '@agentshouse/mdruntime';
|
|
2
2
|
import type { TrackedAuthority } from './discovery.js';
|
|
3
3
|
import type { HouseDoor, HouseHeldRoom, HouseMode, HouseStreamEntry } from './transport.js';
|
|
4
4
|
import { type LogPosition } from './version.js';
|
|
5
5
|
export type HeldRevision = (path: string, revision: string) => boolean;
|
|
6
6
|
export type StreamedAdvancement = {
|
|
7
7
|
page: RefreshPage;
|
|
8
|
-
entries: readonly HouseStreamEntry[];
|
|
9
8
|
schemas: ReadonlyMap<string, HouseStreamEntry>;
|
|
10
9
|
};
|
|
11
10
|
export type HouseNotifications = {
|
|
@@ -16,7 +15,8 @@ export type HouseNotifications = {
|
|
|
16
15
|
reopen(): void;
|
|
17
16
|
track(authorities: readonly TrackedAuthority[]): void;
|
|
18
17
|
reach(authority: string, at: LogPosition): void;
|
|
19
|
-
|
|
18
|
+
edited(tracked: TrackedAuthority, from: LogPosition): readonly string[];
|
|
19
|
+
advance(tracked: TrackedAuthority, from: LogPosition, holds?: HeldRevision): Generator<number, StreamedAdvancement | null, void>;
|
|
20
20
|
conversations: ConversationStream;
|
|
21
21
|
serviceMode: ServiceModeSignal;
|
|
22
22
|
};
|
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,EAGL,KAAK,kBAAkB,EAEvB,KAAK,WAAW,EAChB,KAAK,eAAe,EAEpB,KAAK,iBAAiB,EACtB,KAAK,cAAc,EAEpB,MAAM,wBAAwB,CAAC;AAGhC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAUvD,OAAO,KAAK,EACV,SAAS,EACT,aAAa,EAEb,SAAS,EAET,gBAAgB,EAEjB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAe,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AA0C7D,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,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,EAAE,QAAQ,EAAE,cAAc,GAAG,MAAM,IAAI,CAAC;IACxF,IAAI,CAAC,KAAK,EAAE,SAAS,aAAa,EAAE,GAAG,IAAI,CAAC;IAC5C,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,WAAW,GAAG,IAAI,CAAC;IAClD,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,MAAM,CAAC,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE,WAAW,GAAG,SAAS,MAAM,EAAE,CAAC;IACxE,OAAO,CACL,OAAO,EAAE,gBAAgB,EACzB,IAAI,EAAE,WAAW,EACjB,KAAK,CAAC,EAAE,YAAY,GACnB,SAAS,CAAC,MAAM,EAAE,mBAAmB,GAAG,IAAI,EAAE,IAAI,CAAC,CAAC;IACvD,aAAa,EAAE,kBAAkB,CAAC;IAClC,WAAW,EAAE,iBAAiB,CAAC;CAChC,CAAC;AAmFF,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,GAAG,kBAAkB,CA8jB5F"}
|
package/dist/stream.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
import { ROW_WEIGHT, } from '@agentshouse/mdruntime';
|
|
1
2
|
import { acceptedMessage } from './actions.js';
|
|
2
3
|
import { sha256Hex } from './digest.js';
|
|
3
|
-
import { binaryFileOf, headChange,
|
|
4
|
+
import { answered, answering, binaryFileOf, folded, forgotten, headChange, revised, } from './read.js';
|
|
4
5
|
import { roomVersion } from './version.js';
|
|
5
6
|
const HELD_FRAMES_MAX = 256;
|
|
6
7
|
function turnOperation(frame) {
|
|
@@ -15,6 +16,7 @@ function listedConversation(listed) {
|
|
|
15
16
|
created: listed.created_at,
|
|
16
17
|
finished: listed.finished_at,
|
|
17
18
|
outcome: listed.outcome,
|
|
19
|
+
waiting: listed.waiting,
|
|
18
20
|
};
|
|
19
21
|
}
|
|
20
22
|
function position(value) {
|
|
@@ -554,7 +556,18 @@ export function houseNotifications(transport, mode) {
|
|
|
554
556
|
held,
|
|
555
557
|
});
|
|
556
558
|
},
|
|
557
|
-
|
|
559
|
+
edited(tracked, from) {
|
|
560
|
+
const line = lines.get(tracked.authority);
|
|
561
|
+
const start = position(from.position);
|
|
562
|
+
if (line === undefined || start === null || line.logEpoch !== from.logEpoch)
|
|
563
|
+
return [];
|
|
564
|
+
return [
|
|
565
|
+
...new Set(line.frames
|
|
566
|
+
.filter((frame) => frame.position > start)
|
|
567
|
+
.flatMap((frame) => frame.entries.flatMap((entry) => entry.kind === 'edited' && entry.revision !== undefined ? [entry.path] : []))),
|
|
568
|
+
];
|
|
569
|
+
},
|
|
570
|
+
*advance(tracked, from, holds) {
|
|
558
571
|
const line = lines.get(tracked.authority);
|
|
559
572
|
const start = position(from.position);
|
|
560
573
|
if (line === undefined || start === null || line.logEpoch !== from.logEpoch)
|
|
@@ -563,36 +576,26 @@ export function houseNotifications(transport, mode) {
|
|
|
563
576
|
const first = pending[0];
|
|
564
577
|
if (first === undefined || first.after > start)
|
|
565
578
|
return null;
|
|
566
|
-
const
|
|
567
|
-
const revisions = {};
|
|
568
|
-
const changes = {};
|
|
569
|
-
const binaryFiles = {};
|
|
570
|
-
const removals = [];
|
|
571
|
-
const applied = [];
|
|
579
|
+
const answer = answering();
|
|
572
580
|
const schemas = new Map();
|
|
573
|
-
const forget = (path) => {
|
|
574
|
-
delete documents[path];
|
|
575
|
-
delete revisions[path];
|
|
576
|
-
delete changes[path];
|
|
577
|
-
delete binaryFiles[path];
|
|
578
|
-
const removed = removals.indexOf(path);
|
|
579
|
-
if (removed !== -1)
|
|
580
|
-
removals.splice(removed, 1);
|
|
581
|
-
};
|
|
582
581
|
for (const frame of pending) {
|
|
583
582
|
for (const entry of frame.entries) {
|
|
583
|
+
yield ROW_WEIGHT + (entry.text?.length ?? 0);
|
|
584
|
+
if (entry.kind === 'folder') {
|
|
585
|
+
folded(answer, entry.path, entry.removed === true);
|
|
586
|
+
continue;
|
|
587
|
+
}
|
|
584
588
|
if (entry.kind === 'edited' &&
|
|
585
589
|
entry.revision !== undefined &&
|
|
586
590
|
holds?.(entry.path, entry.revision) === true) {
|
|
587
|
-
|
|
591
|
+
forgotten(answer, entry.path);
|
|
588
592
|
continue;
|
|
589
593
|
}
|
|
590
|
-
applied.push(entry);
|
|
591
594
|
if (tracked.schemas.includes(entry.path))
|
|
592
595
|
schemas.set(entry.path, entry);
|
|
593
596
|
if (entry.kind === 'removed') {
|
|
594
|
-
|
|
595
|
-
removals.
|
|
597
|
+
forgotten(answer, entry.path);
|
|
598
|
+
answer.removals.add(entry.path);
|
|
596
599
|
continue;
|
|
597
600
|
}
|
|
598
601
|
const binary = binaryFileOf(entry);
|
|
@@ -603,32 +606,33 @@ export function houseNotifications(transport, mode) {
|
|
|
603
606
|
const head = headChange(entry);
|
|
604
607
|
if (head === null)
|
|
605
608
|
return null;
|
|
606
|
-
|
|
609
|
+
forgotten(answer, entry.path);
|
|
607
610
|
if (binary === undefined)
|
|
608
|
-
documents
|
|
611
|
+
answer.documents.set(entry.path, entry.text);
|
|
609
612
|
else
|
|
610
|
-
binaryFiles
|
|
613
|
+
answer.binaryFiles.set(entry.path, binary);
|
|
611
614
|
const revision = entry.revision ?? binary?.sha256;
|
|
612
615
|
if (revision !== undefined)
|
|
613
|
-
|
|
616
|
+
revised(answer, entry.path, revision);
|
|
614
617
|
if (head !== undefined)
|
|
615
|
-
changes
|
|
618
|
+
answer.changes.set(entry.path, head);
|
|
616
619
|
}
|
|
617
620
|
}
|
|
618
621
|
const last = pending.at(-1);
|
|
619
|
-
lines.
|
|
622
|
+
const current = lines.get(tracked.authority);
|
|
623
|
+
if (current?.logEpoch === line.logEpoch) {
|
|
624
|
+
lines.set(tracked.authority, {
|
|
625
|
+
...current,
|
|
626
|
+
frames: current.frames.filter((frame) => frame.position > start),
|
|
627
|
+
held: current.held !== null && current.held > last.position ? current.held : last.position,
|
|
628
|
+
});
|
|
629
|
+
}
|
|
620
630
|
return {
|
|
621
631
|
page: {
|
|
622
632
|
kind: 'net-advancement',
|
|
623
633
|
roomVersion: roomVersion({ position: last.position.toString(), logEpoch: line.logEpoch }),
|
|
624
|
-
|
|
625
|
-
revisions,
|
|
626
|
-
...identities(revisions),
|
|
627
|
-
changes,
|
|
628
|
-
binaryFiles,
|
|
629
|
-
removals: removals.sort(),
|
|
634
|
+
...(yield* answered(answer)),
|
|
630
635
|
},
|
|
631
|
-
entries: applied,
|
|
632
636
|
schemas,
|
|
633
637
|
};
|
|
634
638
|
},
|
package/dist/transport.d.ts
CHANGED
|
@@ -17,11 +17,12 @@ export type HouseDoorAnswer = {
|
|
|
17
17
|
export declare const DOOR_FILES_GET = "/door/files/get";
|
|
18
18
|
export declare const SITE_FILES = "/_house/files/";
|
|
19
19
|
export declare const SITE_FILE_RECORD = "record";
|
|
20
|
-
export type HouseByteAct = 'authored_batch_upload' | '
|
|
20
|
+
export type HouseByteAct = 'authored_batch_upload' | 'file_upload' | 'binary_stage';
|
|
21
21
|
export type HouseByteBody = string | ArrayBuffer | Uint8Array | Blob;
|
|
22
22
|
export type HouseBytesAnswer = {
|
|
23
23
|
status: number;
|
|
24
|
-
|
|
24
|
+
body: ReadableStream<Uint8Array> | null;
|
|
25
|
+
mediaType: string;
|
|
25
26
|
};
|
|
26
27
|
export type HouseByteTransfer = {
|
|
27
28
|
act: HouseByteAct;
|
|
@@ -31,7 +32,8 @@ export type HouseByteTransfer = {
|
|
|
31
32
|
};
|
|
32
33
|
export type HouseStreamEntry = {
|
|
33
34
|
path: string;
|
|
34
|
-
kind: 'edited' | 'removed' | 'piece';
|
|
35
|
+
kind: 'edited' | 'removed' | 'piece' | 'folder';
|
|
36
|
+
removed?: true;
|
|
35
37
|
revision?: string;
|
|
36
38
|
sha256?: string;
|
|
37
39
|
text?: string;
|
|
@@ -58,6 +60,7 @@ export type HouseListedConversation = {
|
|
|
58
60
|
created_at: string;
|
|
59
61
|
finished_at: string | null;
|
|
60
62
|
outcome: string | null;
|
|
63
|
+
waiting: boolean;
|
|
61
64
|
};
|
|
62
65
|
export type HouseStreamFrame = {
|
|
63
66
|
type: 'part';
|
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,eAAO,MAAM,cAAc,oBAAoB,CAAC;AAEhD,eAAO,MAAM,UAAU,mBAAmB,CAAC;AAE3C,eAAO,MAAM,gBAAgB,WAAW,CAAC;AAEzC,MAAM,MAAM,YAAY,GAAG,uBAAuB,GAAG,
|
|
1
|
+
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"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"}
|
package/dist/write.d.ts
CHANGED
|
@@ -10,6 +10,7 @@ export type ChangeMapping = {
|
|
|
10
10
|
rule: string;
|
|
11
11
|
};
|
|
12
12
|
export declare function houseChanges(batch: ChangeBatch, handle: string): ChangeMapping;
|
|
13
|
+
export declare function houseMove(batch: ChangeBatch, source: string, destination: string): ChangeMapping;
|
|
13
14
|
export type OperationHead = {
|
|
14
15
|
readonly operation_id: string;
|
|
15
16
|
readonly app_ref?: string;
|
|
@@ -21,7 +22,17 @@ export declare function deltaBody(changes: readonly HouseOperation[]): string;
|
|
|
21
22
|
export declare function deltaBytes(delta: string): number;
|
|
22
23
|
export declare function uploadable(inline: Readonly<Record<string, unknown>>, bytes: number, bounds: Pick<HouseBounds, 'max_inline_body_bytes' | 'max_upload_bytes'>): boolean;
|
|
23
24
|
export declare function deltaDigest(delta: string): Promise<string>;
|
|
24
|
-
export
|
|
25
|
+
export type MoveAuthorities = {
|
|
26
|
+
readonly source: {
|
|
27
|
+
readonly authority: string;
|
|
28
|
+
readonly handle: string;
|
|
29
|
+
};
|
|
30
|
+
readonly destination: {
|
|
31
|
+
readonly authority: string;
|
|
32
|
+
readonly handle: string;
|
|
33
|
+
};
|
|
34
|
+
};
|
|
35
|
+
export declare function mutationOutcome(status: number, body: unknown, locator: string, handle: string, move?: MoveAuthorities): Generator<number, MutationResult, void>;
|
|
25
36
|
export declare function rejectedMapping(mapping: Extract<ChangeMapping, {
|
|
26
37
|
kind: 'unmapped';
|
|
27
38
|
}>): {
|
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,
|
|
1
|
+
{"version":3,"file":"write.d.ts","sourceRoot":"","sources":["../src/write.ts"],"names":[],"mappings":"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"}
|