@agentshouse/mdruntime 0.1.0-c3fa75348e547 → 0.1.0-c3faae279d4d2

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 (368) 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 +150 -81
  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 -10
  35. package/dist/client.d.ts.map +1 -1
  36. package/dist/client.js +90 -10
  37. package/dist/collection.d.ts +11 -21
  38. package/dist/collection.d.ts.map +1 -1
  39. package/dist/collection.js +39 -291
  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 -132
  44. package/dist/connection.d.ts.map +1 -1
  45. package/dist/connection.js +100 -3568
  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 +53 -44
  56. package/dist/conversation.d.ts.map +1 -1
  57. package/dist/conversation.js +938 -715
  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 -28
  70. package/dist/figures.d.ts +49 -0
  71. package/dist/figures.d.ts.map +1 -0
  72. package/dist/figures.js +197 -0
  73. package/dist/file.d.ts +2 -19
  74. package/dist/file.d.ts.map +1 -1
  75. package/dist/file.js +7 -122
  76. package/dist/holdings.d.ts +29 -0
  77. package/dist/holdings.d.ts.map +1 -0
  78. package/dist/holdings.js +95 -0
  79. package/dist/host.d.ts +4 -10
  80. package/dist/host.d.ts.map +1 -1
  81. package/dist/host.js +74 -41
  82. package/dist/identity.d.ts +0 -2
  83. package/dist/identity.d.ts.map +1 -1
  84. package/dist/identity.js +0 -6
  85. package/dist/index.d.ts +33 -13
  86. package/dist/index.d.ts.map +1 -1
  87. package/dist/index.js +12 -2
  88. package/dist/install.d.ts +56 -0
  89. package/dist/install.d.ts.map +1 -0
  90. package/dist/install.js +554 -0
  91. package/dist/job.d.ts +33 -0
  92. package/dist/job.d.ts.map +1 -0
  93. package/dist/job.js +54 -0
  94. package/dist/lifecycle.d.ts +7 -0
  95. package/dist/lifecycle.d.ts.map +1 -0
  96. package/dist/lifecycle.js +268 -0
  97. package/dist/listing.d.ts +53 -0
  98. package/dist/listing.d.ts.map +1 -0
  99. package/dist/listing.js +176 -0
  100. package/dist/live.d.ts +23 -0
  101. package/dist/live.d.ts.map +1 -0
  102. package/dist/live.js +163 -0
  103. package/dist/locks.d.ts +9 -0
  104. package/dist/locks.d.ts.map +1 -0
  105. package/dist/locks.js +61 -0
  106. package/dist/log.d.ts +1 -0
  107. package/dist/log.d.ts.map +1 -1
  108. package/dist/lost.d.ts +5 -0
  109. package/dist/lost.d.ts.map +1 -0
  110. package/dist/lost.js +61 -0
  111. package/dist/media.d.ts +8 -0
  112. package/dist/media.d.ts.map +1 -0
  113. package/dist/media.js +218 -0
  114. package/dist/memory.d.ts +14 -7
  115. package/dist/memory.d.ts.map +1 -1
  116. package/dist/memory.js +241 -107
  117. package/dist/messages.d.ts +52 -0
  118. package/dist/messages.d.ts.map +1 -0
  119. package/dist/messages.js +162 -0
  120. package/dist/model.d.ts +8 -10
  121. package/dist/model.d.ts.map +1 -1
  122. package/dist/model.js +6 -18
  123. package/dist/models.d.ts +14 -0
  124. package/dist/models.d.ts.map +1 -0
  125. package/dist/models.js +195 -0
  126. package/dist/name.d.ts +4 -0
  127. package/dist/name.d.ts.map +1 -0
  128. package/dist/name.js +122 -0
  129. package/dist/observation.d.ts +17 -2
  130. package/dist/observation.d.ts.map +1 -1
  131. package/dist/observation.js +107 -17
  132. package/dist/opened.d.ts +22 -0
  133. package/dist/opened.d.ts.map +1 -0
  134. package/dist/opened.js +107 -0
  135. package/dist/opening.d.ts +4 -0
  136. package/dist/opening.d.ts.map +1 -0
  137. package/dist/opening.js +57 -0
  138. package/dist/outcome.d.ts +49 -8
  139. package/dist/outcome.d.ts.map +1 -1
  140. package/dist/outcome.js +42 -0
  141. package/dist/overlay.d.ts +3 -5
  142. package/dist/overlay.d.ts.map +1 -1
  143. package/dist/overlay.js +98 -172
  144. package/dist/{chat/parts.d.ts → parts.d.ts} +12 -9
  145. package/dist/parts.d.ts.map +1 -0
  146. package/dist/{chat/parts.js → parts.js} +53 -46
  147. package/dist/paths.d.ts +2 -0
  148. package/dist/paths.d.ts.map +1 -1
  149. package/dist/paths.js +26 -0
  150. package/dist/preparation.d.ts +20 -0
  151. package/dist/preparation.d.ts.map +1 -0
  152. package/dist/preparation.js +226 -0
  153. package/dist/queries.d.ts +16 -0
  154. package/dist/queries.d.ts.map +1 -0
  155. package/dist/queries.js +272 -0
  156. package/dist/query.d.ts +25 -191
  157. package/dist/query.d.ts.map +1 -1
  158. package/dist/query.js +3 -470
  159. package/dist/{chat/questions.d.ts → questions.d.ts} +5 -2
  160. package/dist/questions.d.ts.map +1 -0
  161. package/dist/{chat/questions.js → questions.js} +13 -2
  162. package/dist/reach.d.ts +20 -9
  163. package/dist/reach.d.ts.map +1 -1
  164. package/dist/reach.js +287 -99
  165. package/dist/react.d.ts +11 -4
  166. package/dist/react.d.ts.map +1 -1
  167. package/dist/react.js +2 -14
  168. package/dist/{chat/read.d.ts → read.d.ts} +2 -0
  169. package/dist/read.d.ts.map +1 -0
  170. package/dist/{chat/read.js → read.js} +4 -0
  171. package/dist/readiness.d.ts +13 -17
  172. package/dist/readiness.d.ts.map +1 -1
  173. package/dist/readiness.js +2 -8
  174. package/dist/reads.d.ts +36 -10
  175. package/dist/reads.d.ts.map +1 -1
  176. package/dist/reads.js +157 -84
  177. package/dist/recovery.d.ts +3 -2
  178. package/dist/recovery.d.ts.map +1 -1
  179. package/dist/recovery.js +43 -8
  180. package/dist/refresh.d.ts +18 -15
  181. package/dist/refresh.d.ts.map +1 -1
  182. package/dist/refresh.js +143 -58
  183. package/dist/refusal.d.ts +5 -0
  184. package/dist/refusal.d.ts.map +1 -0
  185. package/dist/refusal.js +55 -0
  186. package/dist/replica.d.ts +56 -33
  187. package/dist/replica.d.ts.map +1 -1
  188. package/dist/replica.js +332 -190
  189. package/dist/room-draft.d.ts +25 -8
  190. package/dist/room-draft.d.ts.map +1 -1
  191. package/dist/room-draft.js +161 -74
  192. package/dist/room-drafts.d.ts +24 -0
  193. package/dist/room-drafts.d.ts.map +1 -0
  194. package/dist/room-drafts.js +217 -0
  195. package/dist/rows.d.ts +31 -30
  196. package/dist/rows.d.ts.map +1 -1
  197. package/dist/rows.js +59 -118
  198. package/dist/runtime.d.ts +43 -0
  199. package/dist/runtime.d.ts.map +1 -0
  200. package/dist/runtime.js +1 -0
  201. package/dist/save.d.ts +57 -14
  202. package/dist/save.d.ts.map +1 -1
  203. package/dist/save.js +537 -192
  204. package/dist/saves.d.ts +70 -0
  205. package/dist/saves.d.ts.map +1 -0
  206. package/dist/saves.js +1005 -0
  207. package/dist/search.d.ts +12 -82
  208. package/dist/search.d.ts.map +1 -1
  209. package/dist/search.js +10 -207
  210. package/dist/seed.d.ts +11 -2
  211. package/dist/seed.d.ts.map +1 -1
  212. package/dist/seed.js +89 -5
  213. package/dist/shared.d.ts +6 -7
  214. package/dist/shared.d.ts.map +1 -1
  215. package/dist/shared.js +75 -104
  216. package/dist/shown.d.ts +31 -0
  217. package/dist/shown.d.ts.map +1 -0
  218. package/dist/shown.js +292 -0
  219. package/dist/socket/admission.d.ts +7 -0
  220. package/dist/socket/admission.d.ts.map +1 -0
  221. package/dist/socket/admission.js +39 -0
  222. package/dist/socket/answers.d.ts +6 -0
  223. package/dist/socket/answers.d.ts.map +1 -0
  224. package/dist/socket/answers.js +20 -0
  225. package/dist/socket/lanes.d.ts +20 -0
  226. package/dist/socket/lanes.d.ts.map +1 -0
  227. package/dist/socket/lanes.js +77 -0
  228. package/dist/socket/reads.d.ts +10 -0
  229. package/dist/socket/reads.d.ts.map +1 -0
  230. package/dist/socket/reads.js +31 -0
  231. package/dist/socket/rooms.d.ts +44 -0
  232. package/dist/socket/rooms.d.ts.map +1 -0
  233. package/dist/socket/rooms.js +90 -0
  234. package/dist/socket/session.d.ts +38 -0
  235. package/dist/socket/session.d.ts.map +1 -0
  236. package/dist/socket/session.js +23 -0
  237. package/dist/socket.d.ts +70 -0
  238. package/dist/socket.d.ts.map +1 -0
  239. package/dist/socket.js +175 -0
  240. package/dist/source.d.ts +61 -0
  241. package/dist/source.d.ts.map +1 -0
  242. package/dist/source.js +82 -0
  243. package/dist/status.d.ts +4 -5
  244. package/dist/status.d.ts.map +1 -1
  245. package/dist/status.js +3 -7
  246. package/dist/store/fences.d.ts +16 -0
  247. package/dist/store/fences.d.ts.map +1 -0
  248. package/dist/store/fences.js +26 -0
  249. package/dist/store/installs.d.ts +30 -0
  250. package/dist/store/installs.d.ts.map +1 -0
  251. package/dist/store/installs.js +34 -0
  252. package/dist/store/readiness.d.ts +10 -0
  253. package/dist/store/readiness.d.ts.map +1 -0
  254. package/dist/store/readiness.js +52 -0
  255. package/dist/store/records.d.ts +212 -0
  256. package/dist/store/records.d.ts.map +1 -0
  257. package/dist/store/records.js +431 -0
  258. package/dist/store/room-held.d.ts +8 -0
  259. package/dist/store/room-held.d.ts.map +1 -0
  260. package/dist/store/room-held.js +17 -0
  261. package/dist/store/space.d.ts +11 -0
  262. package/dist/store/space.d.ts.map +1 -0
  263. package/dist/store/space.js +41 -0
  264. package/dist/store/watchers.d.ts +17 -0
  265. package/dist/store/watchers.d.ts.map +1 -0
  266. package/dist/store/watchers.js +56 -0
  267. package/dist/store/writes.d.ts +24 -0
  268. package/dist/store/writes.d.ts.map +1 -0
  269. package/dist/store/writes.js +125 -0
  270. package/dist/store.d.ts +106 -158
  271. package/dist/store.d.ts.map +1 -1
  272. package/dist/store.js +136 -734
  273. package/dist/stored.d.ts +156 -0
  274. package/dist/stored.d.ts.map +1 -0
  275. package/dist/stored.js +649 -0
  276. package/dist/surface.d.ts +88 -0
  277. package/dist/surface.d.ts.map +1 -0
  278. package/dist/surface.js +223 -0
  279. package/dist/sync.d.ts +19 -0
  280. package/dist/sync.d.ts.map +1 -0
  281. package/dist/sync.js +532 -0
  282. package/dist/tables.d.ts +416 -0
  283. package/dist/tables.d.ts.map +1 -0
  284. package/dist/tables.js +740 -0
  285. package/dist/tallies.d.ts +18 -0
  286. package/dist/tallies.d.ts.map +1 -0
  287. package/dist/tallies.js +129 -0
  288. package/dist/transfer.d.ts +0 -5
  289. package/dist/transfer.d.ts.map +1 -1
  290. package/dist/turn.d.ts +5 -3
  291. package/dist/turn.d.ts.map +1 -1
  292. package/dist/turn.js +51 -21
  293. package/dist/validation.d.ts +29 -0
  294. package/dist/validation.d.ts.map +1 -0
  295. package/dist/validation.js +104 -0
  296. package/dist/windows.d.ts +11 -0
  297. package/dist/windows.d.ts.map +1 -0
  298. package/dist/windows.js +16 -0
  299. package/dist/wire.d.ts +50 -6
  300. package/dist/wire.d.ts.map +1 -1
  301. package/dist/wire.js +16 -2
  302. package/package.json +18 -19
  303. package/AGENTS.md +0 -299
  304. package/dist/acquisition.d.ts +0 -14
  305. package/dist/acquisition.d.ts.map +0 -1
  306. package/dist/acquisition.js +0 -24
  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/input.d.ts +0 -9
  313. package/dist/chat/input.d.ts.map +0 -1
  314. package/dist/chat/input.js +0 -99
  315. package/dist/chat/kit.d.ts +0 -61
  316. package/dist/chat/kit.d.ts.map +0 -1
  317. package/dist/chat/kit.js +0 -123
  318. package/dist/chat/lasting.d.ts +0 -6
  319. package/dist/chat/lasting.d.ts.map +0 -1
  320. package/dist/chat/lasting.js +0 -19
  321. package/dist/chat/list.d.ts +0 -27
  322. package/dist/chat/list.d.ts.map +0 -1
  323. package/dist/chat/list.js +0 -63
  324. package/dist/chat/markdown.d.ts +0 -20
  325. package/dist/chat/markdown.d.ts.map +0 -1
  326. package/dist/chat/markdown.js +0 -188
  327. package/dist/chat/message.d.ts +0 -6
  328. package/dist/chat/message.d.ts.map +0 -1
  329. package/dist/chat/message.js +0 -192
  330. package/dist/chat/messages.d.ts +0 -22
  331. package/dist/chat/messages.d.ts.map +0 -1
  332. package/dist/chat/messages.js +0 -155
  333. package/dist/chat/name.d.ts +0 -6
  334. package/dist/chat/name.d.ts.map +0 -1
  335. package/dist/chat/name.js +0 -37
  336. package/dist/chat/opened.d.ts +0 -11
  337. package/dist/chat/opened.d.ts.map +0 -1
  338. package/dist/chat/opened.js +0 -17
  339. package/dist/chat/overlay.d.ts +0 -31
  340. package/dist/chat/overlay.d.ts.map +0 -1
  341. package/dist/chat/overlay.js +0 -97
  342. package/dist/chat/parts.d.ts.map +0 -1
  343. package/dist/chat/process.d.ts +0 -20
  344. package/dist/chat/process.d.ts.map +0 -1
  345. package/dist/chat/process.js +0 -32
  346. package/dist/chat/provider.d.ts +0 -63
  347. package/dist/chat/provider.d.ts.map +0 -1
  348. package/dist/chat/provider.js +0 -629
  349. package/dist/chat/question.d.ts +0 -9
  350. package/dist/chat/question.d.ts.map +0 -1
  351. package/dist/chat/question.js +0 -80
  352. package/dist/chat/questions.d.ts.map +0 -1
  353. package/dist/chat/read.d.ts.map +0 -1
  354. package/dist/chat/ready.d.ts +0 -34
  355. package/dist/chat/ready.d.ts.map +0 -1
  356. package/dist/chat/ready.js +0 -91
  357. package/dist/chat/style.d.ts +0 -4
  358. package/dist/chat/style.d.ts.map +0 -1
  359. package/dist/chat/style.js +0 -302
  360. package/dist/chat.d.ts +0 -14
  361. package/dist/chat.d.ts.map +0 -1
  362. package/dist/chat.js +0 -8
  363. package/dist/fence.d.ts +0 -6
  364. package/dist/fence.d.ts.map +0 -1
  365. package/dist/fence.js +0 -10
  366. package/dist/read-side.d.ts +0 -25
  367. package/dist/read-side.d.ts.map +0 -1
  368. package/dist/read-side.js +0 -642
@@ -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 = {
@@ -229,7 +259,7 @@ export type ProviderRefusal = {
229
259
  export type ScopedRefusal = ProviderRefusal & {
230
260
  kind: 'scoped-refusal';
231
261
  locator: string;
232
- scope: Open<'content' | 'sync' | 'model' | 'operation' | 'undisclosed'>;
262
+ scope: Open<'content' | 'model' | 'operation' | 'undisclosed'>;
233
263
  };
234
264
  export type AdapterFailure = TransportUncertainty | RoomNotReadable | RevokedAuthorization | ScopedRefusal;
235
265
  export type ContractUnavailable = ProviderRefusal & {
@@ -238,7 +268,7 @@ export type ContractUnavailable = ProviderRefusal & {
238
268
  export type DiscoverResult = Discovery | TransportUncertainty | RevokedAuthorization | ContractUnavailable;
239
269
  export type PageToken = string;
240
270
  export type ChangeAuthor = {
241
- kind: Open<'user' | 'site'>;
271
+ kind: Open<'user' | 'site' | 'inbox' | 'app'>;
242
272
  id: string;
243
273
  name: string;
244
274
  };
@@ -252,39 +282,49 @@ export type HeadChange = {
252
282
  time: string;
253
283
  };
254
284
  export type BinaryFile = {
255
- fileRef: string;
256
285
  byteLength: number;
257
286
  mediaType: string;
258
287
  sha256: string;
259
288
  };
260
- export type HeldContent = {
261
- documents: Readonly<Record<string, string>>;
262
- revisions: Readonly<Record<string, string>>;
263
- };
264
289
  export type BootstrapRequest = {
265
290
  locator: string;
266
291
  selection: string;
267
292
  pageToken?: PageToken;
268
- 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;
269
302
  };
270
303
  export type RoomModels = {
271
304
  collection?: ModelResult;
272
- selection?: ModelResult;
273
305
  };
274
306
  export type BootstrapPage = {
275
307
  kind: 'bootstrap';
276
308
  roomVersion: string;
277
309
  models?: RoomModels;
278
310
  documents: Readonly<Record<string, string>>;
311
+ facts: Readonly<Record<string, SavedFacts>>;
279
312
  revisions: Readonly<Record<string, string>>;
280
313
  fileIds?: Readonly<Record<string, string>>;
314
+ created?: Readonly<Record<string, string>>;
281
315
  changes: Readonly<Record<string, HeadChange>>;
282
316
  binaryFiles: Readonly<Record<string, BinaryFile>>;
317
+ folders?: readonly string[];
283
318
  pageToken?: PageToken;
319
+ parts?: readonly BootstrapPart[];
320
+ bytes?: number;
321
+ };
322
+ export type NotReady = {
323
+ kind: 'not-ready';
284
324
  };
285
325
  export type BootstrapResult = BootstrapPage | {
286
326
  kind: 'beyond-horizon';
287
- } | AdapterFailure;
327
+ } | NotReady | AdapterFailure;
288
328
  export type RefreshRequest = {
289
329
  locator: string;
290
330
  selection: string;
@@ -296,11 +336,15 @@ export type RefreshPage = {
296
336
  roomVersion: string;
297
337
  models?: RoomModels;
298
338
  documents: Readonly<Record<string, string>>;
339
+ facts: Readonly<Record<string, SavedFacts>>;
299
340
  revisions: Readonly<Record<string, string>>;
300
341
  fileIds?: Readonly<Record<string, string>>;
342
+ created?: Readonly<Record<string, string>>;
301
343
  changes: Readonly<Record<string, HeadChange>>;
302
344
  binaryFiles: Readonly<Record<string, BinaryFile>>;
303
345
  removals: readonly string[];
346
+ folders?: readonly string[];
347
+ folderRemovals?: readonly string[];
304
348
  pageToken?: PageToken;
305
349
  };
306
350
  export type RefreshResult = {
@@ -311,6 +355,7 @@ export type RefreshResult = {
311
355
  export type MutationRequest = {
312
356
  locator: string;
313
357
  changeBatch: ChangeBatch;
358
+ file(localId: string): Promise<Blob>;
314
359
  upload?: unknown;
315
360
  };
316
361
  export type RetryableRefusal = ProviderRefusal & {
@@ -321,8 +366,7 @@ export type ServiceMode = Open<'open' | 'write-halted'>;
321
366
  export type ServiceModeSignal = {
322
367
  observe(notify: (mode: ServiceMode) => void): () => void;
323
368
  };
324
- export type MutationResult = {
325
- kind: 'accepted';
369
+ export type AcceptedRoom = {
326
370
  roomVersion: string;
327
371
  documents: Readonly<Record<string, string>>;
328
372
  revisions: Readonly<Record<string, string>>;
@@ -330,9 +374,13 @@ export type MutationResult = {
330
374
  changes: Readonly<Record<string, HeadChange>>;
331
375
  removals: readonly string[];
332
376
  binaryFiles?: Readonly<Record<string, BinaryFile>>;
377
+ };
378
+ export type MutationResult = (AcceptedRoom & {
379
+ kind: 'accepted';
333
380
  author?: string;
334
381
  time?: string;
335
- } | (ProviderRefusal & {
382
+ destination?: AcceptedRoom;
383
+ }) | (ProviderRefusal & {
336
384
  kind: 'conflicted';
337
385
  roomVersion?: string;
338
386
  affected: Readonly<Record<string, string>>;
@@ -341,15 +389,9 @@ export type MutationResult = {
341
389
  affected: Readonly<Record<string, string>>;
342
390
  }) | RetryableRefusal | {
343
391
  kind: 'write-halted';
344
- } | {
345
- kind: 'expired';
346
- restored?: true;
347
392
  } | AdapterFailure;
348
393
  export type HistoryAuthor = {
349
- kind: 'user';
350
- id: string;
351
- } | {
352
- kind: 'site';
394
+ kind: 'user' | 'site' | 'inbox' | 'app';
353
395
  id: string;
354
396
  name: string;
355
397
  };
@@ -381,22 +423,35 @@ export type BinaryRequest = {
381
423
  locator: string;
382
424
  path: string;
383
425
  revision: string;
384
- fileRef?: string;
385
- } | {
386
- kind: 'reference';
387
- fileRef: string;
388
- referrer: unknown;
389
- };
390
- export type ReferrerScope = {
391
- kind: 'room';
392
- locator: string;
393
- path?: string;
394
- } | {
395
- kind: 'conversations';
396
426
  };
397
427
  export type BinaryResult = {
398
428
  kind: 'binary';
429
+ body: ReadableStream<Uint8Array>;
430
+ mediaType: string;
431
+ sha256?: string;
432
+ } | (ProviderRefusal & {
433
+ kind: 'rejected';
434
+ }) | AdapterFailure;
435
+ export type BinaryLinkResult = {
436
+ kind: 'link';
437
+ url: string;
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;
399
449
  blob: Blob;
450
+ };
451
+ export type AttachResult = {
452
+ kind: 'attached';
453
+ path: string;
454
+ revision: string;
400
455
  } | (ProviderRefusal & {
401
456
  kind: 'rejected';
402
457
  }) | AdapterFailure;
@@ -412,71 +467,85 @@ export type ActionResult = {
412
467
  kind: 'action';
413
468
  result: unknown;
414
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[];
415
487
  } | (ProviderRefusal & {
416
488
  kind: 'rejected';
417
489
  }) | AdapterFailure;
418
490
  export type HeldRoom = {
419
491
  locator: string;
492
+ roomVersion: string | null;
493
+ };
494
+ export type RoomChange = {
495
+ kind: 'room-change';
496
+ locator: string;
497
+ from: string | null;
420
498
  roomVersion: string;
421
- documents: Readonly<Record<string, string>>;
422
- 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;
423
506
  };
424
507
  export type RoomStreamEvent = {
425
508
  kind: 'opened';
509
+ } | {
510
+ kind: 'discovered';
511
+ discovery: Discovery;
426
512
  } | {
427
513
  kind: 'closed';
428
514
  revoked: boolean;
429
515
  lost: boolean;
516
+ authorityChanged: boolean;
430
517
  } | {
431
- kind: 'opening';
518
+ kind: 'caught-up';
432
519
  expired: readonly string[];
433
- } | {
434
- kind: 'authority-changed';
435
- } | {
436
- kind: 'room-version';
437
- locator: string;
438
- roomVersion: string;
439
- };
440
- export type KeptReceipt = {
441
- key: string;
442
- head: unknown;
443
- };
444
- export type StreamReceipts = {
445
- heads(): Promise<readonly KeptReceipt[]>;
446
- parts(key: string, count: number): Promise<readonly unknown[]>;
447
- keep(key: string, head: unknown, part?: {
448
- index: number;
449
- value: unknown;
450
- }): Promise<void>;
451
- drop(keys: readonly string[]): Promise<void>;
452
- };
453
- export type AcquiredDemand = {
454
- rooms: readonly string[];
455
- conversations: boolean;
456
- };
520
+ } | AuthorityChange | RoomChange;
457
521
  export type RoomStream = {
458
- hold(rooms: readonly HeldRoom[], demand: AcquiredDemand | null): void;
459
- reopen(): void;
460
- published(locator: string, roomVersion: string): void;
461
- observe(notify: (event: RoomStreamEvent) => void, receipts: StreamReceipts): () => void;
522
+ hold(rooms: readonly HeldRoom[]): void;
523
+ observe(notify: (event: RoomStreamEvent) => void): () => void;
462
524
  };
525
+ export type PathRule = (path: string) => boolean;
463
526
  export type Adapter = {
464
527
  readonly localSaves?: true;
465
- 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[];
466
534
  authorize(): Promise<Authorization>;
467
- discover(authorization: Authorization): Promise<DiscoverResult>;
535
+ discover?(authorization: Authorization): Promise<DiscoverResult>;
468
536
  bootstrap(authorization: Authorization, request: BootstrapRequest): Promise<BootstrapResult>;
469
- refresh(authorization: Authorization, request: RefreshRequest): Promise<RefreshResult>;
537
+ refresh?(authorization: Authorization, request: RefreshRequest): Promise<RefreshResult>;
470
538
  mutate(authorization: Authorization, request: MutationRequest, keep: (upload: unknown) => Promise<void>): Promise<MutationResult>;
471
539
  history(authorization: Authorization, request: HistoryRequest): Promise<HistoryResult>;
472
540
  binary(authorization: Authorization, request: BinaryRequest): Promise<BinaryResult>;
473
- referrerScope(referrer: unknown): ReferrerScope | null;
541
+ link(authorization: Authorization, request: BinaryRequest): Promise<BinaryLinkResult>;
542
+ attach(authorization: Authorization, request: AttachRequest): Promise<AttachResult>;
474
543
  action(authorization: Authorization, request: ActionRequest): Promise<ActionResult>;
544
+ search?(authorization: Authorization, request: SearchAsk): Promise<SearchAnswer>;
475
545
  reached(locator: string, roomVersion: string, target: string): boolean;
476
546
  follows(locator: string, roomVersion: string, next: string): boolean;
477
547
  roomStream?: RoomStream;
478
548
  conversations?: ConversationStream;
479
549
  serviceMode?: ServiceModeSignal;
480
550
  };
481
- export {};
482
551
  //# sourceMappingURL=adapter.d.ts.map