@agentshouse/mdruntime 0.1.0-c009335e08279 → 0.1.0-c0136de3edfbe

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 (316) hide show
  1. package/README.md +25 -12
  2. package/dist/acceptance.d.ts +6 -0
  3. package/dist/acceptance.d.ts.map +1 -0
  4. package/dist/acceptance.js +389 -0
  5. package/dist/actions.d.ts +20 -0
  6. package/dist/actions.d.ts.map +1 -0
  7. package/dist/actions.js +248 -0
  8. package/dist/adapter.d.ts +246 -80
  9. package/dist/adapter.d.ts.map +1 -1
  10. package/dist/adapter.js +1 -9
  11. package/dist/attached-model.d.ts +8 -0
  12. package/dist/attached-model.d.ts.map +1 -0
  13. package/dist/attached-model.js +46 -0
  14. package/dist/attempt.d.ts +16 -0
  15. package/dist/attempt.d.ts.map +1 -0
  16. package/dist/attempt.js +70 -0
  17. package/dist/binary.d.ts +18 -0
  18. package/dist/binary.d.ts.map +1 -0
  19. package/dist/binary.js +8 -0
  20. package/dist/bootstrap.d.ts +40 -6
  21. package/dist/bootstrap.d.ts.map +1 -1
  22. package/dist/bootstrap.js +336 -51
  23. package/dist/cell.d.ts +6 -0
  24. package/dist/cell.d.ts.map +1 -0
  25. package/dist/cell.js +9 -0
  26. package/dist/chain.d.ts +12 -0
  27. package/dist/chain.d.ts.map +1 -0
  28. package/dist/chain.js +64 -0
  29. package/dist/change-set.d.ts +9 -14
  30. package/dist/change-set.d.ts.map +1 -1
  31. package/dist/change-set.js +11 -56
  32. package/dist/change.d.ts +46 -0
  33. package/dist/change.d.ts.map +1 -1
  34. package/dist/change.js +34 -0
  35. package/dist/chat-types.d.ts +3 -0
  36. package/dist/chat-types.d.ts.map +1 -0
  37. package/dist/chat-types.js +2 -0
  38. package/dist/client.d.ts +53 -18
  39. package/dist/client.d.ts.map +1 -1
  40. package/dist/client.js +162 -30
  41. package/dist/collection.d.ts +13 -14
  42. package/dist/collection.d.ts.map +1 -1
  43. package/dist/collection.js +52 -56
  44. package/dist/compile.d.ts +16 -0
  45. package/dist/compile.d.ts.map +1 -0
  46. package/dist/compile.js +717 -0
  47. package/dist/connection.d.ts +8 -106
  48. package/dist/connection.d.ts.map +1 -1
  49. package/dist/connection.js +102 -2094
  50. package/dist/context.d.ts +2 -0
  51. package/dist/context.d.ts.map +1 -0
  52. package/dist/context.js +7 -0
  53. package/dist/conversation-row.d.ts +33 -0
  54. package/dist/conversation-row.d.ts.map +1 -0
  55. package/dist/conversation-row.js +47 -0
  56. package/dist/conversation.d.ts +76 -27
  57. package/dist/conversation.d.ts.map +1 -1
  58. package/dist/conversation.js +1052 -273
  59. package/dist/digest.d.ts +7 -0
  60. package/dist/digest.d.ts.map +1 -0
  61. package/dist/digest.js +113 -0
  62. package/dist/discovery.d.ts +10 -0
  63. package/dist/discovery.d.ts.map +1 -0
  64. package/dist/discovery.js +175 -0
  65. package/dist/durability.d.ts +10 -1
  66. package/dist/durability.d.ts.map +1 -1
  67. package/dist/durability.js +5 -0
  68. package/dist/entry.d.ts +20 -0
  69. package/dist/entry.d.ts.map +1 -0
  70. package/dist/entry.js +161 -0
  71. package/dist/expectation.d.ts +21 -0
  72. package/dist/expectation.d.ts.map +1 -0
  73. package/dist/expectation.js +70 -0
  74. package/dist/failure.d.ts +13 -0
  75. package/dist/failure.d.ts.map +1 -0
  76. package/dist/failure.js +19 -0
  77. package/dist/figures.d.ts +48 -0
  78. package/dist/figures.d.ts.map +1 -0
  79. package/dist/figures.js +197 -0
  80. package/dist/file.d.ts +2 -19
  81. package/dist/file.d.ts.map +1 -1
  82. package/dist/file.js +7 -122
  83. package/dist/host.d.ts +18 -2
  84. package/dist/host.d.ts.map +1 -1
  85. package/dist/host.js +165 -51
  86. package/dist/identity.d.ts +3 -0
  87. package/dist/identity.d.ts.map +1 -1
  88. package/dist/identity.js +13 -1
  89. package/dist/index.d.ts +35 -10
  90. package/dist/index.d.ts.map +1 -1
  91. package/dist/index.js +13 -0
  92. package/dist/install.d.ts +56 -0
  93. package/dist/install.d.ts.map +1 -0
  94. package/dist/install.js +560 -0
  95. package/dist/job.d.ts +33 -0
  96. package/dist/job.d.ts.map +1 -0
  97. package/dist/job.js +54 -0
  98. package/dist/lifecycle.d.ts +7 -0
  99. package/dist/lifecycle.d.ts.map +1 -0
  100. package/dist/lifecycle.js +267 -0
  101. package/dist/listing.d.ts +53 -0
  102. package/dist/listing.d.ts.map +1 -0
  103. package/dist/listing.js +175 -0
  104. package/dist/live.d.ts +23 -0
  105. package/dist/live.d.ts.map +1 -0
  106. package/dist/live.js +165 -0
  107. package/dist/locks.d.ts +9 -0
  108. package/dist/locks.d.ts.map +1 -0
  109. package/dist/locks.js +61 -0
  110. package/dist/log.d.ts +1 -0
  111. package/dist/log.d.ts.map +1 -1
  112. package/dist/lost.d.ts +5 -0
  113. package/dist/lost.d.ts.map +1 -0
  114. package/dist/lost.js +61 -0
  115. package/dist/media.d.ts +8 -0
  116. package/dist/media.d.ts.map +1 -0
  117. package/dist/media.js +218 -0
  118. package/dist/memory.d.ts +30 -9
  119. package/dist/memory.d.ts.map +1 -1
  120. package/dist/memory.js +337 -86
  121. package/dist/messages.d.ts +52 -0
  122. package/dist/messages.d.ts.map +1 -0
  123. package/dist/messages.js +168 -0
  124. package/dist/model.d.ts +17 -16
  125. package/dist/model.d.ts.map +1 -1
  126. package/dist/model.js +9 -9
  127. package/dist/models.d.ts +14 -0
  128. package/dist/models.d.ts.map +1 -0
  129. package/dist/models.js +193 -0
  130. package/dist/name.d.ts +4 -0
  131. package/dist/name.d.ts.map +1 -0
  132. package/dist/name.js +122 -0
  133. package/dist/observation.d.ts +22 -2
  134. package/dist/observation.d.ts.map +1 -1
  135. package/dist/observation.js +133 -17
  136. package/dist/open.d.ts +2 -0
  137. package/dist/open.d.ts.map +1 -0
  138. package/dist/open.js +1 -0
  139. package/dist/opened.d.ts +22 -0
  140. package/dist/opened.d.ts.map +1 -0
  141. package/dist/opened.js +107 -0
  142. package/dist/opening.d.ts +4 -0
  143. package/dist/opening.d.ts.map +1 -0
  144. package/dist/opening.js +56 -0
  145. package/dist/outcome.d.ts +73 -5
  146. package/dist/outcome.d.ts.map +1 -1
  147. package/dist/outcome.js +84 -1
  148. package/dist/overlay.d.ts +16 -5
  149. package/dist/overlay.d.ts.map +1 -1
  150. package/dist/overlay.js +147 -180
  151. package/dist/parts.d.ts +59 -0
  152. package/dist/parts.d.ts.map +1 -0
  153. package/dist/parts.js +118 -0
  154. package/dist/paths.d.ts +1 -1
  155. package/dist/paths.d.ts.map +1 -1
  156. package/dist/paths.js +4 -16
  157. package/dist/preparation.d.ts +20 -0
  158. package/dist/preparation.d.ts.map +1 -0
  159. package/dist/preparation.js +226 -0
  160. package/dist/queries.d.ts +16 -0
  161. package/dist/queries.d.ts.map +1 -0
  162. package/dist/queries.js +272 -0
  163. package/dist/query.d.ts +56 -180
  164. package/dist/query.d.ts.map +1 -1
  165. package/dist/query.js +3 -422
  166. package/dist/questions.d.ts +32 -0
  167. package/dist/questions.d.ts.map +1 -0
  168. package/dist/questions.js +118 -0
  169. package/dist/reach.d.ts +56 -0
  170. package/dist/reach.d.ts.map +1 -0
  171. package/dist/reach.js +494 -0
  172. package/dist/react.d.ts +47 -0
  173. package/dist/react.d.ts.map +1 -0
  174. package/dist/react.js +54 -0
  175. package/dist/read.d.ts +7 -0
  176. package/dist/read.d.ts.map +1 -0
  177. package/dist/read.js +17 -0
  178. package/dist/readiness.d.ts +50 -0
  179. package/dist/readiness.d.ts.map +1 -0
  180. package/dist/readiness.js +27 -0
  181. package/dist/reads.d.ts +36 -0
  182. package/dist/reads.d.ts.map +1 -0
  183. package/dist/reads.js +136 -0
  184. package/dist/recovery.d.ts +26 -0
  185. package/dist/recovery.d.ts.map +1 -0
  186. package/dist/recovery.js +232 -0
  187. package/dist/refresh.d.ts +21 -7
  188. package/dist/refresh.d.ts.map +1 -1
  189. package/dist/refresh.js +155 -55
  190. package/dist/refusal.d.ts +5 -0
  191. package/dist/refusal.d.ts.map +1 -0
  192. package/dist/refusal.js +56 -0
  193. package/dist/replica.d.ts +58 -33
  194. package/dist/replica.d.ts.map +1 -1
  195. package/dist/replica.js +355 -158
  196. package/dist/room-draft.d.ts +62 -11
  197. package/dist/room-draft.d.ts.map +1 -1
  198. package/dist/room-draft.js +281 -83
  199. package/dist/room-drafts.d.ts +24 -0
  200. package/dist/room-drafts.d.ts.map +1 -0
  201. package/dist/room-drafts.js +216 -0
  202. package/dist/rows.d.ts +32 -34
  203. package/dist/rows.d.ts.map +1 -1
  204. package/dist/rows.js +65 -87
  205. package/dist/runtime.d.ts +42 -0
  206. package/dist/runtime.d.ts.map +1 -0
  207. package/dist/runtime.js +1 -0
  208. package/dist/save.d.ts +74 -6
  209. package/dist/save.d.ts.map +1 -1
  210. package/dist/save.js +902 -182
  211. package/dist/saves.d.ts +70 -0
  212. package/dist/saves.d.ts.map +1 -0
  213. package/dist/saves.js +1004 -0
  214. package/dist/search.d.ts +15 -54
  215. package/dist/search.d.ts.map +1 -1
  216. package/dist/search.js +10 -121
  217. package/dist/seed.d.ts +25 -0
  218. package/dist/seed.d.ts.map +1 -0
  219. package/dist/seed.js +146 -0
  220. package/dist/shared.d.ts +15 -0
  221. package/dist/shared.d.ts.map +1 -0
  222. package/dist/shared.js +421 -0
  223. package/dist/shown.d.ts +31 -0
  224. package/dist/shown.d.ts.map +1 -0
  225. package/dist/shown.js +294 -0
  226. package/dist/socket/admission.d.ts +7 -0
  227. package/dist/socket/admission.d.ts.map +1 -0
  228. package/dist/socket/admission.js +39 -0
  229. package/dist/socket/answers.d.ts +6 -0
  230. package/dist/socket/answers.d.ts.map +1 -0
  231. package/dist/socket/answers.js +20 -0
  232. package/dist/socket/lanes.d.ts +20 -0
  233. package/dist/socket/lanes.d.ts.map +1 -0
  234. package/dist/socket/lanes.js +77 -0
  235. package/dist/socket/reads.d.ts +10 -0
  236. package/dist/socket/reads.d.ts.map +1 -0
  237. package/dist/socket/reads.js +31 -0
  238. package/dist/socket/rooms.d.ts +43 -0
  239. package/dist/socket/rooms.d.ts.map +1 -0
  240. package/dist/socket/rooms.js +90 -0
  241. package/dist/socket/session.d.ts +39 -0
  242. package/dist/socket/session.d.ts.map +1 -0
  243. package/dist/socket/session.js +23 -0
  244. package/dist/socket.d.ts +70 -0
  245. package/dist/socket.d.ts.map +1 -0
  246. package/dist/socket.js +175 -0
  247. package/dist/source.d.ts +61 -0
  248. package/dist/source.d.ts.map +1 -0
  249. package/dist/source.js +81 -0
  250. package/dist/status.d.ts +7 -4
  251. package/dist/status.d.ts.map +1 -1
  252. package/dist/status.js +3 -15
  253. package/dist/store/fences.d.ts +16 -0
  254. package/dist/store/fences.d.ts.map +1 -0
  255. package/dist/store/fences.js +26 -0
  256. package/dist/store/installs.d.ts +30 -0
  257. package/dist/store/installs.d.ts.map +1 -0
  258. package/dist/store/installs.js +34 -0
  259. package/dist/store/readiness.d.ts +10 -0
  260. package/dist/store/readiness.d.ts.map +1 -0
  261. package/dist/store/readiness.js +52 -0
  262. package/dist/store/records.d.ts +212 -0
  263. package/dist/store/records.d.ts.map +1 -0
  264. package/dist/store/records.js +408 -0
  265. package/dist/store/room-held.d.ts +8 -0
  266. package/dist/store/room-held.d.ts.map +1 -0
  267. package/dist/store/room-held.js +17 -0
  268. package/dist/store/space.d.ts +11 -0
  269. package/dist/store/space.d.ts.map +1 -0
  270. package/dist/store/space.js +43 -0
  271. package/dist/store/watchers.d.ts +17 -0
  272. package/dist/store/watchers.d.ts.map +1 -0
  273. package/dist/store/watchers.js +57 -0
  274. package/dist/store/writes.d.ts +24 -0
  275. package/dist/store/writes.d.ts.map +1 -0
  276. package/dist/store/writes.js +125 -0
  277. package/dist/store.d.ts +106 -93
  278. package/dist/store.d.ts.map +1 -1
  279. package/dist/store.js +142 -385
  280. package/dist/stored.d.ts +156 -0
  281. package/dist/stored.d.ts.map +1 -0
  282. package/dist/stored.js +637 -0
  283. package/dist/surface.d.ts +86 -0
  284. package/dist/surface.d.ts.map +1 -0
  285. package/dist/surface.js +217 -0
  286. package/dist/sync.d.ts +20 -0
  287. package/dist/sync.d.ts.map +1 -0
  288. package/dist/sync.js +531 -0
  289. package/dist/tables.d.ts +407 -0
  290. package/dist/tables.d.ts.map +1 -0
  291. package/dist/tables.js +724 -0
  292. package/dist/tallies.d.ts +18 -0
  293. package/dist/tallies.d.ts.map +1 -0
  294. package/dist/tallies.js +129 -0
  295. package/dist/transfer.d.ts +0 -5
  296. package/dist/transfer.d.ts.map +1 -1
  297. package/dist/turn.d.ts +9 -0
  298. package/dist/turn.d.ts.map +1 -0
  299. package/dist/turn.js +75 -0
  300. package/dist/validation.d.ts +29 -0
  301. package/dist/validation.d.ts.map +1 -0
  302. package/dist/validation.js +104 -0
  303. package/dist/windows.d.ts +11 -0
  304. package/dist/windows.d.ts.map +1 -0
  305. package/dist/windows.js +16 -0
  306. package/dist/wire.d.ts +206 -20
  307. package/dist/wire.d.ts.map +1 -1
  308. package/dist/wire.js +95 -61
  309. package/package.json +33 -10
  310. package/AGENTS.md +0 -208
  311. package/dist/attachment.d.ts +0 -3
  312. package/dist/attachment.d.ts.map +0 -1
  313. package/dist/attachment.js +0 -8
  314. package/dist/read-side.d.ts +0 -14
  315. package/dist/read-side.d.ts.map +0 -1
  316. package/dist/read-side.js +0 -371
@@ -0,0 +1,248 @@
1
+ import { roomTarget, target } from '@agentshouse/mdmodel';
2
+ import { listingNow } from './listing.js';
3
+ import { locked, lockedRooms } from './locks.js';
4
+ import { scoped } from './models.js';
5
+ import { ABSENT_TARGET, calledResult, failure, historyAnswer, LOCKED_UNREADABLE, lockedRoom, undeclared, UNCERTAIN, UNREADABLE, } from './outcome.js';
6
+ import { refuse } from './refusal.js';
7
+ function operationOf(input) {
8
+ const operation = input?.operation_id;
9
+ return typeof operation === 'string' ? operation : null;
10
+ }
11
+ export async function readHistory(runtime, locator, path, query = {}) {
12
+ const { store, socket, journal } = runtime;
13
+ const { session } = socket;
14
+ if (socket.closed() || session.now().refusal !== null)
15
+ return UNCERTAIN;
16
+ await socket.firstDiscovery;
17
+ if (!session.now().roomsNamed)
18
+ return UNCERTAIN;
19
+ try {
20
+ await socket.authorize();
21
+ }
22
+ catch {
23
+ return UNCERTAIN;
24
+ }
25
+ const { closed, authorization, refusal } = session.now();
26
+ if (closed || authorization === undefined || refusal !== null)
27
+ return UNCERTAIN;
28
+ const since = store.fences.count();
29
+ const transfer = ['transfer', 'history', locator, path];
30
+ if (query.revision !== undefined)
31
+ transfer.push(query.revision);
32
+ if (query.pageToken !== undefined)
33
+ transfer.push(query.pageToken);
34
+ journal.record(transfer.join(' '));
35
+ try {
36
+ const result = await socket.history(authorization, {
37
+ locator,
38
+ path,
39
+ ...(query.revision === undefined ? {} : { revision: query.revision }),
40
+ ...(query.pageToken === undefined ? {} : { pageToken: query.pageToken }),
41
+ });
42
+ journal.record(`outcome history ${result.kind}`);
43
+ if (store.fences.since(locator, since))
44
+ return failure({ kind: 'room-not-readable', locator });
45
+ if (result.kind === 'scoped-refusal') {
46
+ const room = await store.record(result.locator);
47
+ if (room !== undefined)
48
+ await scoped(runtime, result, room, await store.open());
49
+ }
50
+ if (result.kind === 'revoked-authorization')
51
+ await refuse(runtime, 'revoked-authorization');
52
+ return historyAnswer(result);
53
+ }
54
+ catch {
55
+ journal.record('outcome history transport-uncertainty');
56
+ return UNCERTAIN;
57
+ }
58
+ }
59
+ export async function located(runtime, room, path, destination) {
60
+ const crossing = roomTarget(destination);
61
+ const listing = await listingNow(runtime);
62
+ if (crossing === null) {
63
+ const named = target(path, destination);
64
+ return named === null || !listing.has(room) ? null : { room, path: named };
65
+ }
66
+ const held = [...listing.values()].find((listed) => listed.handle === crossing.handle);
67
+ return held === undefined ? null : { room: held.locator, path: crossing.path };
68
+ }
69
+ export async function resolveReference(runtime, room, path, destination) {
70
+ const { store } = runtime;
71
+ if (roomTarget(destination) === null && target(path, destination) === null) {
72
+ return ABSENT_TARGET;
73
+ }
74
+ const at = await located(runtime, room, path, destination);
75
+ if (at === null)
76
+ return UNREADABLE;
77
+ if (await locked(runtime, at.room))
78
+ return LOCKED_UNREADABLE;
79
+ const held = await store.record(at.room);
80
+ if (held !== undefined &&
81
+ (await (await store.open()).entries(held.key, 'visible', [at.path])).length > 0) {
82
+ return { kind: 'document', ...at };
83
+ }
84
+ const history = await readHistory(runtime, at.room, at.path);
85
+ if (history.kind === 'no-history' || history.kind === 'revision')
86
+ return ABSENT_TARGET;
87
+ if (history.kind !== 'history')
88
+ return history;
89
+ const [last] = history.revisions;
90
+ if (last === undefined)
91
+ return ABSENT_TARGET;
92
+ return history.deleted === true
93
+ ? { kind: 'deleted', ...at, revision: last }
94
+ : { kind: 'document', ...at };
95
+ }
96
+ async function declaredAction({ store }, name) {
97
+ for (const capability of (await (await store.open()).facts()).capabilities) {
98
+ for (const action of capability.actions ?? []) {
99
+ if (action.name === name)
100
+ return action;
101
+ }
102
+ }
103
+ return undefined;
104
+ }
105
+ async function calledRooms(runtime, name, input) {
106
+ const member = (await declaredAction(runtime, name))?.room;
107
+ if (member === undefined || input === null || typeof input !== 'object')
108
+ return [];
109
+ const named = input[member];
110
+ return (Array.isArray(named) ? named : [named]).filter((room) => typeof room === 'string');
111
+ }
112
+ export async function invokeAction(runtime, name, input, dispatching) {
113
+ const { store, socket, journal } = runtime;
114
+ const { session } = socket;
115
+ await socket.ready;
116
+ if (socket.closed() || session.now().refusal !== null)
117
+ return UNCERTAIN;
118
+ if ((await declaredAction(runtime, name)) === undefined)
119
+ return undeclared(name);
120
+ try {
121
+ await socket.authorize();
122
+ }
123
+ catch {
124
+ return UNCERTAIN;
125
+ }
126
+ const { closed, authorization, refusal } = session.now();
127
+ if (closed || authorization === undefined || refusal !== null)
128
+ return UNCERTAIN;
129
+ await dispatching?.();
130
+ journal.record(`transfer action ${name}`);
131
+ try {
132
+ const result = await socket.action(authorization, { name, input });
133
+ if (result.kind === 'scoped-refusal') {
134
+ const room = await store.record(result.locator);
135
+ if (room !== undefined)
136
+ await scoped(runtime, result, room, await store.open());
137
+ }
138
+ if (result.kind === 'revoked-authorization')
139
+ await refuse(runtime, 'revoked-authorization');
140
+ journal.record(`outcome action ${result.kind}`);
141
+ if (result.kind === 'rejected')
142
+ journal.record(`refusal rejected ${result.code}`);
143
+ return calledResult(result);
144
+ }
145
+ catch {
146
+ journal.record('outcome action transport-uncertainty');
147
+ return UNCERTAIN;
148
+ }
149
+ }
150
+ export async function readConversationHistory(runtime, request) {
151
+ const { socket, journal } = runtime;
152
+ await socket.ready;
153
+ const stream = socket.conversations();
154
+ if (socket.closed() || socket.session.now().refusal !== null || stream?.history === undefined) {
155
+ return UNCERTAIN;
156
+ }
157
+ journal.record('transfer conversation history');
158
+ try {
159
+ const result = await stream.history(request);
160
+ if (result.kind === 'revoked-authorization')
161
+ await refuse(runtime, 'revoked-authorization');
162
+ journal.record(`outcome conversation history ${result.kind}`);
163
+ return calledResult(result);
164
+ }
165
+ catch {
166
+ journal.record('outcome conversation history transport-uncertainty');
167
+ return UNCERTAIN;
168
+ }
169
+ }
170
+ function unsettled(result) {
171
+ return result.kind !== 'action' && result.retryable;
172
+ }
173
+ async function recoveredAction(runtime, name, input) {
174
+ const { store, socket, recovery } = runtime;
175
+ const { lanes } = socket;
176
+ const operation = operationOf(input);
177
+ if (operation === null)
178
+ return invokeAction(runtime, name, input);
179
+ const kept = async () => (await store.open()).keepCall({ operation, name, input });
180
+ lanes.call(operation);
181
+ try {
182
+ let result = await invokeAction(runtime, name, input, kept);
183
+ if (unsettled(result)) {
184
+ await recovery.attempt(`action ${operation}`, async () => {
185
+ if (socket.closed() || socket.session.now().refusal !== null)
186
+ return 'done';
187
+ if (!socket.isOpen())
188
+ return 'again';
189
+ result = await invokeAction(runtime, name, input, kept);
190
+ return unsettled(result) ? 'again' : 'done';
191
+ }, { again: true });
192
+ }
193
+ if (!unsettled(result))
194
+ await (await store.open()).dropCall(operation);
195
+ return result;
196
+ }
197
+ finally {
198
+ lanes.called(operation);
199
+ }
200
+ }
201
+ export async function called(runtime, name, input) {
202
+ await runtime.socket.ready;
203
+ const lockedNow = await lockedRooms(runtime);
204
+ const room = (await calledRooms(runtime, name, input)).find((one) => lockedNow.includes(one));
205
+ return room === undefined ? recoveredAction(runtime, name, input) : lockedRoom(room);
206
+ }
207
+ export async function resendCalls(runtime, signal) {
208
+ const { store, socket } = runtime;
209
+ const { lanes } = socket;
210
+ if (!socket.isOpen() || socket.closed() || socket.stopping())
211
+ return 'done';
212
+ const local = await store.open();
213
+ for (const held of await local.calls()) {
214
+ if (lanes.calling(held.operation))
215
+ continue;
216
+ if (socket.closed() || signal.aborted)
217
+ return 'done';
218
+ lanes.call(held.operation);
219
+ try {
220
+ if (unsettled(await invokeAction(runtime, held.name, held.input)))
221
+ return 'again';
222
+ await local.dropCall(held.operation);
223
+ }
224
+ finally {
225
+ lanes.called(held.operation);
226
+ }
227
+ }
228
+ return 'done';
229
+ }
230
+ async function resendPass({ socket, conversations }, signal) {
231
+ if (!socket.continuing() || !socket.isOpen() || socket.stopping())
232
+ return 'done';
233
+ const reading = { complete: true, reachable: true };
234
+ try {
235
+ await conversations.resend(reading);
236
+ }
237
+ catch {
238
+ reading.reachable = false;
239
+ }
240
+ if (signal.aborted)
241
+ return 'done';
242
+ return reading.reachable && reading.complete ? 'done' : 'again';
243
+ }
244
+ export function resendLater(runtime) {
245
+ if (!runtime.socket.isOpen())
246
+ return;
247
+ void runtime.recovery.attempt('resend', (signal) => resendPass(runtime, signal), { again: true });
248
+ }