@agentshouse/mdruntime 0.1.0-cd0f0e6405606 → 0.1.0-cd26b960b7262

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