@agentshouse/mdruntime-adapter 0.1.0-cc1bdabaf4e28 → 0.1.0-cc34762b70bb0

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 (55) hide show
  1. package/dist/actions.d.ts +4 -59
  2. package/dist/actions.d.ts.map +1 -1
  3. package/dist/actions.js +7 -289
  4. package/dist/adapter.d.ts.map +1 -1
  5. package/dist/adapter.js +134 -327
  6. package/dist/discovery.d.ts +19 -6
  7. package/dist/discovery.d.ts.map +1 -1
  8. package/dist/discovery.js +63 -30
  9. package/dist/history.d.ts +12 -0
  10. package/dist/history.d.ts.map +1 -0
  11. package/dist/history.js +92 -0
  12. package/dist/house-model.d.ts +718 -1
  13. package/dist/house-model.d.ts.map +1 -1
  14. package/dist/house-model.js +393 -442
  15. package/dist/index.d.ts +8 -4
  16. package/dist/index.d.ts.map +1 -1
  17. package/dist/index.js +7 -3
  18. package/dist/model.d.ts +2 -3
  19. package/dist/model.d.ts.map +1 -1
  20. package/dist/model.js +0 -17
  21. package/dist/part.d.ts +11 -12
  22. package/dist/part.d.ts.map +1 -1
  23. package/dist/part.js +63 -55
  24. package/dist/read.d.ts +10 -58
  25. package/dist/read.d.ts.map +1 -1
  26. package/dist/read.js +37 -220
  27. package/dist/refusal.d.ts +0 -3
  28. package/dist/refusal.d.ts.map +1 -1
  29. package/dist/refusal.js +0 -5
  30. package/dist/room-stream.d.ts +19 -0
  31. package/dist/room-stream.d.ts.map +1 -0
  32. package/dist/room-stream.js +57 -0
  33. package/dist/room-types.d.ts +3 -3
  34. package/dist/room-types.d.ts.map +1 -1
  35. package/dist/room-types.js +8 -7
  36. package/dist/search.d.ts +5 -0
  37. package/dist/search.d.ts.map +1 -0
  38. package/dist/search.js +47 -0
  39. package/dist/site.d.ts.map +1 -1
  40. package/dist/site.js +75 -158
  41. package/dist/stream.d.ts +13 -14
  42. package/dist/stream.d.ts.map +1 -1
  43. package/dist/stream.js +163 -425
  44. package/dist/transport.d.ts +48 -35
  45. package/dist/transport.d.ts.map +1 -1
  46. package/dist/transport.js +54 -11
  47. package/dist/upload.d.ts.map +1 -1
  48. package/dist/upload.js +2 -2
  49. package/dist/write.d.ts +6 -1
  50. package/dist/write.d.ts.map +1 -1
  51. package/dist/write.js +17 -24
  52. package/package.json +2 -2
  53. package/dist/gather.d.ts +0 -4
  54. package/dist/gather.d.ts.map +0 -1
  55. package/dist/gather.js +0 -35
@@ -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',
@@ -15,10 +15,9 @@ const BOUND_KEYS = [
15
15
  'max_prefixes',
16
16
  'max_held_files',
17
17
  'change_retention_seconds',
18
- 'operation_retention_seconds',
19
18
  ];
20
19
  const OPERATION_KEYS = ['write', 'delete'];
21
- const READ_LEVELS = ['mcp', 'online', 'local'];
20
+ const ACCESS_LEVELS = ['search', 'open', 'keep'];
22
21
  function stringList(value) {
23
22
  if (!Array.isArray(value))
24
23
  return null;
@@ -86,11 +85,11 @@ function parseAuthority(value) {
86
85
  const typedSelection = parseTypedSelection(held.typed_selection);
87
86
  const protectedPaths = stringList(held.protected_paths);
88
87
  const operations = parseOperations(held.operations);
89
- const read = READ_LEVELS.find((level) => level === held.read);
88
+ const level = ACCESS_LEVELS.find((one) => one === held.level);
90
89
  if (at === null ||
91
90
  typedSelection === undefined ||
92
91
  protectedPaths === null ||
93
- read === undefined ||
92
+ level === undefined ||
94
93
  operations === null)
95
94
  return null;
96
95
  if (typeof held.room_ref !== 'string' || held.room_ref.length === 0)
@@ -105,11 +104,52 @@ function parseAuthority(value) {
105
104
  typedSelection,
106
105
  managedReplication: held.managed_replication,
107
106
  protectedPaths,
108
- read,
107
+ level,
109
108
  operations,
110
109
  ...at,
111
110
  };
112
111
  }
112
+ function parseAuthorities(value) {
113
+ if (!Array.isArray(value))
114
+ return null;
115
+ const authorities = [];
116
+ for (const entry of value) {
117
+ const authority = parseAuthority(entry);
118
+ if (authority === null)
119
+ return null;
120
+ authorities.push(authority);
121
+ }
122
+ return authorities;
123
+ }
124
+ export function foldedAuthorities(authorities) {
125
+ const shapes = [];
126
+ const known = new Map();
127
+ const rooms = authorities.map(({ room_ref, room_handle, name, position, ...shape }) => {
128
+ const key = JSON.stringify(shape);
129
+ let held = known.get(key);
130
+ if (held === undefined) {
131
+ held = shapes.push(shape) - 1;
132
+ known.set(key, held);
133
+ }
134
+ return { room_ref, room_handle, name, position, shape: held };
135
+ });
136
+ return { shapes, rooms };
137
+ }
138
+ function unfolded(shapes, rooms) {
139
+ if (!Array.isArray(shapes) || !Array.isArray(rooms))
140
+ return null;
141
+ const authorities = [];
142
+ for (const room of rooms) {
143
+ if (typeof room !== 'object' || room === null)
144
+ return null;
145
+ const { shape, ...own } = room;
146
+ const held = typeof shape === 'number' ? shapes[shape] : undefined;
147
+ if (typeof held !== 'object' || held === null)
148
+ return null;
149
+ authorities.push({ ...held, ...own });
150
+ }
151
+ return authorities;
152
+ }
113
153
  export function parseDiscovery(body) {
114
154
  if (typeof body !== 'object' || body === null)
115
155
  return null;
@@ -125,16 +165,19 @@ export function parseDiscovery(body) {
125
165
  new Set(actions).size !== actions.length ||
126
166
  actions.some((name) => name.length === 0))
127
167
  return null;
128
- if (!Array.isArray(held.authorities))
168
+ const authorities = parseAuthorities(unfolded(held.shapes, held.rooms));
169
+ return authorities === null ? null : { member, bounds, authorities, actions };
170
+ }
171
+ export function parseAuthorityChange(body) {
172
+ if (typeof body !== 'object' || body === null)
129
173
  return null;
130
- const authorities = [];
131
- for (const entry of held.authorities) {
132
- const authority = parseAuthority(entry);
133
- if (authority === null)
134
- return null;
135
- authorities.push(authority);
136
- }
137
- return { member, bounds, authorities, actions };
174
+ const held = body;
175
+ const member = parseMember(held.member);
176
+ const authorities = parseAuthorities(held.authorities);
177
+ const left = stringList(held.left);
178
+ if (member === null || authorities === null || left === null)
179
+ return null;
180
+ return { member, authorities, left };
138
181
  }
139
182
  function parseSiteAuthority(value) {
140
183
  if (typeof value !== 'object' || value === null)
@@ -215,27 +258,17 @@ export function providerLimits(bounds) {
215
258
  export function declaredRetention(bounds) {
216
259
  return {
217
260
  history: { kind: 'no-declared-time-bound' },
218
- outcome: bounds.operation_retention_seconds,
219
261
  refreshHorizon: bounds.change_retention_seconds,
220
262
  };
221
263
  }
222
- export function capabilities(actions, rooms) {
223
- const house = rooms.find((room) => room.typedSelection !== null);
224
- return [
225
- {
226
- name: PROVIDER_ACTIONS,
227
- actions: declaredActions(actions),
228
- ...(house === undefined
229
- ? {}
230
- : { conversationAgents: houseConversationAgents(house.authority) }),
231
- },
232
- ];
264
+ export function capabilities(actions) {
265
+ return [{ name: PROVIDER_ACTIONS, actions: declaredActions(actions) }];
233
266
  }
234
267
  export function siteCapabilities() {
235
268
  return [
236
269
  {
237
270
  name: PROVIDER_ACTIONS,
238
- actions: [{ name: SITE_SUBMIT, inputShape: {}, resultKind: 'house' }],
271
+ actions: [{ name: SITE_SUBMISSION, inputShape: {}, resultKind: 'house' }],
239
272
  },
240
273
  ];
241
274
  }
@@ -253,7 +286,7 @@ export function discoveredRoom(authority) {
253
286
  replica: {
254
287
  selection: locator,
255
288
  admission: authority.managedReplication,
256
- offline: authority.read === 'online' ? 'locked' : 'open',
289
+ offline: authority.level === 'open' ? 'locked' : 'open',
257
290
  },
258
291
  ...(authority.typedSelection === null
259
292
  ? {}
@@ -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
+ }