@agentshouse/mdruntime-adapter 0.1.0-cca5d676bc88e → 0.1.0-ccda1a2da11c3

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 (53) hide show
  1. package/AGENTS.md +291 -213
  2. package/dist/actions.d.ts +69 -2
  3. package/dist/actions.d.ts.map +1 -1
  4. package/dist/actions.js +197 -198
  5. package/dist/adapter.d.ts +1 -0
  6. package/dist/adapter.d.ts.map +1 -1
  7. package/dist/adapter.js +378 -112
  8. package/dist/discovery.d.ts +7 -6
  9. package/dist/discovery.d.ts.map +1 -1
  10. package/dist/discovery.js +50 -18
  11. package/dist/gather.d.ts +2 -1
  12. package/dist/gather.d.ts.map +1 -1
  13. package/dist/gather.js +15 -20
  14. package/dist/index.d.ts +3 -2
  15. package/dist/index.d.ts.map +1 -1
  16. package/dist/index.js +2 -1
  17. package/dist/model.d.ts +1 -1
  18. package/dist/model.d.ts.map +1 -1
  19. package/dist/model.js +21 -7
  20. package/dist/part.d.ts +13 -0
  21. package/dist/part.d.ts.map +1 -0
  22. package/dist/part.js +80 -0
  23. package/dist/read.d.ts +72 -20
  24. package/dist/read.d.ts.map +1 -1
  25. package/dist/read.js +353 -155
  26. package/dist/referrer.d.ts +9 -0
  27. package/dist/referrer.d.ts.map +1 -0
  28. package/dist/referrer.js +41 -0
  29. package/dist/refusal.d.ts +5 -9
  30. package/dist/refusal.d.ts.map +1 -1
  31. package/dist/refusal.js +31 -17
  32. package/dist/room-types.d.ts +6 -0
  33. package/dist/room-types.d.ts.map +1 -0
  34. package/dist/room-types.js +66 -0
  35. package/dist/site.d.ts +1 -1
  36. package/dist/site.d.ts.map +1 -1
  37. package/dist/site.js +184 -62
  38. package/dist/stream.d.ts +6 -4
  39. package/dist/stream.d.ts.map +1 -1
  40. package/dist/stream.js +360 -42
  41. package/dist/transport.d.ts +67 -11
  42. package/dist/transport.d.ts.map +1 -1
  43. package/dist/transport.js +3 -1
  44. package/dist/version.d.ts +1 -0
  45. package/dist/version.d.ts.map +1 -1
  46. package/dist/version.js +1 -1
  47. package/dist/write.d.ts +14 -9
  48. package/dist/write.d.ts.map +1 -1
  49. package/dist/write.js +172 -47
  50. package/package.json +3 -4
  51. package/dist/links.d.ts +0 -20
  52. package/dist/links.d.ts.map +0 -1
  53. package/dist/links.js +0 -104
@@ -1,8 +1,7 @@
1
- import type { Capability, DiscoveredRoom, Discovery, ProviderLimit, Retention } from '@agentshouse/mdruntime';
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
4
  export declare const DISCOVER_PREFIXES: readonly string[];
5
- export declare const PRIVATE_HANDLE = "private";
6
5
  export type HouseBounds = {
7
6
  max_authored_file_bytes: number;
8
7
  max_batch_operations: number;
@@ -14,15 +13,16 @@ export type HouseBounds = {
14
13
  max_inline_body_bytes: number;
15
14
  max_upload_bytes: number;
16
15
  max_prefixes: number;
16
+ max_held_files: number;
17
17
  change_retention_seconds: number;
18
18
  operation_retention_seconds: number;
19
+ max_move_documents?: number;
19
20
  };
20
21
  export type HouseOperations = {
21
- read: readonly string[];
22
- sync: readonly string[];
23
22
  write: readonly string[];
24
23
  delete: readonly string[];
25
24
  };
25
+ export type HouseReadLevel = 'mcp' | 'online' | 'local';
26
26
  export type HouseModel = {
27
27
  root: string;
28
28
  paths: readonly string[];
@@ -35,9 +35,11 @@ export type HouseAuthority = LogPosition & {
35
35
  houseModel: HouseModel | null;
36
36
  managedReplication: 'admitted' | 'unavailable';
37
37
  protectedPaths: readonly string[];
38
+ read: HouseReadLevel;
38
39
  operations: HouseOperations;
39
40
  };
40
41
  export type HouseDiscoveryDocument = {
42
+ member: Member;
41
43
  bounds: HouseBounds;
42
44
  authorities: readonly HouseAuthority[];
43
45
  actions: readonly string[];
@@ -62,11 +64,10 @@ export type HouseSiteDiscovery = {
62
64
  export declare function parseDiscovery(body: unknown): HouseDiscoveryDocument | null;
63
65
  export declare function parseSiteDiscovery(body: unknown): HouseSiteDiscovery | null;
64
66
  export declare function siteTracked(document: HouseSiteDiscovery): TrackedAuthority[];
65
- export declare function locatorOf(authority: HouseAuthority): string;
66
67
  export declare function trackedFrom(document: HouseDiscoveryDocument): TrackedAuthority[];
67
68
  export declare function providerLimits(bounds: HouseBounds): readonly ProviderLimit[];
68
69
  export declare function declaredRetention(bounds: HouseBounds): Retention;
69
- export declare function capabilities(actions: readonly string[]): readonly Capability[];
70
+ export declare function capabilities(actions: HouseDiscoveryDocument['actions'], rooms: readonly Pick<TrackedAuthority, 'authority' | 'houseModel'>[]): readonly Capability[];
70
71
  export declare function siteCapabilities(): readonly Capability[];
71
72
  export declare function discoveredRoom(authority: HouseAuthority): DiscoveredRoom;
72
73
  export declare function mapDiscovery(document: Pick<HouseDiscoveryDocument, 'bounds'>, rooms: readonly DiscoveredRoom[], declared: readonly Capability[]): Discovery;
@@ -1 +1 @@
1
- {"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../src/discovery.ts"],"names":[],"mappings":"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"}
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;AAEhC,OAAO,EAA6B,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3E,eAAO,MAAM,gBAAgB,qBAAqB,CAAC;AAEnD,eAAO,MAAM,iBAAiB,EAAE,SAAS,MAAM,EAAU,CAAC;AAE1D,MAAM,MAAM,WAAW,GAAG;IACxB,uBAAuB,EAAE,MAAM,CAAC;IAChC,oBAAoB,EAAE,MAAM,CAAC;IAC7B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,wBAAwB,EAAE,MAAM,CAAC;IACjC,2BAA2B,EAAE,MAAM,CAAC;IACpC,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,QAAQ,GAAG,OAAO,CAAC;AAExD,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,WAAW,GAAG;IACzC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;IAC9B,kBAAkB,EAAE,UAAU,GAAG,aAAa,CAAC;IAC/C,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,IAAI,EAAE,cAAc,CAAC;IACrB,UAAU,EAAE,eAAe,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,WAAW,CAAC;IACpB,WAAW,EAAE,SAAS,cAAc,EAAE,CAAC;IACvC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,WAAW,GAAG;IAC3C,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;IAC9B,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,WAAW,GAAG;IAC7C,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,MAAM,EAAE,WAAW,CAAC;IACpB,WAAW,EAAE,SAAS,kBAAkB,EAAE,CAAC;CAC5C,CAAC;AA8GF,wBAAgB,cAAc,CAAC,IAAI,EAAE,OAAO,GAAG,sBAAsB,GAAG,IAAI,CAsB3E;AAmBD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,kBAAkB,GAAG,IAAI,CAa3E;AAED,wBAAgB,WAAW,CAAC,QAAQ,EAAE,kBAAkB,GAAG,gBAAgB,EAAE,CAW5E;AAQD,wBAAgB,WAAW,CAAC,QAAQ,EAAE,sBAAsB,GAAG,gBAAgB,EAAE,CAWhF;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,WAAW,GAAG,SAAS,aAAa,EAAE,CAa5E;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,WAAW,GAAG,SAAS,CAMhE;AAED,wBAAgB,YAAY,CAC1B,OAAO,EAAE,sBAAsB,CAAC,SAAS,CAAC,EAC1C,KAAK,EAAE,SAAS,IAAI,CAAC,gBAAgB,EAAE,WAAW,GAAG,YAAY,CAAC,EAAE,GACnE,SAAS,UAAU,EAAE,CAWvB;AAED,wBAAgB,gBAAgB,IAAI,SAAS,UAAU,EAAE,CAOxD;AAED,wBAAgB,cAAc,CAAC,SAAS,EAAE,cAAc,GAAG,cAAc,CAqBxE;AAED,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,IAAI,CAAC,sBAAsB,EAAE,QAAQ,CAAC,EAChD,KAAK,EAAE,SAAS,cAAc,EAAE,EAChC,QAAQ,EAAE,SAAS,UAAU,EAAE,GAC9B,SAAS,CAQX"}
package/dist/discovery.js CHANGED
@@ -1,9 +1,7 @@
1
- import { declaredActions, HOUSE_CONVERSATION_AGENTS } from './actions.js';
2
- import { PRIVATE_LOCATOR } from './transport.js';
1
+ import { declaredActions, houseConversationAgents, SITE_SUBMIT } from './actions.js';
3
2
  import { readPosition, roomVersion } from './version.js';
4
3
  export const PROVIDER_ACTIONS = 'provider-actions';
5
4
  export const DISCOVER_PREFIXES = ['/'];
6
- export const PRIVATE_HANDLE = 'private';
7
5
  const BOUND_KEYS = [
8
6
  'max_authored_file_bytes',
9
7
  'max_batch_operations',
@@ -15,10 +13,12 @@ const BOUND_KEYS = [
15
13
  'max_inline_body_bytes',
16
14
  'max_upload_bytes',
17
15
  'max_prefixes',
16
+ 'max_held_files',
18
17
  'change_retention_seconds',
19
18
  'operation_retention_seconds',
20
19
  ];
21
- const OPERATION_KEYS = ['read', 'sync', 'write', 'delete'];
20
+ const OPERATION_KEYS = ['write', 'delete'];
21
+ const READ_LEVELS = ['mcp', 'online', 'local'];
22
22
  function stringList(value) {
23
23
  if (!Array.isArray(value))
24
24
  return null;
@@ -35,6 +35,12 @@ function parseBounds(value) {
35
35
  return null;
36
36
  bounds[key] = amount;
37
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
+ }
38
44
  return bounds;
39
45
  }
40
46
  function parseHouseModel(value) {
@@ -48,6 +54,14 @@ function parseHouseModel(value) {
48
54
  return undefined;
49
55
  return { root: held.root, paths };
50
56
  }
57
+ function parseMember(value) {
58
+ if (typeof value !== 'object' || value === null)
59
+ return null;
60
+ const { user, name } = value;
61
+ if (typeof user !== 'string' || typeof name !== 'string')
62
+ return null;
63
+ return { kind: 'user', id: user, name };
64
+ }
51
65
  function parseOperations(value) {
52
66
  if (typeof value !== 'object' || value === null)
53
67
  return null;
@@ -78,7 +92,12 @@ function parseAuthority(value) {
78
92
  const houseModel = parseHouseModel(held.house_model);
79
93
  const protectedPaths = stringList(held.protected_paths);
80
94
  const operations = parseOperations(held.operations);
81
- 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)
82
101
  return null;
83
102
  if (typeof held.room_ref !== 'string' || held.room_ref.length === 0)
84
103
  return null;
@@ -92,6 +111,7 @@ function parseAuthority(value) {
92
111
  houseModel,
93
112
  managedReplication: held.managed_replication,
94
113
  protectedPaths,
114
+ read,
95
115
  operations,
96
116
  ...at,
97
117
  };
@@ -100,6 +120,9 @@ export function parseDiscovery(body) {
100
120
  if (typeof body !== 'object' || body === null)
101
121
  return null;
102
122
  const held = body;
123
+ const member = parseMember(held.member);
124
+ if (member === null)
125
+ return null;
103
126
  const bounds = parseBounds(held.bounds);
104
127
  if (bounds === null)
105
128
  return null;
@@ -117,7 +140,7 @@ export function parseDiscovery(body) {
117
140
  return null;
118
141
  authorities.push(authority);
119
142
  }
120
- return { bounds, authorities, actions };
143
+ return { member, bounds, authorities, actions };
121
144
  }
122
145
  function parseSiteAuthority(value) {
123
146
  if (typeof value !== 'object' || value === null)
@@ -171,9 +194,6 @@ export function siteTracked(document) {
171
194
  logEpoch: authority.logEpoch,
172
195
  }));
173
196
  }
174
- export function locatorOf(authority) {
175
- return authority.roomHandle === PRIVATE_HANDLE ? PRIVATE_LOCATOR : authority.roomRef;
176
- }
177
197
  function schemasOf(authority) {
178
198
  return authority.houseModel === null
179
199
  ? [authority.schema]
@@ -181,7 +201,7 @@ function schemasOf(authority) {
181
201
  }
182
202
  export function trackedFrom(document) {
183
203
  return document.authorities.map((authority) => ({
184
- locator: locatorOf(authority),
204
+ locator: authority.roomRef,
185
205
  authority: authority.roomRef,
186
206
  handle: authority.roomHandle,
187
207
  schema: authority.schema,
@@ -198,8 +218,11 @@ export function providerLimits(bounds) {
198
218
  { name: 'change-documents', value: bounds.max_batch_documents },
199
219
  { name: 'path-length', value: bounds.max_path_length },
200
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 }]),
201
224
  { name: 'write-rate' },
202
- { name: 'content-ceiling' },
225
+ { name: 'storage-limit' },
203
226
  ];
204
227
  }
205
228
  export function declaredRetention(bounds) {
@@ -209,33 +232,42 @@ export function declaredRetention(bounds) {
209
232
  refreshHorizon: bounds.change_retention_seconds,
210
233
  };
211
234
  }
212
- export function capabilities(actions) {
235
+ export function capabilities(actions, rooms) {
236
+ const house = rooms.find((room) => room.houseModel !== null);
213
237
  return [
214
238
  {
215
239
  name: PROVIDER_ACTIONS,
216
240
  actions: declaredActions(actions),
217
- conversationAgents: HOUSE_CONVERSATION_AGENTS,
241
+ ...(house === undefined
242
+ ? {}
243
+ : { conversationAgents: houseConversationAgents(house.authority) }),
218
244
  },
219
245
  ];
220
246
  }
221
247
  export function siteCapabilities() {
222
248
  return [
223
- { name: PROVIDER_ACTIONS, actions: [{ name: 'submit', inputShape: {}, resultKind: 'house' }] },
249
+ {
250
+ name: PROVIDER_ACTIONS,
251
+ actions: [{ name: SITE_SUBMIT, inputShape: {}, resultKind: 'house' }],
252
+ },
224
253
  ];
225
254
  }
226
255
  export function discoveredRoom(authority) {
227
- const locator = locatorOf(authority);
256
+ const locator = authority.roomRef;
228
257
  return {
229
258
  name: authority.name,
230
259
  locator,
260
+ handle: authority.roomHandle,
231
261
  roomVersion: roomVersion(authority),
232
262
  operations: {
233
- read: [...authority.operations.read],
234
- sync: [...authority.operations.sync],
235
263
  write: [...authority.operations.write],
236
264
  delete: [...authority.operations.delete],
237
265
  },
238
- replica: { selection: locator, admission: authority.managedReplication },
266
+ replica: {
267
+ selection: locator,
268
+ admission: authority.managedReplication,
269
+ offline: authority.read === 'online' ? 'locked' : 'open',
270
+ },
239
271
  ...(authority.houseModel === null
240
272
  ? {}
241
273
  : { typedSelection: { roots: [...authority.houseModel.paths] } }),
package/dist/gather.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ export declare function gatheredEach<A, R>(send: (asks: readonly A[], answer: (ask: number, result: R) => void) => Promise<void>): (ask: A) => Promise<R>;
1
2
  export declare function gathered<A, R>(send: (asks: readonly A[]) => Promise<readonly R[]>): (ask: A) => Promise<R>;
2
- 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[])[];
3
4
  //# sourceMappingURL=gather.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"gather.d.ts","sourceRoot":"","sources":["../src/gather.ts"],"names":[],"mappings":"AAMA,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,CA0BxB;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
@@ -1,13 +1,11 @@
1
- export function gathered(send) {
1
+ export function gatheredEach(send) {
2
2
  let held = [];
3
3
  function flush() {
4
4
  const taken = held;
5
5
  held = [];
6
- send(taken.map((entry) => entry.ask)).then((answers) => {
7
- taken.forEach((entry, index) => {
8
- entry.resolve(answers[index]);
9
- });
10
- }, (reason) => {
6
+ send(taken.map((entry) => entry.ask), (ask, result) => {
7
+ taken[ask]?.resolve(result);
8
+ }).catch((reason) => {
11
9
  for (const entry of taken)
12
10
  entry.reject(reason);
13
11
  });
@@ -20,21 +18,18 @@ export function gathered(send) {
20
18
  held.push({ ask, resolve, reject });
21
19
  });
22
20
  }
23
- export function selections(items, weight, limit) {
21
+ export function gathered(send) {
22
+ return gatheredEach(async (asks, answer) => {
23
+ (await send(asks)).forEach((result, ask) => {
24
+ answer(ask, result);
25
+ });
26
+ });
27
+ }
28
+ export function selections(items, limit) {
29
+ const size = Math.max(1, limit);
24
30
  const parts = [];
25
- let part = [];
26
- let carried = 0;
27
- for (const item of items) {
28
- const weighed = weight(item);
29
- if (part.length > 0 && carried + weighed > limit) {
30
- parts.push(part);
31
- part = [];
32
- carried = 0;
33
- }
34
- part.push(item);
35
- carried += weighed;
31
+ for (let start = 0; start < items.length; start += size) {
32
+ parts.push(items.slice(start, start + size));
36
33
  }
37
- if (part.length > 0)
38
- parts.push(part);
39
34
  return parts;
40
35
  }
package/dist/index.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  export { createAgentsHouseAdapter, type AgentsHouseAdapterOptions } from './adapter.js';
2
- export { PRIVATE_LOCATOR } from './transport.js';
3
- export type { HouseByteAct, HouseByteAnswer, HouseByteTransfer, HouseDoorAnswer, HouseHeldRoom, HouseOpening, HouseStream, HouseStreamEntry, HouseStreamFrame, HouseSiteTransport, HouseTransport, } from './transport.js';
2
+ export { HOUSE_APP_ACTS, HOUSE_APP_BATCHES, HOUSE_SITE_ACTS } from './actions.js';
3
+ export { HOUSE_ROOM_TYPES, INBOX_CHANNEL_KINDS, INBOX_CHAT_TYPE, INBOX_MESSAGE_TYPE, type InboxChannelKind, } from './room-types.js';
4
+ export type { HouseByteAct, HouseByteTransfer, HouseBytesAnswer, HouseClosing, HouseDoorAnswer, HouseHeldRoom, HouseOpening, HouseStream, HouseStreamEntry, HouseStreamFrame, HouseSiteTransport, HouseTransport, } from './transport.js';
4
5
  //# 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,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,YAAY,EACV,YAAY,EACZ,eAAe,EACf,iBAAiB,EACjB,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,iBAAiB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAClF,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,3 @@
1
1
  export { createAgentsHouseAdapter } from './adapter.js';
2
- export { PRIVATE_LOCATOR } from './transport.js';
2
+ export { HOUSE_APP_ACTS, HOUSE_APP_BATCHES, HOUSE_SITE_ACTS } from './actions.js';
3
+ export { HOUSE_ROOM_TYPES, INBOX_CHANNEL_KINDS, INBOX_CHAT_TYPE, INBOX_MESSAGE_TYPE, } from './room-types.js';
package/dist/model.d.ts CHANGED
@@ -2,7 +2,7 @@ import type { RoomModels } from '@agentshouse/mdruntime';
2
2
  import type { TrackedAuthority } from './discovery.js';
3
3
  import { type HouseScope, type HouseView } from './read.js';
4
4
  import type { HouseMode, HouseStreamEntry } from './transport.js';
5
- export declare function scopeModels(scope: HouseScope, tracked: TrackedAuthority): Promise<RoomModels | undefined>;
5
+ export declare function partModels(scope: HouseScope, tracked: TrackedAuthority, seen: ReadonlySet<string>, final: boolean): Promise<RoomModels | undefined>;
6
6
  export declare function viewModels(view: HouseView, tracked: TrackedAuthority): Promise<RoomModels | undefined>;
7
7
  export declare function streamedModels(schemas: ReadonlyMap<string, HouseStreamEntry>, tracked: TrackedAuthority, mode: HouseMode): Promise<RoomModels | undefined>;
8
8
  //# 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;AAiClE,wBAAgB,WAAW,CACzB,KAAK,EAAE,UAAU,EACjB,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAEjC;AAED,wBAAgB,UAAU,CACxB,IAAI,EAAE,SAAS,EACf,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAQjC;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,CASjC"}
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"}
package/dist/model.js CHANGED
@@ -1,12 +1,15 @@
1
1
  import { sha256Hex } from './digest.js';
2
2
  import { schemaOf, schemaPath } from './read.js';
3
3
  const MODEL_ABSENT = { kind: 'model-unavailable', reason: 'not-readable' };
4
- const ABSENT_SCHEMA = { schema: null, version: null };
4
+ const ABSENT_SCHEMA = { schema: null, version: null, revision: null };
5
5
  async function heldModel(read, identity) {
6
6
  if (read === null)
7
7
  return MODEL_ABSENT;
8
8
  const version = await sha256Hex(JSON.stringify(read.version));
9
- return { kind: 'model', snapshot: { identity, version, schema: read.schema } };
9
+ return {
10
+ kind: 'model',
11
+ snapshot: { identity, version, schema: read.schema, revision: read.revision },
12
+ };
10
13
  }
11
14
  async function modelsOf(tracked, read) {
12
15
  const models = {};
@@ -23,8 +26,12 @@ async function modelsOf(tracked, read) {
23
26
  }
24
27
  return models.collection === undefined && models.selection === undefined ? undefined : models;
25
28
  }
26
- export function scopeModels(scope, tracked) {
27
- return modelsOf(tracked, (schema) => schemaOf(scope, schema));
29
+ export function partModels(scope, tracked, seen, final) {
30
+ return modelsOf(tracked, (schema) => {
31
+ if (scope.files.some((file) => file.path === schema))
32
+ return schemaOf(scope, schema);
33
+ return final && !seen.has(schema) ? ABSENT_SCHEMA : undefined;
34
+ });
28
35
  }
29
36
  export function viewModels(view, tracked) {
30
37
  return modelsOf(tracked, (schema) => {
@@ -33,8 +40,13 @@ export function viewModels(view, tracked) {
33
40
  return undefined;
34
41
  if ('removed' in change)
35
42
  return ABSENT_SCHEMA;
36
- if ('content' in change)
37
- return { schema: change.content, version: change.version };
43
+ if ('content' in change) {
44
+ return {
45
+ schema: change.content,
46
+ version: change.version,
47
+ revision: change.revision ?? null,
48
+ };
49
+ }
38
50
  return null;
39
51
  });
40
52
  }
@@ -48,6 +60,8 @@ export function streamedModels(schemas, tracked, mode) {
48
60
  if (entry.text === undefined)
49
61
  return null;
50
62
  const version = mode === 'site' ? entry.sha256 : entry.revision;
51
- return version === undefined ? null : { schema: entry.text, version };
63
+ return version === undefined
64
+ ? null
65
+ : { schema: entry.text, version, revision: mode === 'site' ? null : version };
52
66
  });
53
67
  }
package/dist/part.d.ts ADDED
@@ -0,0 +1,13 @@
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 checkedPayload(body: unknown, listed: HousePart): Promise<Uint8Array<ArrayBuffer> | null>;
11
+ export declare function gunzipped(payload: Uint8Array<ArrayBuffer>): Promise<string | null>;
12
+ export declare function unverifiedPart(locator: string): ScopedRefusal;
13
+ //# 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,wBAAsB,cAAc,CAClC,IAAI,EAAE,OAAO,EACb,MAAM,EAAE,SAAS,GAChB,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,CAiBzC;AAED,wBAAsB,SAAS,CAAC,OAAO,EAAE,UAAU,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAOxF;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,CAS7D"}
package/dist/part.js ADDED
@@ -0,0 +1,80 @@
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 async function checkedPayload(body, listed) {
39
+ if (typeof body !== 'object' || body === null)
40
+ return null;
41
+ const { part } = body;
42
+ if (typeof part !== 'string')
43
+ return null;
44
+ const frame = decoded(part);
45
+ if (frame === null || frame.length !== listed.bytes)
46
+ return null;
47
+ if (frame.length < PART_HEAD_BYTES + PART_DIGEST_BYTES)
48
+ return null;
49
+ const view = new DataView(frame.buffer, frame.byteOffset, frame.byteLength);
50
+ if (view.getUint32(0) !== PART_MAGIC)
51
+ return null;
52
+ const length = view.getUint32(4);
53
+ if (PART_HEAD_BYTES + length + PART_DIGEST_BYTES !== frame.length)
54
+ return null;
55
+ const payload = frame.subarray(PART_HEAD_BYTES, PART_HEAD_BYTES + length);
56
+ const digest = hex(new Uint8Array(await crypto.subtle.digest('SHA-256', payload)));
57
+ if (digest !== listed.sha256 || hex(frame.subarray(PART_HEAD_BYTES + length)) !== digest) {
58
+ return null;
59
+ }
60
+ return payload;
61
+ }
62
+ export async function gunzipped(payload) {
63
+ try {
64
+ const stream = new Blob([payload]).stream().pipeThrough(new DecompressionStream('gzip'));
65
+ return await new Response(stream).text();
66
+ }
67
+ catch {
68
+ return null;
69
+ }
70
+ }
71
+ export function unverifiedPart(locator) {
72
+ return {
73
+ kind: 'scoped-refusal',
74
+ locator,
75
+ scope: 'undisclosed',
76
+ code: PART_UNVERIFIED,
77
+ fields: {},
78
+ retryable: true,
79
+ };
80
+ }
package/dist/read.d.ts CHANGED
@@ -1,13 +1,40 @@
1
- import type { BootstrapPage, RefreshResult, RoomAttachment } from '@agentshouse/mdruntime';
1
+ import { type AdapterFailure, type BinaryFile, type BootstrapPage, type RefreshResult, 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];
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>;
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>;
6
31
  export type HouseManifestFile = {
7
32
  path: string;
8
33
  revision: string | undefined;
9
34
  version: string;
35
+ sha256?: string;
10
36
  head?: HeadChange;
37
+ binary?: BinaryFile;
11
38
  };
12
39
  export type HouseContent = {
13
40
  path: string;
@@ -17,19 +44,26 @@ export type HouseScope = LogPosition & {
17
44
  anchor: string;
18
45
  files: readonly HouseManifestFile[];
19
46
  contents: readonly HouseContent[];
20
- attachments?: readonly RoomAttachment[];
47
+ folders?: readonly string[];
48
+ };
49
+ export type HouseRoomParts = LogPosition & {
50
+ anchor: string;
51
+ parts: readonly HousePart[];
21
52
  };
22
- export type HouseEnvelope = {
23
- scopes: readonly HouseScope[];
53
+ export type HouseParted = {
54
+ rooms: readonly HouseRoomParts[];
55
+ next?: string;
24
56
  };
25
57
  export type HouseGrant = {
26
- method: 'GET';
27
- url: string;
28
- } | {
29
- method: 'POST';
30
58
  operation: string;
31
59
  url: string;
32
60
  };
61
+ export type HouseFileAddress = {
62
+ url: string;
63
+ name: string;
64
+ sha256: string;
65
+ mediaType: string;
66
+ };
33
67
  export type HouseChange = {
34
68
  path: string;
35
69
  removed: true;
@@ -41,38 +75,56 @@ export type HouseChange = {
41
75
  head?: HeadChange;
42
76
  } | {
43
77
  path: string;
44
- reference: {
45
- revision: string;
46
- };
78
+ binary: BinaryFile;
79
+ revision: string | undefined;
80
+ version: string;
81
+ head?: HeadChange;
82
+ };
83
+ export type HousePage = {
84
+ after: string;
85
+ through: string;
86
+ read: number;
87
+ };
88
+ export type HouseFolder = {
89
+ path: string;
90
+ removed: boolean;
47
91
  };
48
92
  export type HouseView = LogPosition & {
49
93
  authority: string;
50
94
  changes: readonly HouseChange[];
51
- attachments?: readonly RoomAttachment[];
95
+ folders?: readonly HouseFolder[];
96
+ next?: HousePage;
97
+ };
98
+ type PageFailure = AdapterFailure | {
99
+ kind: 'beyond-horizon';
52
100
  };
53
101
  export type HouseEnumeration = {
54
102
  authorities: readonly HouseView[];
55
103
  };
56
104
  export declare function authorityRoot(handle: string): string;
57
- export declare function contentPrefixes(tracked: TrackedAuthority): readonly string[];
58
105
  export declare function schemaPath(handle: string, schema: string): string;
59
106
  export declare function parseGrant(body: unknown): HouseGrant | null;
107
+ export declare function parseFileAddress(body: unknown): HouseFileAddress | null;
60
108
  export declare function headChange(held: {
61
109
  readonly author?: unknown;
62
110
  readonly created_at?: unknown;
63
111
  }): HeadChange | undefined | null;
64
- export declare function parseOriginals(value: unknown): readonly RoomAttachment[] | null;
65
- export declare function parseEnvelope(body: unknown): HouseEnvelope | null;
66
- export declare function parseSiteBootstrap(body: unknown): HouseScope | null;
112
+ export declare function binaryFileOf(held: Readonly<Record<string, unknown>>): BinaryFile | undefined | null;
113
+ export declare function parseParted(body: unknown): HouseParted | null;
114
+ export declare function parseSiteParted(body: unknown): HouseRoomParts | null;
115
+ export declare function emptyScope(room: HouseRoomParts): HouseScope;
116
+ export declare function housePart(room: HouseRoomParts, body: unknown, listed: HousePart, mode: HouseMode): Promise<HouseScope | TransportUncertainty | null>;
67
117
  export declare function parseEnumeration(body: unknown, mode: HouseMode): HouseEnumeration | null;
68
- export declare function advancedScope(scope: HouseScope, view: HouseView): HouseScope;
69
- export declare function matchesScope(scope: HouseScope, tracked: TrackedAuthority): boolean;
70
- export declare function bootstrapOf(scope: HouseScope): BootstrapPage;
118
+ export declare function wholeView(first: HouseView, more: (page: HousePage) => Promise<HouseView | PageFailure>): Promise<HouseView | PageFailure>;
119
+ export declare function advancedScope(scope: HouseScope, view: HouseView): Generator<number, HouseScope, void>;
120
+ export declare function bootstrapping(scope: HouseScope): Generator<number, BootstrapPage, void>;
71
121
  export type HouseSchema = {
72
122
  schema: string | null;
73
123
  version: string | null;
124
+ revision: string | null;
74
125
  };
75
126
  export declare function schemaOf(scope: HouseScope, schema: string): HouseSchema | null;
76
127
  export declare function viewOf(enumeration: HouseEnumeration, tracked: TrackedAuthority): HouseView | undefined;
77
- export declare function refreshFrom(view: HouseView, fromRoomVersion: string): RefreshResult;
128
+ export declare function refreshFrom(view: HouseView, fromRoomVersion: string): Promise<RefreshResult>;
129
+ export {};
78
130
  //# sourceMappingURL=read.d.ts.map