@agentshouse/mdruntime-adapter 0.1.0-cd61dfca5d699 → 0.1.0-cdc1a38081f09

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.
Files changed (48) hide show
  1. package/AGENTS.md +96 -78
  2. package/dist/actions.d.ts +14 -21
  3. package/dist/actions.d.ts.map +1 -1
  4. package/dist/actions.js +83 -133
  5. package/dist/adapter.d.ts.map +1 -1
  6. package/dist/adapter.js +210 -162
  7. package/dist/discovery.d.ts +3 -2
  8. package/dist/discovery.d.ts.map +1 -1
  9. package/dist/discovery.js +24 -6
  10. package/dist/gather.d.ts +1 -1
  11. package/dist/gather.d.ts.map +1 -1
  12. package/dist/gather.js +4 -14
  13. package/dist/index.d.ts +3 -1
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.js +3 -1
  16. package/dist/model.d.ts +5 -1
  17. package/dist/model.d.ts.map +1 -1
  18. package/dist/model.js +8 -1
  19. package/dist/part.d.ts +15 -0
  20. package/dist/part.d.ts.map +1 -0
  21. package/dist/part.js +82 -0
  22. package/dist/read.d.ts +57 -26
  23. package/dist/read.d.ts.map +1 -1
  24. package/dist/read.js +268 -152
  25. package/dist/room-types.d.ts +6 -0
  26. package/dist/room-types.d.ts.map +1 -0
  27. package/dist/room-types.js +83 -0
  28. package/dist/site.d.ts.map +1 -1
  29. package/dist/site.js +77 -104
  30. package/dist/stream.d.ts +3 -3
  31. package/dist/stream.d.ts.map +1 -1
  32. package/dist/stream.js +37 -34
  33. package/dist/transport.d.ts +10 -10
  34. package/dist/transport.d.ts.map +1 -1
  35. package/dist/transport.js +1 -1
  36. package/dist/upload.d.ts +12 -0
  37. package/dist/upload.d.ts.map +1 -0
  38. package/dist/upload.js +63 -0
  39. package/dist/write.d.ts +12 -1
  40. package/dist/write.d.ts.map +1 -1
  41. package/dist/write.js +92 -55
  42. package/package.json +3 -3
  43. package/dist/handed.d.ts +0 -15
  44. package/dist/handed.d.ts.map +0 -1
  45. package/dist/handed.js +0 -38
  46. package/dist/referrer.d.ts +0 -7
  47. package/dist/referrer.d.ts.map +0 -1
  48. package/dist/referrer.js +0 -35
package/dist/discovery.js CHANGED
@@ -17,7 +17,8 @@ const BOUND_KEYS = [
17
17
  'change_retention_seconds',
18
18
  'operation_retention_seconds',
19
19
  ];
20
- const OPERATION_KEYS = ['read', 'sync', 'write', 'delete'];
20
+ const OPERATION_KEYS = ['write', 'delete'];
21
+ const READ_LEVELS = ['mcp', 'online', 'local'];
21
22
  function stringList(value) {
22
23
  if (!Array.isArray(value))
23
24
  return null;
@@ -34,6 +35,12 @@ function parseBounds(value) {
34
35
  return null;
35
36
  bounds[key] = amount;
36
37
  }
38
+ const moves = held.max_move_documents;
39
+ if (moves !== undefined) {
40
+ if (typeof moves !== 'number' || !Number.isFinite(moves))
41
+ return null;
42
+ bounds.max_move_documents = moves;
43
+ }
37
44
  return bounds;
38
45
  }
39
46
  function parseHouseModel(value) {
@@ -85,7 +92,12 @@ function parseAuthority(value) {
85
92
  const houseModel = parseHouseModel(held.house_model);
86
93
  const protectedPaths = stringList(held.protected_paths);
87
94
  const operations = parseOperations(held.operations);
88
- if (at === null || houseModel === undefined || protectedPaths === null || operations === null)
95
+ const read = READ_LEVELS.find((level) => level === held.read);
96
+ if (at === null ||
97
+ houseModel === undefined ||
98
+ protectedPaths === null ||
99
+ read === undefined ||
100
+ operations === null)
89
101
  return null;
90
102
  if (typeof held.room_ref !== 'string' || held.room_ref.length === 0)
91
103
  return null;
@@ -99,6 +111,7 @@ function parseAuthority(value) {
99
111
  houseModel,
100
112
  managedReplication: held.managed_replication,
101
113
  protectedPaths,
114
+ read,
102
115
  operations,
103
116
  ...at,
104
117
  };
@@ -205,8 +218,11 @@ export function providerLimits(bounds) {
205
218
  { name: 'change-documents', value: bounds.max_batch_documents },
206
219
  { name: 'path-length', value: bounds.max_path_length },
207
220
  { name: 'path-depth', value: bounds.max_path_depth },
221
+ ...(bounds.max_move_documents === undefined
222
+ ? []
223
+ : [{ name: 'move-documents', value: bounds.max_move_documents }]),
208
224
  { name: 'write-rate' },
209
- { name: 'content-ceiling' },
225
+ { name: 'storage-limit' },
210
226
  ];
211
227
  }
212
228
  export function declaredRetention(bounds) {
@@ -244,12 +260,14 @@ export function discoveredRoom(authority) {
244
260
  handle: authority.roomHandle,
245
261
  roomVersion: roomVersion(authority),
246
262
  operations: {
247
- read: [...authority.operations.read],
248
- sync: [...authority.operations.sync],
249
263
  write: [...authority.operations.write],
250
264
  delete: [...authority.operations.delete],
251
265
  },
252
- replica: { selection: locator, admission: authority.managedReplication },
266
+ replica: {
267
+ selection: locator,
268
+ admission: authority.managedReplication,
269
+ offline: authority.read === 'online' ? 'locked' : 'open',
270
+ },
253
271
  ...(authority.houseModel === null
254
272
  ? {}
255
273
  : { typedSelection: { roots: [...authority.houseModel.paths] } }),
package/dist/gather.d.ts CHANGED
@@ -1,4 +1,4 @@
1
1
  export declare function gatheredEach<A, R>(send: (asks: readonly A[], answer: (ask: number, result: R) => void) => Promise<void>): (ask: A) => Promise<R>;
2
2
  export declare function gathered<A, R>(send: (asks: readonly A[]) => Promise<readonly R[]>): (ask: A) => Promise<R>;
3
- export declare function selections<T>(items: readonly T[], weight: (item: T) => number, limit: number): readonly (readonly T[])[];
3
+ export declare function selections<T>(items: readonly T[], limit: number): readonly (readonly T[])[];
4
4
  //# sourceMappingURL=gather.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"gather.d.ts","sourceRoot":"","sources":["../src/gather.ts"],"names":[],"mappings":"AAMA,wBAAgB,YAAY,CAAC,CAAC,EAAE,CAAC,EAC/B,IAAI,EAAE,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,KAAK,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,GACpF,CAAC,GAAG,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAwBxB;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,CAAC,EAC3B,IAAI,EAAE,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,KAAK,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,GAClD,CAAC,GAAG,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAMxB;AAED,wBAAgB,UAAU,CAAC,CAAC,EAC1B,KAAK,EAAE,SAAS,CAAC,EAAE,EACnB,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,EAC3B,KAAK,EAAE,MAAM,GACZ,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,CAgB3B"}
1
+ {"version":3,"file":"gather.d.ts","sourceRoot":"","sources":["../src/gather.ts"],"names":[],"mappings":"AAMA,wBAAgB,YAAY,CAAC,CAAC,EAAE,CAAC,EAC/B,IAAI,EAAE,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,KAAK,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,GACpF,CAAC,GAAG,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAwBxB;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,CAAC,EAC3B,IAAI,EAAE,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,KAAK,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,GAClD,CAAC,GAAG,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAMxB;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,CAO3F"}
package/dist/gather.js CHANGED
@@ -25,21 +25,11 @@ export function gathered(send) {
25
25
  });
26
26
  });
27
27
  }
28
- export function selections(items, weight, limit) {
28
+ export function selections(items, limit) {
29
+ const size = Math.max(1, limit);
29
30
  const parts = [];
30
- let part = [];
31
- let carried = 0;
32
- for (const item of items) {
33
- const weighed = weight(item);
34
- if (part.length > 0 && carried + weighed > limit) {
35
- parts.push(part);
36
- part = [];
37
- carried = 0;
38
- }
39
- part.push(item);
40
- carried += weighed;
31
+ for (let start = 0; start < items.length; start += size) {
32
+ parts.push(items.slice(start, start + size));
41
33
  }
42
- if (part.length > 0)
43
- parts.push(part);
44
34
  return parts;
45
35
  }
package/dist/index.d.ts CHANGED
@@ -1,4 +1,6 @@
1
1
  export { createAgentsHouseAdapter, type AgentsHouseAdapterOptions } from './adapter.js';
2
- export { HOUSE_APP_ACTS, HOUSE_APP_BATCHES, HOUSE_SITE_ACTS } from './actions.js';
2
+ export { finishedUpload, houseUpload, type HouseUpload } from './upload.js';
3
+ export { HISTORY_PAGE, HOUSE_APP_ACTS, HOUSE_APP_BATCHES, HOUSE_SITE_ACTS, TRIGGER_ROOMS, } from './actions.js';
4
+ export { HOUSE_ROOM_TYPES, INBOX_CHANNEL_KINDS, INBOX_CHAT_TYPE, INBOX_MESSAGE_TYPE, type InboxChannelKind, } from './room-types.js';
3
5
  export type { HouseByteAct, HouseByteTransfer, HouseBytesAnswer, HouseClosing, HouseDoorAnswer, HouseHeldRoom, HouseOpening, HouseStream, HouseStreamEntry, HouseStreamFrame, HouseSiteTransport, HouseTransport, } from './transport.js';
4
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,KAAK,yBAAyB,EAAE,MAAM,cAAc,CAAC;AACxF,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAClF,YAAY,EACV,YAAY,EACZ,iBAAiB,EACjB,gBAAgB,EAChB,YAAY,EACZ,eAAe,EACf,aAAa,EACb,YAAY,EACZ,WAAW,EACX,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,GACf,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,KAAK,yBAAyB,EAAE,MAAM,cAAc,CAAC;AACxF,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAC5E,OAAO,EACL,YAAY,EACZ,cAAc,EACd,iBAAiB,EACjB,eAAe,EACf,aAAa,GACd,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,eAAe,EACf,kBAAkB,EAClB,KAAK,gBAAgB,GACtB,MAAM,iBAAiB,CAAC;AACzB,YAAY,EACV,YAAY,EACZ,iBAAiB,EACjB,gBAAgB,EAChB,YAAY,EACZ,eAAe,EACf,aAAa,EACb,YAAY,EACZ,WAAW,EACX,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,GACf,MAAM,gBAAgB,CAAC"}
package/dist/index.js CHANGED
@@ -1,2 +1,4 @@
1
1
  export { createAgentsHouseAdapter } from './adapter.js';
2
- export { HOUSE_APP_ACTS, HOUSE_APP_BATCHES, HOUSE_SITE_ACTS } from './actions.js';
2
+ export { finishedUpload, houseUpload } from './upload.js';
3
+ export { HISTORY_PAGE, HOUSE_APP_ACTS, HOUSE_APP_BATCHES, HOUSE_SITE_ACTS, TRIGGER_ROOMS, } from './actions.js';
4
+ export { HOUSE_ROOM_TYPES, INBOX_CHANNEL_KINDS, INBOX_CHAT_TYPE, INBOX_MESSAGE_TYPE, } from './room-types.js';
package/dist/model.d.ts CHANGED
@@ -1,8 +1,12 @@
1
1
  import type { RoomModels } from '@agentshouse/mdruntime';
2
2
  import type { TrackedAuthority } from './discovery.js';
3
- import { type HouseScope, type HouseView } from './read.js';
3
+ import { type HouseRoomParts, type HouseScope, type HouseView } from './read.js';
4
4
  import type { HouseMode, HouseStreamEntry } from './transport.js';
5
5
  export declare function partModels(scope: HouseScope, tracked: TrackedAuthority, seen: ReadonlySet<string>, final: boolean): Promise<RoomModels | undefined>;
6
+ export declare function manifestedModels(room: HouseRoomParts, tracked: TrackedAuthority): Promise<{
7
+ readonly models: RoomModels | undefined;
8
+ readonly seen: string[];
9
+ }>;
6
10
  export declare function viewModels(view: HouseView, tracked: TrackedAuthority): Promise<RoomModels | undefined>;
7
11
  export declare function streamedModels(schemas: ReadonlyMap<string, HouseStreamEntry>, tracked: TrackedAuthority, mode: HouseMode): Promise<RoomModels | undefined>;
8
12
  //# sourceMappingURL=model.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAe,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEtE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAA0C,KAAK,UAAU,EAAE,KAAK,SAAS,EAAE,MAAM,WAAW,CAAC;AACpG,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAoClE,wBAAgB,UAAU,CACxB,KAAK,EAAE,UAAU,EACjB,OAAO,EAAE,gBAAgB,EACzB,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,EACzB,KAAK,EAAE,OAAO,GACb,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAKjC;AAED,wBAAgB,UAAU,CACxB,IAAI,EAAE,SAAS,EACf,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAcjC;AAED,wBAAgB,cAAc,CAC5B,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,gBAAgB,CAAC,EAC9C,OAAO,EAAE,gBAAgB,EACzB,IAAI,EAAE,SAAS,GACd,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAWjC"}
1
+ {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAe,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEtE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAIL,KAAK,cAAc,EAEnB,KAAK,UAAU,EACf,KAAK,SAAS,EACf,MAAM,WAAW,CAAC;AACnB,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAoClE,wBAAgB,UAAU,CACxB,KAAK,EAAE,UAAU,EACjB,OAAO,EAAE,gBAAgB,EACzB,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,EACzB,KAAK,EAAE,OAAO,GACb,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAKjC;AAED,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,cAAc,EACpB,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC;IAAE,QAAQ,CAAC,MAAM,EAAE,UAAU,GAAG,SAAS,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAM/E;AAED,wBAAgB,UAAU,CACxB,IAAI,EAAE,SAAS,EACf,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAcjC;AAED,wBAAgB,cAAc,CAC5B,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,gBAAgB,CAAC,EAC9C,OAAO,EAAE,gBAAgB,EACzB,IAAI,EAAE,SAAS,GACd,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAWjC"}
package/dist/model.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { sha256Hex } from './digest.js';
2
- import { schemaOf, schemaPath } from './read.js';
2
+ import { modelScope, schemaOf, schemaPath, } from './read.js';
3
3
  const MODEL_ABSENT = { kind: 'model-unavailable', reason: 'not-readable' };
4
4
  const ABSENT_SCHEMA = { schema: null, version: null, revision: null };
5
5
  async function heldModel(read, identity) {
@@ -33,6 +33,13 @@ export function partModels(scope, tracked, seen, final) {
33
33
  return final && !seen.has(schema) ? ABSENT_SCHEMA : undefined;
34
34
  });
35
35
  }
36
+ export async function manifestedModels(room, tracked) {
37
+ const scope = modelScope(room);
38
+ return {
39
+ models: await partModels(scope, tracked, new Set(), true),
40
+ seen: tracked.schemas.filter((schema) => scope.files.some((file) => file.path === schema)),
41
+ };
42
+ }
36
43
  export function viewModels(view, tracked) {
37
44
  return modelsOf(tracked, (schema) => {
38
45
  const change = view.changes.find((candidate) => candidate.path === schema);
package/dist/part.d.ts ADDED
@@ -0,0 +1,15 @@
1
+ import type { ScopedRefusal } from '@agentshouse/mdruntime';
2
+ export declare const PART_ATTEMPTS = 3;
3
+ export declare const PART_UNVERIFIED = "part_unverified";
4
+ export type HousePart = {
5
+ part: string;
6
+ bytes: number;
7
+ sha256: string;
8
+ };
9
+ export declare function parsePart(value: unknown): HousePart | null;
10
+ export declare function partArrival(listed: HousePart, arriving: ((bytes: number) => void) | undefined): ((answered: number) => void) | undefined;
11
+ export declare function partFrame(body: unknown): Uint8Array<ArrayBuffer> | null;
12
+ export declare function checkedPayload(frame: Uint8Array<ArrayBuffer>, listed: HousePart): Promise<Uint8Array<ArrayBuffer> | null>;
13
+ export declare function gunzipped(payload: Uint8Array<ArrayBuffer>): ReadableStream<string>;
14
+ export declare function unverifiedPart(locator: string): ScopedRefusal;
15
+ //# sourceMappingURL=part.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"part.d.ts","sourceRoot":"","sources":["../src/part.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAU5D,eAAO,MAAM,aAAa,IAAI,CAAC;AAE/B,eAAO,MAAM,eAAe,oBAAoB,CAAC;AAEjD,MAAM,MAAM,SAAS,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAExE,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS,GAAG,IAAI,CAO1D;AAoBD,wBAAgB,WAAW,CACzB,MAAM,EAAE,SAAS,EACjB,QAAQ,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,GAC9C,CAAC,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAG1C;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,OAAO,GAAG,UAAU,CAAC,WAAW,CAAC,GAAG,IAAI,CAIvE;AAED,wBAAsB,cAAc,CAClC,KAAK,EAAE,UAAU,CAAC,WAAW,CAAC,EAC9B,MAAM,EAAE,SAAS,GAChB,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,CAazC;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,UAAU,CAAC,WAAW,CAAC,GAAG,cAAc,CAAC,MAAM,CAAC,CAKlF;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,CAS7D"}
package/dist/part.js ADDED
@@ -0,0 +1,82 @@
1
+ const PART_MAGIC = 0x48505431;
2
+ const PART_HEAD_BYTES = 8;
3
+ const PART_DIGEST_BYTES = 32;
4
+ const PART_SHA256 = /^[0-9a-f]{64}$/u;
5
+ export const PART_ATTEMPTS = 3;
6
+ export const PART_UNVERIFIED = 'part_unverified';
7
+ export function parsePart(value) {
8
+ if (typeof value !== 'object' || value === null)
9
+ return null;
10
+ const { part, bytes, sha256 } = value;
11
+ if (typeof part !== 'string' || part.length === 0)
12
+ return null;
13
+ if (typeof bytes !== 'number' || !Number.isSafeInteger(bytes) || bytes <= 0)
14
+ return null;
15
+ if (typeof sha256 !== 'string' || !PART_SHA256.test(sha256))
16
+ return null;
17
+ return { part, bytes, sha256 };
18
+ }
19
+ function decoded(text) {
20
+ let binary;
21
+ try {
22
+ binary = atob(text);
23
+ }
24
+ catch {
25
+ return null;
26
+ }
27
+ const bytes = new Uint8Array(binary.length);
28
+ for (let at = 0; at < binary.length; at += 1)
29
+ bytes[at] = binary.charCodeAt(at);
30
+ return bytes;
31
+ }
32
+ function hex(bytes) {
33
+ let text = '';
34
+ for (const byte of bytes)
35
+ text += byte.toString(16).padStart(2, '0');
36
+ return text;
37
+ }
38
+ export function partArrival(listed, arriving) {
39
+ if (arriving === undefined)
40
+ return undefined;
41
+ return (answered) => arriving(Math.min(listed.bytes, Math.floor((answered * 3) / 4)));
42
+ }
43
+ export function partFrame(body) {
44
+ if (typeof body !== 'object' || body === null)
45
+ return null;
46
+ const { part } = body;
47
+ return typeof part === 'string' ? decoded(part) : null;
48
+ }
49
+ export async function checkedPayload(frame, listed) {
50
+ if (frame.length !== listed.bytes)
51
+ return null;
52
+ if (frame.length < PART_HEAD_BYTES + PART_DIGEST_BYTES)
53
+ return null;
54
+ const view = new DataView(frame.buffer, frame.byteOffset, frame.byteLength);
55
+ if (view.getUint32(0) !== PART_MAGIC)
56
+ return null;
57
+ const length = view.getUint32(4);
58
+ if (PART_HEAD_BYTES + length + PART_DIGEST_BYTES !== frame.length)
59
+ return null;
60
+ const payload = frame.subarray(PART_HEAD_BYTES, PART_HEAD_BYTES + length);
61
+ const digest = hex(new Uint8Array(await crypto.subtle.digest('SHA-256', payload)));
62
+ if (digest !== listed.sha256 || hex(frame.subarray(PART_HEAD_BYTES + length)) !== digest) {
63
+ return null;
64
+ }
65
+ return payload;
66
+ }
67
+ export function gunzipped(payload) {
68
+ return new Blob([payload])
69
+ .stream()
70
+ .pipeThrough(new DecompressionStream('gzip'))
71
+ .pipeThrough(new TextDecoderStream());
72
+ }
73
+ export function unverifiedPart(locator) {
74
+ return {
75
+ kind: 'scoped-refusal',
76
+ locator,
77
+ scope: 'undisclosed',
78
+ code: PART_UNVERIFIED,
79
+ fields: {},
80
+ retryable: true,
81
+ };
82
+ }
package/dist/read.d.ts CHANGED
@@ -1,11 +1,33 @@
1
- import type { AdapterFailure, BinaryFile, BootstrapPage, RefreshResult } from '@agentshouse/mdruntime';
1
+ import { type AdapterFailure, type BinaryFile, type BootstrapInventory, type BootstrapPage, type RefreshResult, type RoomModels, type TransportUncertainty } from '@agentshouse/mdruntime';
2
2
  import type { TrackedAuthority } from './discovery.js';
3
+ import { type HousePart } from './part.js';
3
4
  import type { HouseMode } from './transport.js';
4
5
  import { type LogPosition } from './version.js';
5
6
  export type HeadChange = BootstrapPage['changes'][string];
6
- export declare function identities(revisions: Readonly<Record<string, string>>): {
7
- fileIds?: Record<string, string>;
7
+ export type Answered = {
8
+ readonly documents: Map<string, string>;
9
+ readonly revisions: Map<string, string>;
10
+ readonly fileIds: Map<string, string>;
11
+ readonly changes: Map<string, HeadChange>;
12
+ readonly binaryFiles: Map<string, BinaryFile>;
13
+ readonly removals: Set<string>;
14
+ readonly folders: Set<string>;
15
+ readonly folderRemovals: Set<string>;
8
16
  };
17
+ export declare function answering(): Answered;
18
+ export declare function revised(answer: Answered, path: string, revision: string): void;
19
+ export declare function forgotten(answer: Answered, path: string): void;
20
+ export declare function folded(answer: Answered, path: string, removed: boolean): void;
21
+ export declare function answered(answer: Answered): Generator<number, {
22
+ documents: Readonly<Record<string, string>>;
23
+ revisions: Readonly<Record<string, string>>;
24
+ fileIds?: Readonly<Record<string, string>>;
25
+ changes: Readonly<Record<string, HeadChange>>;
26
+ binaryFiles: Readonly<Record<string, BinaryFile>>;
27
+ removals: readonly string[];
28
+ folders?: readonly string[];
29
+ folderRemovals?: readonly string[];
30
+ }, void>;
9
31
  export type HouseManifestFile = {
10
32
  path: string;
11
33
  revision: string | undefined;
@@ -22,28 +44,31 @@ export type HouseScope = LogPosition & {
22
44
  anchor: string;
23
45
  files: readonly HouseManifestFile[];
24
46
  contents: readonly HouseContent[];
47
+ folders?: readonly string[];
25
48
  };
26
- export type HouseCut = {
27
- position: string;
28
- log_epoch: string;
49
+ export type HouseModels = {
50
+ files: readonly HouseManifestFile[];
51
+ contents: readonly HouseContent[];
29
52
  };
30
- export type HouseCursor = {
31
- room: string;
32
- path: string | null;
33
- cut?: HouseCut;
53
+ export type HouseRoomParts = LogPosition & {
54
+ anchor: string;
55
+ models: HouseModels;
56
+ parts: readonly HousePart[];
34
57
  };
35
- export type HouseEnvelope = {
36
- scopes: readonly HouseScope[];
37
- next?: HouseCursor;
58
+ export type HouseParted = {
59
+ rooms: readonly HouseRoomParts[];
60
+ next?: string;
38
61
  };
39
62
  export type HouseGrant = {
40
- method: 'GET';
41
- url: string;
42
- } | {
43
- method: 'POST';
44
63
  operation: string;
45
64
  url: string;
46
65
  };
66
+ export type HouseFileAddress = {
67
+ url: string;
68
+ name: string;
69
+ sha256: string;
70
+ mediaType: string;
71
+ };
47
72
  export type HouseChange = {
48
73
  path: string;
49
74
  removed: true;
@@ -65,9 +90,14 @@ export type HousePage = {
65
90
  through: string;
66
91
  read: number;
67
92
  };
93
+ export type HouseFolder = {
94
+ path: string;
95
+ removed: boolean;
96
+ };
68
97
  export type HouseView = LogPosition & {
69
98
  authority: string;
70
99
  changes: readonly HouseChange[];
100
+ folders?: readonly HouseFolder[];
71
101
  next?: HousePage;
72
102
  };
73
103
  type PageFailure = AdapterFailure | {
@@ -77,23 +107,24 @@ export type HouseEnumeration = {
77
107
  authorities: readonly HouseView[];
78
108
  };
79
109
  export declare function authorityRoot(handle: string): string;
80
- export declare function contentPrefixes(tracked: TrackedAuthority): readonly string[];
81
110
  export declare function schemaPath(handle: string, schema: string): string;
82
111
  export declare function parseGrant(body: unknown): HouseGrant | null;
112
+ export declare function parseFileAddress(body: unknown): HouseFileAddress | null;
83
113
  export declare function headChange(held: {
84
114
  readonly author?: unknown;
85
115
  readonly created_at?: unknown;
86
116
  }): HeadChange | undefined | null;
87
117
  export declare function binaryFileOf(held: Readonly<Record<string, unknown>>): BinaryFile | undefined | null;
88
- export declare function parseEnvelope(body: unknown): HouseEnvelope | null;
89
- export declare function parseSiteBootstrap(body: unknown): HouseScope | null;
90
- export declare function siteBootstrapNext(body: unknown): string | null;
91
- export declare function siteBootstrapOffset(body: unknown): number | null;
118
+ export declare function parseParted(body: unknown): HouseParted | null;
119
+ export declare function parseSiteParted(body: unknown): HouseRoomParts | null;
120
+ export declare function partInventory(room: HouseRoomParts): BootstrapInventory;
121
+ export declare function manifested(room: HouseRoomParts, inventory: BootstrapInventory, pageToken: string, models: RoomModels | undefined): BootstrapPage;
122
+ export declare function modelScope(room: HouseRoomParts): HouseScope;
123
+ export declare function emptyScope(room: HouseRoomParts): HouseScope;
124
+ export declare function housePart(room: HouseRoomParts, frame: Uint8Array<ArrayBuffer>, listed: HousePart, mode: HouseMode): Promise<HouseScope | TransportUncertainty | null>;
92
125
  export declare function parseEnumeration(body: unknown, mode: HouseMode): HouseEnumeration | null;
93
126
  export declare function wholeView(first: HouseView, more: (page: HousePage) => Promise<HouseView | PageFailure>): Promise<HouseView | PageFailure>;
94
- export declare function advancedScope(scope: HouseScope, view: HouseView): HouseScope;
95
- export declare function matchesScope(scope: HouseScope, tracked: TrackedAuthority): boolean;
96
- export declare function bootstrapOf(scope: HouseScope): BootstrapPage;
127
+ export declare function bootstrapping(scope: HouseScope): Generator<number, BootstrapPage, void>;
97
128
  export type HouseSchema = {
98
129
  schema: string | null;
99
130
  version: string | null;
@@ -101,6 +132,6 @@ export type HouseSchema = {
101
132
  };
102
133
  export declare function schemaOf(scope: HouseScope, schema: string): HouseSchema | null;
103
134
  export declare function viewOf(enumeration: HouseEnumeration, tracked: TrackedAuthority): HouseView | undefined;
104
- export declare function refreshFrom(view: HouseView, fromRoomVersion: string): RefreshResult;
135
+ export declare function refreshFrom(view: HouseView, fromRoomVersion: string): Promise<RefreshResult>;
105
136
  export {};
106
137
  //# sourceMappingURL=read.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"read.d.ts","sourceRoot":"","sources":["../src/read.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"read.d.ts","sourceRoot":"","sources":["../src/read.ts"],"names":[],"mappings":"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"}