@astrale-os/sdk 0.6.0-beta.4 → 0.6.0-beta.41

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 (516) hide show
  1. package/README.md +191 -58
  2. package/dist/application/action/action.d.ts +6 -0
  3. package/dist/application/action/authoring.d.ts +1 -1
  4. package/dist/application/action/context.d.ts +47 -31
  5. package/dist/application/action/define.d.ts +3 -3
  6. package/dist/application/action/index.d.ts +1 -1
  7. package/dist/application/define.d.ts +8 -6
  8. package/dist/application/define.js +28 -14
  9. package/dist/application/dependency/index.d.ts +1 -1
  10. package/dist/application/dependency/invoker.d.ts +21 -10
  11. package/dist/application/domain.d.ts +30 -0
  12. package/dist/application/index.d.ts +4 -4
  13. package/dist/application/index.js +1 -1
  14. package/dist/application/integration/define.d.ts +8 -1
  15. package/dist/application/integration/index.d.ts +2 -2
  16. package/dist/application/integration/integration.d.ts +13 -1
  17. package/dist/application/integration/operation.d.ts +16 -3
  18. package/dist/application/mutation/authoring/properties.d.ts +5 -3
  19. package/dist/application/mutation/authoring/properties.js +35 -2
  20. package/dist/application/mutation/authoring/transition.js +4 -1
  21. package/dist/application/mutation/execution/execute.js +1 -1
  22. package/dist/application/mutation/failure.d.ts +6 -0
  23. package/dist/application/mutation/failure.js +24 -18
  24. package/dist/application/mutation/index.d.ts +1 -1
  25. package/dist/application/query/collection/union.js +11 -4
  26. package/dist/application/query/composite/plan.d.ts +0 -4
  27. package/dist/application/query/composite/plan.js +0 -2
  28. package/dist/application/query/conformance.d.ts +15 -0
  29. package/dist/application/query/conformance.js +46 -0
  30. package/dist/application/query/define.js +4 -3
  31. package/dist/application/query/execution/execute.d.ts +0 -1
  32. package/dist/application/query/execution/execute.js +7 -1
  33. package/dist/application/query/failure.d.ts +8 -0
  34. package/dist/application/query/failure.js +8 -0
  35. package/dist/application/query/index.d.ts +1 -1
  36. package/dist/application/query/index.js +1 -1
  37. package/dist/application/routes/admission.d.ts +2 -2
  38. package/dist/application/routes/admission.js +1 -1
  39. package/dist/application/routes/route.d.ts +2 -2
  40. package/dist/application/runtime/actions.js +3 -0
  41. package/dist/application/runtime/workflows.d.ts +3 -1
  42. package/dist/application/runtime/workflows.js +3 -4
  43. package/dist/application/view/define.js +4 -6
  44. package/dist/application/view/frontend.d.ts +2 -2
  45. package/dist/application/view/index.d.ts +1 -1
  46. package/dist/application/view/route.d.ts +0 -14
  47. package/dist/application/view/route.js +1 -64
  48. package/dist/application/workflow/authoring.d.ts +3 -2
  49. package/dist/application/workflow/context.d.ts +8 -2
  50. package/dist/application/workflow/define.d.ts +4 -4
  51. package/dist/application/workflow/define.js +14 -9
  52. package/dist/application/workflow/durable.d.ts +197 -0
  53. package/dist/application/workflow/index.d.ts +3 -2
  54. package/dist/application/workflow/runner/inline.js +3 -4
  55. package/dist/application/workflow/runner/runner.d.ts +2 -2
  56. package/dist/application/workflow/step/output.d.ts +2 -0
  57. package/dist/application/workflow/step/output.js +73 -0
  58. package/dist/application/workflow/workflow.d.ts +5 -3
  59. package/dist/deployment/adapter/adapter.d.ts +55 -13
  60. package/dist/deployment/adapter/bundle/bundle.d.ts +36 -0
  61. package/dist/deployment/adapter/bundle/file.d.ts +10 -0
  62. package/dist/deployment/adapter/bundle/index.d.ts +2 -0
  63. package/dist/deployment/adapter/define.d.ts +4 -3
  64. package/dist/deployment/adapter/define.js +107 -23
  65. package/dist/deployment/adapter/index.d.ts +4 -3
  66. package/dist/deployment/adapter/index.js +1 -0
  67. package/dist/deployment/adapter/release/command.d.ts +33 -0
  68. package/dist/deployment/adapter/release/context.d.ts +94 -0
  69. package/dist/deployment/adapter/release/index.d.ts +4 -0
  70. package/dist/deployment/adapter/release/index.js +1 -0
  71. package/dist/deployment/adapter/release/list.d.ts +53 -0
  72. package/dist/deployment/adapter/release/list.js +1 -0
  73. package/dist/deployment/adapter/release/refusal.d.ts +10 -0
  74. package/dist/deployment/adapter/release/refusal.js +14 -0
  75. package/dist/deployment/adapter/release/result.d.ts +56 -0
  76. package/dist/deployment/adapter/release/result.js +1 -0
  77. package/dist/deployment/address/configuration.d.ts +96 -0
  78. package/dist/deployment/address/configuration.js +274 -0
  79. package/dist/deployment/address/fingerprint.d.ts +5 -0
  80. package/dist/deployment/address/fingerprint.js +27 -0
  81. package/dist/deployment/address/index.d.ts +5 -0
  82. package/dist/deployment/address/index.js +4 -0
  83. package/dist/deployment/address/label.d.ts +42 -0
  84. package/dist/deployment/address/label.js +80 -0
  85. package/dist/deployment/address/line.d.ts +29 -0
  86. package/dist/deployment/address/line.js +53 -0
  87. package/dist/deployment/address/record.d.ts +73 -0
  88. package/dist/deployment/address/record.js +138 -0
  89. package/dist/deployment/address/summary.d.ts +30 -0
  90. package/dist/deployment/address/summary.js +1 -0
  91. package/dist/deployment/address/vectors.d.ts +60 -0
  92. package/dist/deployment/address/vectors.js +517 -0
  93. package/dist/deployment/authoring.d.ts +0 -2
  94. package/dist/deployment/authoring.js +0 -1
  95. package/dist/deployment/build/build.d.ts +8 -2
  96. package/dist/deployment/build/compile.d.ts +4 -4
  97. package/dist/deployment/build/compile.js +19 -17
  98. package/dist/deployment/build/frontend/compilation.d.ts +2 -4
  99. package/dist/deployment/build/frontend/compilation.js +0 -5
  100. package/dist/deployment/build/frontend/digest.js +1 -5
  101. package/dist/deployment/build/index.d.ts +1 -0
  102. package/dist/deployment/build/index.js +1 -0
  103. package/dist/deployment/build/manifest.d.ts +59 -0
  104. package/dist/deployment/build/manifest.js +118 -0
  105. package/dist/deployment/build/material.d.ts +2 -2
  106. package/dist/deployment/build/material.js +28 -13
  107. package/dist/deployment/build/schema.d.ts +2 -2
  108. package/dist/deployment/deployment.d.ts +3 -2
  109. package/dist/deployment/environment.d.ts +6 -0
  110. package/dist/deployment/environment.js +6 -0
  111. package/dist/deployment/index.d.ts +4 -6
  112. package/dist/deployment/index.js +1 -2
  113. package/dist/deployment/release/addressing.d.ts +6 -5
  114. package/dist/deployment/release/addressing.js +2 -3
  115. package/dist/deployment/release/assemble.d.ts +6 -3
  116. package/dist/deployment/release/assemble.js +12 -10
  117. package/dist/deployment/release/release.d.ts +16 -5
  118. package/dist/deployment/release/seal.d.ts +14 -0
  119. package/dist/deployment/release/seal.js +22 -0
  120. package/dist/deployment/release/{publication → served}/callables.d.ts +2 -2
  121. package/dist/deployment/release/{publication → served}/callables.js +2 -2
  122. package/dist/deployment/release/served/index.d.ts +11 -0
  123. package/dist/deployment/release/served/index.js +26 -0
  124. package/dist/deployment/release/{publication → served}/views.d.ts +2 -2
  125. package/dist/deployment/release/{publication → served}/views.js +0 -1
  126. package/dist/deployment/runtime/admission.d.ts +2 -2
  127. package/dist/deployment/runtime/admission.js +5 -5
  128. package/dist/deployment/verify/index.d.ts +3 -4
  129. package/dist/deployment/verify/index.js +2 -3
  130. package/dist/deployment/verify/preflight/bundle.d.ts +18 -0
  131. package/dist/deployment/verify/preflight/bundle.js +71 -0
  132. package/dist/deployment/verify/preflight/index.d.ts +1 -12
  133. package/dist/deployment/verify/preflight/index.js +1 -12
  134. package/dist/deployment/verify/readiness/fetch.d.ts +13 -0
  135. package/dist/deployment/verify/readiness/fetch.js +26 -0
  136. package/dist/deployment/verify/readiness/identity.d.ts +3 -6
  137. package/dist/deployment/verify/readiness/identity.js +3 -3
  138. package/dist/deployment/verify/readiness/index.d.ts +15 -8
  139. package/dist/deployment/verify/readiness/index.js +25 -6
  140. package/dist/deployment/verify/readiness/release.d.ts +8 -0
  141. package/dist/deployment/verify/readiness/release.js +22 -0
  142. package/dist/deployment/worker/address.d.ts +26 -0
  143. package/dist/deployment/worker/address.js +43 -0
  144. package/dist/deployment/worker/build.d.ts +60 -0
  145. package/dist/deployment/worker/build.js +172 -0
  146. package/dist/deployment/worker/configuration.d.ts +73 -0
  147. package/dist/deployment/worker/configuration.js +165 -0
  148. package/dist/deployment/worker/content.d.ts +38 -0
  149. package/dist/deployment/worker/content.js +169 -0
  150. package/dist/deployment/worker/index.d.ts +29 -0
  151. package/dist/deployment/worker/index.js +29 -0
  152. package/dist/deployment/worker/limits.d.ts +30 -0
  153. package/dist/deployment/worker/limits.js +30 -0
  154. package/dist/deployment/worker/record.d.ts +29 -0
  155. package/dist/deployment/worker/record.js +69 -0
  156. package/dist/deployment/worker/request.d.ts +118 -0
  157. package/dist/deployment/worker/request.js +280 -0
  158. package/dist/deployment/worker/response.d.ts +101 -0
  159. package/dist/deployment/worker/response.js +207 -0
  160. package/dist/execution/cache/cache.d.ts +17 -0
  161. package/dist/execution/cache/cache.js +11 -0
  162. package/dist/execution/cache/index.d.ts +2 -0
  163. package/dist/execution/cache/index.js +2 -0
  164. package/dist/execution/cache/memory.d.ts +13 -0
  165. package/dist/execution/cache/memory.js +48 -0
  166. package/dist/execution/identity/authentication.d.ts +33 -3
  167. package/dist/execution/identity/authentication.js +90 -36
  168. package/dist/execution/identity/callback.d.ts +20 -20
  169. package/dist/execution/identity/callback.js +34 -26
  170. package/dist/execution/identity/delivery.d.ts +6 -4
  171. package/dist/execution/identity/delivery.js +25 -20
  172. package/dist/execution/identity/identity.d.ts +17 -3
  173. package/dist/execution/identity/identity.js +12 -4
  174. package/dist/execution/identity/jwks.d.ts +5 -0
  175. package/dist/execution/identity/jwks.js +92 -102
  176. package/dist/execution/index.d.ts +6 -4
  177. package/dist/execution/index.js +4 -2
  178. package/dist/execution/invocation/admission/age.d.ts +57 -0
  179. package/dist/execution/invocation/admission/age.js +208 -0
  180. package/dist/execution/invocation/admission/authentication.d.ts +13 -13
  181. package/dist/execution/invocation/admission/authentication.js +52 -44
  182. package/dist/execution/invocation/admission/authority.d.ts +28 -6
  183. package/dist/execution/invocation/admission/authority.js +9 -2
  184. package/dist/execution/invocation/admission/index.d.ts +4 -3
  185. package/dist/execution/invocation/admission/index.js +3 -2
  186. package/dist/execution/invocation/admission/input.d.ts +2 -2
  187. package/dist/execution/invocation/admission/input.js +16 -2
  188. package/dist/execution/invocation/admission/target.d.ts +11 -0
  189. package/dist/execution/invocation/admission/target.js +22 -3
  190. package/dist/execution/invocation/capabilities/bind.d.ts +11 -0
  191. package/dist/execution/invocation/capabilities/bind.js +25 -0
  192. package/dist/execution/invocation/capabilities/index.d.ts +1 -0
  193. package/dist/execution/invocation/capabilities/index.js +1 -0
  194. package/dist/execution/invocation/dependency/bind.d.ts +3 -1
  195. package/dist/execution/invocation/dependency/bind.js +36 -16
  196. package/dist/execution/invocation/dispatch/context.d.ts +7 -6
  197. package/dist/execution/invocation/dispatch/context.js +11 -44
  198. package/dist/execution/invocation/dispatch/workflow.js +0 -4
  199. package/dist/execution/invocation/handler.js +8 -2
  200. package/dist/execution/invocation/index.d.ts +2 -2
  201. package/dist/execution/invocation/index.js +1 -1
  202. package/dist/execution/invocation/integration/authentication.d.ts +3 -3
  203. package/dist/execution/invocation/integration/authentication.js +7 -7
  204. package/dist/execution/invocation/integration/call.d.ts +2 -1
  205. package/dist/execution/invocation/integration/call.js +3 -3
  206. package/dist/execution/invocation/integration/clients.d.ts +1 -1
  207. package/dist/execution/invocation/integration/index.d.ts +1 -0
  208. package/dist/execution/invocation/integration/index.js +1 -0
  209. package/dist/execution/invocation/invocation.d.ts +6 -0
  210. package/dist/execution/invocation/invocation.js +129 -21
  211. package/dist/execution/invocation/lifecycle/active.d.ts +8 -2
  212. package/dist/execution/invocation/lifecycle/active.js +3 -3
  213. package/dist/execution/invocation/lifecycle/index.d.ts +1 -1
  214. package/dist/execution/invocation/result/errors.d.ts +0 -10
  215. package/dist/execution/invocation/result/errors.js +0 -17
  216. package/dist/execution/invocation/result/index.d.ts +2 -2
  217. package/dist/execution/invocation/result/index.js +1 -1
  218. package/dist/execution/invocation/result/project.js +41 -1
  219. package/dist/execution/node/serve.d.ts +2 -2
  220. package/dist/execution/node/serve.js +1 -1
  221. package/dist/execution/runtime/index.d.ts +1 -0
  222. package/dist/execution/runtime/index.js +1 -0
  223. package/dist/execution/runtime/load.d.ts +3 -3
  224. package/dist/execution/runtime/load.js +3 -2
  225. package/dist/execution/runtime/release.d.ts +17 -0
  226. package/dist/execution/runtime/release.js +7 -0
  227. package/dist/execution/serve.d.ts +18 -4
  228. package/dist/execution/serve.js +10 -0
  229. package/dist/execution/service/create.js +43 -7
  230. package/dist/execution/service/initialization.d.ts +4 -4
  231. package/dist/execution/service/initialization.js +23 -14
  232. package/dist/execution/service/release.d.ts +2 -2
  233. package/dist/execution/service/release.js +3 -2
  234. package/dist/execution/service/service.d.ts +20 -5
  235. package/dist/execution/service/serving/delivery.d.ts +5 -0
  236. package/dist/execution/service/{publication → serving}/delivery.js +4 -1
  237. package/dist/execution/service/{publication → serving}/index.d.ts +1 -1
  238. package/dist/execution/service/serving/installation.d.ts +4 -0
  239. package/dist/execution/service/serving/installation.js +9 -0
  240. package/dist/execution/service/serving/source.d.ts +11 -0
  241. package/dist/execution/service/serving/source.js +15 -0
  242. package/dist/execution/workflows/attempts.d.ts +87 -0
  243. package/dist/execution/workflows/attempts.js +205 -0
  244. package/dist/execution/workflows/discovery.d.ts +14 -0
  245. package/dist/execution/workflows/discovery.js +151 -0
  246. package/dist/execution/workflows/engine.d.ts +83 -0
  247. package/dist/execution/workflows/engine.js +1 -0
  248. package/dist/execution/workflows/envelope.d.ts +12 -0
  249. package/dist/execution/workflows/envelope.js +46 -0
  250. package/dist/execution/workflows/failure.d.ts +39 -0
  251. package/dist/execution/workflows/failure.js +143 -0
  252. package/dist/execution/workflows/index.d.ts +4 -0
  253. package/dist/execution/workflows/index.js +3 -0
  254. package/dist/execution/workflows/integrations.d.ts +13 -0
  255. package/dist/execution/workflows/integrations.js +25 -0
  256. package/dist/execution/workflows/options.d.ts +81 -0
  257. package/dist/execution/workflows/options.js +158 -0
  258. package/dist/execution/workflows/receiver.d.ts +24 -0
  259. package/dist/execution/workflows/receiver.js +99 -0
  260. package/dist/execution/workflows/route.d.ts +12 -0
  261. package/dist/execution/workflows/route.js +35 -0
  262. package/dist/execution/workflows/run.d.ts +23 -0
  263. package/dist/execution/workflows/run.js +365 -0
  264. package/dist/execution/workflows/steps.d.ts +48 -0
  265. package/dist/execution/workflows/steps.js +93 -0
  266. package/dist/index.d.ts +4 -4
  267. package/dist/index.js +2 -2
  268. package/dist/platform/graph/alias.d.ts +1 -5
  269. package/dist/platform/graph/alias.js +1 -5
  270. package/dist/platform/graph/document/index.d.ts +1 -1
  271. package/dist/platform/graph/document/index.js +1 -1
  272. package/dist/platform/graph/index.d.ts +1 -1
  273. package/dist/platform/graph/index.js +1 -1
  274. package/dist/platform/release/index.d.ts +2 -0
  275. package/dist/platform/release/index.js +2 -0
  276. package/dist/platform/schema/callable-authoring.d.ts +21 -0
  277. package/dist/platform/schema/callable-authoring.js +27 -0
  278. package/dist/platform/schema/class-authoring.d.ts +61 -11
  279. package/dist/platform/schema/class-authoring.js +37 -4
  280. package/dist/platform/schema/class-icon-svg.d.ts +9 -0
  281. package/dist/platform/schema/class-icon-svg.js +29 -0
  282. package/dist/platform/schema/class-icon.d.ts +3 -8
  283. package/dist/platform/schema/class-icon.js +2 -29
  284. package/dist/platform/schema/index.d.ts +6 -4
  285. package/dist/platform/schema/index.js +2 -1
  286. package/dist/platform/schema/property.d.ts +5 -0
  287. package/dist/platform/schema/schema-authoring.d.ts +14 -7
  288. package/dist/platform/schema/schema-authoring.js +5 -1
  289. package/dist/platform/versioning/dependents.d.ts +18 -0
  290. package/dist/platform/versioning/dependents.js +15 -0
  291. package/dist/platform/versioning/index.d.ts +5 -0
  292. package/dist/platform/versioning/index.js +5 -0
  293. package/dist/platform/versioning/name.d.ts +38 -0
  294. package/dist/platform/versioning/name.js +58 -0
  295. package/dist/platform/versioning/reference.d.ts +48 -0
  296. package/dist/platform/versioning/reference.js +95 -0
  297. package/dist/platform/versioning/version.d.ts +72 -0
  298. package/dist/platform/versioning/version.js +98 -0
  299. package/dist/project/admit.js +1 -5
  300. package/dist/project/define.d.ts +4 -4
  301. package/dist/project/define.js +55 -35
  302. package/dist/project/index.d.ts +1 -1
  303. package/dist/project/install-command.d.ts +6 -0
  304. package/dist/project/install-command.js +9 -0
  305. package/dist/project/project.d.ts +10 -8
  306. package/dist/testing/dataset/define.d.ts +1 -1
  307. package/dist/testing/durable/engine.d.ts +128 -0
  308. package/dist/testing/durable/engine.js +619 -0
  309. package/dist/testing/durable/index.d.ts +3 -0
  310. package/dist/testing/durable/index.js +1 -0
  311. package/dist/testing/durable/steps.d.ts +30 -0
  312. package/dist/testing/durable/steps.js +45 -0
  313. package/dist/testing/index.d.ts +6 -1
  314. package/dist/testing/index.js +5 -1
  315. package/dist/testing/load.js +1 -1
  316. package/dist/tooling/cli/adapter-command.d.ts +35 -0
  317. package/dist/tooling/cli/adapter-command.js +66 -0
  318. package/dist/tooling/cli/arguments.d.ts +17 -6
  319. package/dist/tooling/cli/arguments.js +175 -52
  320. package/dist/tooling/cli/build.d.ts +55 -0
  321. package/dist/tooling/cli/build.js +77 -0
  322. package/dist/tooling/cli/bun.d.ts +0 -1
  323. package/dist/tooling/cli/bun.js +0 -7
  324. package/dist/tooling/cli/commit.d.ts +35 -0
  325. package/dist/tooling/cli/commit.js +235 -0
  326. package/dist/tooling/cli/deploy-mode.d.ts +26 -0
  327. package/dist/tooling/cli/deploy-mode.js +59 -0
  328. package/dist/tooling/cli/deploy-result.d.ts +80 -0
  329. package/dist/tooling/cli/deploy-result.js +64 -0
  330. package/dist/tooling/cli/diff/declared.d.ts +7 -0
  331. package/dist/tooling/cli/diff/declared.js +27 -0
  332. package/dist/tooling/cli/diff/index.d.ts +30 -0
  333. package/dist/tooling/cli/diff/index.js +58 -0
  334. package/dist/tooling/cli/diff/render.d.ts +15 -0
  335. package/dist/tooling/cli/diff/render.js +131 -0
  336. package/dist/tooling/cli/diff/report.d.ts +88 -0
  337. package/dist/tooling/cli/diff/report.js +154 -0
  338. package/dist/tooling/cli/dotenv.d.ts +5 -5
  339. package/dist/tooling/cli/dotenv.js +6 -36
  340. package/dist/tooling/cli/help.js +173 -60
  341. package/dist/tooling/cli/immutable-deployment.d.ts +83 -0
  342. package/dist/tooling/cli/immutable-deployment.js +135 -0
  343. package/dist/tooling/cli/index.d.ts +12 -4
  344. package/dist/tooling/cli/index.js +6 -3
  345. package/dist/tooling/cli/installed-on.d.ts +83 -0
  346. package/dist/tooling/cli/installed-on.js +156 -0
  347. package/dist/tooling/cli/list.d.ts +152 -0
  348. package/dist/tooling/cli/list.js +331 -0
  349. package/dist/tooling/cli/log.d.ts +5 -2
  350. package/dist/tooling/cli/log.js +9 -2
  351. package/dist/tooling/cli/orchestrate.d.ts +0 -6
  352. package/dist/tooling/cli/orchestrate.js +246 -90
  353. package/dist/tooling/cli/project.d.ts +3 -3
  354. package/dist/tooling/cli/publish/index.d.ts +81 -0
  355. package/dist/tooling/cli/publish/index.js +383 -0
  356. package/dist/tooling/cli/publish/report.d.ts +49 -0
  357. package/dist/tooling/cli/publish/report.js +15 -0
  358. package/dist/tooling/cli/registry/client.d.ts +121 -0
  359. package/dist/tooling/cli/registry/client.js +354 -0
  360. package/dist/tooling/cli/registry/error.d.ts +11 -0
  361. package/dist/tooling/cli/registry/error.js +17 -0
  362. package/dist/tooling/cli/registry/executable.d.ts +35 -0
  363. package/dist/tooling/cli/registry/executable.js +96 -0
  364. package/dist/tooling/cli/registry/index.d.ts +9 -0
  365. package/dist/tooling/cli/registry/index.js +8 -0
  366. package/dist/tooling/cli/registry/installations.d.ts +67 -0
  367. package/dist/tooling/cli/registry/installations.js +108 -0
  368. package/dist/tooling/cli/registry/process.d.ts +36 -0
  369. package/dist/tooling/cli/registry/process.js +119 -0
  370. package/dist/tooling/cli/secrets.d.ts +9 -0
  371. package/dist/tooling/cli/secrets.js +19 -0
  372. package/dist/tooling/cli/yank.d.ts +34 -0
  373. package/dist/tooling/cli/yank.js +32 -0
  374. package/dist/tooling/linter/adapters/typescript/imports.d.ts +0 -1
  375. package/dist/tooling/linter/adapters/typescript/imports.js +1 -5
  376. package/dist/tooling/linter/adapters/typescript/index.d.ts +1 -1
  377. package/dist/tooling/linter/adapters/typescript/index.js +1 -1
  378. package/dist/tooling/linter/adapters/typescript/syntax.d.ts +3 -3
  379. package/dist/tooling/linter/adapters/typescript/syntax.js +13 -25
  380. package/dist/tooling/linter/implementations/source/callable-requirements.d.ts +1 -2
  381. package/dist/tooling/linter/implementations/source/callable-requirements.js +11 -16
  382. package/dist/tooling/linter/implementations/source/dependencies.js +13 -72
  383. package/dist/tooling/linter/implementations/source/global.js +1 -2
  384. package/dist/tooling/linter/implementations/source/mutations.js +18 -29
  385. package/dist/tooling/linter/implementations/source/providers.js +5 -5
  386. package/dist/tooling/linter/implementations/source/queries.js +1 -17
  387. package/dist/tooling/linter/implementations/source/shared.d.ts +12 -4
  388. package/dist/tooling/linter/implementations/source/shared.js +101 -46
  389. package/dist/tooling/linter/implementations/source/verifiers.js +0 -2
  390. package/dist/tooling/linter/implementations/source/views.js +2 -2
  391. package/dist/tooling/linter/implementations/source/workflows.js +499 -17
  392. package/dist/tooling/linter/policy/generated.js +14 -63
  393. package/dist/tooling/linter/requirements/registry.js +6 -8
  394. package/dist/tooling/packaging/declarations/ownership.js +1 -1
  395. package/dist/tooling/packaging/finalize.d.ts +1 -1
  396. package/dist/tooling/packaging/finalize.js +1 -1
  397. package/docs/admission-age.md +88 -0
  398. package/docs/auth-api-migration.md +55 -0
  399. package/docs/business-errors.md +42 -0
  400. package/docs/domain-definition-migration.md +44 -0
  401. package/docs/domain-schema-migration.md +36 -0
  402. package/docs/durable-workflows.md +445 -0
  403. package/docs/handler-dependencies.md +213 -0
  404. package/docs/release.md +155 -0
  405. package/docs/schema-cost.md +124 -0
  406. package/package.json +45 -16
  407. package/dist/application/application.d.ts +0 -28
  408. package/dist/application/query/execution/projection.d.ts +0 -3
  409. package/dist/application/query/execution/projection.js +0 -3
  410. package/dist/deployment/adapter/deploy/context.d.ts +0 -15
  411. package/dist/deployment/adapter/deploy/index.d.ts +0 -2
  412. package/dist/deployment/adapter/deploy/result.d.ts +0 -50
  413. package/dist/deployment/adapter/prepare/artifact.d.ts +0 -33
  414. package/dist/deployment/adapter/prepare/context.d.ts +0 -23
  415. package/dist/deployment/adapter/prepare/index.d.ts +0 -2
  416. package/dist/deployment/deploy.d.ts +0 -20
  417. package/dist/deployment/deploy.js +0 -31
  418. package/dist/deployment/release/publication/index.d.ts +0 -6
  419. package/dist/deployment/release/publication/index.js +0 -6
  420. package/dist/deployment/release/publication/manifest.d.ts +0 -3
  421. package/dist/deployment/release/publication/manifest.js +0 -5
  422. package/dist/deployment/release/publication/requirements.d.ts +0 -3
  423. package/dist/deployment/release/publication/requirements.js +0 -3
  424. package/dist/deployment/release/publication/seal.d.ts +0 -10
  425. package/dist/deployment/release/publication/seal.js +0 -39
  426. package/dist/deployment/verify/preflight/artifact.d.ts +0 -6
  427. package/dist/deployment/verify/preflight/artifact.js +0 -122
  428. package/dist/deployment/verify/preflight/publication.d.ts +0 -4
  429. package/dist/deployment/verify/preflight/publication.js +0 -14
  430. package/dist/deployment/verify/readiness/deployment.d.ts +0 -3
  431. package/dist/deployment/verify/readiness/deployment.js +0 -151
  432. package/dist/deployment/verify/readiness/publication.d.ts +0 -11
  433. package/dist/deployment/verify/readiness/publication.js +0 -41
  434. package/dist/execution/service/errors.d.ts +0 -3
  435. package/dist/execution/service/errors.js +0 -3
  436. package/dist/execution/service/publication/delivery.d.ts +0 -2
  437. package/dist/execution/service/publication/installation.d.ts +0 -3
  438. package/dist/execution/service/publication/installation.js +0 -8
  439. package/dist/execution/service/publication/source.d.ts +0 -3
  440. package/dist/execution/service/publication/source.js +0 -11
  441. package/dist/platform/publication/index.d.ts +0 -2
  442. package/dist/platform/publication/index.js +0 -2
  443. package/dist/tooling/cli/astrale/authority.d.ts +0 -5
  444. package/dist/tooling/cli/astrale/authority.js +0 -11
  445. package/dist/tooling/cli/astrale/executable.d.ts +0 -2
  446. package/dist/tooling/cli/astrale/executable.js +0 -47
  447. package/dist/tooling/cli/astrale/failure.d.ts +0 -6
  448. package/dist/tooling/cli/astrale/failure.js +0 -48
  449. package/dist/tooling/cli/astrale/instance.d.ts +0 -11
  450. package/dist/tooling/cli/astrale/instance.js +0 -52
  451. package/dist/tooling/cli/astrale/process.d.ts +0 -13
  452. package/dist/tooling/cli/astrale/process.js +0 -94
  453. package/dist/tooling/cli/astrale/version.d.ts +0 -18
  454. package/dist/tooling/cli/astrale/version.js +0 -55
  455. package/dist/tooling/cli/credential.d.ts +0 -2
  456. package/dist/tooling/cli/credential.js +0 -57
  457. package/dist/tooling/cli/deprecations.d.ts +0 -9
  458. package/dist/tooling/cli/deprecations.js +0 -15
  459. package/dist/tooling/cli/development/candidate.d.ts +0 -25
  460. package/dist/tooling/cli/development/candidate.js +0 -176
  461. package/dist/tooling/cli/development/deployment.d.ts +0 -16
  462. package/dist/tooling/cli/development/deployment.js +0 -39
  463. package/dist/tooling/cli/development/develop.d.ts +0 -11
  464. package/dist/tooling/cli/development/develop.js +0 -243
  465. package/dist/tooling/cli/development/lease.d.ts +0 -18
  466. package/dist/tooling/cli/development/lease.js +0 -163
  467. package/dist/tooling/cli/development/lifecycle.d.ts +0 -9
  468. package/dist/tooling/cli/development/lifecycle.js +0 -43
  469. package/dist/tooling/cli/development/project-imports.d.ts +0 -22
  470. package/dist/tooling/cli/development/project-imports.js +0 -39
  471. package/dist/tooling/cli/development/project-lock.d.ts +0 -16
  472. package/dist/tooling/cli/development/project-lock.js +0 -41
  473. package/dist/tooling/cli/development/rebuild.d.ts +0 -13
  474. package/dist/tooling/cli/development/rebuild.js +0 -58
  475. package/dist/tooling/cli/development/release-evidence.d.ts +0 -4
  476. package/dist/tooling/cli/development/release-evidence.js +0 -10
  477. package/dist/tooling/cli/development/report.d.ts +0 -6
  478. package/dist/tooling/cli/development/report.js +0 -14
  479. package/dist/tooling/cli/development/session-file.d.ts +0 -53
  480. package/dist/tooling/cli/development/session-file.js +0 -337
  481. package/dist/tooling/cli/development/source-watch.d.ts +0 -14
  482. package/dist/tooling/cli/development/source-watch.js +0 -140
  483. package/dist/tooling/cli/development/sources.d.ts +0 -7
  484. package/dist/tooling/cli/development/sources.js +0 -48
  485. package/dist/tooling/cli/development/target-lock.d.ts +0 -16
  486. package/dist/tooling/cli/development/target-lock.js +0 -68
  487. package/dist/tooling/cli/development/view.d.ts +0 -28
  488. package/dist/tooling/cli/development/view.js +0 -151
  489. package/dist/tooling/cli/environment-release.d.ts +0 -21
  490. package/dist/tooling/cli/environment-release.js +0 -46
  491. package/dist/tooling/cli/evidence.d.ts +0 -11
  492. package/dist/tooling/cli/evidence.js +0 -53
  493. package/dist/tooling/cli/installation/index.d.ts +0 -2
  494. package/dist/tooling/cli/installation/index.js +0 -1
  495. package/dist/tooling/cli/installation/observation.d.ts +0 -10
  496. package/dist/tooling/cli/installation/observation.js +0 -44
  497. package/dist/tooling/cli/installation/reconcile.d.ts +0 -32
  498. package/dist/tooling/cli/installation/reconcile.js +0 -122
  499. package/dist/tooling/linter/implementations/source/migrations.d.ts +0 -2
  500. package/dist/tooling/linter/implementations/source/migrations.js +0 -113
  501. package/dist/tooling/linter/qualification/index.d.ts +0 -10
  502. package/dist/tooling/linter/qualification/index.js +0 -2
  503. package/dist/tooling/linter/qualification/query-fixtures.d.ts +0 -2
  504. package/dist/tooling/linter/qualification/query-fixtures.js +0 -68
  505. package/dist/tooling/linter/qualification/runner.d.ts +0 -3
  506. package/dist/tooling/linter/qualification/runner.js +0 -6
  507. /package/dist/application/{application.js → domain.js} +0 -0
  508. /package/dist/{deployment/adapter/deploy/context.js → application/workflow/durable.js} +0 -0
  509. /package/dist/deployment/adapter/{deploy/index.js → bundle/bundle.js} +0 -0
  510. /package/dist/deployment/adapter/{deploy/result.js → bundle/file.js} +0 -0
  511. /package/dist/deployment/adapter/{prepare → bundle}/index.js +0 -0
  512. /package/dist/deployment/adapter/{prepare/artifact.js → release/command.js} +0 -0
  513. /package/dist/deployment/adapter/{prepare → release}/context.js +0 -0
  514. /package/dist/deployment/release/{publication → served}/routes.d.ts +0 -0
  515. /package/dist/deployment/release/{publication → served}/routes.js +0 -0
  516. /package/dist/execution/service/{publication → serving}/index.js +0 -0
@@ -0,0 +1,619 @@
1
+ import { bindProviders } from '../../application/integration/index.js';
2
+ import { runtimeCallables } from '../../application/runtime/callables.js';
3
+ import { admitWorkflows } from '../../application/runtime/workflows.js';
4
+ import { durableServing } from '../../execution/workflows/options.js';
5
+ import { durableHandlers } from '../../execution/workflows/run.js';
6
+ import { issuer } from '../../platform/auth/index.js';
7
+ import { NodeId as nodeId } from '../../platform/graph/node/index.js';
8
+ import { testSteps } from './steps.js';
9
+ /** Kernel every test Execution names; Steps never reach it. */
10
+ const TEST_KERNEL = issuer.accept('https://kernel.test.astrale.invalid');
11
+ /** Microtask turns without progress after which a blocked attempt counts as suspended. */
12
+ const QUIET_TURNS = 64;
13
+ /** Metadata the Kernel reads a declared failure from. */
14
+ const FAILURE = 'astrale.failure';
15
+ /** Metadata a failed Step attempt's journal entry records it under. */
16
+ const ATTEMPT = 'astrale.attempt';
17
+ /** Name prefix of the wait a Step's code failure prescribes before its next attempt. */
18
+ const BACKOFF = 'retry:';
19
+ class TerminalError extends Error {
20
+ code;
21
+ metadata;
22
+ constructor(message, options) {
23
+ super(message);
24
+ this.name = 'TerminalError';
25
+ this.code = options?.errorCode ?? 500;
26
+ if (options?.metadata !== undefined)
27
+ this.metadata = Object.freeze({ ...options.metadata });
28
+ }
29
+ }
30
+ class CancelledError extends TerminalError {
31
+ constructor() {
32
+ super('Cancelled', { errorCode: 409 });
33
+ this.name = 'CancelledError';
34
+ }
35
+ }
36
+ class TimeoutError extends TerminalError {
37
+ constructor() {
38
+ super('Timeout occurred', { errorCode: 408 });
39
+ this.name = 'TimeoutError';
40
+ }
41
+ }
42
+ class RetryableError extends Error {
43
+ retryAfter;
44
+ constructor(message, options) {
45
+ super(message, options?.cause === undefined ? undefined : { cause: options.cause });
46
+ this.name = 'RetryableError';
47
+ if (options?.retryAfter !== undefined)
48
+ this.retryAfter = options.retryAfter;
49
+ }
50
+ }
51
+ /** The attempt lost its Step result on purpose; the engine retries it. */
52
+ class Interruption extends Error {
53
+ constructor(step) {
54
+ super(`Test interruption after Step ${step}, before the journal recorded it.`);
55
+ this.name = 'Interruption';
56
+ }
57
+ }
58
+ /** The Workflow did not do what its journal recorded at this position. */
59
+ class JournalMismatch extends Error {
60
+ constructor(index, recorded, requested) {
61
+ super(`Journal entry ${index} recorded ${recorded}, but the Workflow requested ${requested}: ` +
62
+ 'code between Steps must be deterministic.');
63
+ this.name = 'JournalMismatch';
64
+ }
65
+ }
66
+ /** The promises the test workflow engine's `run` returned: the only ones its combinator accepts. */
67
+ const RUNS = new WeakSet();
68
+ const ENGINE = Object.freeze({
69
+ createEndpointHandler: () => () => Promise.reject(new Error('A test workflow engine serves no HTTP.')),
70
+ workflow: (definition) => definition,
71
+ TerminalError,
72
+ CancelledError,
73
+ RetryableError,
74
+ TimeoutError,
75
+ RestatePromise: Object.freeze({
76
+ allSettled(values) {
77
+ // As the engine refuses a promise it did not create: only its own runs combine.
78
+ values.forEach((value, index) => {
79
+ if (!RUNS.has(value)) {
80
+ throw new TypeError(`Promise index ${index} used inside the combinator is not a run.`);
81
+ }
82
+ });
83
+ return Promise.allSettled(values);
84
+ },
85
+ }),
86
+ });
87
+ /** Create an in-memory workflow engine for tests. */
88
+ export function createTestWorkflowEngine(options = {}) {
89
+ const serving = durableServing({
90
+ engine: ENGINE,
91
+ ...(options.retry === undefined ? {} : { retry: options.retry }),
92
+ });
93
+ const maxAttempts = serving.retryPolicy.maxAttempts;
94
+ let now = options.now ?? Date.now();
95
+ if (!Number.isFinite(now))
96
+ throw new TypeError('Test workflow engine now must be finite.');
97
+ let sequence = 0;
98
+ const runs = new Set();
99
+ const clock = { now: () => now };
100
+ return Object.freeze({
101
+ get now() {
102
+ return now;
103
+ },
104
+ async start(workflow, input) {
105
+ sequence += 1;
106
+ const run = new TestRun(workflow, input, clock, serving, maxAttempts, sequence);
107
+ runs.add(run);
108
+ await run.settle();
109
+ return run.execution;
110
+ },
111
+ async advance(durationMs) {
112
+ if (!Number.isSafeInteger(durationMs) || durationMs < 0) {
113
+ throw new TypeError('Test workflow engine advance takes a non-negative integer of milliseconds.');
114
+ }
115
+ now += durationMs;
116
+ for (const run of runs)
117
+ if (run.state === 'waiting')
118
+ await run.settle();
119
+ },
120
+ });
121
+ }
122
+ class TestRun {
123
+ clock;
124
+ maxAttempts;
125
+ state = 'running';
126
+ outcome;
127
+ failure;
128
+ attempts = 0;
129
+ journal = [];
130
+ signals = new Map();
131
+ interruptions = new Set();
132
+ cancellation = 'none';
133
+ /** The waits after a Step's own failures the run did not wait out, which its Steps still spent. */
134
+ skipped = 0;
135
+ failures = 0;
136
+ handlers;
137
+ envelope;
138
+ execution;
139
+ constructor(workflow, input, clock, serving, maxAttempts, sequence) {
140
+ this.clock = clock;
141
+ this.maxAttempts = maxAttempts;
142
+ const domain = input.schema;
143
+ const [admitted] = admitWorkflows(runtimeCallables(domain), [workflow]);
144
+ if (admitted === undefined || !admitted.durable) {
145
+ throw new TypeError(`Workflow ${workflow.address} is not durable: its callable must declare execution: { durable: true }.`);
146
+ }
147
+ const providers = (input.providers ?? {});
148
+ const integrations = Object.fromEntries(Object.entries(providers).map(([name, provider]) => [name, provider.integration]));
149
+ this.handlers = durableHandlers({
150
+ kernel: TEST_KERNEL,
151
+ workflow: admitted,
152
+ domain,
153
+ serving,
154
+ now: () => this.clock.now() + this.skipped,
155
+ steps: testSteps({
156
+ domain,
157
+ capabilities: (input.capabilities ?? {}),
158
+ integrations: bindProviders(integrations, providers),
159
+ }),
160
+ });
161
+ const id = input.id ?? nodeId(`execution-test-${String(sequence).padStart(6, '0')}`);
162
+ this.envelope = Object.freeze({
163
+ execution: id,
164
+ function: { id: `function-test-${admitted.address}`, version: `sha256:${'0'.repeat(64)}` },
165
+ kernel: TEST_KERNEL,
166
+ initiator: input.initiator ?? { principal: 'principal-test', caller: 'caller-test' },
167
+ input: input.input,
168
+ ...(input.self === undefined ? {} : { receiver: input.self }),
169
+ });
170
+ for (const step of (input.interruptAfter ?? [])) {
171
+ this.interruptions.add(`step:${step}`);
172
+ }
173
+ this.execution = this.view(id);
174
+ }
175
+ /** Attempt the run until it ends, waits, or pauses. */
176
+ async settle() {
177
+ if (this.ended || this.state === 'paused')
178
+ return;
179
+ this.state = 'running';
180
+ for (;;) {
181
+ const attempted = await this.attempt('run');
182
+ if (attempted.kind === 'suspended') {
183
+ this.state = 'waiting';
184
+ return;
185
+ }
186
+ if (attempted.kind === 'completed') {
187
+ this.end({ kind: 'completed', value: attempted.value });
188
+ return;
189
+ }
190
+ if (attempted.kind === 'retried') {
191
+ this.failure = attempted.error;
192
+ continue;
193
+ }
194
+ const { error } = attempted;
195
+ if (error instanceof TerminalError) {
196
+ this.end(outcomeOf(error));
197
+ return;
198
+ }
199
+ this.failure = error;
200
+ this.failures += 1;
201
+ if (this.failures >= this.maxAttempts) {
202
+ this.state = 'paused';
203
+ return;
204
+ }
205
+ }
206
+ }
207
+ get ended() {
208
+ return this.state === 'completed' || this.state === 'failed' || this.state === 'cancelled';
209
+ }
210
+ end(outcome) {
211
+ this.outcome = Object.freeze(outcome);
212
+ this.state = outcome.kind;
213
+ }
214
+ /** One attempt of the run: replay the journal, then run on until it ends or blocks. */
215
+ attempt(mode) {
216
+ this.attempts += 1;
217
+ const attempt = new Attempt(this, mode);
218
+ const running = Promise.resolve()
219
+ .then(() => this.handlers.run(attempt.context, this.envelope))
220
+ .then((value) => ({ kind: 'completed', value }), (error) => ({ kind: 'failed', error }))
221
+ .finally(() => attempt.finish());
222
+ return Promise.race([running, attempt.suspended(), attempt.ended]).finally(() => attempt.finish());
223
+ }
224
+ async signal(name, value) {
225
+ if (this.ended)
226
+ throw new Error(`Execution ${String(this.envelope.execution)} has ended.`);
227
+ const shared = {
228
+ promise: (promise) => ({
229
+ resolve: async (resolved) => {
230
+ if (this.signals.has(promise))
231
+ throw new TerminalError('Promise already resolved.');
232
+ this.signals.set(promise, resolved);
233
+ },
234
+ }),
235
+ };
236
+ const { accepted } = (await this.handlers.signal(shared, { name, value }));
237
+ if (this.state === 'waiting')
238
+ await this.settle();
239
+ return accepted;
240
+ }
241
+ async cancel() {
242
+ if (this.ended)
243
+ return;
244
+ if (this.cancellation === 'none')
245
+ this.cancellation = 'requested';
246
+ if (this.state === 'paused') {
247
+ this.failures = 0;
248
+ this.state = 'running';
249
+ }
250
+ await this.settle();
251
+ }
252
+ async resume() {
253
+ if (this.state !== 'paused') {
254
+ throw new Error(`Execution ${String(this.envelope.execution)} is not paused.`);
255
+ }
256
+ this.failures = 0;
257
+ this.state = 'running';
258
+ await this.settle();
259
+ }
260
+ async replay() {
261
+ if (this.state === 'paused' || this.state === 'running') {
262
+ throw new Error('Replay an Execution that ended or waits; resume a paused one first.');
263
+ }
264
+ const attempted = await this.attempt('replay');
265
+ if (this.state === 'waiting') {
266
+ if (attempted.kind !== 'suspended')
267
+ throw divergence('ended instead of waiting', attempted);
268
+ return;
269
+ }
270
+ const outcome = attempted.kind === 'completed'
271
+ ? { kind: 'completed', value: attempted.value }
272
+ : attempted.kind === 'failed' && attempted.error instanceof TerminalError
273
+ ? outcomeOf(attempted.error)
274
+ : undefined;
275
+ if (outcome === undefined || JSON.stringify(outcome) !== JSON.stringify(this.outcome)) {
276
+ throw divergence(`did not reach ${JSON.stringify(this.outcome)}`, attempted);
277
+ }
278
+ }
279
+ view(id) {
280
+ const live = (read) => ({ enumerable: true, get: read });
281
+ return Object.freeze(Object.defineProperties({
282
+ id,
283
+ signal: (name, value) => this.signal(name, value),
284
+ cancel: () => this.cancel(),
285
+ resume: () => this.resume(),
286
+ replay: () => this.replay(),
287
+ interruptAfter: (step) => {
288
+ this.interruptions.add(`step:${step}`);
289
+ },
290
+ }, {
291
+ state: live(() => this.state),
292
+ outcome: live(() => this.outcome),
293
+ failure: live(() => this.failure),
294
+ attempts: live(() => this.attempts),
295
+ journal: live(() => Object.freeze(this.journal.map(snapshot))),
296
+ }));
297
+ }
298
+ }
299
+ /**
300
+ * The engine context of one attempt. Every operation takes the next journal position: a settled
301
+ * entry answers as it did, a pending one waits, and a new one runs. A replay records nothing new.
302
+ */
303
+ class Attempt {
304
+ run;
305
+ mode;
306
+ cursor = 0;
307
+ active = 0;
308
+ blocked = 0;
309
+ progress = 0;
310
+ done = false;
311
+ controller = new AbortController();
312
+ end;
313
+ /** Settles when a Step ends the attempt without reaching the Workflow, as a retry or a crash. */
314
+ ended = new Promise((resolve) => {
315
+ this.end = resolve;
316
+ });
317
+ context;
318
+ constructor(run, mode) {
319
+ this.run = run;
320
+ this.mode = mode;
321
+ this.context = Object.freeze({
322
+ run: (name, action) => {
323
+ const run = this.journalRun(name, action);
324
+ RUNS.add(run);
325
+ return run;
326
+ },
327
+ sleep: (durationMs, name) => this.sleep(durationMs, name ?? ''),
328
+ promise: (name) => ({ get: () => this.promise(name) }),
329
+ request: () => ({ attemptCompletedSignal: this.controller.signal }),
330
+ });
331
+ }
332
+ finish() {
333
+ if (this.done)
334
+ return;
335
+ this.done = true;
336
+ this.controller.abort();
337
+ }
338
+ /** Resolves once the attempt waits on a pending entry and nothing else can move it. */
339
+ async suspended() {
340
+ for (;;) {
341
+ if (this.done)
342
+ return new Promise(() => { });
343
+ if (this.active > 0) {
344
+ await macrotask();
345
+ continue;
346
+ }
347
+ const before = this.progress;
348
+ for (let turn = 0; turn < QUIET_TURNS && this.progress === before; turn++) {
349
+ await Promise.resolve();
350
+ }
351
+ if (this.done)
352
+ return new Promise(() => { });
353
+ if (this.progress !== before)
354
+ continue;
355
+ if (this.blocked > 0)
356
+ return { kind: 'suspended' };
357
+ await macrotask();
358
+ }
359
+ }
360
+ take(kind, name) {
361
+ this.progress += 1;
362
+ const index = this.cursor++;
363
+ const recorded = this.run.journal[index];
364
+ if (recorded !== undefined) {
365
+ if (recorded.kind !== kind || recorded.name !== name) {
366
+ throw new JournalMismatch(index, describe(recorded), describe({ kind, name }));
367
+ }
368
+ return recorded;
369
+ }
370
+ if (this.mode === 'replay') {
371
+ throw new JournalMismatch(index, 'nothing', describe({ kind, name }));
372
+ }
373
+ const entry = { kind, name, settled: false };
374
+ this.run.journal.push(entry);
375
+ return entry;
376
+ }
377
+ /** Deliver a requested cancellation to the first entry that is not settled yet. */
378
+ cancelled(entry) {
379
+ if (this.mode === 'replay' || this.run.cancellation !== 'requested')
380
+ return false;
381
+ this.run.cancellation = 'delivered';
382
+ entry.settled = true;
383
+ entry.error = new CancelledError();
384
+ if (entry.kind === 'race')
385
+ entry.outcome = 'cancelled';
386
+ return true;
387
+ }
388
+ answer(entry) {
389
+ return entry.error === undefined
390
+ ? Promise.resolve(entry.value)
391
+ : Promise.reject(entry.error);
392
+ }
393
+ block() {
394
+ this.blocked += 1;
395
+ this.progress += 1;
396
+ return new Promise(() => { });
397
+ }
398
+ /**
399
+ * One journaled `run`. A `TerminalError` settles the entry; any other failure reaches the
400
+ * Workflow unjournaled, so the `run` runs again on the next attempt.
401
+ */
402
+ journalRun(name, action) {
403
+ let entry;
404
+ try {
405
+ entry = this.take('run', name);
406
+ }
407
+ catch (cause) {
408
+ return Promise.reject(cause);
409
+ }
410
+ if (entry.settled)
411
+ return this.answer(entry);
412
+ if (this.cancelled(entry))
413
+ return this.answer(entry);
414
+ if (this.mode === 'replay') {
415
+ return Promise.reject(new JournalMismatch(this.cursor - 1, 'a pending entry', `${name} to run again`));
416
+ }
417
+ this.active += 1;
418
+ entry.attempts = (entry.attempts ?? 0) + 1;
419
+ return (async () => {
420
+ try {
421
+ const value = await action();
422
+ // A Step that completes once its attempt ended, as a parallel sibling may, is lost with it.
423
+ if (this.done)
424
+ return this.block();
425
+ if (this.run.interruptions.delete(name)) {
426
+ // A crash after the effect: the run is attempted again, and the Step with it.
427
+ this.end({ kind: 'failed', error: new Interruption(name.replace(/^step:/u, '')) });
428
+ return this.block();
429
+ }
430
+ entry.settled = true;
431
+ entry.value = value;
432
+ return value;
433
+ }
434
+ catch (cause) {
435
+ if (this.done)
436
+ return this.block();
437
+ if (cause instanceof TerminalError) {
438
+ entry.settled = true;
439
+ entry.error = cause;
440
+ // A failed Step attempt keeps what it threw on the live error, which tests inspect.
441
+ if (cause.metadata?.[ATTEMPT] !== undefined) {
442
+ this.run.failure = cause.cause ?? cause;
443
+ }
444
+ throw cause;
445
+ }
446
+ this.run.failure = cause;
447
+ throw cause;
448
+ }
449
+ finally {
450
+ this.active -= 1;
451
+ this.progress += 1;
452
+ }
453
+ })();
454
+ }
455
+ /**
456
+ * A durable timer on the virtual clock. The wait after a Step's own failure is not waited out: it
457
+ * settles at once and ends the attempt, as a timer that suspends the run does, and the time it
458
+ * skipped counts toward the Step's `maxDurationMs`.
459
+ */
460
+ sleep(durationMs, name) {
461
+ let entry;
462
+ try {
463
+ entry = this.take('sleep', name);
464
+ }
465
+ catch (cause) {
466
+ return Promise.reject(cause);
467
+ }
468
+ entry.until ??= this.run.clock.now() + durationMs;
469
+ if (entry.settled)
470
+ return this.answer(entry);
471
+ if (this.mode === 'run' && name.startsWith(BACKOFF)) {
472
+ entry.settled = true;
473
+ // An attempt takes time too: a zero delay still spends a duration budget, by a millisecond.
474
+ this.run.skipped += Math.max(1, durationMs);
475
+ this.end({ kind: 'retried', error: this.run.failure });
476
+ return this.block();
477
+ }
478
+ if (this.run.clock.now() >= entry.until) {
479
+ if (this.mode === 'run')
480
+ entry.settled = true;
481
+ return Promise.resolve();
482
+ }
483
+ if (this.cancelled(entry))
484
+ return this.answer(entry);
485
+ return this.block();
486
+ }
487
+ /**
488
+ * The engine promise of signal `name`. Awaited, it waits for the signal; `orTimeout` races it
489
+ * against a timer instead, so only one of the two takes a journal position.
490
+ */
491
+ promise(name) {
492
+ let raced = false;
493
+ const awaited = Promise.resolve().then(() => (raced ? new Promise(() => { }) : this.wait(name)));
494
+ return Object.assign(awaited, {
495
+ orTimeout: (millis) => {
496
+ raced = true;
497
+ return this.race(name, millis);
498
+ },
499
+ });
500
+ }
501
+ wait(name) {
502
+ let entry;
503
+ try {
504
+ entry = this.take('signal', name);
505
+ }
506
+ catch (cause) {
507
+ return Promise.reject(cause);
508
+ }
509
+ if (entry.settled)
510
+ return this.answer(entry);
511
+ if (this.run.signals.has(name))
512
+ return this.settle(entry, this.run.signals.get(name));
513
+ if (this.cancelled(entry))
514
+ return this.answer(entry);
515
+ return this.block();
516
+ }
517
+ race(name, millis) {
518
+ let entry;
519
+ try {
520
+ entry = this.take('race', name);
521
+ }
522
+ catch (cause) {
523
+ return Promise.reject(cause);
524
+ }
525
+ entry.until ??= this.run.clock.now() + millis;
526
+ if (entry.settled)
527
+ return this.answer(entry);
528
+ if (this.run.signals.has(name)) {
529
+ if (this.mode === 'run')
530
+ entry.outcome = 'signal';
531
+ return this.settle(entry, this.run.signals.get(name));
532
+ }
533
+ if (this.run.clock.now() >= entry.until) {
534
+ if (this.mode === 'run') {
535
+ entry.settled = true;
536
+ entry.outcome = 'timeout';
537
+ entry.error = new TimeoutError();
538
+ }
539
+ return Promise.reject(new TimeoutError());
540
+ }
541
+ if (this.cancelled(entry))
542
+ return this.answer(entry);
543
+ return this.block();
544
+ }
545
+ settle(entry, value) {
546
+ if (this.mode === 'run') {
547
+ entry.settled = true;
548
+ entry.value = value;
549
+ }
550
+ return Promise.resolve(value);
551
+ }
552
+ }
553
+ function outcomeOf(error) {
554
+ const declared = error.metadata?.[FAILURE];
555
+ if (declared !== undefined) {
556
+ const failure = JSON.parse(declared);
557
+ return {
558
+ kind: 'failed',
559
+ error: Object.freeze({
560
+ ...(failure.family === undefined ? {} : { family: failure.family }),
561
+ code: failure.code,
562
+ message: failure.message,
563
+ ...(failure.details === undefined ? {} : { details: failure.details }),
564
+ }),
565
+ };
566
+ }
567
+ // As the Kernel decodes it: a bare 409 is the engine's cancellation.
568
+ if (error.code === 409)
569
+ return { kind: 'cancelled' };
570
+ return {
571
+ kind: 'failed',
572
+ error: Object.freeze({ code: String(error.code), message: error.message }),
573
+ };
574
+ }
575
+ function snapshot(entry) {
576
+ switch (entry.kind) {
577
+ case 'run':
578
+ return Object.freeze({
579
+ kind: 'run',
580
+ name: entry.name,
581
+ settled: entry.settled,
582
+ attempts: entry.attempts ?? 0,
583
+ ...(entry.settled && entry.error === undefined ? { value: entry.value } : {}),
584
+ ...(entry.error === undefined ? {} : { error: entry.error }),
585
+ });
586
+ case 'sleep':
587
+ return Object.freeze({
588
+ kind: 'sleep',
589
+ ...(entry.name === '' ? {} : { name: entry.name }),
590
+ until: entry.until,
591
+ settled: entry.settled,
592
+ });
593
+ case 'signal':
594
+ return Object.freeze({
595
+ kind: 'signal',
596
+ name: entry.name,
597
+ settled: entry.settled,
598
+ ...(entry.settled && entry.error === undefined ? { value: entry.value } : {}),
599
+ });
600
+ case 'race':
601
+ return Object.freeze({
602
+ kind: 'race',
603
+ name: entry.name,
604
+ until: entry.until,
605
+ settled: entry.settled,
606
+ ...(entry.outcome === undefined ? {} : { outcome: entry.outcome }),
607
+ });
608
+ }
609
+ }
610
+ function describe(entry) {
611
+ return entry.name === '' ? entry.kind : `${entry.kind} ${entry.name}`;
612
+ }
613
+ function divergence(reason, attempted) {
614
+ const cause = attempted.kind === 'failed' ? attempted.error : undefined;
615
+ return new Error(`Replay diverged: the Workflow ${reason}.`, { cause });
616
+ }
617
+ function macrotask() {
618
+ return new Promise((resolve) => setTimeout(resolve, 0));
619
+ }
@@ -0,0 +1,3 @@
1
+ export { createTestWorkflowEngine } from './engine.js';
2
+ export type { TestExecution, TestJournalEntry, TestStartOptions, TestWorkflowEngine, TestWorkflowEngineOptions, } from './engine.js';
3
+ export type { TestStepCapabilities } from './steps.js';
@@ -0,0 +1 @@
1
+ export { createTestWorkflowEngine } from './engine.js';
@@ -0,0 +1,30 @@
1
+ import type { IntegrationClientFactory, Integrations } from '../../application/integration/index.js';
2
+ import type { StepAuthorities } from '../../execution/workflows/steps.js';
3
+ import type { BoundClientSession } from '../../platform/client/session/index.js';
4
+ import type { Domain } from '../../platform/schema/index.js';
5
+ /**
6
+ * What the Steps of a test Execution reach instead of a Kernel. Each answers the calls a Step makes
7
+ * through its capabilities; an absent one fails the call that needs it.
8
+ */
9
+ export interface TestStepCapabilities {
10
+ /** Answers each Query a Step runs, through `query`, `graph.query` or `step.query`. */
11
+ readonly query?: (query: object, input: unknown) => unknown;
12
+ /**
13
+ * Answers each Mutation a Step runs, through `mutate`, `graph.mutate` or `step.mutate`. `call`
14
+ * carries the key the Host engine sends, so a retried Step presents the same one.
15
+ */
16
+ readonly mutate?: (mutation: object, input: unknown, call: {
17
+ readonly idempotencyKey: string;
18
+ }) => unknown;
19
+ /**
20
+ * The Kernel Session of a Step. `kernel.invoke` and every `dependencies` call reach its `invoke`,
21
+ * with the Step's next key in `options.idempotencyKey` when the callee is durable.
22
+ */
23
+ readonly kernel?: Partial<BoundClientSession>;
24
+ }
25
+ /** Bind each Step attempt of a test Execution to the test's capabilities, keyed as on a Host. */
26
+ export declare function testSteps(input: {
27
+ readonly domain: Domain;
28
+ readonly capabilities: TestStepCapabilities;
29
+ readonly integrations: IntegrationClientFactory<Integrations>;
30
+ }): StepAuthorities;