@agentshouse/mdruntime-adapter 0.1.0-ce5ef9afd7e9a → 0.1.0-ce752a56d9714

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 (66) hide show
  1. package/README.md +2 -2
  2. package/dist/actions.d.ts +4 -73
  3. package/dist/actions.d.ts.map +1 -1
  4. package/dist/actions.js +7 -316
  5. package/dist/adapter.d.ts.map +1 -1
  6. package/dist/adapter.js +148 -324
  7. package/dist/app-reference.d.ts +2 -0
  8. package/dist/app-reference.d.ts.map +1 -0
  9. package/dist/app-reference.js +2 -0
  10. package/dist/crockford.d.ts +4 -0
  11. package/dist/crockford.d.ts.map +1 -0
  12. package/dist/crockford.js +3 -0
  13. package/dist/discovery.d.ts +21 -12
  14. package/dist/discovery.d.ts.map +1 -1
  15. package/dist/discovery.js +73 -51
  16. package/dist/history.d.ts +12 -0
  17. package/dist/history.d.ts.map +1 -0
  18. package/dist/history.js +92 -0
  19. package/dist/house-model.d.ts +911 -0
  20. package/dist/house-model.d.ts.map +1 -0
  21. package/dist/house-model.js +496 -0
  22. package/dist/index.d.ts +10 -3
  23. package/dist/index.d.ts.map +1 -1
  24. package/dist/index.js +9 -2
  25. package/dist/model.d.ts +5 -2
  26. package/dist/model.d.ts.map +1 -1
  27. package/dist/model.js +10 -29
  28. package/dist/part.d.ts +12 -11
  29. package/dist/part.d.ts.map +1 -1
  30. package/dist/part.js +66 -56
  31. package/dist/read.d.ts +19 -56
  32. package/dist/read.d.ts.map +1 -1
  33. package/dist/read.js +140 -298
  34. package/dist/refusal.d.ts +0 -3
  35. package/dist/refusal.d.ts.map +1 -1
  36. package/dist/refusal.js +0 -5
  37. package/dist/room-stream.d.ts +20 -0
  38. package/dist/room-stream.d.ts.map +1 -0
  39. package/dist/room-stream.js +78 -0
  40. package/dist/room-types.d.ts +4 -3
  41. package/dist/room-types.d.ts.map +1 -1
  42. package/dist/room-types.js +66 -7
  43. package/dist/search.d.ts +5 -0
  44. package/dist/search.d.ts.map +1 -0
  45. package/dist/search.js +47 -0
  46. package/dist/site.d.ts.map +1 -1
  47. package/dist/site.js +88 -176
  48. package/dist/stream.d.ts +13 -14
  49. package/dist/stream.d.ts.map +1 -1
  50. package/dist/stream.js +169 -426
  51. package/dist/transport.d.ts +48 -36
  52. package/dist/transport.d.ts.map +1 -1
  53. package/dist/transport.js +54 -12
  54. package/dist/upload.d.ts.map +1 -1
  55. package/dist/upload.js +26 -15
  56. package/dist/write.d.ts +6 -1
  57. package/dist/write.d.ts.map +1 -1
  58. package/dist/write.js +19 -32
  59. package/package.json +8 -4
  60. package/AGENTS.md +0 -312
  61. package/dist/gather.d.ts +0 -4
  62. package/dist/gather.d.ts.map +0 -1
  63. package/dist/gather.js +0 -35
  64. package/dist/referrer.d.ts +0 -9
  65. package/dist/referrer.d.ts.map +0 -1
  66. package/dist/referrer.js +0 -41
@@ -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;
@@ -22,20 +21,16 @@ export type HouseOperations = {
22
21
  write: readonly string[];
23
22
  delete: readonly string[];
24
23
  };
25
- export type HouseReadLevel = 'mcp' | 'online' | 'local';
26
- export type HouseModel = {
27
- root: string;
28
- paths: readonly string[];
29
- };
24
+ export type HouseAccessLevel = 'search' | 'open' | 'keep';
30
25
  export type HouseAuthority = LogPosition & {
31
26
  roomRef: string;
32
27
  roomHandle: string;
33
28
  name: string;
34
29
  schema: string;
35
- houseModel: HouseModel | null;
30
+ typedSelection: readonly string[] | null;
36
31
  managedReplication: 'admitted' | 'unavailable';
37
32
  protectedPaths: readonly string[];
38
- read: HouseReadLevel;
33
+ level: HouseAccessLevel;
39
34
  operations: HouseOperations;
40
35
  };
41
36
  export type HouseDiscoveryDocument = {
@@ -44,13 +39,17 @@ export type HouseDiscoveryDocument = {
44
39
  authorities: readonly HouseAuthority[];
45
40
  actions: readonly string[];
46
41
  };
42
+ export type HouseAuthorityChange = {
43
+ member: Member;
44
+ authorities: readonly HouseAuthority[];
45
+ left: readonly string[];
46
+ };
47
47
  export type TrackedAuthority = LogPosition & {
48
48
  locator: string;
49
49
  authority: string;
50
50
  handle: string;
51
51
  schema: string;
52
- houseModel: HouseModel | null;
53
- schemas: readonly string[];
52
+ typedSelection: readonly string[] | null;
54
53
  };
55
54
  export type HouseSiteAuthority = LogPosition & {
56
55
  roomRef: string;
@@ -61,14 +60,24 @@ export type HouseSiteDiscovery = {
61
60
  bounds: HouseBounds;
62
61
  authorities: readonly HouseSiteAuthority[];
63
62
  };
63
+ type RoomOwn = 'room_ref' | 'room_handle' | 'name' | 'position';
64
+ type Folded<A extends Record<RoomOwn, unknown>> = {
65
+ readonly shapes: readonly Omit<A, RoomOwn>[];
66
+ readonly rooms: readonly (Pick<A, RoomOwn> & {
67
+ readonly shape: number;
68
+ })[];
69
+ };
70
+ export declare function foldedAuthorities<A extends Record<RoomOwn, unknown>>(authorities: readonly A[]): Folded<A>;
64
71
  export declare function parseDiscovery(body: unknown): HouseDiscoveryDocument | null;
72
+ export declare function parseAuthorityChange(body: unknown): HouseAuthorityChange | null;
65
73
  export declare function parseSiteDiscovery(body: unknown): HouseSiteDiscovery | null;
66
74
  export declare function siteTracked(document: HouseSiteDiscovery): TrackedAuthority[];
67
- export declare function trackedFrom(document: HouseDiscoveryDocument): TrackedAuthority[];
75
+ export declare function trackedFrom(document: Pick<HouseDiscoveryDocument, 'authorities'>): TrackedAuthority[];
68
76
  export declare function providerLimits(bounds: HouseBounds): readonly ProviderLimit[];
69
77
  export declare function declaredRetention(bounds: HouseBounds): Retention;
70
- export declare function capabilities(actions: HouseDiscoveryDocument['actions'], rooms: readonly Pick<TrackedAuthority, 'authority' | 'houseModel'>[]): readonly Capability[];
78
+ export declare function capabilities(actions: HouseDiscoveryDocument['actions']): readonly Capability[];
71
79
  export declare function siteCapabilities(): readonly Capability[];
72
80
  export declare function discoveredRoom(authority: HouseAuthority): DiscoveredRoom;
73
81
  export declare function mapDiscovery(document: Pick<HouseDiscoveryDocument, 'bounds'>, rooms: readonly DiscoveredRoom[], declared: readonly Capability[]): Discovery;
82
+ export {};
74
83
  //# sourceMappingURL=discovery.d.ts.map
@@ -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":"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"}
package/dist/discovery.js CHANGED
@@ -1,7 +1,7 @@
1
- import { declaredActions, houseConversationAgents, SITE_SUBMIT } from './actions.js';
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',
@@ -18,7 +18,7 @@ const BOUND_KEYS = [
18
18
  'operation_retention_seconds',
19
19
  ];
20
20
  const OPERATION_KEYS = ['write', 'delete'];
21
- const READ_LEVELS = ['mcp', 'online', 'local'];
21
+ const ACCESS_LEVELS = ['search', 'open', 'keep'];
22
22
  function stringList(value) {
23
23
  if (!Array.isArray(value))
24
24
  return null;
@@ -43,16 +43,10 @@ function parseBounds(value) {
43
43
  }
44
44
  return bounds;
45
45
  }
46
- function parseHouseModel(value) {
46
+ function parseTypedSelection(value) {
47
47
  if (value === undefined)
48
48
  return null;
49
- if (typeof value !== 'object' || value === null)
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 };
49
+ return stringList(value) ?? undefined;
56
50
  }
57
51
  function parseMember(value) {
58
52
  if (typeof value !== 'object' || value === null)
@@ -89,14 +83,14 @@ function parseAuthority(value) {
89
83
  return null;
90
84
  }
91
85
  const at = readPosition(held);
92
- const houseModel = parseHouseModel(held.house_model);
86
+ const typedSelection = parseTypedSelection(held.typed_selection);
93
87
  const protectedPaths = stringList(held.protected_paths);
94
88
  const operations = parseOperations(held.operations);
95
- const read = READ_LEVELS.find((level) => level === held.read);
89
+ const level = ACCESS_LEVELS.find((one) => one === held.level);
96
90
  if (at === null ||
97
- houseModel === undefined ||
91
+ typedSelection === undefined ||
98
92
  protectedPaths === null ||
99
- read === undefined ||
93
+ level === undefined ||
100
94
  operations === null)
101
95
  return null;
102
96
  if (typeof held.room_ref !== 'string' || held.room_ref.length === 0)
@@ -108,14 +102,55 @@ function parseAuthority(value) {
108
102
  roomHandle: held.room_handle,
109
103
  name: held.name,
110
104
  schema: held.model_root,
111
- houseModel,
105
+ typedSelection,
112
106
  managedReplication: held.managed_replication,
113
107
  protectedPaths,
114
- read,
108
+ level,
115
109
  operations,
116
110
  ...at,
117
111
  };
118
112
  }
113
+ function parseAuthorities(value) {
114
+ if (!Array.isArray(value))
115
+ return null;
116
+ const authorities = [];
117
+ for (const entry of value) {
118
+ const authority = parseAuthority(entry);
119
+ if (authority === null)
120
+ return null;
121
+ authorities.push(authority);
122
+ }
123
+ return authorities;
124
+ }
125
+ export function foldedAuthorities(authorities) {
126
+ const shapes = [];
127
+ const known = new Map();
128
+ const rooms = authorities.map(({ room_ref, room_handle, name, position, ...shape }) => {
129
+ const key = JSON.stringify(shape);
130
+ let held = known.get(key);
131
+ if (held === undefined) {
132
+ held = shapes.push(shape) - 1;
133
+ known.set(key, held);
134
+ }
135
+ return { room_ref, room_handle, name, position, shape: held };
136
+ });
137
+ return { shapes, rooms };
138
+ }
139
+ function unfolded(shapes, rooms) {
140
+ if (!Array.isArray(shapes) || !Array.isArray(rooms))
141
+ return null;
142
+ const authorities = [];
143
+ for (const room of rooms) {
144
+ if (typeof room !== 'object' || room === null)
145
+ return null;
146
+ const { shape, ...own } = room;
147
+ const held = typeof shape === 'number' ? shapes[shape] : undefined;
148
+ if (typeof held !== 'object' || held === null)
149
+ return null;
150
+ authorities.push({ ...held, ...own });
151
+ }
152
+ return authorities;
153
+ }
119
154
  export function parseDiscovery(body) {
120
155
  if (typeof body !== 'object' || body === null)
121
156
  return null;
@@ -131,16 +166,19 @@ export function parseDiscovery(body) {
131
166
  new Set(actions).size !== actions.length ||
132
167
  actions.some((name) => name.length === 0))
133
168
  return null;
134
- if (!Array.isArray(held.authorities))
169
+ const authorities = parseAuthorities(unfolded(held.shapes, held.rooms));
170
+ return authorities === null ? null : { member, bounds, authorities, actions };
171
+ }
172
+ export function parseAuthorityChange(body) {
173
+ if (typeof body !== 'object' || body === null)
135
174
  return null;
136
- const authorities = [];
137
- for (const entry of held.authorities) {
138
- const authority = parseAuthority(entry);
139
- if (authority === null)
140
- return null;
141
- authorities.push(authority);
142
- }
143
- return { member, bounds, authorities, actions };
175
+ const held = body;
176
+ const member = parseMember(held.member);
177
+ const authorities = parseAuthorities(held.authorities);
178
+ const left = stringList(held.left);
179
+ if (member === null || authorities === null || left === null)
180
+ return null;
181
+ return { member, authorities, left };
144
182
  }
145
183
  function parseSiteAuthority(value) {
146
184
  if (typeof value !== 'object' || value === null)
@@ -188,25 +226,18 @@ export function siteTracked(document) {
188
226
  authority: authority.roomRef,
189
227
  handle: authority.roomHandle,
190
228
  schema: authority.schema,
191
- houseModel: null,
192
- schemas: [authority.schema],
229
+ typedSelection: null,
193
230
  position: authority.position,
194
231
  logEpoch: authority.logEpoch,
195
232
  }));
196
233
  }
197
- function schemasOf(authority) {
198
- return authority.houseModel === null
199
- ? [authority.schema]
200
- : [authority.schema, authority.houseModel.root];
201
- }
202
234
  export function trackedFrom(document) {
203
235
  return document.authorities.map((authority) => ({
204
236
  locator: authority.roomRef,
205
237
  authority: authority.roomRef,
206
238
  handle: authority.roomHandle,
207
239
  schema: authority.schema,
208
- houseModel: authority.houseModel,
209
- schemas: schemasOf(authority),
240
+ typedSelection: authority.typedSelection,
210
241
  position: authority.position,
211
242
  logEpoch: authority.logEpoch,
212
243
  }));
@@ -232,23 +263,14 @@ export function declaredRetention(bounds) {
232
263
  refreshHorizon: bounds.change_retention_seconds,
233
264
  };
234
265
  }
235
- export function capabilities(actions, rooms) {
236
- const house = rooms.find((room) => room.houseModel !== null);
237
- return [
238
- {
239
- name: PROVIDER_ACTIONS,
240
- actions: declaredActions(actions),
241
- ...(house === undefined
242
- ? {}
243
- : { conversationAgents: houseConversationAgents(house.authority) }),
244
- },
245
- ];
266
+ export function capabilities(actions) {
267
+ return [{ name: PROVIDER_ACTIONS, actions: declaredActions(actions) }];
246
268
  }
247
269
  export function siteCapabilities() {
248
270
  return [
249
271
  {
250
272
  name: PROVIDER_ACTIONS,
251
- actions: [{ name: SITE_SUBMIT, inputShape: {}, resultKind: 'house' }],
273
+ actions: [{ name: SITE_SUBMISSION, inputShape: {}, resultKind: 'house' }],
252
274
  },
253
275
  ];
254
276
  }
@@ -266,12 +288,12 @@ export function discoveredRoom(authority) {
266
288
  replica: {
267
289
  selection: locator,
268
290
  admission: authority.managedReplication,
269
- offline: authority.read === 'online' ? 'locked' : 'open',
291
+ offline: authority.level === 'open' ? 'locked' : 'open',
270
292
  },
271
- ...(authority.houseModel === null
293
+ ...(authority.typedSelection === null
272
294
  ? {}
273
- : { typedSelection: { roots: [...authority.houseModel.paths] } }),
274
- providerOwnedPaths: [...authority.protectedPaths, ...schemasOf(authority)],
295
+ : { typedSelection: { roots: [...authority.typedSelection] } }),
296
+ providerOwnedPaths: [...authority.protectedPaths, authority.schema],
275
297
  };
276
298
  }
277
299
  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"}
@@ -0,0 +1,92 @@
1
+ import { actionOutcome } from './actions.js';
2
+ import { houseDoorRoute } from './transport.js';
3
+ export const HISTORY_PAGE = 100;
4
+ const HISTORY = 'conversations/history';
5
+ function record(value) {
6
+ return typeof value === 'object' && value !== null ? value : {};
7
+ }
8
+ function text(value, name) {
9
+ const held = record(value)[name];
10
+ return typeof held === 'string' ? held : undefined;
11
+ }
12
+ function historyCursor(value) {
13
+ const acceptedAt = text(value, 'accepted_at');
14
+ const messageId = text(value, 'message_id');
15
+ if (acceptedAt === undefined || messageId === undefined)
16
+ return null;
17
+ return { accepted_at: acceptedAt, message_id: messageId };
18
+ }
19
+ export function cursorPosition(cursor) {
20
+ return JSON.stringify({ accepted_at: cursor.accepted_at, message_id: cursor.message_id });
21
+ }
22
+ function positionCursor(value) {
23
+ try {
24
+ return historyCursor(JSON.parse(value));
25
+ }
26
+ catch {
27
+ return null;
28
+ }
29
+ }
30
+ export function acceptedMessage(entry) {
31
+ const cursor = historyCursor(entry);
32
+ if (cursor === null)
33
+ return null;
34
+ return {
35
+ identity: cursor.message_id,
36
+ turn: text(entry, 'turn_id') ?? cursor.message_id,
37
+ position: cursorPosition(cursor),
38
+ text: text(entry, 'text') ?? '',
39
+ message: structuredClone(record(entry)),
40
+ };
41
+ }
42
+ function historyPage(entry) {
43
+ const held = record(entry);
44
+ const conversation = text(held, 'conversation_id');
45
+ if (conversation === undefined || !Array.isArray(held.messages))
46
+ return null;
47
+ const messages = [];
48
+ for (const one of held.messages) {
49
+ const message = acceptedMessage(one);
50
+ if (message === null)
51
+ return null;
52
+ messages.push(message);
53
+ }
54
+ const next = held.next === null || held.next === undefined ? undefined : historyCursor(held.next);
55
+ if (next === null)
56
+ return null;
57
+ return { conversation, messages, ...(next === undefined ? {} : { next: cursorPosition(next) }) };
58
+ }
59
+ function historyAsks(request) {
60
+ const asks = [];
61
+ for (const { conversation, after } of request.conversations) {
62
+ const cursor = after === undefined ? undefined : positionCursor(after);
63
+ if (cursor === null)
64
+ return null;
65
+ asks.push({
66
+ conversation_id: conversation,
67
+ ...(cursor === undefined ? {} : { after: cursor }),
68
+ });
69
+ }
70
+ return asks;
71
+ }
72
+ export async function houseHistory(transport, request) {
73
+ const asks = historyAsks(request);
74
+ if (asks === null)
75
+ return { kind: 'rejected', code: 'invalid_request', fields: {}, retryable: false };
76
+ const asked = { conversations: asks, limit: HISTORY_PAGE };
77
+ const outcome = actionOutcome(await transport.door(houseDoorRoute(HISTORY), asked), HISTORY, asked);
78
+ if (outcome.kind !== 'action')
79
+ return outcome;
80
+ const answered = record(outcome.result).histories;
81
+ if (!Array.isArray(answered))
82
+ return { kind: 'transport-uncertainty' };
83
+ const histories = [];
84
+ for (const entry of answered) {
85
+ const page = historyPage(entry);
86
+ if (page === null)
87
+ return { kind: 'transport-uncertainty' };
88
+ histories.push(page);
89
+ }
90
+ const result = { histories };
91
+ return { kind: 'action', result };
92
+ }