@agentshouse/mdruntime-adapter 0.1.0-cdc1a38081f09 → 0.1.0-cdcec0737ac0e
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/README.md +2 -2
- package/dist/actions.d.ts +4 -59
- package/dist/actions.d.ts.map +1 -1
- package/dist/actions.js +7 -289
- package/dist/adapter.d.ts.map +1 -1
- package/dist/adapter.js +138 -328
- package/dist/app-reference.d.ts +2 -0
- package/dist/app-reference.d.ts.map +1 -0
- package/dist/app-reference.js +2 -0
- package/dist/crockford.d.ts +4 -0
- package/dist/crockford.d.ts.map +1 -0
- package/dist/crockford.js +3 -0
- package/dist/discovery.d.ts +21 -13
- package/dist/discovery.d.ts.map +1 -1
- package/dist/discovery.js +73 -53
- package/dist/history.d.ts +12 -0
- package/dist/history.d.ts.map +1 -0
- package/dist/history.js +92 -0
- package/dist/house-model.d.ts +719 -0
- package/dist/house-model.d.ts.map +1 -0
- package/dist/house-model.js +393 -0
- package/dist/index.d.ts +10 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -2
- package/dist/model.d.ts +5 -4
- package/dist/model.d.ts.map +1 -1
- package/dist/model.js +31 -35
- package/dist/part.d.ts +11 -12
- package/dist/part.d.ts.map +1 -1
- package/dist/part.js +63 -55
- package/dist/read.d.ts +20 -58
- package/dist/read.d.ts.map +1 -1
- package/dist/read.js +60 -221
- package/dist/refusal.d.ts +0 -3
- package/dist/refusal.d.ts.map +1 -1
- package/dist/refusal.js +0 -5
- package/dist/room-stream.d.ts +20 -0
- package/dist/room-stream.d.ts.map +1 -0
- package/dist/room-stream.js +57 -0
- package/dist/room-types.d.ts +4 -3
- package/dist/room-types.d.ts.map +1 -1
- package/dist/room-types.js +49 -9
- package/dist/search.d.ts +5 -0
- package/dist/search.d.ts.map +1 -0
- package/dist/search.js +47 -0
- package/dist/site.d.ts.map +1 -1
- package/dist/site.js +79 -159
- package/dist/space-schema.d.ts +7 -0
- package/dist/space-schema.d.ts.map +1 -0
- package/dist/space-schema.js +18 -0
- package/dist/stream.d.ts +14 -14
- package/dist/stream.d.ts.map +1 -1
- package/dist/stream.js +169 -424
- package/dist/transport.d.ts +51 -36
- package/dist/transport.d.ts.map +1 -1
- package/dist/transport.js +54 -11
- package/dist/upload.d.ts.map +1 -1
- package/dist/upload.js +2 -2
- package/dist/write.d.ts +6 -1
- package/dist/write.d.ts.map +1 -1
- package/dist/write.js +18 -25
- package/package.json +7 -3
- package/AGENTS.md +0 -317
- package/dist/gather.d.ts +0 -4
- package/dist/gather.d.ts.map +0 -1
- package/dist/gather.js +0 -35
package/dist/search.js
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { doorRefusal } from './refusal.js';
|
|
2
|
+
import { houseDoorRoute } from './transport.js';
|
|
3
|
+
const ROOMS = '/rooms/';
|
|
4
|
+
const UNCERTAIN = { kind: 'transport-uncertainty' };
|
|
5
|
+
function hitOf(file, locators) {
|
|
6
|
+
if (typeof file !== 'object' || file === null)
|
|
7
|
+
return null;
|
|
8
|
+
const { path, line, snippet } = file;
|
|
9
|
+
if (typeof path !== 'string' || !path.startsWith(ROOMS))
|
|
10
|
+
return null;
|
|
11
|
+
const slash = path.indexOf('/', ROOMS.length);
|
|
12
|
+
if (slash < 0)
|
|
13
|
+
return null;
|
|
14
|
+
const room = locators.get(path.slice(ROOMS.length, slash));
|
|
15
|
+
if (room === undefined)
|
|
16
|
+
return null;
|
|
17
|
+
return {
|
|
18
|
+
room,
|
|
19
|
+
path: path.slice(slash + 1),
|
|
20
|
+
...(typeof line === 'number' ? { line } : {}),
|
|
21
|
+
...(typeof snippet === 'string' ? { snippet } : {}),
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
export async function houseSearch(transport, tracked, request) {
|
|
25
|
+
const named = request.rooms === null
|
|
26
|
+
? null
|
|
27
|
+
: tracked.filter((entry) => request.rooms.includes(entry.locator));
|
|
28
|
+
if (named !== null && named.length === 0)
|
|
29
|
+
return { kind: 'found', documents: [] };
|
|
30
|
+
const answer = await transport.door(houseDoorRoute('search'), {
|
|
31
|
+
query: request.text,
|
|
32
|
+
...(named === null ? {} : { paths: named.map((entry) => `${ROOMS}${entry.handle}`) }),
|
|
33
|
+
});
|
|
34
|
+
if (answer.status === 401)
|
|
35
|
+
return { kind: 'revoked-authorization' };
|
|
36
|
+
const refusal = doorRefusal(answer.body);
|
|
37
|
+
if (refusal !== null)
|
|
38
|
+
return { kind: 'rejected', ...refusal };
|
|
39
|
+
const files = answer.body?.files;
|
|
40
|
+
if (answer.status !== 200 || !Array.isArray(files))
|
|
41
|
+
return UNCERTAIN;
|
|
42
|
+
const locators = new Map(tracked.map((entry) => [entry.handle, entry.locator]));
|
|
43
|
+
return {
|
|
44
|
+
kind: 'found',
|
|
45
|
+
documents: files.flatMap((file) => hitOf(file, locators) ?? []),
|
|
46
|
+
};
|
|
47
|
+
}
|
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,EAQR,MAAM,wBAAwB,CAAC;AAiBhC,OAAO,EAKL,KAAK,kBAAkB,EACxB,MAAM,gBAAgB,CAAC;AAuBxB,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,kBAAkB,EAAE,QAAQ,UAAQ,GAAG,OAAO,CA6K1F"}
|
package/dist/site.js
CHANGED
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
import { stepped } from '@agentshouse/mdruntime';
|
|
2
|
-
import { actionOutcome
|
|
2
|
+
import { actionOutcome } from './actions.js';
|
|
3
3
|
import { mapDiscovery, parseSiteDiscovery, siteCapabilities, siteTracked, } from './discovery.js';
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import { classifyDoor,
|
|
8
|
-
import {
|
|
4
|
+
import { bootstrapping } from './read.js';
|
|
5
|
+
import { roomStreams } from './room-stream.js';
|
|
6
|
+
import { spaceSchemas } from './space-schema.js';
|
|
7
|
+
import { classifyDoor, discoveryFailure } from './refusal.js';
|
|
8
|
+
import { HOUSE_TYPED_PATHS } from './house-model.js';
|
|
9
|
+
import { HOUSE_NAMEABLE_ROOM_TYPES, HOUSE_ROOM_TYPES } from './room-types.js';
|
|
9
10
|
import { houseNotifications } from './stream.js';
|
|
10
|
-
import {
|
|
11
|
-
import { followsVersion, logPosition, presented, reachedVersion, roomVersion
|
|
11
|
+
import { houseSiteRoute, SITE_DOOR_SUBMIT, SITE_FILES, SITE_SUBMISSION, } from './transport.js';
|
|
12
|
+
import { followsVersion, logPosition, presented, reachedVersion, roomVersion } from './version.js';
|
|
12
13
|
const UNCERTAIN = { kind: 'transport-uncertainty' };
|
|
13
14
|
function unfound() {
|
|
14
15
|
return { kind: 'rejected', code: 'file_not_found', fields: {}, retryable: false };
|
|
@@ -25,170 +26,98 @@ function siteRoom(tracked) {
|
|
|
25
26
|
};
|
|
26
27
|
}
|
|
27
28
|
export function createSiteAdapter(transport, snapshot = false) {
|
|
28
|
-
const
|
|
29
|
+
const spaces = spaceSchemas();
|
|
30
|
+
const notifications = houseNotifications(transport, 'site', {
|
|
31
|
+
opened: async () => {
|
|
32
|
+
const found = await discovered();
|
|
33
|
+
return found.kind === 'discovery' ? found : null;
|
|
34
|
+
},
|
|
35
|
+
changed: () => null,
|
|
36
|
+
}, spaces);
|
|
29
37
|
const tracked = new Map();
|
|
30
|
-
const
|
|
38
|
+
const read = new Map();
|
|
39
|
+
const rooms = roomStreams('site', spaces);
|
|
31
40
|
function fileRoute(request) {
|
|
32
41
|
const entry = tracked.get(request.locator);
|
|
33
42
|
if (entry === undefined)
|
|
34
43
|
return { kind: 'room-not-readable', locator: request.locator };
|
|
35
44
|
return `${SITE_FILES}${entry.authority}/${encodeURIComponent(request.revision)}/${encodeURIComponent(request.path)}`;
|
|
36
45
|
}
|
|
37
|
-
async function
|
|
38
|
-
const
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
});
|
|
48
|
-
const classified = classifyRead(answer.status, answer.body, entry.locator);
|
|
49
|
-
if (classified !== null)
|
|
50
|
-
return classified;
|
|
51
|
-
const found = parseEnumeration(answer.body, 'site');
|
|
52
|
-
if (found === null)
|
|
53
|
-
return UNCERTAIN;
|
|
54
|
-
return viewOf(found, entry) ?? { kind: 'room-not-readable', locator: entry.locator };
|
|
55
|
-
}
|
|
56
|
-
async function enumeration(entry, from) {
|
|
57
|
-
const first = await enumerated(entry, from);
|
|
58
|
-
return 'kind' in first ? first : wholeView(first, (page) => enumerated(entry, from, page));
|
|
46
|
+
async function openedRoom(entry, arriving, signal) {
|
|
47
|
+
const cut = read.get(entry.locator);
|
|
48
|
+
const answered = await transport.streamed(`${houseSiteRoute('bootstrap')}/${entry.authority}${cut === undefined ? '' : `?expired=${cut}`}`, signal ?? new AbortController().signal);
|
|
49
|
+
if (answered.room === null)
|
|
50
|
+
return classifyDoor(answered.status, answered.body, entry.locator) ?? UNCERTAIN;
|
|
51
|
+
const head = await rooms.head(entry, answered.room, arriving, signal);
|
|
52
|
+
const at = head.kind === 'bootstrap' ? logPosition(head.roomVersion) : null;
|
|
53
|
+
if (at !== null)
|
|
54
|
+
read.set(entry.locator, at.position);
|
|
55
|
+
return head;
|
|
59
56
|
}
|
|
60
|
-
async function
|
|
61
|
-
const
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
57
|
+
async function streamedPage(entry, token) {
|
|
58
|
+
const part = await rooms.part(entry, token);
|
|
59
|
+
if ('kind' in part)
|
|
60
|
+
return part;
|
|
61
|
+
const { folders: _folders, ...page } = await stepped(bootstrapping(part.scope));
|
|
62
|
+
return {
|
|
63
|
+
...page,
|
|
64
|
+
...(part.models === undefined ? {} : { models: part.models }),
|
|
65
|
+
...(part.pageToken === undefined ? {} : { pageToken: part.pageToken }),
|
|
66
|
+
bytes: part.bytes,
|
|
67
|
+
};
|
|
68
68
|
}
|
|
69
|
-
async function
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
const frame = partFrame(answer.body);
|
|
84
|
-
if (frame === null)
|
|
85
|
-
continue;
|
|
86
|
-
const scope = await housePart(room, frame, listed, 'site');
|
|
87
|
-
if (scope !== null)
|
|
88
|
-
return 'kind' in scope ? scope : { scope, frame };
|
|
89
|
-
}
|
|
90
|
-
return unverifiedPart(entry.locator);
|
|
91
|
-
}
|
|
92
|
-
async function refreshed(entry, fromRoomVersion) {
|
|
93
|
-
const from = logPosition(fromRoomVersion);
|
|
94
|
-
if (from === null)
|
|
95
|
-
return { kind: 'beyond-horizon' };
|
|
96
|
-
const streamed = await stepped(notifications.advance(entry, from));
|
|
97
|
-
if (streamed !== null) {
|
|
98
|
-
const models = await streamedModels(streamed.schemas, entry, 'site');
|
|
99
|
-
return models === undefined ? streamed.page : { ...streamed.page, models };
|
|
100
|
-
}
|
|
101
|
-
const view = await enumeration(entry, from);
|
|
102
|
-
if ('kind' in view)
|
|
103
|
-
return view;
|
|
104
|
-
notifications.reach(entry.authority, view);
|
|
105
|
-
const answer = await refreshFrom(view, fromRoomVersion);
|
|
106
|
-
if (answer.kind !== 'net-advancement')
|
|
107
|
-
return answer;
|
|
108
|
-
const models = await viewModels(view, entry);
|
|
109
|
-
return models === undefined ? answer : { ...answer, models };
|
|
69
|
+
async function discovered() {
|
|
70
|
+
const answer = await transport.read(houseSiteRoute('discover'));
|
|
71
|
+
const failed = discoveryFailure(answer.status, answer.body);
|
|
72
|
+
if (failed !== null)
|
|
73
|
+
return failed;
|
|
74
|
+
const document = parseSiteDiscovery(answer.body);
|
|
75
|
+
if (document === null)
|
|
76
|
+
return UNCERTAIN;
|
|
77
|
+
const entries = siteTracked(document);
|
|
78
|
+
tracked.clear();
|
|
79
|
+
for (const entry of entries)
|
|
80
|
+
tracked.set(entry.locator, entry);
|
|
81
|
+
notifications.track(entries);
|
|
82
|
+
return mapDiscovery(document, entries.map(siteRoom), siteCapabilities());
|
|
110
83
|
}
|
|
111
84
|
return {
|
|
112
85
|
localSaves: true,
|
|
113
|
-
exhaustiveDiscovery: true,
|
|
114
86
|
roomTypes: HOUSE_ROOM_TYPES,
|
|
87
|
+
nameableRoomTypes: HOUSE_NAMEABLE_ROOM_TYPES,
|
|
88
|
+
typedPaths: HOUSE_TYPED_PATHS,
|
|
115
89
|
async authorize() {
|
|
116
90
|
return {};
|
|
117
91
|
},
|
|
118
|
-
async discover() {
|
|
119
|
-
const answer = await transport.read(SITE_DOOR_DISCOVER);
|
|
120
|
-
const failed = discoveryFailure(answer.status, answer.body);
|
|
121
|
-
if (failed !== null)
|
|
122
|
-
return failed;
|
|
123
|
-
const document = parseSiteDiscovery(answer.body);
|
|
124
|
-
if (document === null)
|
|
125
|
-
return UNCERTAIN;
|
|
126
|
-
const entries = siteTracked(document);
|
|
127
|
-
tracked.clear();
|
|
128
|
-
for (const entry of entries)
|
|
129
|
-
tracked.set(entry.locator, entry);
|
|
130
|
-
notifications.track(entries);
|
|
131
|
-
return mapDiscovery(document, entries.map(siteRoom), siteCapabilities());
|
|
132
|
-
},
|
|
133
92
|
async bootstrap(_authorization, request) {
|
|
134
93
|
const entry = tracked.get(request.locator);
|
|
135
94
|
if (entry === undefined)
|
|
136
95
|
return { kind: 'room-not-readable', locator: request.locator };
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
const room = await partedRoom(entry);
|
|
141
|
-
if ('kind' in room)
|
|
142
|
-
return room;
|
|
143
|
-
const { models, seen } = await manifestedModels(room, entry);
|
|
144
|
-
continued = { room, next: 0, seen };
|
|
145
|
-
inventory = partInventory(room);
|
|
146
|
-
if (inventory.parts > 0) {
|
|
147
|
-
return manifested(room, inventory, JSON.stringify(continued), models);
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
else
|
|
151
|
-
continued = JSON.parse(request.pageToken);
|
|
152
|
-
const listed = continued.room.parts[continued.next];
|
|
153
|
-
const sent = listed === undefined
|
|
154
|
-
? { scope: emptyScope(continued.room), frame: null }
|
|
155
|
-
: await fetchedPart(entry, continued.room, listed, request.received, request.arriving);
|
|
156
|
-
if ('kind' in sent)
|
|
157
|
-
return sent;
|
|
158
|
-
const { scope } = sent;
|
|
159
|
-
notifications.reach(entry.authority, scope);
|
|
160
|
-
const next = continued.next + 1;
|
|
161
|
-
const more = next < continued.room.parts.length;
|
|
162
|
-
const seen = [
|
|
163
|
-
...continued.seen,
|
|
164
|
-
...entry.schemas.filter((schema) => scope.files.some((file) => file.path === schema)),
|
|
165
|
-
];
|
|
166
|
-
const models = await partModels(scope, entry, new Set(seen), !more);
|
|
167
|
-
const { folders: _folders, ...page } = await stepped(bootstrapping(scope));
|
|
168
|
-
return {
|
|
169
|
-
...page,
|
|
170
|
-
...(models === undefined ? {} : { models }),
|
|
171
|
-
...(more ? { pageToken: JSON.stringify({ ...continued, next, seen }) } : {}),
|
|
172
|
-
...(inventory === undefined ? {} : { inventory }),
|
|
173
|
-
...(sent.frame === null ? {} : { received: sent.frame }),
|
|
174
|
-
};
|
|
96
|
+
return request.pageToken === undefined
|
|
97
|
+
? openedRoom(entry, request.arriving, request.signal)
|
|
98
|
+
: streamedPage(entry, request.pageToken);
|
|
175
99
|
},
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
100
|
+
...(snapshot
|
|
101
|
+
? {
|
|
102
|
+
discover: discovered,
|
|
103
|
+
async refresh(_authorization, request) {
|
|
104
|
+
const entry = tracked.get(request.locator);
|
|
105
|
+
if (entry === undefined)
|
|
106
|
+
return { kind: 'room-not-readable', locator: request.locator };
|
|
107
|
+
if (request.pageToken !== undefined)
|
|
108
|
+
return UNCERTAIN;
|
|
109
|
+
return request.fromRoomVersion === roomVersion(entry)
|
|
110
|
+
? { kind: 'still-current' }
|
|
111
|
+
: { kind: 'beyond-horizon' };
|
|
112
|
+
},
|
|
186
113
|
}
|
|
187
|
-
|
|
188
|
-
},
|
|
114
|
+
: {}),
|
|
189
115
|
async mutate() {
|
|
190
116
|
return { kind: 'rejected', affected: {}, code: 'write-grant', fields: {}, retryable: false };
|
|
191
117
|
},
|
|
118
|
+
async attach() {
|
|
119
|
+
return { kind: 'rejected', code: 'write-grant', fields: {}, retryable: false };
|
|
120
|
+
},
|
|
192
121
|
async history() {
|
|
193
122
|
return { kind: 'no-history' };
|
|
194
123
|
},
|
|
@@ -220,7 +149,7 @@ export function createSiteAdapter(transport, snapshot = false) {
|
|
|
220
149
|
return followsVersion(version, next);
|
|
221
150
|
},
|
|
222
151
|
async action(_authorization, request) {
|
|
223
|
-
if (request.name !==
|
|
152
|
+
if (request.name !== SITE_SUBMISSION) {
|
|
224
153
|
return {
|
|
225
154
|
kind: 'rejected',
|
|
226
155
|
code: 'action-unimplemented',
|
|
@@ -230,7 +159,7 @@ export function createSiteAdapter(transport, snapshot = false) {
|
|
|
230
159
|
}
|
|
231
160
|
if (!transport.online())
|
|
232
161
|
return UNCERTAIN;
|
|
233
|
-
return actionOutcome(await transport.door(SITE_DOOR_SUBMIT, request.input),
|
|
162
|
+
return actionOutcome(await transport.door(SITE_DOOR_SUBMIT, request.input), SITE_SUBMISSION, request.input);
|
|
234
163
|
},
|
|
235
164
|
roomStream: snapshot
|
|
236
165
|
? undefined
|
|
@@ -239,19 +168,10 @@ export function createSiteAdapter(transport, snapshot = false) {
|
|
|
239
168
|
notifications.send(rooms.flatMap((room) => {
|
|
240
169
|
const entry = tracked.get(room.locator);
|
|
241
170
|
const at = logPosition(room.roomVersion);
|
|
242
|
-
|
|
243
|
-
return [];
|
|
244
|
-
notifications.reach(entry.authority, at);
|
|
245
|
-
return [presented(entry.authority, at)];
|
|
171
|
+
return entry === undefined || at === null ? [] : [presented(entry.authority, at)];
|
|
246
172
|
}));
|
|
247
173
|
},
|
|
248
|
-
reopen: notifications.reopen,
|
|
249
174
|
observe: notifications.observe,
|
|
250
|
-
published(locator, roomVersion) {
|
|
251
|
-
const at = logPosition(roomVersion);
|
|
252
|
-
if (at !== null)
|
|
253
|
-
notifications.published(locator, at);
|
|
254
|
-
},
|
|
255
175
|
},
|
|
256
176
|
serviceMode: notifications.serviceMode,
|
|
257
177
|
};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export type SpaceSchemas = {
|
|
2
|
+
held(space: string, revision: string): string | undefined;
|
|
3
|
+
keep(space: string, revision: string, text: string): void;
|
|
4
|
+
};
|
|
5
|
+
export declare function spaceSchemas(): SpaceSchemas;
|
|
6
|
+
export declare function spaceIdentity(space: string): string;
|
|
7
|
+
//# sourceMappingURL=space-schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"space-schema.d.ts","sourceRoot":"","sources":["../src/space-schema.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IAC1D,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3D,CAAC;AAEF,wBAAgB,YAAY,IAAI,YAAY,CAY3C;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEnD"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
const HELD_TEXTS = 16;
|
|
2
|
+
export function spaceSchemas() {
|
|
3
|
+
const texts = new Map();
|
|
4
|
+
const key = (space, revision) => `${space} ${revision}`;
|
|
5
|
+
return {
|
|
6
|
+
held: (space, revision) => texts.get(key(space, revision)),
|
|
7
|
+
keep(space, revision, text) {
|
|
8
|
+
const named = key(space, revision);
|
|
9
|
+
texts.delete(named);
|
|
10
|
+
texts.set(named, text);
|
|
11
|
+
if (texts.size > HELD_TEXTS)
|
|
12
|
+
texts.delete(texts.keys().next().value);
|
|
13
|
+
},
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
export function spaceIdentity(space) {
|
|
17
|
+
return `space:${space}`;
|
|
18
|
+
}
|
package/dist/stream.d.ts
CHANGED
|
@@ -1,24 +1,24 @@
|
|
|
1
|
-
import { type
|
|
1
|
+
import { type AuthorityChange, type Discovery, type ConversationStream, type RoomStreamEvent, type ServiceModeSignal } from '@agentshouse/mdruntime';
|
|
2
2
|
import type { TrackedAuthority } from './discovery.js';
|
|
3
|
-
import type {
|
|
4
|
-
import { type
|
|
5
|
-
export type
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
3
|
+
import type { SpaceSchemas } from './space-schema.js';
|
|
4
|
+
import { type HouseDoor, type HouseHeldRoom, type HouseMode, type HouseStreamFrame } from './transport.js';
|
|
5
|
+
export type HouseOpeningFrame = Extract<HouseStreamFrame, {
|
|
6
|
+
type: 'opening';
|
|
7
|
+
}>;
|
|
8
|
+
export type HouseAuthorityChangedFrame = Extract<HouseStreamFrame, {
|
|
9
|
+
type: 'authority_changed';
|
|
10
|
+
}>;
|
|
11
|
+
export type HouseDiscovering = {
|
|
12
|
+
opened(frame: HouseOpeningFrame | null): Promise<Discovery | null>;
|
|
13
|
+
changed(frame: HouseAuthorityChangedFrame): AuthorityChange | null;
|
|
9
14
|
};
|
|
10
15
|
export type HouseNotifications = {
|
|
11
16
|
runtime: string;
|
|
12
|
-
observe(notify: (event: RoomStreamEvent) => void
|
|
17
|
+
observe(notify: (event: RoomStreamEvent) => void): () => void;
|
|
13
18
|
send(rooms: readonly HouseHeldRoom[]): void;
|
|
14
|
-
published(locator: string, at: LogPosition): void;
|
|
15
|
-
reopen(): void;
|
|
16
19
|
track(authorities: readonly TrackedAuthority[]): void;
|
|
17
|
-
reach(authority: string, at: LogPosition): void;
|
|
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
|
};
|
|
23
|
-
export declare function houseNotifications(transport: HouseDoor, mode: HouseMode): HouseNotifications;
|
|
23
|
+
export declare function houseNotifications(transport: HouseDoor, mode: HouseMode, discovering: HouseDiscovering, spaces: SpaceSchemas): HouseNotifications;
|
|
24
24
|
//# sourceMappingURL=stream.d.ts.map
|
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,EAGL,KAAK,
|
|
1
|
+
{"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../src/stream.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,eAAe,EAEpB,KAAK,SAAS,EACd,KAAK,kBAAkB,EAIvB,KAAK,eAAe,EAEpB,KAAK,iBAAiB,EAEvB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAEvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAUtD,OAAO,EAEL,KAAK,SAAS,EACd,KAAK,aAAa,EAElB,KAAK,SAAS,EAGd,KAAK,gBAAgB,EACtB,MAAM,gBAAgB,CAAC;AAaxB,MAAM,MAAM,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,EAAE;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,CAAC,CAAC;AAE/E,MAAM,MAAM,0BAA0B,GAAG,OAAO,CAAC,gBAAgB,EAAE;IAAE,IAAI,EAAE,mBAAmB,CAAA;CAAE,CAAC,CAAC;AAElG,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC;IACnE,OAAO,CAAC,KAAK,EAAE,0BAA0B,GAAG,eAAe,GAAG,IAAI,CAAC;CACpE,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,KAAK,CAAC,WAAW,EAAE,SAAS,gBAAgB,EAAE,GAAG,IAAI,CAAC;IACtD,aAAa,EAAE,kBAAkB,CAAC;IAClC,WAAW,EAAE,iBAAiB,CAAC;CAChC,CAAC;AA0FF,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,SAAS,EACf,WAAW,EAAE,gBAAgB,EAC7B,MAAM,EAAE,YAAY,GACnB,kBAAkB,CA8TpB"}
|