@agentshouse/mdruntime-adapter 0.1.0-cb0bbc4ccacd0 → 0.1.0-cb3cb6f7673f1

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.
@@ -1,3 +1,4 @@
1
+ import { CHAT_MESSAGE_TYPE, CHAT_TYPE } from '@agentshouse/mdruntime';
1
2
  import { APP_REFERENCE_PATTERN } from './app-reference.js';
2
3
  import { HOUSE_MODEL_TYPES } from './house-model.js';
3
4
  export const INBOX_CHANNEL_KINDS = [
@@ -9,8 +10,6 @@ export const INBOX_CHANNEL_KINDS = [
9
10
  'viber',
10
11
  'tiktok',
11
12
  ];
12
- export const CHAT_TYPE = 'chat';
13
- export const CHAT_MESSAGE_TYPE = 'chat-message';
14
13
  export const HOUSE_NAMEABLE_ROOM_TYPES = [CHAT_TYPE, CHAT_MESSAGE_TYPE];
15
14
  const WAYFINDING_MAP_TYPE = 'wayfinding-map';
16
15
  const WAYFINDING_TICKET_TYPE = 'wayfinding-ticket';
@@ -52,9 +51,7 @@ export const HOUSE_ROOM_TYPES = [
52
51
  ' properties:',
53
52
  ' direction: { enum: [in, out] }',
54
53
  ' sender:',
55
- ' type: object',
56
- ' properties:',
57
- ' name: { type: string }',
54
+ ...ASSIGNEE,
58
55
  ` username: ${IDENTITY}`,
59
56
  ' sent_at: { type: string, format: date-time }',
60
57
  ` channel_message: ${IDENTITY}`,
package/dist/search.js CHANGED
@@ -27,7 +27,7 @@ export async function houseSearch(transport, tracked, request) {
27
27
  : tracked.filter((entry) => request.rooms.includes(entry.locator));
28
28
  if (named !== null && named.length === 0)
29
29
  return { kind: 'found', documents: [] };
30
- const answer = await transport.door(houseDoorRoute('search'), {
30
+ const answer = await transport.door(houseDoorRoute('rooms/search'), {
31
31
  query: request.text,
32
32
  ...(named === null ? {} : { paths: named.map((entry) => `${ROOMS}${entry.handle}`) }),
33
33
  });
@@ -1 +1 @@
1
- {"version":3,"file":"site.d.ts","sourceRoot":"","sources":["../src/site.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,OAAO,EAQR,MAAM,wBAAwB,CAAC;AAiBhC,OAAO,EAKL,KAAK,kBAAkB,EACxB,MAAM,gBAAgB,CAAC;AAuBxB,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,kBAAkB,EAAE,QAAQ,UAAQ,GAAG,OAAO,CA6K1F"}
1
+ {"version":3,"file":"site.d.ts","sourceRoot":"","sources":["../src/site.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,OAAO,EAQR,MAAM,wBAAwB,CAAC;AAehC,OAAO,EAKL,KAAK,kBAAkB,EACxB,MAAM,gBAAgB,CAAC;AAuBxB,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,kBAAkB,EAAE,QAAQ,UAAQ,GAAG,OAAO,CAiK1F"}
package/dist/site.js CHANGED
@@ -1,15 +1,13 @@
1
- import { stepped } from '@agentshouse/mdruntime';
2
1
  import { actionOutcome } from './actions.js';
2
+ import { chunkedHead, chunkPart, siteChunkList } from './chunks.js';
3
3
  import { mapDiscovery, parseSiteDiscovery, siteCapabilities, siteTracked, } from './discovery.js';
4
- import { bootstrapping } from './read.js';
5
- import { roomStreams } from './room-stream.js';
6
4
  import { spaceSchemas } from './space-schema.js';
7
- import { classifyDoor, discoveryFailure } from './refusal.js';
5
+ import { discoveryFailure } from './refusal.js';
8
6
  import { HOUSE_TYPED_PATHS } from './house-model.js';
9
7
  import { HOUSE_NAMEABLE_ROOM_TYPES, HOUSE_ROOM_TYPES } from './room-types.js';
10
8
  import { houseNotifications } from './stream.js';
11
- import { houseSiteRoute, SITE_DOOR_SUBMIT, SITE_FILES, SITE_SUBMISSION, } from './transport.js';
12
- import { followsVersion, logPosition, presented, reachedVersion, roomVersion } from './version.js';
9
+ import { houseSiteRoute, SITE_DOOR_SUBMIT, SITE_FILES, SITES_SUBMISSIONS_CREATE, } from './transport.js';
10
+ import { followsVersion, reachedVersion, roomVersion } from './version.js';
13
11
  const UNCERTAIN = { kind: 'transport-uncertainty' };
14
12
  function unfound() {
15
13
  return { kind: 'rejected', code: 'file_not_found', fields: {}, retryable: false };
@@ -35,36 +33,32 @@ export function createSiteAdapter(transport, snapshot = false) {
35
33
  changed: () => null,
36
34
  }, spaces);
37
35
  const tracked = new Map();
38
- const read = new Map();
39
- const rooms = roomStreams('site', spaces);
36
+ const chunked = new Map();
40
37
  function fileRoute(request) {
41
38
  const entry = tracked.get(request.locator);
42
39
  if (entry === undefined)
43
40
  return { kind: 'room-not-readable', locator: request.locator };
44
41
  return `${SITE_FILES}${entry.authority}/${encodeURIComponent(request.revision)}/${encodeURIComponent(request.path)}`;
45
42
  }
46
- async function openedRoom(entry, arriving, signal) {
47
- const cut = read.get(entry.locator);
48
- const answered = await transport.streamed(`${houseSiteRoute('bootstrap')}/${entry.authority}${cut === undefined ? '' : `?expired=${cut}`}`, signal ?? new AbortController().signal);
49
- if (answered.room === null)
50
- return classifyDoor(answered.status, answered.body, entry.locator) ?? UNCERTAIN;
51
- const head = await rooms.head(entry, answered.room, arriving, signal);
52
- const at = head.kind === 'bootstrap' ? logPosition(head.roomVersion) : null;
53
- if (at !== null)
54
- read.set(entry.locator, at.position);
43
+ async function listedRoom(entry) {
44
+ const past = chunked.get(entry.locator)?.position;
45
+ const listed = siteChunkList(await transport.read(`${houseSiteRoute('chunks')}/${entry.authority}${past === undefined ? '' : `?expired=${past}`}`), entry.locator);
46
+ if ('kind' in listed)
47
+ return listed;
48
+ const head = await chunkedHead(listed, entry, spaces);
49
+ if (head.kind === 'bootstrap')
50
+ chunked.set(entry.locator, listed);
55
51
  return head;
56
52
  }
57
- async function streamedPage(entry, token) {
58
- const part = await rooms.part(entry, token);
59
- if ('kind' in part)
60
- return part;
61
- const { folders: _folders, ...page } = await stepped(bootstrapping(part.scope));
62
- return {
63
- ...page,
64
- ...(part.models === undefined ? {} : { models: part.models }),
65
- ...(part.pageToken === undefined ? {} : { pageToken: part.pageToken }),
66
- bytes: part.bytes,
67
- };
53
+ async function chunkPage(entry, id, arriving) {
54
+ const room = chunked.get(entry.locator);
55
+ const address = room?.chunks.get(id);
56
+ if (room === undefined || address === undefined)
57
+ return UNCERTAIN;
58
+ const read = await transport.download(address.url);
59
+ if (read.status !== 200)
60
+ return UNCERTAIN;
61
+ return chunkPart(read.body, room, id, arriving);
68
62
  }
69
63
  async function discovered() {
70
64
  const answer = await transport.read(houseSiteRoute('discover'));
@@ -94,8 +88,8 @@ export function createSiteAdapter(transport, snapshot = false) {
94
88
  if (entry === undefined)
95
89
  return { kind: 'room-not-readable', locator: request.locator };
96
90
  return request.pageToken === undefined
97
- ? openedRoom(entry, request.arriving, request.signal)
98
- : streamedPage(entry, request.pageToken);
91
+ ? listedRoom(entry)
92
+ : chunkPage(entry, request.pageToken, request.arriving);
99
93
  },
100
94
  ...(snapshot
101
95
  ? {
@@ -149,7 +143,7 @@ export function createSiteAdapter(transport, snapshot = false) {
149
143
  return followsVersion(version, next);
150
144
  },
151
145
  async action(_authorization, request) {
152
- if (request.name !== SITE_SUBMISSION) {
146
+ if (request.name !== SITES_SUBMISSIONS_CREATE) {
153
147
  return {
154
148
  kind: 'rejected',
155
149
  code: 'action-unimplemented',
@@ -159,18 +153,12 @@ export function createSiteAdapter(transport, snapshot = false) {
159
153
  }
160
154
  if (!transport.online())
161
155
  return UNCERTAIN;
162
- return actionOutcome(await transport.door(SITE_DOOR_SUBMIT, request.input), SITE_SUBMISSION, request.input);
156
+ return actionOutcome(await transport.door(SITE_DOOR_SUBMIT, request.input), SITES_SUBMISSIONS_CREATE, request.input);
163
157
  },
164
158
  roomStream: snapshot
165
159
  ? undefined
166
160
  : {
167
- hold(rooms) {
168
- notifications.send(rooms.flatMap((room) => {
169
- const entry = tracked.get(room.locator);
170
- const at = logPosition(room.roomVersion);
171
- return entry === undefined || at === null ? [] : [presented(entry.authority, at)];
172
- }));
173
- },
161
+ hold: notifications.send,
174
162
  observe: notifications.observe,
175
163
  },
176
164
  serviceMode: notifications.serviceMode,
package/dist/stream.d.ts CHANGED
@@ -1,7 +1,7 @@
1
- import { type AuthorityChange, type Discovery, type ConversationStream, type RoomStreamEvent, type ServiceModeSignal } from '@agentshouse/mdruntime';
1
+ import { type AuthorityChange, type Discovery, type ConversationStream, type HeldRoom, type RoomStreamEvent, type ServiceModeSignal } from '@agentshouse/mdruntime';
2
2
  import type { TrackedAuthority } from './discovery.js';
3
3
  import type { SpaceSchemas } from './space-schema.js';
4
- import { type HouseDoor, type HouseHeldRoom, type HouseMode, type HouseStreamFrame } from './transport.js';
4
+ import { type HouseDoor, type HouseMode, type HouseStreamFrame } from './transport.js';
5
5
  export type HouseOpeningFrame = Extract<HouseStreamFrame, {
6
6
  type: 'opening';
7
7
  }>;
@@ -11,11 +11,12 @@ export type HouseAuthorityChangedFrame = Extract<HouseStreamFrame, {
11
11
  export type HouseDiscovering = {
12
12
  opened(frame: HouseOpeningFrame | null): Promise<Discovery | null>;
13
13
  changed(frame: HouseAuthorityChangedFrame): AuthorityChange | null;
14
+ expired?(authorities: readonly string[]): void;
14
15
  };
15
16
  export type HouseNotifications = {
16
17
  runtime: string;
17
18
  observe(notify: (event: RoomStreamEvent) => void): () => void;
18
- send(rooms: readonly HouseHeldRoom[]): void;
19
+ send(rooms: readonly HeldRoom[]): void;
19
20
  track(authorities: readonly TrackedAuthority[]): void;
20
21
  conversations: ConversationStream;
21
22
  serviceMode: ServiceModeSignal;
@@ -1 +1 @@
1
- {"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../src/stream.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,eAAe,EAEpB,KAAK,SAAS,EACd,KAAK,kBAAkB,EAIvB,KAAK,eAAe,EAEpB,KAAK,iBAAiB,EAEvB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAEvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAUtD,OAAO,EAEL,KAAK,SAAS,EACd,KAAK,aAAa,EAElB,KAAK,SAAS,EAGd,KAAK,gBAAgB,EACtB,MAAM,gBAAgB,CAAC;AAaxB,MAAM,MAAM,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,EAAE;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,CAAC,CAAC;AAE/E,MAAM,MAAM,0BAA0B,GAAG,OAAO,CAAC,gBAAgB,EAAE;IAAE,IAAI,EAAE,mBAAmB,CAAA;CAAE,CAAC,CAAC;AAElG,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC;IACnE,OAAO,CAAC,KAAK,EAAE,0BAA0B,GAAG,eAAe,GAAG,IAAI,CAAC;CACpE,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IAC9D,IAAI,CAAC,KAAK,EAAE,SAAS,aAAa,EAAE,GAAG,IAAI,CAAC;IAC5C,KAAK,CAAC,WAAW,EAAE,SAAS,gBAAgB,EAAE,GAAG,IAAI,CAAC;IACtD,aAAa,EAAE,kBAAkB,CAAC;IAClC,WAAW,EAAE,iBAAiB,CAAC;CAChC,CAAC;AA0FF,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,SAAS,EACf,WAAW,EAAE,gBAAgB,EAC7B,MAAM,EAAE,YAAY,GACnB,kBAAkB,CA8TpB"}
1
+ {"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../src/stream.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,eAAe,EAEpB,KAAK,SAAS,EACd,KAAK,kBAAkB,EAEvB,KAAK,QAAQ,EAGb,KAAK,eAAe,EAEpB,KAAK,iBAAiB,EAEvB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAEvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAWtD,OAAO,EAEL,KAAK,SAAS,EAEd,KAAK,SAAS,EAGd,KAAK,gBAAgB,EACtB,MAAM,gBAAgB,CAAC;AAaxB,MAAM,MAAM,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,EAAE;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,CAAC,CAAC;AAE/E,MAAM,MAAM,0BAA0B,GAAG,OAAO,CAAC,gBAAgB,EAAE;IAAE,IAAI,EAAE,mBAAmB,CAAA;CAAE,CAAC,CAAC;AAElG,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC;IACnE,OAAO,CAAC,KAAK,EAAE,0BAA0B,GAAG,eAAe,GAAG,IAAI,CAAC;IACnE,OAAO,CAAC,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAAC;CAChD,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IAC9D,IAAI,CAAC,KAAK,EAAE,SAAS,QAAQ,EAAE,GAAG,IAAI,CAAC;IACvC,KAAK,CAAC,WAAW,EAAE,SAAS,gBAAgB,EAAE,GAAG,IAAI,CAAC;IACtD,aAAa,EAAE,kBAAkB,CAAC;IAClC,WAAW,EAAE,iBAAiB,CAAC;CAChC,CAAC;AA6FF,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,SAAS,EACf,WAAW,EAAE,gBAAgB,EAC7B,MAAM,EAAE,YAAY,GACnB,kBAAkB,CA8XpB"}
package/dist/stream.js CHANGED
@@ -1,15 +1,15 @@
1
1
  import { ROW_WEIGHT, stepped, } from '@agentshouse/mdruntime';
2
2
  import { acceptedMessage, cursorPosition, houseHistory } from './history.js';
3
3
  import { keptSpaceSchemas, streamedModels } from './model.js';
4
- import { answered, answering, binaryFileOf, folded, forgotten, headChange, revised, } from './read.js';
4
+ import { answered, answering, binaryFileOf, createdOf, folded, forgotten, headChange, revised, } from './read.js';
5
5
  import { houseDoorRoute, } from './transport.js';
6
- import { DECIMAL, roomVersion } from './version.js';
6
+ import { DECIMAL, logPosition, presented, roomVersion } from './version.js';
7
7
  function turnOperation(frame) {
8
8
  const { type: _type, conversation_id: _conversation, turn_id: _turn, ...operation } = frame;
9
9
  return structuredClone(operation);
10
10
  }
11
11
  async function houseAgents(transport) {
12
- const answer = await transport.door(houseDoorRoute('agents/read'), {});
12
+ const answer = await transport.door(houseDoorRoute('agents/list'), {});
13
13
  const agents = answer.status === 200 ? answer.body?.agents : null;
14
14
  if (!Array.isArray(agents))
15
15
  return null;
@@ -72,13 +72,16 @@ function* changed(tracked, entries, version, schemas) {
72
72
  const head = headChange(entry);
73
73
  if (head)
74
74
  answer.changes.set(entry.path, head);
75
+ const created = createdOf(entry);
76
+ if (created)
77
+ answer.created.set(entry.path, created);
75
78
  }
76
79
  return { kind: 'net-advancement', roomVersion: version, ...(yield* answered(answer)) };
77
80
  }
78
- async function changePage(tracked, entries, version, mode, spaces) {
81
+ async function changePage(tracked, entries, version, mode, spaces, whole) {
79
82
  const schemas = new Map();
80
83
  const page = await stepped(changed(tracked, entries, version, schemas));
81
- const models = await streamedModels(schemas, tracked, mode, spaces);
84
+ const models = await streamedModels(schemas, tracked, mode, spaces, whole);
82
85
  return models === undefined ? page : { ...page, models };
83
86
  }
84
87
  export function houseNotifications(transport, mode, discovering, spaces) {
@@ -87,17 +90,25 @@ export function houseNotifications(transport, mode, discovering, spaces) {
87
90
  let socket = null;
88
91
  const tracking = new Map();
89
92
  const observers = new Set();
93
+ const replaying = new Map();
90
94
  const conversationObservers = new Set();
91
95
  const modeObservers = new Set();
92
96
  let replicated = [];
93
97
  let listedCursor = null;
98
+ const unanswered = [];
99
+ const heldAtZero = new Set();
94
100
  const live = new Set();
95
101
  let opening = null;
96
102
  let announced = null;
97
103
  const runtime = crypto.randomUUID();
98
104
  function emit(event) {
99
- for (const observer of observers)
100
- observer(event);
105
+ for (const observer of observers) {
106
+ const held = replaying.get(observer);
107
+ if (held === undefined)
108
+ observer(event);
109
+ else
110
+ held.push(event);
111
+ }
101
112
  }
102
113
  function emitConversation(event) {
103
114
  if (event.kind === 'turn' ||
@@ -119,6 +130,8 @@ export function houseNotifications(transport, mode, discovering, spaces) {
119
130
  announced = null;
120
131
  socket = next;
121
132
  staged.clear();
133
+ unanswered.length = 0;
134
+ heldAtZero.clear();
122
135
  const gapped = new Set([...replicated, ...live]);
123
136
  live.clear();
124
137
  for (const conversation of gapped)
@@ -248,9 +261,13 @@ export function houseNotifications(transport, mode, discovering, spaces) {
248
261
  return;
249
262
  }
250
263
  if (frame.type === 'caught_up') {
264
+ discovering.expired?.(frame.expired);
251
265
  emit({
252
266
  kind: 'caught-up',
253
- expired: frame.expired.flatMap((authority) => (tracking.get(authority) ?? []).map((tracked) => tracked.locator)),
267
+ expired: [
268
+ ...frame.expired.flatMap((authority) => (tracking.get(authority) ?? []).map((tracked) => tracked.locator)),
269
+ ...(unanswered.shift() ?? []),
270
+ ],
254
271
  });
255
272
  return;
256
273
  }
@@ -301,7 +318,9 @@ export function houseNotifications(transport, mode, discovering, spaces) {
301
318
  const after = position(frame.after);
302
319
  if (at === null || after === null || after >= at)
303
320
  return;
304
- const from = roomVersion({ position: frame.after, logEpoch: frame.log_epoch });
321
+ const from = after === 0n && !heldAtZero.has(frame.authority)
322
+ ? null
323
+ : roomVersion({ position: frame.after, logEpoch: frame.log_epoch });
305
324
  const version = roomVersion({ position: frame.position, logEpoch: frame.log_epoch });
306
325
  for (const tracked of tracking.get(frame.authority) ?? []) {
307
326
  emit({
@@ -309,7 +328,7 @@ export function houseNotifications(transport, mode, discovering, spaces) {
309
328
  locator: tracked.locator,
310
329
  from,
311
330
  roomVersion: version,
312
- read: () => changePage(tracked, entries, version, mode, spaces),
331
+ read: () => changePage(tracked, entries, version, mode, spaces, from === null),
313
332
  });
314
333
  }
315
334
  }
@@ -320,6 +339,8 @@ export function houseNotifications(transport, mode, discovering, spaces) {
320
339
  announced = null;
321
340
  socket = null;
322
341
  staged.clear();
342
+ unanswered.length = 0;
343
+ heldAtZero.clear();
323
344
  emit({ kind: 'closed', revoked, lost, authorityChanged });
324
345
  });
325
346
  return {
@@ -354,11 +375,15 @@ export function houseNotifications(transport, mode, discovering, spaces) {
354
375
  },
355
376
  observe(notify) {
356
377
  observers.add(notify);
357
- const replayed = opening === null ? [] : [{ kind: 'opened' }, announced];
358
- if (replayed.length > 0) {
378
+ if (opening !== null) {
379
+ const replayed = [{ kind: 'opened' }];
380
+ if (announced !== null)
381
+ replayed.push(announced);
382
+ replaying.set(notify, replayed);
359
383
  queueMicrotask(() => {
384
+ replaying.delete(notify);
360
385
  for (const event of replayed)
361
- if (event !== null && observers.has(notify))
386
+ if (observers.has(notify))
362
387
  notify(event);
363
388
  });
364
389
  }
@@ -369,7 +394,47 @@ export function houseNotifications(transport, mode, discovering, spaces) {
369
394
  send(rooms) {
370
395
  opening = null;
371
396
  announced = null;
372
- socket?.hold(rooms, runtime, listedCursor);
397
+ if (socket === null)
398
+ return;
399
+ const entries = new Map([...tracking.values()].flat().map((tracked) => [tracked.locator, tracked]));
400
+ const named = rooms.flatMap((room) => {
401
+ const entry = entries.get(room.locator);
402
+ const at = room.roomVersion === null ? null : logPosition(room.roomVersion);
403
+ return entry === undefined || at === null ? [] : [{ entry, at }];
404
+ });
405
+ const unheld = rooms.flatMap((room) => {
406
+ const entry = entries.get(room.locator);
407
+ return entry === undefined || room.roomVersion !== null ? [] : [entry];
408
+ });
409
+ for (const { entry, at } of named) {
410
+ if (at.position === '0')
411
+ heldAtZero.add(entry.authority);
412
+ else
413
+ heldAtZero.delete(entry.authority);
414
+ }
415
+ for (const entry of unheld)
416
+ heldAtZero.delete(entry.authority);
417
+ const site = mode === 'site';
418
+ unanswered.push(site ? unheld.map((entry) => entry.locator) : []);
419
+ socket.hold([
420
+ ...named.map(({ entry, at }) => presented(entry.authority, at)),
421
+ ...(site ? [] : unheld).map((entry) => presented(entry.authority, { position: '0', logEpoch: entry.logEpoch })),
422
+ ], runtime, listedCursor);
423
+ if (site)
424
+ return;
425
+ const made = unheld.filter((entry) => entry.position === '0');
426
+ queueMicrotask(() => {
427
+ for (const entry of made) {
428
+ const version = roomVersion(entry);
429
+ emit({
430
+ kind: 'room-change',
431
+ locator: entry.locator,
432
+ from: null,
433
+ roomVersion: version,
434
+ read: () => changePage(entry, [], version, mode, spaces, true),
435
+ });
436
+ }
437
+ });
373
438
  },
374
439
  track(entries) {
375
440
  tracking.clear();
@@ -1,13 +1,13 @@
1
1
  import type { ConversationEvent, SavedFacts, TurnOperation } from '@agentshouse/mdruntime';
2
2
  export declare const HOUSE_RUNTIME_READS: {
3
- readonly acts: readonly ['account/push', 'agents/read', 'apps/features/set', 'apps/source/download', 'apps/source/top', 'batch', 'batch-upload', 'bootstrap', 'conversations/history', 'discover', 'files/attach', 'files/finish', 'files/get', 'revisions', 'search', 'sites/screenshot/read'];
3
+ readonly acts: readonly ['account/push/set', 'agents/list', 'apps/features/set', 'apps/source/download', 'apps/source/top/read', 'conversations/history/list', 'files/attach', 'files/batch', 'files/batch-upload', 'files/finish', 'files/read', 'files/revisions/list', 'room-chunks/list', 'rooms/discover', 'rooms/search', 'sites/screenshot/read'];
4
4
  readonly frames: readonly ['app-message', 'authority_changed', 'carried', 'caught_up', 'commands', 'conversation', 'conversation_deleted', 'conversations', 'deliveries', 'deployment', 'held', 'interactions', 'link', 'message', 'opening', 'options', 'part', 'process', 'received', 'signal', 'site', 'starting', 'subagents', 'tab-icon', 'turn'];
5
5
  };
6
6
  export type HouseRuntimeAct = (typeof HOUSE_RUNTIME_READS.acts)[number];
7
7
  export type HouseRuntimeFrame = (typeof HOUSE_RUNTIME_READS.frames)[number];
8
8
  export declare function houseDoorRoute(act: HouseRuntimeAct): string;
9
- export declare function houseSiteRoute(act: Extract<HouseRuntimeAct, 'bootstrap' | 'discover'>): string;
10
- export declare const SITE_SUBMISSION = "site/submission";
9
+ export declare function houseSiteRoute(act: 'chunks' | 'discover'): string;
10
+ export declare const SITES_SUBMISSIONS_CREATE = "sites/submissions/create";
11
11
  export declare const SITE_DOOR_SUBMIT = "/_house/door/submit";
12
12
  export type HouseMode = 'credential' | 'site';
13
13
  export type HouseDoorAnswer = {
@@ -42,6 +42,7 @@ export type HouseStreamEntry = {
42
42
  site: string;
43
43
  name: string;
44
44
  };
45
+ changed_at?: string;
45
46
  created_at?: string;
46
47
  facts?: SavedFacts;
47
48
  space?: string;
@@ -173,15 +174,11 @@ export type HouseStream = {
173
174
  opened(notify: (opening: HouseOpening) => void): () => void;
174
175
  closed(notify: (closing: HouseClosing) => void): () => void;
175
176
  };
176
- export type HouseStreamed = HouseDoorAnswer & {
177
- room: ReadableStream<Uint8Array> | null;
178
- };
179
177
  export type HouseDoor = {
180
178
  door(route: string, body: unknown): Promise<HouseDoorAnswer>;
181
179
  stream: HouseStream;
182
180
  };
183
181
  export type HouseTransport = HouseDoor & {
184
- streamed(route: string, body: unknown, signal: AbortSignal): Promise<HouseStreamed>;
185
182
  transfer(request: HouseByteTransfer): Promise<HouseDoorAnswer>;
186
183
  put(url: string, body: Blob, headers: Readonly<Record<string, string>>): Promise<number>;
187
184
  download(url: string): Promise<HouseBytesAnswer>;
@@ -189,7 +186,6 @@ export type HouseTransport = HouseDoor & {
189
186
  export type HouseSiteTransport = HouseDoor & {
190
187
  online(): boolean;
191
188
  read(route: string): Promise<HouseDoorAnswer>;
192
- streamed(route: string, signal: AbortSignal): Promise<HouseStreamed>;
193
189
  download(route: string): Promise<HouseBytesAnswer>;
194
190
  };
195
191
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"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"}
package/dist/transport.js CHANGED
@@ -1,20 +1,20 @@
1
1
  export const HOUSE_RUNTIME_READS = {
2
2
  acts: [
3
- 'account/push',
4
- 'agents/read',
3
+ 'account/push/set',
4
+ 'agents/list',
5
5
  'apps/features/set',
6
6
  'apps/source/download',
7
- 'apps/source/top',
8
- 'batch',
9
- 'batch-upload',
10
- 'bootstrap',
11
- 'conversations/history',
12
- 'discover',
7
+ 'apps/source/top/read',
8
+ 'conversations/history/list',
13
9
  'files/attach',
10
+ 'files/batch',
11
+ 'files/batch-upload',
14
12
  'files/finish',
15
- 'files/get',
16
- 'revisions',
17
- 'search',
13
+ 'files/read',
14
+ 'files/revisions/list',
15
+ 'room-chunks/list',
16
+ 'rooms/discover',
17
+ 'rooms/search',
18
18
  'sites/screenshot/read',
19
19
  ],
20
20
  frames: [
@@ -51,6 +51,6 @@ export function houseDoorRoute(act) {
51
51
  export function houseSiteRoute(act) {
52
52
  return `/_house/door/${act}`;
53
53
  }
54
- export const SITE_SUBMISSION = 'site/submission';
54
+ export const SITES_SUBMISSIONS_CREATE = 'sites/submissions/create';
55
55
  export const SITE_DOOR_SUBMIT = '/_house/door/submit';
56
56
  export const SITE_FILES = '/_house/files/';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agentshouse/mdruntime-adapter",
3
- "version": "0.1.0-cb0bbc4ccacd0",
3
+ "version": "0.1.0-cb3cb6f7673f1",
4
4
  "description": "Agents House Adapter for the MD Runtime",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -24,7 +24,7 @@
24
24
  "LICENSE"
25
25
  ],
26
26
  "dependencies": {
27
- "@agentshouse/mdruntime": "0.1.0-ccc0e3407f107"
27
+ "@agentshouse/mdruntime": "0.1.0-c1f932245d3d9"
28
28
  },
29
29
  "repository": {
30
30
  "type": "git",
package/dist/part.d.ts DELETED
@@ -1,14 +0,0 @@
1
- export type RoomFrame = {
2
- readonly kind: 'frame';
3
- readonly payload: Uint8Array<ArrayBuffer>;
4
- readonly bytes: number;
5
- } | {
6
- readonly kind: 'ended';
7
- } | {
8
- readonly kind: 'broken';
9
- };
10
- export type RoomFrames = () => Promise<RoomFrame>;
11
- export declare function checkedPayload(frame: Uint8Array<ArrayBuffer>): Promise<Uint8Array<ArrayBuffer> | null>;
12
- export declare function roomFrames(room: ReadableStream<Uint8Array>, arrived?: (bytes: number) => void, signal?: AbortSignal): RoomFrames;
13
- export declare function gunzipped(payload: Uint8Array<ArrayBuffer>): ReadableStream<string>;
14
- //# sourceMappingURL=part.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"part.d.ts","sourceRoot":"","sources":["../src/part.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,SAAS,GACjB;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC7F;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GAC1B;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,CAAC;AAEhC,MAAM,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,CAAC;AAQlD,wBAAsB,cAAc,CAClC,KAAK,EAAE,UAAU,CAAC,WAAW,CAAC,GAC7B,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,CASzC;AAED,wBAAgB,UAAU,CACxB,IAAI,EAAE,cAAc,CAAC,UAAU,CAAC,EAChC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,EACjC,MAAM,CAAC,EAAE,WAAW,GACnB,UAAU,CAwDZ;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,UAAU,CAAC,WAAW,CAAC,GAAG,cAAc,CAAC,MAAM,CAAC,CAKlF"}
package/dist/part.js DELETED
@@ -1,90 +0,0 @@
1
- const PART_MAGIC = 0x48505431;
2
- const PART_HEAD_BYTES = 8;
3
- const PART_DIGEST_BYTES = 32;
4
- function hex(bytes) {
5
- let text = '';
6
- for (const byte of bytes)
7
- text += byte.toString(16).padStart(2, '0');
8
- return text;
9
- }
10
- export async function checkedPayload(frame) {
11
- if (frame.length < PART_HEAD_BYTES + PART_DIGEST_BYTES)
12
- return null;
13
- const view = new DataView(frame.buffer, frame.byteOffset, frame.byteLength);
14
- if (view.getUint32(0) !== PART_MAGIC)
15
- return null;
16
- const length = view.getUint32(4);
17
- if (PART_HEAD_BYTES + length + PART_DIGEST_BYTES !== frame.length)
18
- return null;
19
- const payload = frame.subarray(PART_HEAD_BYTES, PART_HEAD_BYTES + length);
20
- const digest = hex(new Uint8Array(await crypto.subtle.digest('SHA-256', payload)));
21
- return hex(frame.subarray(PART_HEAD_BYTES + length)) === digest ? payload : null;
22
- }
23
- export function roomFrames(room, arrived, signal) {
24
- const reader = room.getReader();
25
- signal?.addEventListener('abort', () => void reader.cancel().catch(() => { }), { once: true });
26
- const chunks = [];
27
- let held = 0;
28
- let received = 0;
29
- let ended = false;
30
- async function filled(bytes) {
31
- while (held < bytes && !ended) {
32
- const read = await reader.read();
33
- if (read.done) {
34
- ended = true;
35
- break;
36
- }
37
- chunks.push(read.value);
38
- held += read.value.byteLength;
39
- received += read.value.byteLength;
40
- arrived?.(received);
41
- }
42
- return held >= bytes;
43
- }
44
- function taken(bytes) {
45
- const out = new Uint8Array(bytes);
46
- let at = 0;
47
- while (at < bytes) {
48
- const chunk = chunks[0];
49
- const used = Math.min(chunk.byteLength, bytes - at);
50
- out.set(chunk.subarray(0, used), at);
51
- at += used;
52
- if (used === chunk.byteLength)
53
- chunks.shift();
54
- else
55
- chunks[0] = chunk.subarray(used);
56
- }
57
- held -= bytes;
58
- return out;
59
- }
60
- return async () => {
61
- try {
62
- if (!(await filled(PART_HEAD_BYTES)))
63
- return held === 0 ? { kind: 'ended' } : { kind: 'broken' };
64
- const head = taken(PART_HEAD_BYTES);
65
- const view = new DataView(head.buffer);
66
- if (view.getUint32(0) !== PART_MAGIC)
67
- return { kind: 'broken' };
68
- const length = view.getUint32(4);
69
- const rest = length + PART_DIGEST_BYTES;
70
- if (!(await filled(rest)))
71
- return { kind: 'broken' };
72
- const frame = new Uint8Array(PART_HEAD_BYTES + rest);
73
- frame.set(head, 0);
74
- frame.set(taken(rest), PART_HEAD_BYTES);
75
- const payload = await checkedPayload(frame);
76
- return payload === null
77
- ? { kind: 'broken' }
78
- : { kind: 'frame', payload, bytes: frame.byteLength };
79
- }
80
- catch {
81
- return { kind: 'broken' };
82
- }
83
- };
84
- }
85
- export function gunzipped(payload) {
86
- return new Blob([payload])
87
- .stream()
88
- .pipeThrough(new DecompressionStream('gzip'))
89
- .pipeThrough(new TextDecoderStream());
90
- }
@@ -1,20 +0,0 @@
1
- import type { BootstrapResult, RoomModels } from '@agentshouse/mdruntime';
2
- import type { TrackedAuthority } from './discovery.js';
3
- import { type HouseScope } from './read.js';
4
- import type { SpaceSchemas } from './space-schema.js';
5
- import type { HouseMode } from './transport.js';
6
- export type StreamedPart = {
7
- readonly scope: HouseScope;
8
- readonly first: boolean;
9
- readonly ended: boolean;
10
- readonly models: RoomModels | undefined;
11
- readonly pageToken: string | undefined;
12
- readonly bytes: number;
13
- };
14
- export declare function roomStreams(mode: HouseMode, spaces: SpaceSchemas): {
15
- head: (entry: TrackedAuthority, room: ReadableStream<Uint8Array>, arriving: ((bytes: number) => void) | undefined, signal: AbortSignal | undefined) => Promise<BootstrapResult>;
16
- part: (entry: TrackedAuthority, token: string) => Promise<StreamedPart | Exclude<BootstrapResult, {
17
- kind: 'bootstrap';
18
- }>>;
19
- };
20
- //# sourceMappingURL=room-stream.d.ts.map