@agentshouse/mdruntime 0.1.0-c8e110144a30a → 0.1.0-c8f07dbee1c62

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 (358) hide show
  1. package/README.md +19 -16
  2. package/dist/acceptance.d.ts +6 -0
  3. package/dist/acceptance.d.ts.map +1 -0
  4. package/dist/acceptance.js +389 -0
  5. package/dist/actions.d.ts +20 -0
  6. package/dist/actions.d.ts.map +1 -0
  7. package/dist/actions.js +250 -0
  8. package/dist/adapter.d.ts +154 -57
  9. package/dist/adapter.d.ts.map +1 -1
  10. package/dist/attached-model.d.ts +7 -10
  11. package/dist/attached-model.d.ts.map +1 -1
  12. package/dist/attached-model.js +40 -41
  13. package/dist/attempt.d.ts.map +1 -1
  14. package/dist/attempt.js +14 -1
  15. package/dist/binary.d.ts +0 -5
  16. package/dist/binary.d.ts.map +1 -1
  17. package/dist/binary.js +1 -1
  18. package/dist/bootstrap.d.ts +31 -11
  19. package/dist/bootstrap.d.ts.map +1 -1
  20. package/dist/bootstrap.js +323 -89
  21. package/dist/cell.d.ts +6 -0
  22. package/dist/cell.d.ts.map +1 -0
  23. package/dist/cell.js +9 -0
  24. package/dist/chain.d.ts +12 -0
  25. package/dist/chain.d.ts.map +1 -0
  26. package/dist/chain.js +64 -0
  27. package/dist/change-set.d.ts +9 -14
  28. package/dist/change-set.d.ts.map +1 -1
  29. package/dist/change-set.js +11 -63
  30. package/dist/change.d.ts +32 -1
  31. package/dist/change.d.ts.map +1 -1
  32. package/dist/change.js +10 -1
  33. package/dist/chat-types.d.ts +5 -0
  34. package/dist/chat-types.d.ts.map +1 -0
  35. package/dist/chat-types.js +13 -0
  36. package/dist/client.d.ts +43 -16
  37. package/dist/client.d.ts.map +1 -1
  38. package/dist/client.js +101 -12
  39. package/dist/collection.d.ts +11 -7
  40. package/dist/collection.d.ts.map +1 -1
  41. package/dist/collection.js +38 -79
  42. package/dist/compile.d.ts +16 -0
  43. package/dist/compile.d.ts.map +1 -0
  44. package/dist/compile.js +717 -0
  45. package/dist/connection.d.ts +8 -116
  46. package/dist/connection.d.ts.map +1 -1
  47. package/dist/connection.js +101 -2410
  48. package/dist/context.d.ts +2 -0
  49. package/dist/context.d.ts.map +1 -0
  50. package/dist/{chat/context.js → context.js} +1 -4
  51. package/dist/conversation-row.d.ts +33 -0
  52. package/dist/conversation-row.d.ts.map +1 -0
  53. package/dist/conversation-row.js +53 -0
  54. package/dist/conversation.d.ts +52 -20
  55. package/dist/conversation.d.ts.map +1 -1
  56. package/dist/conversation.js +900 -303
  57. package/dist/digest.d.ts +7 -0
  58. package/dist/digest.d.ts.map +1 -0
  59. package/dist/digest.js +113 -0
  60. package/dist/discovery.d.ts +10 -0
  61. package/dist/discovery.d.ts.map +1 -0
  62. package/dist/discovery.js +175 -0
  63. package/dist/durability.d.ts +19 -1
  64. package/dist/durability.d.ts.map +1 -1
  65. package/dist/durability.js +5 -0
  66. package/dist/entry.d.ts +20 -0
  67. package/dist/entry.d.ts.map +1 -0
  68. package/dist/entry.js +161 -0
  69. package/dist/figures.d.ts +48 -0
  70. package/dist/figures.d.ts.map +1 -0
  71. package/dist/figures.js +197 -0
  72. package/dist/file.d.ts +2 -19
  73. package/dist/file.d.ts.map +1 -1
  74. package/dist/file.js +7 -122
  75. package/dist/holdings.d.ts +29 -0
  76. package/dist/holdings.d.ts.map +1 -0
  77. package/dist/holdings.js +95 -0
  78. package/dist/host.d.ts +11 -2
  79. package/dist/host.d.ts.map +1 -1
  80. package/dist/host.js +128 -18
  81. package/dist/index.d.ts +32 -11
  82. package/dist/index.d.ts.map +1 -1
  83. package/dist/index.js +10 -0
  84. package/dist/install.d.ts +56 -0
  85. package/dist/install.d.ts.map +1 -0
  86. package/dist/install.js +560 -0
  87. package/dist/job.d.ts +33 -0
  88. package/dist/job.d.ts.map +1 -0
  89. package/dist/job.js +54 -0
  90. package/dist/lifecycle.d.ts +7 -0
  91. package/dist/lifecycle.d.ts.map +1 -0
  92. package/dist/lifecycle.js +267 -0
  93. package/dist/listing.d.ts +53 -0
  94. package/dist/listing.d.ts.map +1 -0
  95. package/dist/listing.js +175 -0
  96. package/dist/live.d.ts +23 -0
  97. package/dist/live.d.ts.map +1 -0
  98. package/dist/live.js +165 -0
  99. package/dist/locks.d.ts +9 -0
  100. package/dist/locks.d.ts.map +1 -0
  101. package/dist/locks.js +61 -0
  102. package/dist/log.d.ts +1 -0
  103. package/dist/log.d.ts.map +1 -1
  104. package/dist/lost.d.ts +5 -0
  105. package/dist/lost.d.ts.map +1 -0
  106. package/dist/lost.js +61 -0
  107. package/dist/media.d.ts +8 -0
  108. package/dist/media.d.ts.map +1 -0
  109. package/dist/media.js +218 -0
  110. package/dist/memory.d.ts +19 -5
  111. package/dist/memory.d.ts.map +1 -1
  112. package/dist/memory.js +253 -94
  113. package/dist/messages.d.ts +52 -0
  114. package/dist/messages.d.ts.map +1 -0
  115. package/dist/messages.js +168 -0
  116. package/dist/model.d.ts +11 -11
  117. package/dist/model.d.ts.map +1 -1
  118. package/dist/model.js +7 -10
  119. package/dist/models.d.ts +14 -0
  120. package/dist/models.d.ts.map +1 -0
  121. package/dist/models.js +193 -0
  122. package/dist/name.d.ts +4 -0
  123. package/dist/name.d.ts.map +1 -0
  124. package/dist/name.js +122 -0
  125. package/dist/observation.d.ts +22 -4
  126. package/dist/observation.d.ts.map +1 -1
  127. package/dist/observation.js +120 -14
  128. package/dist/opened.d.ts +22 -0
  129. package/dist/opened.d.ts.map +1 -0
  130. package/dist/opened.js +107 -0
  131. package/dist/opening.d.ts +4 -0
  132. package/dist/opening.d.ts.map +1 -0
  133. package/dist/opening.js +56 -0
  134. package/dist/outcome.d.ts +53 -8
  135. package/dist/outcome.d.ts.map +1 -1
  136. package/dist/outcome.js +43 -0
  137. package/dist/overlay.d.ts +4 -4
  138. package/dist/overlay.d.ts.map +1 -1
  139. package/dist/overlay.js +111 -182
  140. package/dist/{chat/parts.d.ts → parts.d.ts} +11 -9
  141. package/dist/parts.d.ts.map +1 -0
  142. package/dist/{chat/parts.js → parts.js} +45 -46
  143. package/dist/paths.d.ts +1 -0
  144. package/dist/paths.d.ts.map +1 -1
  145. package/dist/paths.js +4 -0
  146. package/dist/preparation.d.ts +20 -0
  147. package/dist/preparation.d.ts.map +1 -0
  148. package/dist/preparation.js +226 -0
  149. package/dist/queries.d.ts +16 -0
  150. package/dist/queries.d.ts.map +1 -0
  151. package/dist/queries.js +272 -0
  152. package/dist/query.d.ts +50 -183
  153. package/dist/query.d.ts.map +1 -1
  154. package/dist/query.js +3 -464
  155. package/dist/{chat/questions.d.ts → questions.d.ts} +5 -2
  156. package/dist/questions.d.ts.map +1 -0
  157. package/dist/{chat/questions.js → questions.js} +12 -1
  158. package/dist/reach.d.ts +21 -7
  159. package/dist/reach.d.ts.map +1 -1
  160. package/dist/reach.js +289 -89
  161. package/dist/react.d.ts +16 -6
  162. package/dist/react.d.ts.map +1 -1
  163. package/dist/react.js +7 -17
  164. package/dist/{chat/read.d.ts → read.d.ts} +2 -0
  165. package/dist/read.d.ts.map +1 -0
  166. package/dist/{chat/read.js → read.js} +4 -0
  167. package/dist/readiness.d.ts +50 -0
  168. package/dist/readiness.d.ts.map +1 -0
  169. package/dist/readiness.js +27 -0
  170. package/dist/reads.d.ts +36 -0
  171. package/dist/reads.d.ts.map +1 -0
  172. package/dist/reads.js +150 -0
  173. package/dist/recovery.d.ts +26 -0
  174. package/dist/recovery.d.ts.map +1 -0
  175. package/dist/recovery.js +232 -0
  176. package/dist/refresh.d.ts +17 -14
  177. package/dist/refresh.d.ts.map +1 -1
  178. package/dist/refresh.js +143 -51
  179. package/dist/refusal.d.ts +5 -0
  180. package/dist/refusal.d.ts.map +1 -0
  181. package/dist/refusal.js +56 -0
  182. package/dist/replica.d.ts +55 -33
  183. package/dist/replica.d.ts.map +1 -1
  184. package/dist/replica.js +333 -154
  185. package/dist/room-draft.d.ts +37 -6
  186. package/dist/room-draft.d.ts.map +1 -1
  187. package/dist/room-draft.js +161 -74
  188. package/dist/room-drafts.d.ts +24 -0
  189. package/dist/room-drafts.d.ts.map +1 -0
  190. package/dist/room-drafts.js +216 -0
  191. package/dist/rows.d.ts +30 -37
  192. package/dist/rows.d.ts.map +1 -1
  193. package/dist/rows.js +59 -126
  194. package/dist/runtime.d.ts +42 -0
  195. package/dist/runtime.d.ts.map +1 -0
  196. package/dist/runtime.js +1 -0
  197. package/dist/save.d.ts +52 -9
  198. package/dist/save.d.ts.map +1 -1
  199. package/dist/save.js +544 -173
  200. package/dist/saves.d.ts +70 -0
  201. package/dist/saves.d.ts.map +1 -0
  202. package/dist/saves.js +1004 -0
  203. package/dist/search.d.ts +15 -55
  204. package/dist/search.d.ts.map +1 -1
  205. package/dist/search.js +10 -121
  206. package/dist/seed.d.ts +25 -0
  207. package/dist/seed.d.ts.map +1 -0
  208. package/dist/seed.js +146 -0
  209. package/dist/shared.d.ts +15 -0
  210. package/dist/shared.d.ts.map +1 -0
  211. package/dist/shared.js +425 -0
  212. package/dist/shown.d.ts +31 -0
  213. package/dist/shown.d.ts.map +1 -0
  214. package/dist/shown.js +294 -0
  215. package/dist/socket/admission.d.ts +7 -0
  216. package/dist/socket/admission.d.ts.map +1 -0
  217. package/dist/socket/admission.js +39 -0
  218. package/dist/socket/answers.d.ts +6 -0
  219. package/dist/socket/answers.d.ts.map +1 -0
  220. package/dist/socket/answers.js +20 -0
  221. package/dist/socket/lanes.d.ts +20 -0
  222. package/dist/socket/lanes.d.ts.map +1 -0
  223. package/dist/socket/lanes.js +77 -0
  224. package/dist/socket/reads.d.ts +10 -0
  225. package/dist/socket/reads.d.ts.map +1 -0
  226. package/dist/socket/reads.js +31 -0
  227. package/dist/socket/rooms.d.ts +43 -0
  228. package/dist/socket/rooms.d.ts.map +1 -0
  229. package/dist/socket/rooms.js +90 -0
  230. package/dist/socket/session.d.ts +39 -0
  231. package/dist/socket/session.d.ts.map +1 -0
  232. package/dist/socket/session.js +23 -0
  233. package/dist/socket.d.ts +70 -0
  234. package/dist/socket.d.ts.map +1 -0
  235. package/dist/socket.js +175 -0
  236. package/dist/source.d.ts +61 -0
  237. package/dist/source.d.ts.map +1 -0
  238. package/dist/source.js +81 -0
  239. package/dist/status.d.ts +5 -2
  240. package/dist/status.d.ts.map +1 -1
  241. package/dist/status.js +3 -7
  242. package/dist/store/fences.d.ts +16 -0
  243. package/dist/store/fences.d.ts.map +1 -0
  244. package/dist/store/fences.js +26 -0
  245. package/dist/store/installs.d.ts +30 -0
  246. package/dist/store/installs.d.ts.map +1 -0
  247. package/dist/store/installs.js +34 -0
  248. package/dist/store/readiness.d.ts +10 -0
  249. package/dist/store/readiness.d.ts.map +1 -0
  250. package/dist/store/readiness.js +52 -0
  251. package/dist/store/records.d.ts +212 -0
  252. package/dist/store/records.d.ts.map +1 -0
  253. package/dist/store/records.js +408 -0
  254. package/dist/store/room-held.d.ts +8 -0
  255. package/dist/store/room-held.d.ts.map +1 -0
  256. package/dist/store/room-held.js +17 -0
  257. package/dist/store/space.d.ts +11 -0
  258. package/dist/store/space.d.ts.map +1 -0
  259. package/dist/store/space.js +43 -0
  260. package/dist/store/watchers.d.ts +17 -0
  261. package/dist/store/watchers.d.ts.map +1 -0
  262. package/dist/store/watchers.js +57 -0
  263. package/dist/store/writes.d.ts +24 -0
  264. package/dist/store/writes.d.ts.map +1 -0
  265. package/dist/store/writes.js +125 -0
  266. package/dist/store.d.ts +106 -119
  267. package/dist/store.d.ts.map +1 -1
  268. package/dist/store.js +136 -525
  269. package/dist/stored.d.ts +156 -0
  270. package/dist/stored.d.ts.map +1 -0
  271. package/dist/stored.js +637 -0
  272. package/dist/surface.d.ts +88 -0
  273. package/dist/surface.d.ts.map +1 -0
  274. package/dist/surface.js +222 -0
  275. package/dist/sync.d.ts +20 -0
  276. package/dist/sync.d.ts.map +1 -0
  277. package/dist/sync.js +531 -0
  278. package/dist/tables.d.ts +415 -0
  279. package/dist/tables.d.ts.map +1 -0
  280. package/dist/tables.js +740 -0
  281. package/dist/tallies.d.ts +18 -0
  282. package/dist/tallies.d.ts.map +1 -0
  283. package/dist/tallies.js +129 -0
  284. package/dist/transfer.d.ts +0 -5
  285. package/dist/transfer.d.ts.map +1 -1
  286. package/dist/turn.d.ts +9 -0
  287. package/dist/turn.d.ts.map +1 -0
  288. package/dist/turn.js +75 -0
  289. package/dist/validation.d.ts +29 -0
  290. package/dist/validation.d.ts.map +1 -0
  291. package/dist/validation.js +104 -0
  292. package/dist/windows.d.ts +11 -0
  293. package/dist/windows.d.ts.map +1 -0
  294. package/dist/windows.js +16 -0
  295. package/dist/wire.d.ts +181 -33
  296. package/dist/wire.d.ts.map +1 -1
  297. package/dist/wire.js +62 -31
  298. package/package.json +22 -19
  299. package/AGENTS.md +0 -299
  300. package/dist/chat/acts.d.ts +0 -34
  301. package/dist/chat/acts.d.ts.map +0 -1
  302. package/dist/chat/acts.js +0 -36
  303. package/dist/chat/context.d.ts +0 -3
  304. package/dist/chat/context.d.ts.map +0 -1
  305. package/dist/chat/input.d.ts +0 -9
  306. package/dist/chat/input.d.ts.map +0 -1
  307. package/dist/chat/input.js +0 -99
  308. package/dist/chat/kit.d.ts +0 -60
  309. package/dist/chat/kit.d.ts.map +0 -1
  310. package/dist/chat/kit.js +0 -123
  311. package/dist/chat/lasting.d.ts +0 -6
  312. package/dist/chat/lasting.d.ts.map +0 -1
  313. package/dist/chat/lasting.js +0 -19
  314. package/dist/chat/list.d.ts +0 -20
  315. package/dist/chat/list.d.ts.map +0 -1
  316. package/dist/chat/list.js +0 -59
  317. package/dist/chat/markdown.d.ts +0 -19
  318. package/dist/chat/markdown.d.ts.map +0 -1
  319. package/dist/chat/markdown.js +0 -187
  320. package/dist/chat/message.d.ts +0 -6
  321. package/dist/chat/message.d.ts.map +0 -1
  322. package/dist/chat/message.js +0 -192
  323. package/dist/chat/messages.d.ts +0 -21
  324. package/dist/chat/messages.d.ts.map +0 -1
  325. package/dist/chat/messages.js +0 -151
  326. package/dist/chat/name.d.ts +0 -6
  327. package/dist/chat/name.d.ts.map +0 -1
  328. package/dist/chat/name.js +0 -37
  329. package/dist/chat/opened.d.ts +0 -11
  330. package/dist/chat/opened.d.ts.map +0 -1
  331. package/dist/chat/opened.js +0 -17
  332. package/dist/chat/overlay.d.ts +0 -31
  333. package/dist/chat/overlay.d.ts.map +0 -1
  334. package/dist/chat/overlay.js +0 -97
  335. package/dist/chat/parts.d.ts.map +0 -1
  336. package/dist/chat/process.d.ts +0 -20
  337. package/dist/chat/process.d.ts.map +0 -1
  338. package/dist/chat/process.js +0 -32
  339. package/dist/chat/provider.d.ts +0 -63
  340. package/dist/chat/provider.d.ts.map +0 -1
  341. package/dist/chat/provider.js +0 -645
  342. package/dist/chat/question.d.ts +0 -9
  343. package/dist/chat/question.d.ts.map +0 -1
  344. package/dist/chat/question.js +0 -80
  345. package/dist/chat/questions.d.ts.map +0 -1
  346. package/dist/chat/read.d.ts.map +0 -1
  347. package/dist/chat/ready.d.ts +0 -33
  348. package/dist/chat/ready.d.ts.map +0 -1
  349. package/dist/chat/ready.js +0 -91
  350. package/dist/chat/style.d.ts +0 -4
  351. package/dist/chat/style.d.ts.map +0 -1
  352. package/dist/chat/style.js +0 -302
  353. package/dist/chat.d.ts +0 -14
  354. package/dist/chat.d.ts.map +0 -1
  355. package/dist/chat.js +0 -8
  356. package/dist/read-side.d.ts +0 -18
  357. package/dist/read-side.d.ts.map +0 -1
  358. package/dist/read-side.js +0 -440
@@ -0,0 +1,250 @@
1
+ import { roomTarget, target } from '@agentshouse/mdmodel';
2
+ import { listingNow } from './listing.js';
3
+ import { locked, lockedRooms } from './locks.js';
4
+ import { scoped } from './models.js';
5
+ import { ABSENT_TARGET, calledResult, failure, historyAnswer, LOCKED_UNREADABLE, lockedRoom, undeclared, UNCERTAIN, UNREADABLE, } from './outcome.js';
6
+ import { refuse } from './refusal.js';
7
+ function operationOf(input) {
8
+ const operation = input?.operation_id;
9
+ return typeof operation === 'string' ? operation : null;
10
+ }
11
+ export async function readHistory(runtime, locator, path, query = {}) {
12
+ const { store, socket, journal } = runtime;
13
+ const { session } = socket;
14
+ if (socket.closed() || session.now().refusal !== null)
15
+ return UNCERTAIN;
16
+ await socket.firstDiscovery;
17
+ if (!session.now().roomsNamed)
18
+ return UNCERTAIN;
19
+ try {
20
+ await socket.authorize();
21
+ }
22
+ catch {
23
+ return UNCERTAIN;
24
+ }
25
+ const { closed, authorization, refusal } = session.now();
26
+ if (closed || authorization === undefined || refusal !== null)
27
+ return UNCERTAIN;
28
+ const since = store.fences.count();
29
+ const transfer = ['transfer', 'history', locator, path];
30
+ if (query.revision !== undefined)
31
+ transfer.push(query.revision);
32
+ if (query.pageToken !== undefined)
33
+ transfer.push(query.pageToken);
34
+ journal.record(transfer.join(' '));
35
+ try {
36
+ const result = await socket.history(authorization, {
37
+ locator,
38
+ path,
39
+ ...(query.revision === undefined ? {} : { revision: query.revision }),
40
+ ...(query.pageToken === undefined ? {} : { pageToken: query.pageToken }),
41
+ });
42
+ journal.record(`outcome history ${result.kind}`);
43
+ if (store.fences.since(locator, since))
44
+ return failure({ kind: 'room-not-readable', locator });
45
+ if (result.kind === 'scoped-refusal') {
46
+ const room = await store.record(result.locator);
47
+ if (room !== undefined)
48
+ await scoped(runtime, result, room, await store.open());
49
+ }
50
+ if (result.kind === 'revoked-authorization')
51
+ await refuse(runtime, 'revoked-authorization');
52
+ return historyAnswer(result);
53
+ }
54
+ catch {
55
+ journal.record('outcome history transport-uncertainty');
56
+ return UNCERTAIN;
57
+ }
58
+ }
59
+ export async function located(runtime, room, path, destination) {
60
+ const crossing = roomTarget(destination);
61
+ const listing = await listingNow(runtime);
62
+ if (crossing === null) {
63
+ const named = target(path, destination);
64
+ return named === null || !listing.has(room) ? null : { room, path: named };
65
+ }
66
+ const held = [...listing.values()].find((listed) => listed.handle === crossing.handle);
67
+ return held === undefined ? null : { room: held.locator, path: crossing.path };
68
+ }
69
+ export async function resolveReference(runtime, room, path, destination) {
70
+ const { store } = runtime;
71
+ if (roomTarget(destination) === null && target(path, destination) === null) {
72
+ return ABSENT_TARGET;
73
+ }
74
+ const at = await located(runtime, room, path, destination);
75
+ if (at === null)
76
+ return UNREADABLE;
77
+ if (await locked(runtime, at.room))
78
+ return LOCKED_UNREADABLE;
79
+ const held = await store.record(at.room);
80
+ if (held !== undefined &&
81
+ (await (await store.open()).entries(held.key, 'visible', [at.path])).length > 0) {
82
+ return { kind: 'document', ...at };
83
+ }
84
+ const history = await readHistory(runtime, at.room, at.path);
85
+ if (history.kind === 'no-history' || history.kind === 'revision')
86
+ return ABSENT_TARGET;
87
+ if (history.kind !== 'history')
88
+ return history;
89
+ const [last] = history.revisions;
90
+ if (last === undefined)
91
+ return ABSENT_TARGET;
92
+ return history.deleted === true
93
+ ? { kind: 'deleted', ...at, revision: last }
94
+ : { kind: 'document', ...at };
95
+ }
96
+ async function declaredAction({ store }, name) {
97
+ for (const capability of (await (await store.open()).facts()).capabilities) {
98
+ for (const action of capability.actions ?? []) {
99
+ if (action.name === name)
100
+ return action;
101
+ }
102
+ }
103
+ return undefined;
104
+ }
105
+ async function calledRooms(runtime, name, input) {
106
+ const member = (await declaredAction(runtime, name))?.room;
107
+ if (member === undefined || input === null || typeof input !== 'object')
108
+ return [];
109
+ const named = input[member];
110
+ return (Array.isArray(named) ? named : [named]).filter((room) => typeof room === 'string');
111
+ }
112
+ export async function invokeAction(runtime, name, input, dispatching) {
113
+ const { store, socket, journal } = runtime;
114
+ const { session } = socket;
115
+ await socket.ready;
116
+ if (socket.closed() || session.now().refusal !== null)
117
+ return UNCERTAIN;
118
+ if ((await declaredAction(runtime, name)) === undefined)
119
+ return undeclared(name);
120
+ try {
121
+ await socket.authorize();
122
+ }
123
+ catch {
124
+ return UNCERTAIN;
125
+ }
126
+ const { closed, authorization, refusal } = session.now();
127
+ if (closed || authorization === undefined || refusal !== null)
128
+ return UNCERTAIN;
129
+ await dispatching?.();
130
+ journal.record(`transfer action ${name}`);
131
+ try {
132
+ const result = await socket.action(authorization, { name, input });
133
+ if (result.kind === 'scoped-refusal') {
134
+ const room = await store.record(result.locator);
135
+ if (room !== undefined)
136
+ await scoped(runtime, result, room, await store.open());
137
+ }
138
+ if (result.kind === 'revoked-authorization')
139
+ await refuse(runtime, 'revoked-authorization');
140
+ journal.record(`outcome action ${result.kind}`);
141
+ if (result.kind === 'rejected')
142
+ journal.record(`refusal rejected ${result.code}`);
143
+ return calledResult(result);
144
+ }
145
+ catch {
146
+ journal.record('outcome action transport-uncertainty');
147
+ return UNCERTAIN;
148
+ }
149
+ }
150
+ export async function readConversationHistory(runtime, request) {
151
+ const { socket, journal } = runtime;
152
+ await socket.ready;
153
+ const stream = socket.conversations();
154
+ if (socket.closed() || socket.session.now().refusal !== null || stream?.history === undefined) {
155
+ return UNCERTAIN;
156
+ }
157
+ journal.record('transfer conversation history');
158
+ try {
159
+ const result = await stream.history(request);
160
+ if (result.kind === 'revoked-authorization')
161
+ await refuse(runtime, 'revoked-authorization');
162
+ journal.record(`outcome conversation history ${result.kind}`);
163
+ return calledResult(result);
164
+ }
165
+ catch {
166
+ journal.record('outcome conversation history transport-uncertainty');
167
+ return UNCERTAIN;
168
+ }
169
+ }
170
+ function unsettled(result) {
171
+ if (result.kind === 'action')
172
+ return false;
173
+ return result.retryable && (result.kind !== 'rejected' || result.reset === undefined);
174
+ }
175
+ async function recoveredAction(runtime, name, input) {
176
+ const { store, socket, recovery } = runtime;
177
+ const { lanes } = socket;
178
+ const operation = operationOf(input);
179
+ if (operation === null)
180
+ return invokeAction(runtime, name, input);
181
+ const kept = async () => (await store.open()).keepCall({ operation, name, input });
182
+ lanes.call(operation);
183
+ try {
184
+ let result = await invokeAction(runtime, name, input, kept);
185
+ if (unsettled(result)) {
186
+ await recovery.attempt(`action ${operation}`, async () => {
187
+ if (socket.closed() || socket.session.now().refusal !== null)
188
+ return 'done';
189
+ if (!socket.isOpen())
190
+ return 'again';
191
+ result = await invokeAction(runtime, name, input, kept);
192
+ return unsettled(result) ? 'again' : 'done';
193
+ }, { again: true });
194
+ }
195
+ if (!unsettled(result))
196
+ await (await store.open()).dropCall(operation);
197
+ return result;
198
+ }
199
+ finally {
200
+ lanes.called(operation);
201
+ }
202
+ }
203
+ export async function called(runtime, name, input) {
204
+ await runtime.socket.ready;
205
+ const lockedNow = await lockedRooms(runtime);
206
+ const room = (await calledRooms(runtime, name, input)).find((one) => lockedNow.includes(one));
207
+ return room === undefined ? recoveredAction(runtime, name, input) : lockedRoom(room);
208
+ }
209
+ export async function resendCalls(runtime, signal) {
210
+ const { store, socket } = runtime;
211
+ const { lanes } = socket;
212
+ if (!socket.isOpen() || socket.closed() || socket.stopping())
213
+ return 'done';
214
+ const local = await store.open();
215
+ for (const held of await local.calls()) {
216
+ if (lanes.calling(held.operation))
217
+ continue;
218
+ if (socket.closed() || signal.aborted)
219
+ return 'done';
220
+ lanes.call(held.operation);
221
+ try {
222
+ if (unsettled(await invokeAction(runtime, held.name, held.input)))
223
+ return 'again';
224
+ await local.dropCall(held.operation);
225
+ }
226
+ finally {
227
+ lanes.called(held.operation);
228
+ }
229
+ }
230
+ return 'done';
231
+ }
232
+ async function resendPass({ socket, conversations }, signal) {
233
+ if (!socket.continuing() || !socket.isOpen() || socket.stopping())
234
+ return 'done';
235
+ const reading = { complete: true, reachable: true };
236
+ try {
237
+ await conversations.resend(reading);
238
+ }
239
+ catch {
240
+ reading.reachable = false;
241
+ }
242
+ if (signal.aborted)
243
+ return 'done';
244
+ return reading.reachable && reading.complete ? 'done' : 'again';
245
+ }
246
+ export function resendLater(runtime) {
247
+ if (!runtime.socket.isOpen())
248
+ return;
249
+ void runtime.recovery.attempt('resend', (signal) => resendPass(runtime, signal), { again: true });
250
+ }
package/dist/adapter.d.ts CHANGED
@@ -1,4 +1,6 @@
1
+ import type { SavedFacts, TypedPath } from '@agentshouse/mdmodel';
1
2
  import type { ModelResult } from './model.js';
3
+ export type { SavedFacts, TypedPath };
2
4
  import type { Open } from './open.js';
3
5
  import type { ChangeBatch } from './change.js';
4
6
  export type Authorization = object;
@@ -10,14 +12,13 @@ export type TypedSelection = {
10
12
  roots: readonly string[];
11
13
  };
12
14
  export type OperationScopes = {
13
- read: readonly string[];
14
- sync: readonly string[];
15
15
  write: readonly string[];
16
- delete: readonly string[];
16
+ erase: readonly string[];
17
17
  };
18
18
  export type ReplicaAdmission = {
19
19
  selection: string;
20
20
  admission: Open<'admitted' | 'unavailable'>;
21
+ offline: Open<'locked' | 'open'>;
21
22
  };
22
23
  export type DiscoveredRoom = {
23
24
  name: string;
@@ -33,24 +34,21 @@ export type Capability = {
33
34
  name: string;
34
35
  limits?: readonly ProviderLimit[];
35
36
  actions?: readonly ActionDeclaration[];
36
- conversationAgents?: ConversationAgents;
37
- };
38
- export type ConversationAgents = {
39
- locator: string;
40
- type: string;
41
- identity: string;
42
- name: string;
43
- retired?: string;
44
37
  };
45
38
  export type ListedConversation = {
46
39
  conversation: string;
47
40
  agent: string;
41
+ agentName: string;
42
+ agentRetired: boolean;
48
43
  name: string;
49
44
  created: string;
50
45
  finished: string | null;
51
46
  outcome: string | null;
47
+ waiting: boolean;
48
+ newest: string | null;
49
+ processEnded: string | null;
52
50
  };
53
- export type ConversationAction = 'conversation.create' | 'conversation.send' | 'conversation.answer' | 'conversation.interrupt' | 'conversation.kill' | 'conversation.cancel' | 'conversation.delete' | 'conversation.history';
51
+ export type ConversationAction = 'conversations/create' | 'conversations/send' | 'conversations/interaction/answer' | 'conversations/interrupt' | 'conversations/kill' | 'conversations/delete';
54
52
  export type ConversationMessage = {
55
53
  identity: string;
56
54
  turn: string;
@@ -141,6 +139,10 @@ export type SessionOption = (SessionOptionNaming & {
141
139
  type: 'boolean';
142
140
  currentValue: boolean;
143
141
  });
142
+ export type RunningSubagent = {
143
+ description: string;
144
+ activity: string | null;
145
+ };
144
146
  export type ConversationEvent = {
145
147
  kind: 'turn';
146
148
  conversation: string;
@@ -162,6 +164,22 @@ export type ConversationEvent = {
162
164
  kind: 'options';
163
165
  conversation: string;
164
166
  options: readonly SessionOption[];
167
+ } | {
168
+ kind: 'starting';
169
+ conversation: string;
170
+ step: string | null;
171
+ } | {
172
+ kind: 'subagents';
173
+ conversation: string;
174
+ subagents: readonly RunningSubagent[];
175
+ } | {
176
+ kind: 'link';
177
+ conversation: string;
178
+ connected: boolean;
179
+ } | {
180
+ kind: 'deliveries';
181
+ conversation: string;
182
+ unknown: readonly string[];
165
183
  } | {
166
184
  kind: 'accepted-message';
167
185
  conversation: string;
@@ -172,6 +190,9 @@ export type ConversationEvent = {
172
190
  } | {
173
191
  kind: 'list';
174
192
  entries: readonly ListedConversation[];
193
+ whole: boolean;
194
+ more: boolean;
195
+ cursor: string | null;
175
196
  } | {
176
197
  kind: 'listed';
177
198
  entry: ListedConversation;
@@ -179,14 +200,23 @@ export type ConversationEvent = {
179
200
  kind: 'unlisted';
180
201
  conversation: string;
181
202
  };
203
+ export type ListedAgent = {
204
+ agent: string;
205
+ name: string;
206
+ retired: boolean;
207
+ };
182
208
  export type ConversationStream = {
183
209
  replicate(conversations: readonly string[]): void;
210
+ hold(cursor: string | null): void;
184
211
  observe(notify: (event: ConversationEvent) => void): () => void;
212
+ agents?(): Promise<readonly ListedAgent[] | null>;
213
+ history?(request: ConversationHistoryRequest): Promise<ActionResult>;
185
214
  };
186
215
  export type ActionDeclaration = {
187
216
  name: string;
188
217
  inputShape: unknown;
189
218
  resultKind: unknown;
219
+ room?: string;
190
220
  };
191
221
  export type ProviderLimit = {
192
222
  name: string;
@@ -200,7 +230,6 @@ export type HistoryRetention = {
200
230
  };
201
231
  export type Retention = {
202
232
  history: HistoryRetention;
203
- outcome: number;
204
233
  refreshHorizon: number;
205
234
  };
206
235
  export type Discovery = {
@@ -229,7 +258,7 @@ export type ProviderRefusal = {
229
258
  export type ScopedRefusal = ProviderRefusal & {
230
259
  kind: 'scoped-refusal';
231
260
  locator: string;
232
- scope: Open<'content' | 'sync' | 'model' | 'operation' | 'undisclosed'>;
261
+ scope: Open<'content' | 'model' | 'operation' | 'undisclosed'>;
233
262
  };
234
263
  export type AdapterFailure = TransportUncertainty | RoomNotReadable | RevokedAuthorization | ScopedRefusal;
235
264
  export type ContractUnavailable = ProviderRefusal & {
@@ -238,23 +267,20 @@ export type ContractUnavailable = ProviderRefusal & {
238
267
  export type DiscoverResult = Discovery | TransportUncertainty | RevokedAuthorization | ContractUnavailable;
239
268
  export type PageToken = string;
240
269
  export type ChangeAuthor = {
241
- kind: 'user';
270
+ kind: Open<'user' | 'site' | 'inbox' | 'app'>;
242
271
  id: string;
243
272
  name: string;
244
- } | {
245
- kind: 'site';
273
+ };
274
+ export type Member = {
275
+ kind: Open<'user'>;
246
276
  id: string;
247
277
  name: string;
248
278
  };
249
- export type Member = Extract<ChangeAuthor, {
250
- kind: 'user';
251
- }>;
252
279
  export type HeadChange = {
253
280
  author: ChangeAuthor | null;
254
281
  time: string;
255
282
  };
256
283
  export type BinaryFile = {
257
- fileRef: string;
258
284
  byteLength: number;
259
285
  mediaType: string;
260
286
  sha256: string;
@@ -263,22 +289,41 @@ export type BootstrapRequest = {
263
289
  locator: string;
264
290
  selection: string;
265
291
  pageToken?: PageToken;
292
+ arriving?: (bytes: number) => void;
293
+ signal?: AbortSignal;
294
+ };
295
+ export type BootstrapPart = {
296
+ readonly id: string;
297
+ readonly bytes: number;
298
+ };
299
+ export type BootstrapInventory = {
300
+ readonly bytes: number;
266
301
  };
267
302
  export type RoomModels = {
268
303
  collection?: ModelResult;
269
- selection?: ModelResult;
270
304
  };
271
305
  export type BootstrapPage = {
272
306
  kind: 'bootstrap';
273
307
  roomVersion: string;
274
308
  models?: RoomModels;
275
309
  documents: Readonly<Record<string, string>>;
310
+ facts: Readonly<Record<string, SavedFacts>>;
276
311
  revisions: Readonly<Record<string, string>>;
312
+ fileIds?: Readonly<Record<string, string>>;
313
+ created?: Readonly<Record<string, string>>;
277
314
  changes: Readonly<Record<string, HeadChange>>;
278
315
  binaryFiles: Readonly<Record<string, BinaryFile>>;
316
+ folders?: readonly string[];
279
317
  pageToken?: PageToken;
318
+ parts?: readonly BootstrapPart[];
319
+ bytes?: number;
280
320
  };
281
- export type BootstrapResult = BootstrapPage | AdapterFailure;
321
+ export type NotReady = {
322
+ kind: 'not-ready';
323
+ };
324
+ export type BootstrapResult = BootstrapPage | {
325
+ kind: 'beyond-horizon';
326
+ } | NotReady | AdapterFailure;
282
327
  export type RefreshRequest = {
283
328
  locator: string;
284
329
  selection: string;
@@ -290,10 +335,15 @@ export type RefreshPage = {
290
335
  roomVersion: string;
291
336
  models?: RoomModels;
292
337
  documents: Readonly<Record<string, string>>;
338
+ facts: Readonly<Record<string, SavedFacts>>;
293
339
  revisions: Readonly<Record<string, string>>;
340
+ fileIds?: Readonly<Record<string, string>>;
341
+ created?: Readonly<Record<string, string>>;
294
342
  changes: Readonly<Record<string, HeadChange>>;
295
343
  binaryFiles: Readonly<Record<string, BinaryFile>>;
296
344
  removals: readonly string[];
345
+ folders?: readonly string[];
346
+ folderRemovals?: readonly string[];
297
347
  pageToken?: PageToken;
298
348
  };
299
349
  export type RefreshResult = {
@@ -304,6 +354,7 @@ export type RefreshResult = {
304
354
  export type MutationRequest = {
305
355
  locator: string;
306
356
  changeBatch: ChangeBatch;
357
+ file(localId: string): Promise<Blob>;
307
358
  upload?: unknown;
308
359
  };
309
360
  export type RetryableRefusal = ProviderRefusal & {
@@ -314,17 +365,21 @@ export type ServiceMode = Open<'open' | 'write-halted'>;
314
365
  export type ServiceModeSignal = {
315
366
  observe(notify: (mode: ServiceMode) => void): () => void;
316
367
  };
317
- export type MutationResult = {
318
- kind: 'accepted';
368
+ export type AcceptedRoom = {
319
369
  roomVersion: string;
320
370
  documents: Readonly<Record<string, string>>;
321
371
  revisions: Readonly<Record<string, string>>;
372
+ fileIds?: Readonly<Record<string, string>>;
322
373
  changes: Readonly<Record<string, HeadChange>>;
323
374
  removals: readonly string[];
324
375
  binaryFiles?: Readonly<Record<string, BinaryFile>>;
376
+ };
377
+ export type MutationResult = (AcceptedRoom & {
378
+ kind: 'accepted';
325
379
  author?: string;
326
380
  time?: string;
327
- } | (ProviderRefusal & {
381
+ destination?: AcceptedRoom;
382
+ }) | (ProviderRefusal & {
328
383
  kind: 'conflicted';
329
384
  roomVersion?: string;
330
385
  affected: Readonly<Record<string, string>>;
@@ -333,14 +388,9 @@ export type MutationResult = {
333
388
  affected: Readonly<Record<string, string>>;
334
389
  }) | RetryableRefusal | {
335
390
  kind: 'write-halted';
336
- } | {
337
- kind: 'expired';
338
391
  } | AdapterFailure;
339
392
  export type HistoryAuthor = {
340
- kind: 'user';
341
- id: string;
342
- } | {
343
- kind: 'site';
393
+ kind: 'user' | 'site' | 'inbox' | 'app';
344
394
  id: string;
345
395
  name: string;
346
396
  };
@@ -372,22 +422,35 @@ export type BinaryRequest = {
372
422
  locator: string;
373
423
  path: string;
374
424
  revision: string;
375
- fileRef?: string;
376
- } | {
377
- kind: 'reference';
378
- fileRef: string;
379
- referrer: unknown;
380
- };
381
- export type ReferrerScope = {
382
- kind: 'room';
383
- locator: string;
384
- path?: string;
385
- } | {
386
- kind: 'conversations';
387
425
  };
388
426
  export type BinaryResult = {
389
427
  kind: 'binary';
428
+ body: ReadableStream<Uint8Array>;
429
+ mediaType: string;
430
+ sha256?: string;
431
+ } | (ProviderRefusal & {
432
+ kind: 'rejected';
433
+ }) | AdapterFailure;
434
+ export type BinaryLinkResult = {
435
+ kind: 'link';
436
+ url: string;
437
+ name: string;
438
+ mediaType?: string;
439
+ } | (ProviderRefusal & {
440
+ kind: 'rejected';
441
+ }) | AdapterFailure;
442
+ export type AttachRequest = {
443
+ locator: string;
444
+ name: string;
445
+ mediaType: string;
446
+ byteLength: number;
447
+ sha256: string;
390
448
  blob: Blob;
449
+ };
450
+ export type AttachResult = {
451
+ kind: 'attached';
452
+ path: string;
453
+ revision: string;
391
454
  } | (ProviderRefusal & {
392
455
  kind: 'rejected';
393
456
  }) | AdapterFailure;
@@ -403,49 +466,83 @@ export type ActionResult = {
403
466
  kind: 'action';
404
467
  result: unknown;
405
468
  at?: RoomVersionAt;
469
+ } | (ProviderRefusal & {
470
+ kind: 'rejected';
471
+ reset?: string;
472
+ }) | AdapterFailure;
473
+ export type SearchHit = {
474
+ room: string;
475
+ path: string;
476
+ line?: number;
477
+ snippet?: string;
478
+ };
479
+ export type SearchAsk = {
480
+ text: string;
481
+ rooms: readonly string[] | null;
482
+ };
483
+ export type SearchAnswer = {
484
+ kind: 'found';
485
+ documents: readonly SearchHit[];
406
486
  } | (ProviderRefusal & {
407
487
  kind: 'rejected';
408
488
  }) | AdapterFailure;
409
489
  export type HeldRoom = {
410
490
  locator: string;
491
+ roomVersion: string | null;
492
+ };
493
+ export type RoomChange = {
494
+ kind: 'room-change';
495
+ locator: string;
496
+ from: string | null;
411
497
  roomVersion: string;
412
- documents: Readonly<Record<string, string>>;
413
- revisions: Readonly<Record<string, string>>;
498
+ read(): Promise<RefreshPage>;
499
+ };
500
+ export type AuthorityChange = {
501
+ kind: 'authority-changed';
502
+ rooms: readonly DiscoveredRoom[];
503
+ left: readonly string[];
504
+ member?: Member;
414
505
  };
415
506
  export type RoomStreamEvent = {
416
507
  kind: 'opened';
508
+ } | {
509
+ kind: 'discovered';
510
+ discovery: Discovery;
417
511
  } | {
418
512
  kind: 'closed';
419
513
  revoked: boolean;
514
+ lost: boolean;
515
+ authorityChanged: boolean;
420
516
  } | {
421
- kind: 'opening';
517
+ kind: 'caught-up';
422
518
  expired: readonly string[];
423
- } | {
424
- kind: 'room-version';
425
- locator: string;
426
- roomVersion: string;
427
- };
519
+ } | AuthorityChange | RoomChange;
428
520
  export type RoomStream = {
429
521
  hold(rooms: readonly HeldRoom[]): void;
430
- reopen(): void;
431
522
  observe(notify: (event: RoomStreamEvent) => void): () => void;
432
523
  };
433
524
  export type Adapter = {
434
525
  readonly localSaves?: true;
526
+ readonly roomTypes?: string;
527
+ readonly nameableRoomTypes?: readonly string[];
528
+ readonly typedPaths?: readonly TypedPath[];
529
+ readonly unkeptReads?: readonly string[];
530
+ readonly leadingReads?: readonly string[];
435
531
  authorize(): Promise<Authorization>;
436
- discover(authorization: Authorization): Promise<DiscoverResult>;
532
+ discover?(authorization: Authorization): Promise<DiscoverResult>;
437
533
  bootstrap(authorization: Authorization, request: BootstrapRequest): Promise<BootstrapResult>;
438
- refresh(authorization: Authorization, request: RefreshRequest): Promise<RefreshResult>;
534
+ refresh?(authorization: Authorization, request: RefreshRequest): Promise<RefreshResult>;
439
535
  mutate(authorization: Authorization, request: MutationRequest, keep: (upload: unknown) => Promise<void>): Promise<MutationResult>;
440
536
  history(authorization: Authorization, request: HistoryRequest): Promise<HistoryResult>;
441
537
  binary(authorization: Authorization, request: BinaryRequest): Promise<BinaryResult>;
442
- referrerScope(referrer: unknown): ReferrerScope | null;
538
+ link(authorization: Authorization, request: BinaryRequest): Promise<BinaryLinkResult>;
539
+ attach(authorization: Authorization, request: AttachRequest): Promise<AttachResult>;
443
540
  action(authorization: Authorization, request: ActionRequest): Promise<ActionResult>;
541
+ search?(authorization: Authorization, request: SearchAsk): Promise<SearchAnswer>;
444
542
  reached(locator: string, roomVersion: string, target: string): boolean;
445
543
  follows(locator: string, roomVersion: string, next: string): boolean;
446
544
  roomStream?: RoomStream;
447
545
  conversations?: ConversationStream;
448
546
  serviceMode?: ServiceModeSignal;
449
547
  };
450
- export {};
451
548
  //# sourceMappingURL=adapter.d.ts.map