@agentshouse/mdruntime-adapter 0.1.0-cd673d02b6e50 → 0.1.0-cd75dfaf57319
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/dist/actions.d.ts +2 -47
- package/dist/actions.d.ts.map +1 -1
- package/dist/actions.js +7 -225
- package/dist/adapter.d.ts.map +1 -1
- package/dist/adapter.js +69 -214
- package/dist/discovery.d.ts +18 -5
- package/dist/discovery.d.ts.map +1 -1
- package/dist/discovery.js +60 -26
- 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 +718 -1
- package/dist/house-model.d.ts.map +1 -1
- package/dist/house-model.js +393 -486
- package/dist/index.d.ts +6 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -3
- package/dist/model.d.ts +5 -4
- package/dist/model.d.ts.map +1 -1
- package/dist/model.js +27 -22
- package/dist/read.d.ts +11 -44
- package/dist/read.d.ts.map +1 -1
- package/dist/read.js +25 -174
- 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 +2 -1
- package/dist/room-stream.d.ts.map +1 -1
- package/dist/room-stream.js +2 -2
- package/dist/room-types.d.ts +2 -2
- package/dist/room-types.d.ts.map +1 -1
- package/dist/room-types.js +7 -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 +50 -92
- 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 +44 -35
- package/dist/transport.d.ts.map +1 -1
- package/dist/transport.js +54 -12
- package/dist/upload.d.ts.map +1 -1
- package/dist/upload.js +2 -2
- package/dist/write.d.ts +2 -1
- package/dist/write.d.ts.map +1 -1
- package/dist/write.js +8 -23
- package/package.json +2 -2
- package/dist/gather.d.ts +0 -3
- package/dist/gather.d.ts.map +0 -1
- package/dist/gather.js +0 -35
package/dist/room-types.js
CHANGED
|
@@ -9,9 +9,9 @@ export const INBOX_CHANNEL_KINDS = [
|
|
|
9
9
|
'viber',
|
|
10
10
|
'tiktok',
|
|
11
11
|
];
|
|
12
|
-
export const
|
|
13
|
-
export const
|
|
14
|
-
export const HOUSE_NAMEABLE_ROOM_TYPES = [
|
|
12
|
+
export const CHAT_TYPE = 'chat';
|
|
13
|
+
export const CHAT_MESSAGE_TYPE = 'chat-message';
|
|
14
|
+
export const HOUSE_NAMEABLE_ROOM_TYPES = [CHAT_TYPE, CHAT_MESSAGE_TYPE];
|
|
15
15
|
const WAYFINDING_MAP_TYPE = 'wayfinding-map';
|
|
16
16
|
const WAYFINDING_TICKET_TYPE = 'wayfinding-ticket';
|
|
17
17
|
const WAYFINDING_MAP_SECTIONS = [
|
|
@@ -30,7 +30,7 @@ const ASSIGNEE = [
|
|
|
30
30
|
...AGENT,
|
|
31
31
|
];
|
|
32
32
|
export const HOUSE_ROOM_TYPES = [
|
|
33
|
-
`${
|
|
33
|
+
`${CHAT_TYPE}:`,
|
|
34
34
|
' properties:',
|
|
35
35
|
' inbox: { type: string, format: uuid }',
|
|
36
36
|
` channel: { enum: [${INBOX_CHANNEL_KINDS.join(', ')}] }`,
|
|
@@ -47,9 +47,8 @@ export const HOUSE_ROOM_TYPES = [
|
|
|
47
47
|
' type: object',
|
|
48
48
|
' properties:',
|
|
49
49
|
...AGENT,
|
|
50
|
-
'
|
|
51
|
-
|
|
52
|
-
`${INBOX_MESSAGE_TYPE}:`,
|
|
50
|
+
' required: [chat, customer]',
|
|
51
|
+
`${CHAT_MESSAGE_TYPE}:`,
|
|
53
52
|
' properties:',
|
|
54
53
|
' direction: { enum: [in, out] }',
|
|
55
54
|
' sender:',
|
|
@@ -59,8 +58,7 @@ export const HOUSE_ROOM_TYPES = [
|
|
|
59
58
|
` username: ${IDENTITY}`,
|
|
60
59
|
' sent_at: { type: string, format: date-time }',
|
|
61
60
|
` channel_message: ${IDENTITY}`,
|
|
62
|
-
'
|
|
63
|
-
' reason: { type: string }',
|
|
61
|
+
' labelled: { const: true }',
|
|
64
62
|
' reactions:',
|
|
65
63
|
' type: array',
|
|
66
64
|
' items:',
|
package/dist/search.d.ts
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { SearchAnswer, SearchAsk } from '@agentshouse/mdruntime';
|
|
2
|
+
import type { TrackedAuthority } from './discovery.js';
|
|
3
|
+
import { type HouseTransport } from './transport.js';
|
|
4
|
+
export declare function houseSearch(transport: Pick<HouseTransport, 'door'>, tracked: readonly TrackedAuthority[], request: SearchAsk): Promise<SearchAnswer>;
|
|
5
|
+
//# sourceMappingURL=search.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../src/search.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAa,MAAM,wBAAwB,CAAC;AACjF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAEvD,OAAO,EAAkB,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAsBrE,wBAAsB,WAAW,CAC/B,SAAS,EAAE,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,EACvC,OAAO,EAAE,SAAS,gBAAgB,EAAE,EACpC,OAAO,EAAE,SAAS,GACjB,OAAO,CAAC,YAAY,CAAC,CAoBvB"}
|
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 { bootstrapping, parseEnumeration, refreshFrom, viewOf, wholeView, } from './read.js';
|
|
4
|
+
import { bootstrapping } from './read.js';
|
|
6
5
|
import { roomStreams } from './room-stream.js';
|
|
7
|
-
import {
|
|
6
|
+
import { spaceSchemas } from './space-schema.js';
|
|
7
|
+
import { classifyDoor, discoveryFailure } from './refusal.js';
|
|
8
|
+
import { HOUSE_TYPED_PATHS } from './house-model.js';
|
|
8
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 };
|
|
@@ -19,48 +20,32 @@ function siteRoom(tracked) {
|
|
|
19
20
|
locator: tracked.locator,
|
|
20
21
|
handle: tracked.handle,
|
|
21
22
|
roomVersion: roomVersion(tracked),
|
|
22
|
-
operations: { write: [],
|
|
23
|
+
operations: { write: [], erase: [] },
|
|
23
24
|
replica: { selection: tracked.locator, admission: 'admitted', offline: 'open' },
|
|
24
25
|
providerOwnedPaths: [],
|
|
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
38
|
const read = new Map();
|
|
31
|
-
const rooms = roomStreams('site');
|
|
39
|
+
const rooms = roomStreams('site', spaces);
|
|
32
40
|
function fileRoute(request) {
|
|
33
41
|
const entry = tracked.get(request.locator);
|
|
34
42
|
if (entry === undefined)
|
|
35
43
|
return { kind: 'room-not-readable', locator: request.locator };
|
|
36
44
|
return `${SITE_FILES}${entry.authority}/${encodeURIComponent(request.revision)}/${encodeURIComponent(request.path)}`;
|
|
37
45
|
}
|
|
38
|
-
async function enumerated(entry, from, page) {
|
|
39
|
-
const answer = await transport.door(SITE_DOOR_ENUMERATE, {
|
|
40
|
-
positions: [
|
|
41
|
-
page === undefined
|
|
42
|
-
? presented(entry.authority, from)
|
|
43
|
-
: {
|
|
44
|
-
...presented(entry.authority, { position: page.after, logEpoch: from.logEpoch }),
|
|
45
|
-
page: { through: page.through, read: page.read },
|
|
46
|
-
},
|
|
47
|
-
],
|
|
48
|
-
});
|
|
49
|
-
const classified = classifyRead(answer.status, answer.body, entry.locator);
|
|
50
|
-
if (classified !== null)
|
|
51
|
-
return classified;
|
|
52
|
-
const found = parseEnumeration(answer.body, 'site');
|
|
53
|
-
if (found === null)
|
|
54
|
-
return UNCERTAIN;
|
|
55
|
-
return viewOf(found, entry) ?? { kind: 'room-not-readable', locator: entry.locator };
|
|
56
|
-
}
|
|
57
|
-
async function enumeration(entry, from) {
|
|
58
|
-
const first = await enumerated(entry, from);
|
|
59
|
-
return 'kind' in first ? first : wholeView(first, (page) => enumerated(entry, from, page));
|
|
60
|
-
}
|
|
61
46
|
async function openedRoom(entry, arriving, signal) {
|
|
62
47
|
const cut = read.get(entry.locator);
|
|
63
|
-
const answered = await transport.streamed(`${
|
|
48
|
+
const answered = await transport.streamed(`${houseSiteRoute('bootstrap')}/${entry.authority}${cut === undefined ? '' : `?expired=${cut}`}`, signal ?? new AbortController().signal);
|
|
64
49
|
if (answered.room === null)
|
|
65
50
|
return classifyDoor(answered.status, answered.body, entry.locator) ?? UNCERTAIN;
|
|
66
51
|
const head = await rooms.head(entry, answered.room, arriving, signal);
|
|
@@ -73,7 +58,6 @@ export function createSiteAdapter(transport, snapshot = false) {
|
|
|
73
58
|
const part = await rooms.part(entry, token);
|
|
74
59
|
if ('kind' in part)
|
|
75
60
|
return part;
|
|
76
|
-
notifications.reach(entry.authority, part.scope);
|
|
77
61
|
const { folders: _folders, ...page } = await stepped(bootstrapping(part.scope));
|
|
78
62
|
return {
|
|
79
63
|
...page,
|
|
@@ -82,48 +66,29 @@ export function createSiteAdapter(transport, snapshot = false) {
|
|
|
82
66
|
bytes: part.bytes,
|
|
83
67
|
};
|
|
84
68
|
}
|
|
85
|
-
async function
|
|
86
|
-
const
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
return
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
notifications.
|
|
98
|
-
|
|
99
|
-
if (answer.kind !== 'net-advancement')
|
|
100
|
-
return answer;
|
|
101
|
-
const models = await viewModels(view, entry);
|
|
102
|
-
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());
|
|
103
83
|
}
|
|
104
84
|
return {
|
|
105
85
|
localSaves: true,
|
|
106
|
-
exhaustiveDiscovery: true,
|
|
107
86
|
roomTypes: HOUSE_ROOM_TYPES,
|
|
108
87
|
nameableRoomTypes: HOUSE_NAMEABLE_ROOM_TYPES,
|
|
88
|
+
typedPaths: HOUSE_TYPED_PATHS,
|
|
109
89
|
async authorize() {
|
|
110
90
|
return {};
|
|
111
91
|
},
|
|
112
|
-
async discover() {
|
|
113
|
-
const answer = await transport.read(SITE_DOOR_DISCOVER);
|
|
114
|
-
const failed = discoveryFailure(answer.status, answer.body);
|
|
115
|
-
if (failed !== null)
|
|
116
|
-
return failed;
|
|
117
|
-
const document = parseSiteDiscovery(answer.body);
|
|
118
|
-
if (document === null)
|
|
119
|
-
return UNCERTAIN;
|
|
120
|
-
const entries = siteTracked(document);
|
|
121
|
-
tracked.clear();
|
|
122
|
-
for (const entry of entries)
|
|
123
|
-
tracked.set(entry.locator, entry);
|
|
124
|
-
notifications.track(entries);
|
|
125
|
-
return mapDiscovery(document, entries.map(siteRoom), siteCapabilities());
|
|
126
|
-
},
|
|
127
92
|
async bootstrap(_authorization, request) {
|
|
128
93
|
const entry = tracked.get(request.locator);
|
|
129
94
|
if (entry === undefined)
|
|
@@ -132,19 +97,21 @@ export function createSiteAdapter(transport, snapshot = false) {
|
|
|
132
97
|
? openedRoom(entry, request.arriving, request.signal)
|
|
133
98
|
: streamedPage(entry, request.pageToken);
|
|
134
99
|
},
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
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
|
+
},
|
|
145
113
|
}
|
|
146
|
-
|
|
147
|
-
},
|
|
114
|
+
: {}),
|
|
148
115
|
async mutate() {
|
|
149
116
|
return { kind: 'rejected', affected: {}, code: 'write-grant', fields: {}, retryable: false };
|
|
150
117
|
},
|
|
@@ -182,7 +149,7 @@ export function createSiteAdapter(transport, snapshot = false) {
|
|
|
182
149
|
return followsVersion(version, next);
|
|
183
150
|
},
|
|
184
151
|
async action(_authorization, request) {
|
|
185
|
-
if (request.name !==
|
|
152
|
+
if (request.name !== SITE_SUBMISSION) {
|
|
186
153
|
return {
|
|
187
154
|
kind: 'rejected',
|
|
188
155
|
code: 'action-unimplemented',
|
|
@@ -192,7 +159,7 @@ export function createSiteAdapter(transport, snapshot = false) {
|
|
|
192
159
|
}
|
|
193
160
|
if (!transport.online())
|
|
194
161
|
return UNCERTAIN;
|
|
195
|
-
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);
|
|
196
163
|
},
|
|
197
164
|
roomStream: snapshot
|
|
198
165
|
? undefined
|
|
@@ -201,19 +168,10 @@ export function createSiteAdapter(transport, snapshot = false) {
|
|
|
201
168
|
notifications.send(rooms.flatMap((room) => {
|
|
202
169
|
const entry = tracked.get(room.locator);
|
|
203
170
|
const at = logPosition(room.roomVersion);
|
|
204
|
-
|
|
205
|
-
return [];
|
|
206
|
-
notifications.reach(entry.authority, at);
|
|
207
|
-
return [presented(entry.authority, at)];
|
|
171
|
+
return entry === undefined || at === null ? [] : [presented(entry.authority, at)];
|
|
208
172
|
}));
|
|
209
173
|
},
|
|
210
|
-
reopen: notifications.reopen,
|
|
211
174
|
observe: notifications.observe,
|
|
212
|
-
published(locator, roomVersion) {
|
|
213
|
-
const at = logPosition(roomVersion);
|
|
214
|
-
if (at !== null)
|
|
215
|
-
notifications.published(locator, at);
|
|
216
|
-
},
|
|
217
175
|
},
|
|
218
176
|
serviceMode: notifications.serviceMode,
|
|
219
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"}
|