@akterjs/effect 0.0.0-stage → 0.1.1

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 (798) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +43 -2
  3. package/dist/contract/actor/actor-already-exists.errors.d.mts +8 -0
  4. package/dist/contract/actor/actor-already-exists.errors.mjs +4 -0
  5. package/dist/contract/actor/actor-definition.pure.d.mts +21 -0
  6. package/dist/contract/actor/actor-definition.pure.mjs +106 -0
  7. package/dist/contract/actor/actor-erased.errors.d.mts +8 -0
  8. package/dist/contract/actor/actor-erased.errors.mjs +4 -0
  9. package/dist/contract/actor/actor-names.pure.d.mts +11 -0
  10. package/dist/contract/actor/actor-names.pure.mjs +51 -0
  11. package/dist/contract/actor/actor-not-created.errors.d.mts +8 -0
  12. package/dist/contract/actor/actor-not-created.errors.mjs +4 -0
  13. package/dist/contract/actor/actor-not-registered.errors.d.mts +8 -0
  14. package/dist/contract/actor/actor-not-registered.errors.mjs +4 -0
  15. package/dist/contract/actor/actor-registry.service.d.mts +16 -0
  16. package/dist/contract/actor/actor-registry.service.mjs +21 -0
  17. package/dist/contract/actor/actor.contract.d.mts +238 -0
  18. package/dist/contract/actor/actor.contract.mjs +1 -0
  19. package/dist/contract/actor/host-interface.pure.d.mts +23 -0
  20. package/dist/contract/actor/host-interface.pure.mjs +39 -0
  21. package/dist/contract/actor/reserved-member.errors.d.mts +9 -0
  22. package/dist/contract/actor/reserved-member.errors.mjs +7 -0
  23. package/dist/contract/akter.service.d.mts +75 -0
  24. package/dist/contract/akter.service.mjs +134 -0
  25. package/dist/contract/caller/authentication.api.d.mts +6 -0
  26. package/dist/contract/caller/authentication.api.mjs +5 -0
  27. package/dist/contract/caller/caller-admission.pure.d.mts +27 -0
  28. package/dist/contract/caller/caller-admission.pure.mjs +59 -0
  29. package/dist/contract/caller/caller-not-allowed.errors.d.mts +16 -0
  30. package/dist/contract/caller/caller-not-allowed.errors.mjs +18 -0
  31. package/dist/contract/caller/caller.schema.d.mts +7 -0
  32. package/dist/contract/caller/caller.schema.mjs +8 -0
  33. package/dist/contract/caller/current-caller.service.d.mts +7 -0
  34. package/dist/contract/caller/current-caller.service.mjs +4 -0
  35. package/dist/contract/caller/principal.schema.d.mts +13 -0
  36. package/dist/contract/caller/principal.schema.mjs +10 -0
  37. package/dist/contract/caller/unauthenticated.errors.d.mts +8 -0
  38. package/dist/contract/caller/unauthenticated.errors.mjs +4 -0
  39. package/dist/contract/client/actor-client.adapter.d.mts +42 -0
  40. package/dist/contract/client/actor-client.adapter.mjs +90 -0
  41. package/dist/contract/client/actor-client.contract.d.mts +30 -0
  42. package/dist/contract/client/actor-client.contract.mjs +1 -0
  43. package/dist/contract/client/actor-rpc.contract.d.mts +33 -0
  44. package/dist/contract/client/actor-rpc.contract.mjs +16 -0
  45. package/dist/contract/client/actor-unavailable.errors.d.mts +9 -0
  46. package/dist/contract/client/actor-unavailable.errors.mjs +7 -0
  47. package/dist/contract/client/client-failure.contract.d.mts +28 -0
  48. package/dist/contract/client/client-failure.contract.mjs +28 -0
  49. package/dist/contract/client/invalid-request.errors.d.mts +9 -0
  50. package/dist/contract/client/invalid-request.errors.mjs +7 -0
  51. package/dist/contract/client/storage-limit.errors.d.mts +16 -0
  52. package/dist/contract/client/storage-limit.errors.mjs +14 -0
  53. package/dist/contract/command/command-id-expired.errors.d.mts +11 -0
  54. package/dist/contract/command/command-id-expired.errors.mjs +9 -0
  55. package/dist/contract/command/command-id.schema.d.mts +3 -0
  56. package/dist/contract/command/command-id.schema.mjs +4 -0
  57. package/dist/contract/command/command.contract.d.mts +117 -0
  58. package/dist/contract/command/command.contract.mjs +111 -0
  59. package/dist/contract/command/outbox-id.pure.d.mts +9 -0
  60. package/dist/contract/command/outbox-id.pure.mjs +14 -0
  61. package/dist/contract/command/outbox.schema.d.mts +9 -0
  62. package/dist/contract/command/outbox.schema.mjs +10 -0
  63. package/dist/contract/command/timer.schema.d.mts +20 -0
  64. package/dist/contract/command/timer.schema.mjs +14 -0
  65. package/dist/contract/computer/checkpoint-expired.errors.d.mts +12 -0
  66. package/dist/contract/computer/checkpoint-expired.errors.mjs +8 -0
  67. package/dist/contract/computer/computer-client-failure.contract.d.mts +16 -0
  68. package/dist/contract/computer/computer-client-failure.contract.mjs +1 -0
  69. package/dist/contract/computer/computer-client.adapter.d.mts +21 -0
  70. package/dist/contract/computer/computer-client.adapter.mjs +70 -0
  71. package/dist/contract/computer/computer-client.contract.d.mts +56 -0
  72. package/dist/contract/computer/computer-client.contract.mjs +1 -0
  73. package/dist/contract/computer/computer-held.errors.d.mts +13 -0
  74. package/dist/contract/computer/computer-held.errors.mjs +11 -0
  75. package/dist/contract/computer/computer-limit.errors.d.mts +15 -0
  76. package/dist/contract/computer/computer-limit.errors.mjs +13 -0
  77. package/dist/contract/computer/computer-lost.errors.d.mts +12 -0
  78. package/dist/contract/computer/computer-lost.errors.mjs +8 -0
  79. package/dist/contract/computer/computer-not-found.errors.d.mts +9 -0
  80. package/dist/contract/computer/computer-not-found.errors.mjs +5 -0
  81. package/dist/contract/computer/computer.schema.d.mts +122 -0
  82. package/dist/contract/computer/computer.schema.mjs +117 -0
  83. package/dist/contract/computer/computers-unavailable.errors.d.mts +9 -0
  84. package/dist/contract/computer/computers-unavailable.errors.mjs +5 -0
  85. package/dist/contract/computer/files/computer-files.schema.d.mts +28 -0
  86. package/dist/contract/computer/files/computer-files.schema.mjs +24 -0
  87. package/dist/contract/computer/rpc/computer-rpc.contract.d.mts +108 -0
  88. package/dist/contract/computer/rpc/computer-rpc.contract.mjs +117 -0
  89. package/dist/contract/computer/step/computer-step.contract.d.mts +21 -0
  90. package/dist/contract/computer/step/computer-step.contract.mjs +89 -0
  91. package/dist/contract/computer/step/computer-step.schema.d.mts +69 -0
  92. package/dist/contract/computer/step/computer-step.schema.mjs +71 -0
  93. package/dist/contract/computer/step/step-failure.schema.d.mts +13 -0
  94. package/dist/contract/computer/step/step-failure.schema.mjs +24 -0
  95. package/dist/contract/computer/step/step-not-found.errors.d.mts +9 -0
  96. package/dist/contract/computer/step/step-not-found.errors.mjs +5 -0
  97. package/dist/contract/description/published-contract.pure.d.mts +51 -0
  98. package/dist/contract/description/published-contract.pure.mjs +75 -0
  99. package/dist/contract/file/access/file-access-denied.errors.d.mts +11 -0
  100. package/dist/contract/file/access/file-access-denied.errors.mjs +9 -0
  101. package/dist/contract/file/access/file-access.contract.d.mts +35 -0
  102. package/dist/contract/file/access/file-access.contract.mjs +32 -0
  103. package/dist/contract/file/actor-files.contract.d.mts +50 -0
  104. package/dist/contract/file/actor-files.contract.mjs +1 -0
  105. package/dist/contract/file/blob-transfer.errors.d.mts +9 -0
  106. package/dist/contract/file/blob-transfer.errors.mjs +7 -0
  107. package/dist/contract/file/file-client-failure.contract.d.mts +24 -0
  108. package/dist/contract/file/file-client-failure.contract.mjs +1 -0
  109. package/dist/contract/file/file-client.adapter.d.mts +17 -0
  110. package/dist/contract/file/file-client.adapter.mjs +21 -0
  111. package/dist/contract/file/file-client.contract.d.mts +14 -0
  112. package/dist/contract/file/file-client.contract.mjs +1 -0
  113. package/dist/contract/file/file-listing.pure.d.mts +6 -0
  114. package/dist/contract/file/file-listing.pure.mjs +18 -0
  115. package/dist/contract/file/file-not-found.errors.d.mts +8 -0
  116. package/dist/contract/file/file-not-found.errors.mjs +4 -0
  117. package/dist/contract/file/file-path.pure.d.mts +4 -0
  118. package/dist/contract/file/file-path.pure.mjs +38 -0
  119. package/dist/contract/file/files-unavailable.errors.d.mts +8 -0
  120. package/dist/contract/file/files-unavailable.errors.mjs +4 -0
  121. package/dist/contract/file/invalid-file-request.errors.d.mts +9 -0
  122. package/dist/contract/file/invalid-file-request.errors.mjs +7 -0
  123. package/dist/contract/file/rpc/file-rpc.contract.d.mts +88 -0
  124. package/dist/contract/file/rpc/file-rpc.contract.mjs +117 -0
  125. package/dist/contract/file/rpc/file-too-large.errors.d.mts +13 -0
  126. package/dist/contract/file/rpc/file-too-large.errors.mjs +11 -0
  127. package/dist/contract/file/rpc/rpc-file-clients.layer.d.mts +10 -0
  128. package/dist/contract/file/rpc/rpc-file-clients.layer.mjs +95 -0
  129. package/dist/contract/fork/fork-rpc.contract.d.mts +40 -0
  130. package/dist/contract/fork/fork-rpc.contract.mjs +26 -0
  131. package/dist/contract/history/actor-journal.service.d.mts +58 -0
  132. package/dist/contract/history/actor-journal.service.mjs +67 -0
  133. package/dist/contract/history/history-entry.pure.d.mts +79 -0
  134. package/dist/contract/history/history-entry.pure.mjs +95 -0
  135. package/dist/contract/hosted/handler-failed.errors.d.mts +16 -0
  136. package/dist/contract/hosted/handler-failed.errors.mjs +14 -0
  137. package/dist/contract/hosted/handler-failure.pure.d.mts +21 -0
  138. package/dist/contract/hosted/handler-failure.pure.mjs +86 -0
  139. package/dist/contract/hosted/hosted-actor.service.d.mts +23 -0
  140. package/dist/contract/hosted/hosted-actor.service.mjs +64 -0
  141. package/dist/contract/hosted/hosted-command.service.d.mts +20 -0
  142. package/dist/contract/hosted/hosted-command.service.mjs +88 -0
  143. package/dist/contract/hosted/hosted-create.service.d.mts +17 -0
  144. package/dist/contract/hosted/hosted-create.service.mjs +67 -0
  145. package/dist/contract/hosted/hosted-error.contract.d.mts +11 -0
  146. package/dist/contract/hosted/hosted-error.contract.mjs +1 -0
  147. package/dist/contract/hosted/hosted-failure.schema.d.mts +18 -0
  148. package/dist/contract/hosted/hosted-failure.schema.mjs +31 -0
  149. package/dist/contract/hosted/hosted-outcome.contract.d.mts +18 -0
  150. package/dist/contract/hosted/hosted-outcome.contract.mjs +1 -0
  151. package/dist/contract/hosted/hosted-query.service.d.mts +16 -0
  152. package/dist/contract/hosted/hosted-query.service.mjs +42 -0
  153. package/dist/contract/hosted/hosted-request.pure.d.mts +61 -0
  154. package/dist/contract/hosted/hosted-request.pure.mjs +91 -0
  155. package/dist/contract/job/job-id.pure.d.mts +11 -0
  156. package/dist/contract/job/job-id.pure.mjs +20 -0
  157. package/dist/contract/job/job-patches.contract.d.mts +32 -0
  158. package/dist/contract/job/job-patches.contract.mjs +45 -0
  159. package/dist/contract/job/job-signal.schema.d.mts +13 -0
  160. package/dist/contract/job/job-signal.schema.mjs +16 -0
  161. package/dist/contract/job/reserved-payload-field.errors.d.mts +10 -0
  162. package/dist/contract/job/reserved-payload-field.errors.mjs +8 -0
  163. package/dist/contract/job/started-job.schema.d.mts +7 -0
  164. package/dist/contract/job/started-job.schema.mjs +8 -0
  165. package/dist/contract/json-codec.pure.d.mts +7 -0
  166. package/dist/contract/json-codec.pure.mjs +14 -0
  167. package/dist/contract/room.contract.d.mts +75 -0
  168. package/dist/contract/room.contract.mjs +36 -0
  169. package/dist/contract/secret/actor-secrets.adapter.d.mts +33 -0
  170. package/dist/contract/secret/actor-secrets.adapter.mjs +38 -0
  171. package/dist/contract/secret/invalid-secret-name.errors.d.mts +10 -0
  172. package/dist/contract/secret/invalid-secret-name.errors.mjs +8 -0
  173. package/dist/contract/secret/secret-unavailable.errors.d.mts +11 -0
  174. package/dist/contract/secret/secret-unavailable.errors.mjs +10 -0
  175. package/dist/contract/secret/secret.schema.d.mts +25 -0
  176. package/dist/contract/secret/secret.schema.mjs +34 -0
  177. package/dist/contract/spend/billing-unavailable.errors.d.mts +12 -0
  178. package/dist/contract/spend/billing-unavailable.errors.mjs +8 -0
  179. package/dist/contract/spend/spend-cap-reached.errors.d.mts +17 -0
  180. package/dist/contract/spend/spend-cap-reached.errors.mjs +15 -0
  181. package/dist/contract/state/actor-state.pure.d.mts +38 -0
  182. package/dist/contract/state/actor-state.pure.mjs +153 -0
  183. package/dist/contract/state/actor-state.service.d.mts +45 -0
  184. package/dist/contract/state/actor-state.service.mjs +18 -0
  185. package/dist/contract/state/state-migration.pure.d.mts +11 -0
  186. package/dist/contract/state/state-migration.pure.mjs +23 -0
  187. package/dist/contract/state/state-read.pure.d.mts +12 -0
  188. package/dist/contract/state/state-read.pure.mjs +22 -0
  189. package/dist/contract/state/state-unreadable.errors.d.mts +9 -0
  190. package/dist/contract/state/state-unreadable.errors.mjs +7 -0
  191. package/dist/host/actor/actor-database.service.d.mts +46 -0
  192. package/dist/host/actor/actor-database.service.mjs +112 -0
  193. package/dist/host/actor/actor-exclusive.pure.d.mts +7 -0
  194. package/dist/host/actor/actor-exclusive.pure.mjs +16 -0
  195. package/dist/host/actor/actor-records.sql.d.mts +29 -0
  196. package/dist/host/actor/actor-records.sql.mjs +26 -0
  197. package/dist/host/actor/reserved-name.errors.d.mts +10 -0
  198. package/dist/host/actor/reserved-name.errors.mjs +8 -0
  199. package/dist/host/actor/reserved-names.pure.d.mts +15 -0
  200. package/dist/host/actor/reserved-names.pure.mjs +20 -0
  201. package/dist/host/actor/room.actor.d.mts +4 -0
  202. package/dist/host/actor/room.actor.mjs +36 -0
  203. package/dist/host/blob/blob-frames.pure.d.mts +7 -0
  204. package/dist/host/blob/blob-frames.pure.mjs +28 -0
  205. package/dist/host/blob/blob-grant.schema.d.mts +14 -0
  206. package/dist/host/blob/blob-grant.schema.mjs +15 -0
  207. package/dist/host/blob/blob-grants.service.d.mts +28 -0
  208. package/dist/host/blob/blob-grants.service.mjs +129 -0
  209. package/dist/host/blob/blob-keyring.service.d.mts +18 -0
  210. package/dist/host/blob/blob-keyring.service.mjs +4 -0
  211. package/dist/host/blob/blob-range.pure.d.mts +13 -0
  212. package/dist/host/blob/blob-range.pure.mjs +23 -0
  213. package/dist/host/blob/blob-sealing.contract.d.mts +37 -0
  214. package/dist/host/blob/blob-sealing.contract.mjs +1 -0
  215. package/dist/host/blob/blob-sealing.service.d.mts +11 -0
  216. package/dist/host/blob/blob-sealing.service.mjs +16 -0
  217. package/dist/host/blob/export/blob-archive.sql.d.mts +21 -0
  218. package/dist/host/blob/export/blob-archive.sql.mjs +75 -0
  219. package/dist/host/blob/export/blob-export-holds.sql.d.mts +49 -0
  220. package/dist/host/blob/export/blob-export-holds.sql.mjs +25 -0
  221. package/dist/host/blob/plain-blob-sealing.pure.d.mts +5 -0
  222. package/dist/host/blob/plain-blob-sealing.pure.mjs +55 -0
  223. package/dist/host/blob/reference/blob-catalog.sql.d.mts +40 -0
  224. package/dist/host/blob/reference/blob-catalog.sql.mjs +145 -0
  225. package/dist/host/blob/reference/blob-coordinator.pure.d.mts +10 -0
  226. package/dist/host/blob/reference/blob-coordinator.pure.mjs +153 -0
  227. package/dist/host/blob/reference/blob-file-page.sql.d.mts +13 -0
  228. package/dist/host/blob/reference/blob-file-page.sql.mjs +21 -0
  229. package/dist/host/blob/reference/blob-forks.sql.d.mts +21 -0
  230. package/dist/host/blob/reference/blob-forks.sql.mjs +40 -0
  231. package/dist/host/blob/reference/blob-lineage.sql.d.mts +14 -0
  232. package/dist/host/blob/reference/blob-lineage.sql.mjs +24 -0
  233. package/dist/host/blob/reference/blob-reads.pure.d.mts +15 -0
  234. package/dist/host/blob/reference/blob-reads.pure.mjs +97 -0
  235. package/dist/host/blob/reference/blob-receipts.sql.d.mts +71 -0
  236. package/dist/host/blob/reference/blob-receipts.sql.mjs +176 -0
  237. package/dist/host/blob/reference/blob-transfer-adopt.pure.d.mts +21 -0
  238. package/dist/host/blob/reference/blob-transfer-adopt.pure.mjs +68 -0
  239. package/dist/host/blob/reference/blob-transfer-fork.pure.d.mts +15 -0
  240. package/dist/host/blob/reference/blob-transfer-fork.pure.mjs +125 -0
  241. package/dist/host/blob/reference/blob-transfer-upkeep.pure.d.mts +18 -0
  242. package/dist/host/blob/reference/blob-transfer-upkeep.pure.mjs +54 -0
  243. package/dist/host/blob/reference/blob-transfer.pure.d.mts +85 -0
  244. package/dist/host/blob/reference/blob-transfer.pure.mjs +1 -0
  245. package/dist/host/blob/sealed-blob-sealing.pure.d.mts +10 -0
  246. package/dist/host/blob/sealed-blob-sealing.pure.mjs +130 -0
  247. package/dist/host/blob/stream/blob-directory.pure.d.mts +18 -0
  248. package/dist/host/blob/stream/blob-directory.pure.mjs +84 -0
  249. package/dist/host/blob/stream/blob-length.pure.d.mts +9 -0
  250. package/dist/host/blob/stream/blob-length.pure.mjs +19 -0
  251. package/dist/host/blob/stream/blob-writing.pure.d.mts +8 -0
  252. package/dist/host/blob/stream/blob-writing.pure.mjs +15 -0
  253. package/dist/host/command/batch/command-batch.sql.d.mts +61 -0
  254. package/dist/host/command/batch/command-batch.sql.mjs +100 -0
  255. package/dist/host/command/command-context.adapter.d.mts +47 -0
  256. package/dist/host/command/command-context.adapter.mjs +90 -0
  257. package/dist/host/command/command-id-age.pure.d.mts +13 -0
  258. package/dist/host/command/command-id-age.pure.mjs +31 -0
  259. package/dist/host/command/command-id-reuse.pure.d.mts +28 -0
  260. package/dist/host/command/command-id-reuse.pure.mjs +38 -0
  261. package/dist/host/command/command-id-reused.errors.d.mts +13 -0
  262. package/dist/host/command/command-id-reused.errors.mjs +11 -0
  263. package/dist/host/command/command-journal.sql.d.mts +84 -0
  264. package/dist/host/command/command-journal.sql.mjs +74 -0
  265. package/dist/host/command/command-rejected.errors.d.mts +8 -0
  266. package/dist/host/command/command-rejected.errors.mjs +4 -0
  267. package/dist/host/command/command-replay.service.d.mts +62 -0
  268. package/dist/host/command/command-replay.service.mjs +140 -0
  269. package/dist/host/command/command-reply.pure.d.mts +8 -0
  270. package/dist/host/command/command-reply.pure.mjs +12 -0
  271. package/dist/host/command/command-runner.service.d.mts +68 -0
  272. package/dist/host/command/command-runner.service.mjs +215 -0
  273. package/dist/host/command/files/command-file-inputs.sql.d.mts +51 -0
  274. package/dist/host/command/files/command-file-inputs.sql.mjs +59 -0
  275. package/dist/host/command/history-pruned.errors.d.mts +10 -0
  276. package/dist/host/command/history-pruned.errors.mjs +8 -0
  277. package/dist/host/command/replay/replay-cursor-stalled.errors.d.mts +9 -0
  278. package/dist/host/command/replay/replay-cursor-stalled.errors.mjs +7 -0
  279. package/dist/host/command/replay/replay-cursor.pure.d.mts +7 -0
  280. package/dist/host/command/replay/replay-cursor.pure.mjs +12 -0
  281. package/dist/host/computer/computer-steps.sql.d.mts +14 -0
  282. package/dist/host/computer/computer-steps.sql.mjs +76 -0
  283. package/dist/host/computer/job-computers.service.d.mts +20 -0
  284. package/dist/host/computer/job-computers.service.mjs +59 -0
  285. package/dist/host/computer/local-computer-files.layer.d.mts +11 -0
  286. package/dist/host/computer/local-computer-files.layer.mjs +69 -0
  287. package/dist/host/computer/local-computer-log.layer.d.mts +23 -0
  288. package/dist/host/computer/local-computer-log.layer.mjs +64 -0
  289. package/dist/host/computer/local-computer-records.layer.d.mts +190 -0
  290. package/dist/host/computer/local-computer-records.layer.mjs +99 -0
  291. package/dist/host/computer/local-computer.schema.d.mts +69 -0
  292. package/dist/host/computer/local-computer.schema.mjs +29 -0
  293. package/dist/host/computer/local-computers.adapter.d.mts +18 -0
  294. package/dist/host/computer/local-computers.adapter.mjs +248 -0
  295. package/dist/host/computer/local-step.layer.d.mts +30 -0
  296. package/dist/host/computer/local-step.layer.mjs +119 -0
  297. package/dist/host/file/actor-file-storage.sql.d.mts +15 -0
  298. package/dist/host/file/actor-file-storage.sql.mjs +82 -0
  299. package/dist/host/file/actor-files.sql.d.mts +9 -0
  300. package/dist/host/file/actor-files.sql.mjs +3 -0
  301. package/dist/host/file/blob-home-lock.pure.d.mts +8 -0
  302. package/dist/host/file/blob-home-lock.pure.mjs +10 -0
  303. package/dist/host/file/blob-home.sql.d.mts +19 -0
  304. package/dist/host/file/blob-home.sql.mjs +30 -0
  305. package/dist/host/file/local-blob-home.service.d.mts +16 -0
  306. package/dist/host/file/local-blob-home.service.mjs +43 -0
  307. package/dist/host/file/local-blob-owner.sql.d.mts +30 -0
  308. package/dist/host/file/local-blob-owner.sql.mjs +68 -0
  309. package/dist/host/file/local-file-upkeep.pure.d.mts +12 -0
  310. package/dist/host/file/local-file-upkeep.pure.mjs +41 -0
  311. package/dist/host/file/replay-file-storage.sql.d.mts +7 -0
  312. package/dist/host/file/replay-file-storage.sql.mjs +26 -0
  313. package/dist/host/fork/actor-fork.sql.d.mts +52 -0
  314. package/dist/host/fork/actor-fork.sql.mjs +42 -0
  315. package/dist/host/fork/fork-computers.adapter.d.mts +43 -0
  316. package/dist/host/fork/fork-computers.adapter.mjs +193 -0
  317. package/dist/host/hash/blob-hashing.service.d.mts +10 -0
  318. package/dist/host/hash/blob-hashing.service.mjs +4 -0
  319. package/dist/host/job/job-durables.sql.d.mts +44 -0
  320. package/dist/host/job/job-durables.sql.mjs +136 -0
  321. package/dist/host/job/job-engine.adapter.d.mts +33 -0
  322. package/dist/host/job/job-engine.adapter.mjs +258 -0
  323. package/dist/host/job/job-journal.sql.d.mts +85 -0
  324. package/dist/host/job/job-journal.sql.mjs +109 -0
  325. package/dist/host/job/job-results.service.d.mts +37 -0
  326. package/dist/host/job/job-results.service.mjs +63 -0
  327. package/dist/host/job/job-runs.pure.d.mts +103 -0
  328. package/dist/host/job/job-runs.pure.mjs +193 -0
  329. package/dist/host/job/undelivered-result.pure.d.mts +49 -0
  330. package/dist/host/job/undelivered-result.pure.mjs +147 -0
  331. package/dist/host/layout/actor-layout.sql.d.mts +8 -0
  332. package/dist/host/layout/actor-layout.sql.mjs +33 -0
  333. package/dist/host/layout/layout-version.errors.d.mts +10 -0
  334. package/dist/host/layout/layout-version.errors.mjs +8 -0
  335. package/dist/host/layout/layout-version.pure.d.mts +10 -0
  336. package/dist/host/layout/layout-version.pure.mjs +14 -0
  337. package/dist/host/migration/actor-migrations.service.d.mts +46 -0
  338. package/dist/host/migration/actor-migrations.service.mjs +143 -0
  339. package/dist/host/migration/migration-edited.errors.d.mts +9 -0
  340. package/dist/host/migration/migration-edited.errors.mjs +7 -0
  341. package/dist/host/migration/migration-failed.errors.d.mts +12 -0
  342. package/dist/host/migration/migration-failed.errors.mjs +10 -0
  343. package/dist/host/migration/migration-failure.pure.d.mts +9 -0
  344. package/dist/host/migration/migration-failure.pure.mjs +19 -0
  345. package/dist/host/migration/migration-hasher.adapter.d.mts +15 -0
  346. package/dist/host/migration/migration-hasher.adapter.mjs +40 -0
  347. package/dist/host/migration/migration-missing.errors.d.mts +9 -0
  348. package/dist/host/migration/migration-missing.errors.mjs +7 -0
  349. package/dist/host/migration/migration-plan.pure.d.mts +20 -0
  350. package/dist/host/migration/migration-plan.pure.mjs +32 -0
  351. package/dist/host/outbox/actor-outbox.sql.d.mts +33 -0
  352. package/dist/host/outbox/actor-outbox.sql.mjs +28 -0
  353. package/dist/host/outbox/outbox-acknowledgements.sql.d.mts +12 -0
  354. package/dist/host/outbox/outbox-acknowledgements.sql.mjs +47 -0
  355. package/dist/host/outbox/outbox-runner.service.d.mts +37 -0
  356. package/dist/host/outbox/outbox-runner.service.mjs +155 -0
  357. package/dist/host/query/query-policy.pure.d.mts +15 -0
  358. package/dist/host/query/query-policy.pure.mjs +12 -0
  359. package/dist/host/query/query-runner.service.d.mts +42 -0
  360. package/dist/host/query/query-runner.service.mjs +72 -0
  361. package/dist/host/sqlite/actor-connections.pure.d.mts +26 -0
  362. package/dist/host/sqlite/actor-connections.pure.mjs +4 -0
  363. package/dist/host/sqlite/sqlite-connection.adapter.d.mts +22 -0
  364. package/dist/host/sqlite/sqlite-connection.adapter.mjs +151 -0
  365. package/dist/host/sqlite/sqlite-driver.service.d.mts +33 -0
  366. package/dist/host/sqlite/sqlite-driver.service.mjs +88 -0
  367. package/dist/host/sqlite/sqlite-parameters.pure.d.mts +5 -0
  368. package/dist/host/sqlite/sqlite-parameters.pure.mjs +21 -0
  369. package/dist/host/sqlite/sqlite-reason.pure.d.mts +8 -0
  370. package/dist/host/sqlite/sqlite-reason.pure.mjs +13 -0
  371. package/dist/host/timer/actor-timers.sql.d.mts +32 -0
  372. package/dist/host/timer/actor-timers.sql.mjs +8 -0
  373. package/dist/host/timer/timer-runner.service.d.mts +26 -0
  374. package/dist/host/timer/timer-runner.service.mjs +68 -0
  375. package/dist/host/upkeep/actor-due.sql.d.mts +26 -0
  376. package/dist/host/upkeep/actor-due.sql.mjs +43 -0
  377. package/dist/host/upkeep/actor-upkeep.service.d.mts +55 -0
  378. package/dist/host/upkeep/actor-upkeep.service.mjs +218 -0
  379. package/dist/host/upkeep/execution-authority.pure.d.mts +19 -0
  380. package/dist/host/upkeep/execution-authority.pure.mjs +10 -0
  381. package/dist/runtime/akter-local.layer.d.mts +28 -0
  382. package/dist/runtime/akter-local.layer.mjs +24 -0
  383. package/dist/runtime/akter.layer.d.mts +91 -0
  384. package/dist/runtime/akter.layer.mjs +99 -0
  385. package/dist/runtime/blob-hashing.layer.d.mts +4 -0
  386. package/dist/runtime/blob-hashing.layer.mjs +15 -0
  387. package/dist/runtime/hosted-environment.layer.d.mts +34 -0
  388. package/dist/runtime/hosted-environment.layer.mjs +40 -0
  389. package/dist/runtime/http-server.layer.d.mts +9 -0
  390. package/dist/runtime/http-server.layer.mjs +15 -0
  391. package/dist/runtime/local-actor-engine.layer.d.mts +10 -0
  392. package/dist/runtime/local-actor-engine.layer.mjs +14 -0
  393. package/dist/runtime/local-engine.layer.d.mts +15 -0
  394. package/dist/runtime/local-engine.layer.mjs +14 -0
  395. package/dist/runtime/local-environments.layer.d.mts +24 -0
  396. package/dist/runtime/local-environments.layer.mjs +159 -0
  397. package/dist/runtime/local-file-clients.layer.d.mts +13 -0
  398. package/dist/runtime/local-file-clients.layer.mjs +78 -0
  399. package/dist/runtime/local-job-runtime.layer.d.mts +19 -0
  400. package/dist/runtime/local-job-runtime.layer.mjs +21 -0
  401. package/dist/serve/archive/archived-actors.layer.d.mts +17 -0
  402. package/dist/serve/archive/archived-actors.layer.mjs +84 -0
  403. package/dist/serve/archive/archived-store.layer.d.mts +12 -0
  404. package/dist/serve/archive/archived-store.layer.mjs +40 -0
  405. package/dist/serve/engine/actor-engine.layer.d.mts +8 -0
  406. package/dist/serve/engine/actor-engine.layer.mjs +30 -0
  407. package/dist/serve/engine/actor-fork.service.d.mts +63 -0
  408. package/dist/serve/engine/actor-fork.service.mjs +277 -0
  409. package/dist/serve/engine/actor-holding.pure.d.mts +7 -0
  410. package/dist/serve/engine/actor-holding.pure.mjs +9 -0
  411. package/dist/serve/engine/actor-host.service.d.mts +66 -0
  412. package/dist/serve/engine/actor-host.service.mjs +209 -0
  413. package/dist/serve/engine/actor-location.service.d.mts +38 -0
  414. package/dist/serve/engine/actor-location.service.mjs +109 -0
  415. package/dist/serve/engine/actor-residents.pure.d.mts +92 -0
  416. package/dist/serve/engine/actor-residents.pure.mjs +201 -0
  417. package/dist/serve/engine/actor-shard.pure.d.mts +4 -0
  418. package/dist/serve/engine/actor-shard.pure.mjs +8 -0
  419. package/dist/serve/engine/actor-state.pure.d.mts +17 -0
  420. package/dist/serve/engine/actor-state.pure.mjs +20 -0
  421. package/dist/serve/engine/actors-not-hosted.errors.d.mts +9 -0
  422. package/dist/serve/engine/actors-not-hosted.errors.mjs +7 -0
  423. package/dist/serve/engine/job-runtime.layer.d.mts +6 -0
  424. package/dist/serve/engine/job-runtime.layer.mjs +5 -0
  425. package/dist/serve/environment/environment-already-exists.errors.d.mts +10 -0
  426. package/dist/serve/environment/environment-already-exists.errors.mjs +9 -0
  427. package/dist/serve/environment/environment-in-use.errors.d.mts +10 -0
  428. package/dist/serve/environment/environment-in-use.errors.mjs +14 -0
  429. package/dist/serve/environment/environment-not-found.errors.d.mts +10 -0
  430. package/dist/serve/environment/environment-not-found.errors.mjs +9 -0
  431. package/dist/serve/environment/environment-records.sql.d.mts +92 -0
  432. package/dist/serve/environment/environment-records.sql.mjs +59 -0
  433. package/dist/serve/environment/environment-store.sql.d.mts +38 -0
  434. package/dist/serve/environment/environment-store.sql.mjs +78 -0
  435. package/dist/serve/environment/local-environment.schema.d.mts +38 -0
  436. package/dist/serve/environment/local-environment.schema.mjs +43 -0
  437. package/dist/serve/environment/local-environments.service.d.mts +44 -0
  438. package/dist/serve/environment/local-environments.service.mjs +196 -0
  439. package/dist/serve/environment/promotion-notice.pure.d.mts +22 -0
  440. package/dist/serve/environment/promotion-notice.pure.mjs +30 -0
  441. package/dist/serve/environment/snapshot-operations.sql.d.mts +32 -0
  442. package/dist/serve/environment/snapshot-operations.sql.mjs +131 -0
  443. package/dist/serve/environment/store-snapshot.sql.d.mts +32 -0
  444. package/dist/serve/environment/store-snapshot.sql.mjs +74 -0
  445. package/dist/serve/erasure/local-actor-erasure.service.d.mts +26 -0
  446. package/dist/serve/erasure/local-actor-erasure.service.mjs +102 -0
  447. package/dist/serve/history/actor-host-runners.service.d.mts +23 -0
  448. package/dist/serve/history/actor-host-runners.service.mjs +35 -0
  449. package/dist/serve/hosted/hosted-app-build.errors.d.mts +13 -0
  450. package/dist/serve/hosted/hosted-app-build.errors.mjs +9 -0
  451. package/dist/serve/hosted/hosted-app-checks.layer.d.mts +15 -0
  452. package/dist/serve/hosted/hosted-app-checks.layer.mjs +32 -0
  453. package/dist/serve/hosted/hosted-file-forward.layer.d.mts +22 -0
  454. package/dist/serve/hosted/hosted-file-forward.layer.mjs +42 -0
  455. package/dist/serve/hosted/hosted-file-rpcs.layer.d.mts +25 -0
  456. package/dist/serve/hosted/hosted-file-rpcs.layer.mjs +82 -0
  457. package/dist/serve/hosted/hosted-file-server.layer.d.mts +18 -0
  458. package/dist/serve/hosted/hosted-file-server.layer.mjs +33 -0
  459. package/dist/serve/hosted/hosted-files.layer.d.mts +32 -0
  460. package/dist/serve/hosted/hosted-files.layer.mjs +55 -0
  461. package/dist/serve/hosted/hosted-runtime.layer.d.mts +42 -0
  462. package/dist/serve/hosted/hosted-runtime.layer.mjs +48 -0
  463. package/dist/serve/hosted/hosted-runtime.service.d.mts +77 -0
  464. package/dist/serve/hosted/hosted-runtime.service.mjs +74 -0
  465. package/dist/serve/hosted/hosted-secrets.layer.d.mts +10 -0
  466. package/dist/serve/hosted/hosted-secrets.layer.mjs +28 -0
  467. package/dist/serve/http/loopback-host.pure.d.mts +11 -0
  468. package/dist/serve/http/loopback-host.pure.mjs +29 -0
  469. package/dist/serve/inspect/actor-inspection.schema.d.mts +119 -0
  470. package/dist/serve/inspect/actor-inspection.schema.mjs +75 -0
  471. package/dist/serve/inspect/actor-inspection.sql.d.mts +12 -0
  472. package/dist/serve/inspect/actor-inspection.sql.mjs +43 -0
  473. package/dist/serve/inspect/inspect.service.d.mts +24 -0
  474. package/dist/serve/inspect/inspect.service.mjs +92 -0
  475. package/dist/serve/inspect/inspector-page.pure.d.mts +2 -0
  476. package/dist/serve/inspect/inspector-page.pure.mjs +155 -0
  477. package/dist/serve/inspect/inspector-wal.pure.d.mts +3 -0
  478. package/dist/serve/inspect/inspector-wal.pure.mjs +19 -0
  479. package/dist/serve/inspect/inspector.handlers.d.mts +5 -0
  480. package/dist/serve/inspect/inspector.handlers.mjs +50 -0
  481. package/dist/serve/inspect/inspector.layer.d.mts +9 -0
  482. package/dist/serve/inspect/inspector.layer.mjs +14 -0
  483. package/dist/serve/live/live-reads.service.d.mts +44 -0
  484. package/dist/serve/live/live-reads.service.mjs +152 -0
  485. package/dist/serve/live/live-tables.sql.d.mts +35 -0
  486. package/dist/serve/live/live-tables.sql.mjs +66 -0
  487. package/dist/serve/live/state-reads.pure.d.mts +11 -0
  488. package/dist/serve/live/state-reads.pure.mjs +7 -0
  489. package/dist/serve/rpc/actor-rpc.handlers.d.mts +24 -0
  490. package/dist/serve/rpc/actor-rpc.handlers.mjs +142 -0
  491. package/dist/serve/rpc/akter-server.layer.d.mts +18 -0
  492. package/dist/serve/rpc/akter-server.layer.mjs +61 -0
  493. package/dist/serve/rpc/computer/computer-copy.layer.d.mts +22 -0
  494. package/dist/serve/rpc/computer/computer-copy.layer.mjs +70 -0
  495. package/dist/serve/rpc/computer/computer-rpc-access.pure.d.mts +29 -0
  496. package/dist/serve/rpc/computer/computer-rpc-access.pure.mjs +46 -0
  497. package/dist/serve/rpc/computer/computer-rpc.layer.d.mts +39 -0
  498. package/dist/serve/rpc/computer/computer-rpc.layer.mjs +84 -0
  499. package/dist/serve/rpc/computer/step-rpc.handlers.d.mts +23 -0
  500. package/dist/serve/rpc/computer/step-rpc.handlers.mjs +43 -0
  501. package/dist/serve/rpc/development-authentication.handlers.d.mts +7 -0
  502. package/dist/serve/rpc/development-authentication.handlers.mjs +19 -0
  503. package/dist/serve/rpc/development-guard.pure.d.mts +10 -0
  504. package/dist/serve/rpc/development-guard.pure.mjs +16 -0
  505. package/dist/serve/rpc/file/file-rpc-access.pure.d.mts +55 -0
  506. package/dist/serve/rpc/file/file-rpc-access.pure.mjs +67 -0
  507. package/dist/serve/rpc/file/file-rpc.layer.d.mts +53 -0
  508. package/dist/serve/rpc/file/file-rpc.layer.mjs +143 -0
  509. package/dist/serve/rpc/file/upload-sessions.pure.d.mts +45 -0
  510. package/dist/serve/rpc/file/upload-sessions.pure.mjs +187 -0
  511. package/dist/serve/rpc/in-process-client.layer.d.mts +13 -0
  512. package/dist/serve/rpc/in-process-client.layer.mjs +34 -0
  513. package/dist/serve/rpc/listener-not-loopback.errors.d.mts +9 -0
  514. package/dist/serve/rpc/listener-not-loopback.errors.mjs +7 -0
  515. package/dist/serve/rpc/ndjson-only.pure.d.mts +5 -0
  516. package/dist/serve/rpc/ndjson-only.pure.mjs +14 -0
  517. package/dist/serve/rpc/served-rpc.layer.d.mts +6 -0
  518. package/dist/serve/rpc/served-rpc.layer.mjs +19 -0
  519. package/dist/serve/store/actor-not-migrated.errors.d.mts +10 -0
  520. package/dist/serve/store/actor-not-migrated.errors.mjs +8 -0
  521. package/dist/serve/store/store-migrations.layer.d.mts +5 -0
  522. package/dist/serve/store/store-migrations.layer.mjs +18 -0
  523. package/dist/serve/store/store-migrations.service.d.mts +26 -0
  524. package/dist/serve/store/store-migrations.service.mjs +47 -0
  525. package/dist/serve/store/store-unreadable.errors.d.mts +9 -0
  526. package/dist/serve/store/store-unreadable.errors.mjs +7 -0
  527. package/dist/serve/verify/verify.layer.d.mts +16 -0
  528. package/dist/serve/verify/verify.layer.mjs +36 -0
  529. package/dist/testing/story-driver.service.d.mts +29 -0
  530. package/dist/testing/story-driver.service.mjs +126 -0
  531. package/dist/testing/story.layer.d.mts +21 -0
  532. package/dist/testing/story.layer.mjs +42 -0
  533. package/package.json +106 -3
  534. package/src/contract/actor/actor-already-exists.errors.ts +8 -0
  535. package/src/contract/actor/actor-definition.pure.ts +157 -0
  536. package/src/contract/actor/actor-erased.errors.ts +8 -0
  537. package/src/contract/actor/actor-names.pure.ts +64 -0
  538. package/src/contract/actor/actor-not-created.errors.ts +8 -0
  539. package/src/contract/actor/actor-not-registered.errors.ts +8 -0
  540. package/src/contract/actor/actor-registry.service.ts +35 -0
  541. package/src/contract/actor/actor.contract.ts +409 -0
  542. package/src/contract/actor/host-interface.pure.ts +60 -0
  543. package/src/contract/actor/reserved-member.errors.ts +9 -0
  544. package/src/contract/akter.service.ts +233 -0
  545. package/src/contract/caller/authentication.api.ts +9 -0
  546. package/src/contract/caller/caller-admission.pure.ts +90 -0
  547. package/src/contract/caller/caller-not-allowed.errors.ts +26 -0
  548. package/src/contract/caller/caller.schema.ts +7 -0
  549. package/src/contract/caller/current-caller.service.ts +7 -0
  550. package/src/contract/caller/principal.schema.ts +13 -0
  551. package/src/contract/caller/unauthenticated.errors.ts +8 -0
  552. package/src/contract/client/actor-client.adapter.ts +217 -0
  553. package/src/contract/client/actor-client.contract.ts +53 -0
  554. package/src/contract/client/actor-rpc.contract.ts +91 -0
  555. package/src/contract/client/actor-unavailable.errors.ts +9 -0
  556. package/src/contract/client/client-failure.contract.ts +53 -0
  557. package/src/contract/client/invalid-request.errors.ts +9 -0
  558. package/src/contract/client/storage-limit.errors.ts +16 -0
  559. package/src/contract/command/command-id-expired.errors.ts +11 -0
  560. package/src/contract/command/command-id.schema.ts +5 -0
  561. package/src/contract/command/command.contract.ts +334 -0
  562. package/src/contract/command/outbox-id.pure.ts +25 -0
  563. package/src/contract/command/outbox.schema.ts +11 -0
  564. package/src/contract/command/timer.schema.ts +21 -0
  565. package/src/contract/computer/checkpoint-expired.errors.ts +12 -0
  566. package/src/contract/computer/computer-client-failure.contract.ts +27 -0
  567. package/src/contract/computer/computer-client.adapter.ts +110 -0
  568. package/src/contract/computer/computer-client.contract.ts +75 -0
  569. package/src/contract/computer/computer-held.errors.ts +10 -0
  570. package/src/contract/computer/computer-limit.errors.ts +11 -0
  571. package/src/contract/computer/computer-lost.errors.ts +10 -0
  572. package/src/contract/computer/computer-not-found.errors.ts +9 -0
  573. package/src/contract/computer/computer.schema.ts +159 -0
  574. package/src/contract/computer/computers-unavailable.errors.ts +9 -0
  575. package/src/contract/computer/files/computer-files.schema.ts +31 -0
  576. package/src/contract/computer/rpc/computer-rpc.contract.ts +140 -0
  577. package/src/contract/computer/step/computer-step.contract.ts +126 -0
  578. package/src/contract/computer/step/computer-step.schema.ts +80 -0
  579. package/src/contract/computer/step/step-failure.schema.ts +26 -0
  580. package/src/contract/computer/step/step-not-found.errors.ts +7 -0
  581. package/src/contract/description/published-contract.pure.ts +187 -0
  582. package/src/contract/file/access/file-access-denied.errors.ts +11 -0
  583. package/src/contract/file/access/file-access.contract.ts +56 -0
  584. package/src/contract/file/actor-files.contract.ts +78 -0
  585. package/src/contract/file/blob-transfer.errors.ts +6 -0
  586. package/src/contract/file/file-client-failure.contract.ts +43 -0
  587. package/src/contract/file/file-client.adapter.ts +45 -0
  588. package/src/contract/file/file-client.contract.ts +24 -0
  589. package/src/contract/file/file-listing.pure.ts +30 -0
  590. package/src/contract/file/file-not-found.errors.ts +6 -0
  591. package/src/contract/file/file-path.pure.ts +37 -0
  592. package/src/contract/file/files-unavailable.errors.ts +8 -0
  593. package/src/contract/file/invalid-file-request.errors.ts +9 -0
  594. package/src/contract/file/rpc/file-rpc.contract.ts +148 -0
  595. package/src/contract/file/rpc/file-too-large.errors.ts +10 -0
  596. package/src/contract/file/rpc/rpc-file-clients.layer.ts +184 -0
  597. package/src/contract/fork/fork-rpc.contract.ts +44 -0
  598. package/src/contract/history/actor-journal.service.ts +195 -0
  599. package/src/contract/history/history-entry.pure.ts +282 -0
  600. package/src/contract/hosted/handler-failed.errors.ts +16 -0
  601. package/src/contract/hosted/handler-failure.pure.ts +161 -0
  602. package/src/contract/hosted/hosted-actor.service.ts +97 -0
  603. package/src/contract/hosted/hosted-command.service.ts +114 -0
  604. package/src/contract/hosted/hosted-create.service.ts +95 -0
  605. package/src/contract/hosted/hosted-error.contract.ts +22 -0
  606. package/src/contract/hosted/hosted-failure.schema.ts +32 -0
  607. package/src/contract/hosted/hosted-outcome.contract.ts +21 -0
  608. package/src/contract/hosted/hosted-query.service.ts +50 -0
  609. package/src/contract/hosted/hosted-request.pure.ts +185 -0
  610. package/src/contract/job/job-id.pure.ts +37 -0
  611. package/src/contract/job/job-patches.contract.ts +86 -0
  612. package/src/contract/job/job-signal.schema.ts +23 -0
  613. package/src/contract/job/reserved-payload-field.errors.ts +10 -0
  614. package/src/contract/job/started-job.schema.ts +9 -0
  615. package/src/contract/json-codec.pure.ts +27 -0
  616. package/src/contract/room.contract.ts +31 -0
  617. package/src/contract/secret/actor-secrets.adapter.ts +87 -0
  618. package/src/contract/secret/invalid-secret-name.errors.ts +10 -0
  619. package/src/contract/secret/secret-unavailable.errors.ts +13 -0
  620. package/src/contract/secret/secret.schema.ts +43 -0
  621. package/src/contract/spend/billing-unavailable.errors.ts +12 -0
  622. package/src/contract/spend/spend-cap-reached.errors.ts +17 -0
  623. package/src/contract/state/actor-state.pure.ts +192 -0
  624. package/src/contract/state/actor-state.service.ts +69 -0
  625. package/src/contract/state/state-migration.pure.ts +57 -0
  626. package/src/contract/state/state-read.pure.ts +40 -0
  627. package/src/contract/state/state-unreadable.errors.ts +9 -0
  628. package/src/host/actor/actor-database.service.ts +145 -0
  629. package/src/host/actor/actor-exclusive.pure.ts +32 -0
  630. package/src/host/actor/actor-records.sql.ts +78 -0
  631. package/src/host/actor/reserved-name.errors.ts +10 -0
  632. package/src/host/actor/reserved-names.pure.ts +40 -0
  633. package/src/host/actor/room.actor.ts +57 -0
  634. package/src/host/blob/blob-frames.pure.ts +52 -0
  635. package/src/host/blob/blob-grant.schema.ts +22 -0
  636. package/src/host/blob/blob-grants.service.ts +197 -0
  637. package/src/host/blob/blob-keyring.service.ts +25 -0
  638. package/src/host/blob/blob-range.pure.ts +33 -0
  639. package/src/host/blob/blob-sealing.contract.ts +46 -0
  640. package/src/host/blob/blob-sealing.service.ts +25 -0
  641. package/src/host/blob/export/blob-archive.sql.ts +153 -0
  642. package/src/host/blob/export/blob-export-holds.sql.ts +91 -0
  643. package/src/host/blob/plain-blob-sealing.pure.ts +70 -0
  644. package/src/host/blob/reference/blob-catalog.sql.ts +339 -0
  645. package/src/host/blob/reference/blob-coordinator.pure.ts +217 -0
  646. package/src/host/blob/reference/blob-file-page.sql.ts +48 -0
  647. package/src/host/blob/reference/blob-forks.sql.ts +125 -0
  648. package/src/host/blob/reference/blob-lineage.sql.ts +63 -0
  649. package/src/host/blob/reference/blob-reads.pure.ts +172 -0
  650. package/src/host/blob/reference/blob-receipts.sql.ts +375 -0
  651. package/src/host/blob/reference/blob-transfer-adopt.pure.ts +127 -0
  652. package/src/host/blob/reference/blob-transfer-fork.pure.ts +174 -0
  653. package/src/host/blob/reference/blob-transfer-upkeep.pure.ts +132 -0
  654. package/src/host/blob/reference/blob-transfer.pure.ts +127 -0
  655. package/src/host/blob/sealed-blob-sealing.pure.ts +163 -0
  656. package/src/host/blob/stream/blob-directory.pure.ts +177 -0
  657. package/src/host/blob/stream/blob-length.pure.ts +40 -0
  658. package/src/host/blob/stream/blob-writing.pure.ts +49 -0
  659. package/src/host/command/batch/command-batch.sql.ts +207 -0
  660. package/src/host/command/command-context.adapter.ts +134 -0
  661. package/src/host/command/command-id-age.pure.ts +54 -0
  662. package/src/host/command/command-id-reuse.pure.ts +90 -0
  663. package/src/host/command/command-id-reused.errors.ts +13 -0
  664. package/src/host/command/command-journal.sql.ts +232 -0
  665. package/src/host/command/command-rejected.errors.ts +8 -0
  666. package/src/host/command/command-replay.service.ts +223 -0
  667. package/src/host/command/command-reply.pure.ts +21 -0
  668. package/src/host/command/command-runner.service.ts +320 -0
  669. package/src/host/command/files/command-file-inputs.sql.ts +114 -0
  670. package/src/host/command/history-pruned.errors.ts +10 -0
  671. package/src/host/command/replay/replay-cursor-stalled.errors.ts +9 -0
  672. package/src/host/command/replay/replay-cursor.pure.ts +19 -0
  673. package/src/host/computer/computer-steps.sql.ts +120 -0
  674. package/src/host/computer/job-computers.service.ts +84 -0
  675. package/src/host/computer/local-computer-files.layer.ts +103 -0
  676. package/src/host/computer/local-computer-log.layer.ts +115 -0
  677. package/src/host/computer/local-computer-records.layer.ts +205 -0
  678. package/src/host/computer/local-computer.schema.ts +36 -0
  679. package/src/host/computer/local-computers.adapter.ts +379 -0
  680. package/src/host/computer/local-step.layer.ts +174 -0
  681. package/src/host/file/actor-file-storage.sql.ts +79 -0
  682. package/src/host/file/actor-files.sql.ts +15 -0
  683. package/src/host/file/blob-home-lock.pure.ts +23 -0
  684. package/src/host/file/blob-home.sql.ts +55 -0
  685. package/src/host/file/local-blob-home.service.ts +71 -0
  686. package/src/host/file/local-blob-owner.sql.ts +89 -0
  687. package/src/host/file/local-file-upkeep.pure.ts +77 -0
  688. package/src/host/file/replay-file-storage.sql.ts +43 -0
  689. package/src/host/fork/actor-fork.sql.ts +110 -0
  690. package/src/host/fork/fork-computers.adapter.ts +366 -0
  691. package/src/host/hash/blob-hashing.service.ts +14 -0
  692. package/src/host/job/job-durables.sql.ts +214 -0
  693. package/src/host/job/job-engine.adapter.ts +420 -0
  694. package/src/host/job/job-journal.sql.ts +257 -0
  695. package/src/host/job/job-results.service.ts +111 -0
  696. package/src/host/job/job-runs.pure.ts +445 -0
  697. package/src/host/job/undelivered-result.pure.ts +265 -0
  698. package/src/host/layout/actor-layout.sql.ts +45 -0
  699. package/src/host/layout/layout-version.errors.ts +10 -0
  700. package/src/host/layout/layout-version.pure.ts +22 -0
  701. package/src/host/migration/actor-migrations.service.ts +159 -0
  702. package/src/host/migration/migration-edited.errors.ts +9 -0
  703. package/src/host/migration/migration-failed.errors.ts +12 -0
  704. package/src/host/migration/migration-failure.pure.ts +28 -0
  705. package/src/host/migration/migration-hasher.adapter.ts +70 -0
  706. package/src/host/migration/migration-missing.errors.ts +9 -0
  707. package/src/host/migration/migration-plan.pure.ts +66 -0
  708. package/src/host/outbox/actor-outbox.sql.ts +98 -0
  709. package/src/host/outbox/outbox-acknowledgements.sql.ts +93 -0
  710. package/src/host/outbox/outbox-runner.service.ts +253 -0
  711. package/src/host/query/query-policy.pure.ts +31 -0
  712. package/src/host/query/query-runner.service.ts +132 -0
  713. package/src/host/sqlite/actor-connections.pure.ts +44 -0
  714. package/src/host/sqlite/sqlite-connection.adapter.ts +260 -0
  715. package/src/host/sqlite/sqlite-driver.service.ts +151 -0
  716. package/src/host/sqlite/sqlite-parameters.pure.ts +28 -0
  717. package/src/host/sqlite/sqlite-reason.pure.ts +19 -0
  718. package/src/host/timer/actor-timers.sql.ts +67 -0
  719. package/src/host/timer/timer-runner.service.ts +117 -0
  720. package/src/host/upkeep/actor-due.sql.ts +71 -0
  721. package/src/host/upkeep/actor-upkeep.service.ts +404 -0
  722. package/src/host/upkeep/execution-authority.pure.ts +37 -0
  723. package/src/runtime/akter-local.layer.ts +49 -0
  724. package/src/runtime/akter.layer.ts +208 -0
  725. package/src/runtime/blob-hashing.layer.ts +21 -0
  726. package/src/runtime/hosted-environment.layer.ts +85 -0
  727. package/src/runtime/http-server.layer.ts +29 -0
  728. package/src/runtime/local-actor-engine.layer.ts +33 -0
  729. package/src/runtime/local-engine.layer.ts +37 -0
  730. package/src/runtime/local-environments.layer.ts +214 -0
  731. package/src/runtime/local-file-clients.layer.ts +112 -0
  732. package/src/runtime/local-job-runtime.layer.ts +38 -0
  733. package/src/serve/archive/archived-actors.layer.ts +97 -0
  734. package/src/serve/archive/archived-store.layer.ts +46 -0
  735. package/src/serve/engine/actor-engine.layer.ts +46 -0
  736. package/src/serve/engine/actor-fork.service.ts +403 -0
  737. package/src/serve/engine/actor-holding.pure.ts +28 -0
  738. package/src/serve/engine/actor-host.service.ts +454 -0
  739. package/src/serve/engine/actor-location.service.ts +219 -0
  740. package/src/serve/engine/actor-residents.pure.ts +500 -0
  741. package/src/serve/engine/actor-shard.pure.ts +13 -0
  742. package/src/serve/engine/actor-state.pure.ts +45 -0
  743. package/src/serve/engine/actors-not-hosted.errors.ts +9 -0
  744. package/src/serve/engine/job-runtime.layer.ts +13 -0
  745. package/src/serve/environment/environment-already-exists.errors.ts +9 -0
  746. package/src/serve/environment/environment-in-use.errors.ts +17 -0
  747. package/src/serve/environment/environment-not-found.errors.ts +9 -0
  748. package/src/serve/environment/environment-records.sql.ts +208 -0
  749. package/src/serve/environment/environment-store.sql.ts +116 -0
  750. package/src/serve/environment/local-environment.schema.ts +79 -0
  751. package/src/serve/environment/local-environments.service.ts +268 -0
  752. package/src/serve/environment/promotion-notice.pure.ts +63 -0
  753. package/src/serve/environment/snapshot-operations.sql.ts +210 -0
  754. package/src/serve/environment/store-snapshot.sql.ts +128 -0
  755. package/src/serve/erasure/local-actor-erasure.service.ts +170 -0
  756. package/src/serve/history/actor-host-runners.service.ts +85 -0
  757. package/src/serve/hosted/hosted-app-build.errors.ts +11 -0
  758. package/src/serve/hosted/hosted-app-checks.layer.ts +74 -0
  759. package/src/serve/hosted/hosted-file-forward.layer.ts +63 -0
  760. package/src/serve/hosted/hosted-file-rpcs.layer.ts +149 -0
  761. package/src/serve/hosted/hosted-file-server.layer.ts +75 -0
  762. package/src/serve/hosted/hosted-files.layer.ts +76 -0
  763. package/src/serve/hosted/hosted-runtime.layer.ts +145 -0
  764. package/src/serve/hosted/hosted-runtime.service.ts +128 -0
  765. package/src/serve/hosted/hosted-secrets.layer.ts +38 -0
  766. package/src/serve/http/loopback-host.pure.ts +67 -0
  767. package/src/serve/inspect/actor-inspection.schema.ts +94 -0
  768. package/src/serve/inspect/actor-inspection.sql.ts +112 -0
  769. package/src/serve/inspect/inspect.service.ts +173 -0
  770. package/src/serve/inspect/inspector-page.pure.ts +159 -0
  771. package/src/serve/inspect/inspector-wal.pure.ts +40 -0
  772. package/src/serve/inspect/inspector.handlers.ts +103 -0
  773. package/src/serve/inspect/inspector.layer.ts +26 -0
  774. package/src/serve/live/live-reads.service.ts +285 -0
  775. package/src/serve/live/live-tables.sql.ts +148 -0
  776. package/src/serve/live/state-reads.pure.ts +22 -0
  777. package/src/serve/rpc/actor-rpc.handlers.ts +242 -0
  778. package/src/serve/rpc/akter-server.layer.ts +119 -0
  779. package/src/serve/rpc/computer/computer-copy.layer.ts +95 -0
  780. package/src/serve/rpc/computer/computer-rpc-access.pure.ts +75 -0
  781. package/src/serve/rpc/computer/computer-rpc.layer.ts +143 -0
  782. package/src/serve/rpc/computer/step-rpc.handlers.ts +84 -0
  783. package/src/serve/rpc/development-authentication.handlers.ts +28 -0
  784. package/src/serve/rpc/development-guard.pure.ts +39 -0
  785. package/src/serve/rpc/file/file-rpc-access.pure.ts +119 -0
  786. package/src/serve/rpc/file/file-rpc.layer.ts +209 -0
  787. package/src/serve/rpc/file/upload-sessions.pure.ts +363 -0
  788. package/src/serve/rpc/in-process-client.layer.ts +62 -0
  789. package/src/serve/rpc/listener-not-loopback.errors.ts +9 -0
  790. package/src/serve/rpc/ndjson-only.pure.ts +33 -0
  791. package/src/serve/rpc/served-rpc.layer.ts +34 -0
  792. package/src/serve/store/actor-not-migrated.errors.ts +10 -0
  793. package/src/serve/store/store-migrations.layer.ts +35 -0
  794. package/src/serve/store/store-migrations.service.ts +76 -0
  795. package/src/serve/store/store-unreadable.errors.ts +9 -0
  796. package/src/serve/verify/verify.layer.ts +77 -0
  797. package/src/testing/story-driver.service.ts +266 -0
  798. package/src/testing/story.layer.ts +99 -0
@@ -0,0 +1,78 @@
1
+ import { Akter } from "../contract/akter.service.mjs";
2
+ import { ActorFileClients } from "../contract/file/file-client.adapter.mjs";
3
+ import { BlobTransferError } from "../contract/file/blob-transfer.errors.mjs";
4
+ import { FileNotFoundError } from "../contract/file/file-not-found.errors.mjs";
5
+ import { filePathOf } from "../contract/file/file-path.pure.mjs";
6
+ import { fileListingOf } from "../contract/file/file-listing.pure.mjs";
7
+ import { filePage } from "../host/blob/reference/blob-file-page.sql.mjs";
8
+ import { ActorHost } from "../serve/engine/actor-host.service.mjs";
9
+ import { Array, Effect, Layer, Option, Stream } from "effect";
10
+ // src/runtime/local-file-clients.layer.ts
11
+ const noBytes = 0n;
12
+ const outsideActor = Effect.flatMap(Effect.serviceOption(Akter), (actor) => {
13
+ if (Option.isSome(actor)) return Effect.fail(BlobTransferError.make({
14
+ blob: "",
15
+ message: "use the file client outside actor commands and queries, and Akter.files inside them"
16
+ }));
17
+ return Effect.void;
18
+ });
19
+ const uploadWith = ({ address, host }) => Effect.fnUntraced(function* upload(source) {
20
+ yield* outsideActor;
21
+ const { home, kick, owner } = yield* host.prepareFiles(address);
22
+ return yield* Effect.tap(home.transfers.upload({
23
+ owner,
24
+ source
25
+ }), () => kick);
26
+ }, Effect.scoped);
27
+ const downloadWith = ({ address, host }, path, range) => Stream.unwrap(Effect.gen(function* download() {
28
+ yield* outsideActor;
29
+ const valid = yield* filePathOf(path);
30
+ const found = yield* host.currentFiles(address);
31
+ if (Option.isNone(found)) return yield* FileNotFoundError.make({ path: valid });
32
+ const { home, owner } = found.value;
33
+ const link = yield* owner.exclusive(owner.transaction(owner.receipts.link(valid)));
34
+ const file = yield* Effect.mapError(Effect.fromOption(link), () => FileNotFoundError.make({ path: valid }));
35
+ const opening = {
36
+ actor: owner.actor,
37
+ blob: file.blob,
38
+ grant: file.grant
39
+ };
40
+ return Option.match(Option.fromNullishOr(range), {
41
+ onNone: () => home.transfers.open(opening),
42
+ onSome: (requested) => home.transfers.open({
43
+ ...opening,
44
+ range: requested
45
+ })
46
+ });
47
+ }));
48
+ const pageWith = ({ address, host }, listing) => Effect.gen(function* list() {
49
+ yield* outsideActor;
50
+ const valid = yield* fileListingOf(listing);
51
+ const found = yield* host.currentFiles(address);
52
+ if (Option.isNone(found)) return {
53
+ cursor: Option.none(),
54
+ entries: []
55
+ };
56
+ const { owner, sql } = found.value;
57
+ return yield* owner.exclusive(owner.transaction(filePage({
58
+ actor: owner.actor,
59
+ listing: valid,
60
+ sql
61
+ })));
62
+ }).pipe(Effect.scoped);
63
+ const clientWith = (binding) => ({
64
+ download: (path, range) => downloadWith(binding, path, range),
65
+ fileUsage: (listing = {}) => Effect.map(pageWith(binding, listing), (page) => ({
66
+ ...page,
67
+ bytes: Array.reduce(page.entries, noBytes, (total, file) => total + BigInt(file.bytes))
68
+ })),
69
+ list: (listing = {}) => pageWith(binding, listing),
70
+ upload: uploadWith(binding)
71
+ });
72
+ /** The file client of one actor on this host, outside its commands and queries. */
73
+ const hostFileClient = clientWith;
74
+ const localFileClients = Layer.effect(ActorFileClients, Effect.map(ActorHost, (host) => ({ connect: (address) => clientWith({
75
+ address,
76
+ host
77
+ }) })));
78
+ export { hostFileClient, localFileClients };
@@ -0,0 +1,19 @@
1
+ import { ActorSecrets } from "../contract/secret/actor-secrets.adapter.mjs";
2
+ import { JobComputers } from "../host/computer/job-computers.service.mjs";
3
+ import { JobEngine } from "../host/job/job-engine.adapter.mjs";
4
+ import { Effect, FileSystem, Layer, Path } from "effect";
5
+ import { ChildProcessSpawner } from "effect/process";
6
+ /** What the local engine's computers run on: the disk and a process spawner. */
7
+ type ComputerNeeds = ChildProcessSpawner.ChildProcessSpawner | FileSystem.FileSystem | Path.Path;
8
+ /** What binding the computers needs: the computers to bind, and what they run on. */
9
+ type BinderNeeds = ComputerNeeds | JobComputers;
10
+ /**
11
+ * The local engine's job runtime, for an app layer whose job handlers need the `WorkflowEngine`. Its job activities
12
+ * read their declared secrets from the current `ConfigProvider`: the process environment, as Bun loads it with `.env`.
13
+ * With `AKTER_LOCAL_COMPUTERS` on, they reach the computers of the store `Akter.local` serves through
14
+ * `Actor.computer(key)`, because both hold the same `JobComputers`, as they hold the same job engine.
15
+ */
16
+ declare const jobs: Layer.Layer<ActorSecrets | JobComputers | JobEngine | import("effect/workflow/WorkflowEngine").WorkflowEngine, never, never>;
17
+ /** Binds the app's job computers to local computers under each store the engine serves: its `computers` directory. */
18
+ declare const computersBinder: () => Effect.Effect<(store: string) => Effect.Effect<void>, never, JobComputers | ComputerNeeds>;
19
+ export { type BinderNeeds, type ComputerNeeds, computersBinder, jobs };
@@ -0,0 +1,21 @@
1
+ import { ActorSecrets } from "../contract/secret/actor-secrets.adapter.mjs";
2
+ import { JobComputers } from "../host/computer/job-computers.service.mjs";
3
+ import { LocalComputers } from "../host/computer/local-computers.adapter.mjs";
4
+ import { JobEngine } from "../host/job/job-engine.adapter.mjs";
5
+ import { Effect, Layer, Path } from "effect";
6
+ // src/runtime/local-job-runtime.layer.ts
7
+ /**
8
+ * The local engine's job runtime, for an app layer whose job handlers need the `WorkflowEngine`. Its job activities
9
+ * read their declared secrets from the current `ConfigProvider`: the process environment, as Bun loads it with `.env`.
10
+ * With `AKTER_LOCAL_COMPUTERS` on, they reach the computers of the store `Akter.local` serves through
11
+ * `Actor.computer(key)`, because both hold the same `JobComputers`, as they hold the same job engine.
12
+ */
13
+ const jobs = Layer.mergeAll(JobEngine.layerWorkflow, ActorSecrets.fromConfig, JobComputers.layer);
14
+ /** Binds the app's job computers to local computers under each store the engine serves: its `computers` directory. */
15
+ const computersBinder = Effect.fnUntraced(function* computersBinder() {
16
+ const computers = yield* JobComputers;
17
+ const services = yield* Effect.context();
18
+ const path = yield* Path.Path;
19
+ return (store) => Effect.flatMap(LocalComputers.make(path.join(store, "computers")), computers.bind).pipe(Effect.provideContext(services));
20
+ });
21
+ export { computersBinder, jobs };
@@ -0,0 +1,17 @@
1
+ import { BlobTransferError } from "../../contract/file/blob-transfer.errors.mjs";
2
+ import "../hosted/hosted-runtime.layer.mjs";
3
+ import { StoreUnreadableError } from "../store/store-unreadable.errors.mjs";
4
+ import { Effect, FileSystem, Path } from "effect";
5
+ export declare const ArchivedActors: {
6
+ readonly adopt: (folder: string) => Effect.Effect<void, BlobTransferError | import("effect/PlatformError").PlatformError | import("effect/sql/SqlError").SqlError | StoreUnreadableError, FileSystem.FileSystem | Path.Path>;
7
+ readonly lineage: (folder: string) => Effect.Effect<{
8
+ actor: {
9
+ key: string;
10
+ type: string;
11
+ };
12
+ fork: string;
13
+ forkedAt: number;
14
+ origin: string;
15
+ }[], import("effect/sql/SqlError").SqlError | StoreUnreadableError, FileSystem.FileSystem | Path.Path>;
16
+ readonly strip: (filename: string) => Effect.Effect<void, import("effect/sql/SqlError").SqlError, never>;
17
+ };
@@ -0,0 +1,84 @@
1
+ import { adoptArchivedFiles } from "../../host/blob/export/blob-archive.sql.mjs";
2
+ import { lineageOf } from "../../host/fork/actor-fork.sql.mjs";
3
+ import { stripArchivedFiles } from "../../host/blob/reference/blob-receipts.sql.mjs";
4
+ import { LocalBlobHomes } from "../../host/file/local-blob-home.service.mjs";
5
+ import { SqliteDriver } from "../../host/sqlite/sqlite-driver.service.mjs";
6
+ import { blobHashing } from "../../runtime/blob-hashing.layer.mjs";
7
+ import { ActorLocation } from "../engine/actor-location.service.mjs";
8
+ import { fileIdentity } from "../engine/actor-residents.pure.mjs";
9
+ import { Array, Context, Effect, FileSystem, Layer, Option, Path } from "effect";
10
+ import { SecureRandom } from "effect/crypto";
11
+ // src/serve/archive/archived-actors.layer.ts
12
+ const filesFolder = "files";
13
+ /**
14
+ * Prepares an actor's database file for an `.akter` archive: every file grant blanked and the export holds dropped,
15
+ * with the file rewritten so none of them stays in its free pages. Its state, history and file paths are unchanged.
16
+ */
17
+ const strip = Effect.fnUntraced(function* stripArchived(filename) {
18
+ const services = yield* Layer.build(SqliteDriver.layerNode);
19
+ const sql = yield* Context.get(services, SqliteDriver).open(filename);
20
+ yield* stripArchivedFiles(sql);
21
+ }, Effect.scoped);
22
+ const adoptActor = Effect.fnUntraced(function* adoptActorFiles({ home, location, sqlite }, address) {
23
+ const fileSystem = yield* FileSystem.FileSystem;
24
+ const path = yield* Path.Path;
25
+ const { database, directory } = location.locate(address);
26
+ const files = path.join(directory, filesFolder);
27
+ const sql = yield* sqlite.open(database);
28
+ yield* adoptArchivedFiles({
29
+ actor: fileIdentity(address),
30
+ adopt: home.transfers.adopt,
31
+ sql,
32
+ stored: (sha256) => fileSystem.stream(path.join(files, sha256))
33
+ });
34
+ yield* fileSystem.remove(files, {
35
+ force: true,
36
+ recursive: true
37
+ });
38
+ }, Effect.scoped);
39
+ /**
40
+ * Takes the files of every actor in an imported folder into the folder's own file home, `files-home`, the one
41
+ * `akter dev` opens: each actor's `files/<sha256>` is adopted under the actor's local identity, its database is
42
+ * rewritten for it, and its `files/` folder is removed. Run it before anything serves the folder.
43
+ */
44
+ const adopt = Effect.fnUntraced(function* adoptArchived(folder) {
45
+ const path = yield* Path.Path;
46
+ const services = yield* Layer.build(Layer.mergeAll(ActorLocation.directory(folder), SqliteDriver.layerNode, blobHashing, SecureRandom.layerWebCrypto));
47
+ const home = yield* Effect.provide(LocalBlobHomes.open(path.join(folder, "files-home")), services);
48
+ const location = Context.get(services, ActorLocation);
49
+ const actors = yield* location.list;
50
+ const adopting = {
51
+ home,
52
+ location,
53
+ sqlite: Context.get(services, SqliteDriver)
54
+ };
55
+ yield* Effect.forEach(actors, (address) => adoptActor(adopting, address), { discard: true });
56
+ }, Effect.scoped);
57
+ const forkOf = Effect.fnUntraced(function* forkOf(sqlite, directory) {
58
+ const path = yield* Path.Path;
59
+ const sql = yield* sqlite.open(path.join(directory, "actor.db"));
60
+ const recorded = yield* lineageOf(sql);
61
+ const actor = {
62
+ key: path.basename(directory),
63
+ type: path.basename(path.dirname(directory))
64
+ };
65
+ return Option.map(recorded, ({ forkId, origin, version }) => ({
66
+ actor,
67
+ fork: forkId,
68
+ forkedAt: version,
69
+ origin
70
+ }));
71
+ }, Effect.scoped);
72
+ const ArchivedActors = {
73
+ adopt,
74
+ lineage: Effect.fnUntraced(function* archivedLineage(folder) {
75
+ const services = yield* Layer.build(Layer.merge(ActorLocation.directory(folder), SqliteDriver.layerNode));
76
+ const location = Context.get(services, ActorLocation);
77
+ const sqlite = Context.get(services, SqliteDriver);
78
+ const actors = yield* location.list;
79
+ const forks = yield* Effect.forEach(actors, (address) => forkOf(sqlite, location.locate(address).directory));
80
+ return Array.getSomes(forks);
81
+ }, Effect.scoped),
82
+ strip
83
+ };
84
+ export { ArchivedActors };
@@ -0,0 +1,12 @@
1
+ import { Effect, FileSystem, Path } from "effect";
2
+ /**
3
+ * Whether a path in a data directory, relative and with `/` separators, belongs to its environments rather than to
4
+ * the serving store: the record and its journal files, every snapshot and every other environment's store. No
5
+ * archive holds them; an archive is one environment's export.
6
+ */
7
+ declare const isEnvironmentEntry: (relative: string) => boolean;
8
+ export declare const ArchivedStore: {
9
+ readonly isEnvironmentEntry: typeof isEnvironmentEntry;
10
+ readonly served: (folder: string) => Effect.Effect<string, import("effect/PlatformError").PlatformError | import("effect/sql/SqlError").SqlError, FileSystem.FileSystem | Path.Path>;
11
+ };
12
+ export {};
@@ -0,0 +1,40 @@
1
+ import { SqliteDriver } from "../../host/sqlite/sqlite-driver.service.mjs";
2
+ import { environmentRow, recordFile, servingRow } from "../environment/environment-records.sql.mjs";
3
+ import { Array, Context, Effect, FileSystem, Layer, Option, Path, String } from "effect";
4
+ // src/serve/archive/archived-store.layer.ts
5
+ /**
6
+ * The store an `.akter` archive of `folder` holds: the environment its record says serves, the folder itself for
7
+ * `dev` or `environments/<name>` for a promoted branch. A folder with no record, such as an export's staging folder,
8
+ * is its own store. The record is read query-only, so a running `akter dev` is never disturbed.
9
+ */
10
+ const served = Effect.fnUntraced(function* servedStore(folder) {
11
+ const fileSystem = yield* FileSystem.FileSystem;
12
+ const path = yield* Path.Path;
13
+ const record = path.join(folder, recordFile);
14
+ if (!(yield* fileSystem.exists(record))) return folder;
15
+ const services = yield* Layer.build(SqliteDriver.layerNode);
16
+ const sql = yield* Context.get(services, SqliteDriver).openQueryOnly(record);
17
+ const serving = yield* servingRow({ sql });
18
+ const row = yield* environmentRow({
19
+ name: serving.environment,
20
+ sql
21
+ });
22
+ return path.resolve(folder, Option.match(row, {
23
+ onNone: () => ".",
24
+ onSome: (found) => found.directory
25
+ }));
26
+ }, Effect.scoped);
27
+ /**
28
+ * Whether a path in a data directory, relative and with `/` separators, belongs to its environments rather than to
29
+ * the serving store: the record and its journal files, every snapshot and every other environment's store. No
30
+ * archive holds them; an archive is one environment's export.
31
+ */
32
+ const isEnvironmentEntry = (relative) => {
33
+ const top = Option.getOrElse(Array.head(String.split("/")(relative)), () => relative);
34
+ return top === "environments" || top === "snapshots" || String.startsWith("environments.db")(top);
35
+ };
36
+ const ArchivedStore = {
37
+ isEnvironmentEntry,
38
+ served
39
+ };
40
+ export { ArchivedStore };
@@ -0,0 +1,8 @@
1
+ import { ActorJournal } from "../../contract/history/actor-journal.service.mjs";
2
+ import { ActorRegistry } from "../../contract/actor/actor-registry.service.mjs";
3
+ import { ActorHost } from "./actor-host.service.mjs";
4
+ import { FileSystem, Layer, Path } from "effect";
5
+ declare const providedHandlers: Layer.Layer<ActorRegistry, never, never>;
6
+ declare const actorEngine: (directory: string) => Layer.Layer<ActorHost | ActorRegistry, never, FileSystem.FileSystem | Path.Path>;
7
+ declare const hostJournal: Layer.Layer<ActorJournal, never, ActorHost>;
8
+ export { actorEngine, hostJournal, providedHandlers };
@@ -0,0 +1,30 @@
1
+ import { handlersKey } from "../../contract/actor/actor-definition.pure.mjs";
2
+ import { ActorJournal } from "../../contract/history/actor-journal.service.mjs";
3
+ import { ActorRegistry } from "../../contract/actor/actor-registry.service.mjs";
4
+ import { ActorDatabase } from "../../host/actor/actor-database.service.mjs";
5
+ import { CommandRunner } from "../../host/command/command-runner.service.mjs";
6
+ import { ActorHost } from "./actor-host.service.mjs";
7
+ import { ActorLocation } from "./actor-location.service.mjs";
8
+ import { Context, Effect, Layer, Option } from "effect";
9
+ // src/serve/engine/actor-engine.layer.ts
10
+ const providedHandlers = Layer.effect(ActorRegistry, Effect.gen(function* findProvidedHandlers() {
11
+ const provided = yield* Effect.context();
12
+ const registered = yield* ActorRegistry.make;
13
+ return {
14
+ lookup: (name) => Option.match(Context.getOption(provided, handlersKey(name)), {
15
+ onNone: () => registered.lookup(name),
16
+ onSome: Effect.succeed
17
+ }),
18
+ register: registered.register
19
+ };
20
+ }));
21
+ const actorEngine = (directory) => ActorHost.layer.pipe(Layer.provideMerge(providedHandlers), Layer.provide([
22
+ ActorDatabase.layerNode,
23
+ ActorLocation.directory(directory),
24
+ CommandRunner.layer
25
+ ]), Layer.fresh);
26
+ const hostJournal = Layer.effect(ActorJournal, ActorHost.use((host) => Effect.succeed({
27
+ coveredSince: host.coveredSince,
28
+ read: host.history
29
+ })));
30
+ export { actorEngine, hostJournal, providedHandlers };
@@ -0,0 +1,63 @@
1
+ import { ActorAlreadyExistsError } from "../../contract/actor/actor-already-exists.errors.mjs";
2
+ import { ActorErasedError } from "../../contract/actor/actor-erased.errors.mjs";
3
+ import { ActorNotCreatedError } from "../../contract/actor/actor-not-created.errors.mjs";
4
+ import { InvalidRequestError } from "../../contract/client/invalid-request.errors.mjs";
5
+ import { ForkedFiles } from "../../host/fork/actor-fork.sql.mjs";
6
+ import "../../contract/client/client-failure.contract.mjs";
7
+ import { StoreUnreadableError } from "../store/store-unreadable.errors.mjs";
8
+ import { ActorDatabase, OpenedActor } from "../../host/actor/actor-database.service.mjs";
9
+ import { LocalBlobHomes } from "../../host/file/local-blob-home.service.mjs";
10
+ import { ForkComputers } from "../../host/fork/fork-computers.adapter.mjs";
11
+ import { ActorAddress, ActorLocation, StagedFork } from "./actor-location.service.mjs";
12
+ import { OpenFailure, Residents } from "./actor-residents.pure.mjs";
13
+ import { Context, Effect, FileSystem, Option, Semaphore } from "effect";
14
+ interface ForkCall extends ActorAddress {
15
+ readonly commandId: string;
16
+ readonly into: string;
17
+ }
18
+ interface ForkResident {
19
+ readonly exclusive: <Success, Failure, Needs>(effect: Effect.Effect<Success, Failure, Needs>) => Effect.Effect<Success, Failure, Needs>;
20
+ readonly forking: Semaphore.Semaphore;
21
+ readonly opened: OpenedActor;
22
+ }
23
+ /** What the fork needs from the host that runs it. */
24
+ interface ForkHost<Resident extends ForkResident> {
25
+ readonly identity: (address: ActorAddress) => string;
26
+ readonly residents: Residents<Resident>;
27
+ readonly served: (address: ActorAddress) => Effect.Effect<OpenedActor["actor"], OpenFailure>;
28
+ readonly stored: (address: ActorAddress) => Effect.Effect<boolean, OpenFailure>;
29
+ }
30
+ type ForkFailure = ActorAlreadyExistsError | ActorNotCreatedError | InvalidRequestError | OpenFailure;
31
+ type ForkServices = ActorDatabase | ActorLocation | FileSystem.FileSystem | ForkComputers;
32
+ /**
33
+ * Forks actors on one host. Forks run one at a time, so two forks can't both find a child key free and publish into
34
+ * it; each holds its parent's fork gate from the cut until the child has its files, and holds the child's address
35
+ * from the check that it's free until the copy is renamed into place, so no command or upload creates the child
36
+ * meanwhile.
37
+ */
38
+ declare const forkedBy: <Resident extends ForkResident>(host: ForkHost<Resident>) => ((call: ForkCall) => Effect.Effect<number, ForkFailure, ForkServices>);
39
+ /** The file fork a staged copy began, if it was quieted as this fork and its files were forked. */
40
+ declare const forkedIn: (args_0: StagedFork) => Effect.Effect<Option.None<ForkedFiles> | Option.Some<ForkedFiles>, import("effect/PlatformError").PlatformError | (ActorErasedError | import("effect/sql/SqlError").SqlError), ActorDatabase | FileSystem.FileSystem>;
41
+ type SweepFailure = Effect.Error<ReturnType<typeof forkedIn>> | Effect.Error<LocalBlobHomes["Service"]["get"]>;
42
+ /**
43
+ * Sweeps what forks that crashed before publishing left, when a host starts and before it forks or opens an actor:
44
+ * each staged copy, and the claims it took for a child that isn't stored and whose catalog row names the fork's
45
+ * parent. A retry of such a fork rebuilds it from its parent's intent.
46
+ */
47
+ declare const sweepStaged: (identity: (address: ActorAddress) => string) => Effect.Effect<void, StoreUnreadableError | SweepFailure, ForkServices>;
48
+ declare const ActorForks_base: Context.ServiceClass<ActorForks, "@akterjs/effect/serve/engine/actor-fork.service/ActorForks", {
49
+ readonly computers: typeof ForkComputers.layer;
50
+ readonly forkedBy: typeof forkedBy;
51
+ readonly sweepStaged: typeof sweepStaged;
52
+ }>;
53
+ /**
54
+ * Forks a stored actor into a new key at a cut between two of its commits. `forkedBy(host)` makes the fork route of
55
+ * one host; the copy starts quiet and is published by one rename. `sweepStaged` clears what crashed forks left.
56
+ */
57
+ export declare class ActorForks extends ActorForks_base {
58
+ static readonly forkedBy: typeof forkedBy;
59
+ static readonly sweepStaged: (identity: (address: ActorAddress) => string) => Effect.Effect<void, StoreUnreadableError | SweepFailure, ForkServices>;
60
+ /** The fork's computers, which the host provides to its fork route and its sweep. */
61
+ static readonly computers: import("effect/Layer").Layer<ForkComputers, never, FileSystem.FileSystem | import("effect/Path").Path>;
62
+ }
63
+ export type { ForkCall, ForkFailure, ForkResident, ForkServices };
@@ -0,0 +1,277 @@
1
+ import { ActorAlreadyExistsError } from "../../contract/actor/actor-already-exists.errors.mjs";
2
+ import { ActorNotCreatedError } from "../../contract/actor/actor-not-created.errors.mjs";
3
+ import { InvalidRequestError } from "../../contract/client/invalid-request.errors.mjs";
4
+ import "../../contract/client/client-failure.contract.mjs";
5
+ import { ActorDatabase } from "../../host/actor/actor-database.service.mjs";
6
+ import { LocalBlobHomes } from "../../host/file/local-blob-home.service.mjs";
7
+ import { ForkComputers } from "../../host/fork/fork-computers.adapter.mjs";
8
+ import { forkIdOf, forkedFiles, markPublished, prepareForks, quietCopy, recordIntent, recordedFork } from "../../host/fork/actor-fork.sql.mjs";
9
+ import { committedVersion } from "../live/live-tables.sql.mjs";
10
+ import { ActorLocation } from "./actor-location.service.mjs";
11
+ import { unavailable } from "./actor-residents.pure.mjs";
12
+ import { Array, Context, Effect, FileSystem, Option, Semaphore } from "effect";
13
+ // src/serve/engine/actor-fork.service.ts
14
+ const oneFork = 1;
15
+ const reused = ({ actor, commandId }) => InvalidRequestError.make({
16
+ actor,
17
+ message: `the fork id ${commandId} already forked this actor into another key`
18
+ });
19
+ /** The fork the parent recorded under this id, if any; the same id can't name a fork into another key. */
20
+ const recorded = Effect.fnUntraced(function* recorded({ call, resident }) {
21
+ const { sql } = resident.opened;
22
+ const found = yield* resident.exclusive(Effect.andThen(prepareForks(sql), recordedFork({
23
+ commandId: call.commandId,
24
+ sql
25
+ })));
26
+ if (Option.isSome(found) && found.value.child !== call.into) return yield* reused(call);
27
+ return found;
28
+ });
29
+ /** The fork's computers: the parent's, copied into the child under the store's computers directory. */
30
+ const computersOf = ({ call, child }) => ActorLocation.use((location) => Effect.succeed({
31
+ child,
32
+ fork: call.commandId,
33
+ parent: {
34
+ actor: call.actor,
35
+ key: call.key
36
+ },
37
+ root: location.computers
38
+ }));
39
+ /** Whether the child is already this fork's, published before a crash or a lost reply; any other child refuses. */
40
+ const publishedChild = Effect.fnUntraced(function* publishedChild({ call, child, host }) {
41
+ if (!(yield* host.stored(child))) return false;
42
+ const { database } = yield* ActorLocation.use((location) => Effect.succeed(location.locate(child)));
43
+ const databases = yield* ActorDatabase;
44
+ const forkId = yield* Effect.scoped(Effect.flatMap(databases.openCopy(database), forkIdOf));
45
+ if (Option.contains(forkId, call.commandId)) return true;
46
+ return yield* ActorAlreadyExistsError.make({ actor: call.actor });
47
+ });
48
+ /**
49
+ * Removes what an unfinished attempt of this fork left: its staged copy, and the files it claimed for the child. A
50
+ * child that is stored keeps its claims, and so does one whose catalog row doesn't name this parent: either is an
51
+ * actor of its own. Akter dev keeps every actor's files in one home, so the parent's home is the child's.
52
+ */
53
+ const discardStaged = Effect.fnUntraced(function* discardStaged(forking) {
54
+ const { call, child, host, resident, staged } = forking;
55
+ const fileSystem = yield* FileSystem.FileSystem;
56
+ const files = Option.fromNullishOr(resident.opened.fileSession);
57
+ const stored = yield* host.stored(child);
58
+ if (Option.isSome(files) && !stored) yield* files.value.home.catalog.abandon({
59
+ actor: host.identity(child),
60
+ origin: host.identity(call)
61
+ });
62
+ if (!stored) {
63
+ const computers = yield* computersOf(forking);
64
+ yield* ForkComputers.use((forked) => forked.discard(computers));
65
+ }
66
+ yield* fileSystem.remove(staged.directory, {
67
+ force: true,
68
+ recursive: true
69
+ });
70
+ });
71
+ /** Copies the parent at one cut between two of its commands, after recording the fork's intent. */
72
+ const cut = Effect.fnUntraced(function* cut({ call, resident, staged }) {
73
+ const { sql } = resident.opened;
74
+ const fileSystem = yield* FileSystem.FileSystem;
75
+ const cutParent = Effect.gen(function* cutParent() {
76
+ const version = yield* committedVersion(sql);
77
+ yield* recordIntent({
78
+ commandId: call.commandId,
79
+ into: call.into,
80
+ sql,
81
+ version
82
+ });
83
+ yield* fileSystem.makeDirectory(staged.directory, { recursive: true });
84
+ yield* sql`VACUUM INTO ${staged.database}`;
85
+ return version;
86
+ });
87
+ return yield* resident.exclusive(cutParent);
88
+ });
89
+ const quiet = Effect.fnUntraced(function* quiet({ call, staged }, version) {
90
+ const databases = yield* ActorDatabase;
91
+ const lineage = {
92
+ forkId: call.commandId,
93
+ origin: ActorLocation.named(call),
94
+ version
95
+ };
96
+ yield* Effect.scoped(Effect.flatMap(databases.openCopy(staged.database), (sql) => quietCopy({
97
+ ...lineage,
98
+ sql
99
+ })));
100
+ });
101
+ const unavailableBy = (actor) => (failure) => unavailable(actor)({ message: `the fork didn't finish: ${failure.message}` });
102
+ /** Inherits the parent's files at the cut into the staged child, under the child's own claims and grants. */
103
+ const forkFiles = Effect.fnUntraced(function* forkFiles({ call, child, host, resident, staged }) {
104
+ const files = Option.fromNullishOr(resident.opened.fileSession);
105
+ if (Option.isNone(files)) return;
106
+ const actor = yield* host.served(child);
107
+ const databases = yield* ActorDatabase;
108
+ const opening = {
109
+ actor,
110
+ filename: staged.database,
111
+ identity: host.identity(child)
112
+ };
113
+ yield* Effect.scoped(Effect.gen(function* inheritFiles() {
114
+ const opened = yield* Effect.mapError(databases.open(opening), unavailableBy(call.actor));
115
+ const target = yield* Effect.orDie(Effect.fromNullishOr(opened.fileSession));
116
+ const source = files.value;
117
+ yield* source.home.transfers.fork({
118
+ into: target.home,
119
+ operation: call.commandId,
120
+ source: source.owner,
121
+ target: target.owner
122
+ });
123
+ }));
124
+ });
125
+ const publish = Effect.fnUntraced(function* publish({ call, child, resident, staged }) {
126
+ const fileSystem = yield* FileSystem.FileSystem;
127
+ const { directory } = yield* ActorLocation.use((location) => Effect.succeed(location.locate(child)));
128
+ yield* fileSystem.rename(staged.directory, directory);
129
+ yield* resident.exclusive(markPublished({
130
+ commandId: call.commandId,
131
+ sql: resident.opened.sql
132
+ }));
133
+ });
134
+ const copy = Effect.fnUntraced(function* copy(forking, computers, held) {
135
+ const version = yield* cut(forking);
136
+ yield* quiet(forking, version);
137
+ yield* forkFiles(forking);
138
+ yield* ForkComputers.use((forked) => forked.copy({
139
+ ...computers,
140
+ held
141
+ }));
142
+ yield* publish(forking);
143
+ return version;
144
+ });
145
+ /**
146
+ * Builds the child: holds the parent's computers, so none changes from before the cut until the child has its copy
147
+ * of each, cuts and copies, publishes, then lets go of them. A failure lets go of them too.
148
+ */
149
+ const build = Effect.fnUntraced(function* build(forking) {
150
+ yield* discardStaged(forking);
151
+ const computers = yield* computersOf(forking);
152
+ const forked = yield* ForkComputers;
153
+ const held = yield* forked.hold(computers);
154
+ const releasing = {
155
+ ...computers,
156
+ held: Option.some(held)
157
+ };
158
+ const released = Effect.ignore(forked.release(releasing));
159
+ const version = yield* Effect.onError(copy(forking, computers, held), () => released);
160
+ yield* forked.settle(releasing);
161
+ return version;
162
+ });
163
+ /** Lets go of the parent's computers again for a fork its parent or child shows published before a crash. */
164
+ const settledAgain = (forking) => Effect.flatMap(Effect.all([computersOf(forking), ForkComputers]), ([computers, forked]) => forked.settle({
165
+ ...computers,
166
+ held: Option.none()
167
+ }));
168
+ /**
169
+ * One fork, under the parent's fork gate so no command commits between the cut and the copy of its files. A fork the
170
+ * parent already published answers its version again. Otherwise the child is built beside its directory and appears
171
+ * by one rename, so nothing reads a partial child; a failed attempt removes what it built, and a retry rebuilds it.
172
+ */
173
+ const forkHeld = Effect.fnUntraced(function* forkHeld(forking) {
174
+ const found = yield* recorded(forking);
175
+ const settled = settledAgain(forking);
176
+ if (Option.isSome(found) && found.value.state === "published") {
177
+ yield* settled;
178
+ return found.value.version;
179
+ }
180
+ if (yield* publishedChild(forking)) {
181
+ yield* forking.resident.exclusive(markPublished({
182
+ commandId: forking.call.commandId,
183
+ sql: forking.resident.opened.sql
184
+ }));
185
+ yield* settled;
186
+ return yield* Effect.map(Effect.orDie(Effect.fromOption(found)), (record) => record.version);
187
+ }
188
+ return yield* build(forking).pipe(Effect.onError(() => Effect.ignore(discardStaged(forking))));
189
+ });
190
+ /** The one copy a fork makes, answered as a fork's failures: a storage or file failure is a retryable unavailable. */
191
+ const forkOnce = Effect.fnUntraced(function* forkOnce(forking) {
192
+ const unfinished = unavailableBy(forking.call.actor);
193
+ return yield* forkHeld(forking).pipe(Effect.catchTags({
194
+ BlobTransferError: (failure) => Effect.fail(unfinished(failure)),
195
+ PlatformError: (failure) => Effect.fail(unfinished(failure)),
196
+ SqlError: (failure) => Effect.fail(unfinished(failure))
197
+ }));
198
+ });
199
+ /**
200
+ * Forks actors on one host. Forks run one at a time, so two forks can't both find a child key free and publish into
201
+ * it; each holds its parent's fork gate from the cut until the child has its files, and holds the child's address
202
+ * from the check that it's free until the copy is renamed into place, so no command or upload creates the child
203
+ * meanwhile.
204
+ */
205
+ const forkedBy = (host) => {
206
+ const serial = Semaphore.makeUnsafe(oneFork);
207
+ return Effect.fnUntraced(function* forkActor(call) {
208
+ const child = {
209
+ actor: call.actor,
210
+ key: call.into
211
+ };
212
+ if (call.into === call.key) return yield* InvalidRequestError.make({
213
+ actor: call.actor,
214
+ message: "an actor can't fork into itself"
215
+ });
216
+ if (!(yield* host.stored(call))) return yield* ActorNotCreatedError.make({ actor: call.actor });
217
+ const staged = yield* ActorLocation.use((location) => Effect.succeed(location.stage({
218
+ address: child,
219
+ fork: call.commandId
220
+ })));
221
+ return yield* serial.withPermits(oneFork)(host.residents.use(call, (resident) => forkOnce({
222
+ call,
223
+ child,
224
+ host,
225
+ resident,
226
+ staged
227
+ }).pipe(host.residents.holding(child), resident.forking.withPermits(oneFork))));
228
+ });
229
+ };
230
+ /** The file fork a staged copy began, if it was quieted as this fork and its files were forked. */
231
+ const forkedIn = Effect.fnUntraced(function* forkedIn({ files, fork }) {
232
+ const fileSystem = yield* FileSystem.FileSystem;
233
+ const databases = yield* ActorDatabase;
234
+ if (!(yield* fileSystem.exists(files.database))) return Option.none();
235
+ const read = Effect.flatMap(databases.openCopy(files.database), (sql) => Effect.flatMap(forkIdOf(sql), (forkId) => {
236
+ if (!Option.contains(forkId, fork)) return Effect.succeedNone;
237
+ return forkedFiles(sql);
238
+ }));
239
+ return yield* Effect.scoped(read);
240
+ });
241
+ const sweepWith = (homes, stored) => Effect.fnUntraced(function* sweepOne(staged) {
242
+ const fileSystem = yield* FileSystem.FileSystem;
243
+ const forked = yield* forkedIn(staged);
244
+ const claimed = Option.filter(forked, (files) => !stored.has(files.actor));
245
+ if (Option.isSome(claimed) && Option.isSome(homes)) yield* (yield* homes.value.get).catalog.abandon(claimed.value);
246
+ yield* fileSystem.remove(staged.files.directory, {
247
+ force: true,
248
+ recursive: true
249
+ });
250
+ });
251
+ /**
252
+ * Sweeps what forks that crashed before publishing left, when a host starts and before it forks or opens an actor:
253
+ * each staged copy, and the claims it took for a child that isn't stored and whose catalog row names the fork's
254
+ * parent. A retry of such a fork rebuilds it from its parent's intent.
255
+ */
256
+ const sweepStaged = Effect.fnUntraced(function* sweepStaged(identity) {
257
+ const location = yield* ActorLocation;
258
+ const staged = yield* location.staged;
259
+ const named = Effect.map(location.list, (actors) => new Set(Array.map(actors, ActorLocation.named)));
260
+ yield* ForkComputers.use((forked) => forked.sweep(location.computers, named));
261
+ if (!Array.isReadonlyArrayNonEmpty(staged)) return;
262
+ const actors = yield* location.list;
263
+ const stored = new Set(Array.map(actors, identity));
264
+ const homes = yield* Effect.serviceOption(LocalBlobHomes);
265
+ yield* Effect.forEach(staged, sweepWith(homes, stored), { discard: true });
266
+ });
267
+ /**
268
+ * Forks a stored actor into a new key at a cut between two of its commits. `forkedBy(host)` makes the fork route of
269
+ * one host; the copy starts quiet and is published by one rename. `sweepStaged` clears what crashed forks left.
270
+ */
271
+ var ActorForks = class extends Context.Service()("@akterjs/effect/serve/engine/actor-fork.service/ActorForks") {
272
+ static forkedBy = forkedBy;
273
+ static sweepStaged = sweepStaged;
274
+ /** The fork's computers, which the host provides to its fork route and its sweep. */
275
+ static computers = ForkComputers.layer;
276
+ };
277
+ export { ActorForks };