@agentshouse/mdruntime-adapter 0.1.0-cd23c45caa798 → 0.1.0-cd24cf2286fd6
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 -72
- package/dist/actions.d.ts.map +1 -1
- package/dist/actions.js +7 -319
- package/dist/adapter.d.ts.map +1 -1
- package/dist/adapter.js +204 -417
- 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/chunks.d.ts +38 -0
- package/dist/chunks.d.ts.map +1 -0
- package/dist/chunks.js +247 -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 +22 -15
- package/dist/discovery.d.ts.map +1 -1
- package/dist/discovery.js +75 -56
- 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 +641 -0
- package/dist/house-model.d.ts.map +1 -0
- package/dist/house-model.js +361 -0
- package/dist/index.d.ts +10 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -1
- package/dist/model.d.ts +5 -4
- package/dist/model.d.ts.map +1 -1
- package/dist/model.js +34 -41
- package/dist/read.d.ts +31 -54
- package/dist/read.d.ts.map +1 -1
- package/dist/read.js +82 -300
- package/dist/refusal.d.ts +0 -3
- package/dist/refusal.d.ts.map +1 -1
- package/dist/refusal.js +0 -5
- package/dist/room-types.d.ts +7 -0
- package/dist/room-types.d.ts.map +1 -0
- package/dist/room-types.js +123 -0
- 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 +82 -185
- 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 +16 -14
- package/dist/stream.d.ts.map +1 -1
- package/dist/stream.js +230 -408
- package/dist/transport.d.ts +50 -40
- package/dist/transport.d.ts.map +1 -1
- package/dist/transport.js +54 -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 +28 -39
- package/package.json +8 -4
- package/AGENTS.md +0 -304
- package/dist/gather.d.ts +0 -4
- package/dist/gather.d.ts.map +0 -1
- package/dist/gather.js +0 -35
- package/dist/handed.d.ts +0 -15
- package/dist/handed.d.ts.map +0 -1
- package/dist/handed.js +0 -45
- package/dist/part.d.ts +0 -13
- package/dist/part.d.ts.map +0 -1
- package/dist/part.js +0 -80
- package/dist/referrer.d.ts +0 -7
- package/dist/referrer.d.ts.map +0 -1
- package/dist/referrer.js +0 -33
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-reference.d.ts","sourceRoot":"","sources":["../src/app-reference.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,qBAAqB,QAEjC,CAAC"}
|
package/dist/chunks.d.ts
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { type AdapterFailure, type BootstrapPart, type BootstrapResult } from '@agentshouse/mdruntime';
|
|
2
|
+
import type { TrackedAuthority } from './discovery.js';
|
|
3
|
+
import { type HouseModels, type HouseScope } from './read.js';
|
|
4
|
+
import type { SpaceSchemas } from './space-schema.js';
|
|
5
|
+
import { type HouseDoor, type HouseMode } from './transport.js';
|
|
6
|
+
import { type LogPosition } from './version.js';
|
|
7
|
+
export type ChunkAddress = {
|
|
8
|
+
readonly url: string;
|
|
9
|
+
readonly bytes: number;
|
|
10
|
+
};
|
|
11
|
+
export type ChunkedRoom = LogPosition & {
|
|
12
|
+
readonly anchor: string;
|
|
13
|
+
readonly mode: HouseMode;
|
|
14
|
+
readonly chunks: ReadonlyMap<string, ChunkAddress>;
|
|
15
|
+
readonly parts: readonly BootstrapPart[];
|
|
16
|
+
readonly names: ReadonlyMap<string, string>;
|
|
17
|
+
readonly models: HouseModels;
|
|
18
|
+
};
|
|
19
|
+
export type Listed = ChunkedRoom | {
|
|
20
|
+
readonly kind: 'not-ready';
|
|
21
|
+
} | AdapterFailure;
|
|
22
|
+
type Answered = {
|
|
23
|
+
readonly status: number;
|
|
24
|
+
readonly body: unknown;
|
|
25
|
+
};
|
|
26
|
+
export declare function partId(logEpoch: string, hash: string): string;
|
|
27
|
+
export declare function siteChunkList(answer: Answered, locator: string): Listed;
|
|
28
|
+
export declare function chunkedHead(listed: ChunkedRoom, entry: TrackedAuthority, spaces: SpaceSchemas): Promise<BootstrapResult>;
|
|
29
|
+
export declare function chunkPart(body: ReadableStream<Uint8Array> | null, room: ChunkedRoom, id: string, arriving: ((bytes: number) => void) | undefined): Promise<BootstrapResult>;
|
|
30
|
+
export declare function chunkLister(transport: HouseDoor, most: () => number): {
|
|
31
|
+
askAll: (entries: readonly TrackedAuthority[]) => void;
|
|
32
|
+
list: (entry: TrackedAuthority) => Promise<Listed>;
|
|
33
|
+
renew(entry: TrackedAuthority, installing: readonly TrackedAuthority[]): Promise<Listed>;
|
|
34
|
+
forget(): void;
|
|
35
|
+
};
|
|
36
|
+
export declare function chunkScope(body: ReadableStream<Uint8Array>, room: ChunkedRoom, arriving: ((bytes: number) => void) | undefined): Promise<HouseScope | null>;
|
|
37
|
+
export {};
|
|
38
|
+
//# sourceMappingURL=chunks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunks.d.ts","sourceRoot":"","sources":["../src/chunks.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,eAAe,EACrB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAEvD,OAAO,EAML,KAAK,WAAW,EAChB,KAAK,UAAU,EAChB,MAAM,WAAW,CAAC;AAEnB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAkB,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChF,OAAO,EAA6B,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3E,MAAM,MAAM,YAAY,GAAG;IAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAE5E,MAAM,MAAM,WAAW,GAAG,WAAW,GAAG;IACtC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACnD,QAAQ,CAAC,KAAK,EAAE,SAAS,aAAa,EAAE,CAAC;IACzC,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5C,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,MAAM,GAAG,WAAW,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAA;CAAE,GAAG,cAAc,CAAC;AAEnF,KAAK,QAAQ,GAAG;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;CAAE,CAAC;AAoCpE,wBAAgB,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAE7D;AA4BD,wBAAgB,aAAa,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAIvE;AAED,wBAAsB,WAAW,CAC/B,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,gBAAgB,EACvB,MAAM,EAAE,YAAY,GACnB,OAAO,CAAC,eAAe,CAAC,CAuB1B;AAED,wBAAsB,SAAS,CAC7B,IAAI,EAAE,cAAc,CAAC,UAAU,CAAC,GAAG,IAAI,EACvC,IAAI,EAAE,WAAW,EACjB,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,GAC9C,OAAO,CAAC,eAAe,CAAC,CAM1B;AAgBD,wBAAgB,WAAW,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,MAAM;sBAwCzC,SAAS,gBAAgB,EAAE;kBAU/B,gBAAgB,KAAG,OAAO,CAAC,MAAM,CAAC;iBASxC,gBAAgB,cAAc,SAAS,gBAAgB,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;;EAc3F;AAuCD,wBAAsB,UAAU,CAC9B,IAAI,EAAE,cAAc,CAAC,UAAU,CAAC,EAChC,IAAI,EAAE,WAAW,EACjB,QAAQ,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,GAC9C,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAgC5B"}
|
package/dist/chunks.js
ADDED
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
import { paced, ROW_WEIGHT, stepped, } from '@agentshouse/mdruntime';
|
|
2
|
+
import { manifestedModels } from './model.js';
|
|
3
|
+
import { authorityRoot, bootstrapping, parseFile, } from './read.js';
|
|
4
|
+
import { classifyDoor } from './refusal.js';
|
|
5
|
+
import { houseDoorRoute } from './transport.js';
|
|
6
|
+
import { readPosition, roomVersion } from './version.js';
|
|
7
|
+
function authorKey(author) {
|
|
8
|
+
for (const kind of ['user', 'site', 'inbox']) {
|
|
9
|
+
if (typeof author[kind] === 'string')
|
|
10
|
+
return `${kind}:${author[kind]}`;
|
|
11
|
+
}
|
|
12
|
+
const { app, release, function: named } = author;
|
|
13
|
+
return typeof app === 'string' && typeof release === 'string' && typeof named === 'string'
|
|
14
|
+
? `app:${app}:${release}:${named}`
|
|
15
|
+
: null;
|
|
16
|
+
}
|
|
17
|
+
function namesOf(authors) {
|
|
18
|
+
if (!Array.isArray(authors))
|
|
19
|
+
return null;
|
|
20
|
+
const names = new Map();
|
|
21
|
+
for (const author of authors) {
|
|
22
|
+
const key = typeof author === 'object' && author !== null ? authorKey(author) : null;
|
|
23
|
+
if (key === null || typeof author.name !== 'string')
|
|
24
|
+
return null;
|
|
25
|
+
names.set(key, author.name);
|
|
26
|
+
}
|
|
27
|
+
return names;
|
|
28
|
+
}
|
|
29
|
+
function modelsOf(models, mode) {
|
|
30
|
+
if (!Array.isArray(models))
|
|
31
|
+
return null;
|
|
32
|
+
const files = [];
|
|
33
|
+
const contents = [];
|
|
34
|
+
for (const entry of models) {
|
|
35
|
+
const file = parseFile(entry, mode);
|
|
36
|
+
if (file === null || typeof entry.content !== 'string')
|
|
37
|
+
return null;
|
|
38
|
+
files.push(file);
|
|
39
|
+
contents.push({ path: file.path, content: entry.content });
|
|
40
|
+
}
|
|
41
|
+
return { files, contents };
|
|
42
|
+
}
|
|
43
|
+
export function partId(logEpoch, hash) {
|
|
44
|
+
return `${logEpoch}:${hash}`;
|
|
45
|
+
}
|
|
46
|
+
function chunkedRoom(room, mode) {
|
|
47
|
+
const at = readPosition(room);
|
|
48
|
+
const names = mode === 'site' ? new Map() : namesOf(room.authors);
|
|
49
|
+
const models = modelsOf(room.models, mode);
|
|
50
|
+
if (at === null || names === null || models === null || !Array.isArray(room.chunks))
|
|
51
|
+
return null;
|
|
52
|
+
const chunks = new Map();
|
|
53
|
+
const parts = [];
|
|
54
|
+
for (const chunk of room.chunks) {
|
|
55
|
+
const { hash, bytes, download } = chunk;
|
|
56
|
+
if (typeof hash !== 'string' || typeof bytes !== 'number' || typeof download !== 'string')
|
|
57
|
+
return null;
|
|
58
|
+
const id = partId(at.logEpoch, hash);
|
|
59
|
+
chunks.set(id, { url: download, bytes });
|
|
60
|
+
parts.push({ id, bytes });
|
|
61
|
+
}
|
|
62
|
+
return { anchor: room.room_ref, ...at, mode, chunks, parts, names, models };
|
|
63
|
+
}
|
|
64
|
+
function listedRoom(room, mode) {
|
|
65
|
+
if (typeof room !== 'object' || room === null)
|
|
66
|
+
return null;
|
|
67
|
+
const held = room;
|
|
68
|
+
if (typeof held.room_ref !== 'string')
|
|
69
|
+
return null;
|
|
70
|
+
if (held.ready === false)
|
|
71
|
+
return { kind: 'not-ready' };
|
|
72
|
+
return held.ready === true ? chunkedRoom(held, mode) : null;
|
|
73
|
+
}
|
|
74
|
+
export function siteChunkList(answer, locator) {
|
|
75
|
+
const failure = classifyDoor(answer.status, answer.body, locator);
|
|
76
|
+
if (failure !== null)
|
|
77
|
+
return failure;
|
|
78
|
+
return listedRoom(answer.body, 'site') ?? { kind: 'transport-uncertainty' };
|
|
79
|
+
}
|
|
80
|
+
export async function chunkedHead(listed, entry, spaces) {
|
|
81
|
+
if (listed.anchor !== entry.authority)
|
|
82
|
+
return { kind: 'transport-uncertainty' };
|
|
83
|
+
const models = await manifestedModels({
|
|
84
|
+
anchor: listed.anchor,
|
|
85
|
+
position: listed.position,
|
|
86
|
+
logEpoch: listed.logEpoch,
|
|
87
|
+
models: listed.models,
|
|
88
|
+
}, entry, spaces);
|
|
89
|
+
return {
|
|
90
|
+
kind: 'bootstrap',
|
|
91
|
+
roomVersion: roomVersion(listed),
|
|
92
|
+
documents: {},
|
|
93
|
+
facts: {},
|
|
94
|
+
revisions: {},
|
|
95
|
+
changes: {},
|
|
96
|
+
binaryFiles: {},
|
|
97
|
+
parts: listed.parts,
|
|
98
|
+
...(models === undefined ? {} : { models }),
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
export async function chunkPart(body, room, id, arriving) {
|
|
102
|
+
const address = room.chunks.get(id);
|
|
103
|
+
if (body === null || address === undefined)
|
|
104
|
+
return { kind: 'transport-uncertainty' };
|
|
105
|
+
const scope = await chunkScope(body, room, arriving).catch(() => null);
|
|
106
|
+
if (scope === null)
|
|
107
|
+
return { kind: 'transport-uncertainty' };
|
|
108
|
+
return { ...(await stepped(bootstrapping(scope))), bytes: address.bytes };
|
|
109
|
+
}
|
|
110
|
+
function listedRooms(answer) {
|
|
111
|
+
const rooms = answer.body?.rooms;
|
|
112
|
+
if (!Array.isArray(rooms))
|
|
113
|
+
return null;
|
|
114
|
+
const listed = new Map();
|
|
115
|
+
for (const room of rooms) {
|
|
116
|
+
const held = listedRoom(room, 'credential');
|
|
117
|
+
if (held === null)
|
|
118
|
+
return null;
|
|
119
|
+
listed.set(room.room_ref, held);
|
|
120
|
+
}
|
|
121
|
+
return listed;
|
|
122
|
+
}
|
|
123
|
+
export function chunkLister(transport, most) {
|
|
124
|
+
const asked = new Map();
|
|
125
|
+
function answered(entries, whole) {
|
|
126
|
+
const prefixes = whole ? ['/'] : entries.map((entry) => authorityRoot(entry.handle));
|
|
127
|
+
return transport.door(houseDoorRoute('room-chunks/list'), { prefixes }).then((answer) => {
|
|
128
|
+
const failure = classifyDoor(answer.status, answer.body, '');
|
|
129
|
+
if (failure !== null)
|
|
130
|
+
return failed(entries, failure);
|
|
131
|
+
const listed = listedRooms(answer);
|
|
132
|
+
return listed ?? failed(entries, { kind: 'transport-uncertainty' });
|
|
133
|
+
}, () => failed(entries, { kind: 'transport-uncertainty' }));
|
|
134
|
+
}
|
|
135
|
+
function failed(entries, failure) {
|
|
136
|
+
return new Map(entries.map((entry) => [
|
|
137
|
+
entry.authority,
|
|
138
|
+
failure.kind === 'room-not-readable' || failure.kind === 'scoped-refusal'
|
|
139
|
+
? { ...failure, locator: entry.locator }
|
|
140
|
+
: failure,
|
|
141
|
+
]));
|
|
142
|
+
}
|
|
143
|
+
function settled(entry, lists) {
|
|
144
|
+
return lists.then((listed) => listed.get(entry.authority) ?? { kind: 'room-not-readable', locator: entry.locator });
|
|
145
|
+
}
|
|
146
|
+
function askAll(entries) {
|
|
147
|
+
if (entries.length === 0)
|
|
148
|
+
return;
|
|
149
|
+
const lists = answered(entries, entries.length > most());
|
|
150
|
+
for (const entry of entries) {
|
|
151
|
+
const listed = settled(entry, lists);
|
|
152
|
+
listed.catch(() => { });
|
|
153
|
+
asked.set(entry.authority, { entry, listed });
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
function list(entry) {
|
|
157
|
+
const held = asked.get(entry.authority);
|
|
158
|
+
asked.delete(entry.authority);
|
|
159
|
+
return held?.listed ?? settled(entry, answered([entry], false));
|
|
160
|
+
}
|
|
161
|
+
return {
|
|
162
|
+
askAll,
|
|
163
|
+
list,
|
|
164
|
+
renew(entry, installing) {
|
|
165
|
+
if (!asked.has(entry.authority)) {
|
|
166
|
+
const waiting = [...asked.values()].map((held) => held.entry);
|
|
167
|
+
const due = new Map([entry, ...installing, ...waiting].map((held) => [held.authority, held]));
|
|
168
|
+
askAll([...due.values()]);
|
|
169
|
+
}
|
|
170
|
+
return list(entry);
|
|
171
|
+
},
|
|
172
|
+
forget() {
|
|
173
|
+
asked.clear();
|
|
174
|
+
},
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
function folderLine(entry) {
|
|
178
|
+
return typeof entry.folder === 'string' && Object.keys(entry).length === 1 ? entry.folder : null;
|
|
179
|
+
}
|
|
180
|
+
function chunkEntry(line, room, read) {
|
|
181
|
+
let entry;
|
|
182
|
+
try {
|
|
183
|
+
entry = JSON.parse(line);
|
|
184
|
+
}
|
|
185
|
+
catch {
|
|
186
|
+
return false;
|
|
187
|
+
}
|
|
188
|
+
if (typeof entry !== 'object' || entry === null)
|
|
189
|
+
return false;
|
|
190
|
+
const folder = folderLine(entry);
|
|
191
|
+
if (folder !== null) {
|
|
192
|
+
read.folders.push(folder);
|
|
193
|
+
return true;
|
|
194
|
+
}
|
|
195
|
+
const author = entry.author;
|
|
196
|
+
let named = entry;
|
|
197
|
+
if (author !== undefined) {
|
|
198
|
+
const key = typeof author === 'object' && author !== null ? authorKey(author) : null;
|
|
199
|
+
const name = key === null ? undefined : room.names.get(key);
|
|
200
|
+
if (name === undefined)
|
|
201
|
+
return false;
|
|
202
|
+
named = { ...entry, author: { ...author, name } };
|
|
203
|
+
}
|
|
204
|
+
const file = parseFile(named, room.mode);
|
|
205
|
+
if (file === null)
|
|
206
|
+
return false;
|
|
207
|
+
read.files.push(file);
|
|
208
|
+
if (typeof entry.content === 'string')
|
|
209
|
+
read.contents.push({ path: file.path, content: entry.content });
|
|
210
|
+
return true;
|
|
211
|
+
}
|
|
212
|
+
export async function chunkScope(body, room, arriving) {
|
|
213
|
+
const read = {
|
|
214
|
+
files: [],
|
|
215
|
+
contents: [],
|
|
216
|
+
folders: [],
|
|
217
|
+
};
|
|
218
|
+
const reader = body.getReader();
|
|
219
|
+
const decoder = new TextDecoder();
|
|
220
|
+
const pace = paced();
|
|
221
|
+
const unfinished = [];
|
|
222
|
+
let bytes = 0;
|
|
223
|
+
for (let chunk = await reader.read(); chunk.done !== true; chunk = await reader.read()) {
|
|
224
|
+
bytes += chunk.value.length;
|
|
225
|
+
arriving?.(bytes);
|
|
226
|
+
const text = decoder.decode(chunk.value, { stream: true });
|
|
227
|
+
let start = 0;
|
|
228
|
+
for (let end = text.indexOf('\n'); end !== -1; end = text.indexOf('\n', start)) {
|
|
229
|
+
const piece = text.slice(start, end);
|
|
230
|
+
const line = unfinished.length === 0 ? piece : unfinished.splice(0).join('') + piece;
|
|
231
|
+
start = end + 1;
|
|
232
|
+
if (line.length > 0 && !chunkEntry(line, room, read)) {
|
|
233
|
+
await reader.cancel();
|
|
234
|
+
return null;
|
|
235
|
+
}
|
|
236
|
+
const due = pace(line.length + ROW_WEIGHT);
|
|
237
|
+
if (due instanceof Promise)
|
|
238
|
+
await due;
|
|
239
|
+
}
|
|
240
|
+
if (start < text.length)
|
|
241
|
+
unfinished.push(text.slice(start));
|
|
242
|
+
}
|
|
243
|
+
const rest = unfinished.join('') + decoder.decode();
|
|
244
|
+
if (rest.length > 0 && !chunkEntry(rest, room, read))
|
|
245
|
+
return null;
|
|
246
|
+
return { anchor: room.anchor, position: room.position, logEpoch: room.logEpoch, ...read };
|
|
247
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crockford.d.ts","sourceRoot":"","sources":["../src/crockford.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,qCAAqC,CAAC;AAErE,eAAO,MAAM,mBAAmB,uCAA4B,CAAC;AAE7D,eAAO,MAAM,2BAA2B,QAAqC,CAAC"}
|
package/dist/discovery.d.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import type { Capability, DiscoveredRoom, Discovery, Member, ProviderLimit, Retention } from '@agentshouse/mdruntime';
|
|
2
2
|
import { type LogPosition } from './version.js';
|
|
3
3
|
export declare const PROVIDER_ACTIONS = "provider-actions";
|
|
4
|
-
export declare const DISCOVER_PREFIXES: readonly string[];
|
|
5
4
|
export type HouseBounds = {
|
|
6
5
|
max_authored_file_bytes: number;
|
|
7
6
|
max_batch_operations: number;
|
|
@@ -13,29 +12,23 @@ export type HouseBounds = {
|
|
|
13
12
|
max_inline_body_bytes: number;
|
|
14
13
|
max_upload_bytes: number;
|
|
15
14
|
max_prefixes: number;
|
|
16
|
-
max_held_files: number;
|
|
17
15
|
change_retention_seconds: number;
|
|
18
|
-
operation_retention_seconds: number;
|
|
19
16
|
max_move_documents?: number;
|
|
20
17
|
};
|
|
21
18
|
export type HouseOperations = {
|
|
22
19
|
write: readonly string[];
|
|
23
|
-
|
|
24
|
-
};
|
|
25
|
-
export type HouseReadLevel = 'mcp' | 'online' | 'local';
|
|
26
|
-
export type HouseModel = {
|
|
27
|
-
root: string;
|
|
28
|
-
paths: readonly string[];
|
|
20
|
+
erase: readonly string[];
|
|
29
21
|
};
|
|
22
|
+
export type HouseAccessLevel = 'search' | 'open' | 'keep';
|
|
30
23
|
export type HouseAuthority = LogPosition & {
|
|
31
24
|
roomRef: string;
|
|
32
25
|
roomHandle: string;
|
|
33
26
|
name: string;
|
|
34
27
|
schema: string;
|
|
35
|
-
|
|
28
|
+
typedSelection: readonly string[] | null;
|
|
36
29
|
managedReplication: 'admitted' | 'unavailable';
|
|
37
30
|
protectedPaths: readonly string[];
|
|
38
|
-
|
|
31
|
+
level: HouseAccessLevel;
|
|
39
32
|
operations: HouseOperations;
|
|
40
33
|
};
|
|
41
34
|
export type HouseDiscoveryDocument = {
|
|
@@ -44,13 +37,17 @@ export type HouseDiscoveryDocument = {
|
|
|
44
37
|
authorities: readonly HouseAuthority[];
|
|
45
38
|
actions: readonly string[];
|
|
46
39
|
};
|
|
40
|
+
export type HouseAuthorityChange = {
|
|
41
|
+
member: Member;
|
|
42
|
+
authorities: readonly HouseAuthority[];
|
|
43
|
+
left: readonly string[];
|
|
44
|
+
};
|
|
47
45
|
export type TrackedAuthority = LogPosition & {
|
|
48
46
|
locator: string;
|
|
49
47
|
authority: string;
|
|
50
48
|
handle: string;
|
|
51
49
|
schema: string;
|
|
52
|
-
|
|
53
|
-
schemas: readonly string[];
|
|
50
|
+
typedSelection: readonly string[] | null;
|
|
54
51
|
};
|
|
55
52
|
export type HouseSiteAuthority = LogPosition & {
|
|
56
53
|
roomRef: string;
|
|
@@ -61,14 +58,24 @@ export type HouseSiteDiscovery = {
|
|
|
61
58
|
bounds: HouseBounds;
|
|
62
59
|
authorities: readonly HouseSiteAuthority[];
|
|
63
60
|
};
|
|
61
|
+
type RoomOwn = 'room_ref' | 'room_handle' | 'name' | 'position';
|
|
62
|
+
type Folded<A extends Record<RoomOwn, unknown>> = {
|
|
63
|
+
readonly shapes: readonly Omit<A, RoomOwn>[];
|
|
64
|
+
readonly rooms: readonly (Pick<A, RoomOwn> & {
|
|
65
|
+
readonly shape: number;
|
|
66
|
+
})[];
|
|
67
|
+
};
|
|
68
|
+
export declare function foldedAuthorities<A extends Record<RoomOwn, unknown>>(authorities: readonly A[]): Folded<A>;
|
|
64
69
|
export declare function parseDiscovery(body: unknown): HouseDiscoveryDocument | null;
|
|
70
|
+
export declare function parseAuthorityChange(body: unknown): HouseAuthorityChange | null;
|
|
65
71
|
export declare function parseSiteDiscovery(body: unknown): HouseSiteDiscovery | null;
|
|
66
72
|
export declare function siteTracked(document: HouseSiteDiscovery): TrackedAuthority[];
|
|
67
|
-
export declare function trackedFrom(document: HouseDiscoveryDocument): TrackedAuthority[];
|
|
73
|
+
export declare function trackedFrom(document: Pick<HouseDiscoveryDocument, 'authorities'>): TrackedAuthority[];
|
|
68
74
|
export declare function providerLimits(bounds: HouseBounds): readonly ProviderLimit[];
|
|
69
75
|
export declare function declaredRetention(bounds: HouseBounds): Retention;
|
|
70
|
-
export declare function capabilities(actions: HouseDiscoveryDocument['actions']
|
|
76
|
+
export declare function capabilities(actions: HouseDiscoveryDocument['actions']): readonly Capability[];
|
|
71
77
|
export declare function siteCapabilities(): readonly Capability[];
|
|
72
78
|
export declare function discoveredRoom(authority: HouseAuthority): DiscoveredRoom;
|
|
73
79
|
export declare function mapDiscovery(document: Pick<HouseDiscoveryDocument, 'bounds'>, rooms: readonly DiscoveredRoom[], declared: readonly Capability[]): Discovery;
|
|
80
|
+
export {};
|
|
74
81
|
//# sourceMappingURL=discovery.d.ts.map
|
package/dist/discovery.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../src/discovery.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EACV,cAAc,EACd,SAAS,EACT,MAAM,EACN,aAAa,EACb,SAAS,EACV,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../src/discovery.ts"],"names":[],"mappings":"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"}
|
package/dist/discovery.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { declaredActions
|
|
1
|
+
import { declaredActions } from './actions.js';
|
|
2
|
+
import { SITE_SUBMISSION } from './transport.js';
|
|
2
3
|
import { readPosition, roomVersion } from './version.js';
|
|
3
4
|
export const PROVIDER_ACTIONS = 'provider-actions';
|
|
4
|
-
export const DISCOVER_PREFIXES = ['/'];
|
|
5
5
|
const BOUND_KEYS = [
|
|
6
6
|
'max_authored_file_bytes',
|
|
7
7
|
'max_batch_operations',
|
|
@@ -13,12 +13,10 @@ const BOUND_KEYS = [
|
|
|
13
13
|
'max_inline_body_bytes',
|
|
14
14
|
'max_upload_bytes',
|
|
15
15
|
'max_prefixes',
|
|
16
|
-
'max_held_files',
|
|
17
16
|
'change_retention_seconds',
|
|
18
|
-
'operation_retention_seconds',
|
|
19
17
|
];
|
|
20
|
-
const OPERATION_KEYS = ['write', '
|
|
21
|
-
const
|
|
18
|
+
const OPERATION_KEYS = ['write', 'erase'];
|
|
19
|
+
const ACCESS_LEVELS = ['search', 'open', 'keep'];
|
|
22
20
|
function stringList(value) {
|
|
23
21
|
if (!Array.isArray(value))
|
|
24
22
|
return null;
|
|
@@ -43,16 +41,10 @@ function parseBounds(value) {
|
|
|
43
41
|
}
|
|
44
42
|
return bounds;
|
|
45
43
|
}
|
|
46
|
-
function
|
|
44
|
+
function parseTypedSelection(value) {
|
|
47
45
|
if (value === undefined)
|
|
48
46
|
return null;
|
|
49
|
-
|
|
50
|
-
return undefined;
|
|
51
|
-
const held = value;
|
|
52
|
-
const paths = stringList(held.paths);
|
|
53
|
-
if (typeof held.root !== 'string' || held.root.length === 0 || paths === null)
|
|
54
|
-
return undefined;
|
|
55
|
-
return { root: held.root, paths };
|
|
47
|
+
return stringList(value) ?? undefined;
|
|
56
48
|
}
|
|
57
49
|
function parseMember(value) {
|
|
58
50
|
if (typeof value !== 'object' || value === null)
|
|
@@ -89,14 +81,14 @@ function parseAuthority(value) {
|
|
|
89
81
|
return null;
|
|
90
82
|
}
|
|
91
83
|
const at = readPosition(held);
|
|
92
|
-
const
|
|
84
|
+
const typedSelection = parseTypedSelection(held.typed_selection);
|
|
93
85
|
const protectedPaths = stringList(held.protected_paths);
|
|
94
86
|
const operations = parseOperations(held.operations);
|
|
95
|
-
const
|
|
87
|
+
const level = ACCESS_LEVELS.find((one) => one === held.level);
|
|
96
88
|
if (at === null ||
|
|
97
|
-
|
|
89
|
+
typedSelection === undefined ||
|
|
98
90
|
protectedPaths === null ||
|
|
99
|
-
|
|
91
|
+
level === undefined ||
|
|
100
92
|
operations === null)
|
|
101
93
|
return null;
|
|
102
94
|
if (typeof held.room_ref !== 'string' || held.room_ref.length === 0)
|
|
@@ -108,14 +100,55 @@ function parseAuthority(value) {
|
|
|
108
100
|
roomHandle: held.room_handle,
|
|
109
101
|
name: held.name,
|
|
110
102
|
schema: held.model_root,
|
|
111
|
-
|
|
103
|
+
typedSelection,
|
|
112
104
|
managedReplication: held.managed_replication,
|
|
113
105
|
protectedPaths,
|
|
114
|
-
|
|
106
|
+
level,
|
|
115
107
|
operations,
|
|
116
108
|
...at,
|
|
117
109
|
};
|
|
118
110
|
}
|
|
111
|
+
function parseAuthorities(value) {
|
|
112
|
+
if (!Array.isArray(value))
|
|
113
|
+
return null;
|
|
114
|
+
const authorities = [];
|
|
115
|
+
for (const entry of value) {
|
|
116
|
+
const authority = parseAuthority(entry);
|
|
117
|
+
if (authority === null)
|
|
118
|
+
return null;
|
|
119
|
+
authorities.push(authority);
|
|
120
|
+
}
|
|
121
|
+
return authorities;
|
|
122
|
+
}
|
|
123
|
+
export function foldedAuthorities(authorities) {
|
|
124
|
+
const shapes = [];
|
|
125
|
+
const known = new Map();
|
|
126
|
+
const rooms = authorities.map(({ room_ref, room_handle, name, position, ...shape }) => {
|
|
127
|
+
const key = JSON.stringify(shape);
|
|
128
|
+
let held = known.get(key);
|
|
129
|
+
if (held === undefined) {
|
|
130
|
+
held = shapes.push(shape) - 1;
|
|
131
|
+
known.set(key, held);
|
|
132
|
+
}
|
|
133
|
+
return { room_ref, room_handle, name, position, shape: held };
|
|
134
|
+
});
|
|
135
|
+
return { shapes, rooms };
|
|
136
|
+
}
|
|
137
|
+
function unfolded(shapes, rooms) {
|
|
138
|
+
if (!Array.isArray(shapes) || !Array.isArray(rooms))
|
|
139
|
+
return null;
|
|
140
|
+
const authorities = [];
|
|
141
|
+
for (const room of rooms) {
|
|
142
|
+
if (typeof room !== 'object' || room === null)
|
|
143
|
+
return null;
|
|
144
|
+
const { shape, ...own } = room;
|
|
145
|
+
const held = typeof shape === 'number' ? shapes[shape] : undefined;
|
|
146
|
+
if (typeof held !== 'object' || held === null)
|
|
147
|
+
return null;
|
|
148
|
+
authorities.push({ ...held, ...own });
|
|
149
|
+
}
|
|
150
|
+
return authorities;
|
|
151
|
+
}
|
|
119
152
|
export function parseDiscovery(body) {
|
|
120
153
|
if (typeof body !== 'object' || body === null)
|
|
121
154
|
return null;
|
|
@@ -131,16 +164,19 @@ export function parseDiscovery(body) {
|
|
|
131
164
|
new Set(actions).size !== actions.length ||
|
|
132
165
|
actions.some((name) => name.length === 0))
|
|
133
166
|
return null;
|
|
134
|
-
|
|
167
|
+
const authorities = parseAuthorities(unfolded(held.shapes, held.rooms));
|
|
168
|
+
return authorities === null ? null : { member, bounds, authorities, actions };
|
|
169
|
+
}
|
|
170
|
+
export function parseAuthorityChange(body) {
|
|
171
|
+
if (typeof body !== 'object' || body === null)
|
|
135
172
|
return null;
|
|
136
|
-
const
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
}
|
|
143
|
-
return { member, bounds, authorities, actions };
|
|
173
|
+
const held = body;
|
|
174
|
+
const member = parseMember(held.member);
|
|
175
|
+
const authorities = parseAuthorities(held.authorities);
|
|
176
|
+
const left = stringList(held.left);
|
|
177
|
+
if (member === null || authorities === null || left === null)
|
|
178
|
+
return null;
|
|
179
|
+
return { member, authorities, left };
|
|
144
180
|
}
|
|
145
181
|
function parseSiteAuthority(value) {
|
|
146
182
|
if (typeof value !== 'object' || value === null)
|
|
@@ -188,25 +224,18 @@ export function siteTracked(document) {
|
|
|
188
224
|
authority: authority.roomRef,
|
|
189
225
|
handle: authority.roomHandle,
|
|
190
226
|
schema: authority.schema,
|
|
191
|
-
|
|
192
|
-
schemas: [authority.schema],
|
|
227
|
+
typedSelection: null,
|
|
193
228
|
position: authority.position,
|
|
194
229
|
logEpoch: authority.logEpoch,
|
|
195
230
|
}));
|
|
196
231
|
}
|
|
197
|
-
function schemasOf(authority) {
|
|
198
|
-
return authority.houseModel === null
|
|
199
|
-
? [authority.schema]
|
|
200
|
-
: [authority.schema, authority.houseModel.root];
|
|
201
|
-
}
|
|
202
232
|
export function trackedFrom(document) {
|
|
203
233
|
return document.authorities.map((authority) => ({
|
|
204
234
|
locator: authority.roomRef,
|
|
205
235
|
authority: authority.roomRef,
|
|
206
236
|
handle: authority.roomHandle,
|
|
207
237
|
schema: authority.schema,
|
|
208
|
-
|
|
209
|
-
schemas: schemasOf(authority),
|
|
238
|
+
typedSelection: authority.typedSelection,
|
|
210
239
|
position: authority.position,
|
|
211
240
|
logEpoch: authority.logEpoch,
|
|
212
241
|
}));
|
|
@@ -228,27 +257,17 @@ export function providerLimits(bounds) {
|
|
|
228
257
|
export function declaredRetention(bounds) {
|
|
229
258
|
return {
|
|
230
259
|
history: { kind: 'no-declared-time-bound' },
|
|
231
|
-
outcome: bounds.operation_retention_seconds,
|
|
232
260
|
refreshHorizon: bounds.change_retention_seconds,
|
|
233
261
|
};
|
|
234
262
|
}
|
|
235
|
-
export function capabilities(actions
|
|
236
|
-
|
|
237
|
-
return [
|
|
238
|
-
{
|
|
239
|
-
name: PROVIDER_ACTIONS,
|
|
240
|
-
actions: declaredActions(actions),
|
|
241
|
-
...(house === undefined
|
|
242
|
-
? {}
|
|
243
|
-
: { conversationAgents: houseConversationAgents(house.authority) }),
|
|
244
|
-
},
|
|
245
|
-
];
|
|
263
|
+
export function capabilities(actions) {
|
|
264
|
+
return [{ name: PROVIDER_ACTIONS, actions: declaredActions(actions) }];
|
|
246
265
|
}
|
|
247
266
|
export function siteCapabilities() {
|
|
248
267
|
return [
|
|
249
268
|
{
|
|
250
269
|
name: PROVIDER_ACTIONS,
|
|
251
|
-
actions: [{ name:
|
|
270
|
+
actions: [{ name: SITE_SUBMISSION, inputShape: {}, resultKind: 'house' }],
|
|
252
271
|
},
|
|
253
272
|
];
|
|
254
273
|
}
|
|
@@ -261,17 +280,17 @@ export function discoveredRoom(authority) {
|
|
|
261
280
|
roomVersion: roomVersion(authority),
|
|
262
281
|
operations: {
|
|
263
282
|
write: [...authority.operations.write],
|
|
264
|
-
|
|
283
|
+
erase: [...authority.operations.erase],
|
|
265
284
|
},
|
|
266
285
|
replica: {
|
|
267
286
|
selection: locator,
|
|
268
287
|
admission: authority.managedReplication,
|
|
269
|
-
offline: authority.
|
|
288
|
+
offline: authority.level === 'open' ? 'locked' : 'open',
|
|
270
289
|
},
|
|
271
|
-
...(authority.
|
|
290
|
+
...(authority.typedSelection === null
|
|
272
291
|
? {}
|
|
273
|
-
: { typedSelection: { roots: [...authority.
|
|
274
|
-
providerOwnedPaths: [...authority.protectedPaths,
|
|
292
|
+
: { typedSelection: { roots: [...authority.typedSelection] } }),
|
|
293
|
+
providerOwnedPaths: [...authority.protectedPaths, authority.schema],
|
|
275
294
|
};
|
|
276
295
|
}
|
|
277
296
|
export function mapDiscovery(document, rooms, declared) {
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { AcceptedMessage, ActionResult, ConversationHistoryRequest } from '@agentshouse/mdruntime';
|
|
2
|
+
import { type HouseDoor } from './transport.js';
|
|
3
|
+
export declare const HISTORY_PAGE = 100;
|
|
4
|
+
type HistoryCursor = {
|
|
5
|
+
accepted_at: string;
|
|
6
|
+
message_id: string;
|
|
7
|
+
};
|
|
8
|
+
export declare function cursorPosition(cursor: HistoryCursor): string;
|
|
9
|
+
export declare function acceptedMessage(entry: unknown): AcceptedMessage | null;
|
|
10
|
+
export declare function houseHistory(transport: HouseDoor, request: ConversationHistoryRequest): Promise<ActionResult>;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=history.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"history.d.ts","sourceRoot":"","sources":["../src/history.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,YAAY,EAGZ,0BAA0B,EAC3B,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAkB,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhE,eAAO,MAAM,YAAY,MAAM,CAAC;AAIhC,KAAK,aAAa,GAAG;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC;AAkBjE,wBAAgB,cAAc,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAE5D;AAUD,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,eAAe,GAAG,IAAI,CAUtE;AA8BD,wBAAsB,YAAY,CAChC,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,0BAA0B,GAClC,OAAO,CAAC,YAAY,CAAC,CAqBvB"}
|