@agentshouse/mdruntime 0.1.0-c210758b77baa → 0.1.0-c23f4c9bf3e36

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 (372) hide show
  1. package/README.md +19 -17
  2. package/dist/acceptance.d.ts +6 -0
  3. package/dist/acceptance.d.ts.map +1 -0
  4. package/dist/acceptance.js +387 -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 +106 -99
  9. package/dist/adapter.d.ts.map +1 -1
  10. package/dist/attached-model.d.ts +5 -11
  11. package/dist/attached-model.d.ts.map +1 -1
  12. package/dist/attached-model.js +36 -47
  13. package/dist/bootstrap.d.ts +16 -15
  14. package/dist/bootstrap.d.ts.map +1 -1
  15. package/dist/bootstrap.js +274 -131
  16. package/dist/cell.d.ts +6 -0
  17. package/dist/cell.d.ts.map +1 -0
  18. package/dist/cell.js +9 -0
  19. package/dist/chain.d.ts +2 -1
  20. package/dist/chain.d.ts.map +1 -1
  21. package/dist/change.d.ts +1 -0
  22. package/dist/change.d.ts.map +1 -1
  23. package/dist/change.js +4 -2
  24. package/dist/chat-types.d.ts +5 -0
  25. package/dist/chat-types.d.ts.map +1 -0
  26. package/dist/chat-types.js +13 -0
  27. package/dist/client.d.ts +28 -11
  28. package/dist/client.d.ts.map +1 -1
  29. package/dist/client.js +61 -10
  30. package/dist/collection.d.ts +28 -7
  31. package/dist/collection.d.ts.map +1 -1
  32. package/dist/collection.js +36 -21
  33. package/dist/compile.d.ts +6 -6
  34. package/dist/compile.d.ts.map +1 -1
  35. package/dist/compile.js +287 -297
  36. package/dist/connection.d.ts +6 -141
  37. package/dist/connection.d.ts.map +1 -1
  38. package/dist/connection.js +105 -5016
  39. package/dist/context.d.ts +2 -0
  40. package/dist/context.d.ts.map +1 -0
  41. package/dist/{chat/context.js → context.js} +1 -4
  42. package/dist/conversation-live.d.ts +135 -0
  43. package/dist/conversation-live.d.ts.map +1 -0
  44. package/dist/conversation-live.js +247 -0
  45. package/dist/conversation-row.d.ts +33 -0
  46. package/dist/conversation-row.d.ts.map +1 -0
  47. package/dist/conversation-row.js +53 -0
  48. package/dist/conversation.d.ts +41 -47
  49. package/dist/conversation.d.ts.map +1 -1
  50. package/dist/conversation.js +885 -829
  51. package/dist/discovery.d.ts +10 -0
  52. package/dist/discovery.d.ts.map +1 -0
  53. package/dist/discovery.js +175 -0
  54. package/dist/durability.d.ts +15 -1
  55. package/dist/durability.d.ts.map +1 -1
  56. package/dist/entry.d.ts +3 -2
  57. package/dist/entry.d.ts.map +1 -1
  58. package/dist/entry.js +18 -8
  59. package/dist/expectation.d.ts +4 -2
  60. package/dist/expectation.d.ts.map +1 -1
  61. package/dist/expectation.js +33 -11
  62. package/dist/failure.d.ts +1 -0
  63. package/dist/failure.d.ts.map +1 -1
  64. package/dist/failure.js +3 -0
  65. package/dist/figures.d.ts +49 -0
  66. package/dist/figures.d.ts.map +1 -0
  67. package/dist/figures.js +197 -0
  68. package/dist/file.d.ts +2 -11
  69. package/dist/file.d.ts.map +1 -1
  70. package/dist/file.js +6 -4
  71. package/dist/holdings.d.ts +29 -0
  72. package/dist/holdings.d.ts.map +1 -0
  73. package/dist/holdings.js +95 -0
  74. package/dist/host.d.ts +20 -8
  75. package/dist/host.d.ts.map +1 -1
  76. package/dist/host.js +48 -36
  77. package/dist/identity.d.ts +0 -1
  78. package/dist/identity.d.ts.map +1 -1
  79. package/dist/identity.js +0 -3
  80. package/dist/index.d.ts +28 -10
  81. package/dist/index.d.ts.map +1 -1
  82. package/dist/index.js +9 -1
  83. package/dist/install.d.ts +56 -0
  84. package/dist/install.d.ts.map +1 -0
  85. package/dist/install.js +556 -0
  86. package/dist/job.d.ts +5 -0
  87. package/dist/job.d.ts.map +1 -0
  88. package/dist/job.js +7 -0
  89. package/dist/lifecycle.d.ts +7 -0
  90. package/dist/lifecycle.d.ts.map +1 -0
  91. package/dist/lifecycle.js +270 -0
  92. package/dist/listing.d.ts +53 -0
  93. package/dist/listing.d.ts.map +1 -0
  94. package/dist/listing.js +176 -0
  95. package/dist/live.d.ts +5 -4
  96. package/dist/live.d.ts.map +1 -1
  97. package/dist/live.js +63 -21
  98. package/dist/locks.d.ts +9 -0
  99. package/dist/locks.d.ts.map +1 -0
  100. package/dist/locks.js +62 -0
  101. package/dist/log.d.ts +1 -0
  102. package/dist/log.d.ts.map +1 -1
  103. package/dist/lost.d.ts +5 -0
  104. package/dist/lost.d.ts.map +1 -0
  105. package/dist/lost.js +61 -0
  106. package/dist/media.d.ts +8 -0
  107. package/dist/media.d.ts.map +1 -0
  108. package/dist/media.js +218 -0
  109. package/dist/memory.d.ts +13 -6
  110. package/dist/memory.d.ts.map +1 -1
  111. package/dist/memory.js +222 -92
  112. package/dist/messages.d.ts +24 -3
  113. package/dist/messages.d.ts.map +1 -1
  114. package/dist/messages.js +89 -31
  115. package/dist/model.d.ts +8 -11
  116. package/dist/model.d.ts.map +1 -1
  117. package/dist/model.js +6 -23
  118. package/dist/models.d.ts +14 -0
  119. package/dist/models.d.ts.map +1 -0
  120. package/dist/models.js +197 -0
  121. package/dist/observation.d.ts +3 -2
  122. package/dist/observation.d.ts.map +1 -1
  123. package/dist/observation.js +15 -15
  124. package/dist/opened.js +3 -3
  125. package/dist/opening.d.ts +4 -0
  126. package/dist/opening.d.ts.map +1 -0
  127. package/dist/opening.js +60 -0
  128. package/dist/outcome.d.ts +17 -6
  129. package/dist/outcome.d.ts.map +1 -1
  130. package/dist/outcome.js +19 -2
  131. package/dist/overlay.d.ts +3 -1
  132. package/dist/overlay.d.ts.map +1 -1
  133. package/dist/overlay.js +43 -21
  134. package/dist/parts.d.ts +11 -0
  135. package/dist/parts.d.ts.map +1 -0
  136. package/dist/parts.js +21 -0
  137. package/dist/paths.d.ts +2 -0
  138. package/dist/paths.d.ts.map +1 -1
  139. package/dist/paths.js +26 -0
  140. package/dist/preparation.d.ts +20 -0
  141. package/dist/preparation.d.ts.map +1 -0
  142. package/dist/preparation.js +233 -0
  143. package/dist/queries.d.ts +16 -0
  144. package/dist/queries.d.ts.map +1 -0
  145. package/dist/queries.js +272 -0
  146. package/dist/query.d.ts +18 -208
  147. package/dist/query.d.ts.map +1 -1
  148. package/dist/query.js +3 -505
  149. package/dist/{chat/questions.d.ts → questions.d.ts} +5 -2
  150. package/dist/questions.d.ts.map +1 -0
  151. package/dist/{chat/questions.js → questions.js} +13 -2
  152. package/dist/reach.d.ts +20 -11
  153. package/dist/reach.d.ts.map +1 -1
  154. package/dist/reach.js +210 -129
  155. package/dist/react.d.ts +14 -2
  156. package/dist/react.d.ts.map +1 -1
  157. package/dist/react.js +10 -1
  158. package/dist/{chat/read.d.ts → read.d.ts} +2 -0
  159. package/dist/read.d.ts.map +1 -0
  160. package/dist/{chat/read.js → read.js} +4 -0
  161. package/dist/readiness.d.ts +3 -18
  162. package/dist/readiness.d.ts.map +1 -1
  163. package/dist/readiness.js +4 -10
  164. package/dist/reads.d.ts +36 -10
  165. package/dist/reads.d.ts.map +1 -1
  166. package/dist/reads.js +159 -85
  167. package/dist/recovery.d.ts +1 -0
  168. package/dist/recovery.d.ts.map +1 -1
  169. package/dist/recovery.js +35 -1
  170. package/dist/refresh.d.ts +7 -5
  171. package/dist/refresh.d.ts.map +1 -1
  172. package/dist/refresh.js +34 -10
  173. package/dist/refusal.d.ts +5 -0
  174. package/dist/refusal.d.ts.map +1 -0
  175. package/dist/refusal.js +57 -0
  176. package/dist/replica.d.ts +13 -14
  177. package/dist/replica.d.ts.map +1 -1
  178. package/dist/replica.js +65 -32
  179. package/dist/room-draft.d.ts +24 -9
  180. package/dist/room-draft.d.ts.map +1 -1
  181. package/dist/room-draft.js +133 -73
  182. package/dist/room-drafts.d.ts +24 -0
  183. package/dist/room-drafts.d.ts.map +1 -0
  184. package/dist/room-drafts.js +217 -0
  185. package/dist/rows.d.ts +18 -16
  186. package/dist/rows.d.ts.map +1 -1
  187. package/dist/rows.js +46 -155
  188. package/dist/runtime.d.ts +43 -0
  189. package/dist/runtime.d.ts.map +1 -0
  190. package/dist/runtime.js +1 -0
  191. package/dist/save.d.ts +8 -2
  192. package/dist/save.d.ts.map +1 -1
  193. package/dist/save.js +81 -62
  194. package/dist/saves.d.ts +70 -0
  195. package/dist/saves.d.ts.map +1 -0
  196. package/dist/saves.js +1008 -0
  197. package/dist/search.d.ts +12 -63
  198. package/dist/search.d.ts.map +1 -1
  199. package/dist/search.js +9 -52
  200. package/dist/seed.d.ts +11 -2
  201. package/dist/seed.d.ts.map +1 -1
  202. package/dist/seed.js +71 -1
  203. package/dist/shared.d.ts +1 -7
  204. package/dist/shared.d.ts.map +1 -1
  205. package/dist/shared.js +13 -105
  206. package/dist/shown.d.ts +31 -0
  207. package/dist/shown.d.ts.map +1 -0
  208. package/dist/shown.js +290 -0
  209. package/dist/socket/admission.d.ts +7 -0
  210. package/dist/socket/admission.d.ts.map +1 -0
  211. package/dist/socket/admission.js +39 -0
  212. package/dist/socket/answers.d.ts +6 -0
  213. package/dist/socket/answers.d.ts.map +1 -0
  214. package/dist/socket/answers.js +20 -0
  215. package/dist/socket/lanes.d.ts +20 -0
  216. package/dist/socket/lanes.d.ts.map +1 -0
  217. package/dist/socket/lanes.js +77 -0
  218. package/dist/socket/reads.d.ts +10 -0
  219. package/dist/socket/reads.d.ts.map +1 -0
  220. package/dist/socket/reads.js +31 -0
  221. package/dist/socket/rooms.d.ts +44 -0
  222. package/dist/socket/rooms.d.ts.map +1 -0
  223. package/dist/socket/rooms.js +90 -0
  224. package/dist/socket/session.d.ts +38 -0
  225. package/dist/socket/session.d.ts.map +1 -0
  226. package/dist/socket/session.js +23 -0
  227. package/dist/socket.d.ts +70 -0
  228. package/dist/socket.d.ts.map +1 -0
  229. package/dist/socket.js +175 -0
  230. package/dist/source.d.ts +61 -0
  231. package/dist/source.d.ts.map +1 -0
  232. package/dist/source.js +82 -0
  233. package/dist/status.d.ts +4 -5
  234. package/dist/status.d.ts.map +1 -1
  235. package/dist/status.js +3 -7
  236. package/dist/store/fences.d.ts +16 -0
  237. package/dist/store/fences.d.ts.map +1 -0
  238. package/dist/store/fences.js +26 -0
  239. package/dist/store/installs.d.ts +30 -0
  240. package/dist/store/installs.d.ts.map +1 -0
  241. package/dist/store/installs.js +34 -0
  242. package/dist/store/readiness.d.ts +10 -0
  243. package/dist/store/readiness.d.ts.map +1 -0
  244. package/dist/store/readiness.js +52 -0
  245. package/dist/store/records.d.ts +210 -0
  246. package/dist/store/records.d.ts.map +1 -0
  247. package/dist/store/records.js +428 -0
  248. package/dist/store/room-held.d.ts +8 -0
  249. package/dist/store/room-held.d.ts.map +1 -0
  250. package/dist/store/room-held.js +17 -0
  251. package/dist/store/space.d.ts +11 -0
  252. package/dist/store/space.d.ts.map +1 -0
  253. package/dist/store/space.js +41 -0
  254. package/dist/store/watchers.d.ts +17 -0
  255. package/dist/store/watchers.d.ts.map +1 -0
  256. package/dist/store/watchers.js +56 -0
  257. package/dist/store/writes.d.ts +24 -0
  258. package/dist/store/writes.d.ts.map +1 -0
  259. package/dist/store/writes.js +125 -0
  260. package/dist/store.d.ts +105 -158
  261. package/dist/store.d.ts.map +1 -1
  262. package/dist/store.js +143 -401
  263. package/dist/stored.d.ts +66 -55
  264. package/dist/stored.d.ts.map +1 -1
  265. package/dist/stored.js +355 -273
  266. package/dist/surface.d.ts +88 -0
  267. package/dist/surface.d.ts.map +1 -0
  268. package/dist/surface.js +224 -0
  269. package/dist/sync.d.ts +19 -0
  270. package/dist/sync.d.ts.map +1 -0
  271. package/dist/sync.js +532 -0
  272. package/dist/tables.d.ts +127 -69
  273. package/dist/tables.d.ts.map +1 -1
  274. package/dist/tables.js +218 -105
  275. package/dist/tallies.d.ts +18 -0
  276. package/dist/tallies.d.ts.map +1 -0
  277. package/dist/tallies.js +129 -0
  278. package/dist/transfer.d.ts +0 -5
  279. package/dist/transfer.d.ts.map +1 -1
  280. package/dist/validation.d.ts +3 -4
  281. package/dist/validation.d.ts.map +1 -1
  282. package/dist/validation.js +42 -100
  283. package/dist/windows.d.ts +1 -12
  284. package/dist/windows.d.ts.map +1 -1
  285. package/dist/windows.js +2 -75
  286. package/dist/wire.d.ts +29 -13
  287. package/dist/wire.d.ts.map +1 -1
  288. package/dist/wire.js +12 -5
  289. package/package.json +11 -17
  290. package/AGENTS.md +0 -317
  291. package/dist/chat/acts.d.ts +0 -33
  292. package/dist/chat/acts.d.ts.map +0 -1
  293. package/dist/chat/acts.js +0 -36
  294. package/dist/chat/context.d.ts +0 -3
  295. package/dist/chat/context.d.ts.map +0 -1
  296. package/dist/chat/earlier.d.ts +0 -10
  297. package/dist/chat/earlier.d.ts.map +0 -1
  298. package/dist/chat/earlier.js +0 -54
  299. package/dist/chat/house.d.ts +0 -25
  300. package/dist/chat/house.d.ts.map +0 -1
  301. package/dist/chat/house.js +0 -38
  302. package/dist/chat/input.d.ts +0 -11
  303. package/dist/chat/input.d.ts.map +0 -1
  304. package/dist/chat/input.js +0 -92
  305. package/dist/chat/kit.d.ts +0 -61
  306. package/dist/chat/kit.d.ts.map +0 -1
  307. package/dist/chat/kit.js +0 -123
  308. package/dist/chat/lasting.d.ts +0 -6
  309. package/dist/chat/lasting.d.ts.map +0 -1
  310. package/dist/chat/lasting.js +0 -19
  311. package/dist/chat/list.d.ts +0 -28
  312. package/dist/chat/list.d.ts.map +0 -1
  313. package/dist/chat/list.js +0 -103
  314. package/dist/chat/markdown.d.ts +0 -20
  315. package/dist/chat/markdown.d.ts.map +0 -1
  316. package/dist/chat/markdown.js +0 -231
  317. package/dist/chat/message.d.ts +0 -7
  318. package/dist/chat/message.d.ts.map +0 -1
  319. package/dist/chat/message.js +0 -254
  320. package/dist/chat/messages.d.ts +0 -35
  321. package/dist/chat/messages.d.ts.map +0 -1
  322. package/dist/chat/messages.js +0 -210
  323. package/dist/chat/name.d.ts +0 -7
  324. package/dist/chat/name.d.ts.map +0 -1
  325. package/dist/chat/name.js +0 -37
  326. package/dist/chat/opened.d.ts +0 -12
  327. package/dist/chat/opened.d.ts.map +0 -1
  328. package/dist/chat/opened.js +0 -19
  329. package/dist/chat/overlay.d.ts +0 -32
  330. package/dist/chat/overlay.d.ts.map +0 -1
  331. package/dist/chat/overlay.js +0 -103
  332. package/dist/chat/parts.d.ts +0 -58
  333. package/dist/chat/parts.d.ts.map +0 -1
  334. package/dist/chat/parts.js +0 -120
  335. package/dist/chat/pieces.d.ts +0 -62
  336. package/dist/chat/pieces.d.ts.map +0 -1
  337. package/dist/chat/pieces.js +0 -1110
  338. package/dist/chat/process.d.ts +0 -20
  339. package/dist/chat/process.d.ts.map +0 -1
  340. package/dist/chat/process.js +0 -32
  341. package/dist/chat/provider.d.ts +0 -70
  342. package/dist/chat/provider.d.ts.map +0 -1
  343. package/dist/chat/provider.js +0 -635
  344. package/dist/chat/question.d.ts +0 -9
  345. package/dist/chat/question.d.ts.map +0 -1
  346. package/dist/chat/question.js +0 -69
  347. package/dist/chat/questions.d.ts.map +0 -1
  348. package/dist/chat/read.d.ts.map +0 -1
  349. package/dist/chat/ready.d.ts +0 -37
  350. package/dist/chat/ready.d.ts.map +0 -1
  351. package/dist/chat/ready.js +0 -93
  352. package/dist/chat/room-file.d.ts +0 -8
  353. package/dist/chat/room-file.d.ts.map +0 -1
  354. package/dist/chat/room-file.js +0 -72
  355. package/dist/chat/steady.d.ts +0 -3
  356. package/dist/chat/steady.d.ts.map +0 -1
  357. package/dist/chat/steady.js +0 -26
  358. package/dist/chat/style.d.ts +0 -4
  359. package/dist/chat/style.d.ts.map +0 -1
  360. package/dist/chat/style.js +0 -307
  361. package/dist/chat.d.ts +0 -15
  362. package/dist/chat.d.ts.map +0 -1
  363. package/dist/chat.js +0 -8
  364. package/dist/fence.d.ts +0 -6
  365. package/dist/fence.d.ts.map +0 -1
  366. package/dist/fence.js +0 -10
  367. package/dist/fulltext.d.ts +0 -27
  368. package/dist/fulltext.d.ts.map +0 -1
  369. package/dist/fulltext.js +0 -368
  370. package/dist/words.d.ts +0 -19
  371. package/dist/words.d.ts.map +0 -1
  372. package/dist/words.js +0 -150
@@ -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,7 @@
1
+ import type { SavedFacts, TypedPath } from '@agentshouse/mdmodel';
2
+ import type { Operation, SessionState } from '@agentshouse/session-content';
1
3
  import type { ModelResult } from './model.js';
4
+ export type { SavedFacts, TypedPath };
2
5
  import type { Open } from './open.js';
3
6
  import type { ChangeBatch } from './change.js';
4
7
  export type Authorization = object;
@@ -11,7 +14,7 @@ export type TypedSelection = {
11
14
  };
12
15
  export type OperationScopes = {
13
16
  write: readonly string[];
14
- delete: readonly string[];
17
+ erase: readonly string[];
15
18
  };
16
19
  export type ReplicaAdmission = {
17
20
  selection: string;
@@ -27,30 +30,27 @@ export type DiscoveredRoom = {
27
30
  replica: ReplicaAdmission;
28
31
  typedSelection?: TypedSelection;
29
32
  providerOwnedPaths: readonly string[];
33
+ authoredPaths?: readonly string[];
30
34
  };
31
35
  export type Capability = {
32
36
  name: string;
33
37
  limits?: readonly ProviderLimit[];
34
38
  actions?: readonly ActionDeclaration[];
35
- conversationAgents?: ConversationAgents;
36
- };
37
- export type ConversationAgents = {
38
- locator: string;
39
- type: string;
40
- identity: string;
41
- name: string;
42
- retired?: string;
43
39
  };
44
40
  export type ListedConversation = {
45
41
  conversation: string;
46
42
  agent: string;
43
+ agentName: string;
44
+ agentRetired: boolean;
47
45
  name: string;
48
46
  created: string;
49
47
  finished: string | null;
50
48
  outcome: string | null;
51
49
  waiting: boolean;
50
+ newest: string | null;
51
+ processEnded: string | null;
52
52
  };
53
- export type ConversationAction = 'conversation.create' | 'conversation.send' | 'conversation.attach' | 'conversation.answer' | 'conversation.interrupt' | 'conversation.kill' | 'conversation.cancel' | 'conversation.delete' | 'conversation.history';
53
+ export type ConversationAction = 'conversations/create' | 'conversations/send' | 'conversations/interaction/answer' | 'conversations/interrupt' | 'conversations/kill' | 'conversations/delete';
54
54
  export type ConversationMessage = {
55
55
  identity: string;
56
56
  turn: string;
@@ -74,37 +74,10 @@ export type ConversationHistoryPage = {
74
74
  export type ConversationHistories = {
75
75
  histories: readonly ConversationHistoryPage[];
76
76
  };
77
- export type TurnContext = {
78
- used: number;
79
- window: number;
80
- };
81
77
  export type TurnOperation = {
82
78
  op: 'begin';
83
79
  at: string;
84
- } | {
85
- op: 'start';
86
- index: number;
87
- part: unknown;
88
- } | {
89
- op: 'append';
90
- index: number;
91
- text: string;
92
- } | {
93
- op: 'status';
94
- index: number;
95
- status: string;
96
- result: unknown;
97
- } | {
98
- op: 'count';
99
- index: number;
100
- count: number;
101
- } | {
102
- op: 'plan';
103
- index: number;
104
- entries: readonly unknown[];
105
- } | ({
106
- op: 'context';
107
- } & TurnContext);
80
+ } | Operation;
108
81
  export type ProcessCommand = {
109
82
  [field: string]: unknown;
110
83
  name: string;
@@ -166,6 +139,10 @@ export type ConversationEvent = {
166
139
  kind: 'starting';
167
140
  conversation: string;
168
141
  step: string | null;
142
+ } | {
143
+ kind: 'state';
144
+ conversation: string;
145
+ state: SessionState | null;
169
146
  } | {
170
147
  kind: 'link';
171
148
  conversation: string;
@@ -184,6 +161,9 @@ export type ConversationEvent = {
184
161
  } | {
185
162
  kind: 'list';
186
163
  entries: readonly ListedConversation[];
164
+ whole: boolean;
165
+ more: boolean;
166
+ cursor: string | null;
187
167
  } | {
188
168
  kind: 'listed';
189
169
  entry: ListedConversation;
@@ -191,9 +171,17 @@ export type ConversationEvent = {
191
171
  kind: 'unlisted';
192
172
  conversation: string;
193
173
  };
174
+ export type ListedAgent = {
175
+ agent: string;
176
+ name: string;
177
+ retired: boolean;
178
+ };
194
179
  export type ConversationStream = {
195
180
  replicate(conversations: readonly string[]): void;
181
+ hold(cursor: string | null): void;
196
182
  observe(notify: (event: ConversationEvent) => void): () => void;
183
+ agents?(): Promise<readonly ListedAgent[] | null>;
184
+ history?(request: ConversationHistoryRequest): Promise<ActionResult>;
197
185
  };
198
186
  export type ActionDeclaration = {
199
187
  name: string;
@@ -213,7 +201,6 @@ export type HistoryRetention = {
213
201
  };
214
202
  export type Retention = {
215
203
  history: HistoryRetention;
216
- outcome: number;
217
204
  refreshHorizon: number;
218
205
  };
219
206
  export type Discovery = {
@@ -223,10 +210,6 @@ export type Discovery = {
223
210
  providerLimits: readonly ProviderLimit[];
224
211
  retention: Retention;
225
212
  member?: Member;
226
- covered?: readonly string[];
227
- };
228
- export type DiscoveryScope = {
229
- readonly authorities: readonly string[];
230
213
  };
231
214
  export type TransportUncertainty = {
232
215
  kind: 'transport-uncertainty';
@@ -255,7 +238,7 @@ export type ContractUnavailable = ProviderRefusal & {
255
238
  export type DiscoverResult = Discovery | TransportUncertainty | RevokedAuthorization | ContractUnavailable;
256
239
  export type PageToken = string;
257
240
  export type ChangeAuthor = {
258
- kind: Open<'user' | 'site' | 'inbox'>;
241
+ kind: Open<'user' | 'site' | 'inbox' | 'app'>;
259
242
  id: string;
260
243
  name: string;
261
244
  };
@@ -273,50 +256,45 @@ export type BinaryFile = {
273
256
  mediaType: string;
274
257
  sha256: string;
275
258
  };
276
- export type HeldFile = {
277
- readonly path: string;
278
- readonly revision: string;
279
- };
280
- export type HeldContent = {
281
- files(after: string | null, limit: number): Promise<readonly HeldFile[]>;
282
- contents(paths: readonly string[]): Promise<ReadonlyMap<string, {
283
- readonly content: string;
284
- readonly revision: string;
285
- }>>;
286
- };
287
259
  export type BootstrapRequest = {
288
260
  locator: string;
289
261
  selection: string;
290
262
  pageToken?: PageToken;
291
- held?: HeldContent;
292
- received?: Uint8Array;
293
263
  arriving?: (bytes: number) => void;
264
+ signal?: AbortSignal;
265
+ };
266
+ export type BootstrapPart = {
267
+ readonly id: string;
268
+ readonly bytes: number;
294
269
  };
295
270
  export type BootstrapInventory = {
296
- readonly parts: number;
297
271
  readonly bytes: number;
298
272
  };
299
273
  export type RoomModels = {
300
274
  collection?: ModelResult;
301
- selection?: ModelResult;
302
275
  };
303
276
  export type BootstrapPage = {
304
277
  kind: 'bootstrap';
305
278
  roomVersion: string;
306
279
  models?: RoomModels;
307
280
  documents: Readonly<Record<string, string>>;
281
+ facts: Readonly<Record<string, SavedFacts>>;
308
282
  revisions: Readonly<Record<string, string>>;
309
283
  fileIds?: Readonly<Record<string, string>>;
284
+ created?: Readonly<Record<string, string>>;
310
285
  changes: Readonly<Record<string, HeadChange>>;
311
286
  binaryFiles: Readonly<Record<string, BinaryFile>>;
312
287
  folders?: readonly string[];
313
288
  pageToken?: PageToken;
314
- inventory?: BootstrapInventory;
315
- received?: Uint8Array;
289
+ parts?: readonly BootstrapPart[];
290
+ bytes?: number;
291
+ };
292
+ export type NotReady = {
293
+ kind: 'not-ready';
316
294
  };
317
295
  export type BootstrapResult = BootstrapPage | {
318
296
  kind: 'beyond-horizon';
319
- } | AdapterFailure;
297
+ } | NotReady | AdapterFailure;
320
298
  export type RefreshRequest = {
321
299
  locator: string;
322
300
  selection: string;
@@ -328,8 +306,10 @@ export type RefreshPage = {
328
306
  roomVersion: string;
329
307
  models?: RoomModels;
330
308
  documents: Readonly<Record<string, string>>;
309
+ facts: Readonly<Record<string, SavedFacts>>;
331
310
  revisions: Readonly<Record<string, string>>;
332
311
  fileIds?: Readonly<Record<string, string>>;
312
+ created?: Readonly<Record<string, string>>;
333
313
  changes: Readonly<Record<string, HeadChange>>;
334
314
  binaryFiles: Readonly<Record<string, BinaryFile>>;
335
315
  removals: readonly string[];
@@ -379,15 +359,9 @@ export type MutationResult = (AcceptedRoom & {
379
359
  affected: Readonly<Record<string, string>>;
380
360
  }) | RetryableRefusal | {
381
361
  kind: 'write-halted';
382
- } | {
383
- kind: 'expired';
384
- restored?: true;
385
362
  } | AdapterFailure;
386
363
  export type HistoryAuthor = {
387
- kind: 'user';
388
- id: string;
389
- } | {
390
- kind: 'site' | 'inbox';
364
+ kind: 'user' | 'site' | 'inbox' | 'app';
391
365
  id: string;
392
366
  name: string;
393
367
  };
@@ -432,6 +406,22 @@ export type BinaryLinkResult = {
432
406
  kind: 'link';
433
407
  url: string;
434
408
  name: string;
409
+ mediaType?: string;
410
+ } | (ProviderRefusal & {
411
+ kind: 'rejected';
412
+ }) | AdapterFailure;
413
+ export type AttachRequest = {
414
+ locator: string;
415
+ name: string;
416
+ mediaType: string;
417
+ byteLength: number;
418
+ sha256: string;
419
+ blob: Blob;
420
+ };
421
+ export type AttachResult = {
422
+ kind: 'attached';
423
+ path: string;
424
+ revision: string;
435
425
  } | (ProviderRefusal & {
436
426
  kind: 'rejected';
437
427
  }) | AdapterFailure;
@@ -447,68 +437,85 @@ export type ActionResult = {
447
437
  kind: 'action';
448
438
  result: unknown;
449
439
  at?: RoomVersionAt;
440
+ } | (ProviderRefusal & {
441
+ kind: 'rejected';
442
+ reset?: string;
443
+ }) | AdapterFailure;
444
+ export type SearchHit = {
445
+ room: string;
446
+ path: string;
447
+ line?: number;
448
+ snippet?: string;
449
+ };
450
+ export type SearchAsk = {
451
+ text: string;
452
+ rooms: readonly string[] | null;
453
+ };
454
+ export type SearchAnswer = {
455
+ kind: 'found';
456
+ documents: readonly SearchHit[];
450
457
  } | (ProviderRefusal & {
451
458
  kind: 'rejected';
452
459
  }) | AdapterFailure;
453
460
  export type HeldRoom = {
454
461
  locator: string;
462
+ roomVersion: string | null;
463
+ };
464
+ export type RoomChange = {
465
+ kind: 'room-change';
466
+ locator: string;
467
+ from: string | null;
455
468
  roomVersion: string;
469
+ read(): Promise<RefreshPage>;
470
+ };
471
+ export type AuthorityChange = {
472
+ kind: 'authority-changed';
473
+ rooms: readonly DiscoveredRoom[];
474
+ left: readonly string[];
475
+ member?: Member;
456
476
  };
457
- export type HeldRevisions = (locator: string, paths: readonly string[]) => Promise<ReadonlyMap<string, string>>;
458
477
  export type RoomStreamEvent = {
459
478
  kind: 'opened';
479
+ } | {
480
+ kind: 'discovered';
481
+ discovery: Discovery;
460
482
  } | {
461
483
  kind: 'closed';
462
484
  revoked: boolean;
463
485
  lost: boolean;
486
+ authorityChanged: boolean;
464
487
  } | {
465
- kind: 'opening';
488
+ kind: 'caught-up';
466
489
  expired: readonly string[];
467
- } | {
468
- kind: 'authority-changed';
469
- scope?: DiscoveryScope;
470
- } | {
471
- kind: 'room-version';
472
- locator: string;
473
- roomVersion: string;
474
- };
475
- export type KeptReceipt = {
476
- key: string;
477
- head: unknown;
478
- };
479
- export type StreamReceipts = {
480
- heads(): Promise<readonly KeptReceipt[]>;
481
- parts(key: string, count: number): Promise<readonly unknown[]>;
482
- keep(key: string, head: unknown, part?: {
483
- index: number;
484
- value: unknown;
485
- }): Promise<void>;
486
- drop(keys: readonly string[]): Promise<void>;
487
- };
490
+ } | AuthorityChange | RoomChange;
488
491
  export type RoomStream = {
489
492
  hold(rooms: readonly HeldRoom[]): void;
490
- reopen(): void;
491
- published(locator: string, roomVersion: string): void;
492
- observe(notify: (event: RoomStreamEvent) => void, receipts: StreamReceipts, revisions: HeldRevisions): () => void;
493
+ observe(notify: (event: RoomStreamEvent) => void): () => void;
493
494
  };
495
+ export type PathRule = (path: string) => boolean;
494
496
  export type Adapter = {
495
497
  readonly localSaves?: true;
496
- readonly exhaustiveDiscovery?: true;
497
498
  readonly roomTypes?: string;
499
+ readonly nameableRoomTypes?: readonly string[];
500
+ readonly typedPaths?: readonly TypedPath[];
501
+ readonly pathRule?: PathRule;
502
+ readonly unkeptReads?: readonly string[];
503
+ readonly leadingReads?: readonly string[];
498
504
  authorize(): Promise<Authorization>;
499
- discover(authorization: Authorization, scope?: DiscoveryScope): Promise<DiscoverResult>;
505
+ discover?(authorization: Authorization): Promise<DiscoverResult>;
500
506
  bootstrap(authorization: Authorization, request: BootstrapRequest): Promise<BootstrapResult>;
501
- refresh(authorization: Authorization, request: RefreshRequest): Promise<RefreshResult>;
507
+ refresh?(authorization: Authorization, request: RefreshRequest): Promise<RefreshResult>;
502
508
  mutate(authorization: Authorization, request: MutationRequest, keep: (upload: unknown) => Promise<void>): Promise<MutationResult>;
503
509
  history(authorization: Authorization, request: HistoryRequest): Promise<HistoryResult>;
504
510
  binary(authorization: Authorization, request: BinaryRequest): Promise<BinaryResult>;
505
511
  link(authorization: Authorization, request: BinaryRequest): Promise<BinaryLinkResult>;
512
+ attach(authorization: Authorization, request: AttachRequest): Promise<AttachResult>;
506
513
  action(authorization: Authorization, request: ActionRequest): Promise<ActionResult>;
514
+ search?(authorization: Authorization, request: SearchAsk): Promise<SearchAnswer>;
507
515
  reached(locator: string, roomVersion: string, target: string): boolean;
508
516
  follows(locator: string, roomVersion: string, next: string): boolean;
509
517
  roomStream?: RoomStream;
510
518
  conversations?: ConversationStream;
511
519
  serviceMode?: ServiceModeSignal;
512
520
  };
513
- export {};
514
521
  //# sourceMappingURL=adapter.d.ts.map