@agentshouse/mdruntime 0.1.0-cd50a4607cb7d → 0.1.0-cd71aba4d0215

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 (385) hide show
  1. package/README.md +19 -16
  2. package/dist/acceptance.d.ts +3 -0
  3. package/dist/acceptance.d.ts.map +1 -0
  4. package/dist/acceptance.js +318 -0
  5. package/dist/act-lanes.d.ts +33 -0
  6. package/dist/act-lanes.d.ts.map +1 -0
  7. package/dist/act-lanes.js +177 -0
  8. package/dist/actions.d.ts +25 -0
  9. package/dist/actions.d.ts.map +1 -0
  10. package/dist/actions.js +261 -0
  11. package/dist/adapter.d.ts +175 -116
  12. package/dist/adapter.d.ts.map +1 -1
  13. package/dist/attached-model.d.ts +7 -10
  14. package/dist/attached-model.d.ts.map +1 -1
  15. package/dist/attached-model.js +40 -41
  16. package/dist/binary.d.ts +0 -5
  17. package/dist/binary.d.ts.map +1 -1
  18. package/dist/binary.js +1 -1
  19. package/dist/bootstrap.d.ts +31 -11
  20. package/dist/bootstrap.d.ts.map +1 -1
  21. package/dist/bootstrap.js +309 -109
  22. package/dist/cell.d.ts +6 -0
  23. package/dist/cell.d.ts.map +1 -0
  24. package/dist/cell.js +9 -0
  25. package/dist/chain.d.ts +12 -0
  26. package/dist/chain.d.ts.map +1 -0
  27. package/dist/chain.js +64 -0
  28. package/dist/change-set.d.ts +13 -16
  29. package/dist/change-set.d.ts.map +1 -1
  30. package/dist/change-set.js +17 -88
  31. package/dist/change.d.ts +32 -1
  32. package/dist/change.d.ts.map +1 -1
  33. package/dist/change.js +14 -3
  34. package/dist/chat-types.d.ts +5 -0
  35. package/dist/chat-types.d.ts.map +1 -0
  36. package/dist/chat-types.js +13 -0
  37. package/dist/client.d.ts +41 -19
  38. package/dist/client.d.ts.map +1 -1
  39. package/dist/client.js +129 -25
  40. package/dist/collection.d.ts +29 -21
  41. package/dist/collection.d.ts.map +1 -1
  42. package/dist/collection.js +48 -290
  43. package/dist/compile.d.ts +16 -0
  44. package/dist/compile.d.ts.map +1 -0
  45. package/dist/compile.js +711 -0
  46. package/dist/connection.d.ts +7 -118
  47. package/dist/connection.d.ts.map +1 -1
  48. package/dist/connection.js +111 -2972
  49. package/dist/context.d.ts +2 -0
  50. package/dist/context.d.ts.map +1 -0
  51. package/dist/{chat/context.js → context.js} +1 -4
  52. package/dist/conversation-live.d.ts +138 -0
  53. package/dist/conversation-live.d.ts.map +1 -0
  54. package/dist/conversation-live.js +249 -0
  55. package/dist/conversation-row.d.ts +33 -0
  56. package/dist/conversation-row.d.ts.map +1 -0
  57. package/dist/conversation-row.js +53 -0
  58. package/dist/conversation.d.ts +72 -47
  59. package/dist/conversation.d.ts.map +1 -1
  60. package/dist/conversation.js +1036 -690
  61. package/dist/declaration.d.ts +10 -0
  62. package/dist/declaration.d.ts.map +1 -0
  63. package/dist/declaration.js +24 -0
  64. package/dist/digest.d.ts +7 -0
  65. package/dist/digest.d.ts.map +1 -0
  66. package/dist/digest.js +113 -0
  67. package/dist/discovery.d.ts +10 -0
  68. package/dist/discovery.d.ts.map +1 -0
  69. package/dist/discovery.js +153 -0
  70. package/dist/durability.d.ts +22 -1
  71. package/dist/durability.d.ts.map +1 -1
  72. package/dist/durability.js +5 -0
  73. package/dist/entry.d.ts +5 -2
  74. package/dist/entry.d.ts.map +1 -1
  75. package/dist/entry.js +33 -28
  76. package/dist/expectation.d.ts +4 -2
  77. package/dist/expectation.d.ts.map +1 -1
  78. package/dist/expectation.js +33 -11
  79. package/dist/failure.d.ts +3 -0
  80. package/dist/failure.d.ts.map +1 -1
  81. package/dist/failure.js +6 -0
  82. package/dist/figures.d.ts +49 -0
  83. package/dist/figures.d.ts.map +1 -0
  84. package/dist/figures.js +197 -0
  85. package/dist/file.d.ts +2 -19
  86. package/dist/file.d.ts.map +1 -1
  87. package/dist/file.js +7 -122
  88. package/dist/holdings.d.ts +29 -0
  89. package/dist/holdings.d.ts.map +1 -0
  90. package/dist/holdings.js +95 -0
  91. package/dist/host.d.ts +26 -4
  92. package/dist/host.d.ts.map +1 -1
  93. package/dist/host.js +161 -25
  94. package/dist/identity.d.ts +0 -2
  95. package/dist/identity.d.ts.map +1 -1
  96. package/dist/identity.js +0 -6
  97. package/dist/index.d.ts +39 -13
  98. package/dist/index.d.ts.map +1 -1
  99. package/dist/index.js +17 -2
  100. package/dist/install.d.ts +54 -0
  101. package/dist/install.d.ts.map +1 -0
  102. package/dist/install.js +539 -0
  103. package/dist/lifecycle.d.ts +7 -0
  104. package/dist/lifecycle.d.ts.map +1 -0
  105. package/dist/lifecycle.js +279 -0
  106. package/dist/listing.d.ts +48 -0
  107. package/dist/listing.d.ts.map +1 -0
  108. package/dist/listing.js +139 -0
  109. package/dist/live.d.ts +23 -0
  110. package/dist/live.d.ts.map +1 -0
  111. package/dist/live.js +165 -0
  112. package/dist/locks.d.ts +7 -0
  113. package/dist/locks.d.ts.map +1 -0
  114. package/dist/locks.js +33 -0
  115. package/dist/log.d.ts +1 -0
  116. package/dist/log.d.ts.map +1 -1
  117. package/dist/lost.d.ts +5 -0
  118. package/dist/lost.d.ts.map +1 -0
  119. package/dist/lost.js +50 -0
  120. package/dist/media.d.ts +8 -0
  121. package/dist/media.d.ts.map +1 -0
  122. package/dist/media.js +218 -0
  123. package/dist/memory.d.ts +22 -7
  124. package/dist/memory.d.ts.map +1 -1
  125. package/dist/memory.js +278 -110
  126. package/dist/messages.d.ts +49 -0
  127. package/dist/messages.d.ts.map +1 -0
  128. package/dist/messages.js +150 -0
  129. package/dist/model.d.ts +11 -13
  130. package/dist/model.d.ts.map +1 -1
  131. package/dist/model.js +7 -24
  132. package/dist/models.d.ts +10 -0
  133. package/dist/models.d.ts.map +1 -0
  134. package/dist/models.js +156 -0
  135. package/dist/name.d.ts +4 -0
  136. package/dist/name.d.ts.map +1 -0
  137. package/dist/name.js +122 -0
  138. package/dist/observation.d.ts +17 -2
  139. package/dist/observation.d.ts.map +1 -1
  140. package/dist/observation.js +107 -17
  141. package/dist/opened.d.ts +22 -0
  142. package/dist/opened.d.ts.map +1 -0
  143. package/dist/opened.js +107 -0
  144. package/dist/opening.d.ts +4 -0
  145. package/dist/opening.d.ts.map +1 -0
  146. package/dist/opening.js +59 -0
  147. package/dist/outcome.d.ts +52 -8
  148. package/dist/outcome.d.ts.map +1 -1
  149. package/dist/outcome.js +57 -0
  150. package/dist/overlay.d.ts +5 -5
  151. package/dist/overlay.d.ts.map +1 -1
  152. package/dist/overlay.js +127 -166
  153. package/dist/page-metadata.d.ts +8 -0
  154. package/dist/page-metadata.d.ts.map +1 -0
  155. package/dist/page-metadata.js +19 -0
  156. package/dist/parts.d.ts +11 -0
  157. package/dist/parts.d.ts.map +1 -0
  158. package/dist/parts.js +21 -0
  159. package/dist/paths.d.ts +2 -0
  160. package/dist/paths.d.ts.map +1 -1
  161. package/dist/paths.js +26 -0
  162. package/dist/preparation.d.ts +20 -0
  163. package/dist/preparation.d.ts.map +1 -0
  164. package/dist/preparation.js +233 -0
  165. package/dist/presence.d.ts +52 -0
  166. package/dist/presence.d.ts.map +1 -0
  167. package/dist/presence.js +220 -0
  168. package/dist/queries.d.ts +16 -0
  169. package/dist/queries.d.ts.map +1 -0
  170. package/dist/queries.js +270 -0
  171. package/dist/query.d.ts +27 -186
  172. package/dist/query.d.ts.map +1 -1
  173. package/dist/query.js +3 -464
  174. package/dist/{chat/questions.d.ts → questions.d.ts} +5 -2
  175. package/dist/questions.d.ts.map +1 -0
  176. package/dist/{chat/questions.js → questions.js} +13 -2
  177. package/dist/queue.d.ts +40 -0
  178. package/dist/queue.d.ts.map +1 -0
  179. package/dist/queue.js +455 -0
  180. package/dist/reach.d.ts +21 -7
  181. package/dist/reach.d.ts.map +1 -1
  182. package/dist/reach.js +315 -96
  183. package/dist/react.d.ts +25 -4
  184. package/dist/react.d.ts.map +1 -1
  185. package/dist/react.js +22 -18
  186. package/dist/{chat/read.d.ts → read.d.ts} +2 -0
  187. package/dist/read.d.ts.map +1 -0
  188. package/dist/{chat/read.js → read.js} +4 -0
  189. package/dist/readiness.d.ts +49 -0
  190. package/dist/readiness.d.ts.map +1 -0
  191. package/dist/readiness.js +27 -0
  192. package/dist/reads.d.ts +39 -0
  193. package/dist/reads.d.ts.map +1 -0
  194. package/dist/reads.js +178 -0
  195. package/dist/recovery.d.ts +5 -2
  196. package/dist/recovery.d.ts.map +1 -1
  197. package/dist/recovery.js +65 -8
  198. package/dist/refresh.d.ts +17 -14
  199. package/dist/refresh.d.ts.map +1 -1
  200. package/dist/refresh.js +145 -54
  201. package/dist/refusal.d.ts +5 -0
  202. package/dist/refusal.d.ts.map +1 -0
  203. package/dist/refusal.js +57 -0
  204. package/dist/replica.d.ts +50 -33
  205. package/dist/replica.d.ts.map +1 -1
  206. package/dist/replica.js +338 -189
  207. package/dist/retried.d.ts +30 -0
  208. package/dist/retried.d.ts.map +1 -0
  209. package/dist/retried.js +72 -0
  210. package/dist/room-draft.d.ts +39 -10
  211. package/dist/room-draft.d.ts.map +1 -1
  212. package/dist/room-draft.js +186 -115
  213. package/dist/room-drafts.d.ts +24 -0
  214. package/dist/room-drafts.d.ts.map +1 -0
  215. package/dist/room-drafts.js +217 -0
  216. package/dist/rows.d.ts +31 -29
  217. package/dist/rows.d.ts.map +1 -1
  218. package/dist/rows.js +60 -118
  219. package/dist/runtime.d.ts +36 -0
  220. package/dist/runtime.d.ts.map +1 -0
  221. package/dist/runtime.js +1 -0
  222. package/dist/save.d.ts +42 -48
  223. package/dist/save.d.ts.map +1 -1
  224. package/dist/save.js +715 -248
  225. package/dist/saves.d.ts +32 -0
  226. package/dist/saves.d.ts.map +1 -0
  227. package/dist/saves.js +413 -0
  228. package/dist/search.d.ts +15 -77
  229. package/dist/search.d.ts.map +1 -1
  230. package/dist/search.js +10 -186
  231. package/dist/seed.d.ts +25 -0
  232. package/dist/seed.d.ts.map +1 -0
  233. package/dist/seed.js +145 -0
  234. package/dist/shared.d.ts +6 -7
  235. package/dist/shared.d.ts.map +1 -1
  236. package/dist/shared.js +75 -104
  237. package/dist/shown.d.ts +32 -0
  238. package/dist/shown.d.ts.map +1 -0
  239. package/dist/shown.js +290 -0
  240. package/dist/socket/admission.d.ts +7 -0
  241. package/dist/socket/admission.d.ts.map +1 -0
  242. package/dist/socket/admission.js +39 -0
  243. package/dist/socket/answers.d.ts +6 -0
  244. package/dist/socket/answers.d.ts.map +1 -0
  245. package/dist/socket/answers.js +20 -0
  246. package/dist/socket/lanes.d.ts +21 -0
  247. package/dist/socket/lanes.d.ts.map +1 -0
  248. package/dist/socket/lanes.js +80 -0
  249. package/dist/socket/reads.d.ts +10 -0
  250. package/dist/socket/reads.d.ts.map +1 -0
  251. package/dist/socket/reads.js +31 -0
  252. package/dist/socket/session.d.ts +38 -0
  253. package/dist/socket/session.d.ts.map +1 -0
  254. package/dist/socket/session.js +23 -0
  255. package/dist/socket.d.ts +68 -0
  256. package/dist/socket.d.ts.map +1 -0
  257. package/dist/socket.js +171 -0
  258. package/dist/source.d.ts +61 -0
  259. package/dist/source.d.ts.map +1 -0
  260. package/dist/source.js +82 -0
  261. package/dist/status.d.ts +4 -5
  262. package/dist/status.d.ts.map +1 -1
  263. package/dist/status.js +3 -7
  264. package/dist/store/installs.d.ts +30 -0
  265. package/dist/store/installs.d.ts.map +1 -0
  266. package/dist/store/installs.js +34 -0
  267. package/dist/store/readiness.d.ts +10 -0
  268. package/dist/store/readiness.d.ts.map +1 -0
  269. package/dist/store/readiness.js +52 -0
  270. package/dist/store/records.d.ts +212 -0
  271. package/dist/store/records.d.ts.map +1 -0
  272. package/dist/store/records.js +430 -0
  273. package/dist/store/room-held.d.ts +8 -0
  274. package/dist/store/room-held.d.ts.map +1 -0
  275. package/dist/store/room-held.js +17 -0
  276. package/dist/store/space.d.ts +11 -0
  277. package/dist/store/space.d.ts.map +1 -0
  278. package/dist/store/space.js +41 -0
  279. package/dist/store/watchers.d.ts +17 -0
  280. package/dist/store/watchers.d.ts.map +1 -0
  281. package/dist/store/watchers.js +56 -0
  282. package/dist/store/writes.d.ts +24 -0
  283. package/dist/store/writes.d.ts.map +1 -0
  284. package/dist/store/writes.js +125 -0
  285. package/dist/store.d.ts +111 -142
  286. package/dist/store.d.ts.map +1 -1
  287. package/dist/store.js +159 -687
  288. package/dist/stored.d.ts +156 -0
  289. package/dist/stored.d.ts.map +1 -0
  290. package/dist/stored.js +649 -0
  291. package/dist/surface.d.ts +88 -0
  292. package/dist/surface.d.ts.map +1 -0
  293. package/dist/surface.js +223 -0
  294. package/dist/sync.d.ts +19 -0
  295. package/dist/sync.d.ts.map +1 -0
  296. package/dist/sync.js +540 -0
  297. package/dist/tables.d.ts +412 -0
  298. package/dist/tables.d.ts.map +1 -0
  299. package/dist/tables.js +737 -0
  300. package/dist/tallies.d.ts +18 -0
  301. package/dist/tallies.d.ts.map +1 -0
  302. package/dist/tallies.js +129 -0
  303. package/dist/transfer.d.ts +0 -5
  304. package/dist/transfer.d.ts.map +1 -1
  305. package/dist/turn.d.ts +5 -3
  306. package/dist/turn.d.ts.map +1 -1
  307. package/dist/turn.js +51 -21
  308. package/dist/validation.d.ts +29 -0
  309. package/dist/validation.d.ts.map +1 -0
  310. package/dist/validation.js +104 -0
  311. package/dist/windows.d.ts +11 -0
  312. package/dist/windows.d.ts.map +1 -0
  313. package/dist/windows.js +16 -0
  314. package/dist/wire.d.ts +220 -36
  315. package/dist/wire.d.ts.map +1 -1
  316. package/dist/wire.js +73 -33
  317. package/package.json +19 -19
  318. package/AGENTS.md +0 -296
  319. package/dist/attempt.d.ts +0 -16
  320. package/dist/attempt.d.ts.map +0 -1
  321. package/dist/attempt.js +0 -70
  322. package/dist/chat/acts.d.ts +0 -33
  323. package/dist/chat/acts.d.ts.map +0 -1
  324. package/dist/chat/acts.js +0 -36
  325. package/dist/chat/context.d.ts +0 -3
  326. package/dist/chat/context.d.ts.map +0 -1
  327. package/dist/chat/input.d.ts +0 -9
  328. package/dist/chat/input.d.ts.map +0 -1
  329. package/dist/chat/input.js +0 -99
  330. package/dist/chat/kit.d.ts +0 -60
  331. package/dist/chat/kit.d.ts.map +0 -1
  332. package/dist/chat/kit.js +0 -123
  333. package/dist/chat/lasting.d.ts +0 -6
  334. package/dist/chat/lasting.d.ts.map +0 -1
  335. package/dist/chat/lasting.js +0 -19
  336. package/dist/chat/list.d.ts +0 -26
  337. package/dist/chat/list.d.ts.map +0 -1
  338. package/dist/chat/list.js +0 -62
  339. package/dist/chat/markdown.d.ts +0 -20
  340. package/dist/chat/markdown.d.ts.map +0 -1
  341. package/dist/chat/markdown.js +0 -188
  342. package/dist/chat/message.d.ts +0 -6
  343. package/dist/chat/message.d.ts.map +0 -1
  344. package/dist/chat/message.js +0 -192
  345. package/dist/chat/messages.d.ts +0 -21
  346. package/dist/chat/messages.d.ts.map +0 -1
  347. package/dist/chat/messages.js +0 -151
  348. package/dist/chat/name.d.ts +0 -6
  349. package/dist/chat/name.d.ts.map +0 -1
  350. package/dist/chat/name.js +0 -37
  351. package/dist/chat/opened.d.ts +0 -11
  352. package/dist/chat/opened.d.ts.map +0 -1
  353. package/dist/chat/opened.js +0 -17
  354. package/dist/chat/overlay.d.ts +0 -31
  355. package/dist/chat/overlay.d.ts.map +0 -1
  356. package/dist/chat/overlay.js +0 -97
  357. package/dist/chat/parts.d.ts +0 -57
  358. package/dist/chat/parts.d.ts.map +0 -1
  359. package/dist/chat/parts.js +0 -119
  360. package/dist/chat/process.d.ts +0 -20
  361. package/dist/chat/process.d.ts.map +0 -1
  362. package/dist/chat/process.js +0 -32
  363. package/dist/chat/provider.d.ts +0 -63
  364. package/dist/chat/provider.d.ts.map +0 -1
  365. package/dist/chat/provider.js +0 -620
  366. package/dist/chat/question.d.ts +0 -9
  367. package/dist/chat/question.d.ts.map +0 -1
  368. package/dist/chat/question.js +0 -80
  369. package/dist/chat/questions.d.ts.map +0 -1
  370. package/dist/chat/read.d.ts.map +0 -1
  371. package/dist/chat/ready.d.ts +0 -33
  372. package/dist/chat/ready.d.ts.map +0 -1
  373. package/dist/chat/ready.js +0 -91
  374. package/dist/chat/style.d.ts +0 -4
  375. package/dist/chat/style.d.ts.map +0 -1
  376. package/dist/chat/style.js +0 -302
  377. package/dist/chat.d.ts +0 -14
  378. package/dist/chat.d.ts.map +0 -1
  379. package/dist/chat.js +0 -8
  380. package/dist/fence.d.ts +0 -6
  381. package/dist/fence.d.ts.map +0 -1
  382. package/dist/fence.js +0 -10
  383. package/dist/read-side.d.ts +0 -25
  384. package/dist/read-side.d.ts.map +0 -1
  385. package/dist/read-side.js +0 -639
package/dist/memory.js CHANGED
@@ -1,7 +1,12 @@
1
+ import { definitionAt, documentFacts, parse } from '@agentshouse/mdmodel';
2
+ import { NO_ROOM_TYPES, schemaTypes } from './attached-model.js';
1
3
  import { sameChange } from './overlay.js';
4
+ const ATTACHMENTS = 'attachments';
5
+ function lastName(path) {
6
+ return path.slice(path.lastIndexOf('/') + 1);
7
+ }
2
8
  const FIXTURE_RETENTION = {
3
9
  history: { kind: 'duration', seconds: 1 },
4
- outcome: 604_800,
5
10
  refreshHorizon: 1,
6
11
  };
7
12
  function declaredRetention(value) {
@@ -15,12 +20,7 @@ function declaredRetention(value) {
15
20
  }
16
21
  const MODEL_ABSENT = { kind: 'model-unavailable', reason: 'not-readable' };
17
22
  function modelsOf(room) {
18
- return {
19
- collection: room.model ?? MODEL_ABSENT,
20
- ...(room.typedSelection === undefined
21
- ? {}
22
- : { selection: room.selectionModel ?? MODEL_ABSENT }),
23
- };
23
+ return { collection: room.model ?? MODEL_ABSENT };
24
24
  }
25
25
  function changedModels(room, from) {
26
26
  const now = modelsOf(room);
@@ -53,13 +53,16 @@ export function createMemoryAdapter(options = {}) {
53
53
  const listeners = new Set();
54
54
  const modeObservers = new Set();
55
55
  const scripted = new Map();
56
- const unsealed = new Map();
57
- const sealed = new Set();
58
- const sentTurns = new Map();
56
+ const repeats = new Map();
59
57
  const historyPageSize = options.historyPageSize;
60
- let held = [];
58
+ const attached = new Map();
59
+ const linked = new WeakMap();
60
+ const carried = new Map();
61
61
  let expiring = [];
62
+ let openings = 0;
63
+ const declaredRooms = new Set();
62
64
  let replicated = [];
65
+ let heldCursor = null;
63
66
  let issued = 0;
64
67
  function scriptConversations(entries) {
65
68
  scripted.clear();
@@ -87,8 +90,50 @@ export function createMemoryAdapter(options = {}) {
87
90
  const wanted = ordinals.get(`${locator}\u0000${target}`);
88
91
  return held !== undefined && wanted !== undefined && held >= wanted;
89
92
  }
93
+ function heldBlob(room, path) {
94
+ return attached.get(`${room.locator}\u0000${path}`) ?? room.blobs?.[path];
95
+ }
96
+ function freePath(room, name) {
97
+ const dot = name.lastIndexOf('.');
98
+ const stem = dot > 0 ? name.slice(0, dot) : name;
99
+ const extension = dot > 0 ? name.slice(dot) : '';
100
+ for (let count = 1;; count += 1) {
101
+ const path = `${ATTACHMENTS}/${count === 1 ? stem : `${stem}-${count}`}${extension}`;
102
+ if (heldBlob(room, path) === undefined && room.documents?.[path] === undefined)
103
+ return path;
104
+ }
105
+ }
106
+ const saved = new WeakMap();
107
+ function factsAt(room, path, content) {
108
+ const types = schemaTypes(room.model?.kind === 'model' ? room.model.snapshot.schema : null, NO_ROOM_TYPES);
109
+ let held = saved.get(types);
110
+ if (held === undefined) {
111
+ held = new Map();
112
+ saved.set(types, held);
113
+ }
114
+ const key = `${path}\u0000${content}`;
115
+ if (!held.has(key)) {
116
+ const facts = documentFacts(path, parse(content, path, definitionAt({ types }, path, options.typedPaths)), {
117
+ types,
118
+ });
119
+ held.set(key, facts === null ? null : JSON.parse(JSON.stringify(facts)));
120
+ }
121
+ return held.get(key);
122
+ }
123
+ function factsIn(room, paths) {
124
+ const facts = {};
125
+ for (const path of paths) {
126
+ const content = room.documents?.[path];
127
+ const held = room.facts?.[path] ?? (content === undefined ? null : factsAt(room, path, content));
128
+ if (held !== null)
129
+ facts[path] = held;
130
+ }
131
+ return facts;
132
+ }
90
133
  function retain(entries) {
91
134
  for (const room of entries) {
135
+ for (const [path, content] of Object.entries(room.documents ?? {}))
136
+ factsAt(room, path, content);
92
137
  note(room.locator, room);
93
138
  const versions = served.get(room.locator) ?? new Map();
94
139
  versions.set(room.roomVersion, room);
@@ -104,8 +149,9 @@ export function createMemoryAdapter(options = {}) {
104
149
  roomVersion: room.roomVersion,
105
150
  operations: room.operations,
106
151
  replica: room.replica,
107
- ...(room.typedSelection === undefined ? {} : { typedSelection: room.typedSelection }),
152
+ typedSelection: room.typedSelection ?? null,
108
153
  providerOwnedPaths: room.providerOwnedPaths,
154
+ authoredPaths: room.authoredPaths ?? ['**'],
109
155
  };
110
156
  }
111
157
  function page(room, after) {
@@ -121,23 +167,43 @@ export function createMemoryAdapter(options = {}) {
121
167
  roomVersion: room.roomVersion,
122
168
  ...(opening ? { models: modelsOf(room) } : {}),
123
169
  documents: named(room.documents ?? {}, taken),
170
+ facts: factsIn(room, taken),
124
171
  revisions: named(room.revisions ?? {}, [...taken, ...targets]),
172
+ ...(room.fileIds === undefined
173
+ ? {}
174
+ : { fileIds: named(room.fileIds, [...taken, ...targets]) }),
175
+ ...(room.created === undefined
176
+ ? {}
177
+ : { created: named(room.created, [...taken, ...targets]) }),
125
178
  changes: named(room.changes ?? {}, [...taken, ...targets]),
126
179
  binaryFiles: named(room.binaryFiles ?? {}, targets),
180
+ ...(opening && room.folders !== undefined ? { folders: room.folders } : {}),
127
181
  ...(next < paths.length ? { pageToken: taken.at(-1) } : {}),
128
182
  };
129
183
  }
130
- function advancement(room, from, at) {
184
+ function foldersMoved(room, from) {
185
+ const now = new Set(room.folders ?? []);
186
+ const before = new Set(from.folders ?? []);
187
+ const folders = [...now].filter((folder) => !before.has(folder)).sort();
188
+ const folderRemovals = [...before].filter((folder) => !now.has(folder)).sort();
189
+ return {
190
+ ...(folders.length === 0 ? {} : { folders }),
191
+ ...(folderRemovals.length === 0 ? {} : { folderRemovals }),
192
+ };
193
+ }
194
+ function advancement(room, from, at, whole = false) {
131
195
  const current = room.documents ?? {};
132
196
  const previous = from.documents ?? {};
133
197
  const currentTargets = new Set(Object.keys(room.binaryFiles ?? {}));
134
198
  const previousTargets = new Set(Object.keys(from.binaryFiles ?? {}));
135
199
  const headMoved = (path) => room.revisions?.[path] !== from.revisions?.[path] ||
200
+ room.fileIds?.[path] !== from.fileIds?.[path] ||
201
+ room.created?.[path] !== from.created?.[path] ||
136
202
  !sameChange(room.changes?.[path], from.changes?.[path]);
137
203
  const changed = Object.keys(current)
138
204
  .filter((path) => current[path] !== previous[path] || headMoved(path))
139
205
  .sort();
140
- const size = pageSize ?? changed.length;
206
+ const size = whole ? changed.length : (pageSize ?? changed.length);
141
207
  const taken = changed.slice(at, at + size);
142
208
  const next = at + taken.length;
143
209
  const opening = at === 0;
@@ -153,9 +219,17 @@ export function createMemoryAdapter(options = {}) {
153
219
  roomVersion: room.roomVersion,
154
220
  ...(models === undefined ? {} : { models }),
155
221
  documents: named(current, taken),
222
+ facts: factsIn(room, taken),
156
223
  revisions: named(room.revisions ?? {}, [...taken, ...targets]),
224
+ ...(room.fileIds === undefined
225
+ ? {}
226
+ : { fileIds: named(room.fileIds, [...taken, ...targets]) }),
227
+ ...(room.created === undefined
228
+ ? {}
229
+ : { created: named(room.created, [...taken, ...targets]) }),
157
230
  changes: named(room.changes ?? {}, [...taken, ...targets]),
158
231
  binaryFiles: named(room.binaryFiles ?? {}, targets),
232
+ ...(opening ? foldersMoved(room, from) : {}),
159
233
  removals: opening
160
234
  ? [
161
235
  ...Object.keys(previous).filter((path) => !(path in current) && !currentTargets.has(path)),
@@ -165,30 +239,45 @@ export function createMemoryAdapter(options = {}) {
165
239
  ...(pageToken === undefined ? {} : { pageToken }),
166
240
  };
167
241
  }
242
+ function carry(locator) {
243
+ const at = carried.get(locator);
244
+ const current = rooms.find((entry) => entry.locator === locator);
245
+ if (at === undefined || current === undefined || current.roomVersion === at)
246
+ return;
247
+ const from = served.get(locator)?.get(at);
248
+ carried.set(locator, current.roomVersion);
249
+ if (from === undefined)
250
+ return;
251
+ const page = advancement(current, from, 0, true);
252
+ for (const observer of observers) {
253
+ observer({
254
+ kind: 'room-change',
255
+ locator,
256
+ from: at,
257
+ roomVersion: current.roomVersion,
258
+ read: async () => page,
259
+ });
260
+ }
261
+ }
168
262
  function pageOf(conversation, after) {
169
263
  const messages = conversation.messages ?? [];
170
- const first = typeof after === 'string' ? messages.findIndex((message) => message.position > after) : 0;
264
+ const first = typeof after === 'string' ? messages.findIndex((message) => message.change > after) : 0;
171
265
  const from = first === -1 ? messages.length : first;
172
266
  const page = messages.slice(from, from + (historyPageSize ?? messages.length));
173
267
  const last = page.at(-1);
174
268
  return {
175
269
  conversation: conversation.conversation,
176
270
  messages: page,
177
- ...(last !== undefined && from + page.length < messages.length
178
- ? { next: last.position }
179
- : {}),
271
+ ...(last !== undefined && from + page.length < messages.length ? { next: last.change } : {}),
180
272
  };
181
273
  }
182
- function historiesOf(input) {
183
- const asked = input?.conversations;
184
- if (!Array.isArray(asked))
185
- return { kind: 'rejected', code: 'invalid_request', fields: {}, retryable: false };
274
+ function historiesOf(request) {
186
275
  const histories = [];
187
- for (const entry of asked) {
188
- const conversation = typeof entry.conversation === 'string' ? scripted.get(entry.conversation) : undefined;
276
+ for (const entry of request.conversations) {
277
+ const conversation = scripted.get(entry.conversation);
189
278
  if (conversation === undefined)
190
279
  continue;
191
- const outcome = conversation.outcomes?.['conversation.history'];
280
+ const outcome = conversation.outcomes?.history;
192
281
  if (outcome !== undefined)
193
282
  return outcome;
194
283
  histories.push(pageOf(conversation, entry.after));
@@ -199,15 +288,22 @@ export function createMemoryAdapter(options = {}) {
199
288
  function conversationAction(request) {
200
289
  const name = request.name;
201
290
  const input = (request.input ?? {});
202
- if (name === 'conversation.history')
203
- return historiesOf(request.input);
204
- if (name === 'conversation.create') {
291
+ const operation = typeof input.operation_id === 'string' ? `${name}\u0000${input.operation_id}` : null;
292
+ const first = (answer) => {
293
+ if (operation !== null)
294
+ repeats.set(operation, answer);
295
+ return answer;
296
+ };
297
+ const repeated = operation === null ? undefined : repeats.get(operation);
298
+ if (name === 'conversations/create') {
299
+ if (repeated !== undefined)
300
+ return repeated;
205
301
  issued += 1;
206
302
  const conversation = `conversation-${issued}`;
207
303
  scripted.set(conversation, { conversation });
208
- return { kind: 'action', result: { conversation } };
304
+ return first({ kind: 'action', result: { conversation_id: conversation } });
209
305
  }
210
- const named = typeof input.conversation === 'string' ? input.conversation : '';
306
+ const named = typeof input.conversation_id === 'string' ? input.conversation_id : '';
211
307
  const conversation = scripted.get(named);
212
308
  if (conversation === undefined) {
213
309
  return {
@@ -220,34 +316,34 @@ export function createMemoryAdapter(options = {}) {
220
316
  const outcome = conversation.outcomes?.[name];
221
317
  if (outcome !== undefined)
222
318
  return outcome;
223
- if (name === 'conversation.send') {
224
- const operation = typeof input.operation_id === 'string' ? input.operation_id : null;
225
- const answered = operation === null ? undefined : sentTurns.get(operation);
226
- if (answered !== undefined)
227
- return { kind: 'action', result: { turn: answered } };
319
+ if (name === 'conversations/send') {
320
+ if (repeated !== undefined)
321
+ return repeated;
228
322
  issued += 1;
229
- const turn = `turn-${issued}`;
230
- unsealed.set(turn, named);
231
- if (operation !== null)
232
- sentTurns.set(operation, turn);
233
- return { kind: 'action', result: { turn } };
234
- }
235
- if (name === 'conversation.cancel') {
236
- const turn = typeof input.turn === 'string' ? input.turn : '';
237
- if (sealed.has(turn) || !unsealed.has(turn)) {
238
- return { kind: 'rejected', code: 'turn-sealed', fields: { turn }, retryable: false };
239
- }
240
- unsealed.delete(turn);
241
- return { kind: 'action', result: { turn, cancelled: true } };
323
+ return first({ kind: 'action', result: { message_id: `turn-${issued}` } });
242
324
  }
243
- if (name === 'conversation.delete')
325
+ if (name === 'conversations/delete')
244
326
  scripted.delete(named);
245
- return { kind: 'action', result: { conversation: named } };
327
+ return { kind: 'action', result: { conversation_id: named } };
328
+ }
329
+ function decided(request) {
330
+ const { request: asked, message, decision, } = (request.input ?? {});
331
+ return {
332
+ kind: 'action',
333
+ result: {
334
+ request: asked,
335
+ ...(message === undefined ? {} : { message }),
336
+ state: decision === 'approve' ? 'started' : 'declined',
337
+ },
338
+ };
246
339
  }
247
340
  function announceList() {
248
- const entries = [...scripted.values()].flatMap(({ conversation, listed }) => listed === undefined ? [] : [{ conversation, ...listed }]);
249
- for (const listener of listeners)
250
- listener({ kind: 'list', entries });
341
+ const entries = [...scripted.values()].flatMap(({ conversation, listed, messages = [] }) => listed === undefined
342
+ ? []
343
+ : [{ conversation, ...listed, newest: messages.at(-1)?.change ?? null }]);
344
+ for (const listener of listeners) {
345
+ listener({ kind: 'list', entries, whole: true, more: false, cursor: null });
346
+ }
251
347
  }
252
348
  function discovery() {
253
349
  return {
@@ -259,8 +355,42 @@ export function createMemoryAdapter(options = {}) {
259
355
  ...(options.member === undefined ? {} : { member: options.member }),
260
356
  };
261
357
  }
358
+ function discovered() {
359
+ return resolveScript(scripts.discover, discovery, undefined).then((answer) => {
360
+ if (answer.kind === 'discovery')
361
+ for (const room of answer.rooms)
362
+ note(room.locator, room);
363
+ return answer;
364
+ });
365
+ }
366
+ function opened(notify) {
367
+ const opening = ++openings;
368
+ notify({ kind: 'opened' });
369
+ void discovered()
370
+ .catch(() => ({ kind: 'transport-uncertainty' }))
371
+ .then((answer) => {
372
+ if (opening !== openings)
373
+ return;
374
+ if (answer.kind !== 'discovery') {
375
+ openings += 1;
376
+ carried.clear();
377
+ const revoked = answer.kind === 'revoked-authorization';
378
+ notify({ kind: 'closed', revoked, lost: !revoked, authorityChanged: false });
379
+ return;
380
+ }
381
+ declaredRooms.clear();
382
+ for (const room of answer.rooms)
383
+ declaredRooms.add(room.locator);
384
+ notify({ kind: 'discovered', discovery: answer });
385
+ });
386
+ }
387
+ function emitAll(event) {
388
+ for (const observer of observers)
389
+ observer(event);
390
+ }
262
391
  return {
263
- ...(options.exhaustiveDiscovery === undefined ? {} : { exhaustiveDiscovery: true }),
392
+ ...(options.roomTypes === undefined ? {} : { roomTypes: options.roomTypes }),
393
+ ...(options.typedPaths === undefined ? {} : { typedPaths: options.typedPaths }),
264
394
  setRooms(next) {
265
395
  rooms = [...next];
266
396
  retain(rooms);
@@ -269,26 +399,37 @@ export function createMemoryAdapter(options = {}) {
269
399
  scriptConversations(next);
270
400
  },
271
401
  open() {
402
+ carried.clear();
272
403
  announceList();
273
- for (const observer of observers)
274
- observer({ kind: 'opened' });
404
+ opened(emitAll);
275
405
  },
276
- close(revoked = false) {
277
- for (const observer of observers)
278
- observer({ kind: 'closed', revoked });
406
+ close({ revoked = false, lost = !revoked, authorityChanged = false } = {}) {
407
+ openings += 1;
408
+ carried.clear();
409
+ emitAll({ kind: 'closed', revoked, lost, authorityChanged });
279
410
  },
280
411
  expire(locators) {
281
412
  expiring = [...locators];
282
413
  },
283
- notifyRoomVersion({ locator, roomVersion }) {
284
- for (const observer of observers)
285
- observer({ kind: 'room-version', locator, roomVersion });
414
+ notifyRoomVersion({ locator }) {
415
+ carry(locator);
416
+ },
417
+ notifyAuthorityChanged(locators) {
418
+ const named = new Set(locators ?? [...declaredRooms, ...rooms.map((room) => room.locator)]);
419
+ const listed = rooms.filter((room) => named.has(room.locator));
420
+ const left = [...named].filter((locator) => !listed.some((room) => room.locator === locator));
421
+ for (const room of listed)
422
+ declaredRooms.add(room.locator);
423
+ for (const locator of left)
424
+ declaredRooms.delete(locator);
425
+ emitAll({
426
+ kind: 'authority-changed',
427
+ rooms: listed.map(declared),
428
+ left,
429
+ ...(options.member === undefined ? {} : { member: options.member }),
430
+ });
286
431
  },
287
432
  notifyConversation(event) {
288
- if (event.kind === 'accepted-message') {
289
- sealed.add(event.message.turn);
290
- unsealed.delete(event.message.turn);
291
- }
292
433
  for (const listener of listeners)
293
434
  listener(event);
294
435
  },
@@ -297,21 +438,31 @@ export function createMemoryAdapter(options = {}) {
297
438
  observer(mode);
298
439
  },
299
440
  heldRooms() {
300
- return held;
441
+ return [...carried.keys()].sort();
301
442
  },
302
443
  replicatedConversations() {
303
444
  return replicated;
304
445
  },
446
+ heldConversationCursor() {
447
+ return heldCursor;
448
+ },
305
449
  conversations: {
306
450
  replicate(next) {
307
451
  replicated = [...next];
308
452
  },
453
+ hold(cursor) {
454
+ heldCursor = cursor;
455
+ },
309
456
  observe(notify) {
310
457
  listeners.add(notify);
311
458
  return () => {
312
459
  listeners.delete(notify);
313
460
  };
314
461
  },
462
+ history: (request) => Promise.resolve(historiesOf(request)),
463
+ ...(options.agents === undefined
464
+ ? {}
465
+ : { agents: () => Promise.resolve(structuredClone(options.agents)) }),
315
466
  },
316
467
  serviceMode: {
317
468
  observe(notify) {
@@ -323,43 +474,46 @@ export function createMemoryAdapter(options = {}) {
323
474
  },
324
475
  roomStream: {
325
476
  hold(asked) {
326
- held = asked.map((room) => room.locator);
327
- const expired = expiring.filter((locator) => held.includes(locator));
328
- expiring = [];
329
- const moved = asked.flatMap((room) => {
477
+ const named = asked.map((room) => room.locator);
478
+ const unknown = asked.flatMap((room) => {
330
479
  const current = rooms.find((entry) => entry.locator === room.locator);
480
+ const version = room.roomVersion;
331
481
  return current === undefined ||
332
- expired.includes(room.locator) ||
333
- current.roomVersion === room.roomVersion
482
+ (version !== null &&
483
+ (current.roomVersion === version || served.get(room.locator)?.has(version) === true))
334
484
  ? []
335
- : [{ locator: room.locator, roomVersion: current.roomVersion }];
485
+ : [room.locator];
336
486
  });
487
+ const expired = [
488
+ ...new Set([...expiring.filter((locator) => named.includes(locator)), ...unknown]),
489
+ ];
490
+ expiring = expiring.filter((locator) => !named.includes(locator));
337
491
  queueMicrotask(() => {
338
- for (const observer of observers) {
339
- for (const room of moved)
340
- observer({ kind: 'room-version', ...room });
341
- observer({ kind: 'opening', expired });
492
+ for (const room of asked) {
493
+ if (expired.includes(room.locator) || room.roomVersion === null)
494
+ carried.delete(room.locator);
495
+ else {
496
+ carried.set(room.locator, room.roomVersion);
497
+ carry(room.locator);
498
+ }
342
499
  }
500
+ emitAll({ kind: 'caught-up', expired });
343
501
  });
344
502
  },
345
- reopen() {
346
- queueMicrotask(() => {
347
- for (const observer of observers)
348
- observer({ kind: 'closed', revoked: false });
349
- });
350
- },
351
- published() { },
352
503
  observe(notify) {
353
504
  observers.add(notify);
354
505
  queueMicrotask(() => {
355
506
  if (!observers.has(notify))
356
507
  return;
357
508
  if (options.unopened === true) {
358
- notify({ kind: 'closed', revoked: false });
509
+ notify({ kind: 'closed', revoked: false, lost: true, authorityChanged: false });
359
510
  return;
360
511
  }
361
512
  announceList();
362
- notify({ kind: 'opened' });
513
+ opened((event) => {
514
+ if (observers.has(notify))
515
+ notify(event);
516
+ });
363
517
  });
364
518
  return () => {
365
519
  observers.delete(notify);
@@ -376,12 +530,7 @@ export function createMemoryAdapter(options = {}) {
376
530
  return resolveScript(scripts.authorize, () => ({}), undefined);
377
531
  },
378
532
  async discover(_authorization) {
379
- return resolveScript(scripts.discover, discovery, undefined).then((answer) => {
380
- if (answer.kind === 'discovery')
381
- for (const room of answer.rooms)
382
- note(room.locator, room);
383
- return answer;
384
- });
533
+ return discovered();
385
534
  },
386
535
  reached,
387
536
  follows(locator, roomVersion, next) {
@@ -438,7 +587,13 @@ export function createMemoryAdapter(options = {}) {
438
587
  retryable: false,
439
588
  affected: {},
440
589
  };
441
- }, request).then((answer) => note(request.locator, answer));
590
+ }, request).then((answer) => {
591
+ const destination = request.changeBatch.between?.destination.room;
592
+ if (answer.kind === 'accepted' && answer.destination !== undefined && destination) {
593
+ note(destination, answer.destination);
594
+ }
595
+ return note(request.locator, answer);
596
+ });
442
597
  },
443
598
  async history(_authorization, request) {
444
599
  return resolveScript(scripts.history, () => {
@@ -454,32 +609,45 @@ export function createMemoryAdapter(options = {}) {
454
609
  },
455
610
  async binary(_authorization, request) {
456
611
  return resolveScript(scripts.binary, () => {
457
- if (request.kind === 'reference') {
458
- return { kind: 'rejected', code: 'unscripted-binary', fields: {}, retryable: false };
459
- }
460
612
  const room = rooms.find((entry) => entry.locator === request.locator);
461
613
  if (room === undefined)
462
614
  return { kind: 'room-not-readable', locator: request.locator };
463
- const blob = room.blobs?.[request.path];
615
+ const blob = heldBlob(room, request.path);
464
616
  return blob === undefined
465
- ? { kind: 'rejected', code: 'file_not_found', fields: {}, retryable: false }
466
- : { kind: 'binary', blob };
617
+ ? { kind: 'rejected', code: 'not_found', fields: {}, retryable: false }
618
+ : { kind: 'binary', body: blob.stream(), mediaType: blob.type };
619
+ }, request);
620
+ },
621
+ async link(_authorization, request) {
622
+ return resolveScript(scripts.link, () => {
623
+ const room = rooms.find((entry) => entry.locator === request.locator);
624
+ if (room === undefined)
625
+ return { kind: 'room-not-readable', locator: request.locator };
626
+ const blob = heldBlob(room, request.path);
627
+ if (blob === undefined) {
628
+ return { kind: 'rejected', code: 'not_found', fields: {}, retryable: false };
629
+ }
630
+ const url = linked.get(blob) ?? URL.createObjectURL(blob);
631
+ linked.set(blob, url);
632
+ return { kind: 'link', url, name: lastName(request.path), mediaType: blob.type };
467
633
  }, request);
468
634
  },
469
- referrerScope(referrer) {
470
- if (typeof referrer !== 'object' || referrer === null)
471
- return null;
472
- const { room, path, message } = referrer;
473
- if (typeof message === 'string')
474
- return { kind: 'conversations' };
475
- if (typeof room !== 'string')
476
- return null;
477
- return { kind: 'room', locator: room, ...(typeof path === 'string' ? { path } : {}) };
635
+ async attach(_authorization, request) {
636
+ return resolveScript(scripts.attach, () => {
637
+ const room = rooms.find((entry) => entry.locator === request.locator);
638
+ if (room === undefined)
639
+ return { kind: 'room-not-readable', locator: request.locator };
640
+ const path = freePath(room, request.name);
641
+ attached.set(`${room.locator}\u0000${path}`, request.blob);
642
+ return { kind: 'attached', path, revision: `attached-${attached.size}` };
643
+ }, request);
478
644
  },
479
645
  async action(_authorization, request) {
480
646
  return resolveScript(scripts.action, () => {
481
- if (request.name.startsWith('conversation.'))
647
+ if (request.name.startsWith('conversations/'))
482
648
  return conversationAction(request);
649
+ if (request.name === 'agent-functions/decide')
650
+ return decided(request);
483
651
  return { kind: 'rejected', code: 'unscripted-action', fields: {}, retryable: false };
484
652
  }, request).then((answer) => {
485
653
  if (answer.kind === 'action' && answer.at !== undefined)
@@ -0,0 +1,49 @@
1
+ import type { AcceptedMessage } from './adapter.js';
2
+ import type { Connection } from './tables.js';
3
+ export declare const MESSAGE_TABLES: readonly string[];
4
+ export declare const ROWS = "WITH chosen AS (\n SELECT listed.value AS conversation,\n (SELECT id FROM conversation_messages WHERE conversation = listed.value AND json_extract(message, '$.role') = 'assistant' ORDER BY position DESC, identity DESC LIMIT 1) AS answer,\n (SELECT id FROM conversation_messages WHERE conversation = listed.value AND text <> '' ORDER BY position DESC, identity DESC LIMIT 1) AS said,\n (SELECT id FROM conversation_messages WHERE conversation = listed.value AND json_extract(message, '$.role') = 'house' ORDER BY position, identity LIMIT 1) AS opened,\n (SELECT id FROM conversation_messages WHERE conversation = listed.value AND json_extract(message, '$.role') = 'house' AND json_extract(message, '$.waiting') = 1 ORDER BY position, identity LIMIT 1) AS asking\n FROM json_each(?) AS listed\n )\n SELECT chosen.conversation AS conversation,\n substr(said.text, 1, 512) AS said_text,\n json_extract(said.message, '$.role') AS said_role,\n json_extract(said.message, '$.accepted_at') AS said_at,\n substr(json_extract(answer.message, '$.failure'), 1, 512) AS failure,\n json_extract(opened.message, '$.source') AS opened_source,\n json_extract(opened.message, '$.sender') AS opened_sender,\n asking.identity AS asking_identity,\n asking.text AS asking_text,\n json_extract(asking.message, '$.accepted_at') AS asking_at,\n json_extract(asking.message, '$.source') AS asking_source,\n json_extract(asking.message, '$.sender') AS asking_sender\n FROM chosen\n LEFT JOIN conversation_messages said ON said.id = chosen.said\n LEFT JOIN conversation_messages answer ON answer.id = chosen.answer\n LEFT JOIN conversation_messages opened ON opened.id = chosen.opened\n LEFT JOIN conversation_messages asking ON asking.id = chosen.asking";
5
+ export type HeldConversation = {
6
+ readonly conversation: string;
7
+ readonly read: string | null | undefined;
8
+ readonly partial: boolean;
9
+ };
10
+ export type MessageWindow = {
11
+ readonly messages: AcceptedMessage[];
12
+ readonly more: boolean;
13
+ };
14
+ export type HeldSource = {
15
+ readonly source: unknown;
16
+ readonly sender: string | null;
17
+ };
18
+ export type HeldRow = {
19
+ readonly conversation: string;
20
+ readonly said: {
21
+ readonly text: string;
22
+ readonly role: string | null;
23
+ readonly at: string | null;
24
+ } | null;
25
+ readonly failure: string | null;
26
+ readonly opened: HeldSource | null;
27
+ readonly asking: (HeldSource & {
28
+ readonly identity: string;
29
+ readonly text: string;
30
+ readonly at: string | null;
31
+ }) | null;
32
+ };
33
+ export type ConversationWrite = {
34
+ readonly conversation: string;
35
+ readonly messages: readonly AcceptedMessage[];
36
+ readonly read?: {
37
+ readonly at: string | null;
38
+ readonly partial: boolean;
39
+ };
40
+ };
41
+ export declare function heldConversations(connection: Connection, conversations: readonly string[] | null): HeldConversation[];
42
+ export declare function keptMessages(connection: Connection, { conversation, messages, read }: ConversationWrite): null;
43
+ export declare function messageWindow(connection: Connection, conversation: string, limit: number, before: readonly [string, string] | null, phrase: string | null): MessageWindow;
44
+ export declare function messageCount(connection: Connection, conversation: string, phrase: string | null): number;
45
+ export declare function conversationRows(connection: Connection, conversations: readonly string[]): HeldRow[];
46
+ export declare function turnArrived(connection: Connection, conversation: string, turn: string): boolean;
47
+ export declare function droppedMessages(connection: Connection, conversations: readonly string[]): void;
48
+ export declare function forgottenMessages(connection: Connection): void;
49
+ //# sourceMappingURL=messages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../src/messages.ts"],"names":[],"mappings":"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"}