@agentshouse/mdruntime-adapter 0.1.0-ccda1a2da11c3 → 0.1.0-ccdfb41af2abb
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 +3 -71
- package/dist/actions.d.ts.map +1 -1
- package/dist/actions.js +1 -317
- package/dist/adapter.d.ts.map +1 -1
- package/dist/adapter.js +171 -336
- 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 +12 -12
- package/dist/discovery.d.ts.map +1 -1
- package/dist/discovery.js +44 -51
- package/dist/history.d.ts +12 -0
- package/dist/history.d.ts.map +1 -0
- package/dist/history.js +91 -0
- package/dist/house-model.d.ts +892 -0
- package/dist/house-model.d.ts.map +1 -0
- package/dist/house-model.js +482 -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 -2
- package/dist/model.d.ts.map +1 -1
- package/dist/model.js +10 -29
- package/dist/part.d.ts +12 -11
- package/dist/part.d.ts.map +1 -1
- package/dist/part.js +66 -56
- package/dist/read.d.ts +19 -56
- package/dist/read.d.ts.map +1 -1
- package/dist/read.js +138 -297
- 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 +19 -0
- package/dist/room-stream.d.ts.map +1 -0
- package/dist/room-stream.js +57 -0
- package/dist/room-types.d.ts +2 -1
- package/dist/room-types.d.ts.map +1 -1
- package/dist/room-types.js +62 -3
- 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 -177
- package/dist/stream.d.ts +13 -14
- package/dist/stream.d.ts.map +1 -1
- package/dist/stream.js +168 -426
- package/dist/transport.d.ts +48 -38
- package/dist/transport.d.ts.map +1 -1
- package/dist/transport.js +55 -11
- package/dist/upload.d.ts +12 -0
- package/dist/upload.d.ts.map +1 -0
- package/dist/upload.js +63 -0
- package/dist/write.d.ts +6 -1
- package/dist/write.d.ts.map +1 -1
- package/dist/write.js +19 -32
- package/package.json +8 -4
- package/AGENTS.md +0 -309
- package/dist/gather.d.ts +0 -4
- package/dist/gather.d.ts.map +0 -1
- package/dist/gather.js +0 -35
- package/dist/referrer.d.ts +0 -9
- package/dist/referrer.d.ts.map +0 -1
- package/dist/referrer.js +0 -41
package/dist/room-types.js
CHANGED
|
@@ -1,6 +1,26 @@
|
|
|
1
|
-
|
|
1
|
+
import { APP_REFERENCE_PATTERN } from './app-reference.js';
|
|
2
|
+
import { HOUSE_MODEL_TYPES } from './house-model.js';
|
|
3
|
+
export const INBOX_CHANNEL_KINDS = [
|
|
4
|
+
'telegram-bot',
|
|
5
|
+
'telegram-business',
|
|
6
|
+
'whatsapp',
|
|
7
|
+
'messenger',
|
|
8
|
+
'instagram',
|
|
9
|
+
'viber',
|
|
10
|
+
'tiktok',
|
|
11
|
+
];
|
|
2
12
|
export const INBOX_CHAT_TYPE = 'inbox-chat';
|
|
3
13
|
export const INBOX_MESSAGE_TYPE = 'inbox-message';
|
|
14
|
+
export const HOUSE_NAMEABLE_ROOM_TYPES = [INBOX_CHAT_TYPE, INBOX_MESSAGE_TYPE];
|
|
15
|
+
const WAYFINDING_MAP_TYPE = 'wayfinding-map';
|
|
16
|
+
const WAYFINDING_TICKET_TYPE = 'wayfinding-ticket';
|
|
17
|
+
const WAYFINDING_MAP_SECTIONS = [
|
|
18
|
+
'Destination',
|
|
19
|
+
'Notes',
|
|
20
|
+
'Decisions so far',
|
|
21
|
+
'Not yet specified',
|
|
22
|
+
'Out of scope',
|
|
23
|
+
];
|
|
4
24
|
const IDENTITY = "{ type: string, pattern: '^\\S+$' }";
|
|
5
25
|
const AGENT = [' agent: { type: string, format: uuid }', ' name: { type: string }'];
|
|
6
26
|
const ASSIGNEE = [
|
|
@@ -27,7 +47,6 @@ export const HOUSE_ROOM_TYPES = [
|
|
|
27
47
|
' type: object',
|
|
28
48
|
' properties:',
|
|
29
49
|
...AGENT,
|
|
30
|
-
' conversation: { type: string, format: uuid }',
|
|
31
50
|
' required: [inbox, channel, chat, customer]',
|
|
32
51
|
`${INBOX_MESSAGE_TYPE}:`,
|
|
33
52
|
' properties:',
|
|
@@ -41,6 +60,7 @@ export const HOUSE_ROOM_TYPES = [
|
|
|
41
60
|
` channel_message: ${IDENTITY}`,
|
|
42
61
|
' state: { enum: [sending, sent, failed] }',
|
|
43
62
|
' reason: { type: string }',
|
|
63
|
+
' labelled: { const: true }',
|
|
44
64
|
' reactions:',
|
|
45
65
|
' type: array',
|
|
46
66
|
' items:',
|
|
@@ -59,8 +79,47 @@ export const HOUSE_ROOM_TYPES = [
|
|
|
59
79
|
' assignee:',
|
|
60
80
|
...ASSIGNEE,
|
|
61
81
|
' sent_outside: { const: true }',
|
|
82
|
+
' template:',
|
|
83
|
+
' type: object',
|
|
84
|
+
' properties:',
|
|
85
|
+
' name: { type: string, minLength: 1 }',
|
|
86
|
+
' language: { type: string, minLength: 1 }',
|
|
87
|
+
' required: [name, language]',
|
|
88
|
+
' values:',
|
|
89
|
+
' type: object',
|
|
90
|
+
' additionalProperties: { type: string }',
|
|
91
|
+
' withheld: { const: true }',
|
|
62
92
|
' required: [direction]',
|
|
63
93
|
' if: { properties: { direction: { const: in } } }',
|
|
64
94
|
' then: { required: [sent_at] }',
|
|
65
|
-
|
|
95
|
+
`${WAYFINDING_MAP_TYPE}:`,
|
|
96
|
+
' properties:',
|
|
97
|
+
' title: { type: string }',
|
|
98
|
+
' required: [title]',
|
|
99
|
+
' sections:',
|
|
100
|
+
...WAYFINDING_MAP_SECTIONS.map((name) => ` ${name}: { kind: text, required: true }`),
|
|
101
|
+
`${WAYFINDING_TICKET_TYPE}:`,
|
|
102
|
+
' properties:',
|
|
103
|
+
' title: { type: string }',
|
|
104
|
+
' kind: { enum: [research, prototype, grilling, task] }',
|
|
105
|
+
' status: { enum: [open, in-progress, done, out-of-scope] }',
|
|
106
|
+
` map: { type: string, reference: ${WAYFINDING_MAP_TYPE} }`,
|
|
107
|
+
` blocked_by: { type: array, items: { type: string, reference: ${WAYFINDING_TICKET_TYPE} } }`,
|
|
108
|
+
' assignee:',
|
|
109
|
+
...ASSIGNEE,
|
|
110
|
+
' conversation: { type: string, format: uuid }',
|
|
111
|
+
` app: { type: string, pattern: '${APP_REFERENCE_PATTERN.source}' }`,
|
|
112
|
+
' required: [title, kind, status, map, blocked_by]',
|
|
113
|
+
' sections:',
|
|
114
|
+
' Question: { kind: text }',
|
|
115
|
+
' Answer: { kind: text }',
|
|
116
|
+
' allOf:',
|
|
117
|
+
' - if: { properties: { status: { enum: [in-progress, done, out-of-scope] } }, required: [status] }',
|
|
118
|
+
' then: { required: [assignee] }',
|
|
119
|
+
' else: { properties: { assignee: false } }',
|
|
120
|
+
' - if: { properties: { assignee: { required: [agent] } }, required: [assignee] }',
|
|
121
|
+
' else: { properties: { conversation: false } }',
|
|
122
|
+
' - if: { properties: { status: { enum: [done, out-of-scope] } }, required: [status] }',
|
|
123
|
+
' then: { sections: { Answer: { kind: text, required: true } } }',
|
|
124
|
+
HOUSE_MODEL_TYPES,
|
|
66
125
|
].join('\n');
|
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;AAehC,OAAO,EAKL,KAAK,kBAAkB,EACxB,MAAM,gBAAgB,CAAC;AAuBxB,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,kBAAkB,EAAE,QAAQ,UAAQ,GAAG,OAAO,CAkK1F"}
|
package/dist/site.js
CHANGED
|
@@ -1,15 +1,13 @@
|
|
|
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 {
|
|
8
|
-
import { HOUSE_ROOM_TYPES } from './room-types.js';
|
|
4
|
+
import { bootstrapping } from './read.js';
|
|
5
|
+
import { roomStreams } from './room-stream.js';
|
|
6
|
+
import { classifyDoor, discoveryFailure } from './refusal.js';
|
|
7
|
+
import { HOUSE_NAMEABLE_ROOM_TYPES, HOUSE_ROOM_TYPES } from './room-types.js';
|
|
9
8
|
import { houseNotifications } from './stream.js';
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import { followsVersion, logPosition, presented, reachedVersion, roomVersion, } from './version.js';
|
|
9
|
+
import { houseSiteRoute, SITE_DOOR_SUBMIT, SITE_FILES, SITE_SUBMISSION, } from './transport.js';
|
|
10
|
+
import { followsVersion, logPosition, presented, reachedVersion, roomVersion } from './version.js';
|
|
13
11
|
const UNCERTAIN = { kind: 'transport-uncertainty' };
|
|
14
12
|
function unfound() {
|
|
15
13
|
return { kind: 'rejected', code: 'file_not_found', fields: {}, retryable: false };
|
|
@@ -25,177 +23,97 @@ function siteRoom(tracked) {
|
|
|
25
23
|
providerOwnedPaths: [],
|
|
26
24
|
};
|
|
27
25
|
}
|
|
28
|
-
function settled(refused) {
|
|
29
|
-
return refused.kind === 'beyond-horizon' ? UNCERTAIN : refused;
|
|
30
|
-
}
|
|
31
26
|
export function createSiteAdapter(transport, snapshot = false) {
|
|
32
|
-
const notifications = houseNotifications(transport, 'site'
|
|
27
|
+
const notifications = houseNotifications(transport, 'site', {
|
|
28
|
+
opened: async () => {
|
|
29
|
+
const found = await discovered();
|
|
30
|
+
return found.kind === 'discovery' ? found : null;
|
|
31
|
+
},
|
|
32
|
+
changed: () => null,
|
|
33
|
+
});
|
|
33
34
|
const tracked = new Map();
|
|
34
|
-
const
|
|
35
|
-
|
|
36
|
-
const named = houseReferrer(referrer, tracked);
|
|
37
|
-
return named === null || !tracked.has(named.locator) ? null : named;
|
|
38
|
-
}
|
|
35
|
+
const read = new Map();
|
|
36
|
+
const rooms = roomStreams('site');
|
|
39
37
|
function fileRoute(request) {
|
|
40
|
-
const
|
|
41
|
-
if (
|
|
42
|
-
return { kind: '
|
|
43
|
-
}
|
|
44
|
-
if (request.fileRef === undefined)
|
|
45
|
-
return unfound();
|
|
46
|
-
const { room_ref, path, record } = named.referrer;
|
|
47
|
-
return `${SITE_FILES}${room_ref}/${encodeURIComponent(request.fileRef)}/${path === undefined
|
|
48
|
-
? `${SITE_FILE_RECORD}/${encodeURIComponent(record)}`
|
|
49
|
-
: encodeURIComponent(path)}`;
|
|
50
|
-
}
|
|
51
|
-
async function enumerated(entry, from, page) {
|
|
52
|
-
const answer = await transport.door(SITE_DOOR_ENUMERATE, {
|
|
53
|
-
positions: [
|
|
54
|
-
page === undefined
|
|
55
|
-
? presented(entry.authority, from)
|
|
56
|
-
: {
|
|
57
|
-
...presented(entry.authority, { position: page.after, logEpoch: from.logEpoch }),
|
|
58
|
-
page: { through: page.through, read: page.read },
|
|
59
|
-
},
|
|
60
|
-
],
|
|
61
|
-
});
|
|
62
|
-
const classified = classifyRead(answer.status, answer.body, entry.locator);
|
|
63
|
-
if (classified !== null)
|
|
64
|
-
return classified;
|
|
65
|
-
const found = parseEnumeration(answer.body, 'site');
|
|
66
|
-
if (found === null)
|
|
67
|
-
return UNCERTAIN;
|
|
68
|
-
return viewOf(found, entry) ?? { kind: 'room-not-readable', locator: entry.locator };
|
|
69
|
-
}
|
|
70
|
-
async function enumeration(entry, from) {
|
|
71
|
-
const first = await enumerated(entry, from);
|
|
72
|
-
return 'kind' in first ? first : wholeView(first, (page) => enumerated(entry, from, page));
|
|
38
|
+
const entry = tracked.get(request.locator);
|
|
39
|
+
if (entry === undefined)
|
|
40
|
+
return { kind: 'room-not-readable', locator: request.locator };
|
|
41
|
+
return `${SITE_FILES}${entry.authority}/${encodeURIComponent(request.revision)}/${encodeURIComponent(request.path)}`;
|
|
73
42
|
}
|
|
74
|
-
async function
|
|
75
|
-
const cut =
|
|
76
|
-
const
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
const
|
|
81
|
-
|
|
43
|
+
async function openedRoom(entry, arriving, signal) {
|
|
44
|
+
const cut = read.get(entry.locator);
|
|
45
|
+
const answered = await transport.streamed(`${houseSiteRoute('bootstrap')}/${entry.authority}${cut === undefined ? '' : `?expired=${cut}`}`, signal ?? new AbortController().signal);
|
|
46
|
+
if (answered.room === null)
|
|
47
|
+
return classifyDoor(answered.status, answered.body, entry.locator) ?? UNCERTAIN;
|
|
48
|
+
const head = await rooms.head(entry, answered.room, arriving, signal);
|
|
49
|
+
const at = head.kind === 'bootstrap' ? logPosition(head.roomVersion) : null;
|
|
50
|
+
if (at !== null)
|
|
51
|
+
read.set(entry.locator, at.position);
|
|
52
|
+
return head;
|
|
82
53
|
}
|
|
83
|
-
async function
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
}
|
|
95
|
-
return unverifiedPart(entry.locator);
|
|
54
|
+
async function streamedPage(entry, token) {
|
|
55
|
+
const part = await rooms.part(entry, token);
|
|
56
|
+
if ('kind' in part)
|
|
57
|
+
return part;
|
|
58
|
+
const { folders: _folders, ...page } = await stepped(bootstrapping(part.scope));
|
|
59
|
+
return {
|
|
60
|
+
...page,
|
|
61
|
+
...(part.models === undefined ? {} : { models: part.models }),
|
|
62
|
+
...(part.pageToken === undefined ? {} : { pageToken: part.pageToken }),
|
|
63
|
+
bytes: part.bytes,
|
|
64
|
+
};
|
|
96
65
|
}
|
|
97
|
-
async function
|
|
98
|
-
const
|
|
99
|
-
const
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
async function refreshed(entry, fromRoomVersion) {
|
|
112
|
-
const from = logPosition(fromRoomVersion);
|
|
113
|
-
if (from === null)
|
|
114
|
-
return { kind: 'beyond-horizon' };
|
|
115
|
-
const streamed = await stepped(notifications.advance(entry, from));
|
|
116
|
-
if (streamed !== null) {
|
|
117
|
-
const models = await streamedModels(streamed.schemas, entry, 'site');
|
|
118
|
-
return models === undefined ? streamed.page : { ...streamed.page, models };
|
|
119
|
-
}
|
|
120
|
-
const view = await enumeration(entry, from);
|
|
121
|
-
if ('kind' in view)
|
|
122
|
-
return view;
|
|
123
|
-
notifications.reach(entry.authority, view);
|
|
124
|
-
const answer = await refreshFrom(view, fromRoomVersion);
|
|
125
|
-
if (answer.kind !== 'net-advancement')
|
|
126
|
-
return answer;
|
|
127
|
-
const models = await viewModels(view, entry);
|
|
128
|
-
return models === undefined ? answer : { ...answer, models };
|
|
66
|
+
async function discovered() {
|
|
67
|
+
const answer = await transport.read(houseSiteRoute('discover'));
|
|
68
|
+
const failed = discoveryFailure(answer.status, answer.body);
|
|
69
|
+
if (failed !== null)
|
|
70
|
+
return failed;
|
|
71
|
+
const document = parseSiteDiscovery(answer.body);
|
|
72
|
+
if (document === null)
|
|
73
|
+
return UNCERTAIN;
|
|
74
|
+
const entries = siteTracked(document);
|
|
75
|
+
tracked.clear();
|
|
76
|
+
for (const entry of entries)
|
|
77
|
+
tracked.set(entry.locator, entry);
|
|
78
|
+
notifications.track(entries);
|
|
79
|
+
return mapDiscovery(document, entries.map(siteRoom), siteCapabilities());
|
|
129
80
|
}
|
|
130
81
|
return {
|
|
131
82
|
localSaves: true,
|
|
132
|
-
exhaustiveDiscovery: true,
|
|
133
83
|
roomTypes: HOUSE_ROOM_TYPES,
|
|
84
|
+
nameableRoomTypes: HOUSE_NAMEABLE_ROOM_TYPES,
|
|
134
85
|
async authorize() {
|
|
135
86
|
return {};
|
|
136
87
|
},
|
|
137
|
-
async discover() {
|
|
138
|
-
const answer = await transport.read(SITE_DOOR_DISCOVER);
|
|
139
|
-
const failed = discoveryFailure(answer.status, answer.body);
|
|
140
|
-
if (failed !== null)
|
|
141
|
-
return failed;
|
|
142
|
-
const document = parseSiteDiscovery(answer.body);
|
|
143
|
-
if (document === null)
|
|
144
|
-
return UNCERTAIN;
|
|
145
|
-
const entries = siteTracked(document);
|
|
146
|
-
tracked.clear();
|
|
147
|
-
for (const entry of entries)
|
|
148
|
-
tracked.set(entry.locator, entry);
|
|
149
|
-
notifications.track(entries);
|
|
150
|
-
return mapDiscovery(document, entries.map(siteRoom), siteCapabilities());
|
|
151
|
-
},
|
|
152
88
|
async bootstrap(_authorization, request) {
|
|
153
89
|
const entry = tracked.get(request.locator);
|
|
154
90
|
if (entry === undefined)
|
|
155
91
|
return { kind: 'room-not-readable', locator: request.locator };
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
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;
|
|
171
|
-
const seen = [
|
|
172
|
-
...continued.seen,
|
|
173
|
-
...entry.schemas.filter((schema) => scope.files.some((file) => file.path === schema)),
|
|
174
|
-
];
|
|
175
|
-
const models = await partModels(scope, entry, new Set(seen), !more);
|
|
176
|
-
const { folders: _folders, ...page } = await stepped(bootstrapping(scope));
|
|
177
|
-
return {
|
|
178
|
-
...page,
|
|
179
|
-
...(models === undefined ? {} : { models }),
|
|
180
|
-
...(more ? { pageToken: JSON.stringify({ ...continued, next, seen }) } : {}),
|
|
181
|
-
};
|
|
92
|
+
return request.pageToken === undefined
|
|
93
|
+
? openedRoom(entry, request.arriving, request.signal)
|
|
94
|
+
: streamedPage(entry, request.pageToken);
|
|
182
95
|
},
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
96
|
+
...(snapshot
|
|
97
|
+
? {
|
|
98
|
+
discover: discovered,
|
|
99
|
+
async refresh(_authorization, request) {
|
|
100
|
+
const entry = tracked.get(request.locator);
|
|
101
|
+
if (entry === undefined)
|
|
102
|
+
return { kind: 'room-not-readable', locator: request.locator };
|
|
103
|
+
if (request.pageToken !== undefined)
|
|
104
|
+
return UNCERTAIN;
|
|
105
|
+
return request.fromRoomVersion === roomVersion(entry)
|
|
106
|
+
? { kind: 'still-current' }
|
|
107
|
+
: { kind: 'beyond-horizon' };
|
|
108
|
+
},
|
|
193
109
|
}
|
|
194
|
-
|
|
195
|
-
},
|
|
110
|
+
: {}),
|
|
196
111
|
async mutate() {
|
|
197
112
|
return { kind: 'rejected', affected: {}, code: 'write-grant', fields: {}, retryable: false };
|
|
198
113
|
},
|
|
114
|
+
async attach() {
|
|
115
|
+
return { kind: 'rejected', code: 'write-grant', fields: {}, retryable: false };
|
|
116
|
+
},
|
|
199
117
|
async history() {
|
|
200
118
|
return { kind: 'no-history' };
|
|
201
119
|
},
|
|
@@ -220,13 +138,6 @@ export function createSiteAdapter(transport, snapshot = false) {
|
|
|
220
138
|
name: request.path.slice(request.path.lastIndexOf('/') + 1),
|
|
221
139
|
};
|
|
222
140
|
},
|
|
223
|
-
referrerScope(referrer) {
|
|
224
|
-
const named = published(referrer);
|
|
225
|
-
if (named === null)
|
|
226
|
-
return null;
|
|
227
|
-
const { path } = named.referrer;
|
|
228
|
-
return { locator: named.locator, ...(path === undefined ? {} : { path }) };
|
|
229
|
-
},
|
|
230
141
|
reached(locator, version, target) {
|
|
231
142
|
return reachedVersion(version, target, tracked.get(locator)?.logEpoch);
|
|
232
143
|
},
|
|
@@ -234,7 +145,7 @@ export function createSiteAdapter(transport, snapshot = false) {
|
|
|
234
145
|
return followsVersion(version, next);
|
|
235
146
|
},
|
|
236
147
|
async action(_authorization, request) {
|
|
237
|
-
if (request.name !==
|
|
148
|
+
if (request.name !== SITE_SUBMISSION) {
|
|
238
149
|
return {
|
|
239
150
|
kind: 'rejected',
|
|
240
151
|
code: 'action-unimplemented',
|
|
@@ -244,7 +155,7 @@ export function createSiteAdapter(transport, snapshot = false) {
|
|
|
244
155
|
}
|
|
245
156
|
if (!transport.online())
|
|
246
157
|
return UNCERTAIN;
|
|
247
|
-
return actionOutcome(await transport.door(SITE_DOOR_SUBMIT, request.input),
|
|
158
|
+
return actionOutcome(await transport.door(SITE_DOOR_SUBMIT, request.input), SITE_SUBMISSION);
|
|
248
159
|
},
|
|
249
160
|
roomStream: snapshot
|
|
250
161
|
? undefined
|
|
@@ -253,19 +164,10 @@ export function createSiteAdapter(transport, snapshot = false) {
|
|
|
253
164
|
notifications.send(rooms.flatMap((room) => {
|
|
254
165
|
const entry = tracked.get(room.locator);
|
|
255
166
|
const at = logPosition(room.roomVersion);
|
|
256
|
-
|
|
257
|
-
return [];
|
|
258
|
-
notifications.reach(entry.authority, at);
|
|
259
|
-
return [presented(entry.authority, at)];
|
|
167
|
+
return entry === undefined || at === null ? [] : [presented(entry.authority, at)];
|
|
260
168
|
}));
|
|
261
169
|
},
|
|
262
|
-
reopen: notifications.reopen,
|
|
263
170
|
observe: notifications.observe,
|
|
264
|
-
published(locator, roomVersion) {
|
|
265
|
-
const at = logPosition(roomVersion);
|
|
266
|
-
if (at !== null)
|
|
267
|
-
notifications.published(locator, at);
|
|
268
|
-
},
|
|
269
171
|
},
|
|
270
172
|
serviceMode: notifications.serviceMode,
|
|
271
173
|
};
|
package/dist/stream.d.ts
CHANGED
|
@@ -1,24 +1,23 @@
|
|
|
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
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
3
|
+
import { type HouseDoor, type HouseHeldRoom, type HouseMode, type HouseStreamFrame } from './transport.js';
|
|
4
|
+
export type HouseOpeningFrame = Extract<HouseStreamFrame, {
|
|
5
|
+
type: 'opening';
|
|
6
|
+
}>;
|
|
7
|
+
export type HouseAuthorityChangedFrame = Extract<HouseStreamFrame, {
|
|
8
|
+
type: 'authority_changed';
|
|
9
|
+
}>;
|
|
10
|
+
export type HouseDiscovering = {
|
|
11
|
+
opened(frame: HouseOpeningFrame | null): Promise<Discovery | null>;
|
|
12
|
+
changed(frame: HouseAuthorityChangedFrame): AuthorityChange | null;
|
|
9
13
|
};
|
|
10
14
|
export type HouseNotifications = {
|
|
11
15
|
runtime: string;
|
|
12
|
-
observe(notify: (event: RoomStreamEvent) => void
|
|
16
|
+
observe(notify: (event: RoomStreamEvent) => void): () => void;
|
|
13
17
|
send(rooms: readonly HouseHeldRoom[]): void;
|
|
14
|
-
published(locator: string, at: LogPosition): void;
|
|
15
|
-
reopen(): void;
|
|
16
18
|
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
19
|
conversations: ConversationStream;
|
|
21
20
|
serviceMode: ServiceModeSignal;
|
|
22
21
|
};
|
|
23
|
-
export declare function houseNotifications(transport: HouseDoor, mode: HouseMode): HouseNotifications;
|
|
22
|
+
export declare function houseNotifications(transport: HouseDoor, mode: HouseMode, discovering: HouseDiscovering): HouseNotifications;
|
|
24
23
|
//# 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;AAYvD,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;AAqFF,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,SAAS,EACf,WAAW,EAAE,gBAAgB,GAC5B,kBAAkB,CA6TpB"}
|