@lostgradient/weft 0.23.1 → 0.24.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 (469) hide show
  1. package/README.md +72 -4
  2. package/dist/cli/codegen-emit-dedup.d.ts +81 -0
  3. package/dist/cli/codegen-emit-dedup.js +45 -0
  4. package/dist/cli/codegen-emit-registry.d.ts +90 -0
  5. package/dist/cli/codegen-emit-registry.js +50 -0
  6. package/dist/cli/codegen-emit.d.ts +26 -39
  7. package/dist/cli/codegen-emit.js +4 -27
  8. package/dist/cli/codegen-validate.d.ts +49 -0
  9. package/dist/cli/codegen-validate.js +186 -0
  10. package/dist/cli/codegen.js +6 -87
  11. package/dist/cli/conformance.js +5 -2
  12. package/dist/cli/generated/operation-catalog.snapshot.json +381 -3
  13. package/dist/cli/generated/operation-client.generated.d.ts +350 -10
  14. package/dist/cli/generated/operation-client.generated.js +14 -0
  15. package/dist/cli/output.js +1 -1
  16. package/dist/cli/parse-schedule-arguments.js +15 -3
  17. package/dist/cli/schedule.js +2 -1
  18. package/dist/cli/storage-factory.js +2 -0
  19. package/dist/cli/types.d.ts +2 -1
  20. package/dist/cli/workflow-commands.js +2 -0
  21. package/dist/cli-main.js +1 -1
  22. package/dist/client/http-client-requests.js +6 -9
  23. package/dist/client/start-body.js +1 -0
  24. package/dist/core/application-payload-digest.d.ts +42 -0
  25. package/dist/core/application-payload-digest.js +76 -0
  26. package/dist/core/application-primitive-abort.d.ts +50 -0
  27. package/dist/core/application-primitive-abort.js +40 -0
  28. package/dist/core/application-primitive-attempt-registry.d.ts +74 -0
  29. package/dist/core/application-primitive-attempt-registry.js +73 -0
  30. package/dist/core/application-primitive-codec.d.ts +36 -0
  31. package/dist/core/application-primitive-codec.js +56 -0
  32. package/dist/core/application-primitive-commit.d.ts +67 -0
  33. package/dist/core/application-primitive-commit.js +66 -0
  34. package/dist/core/application-primitive-guards.d.ts +62 -0
  35. package/dist/core/application-primitive-guards.js +89 -0
  36. package/dist/core/application-primitive-payload.d.ts +29 -0
  37. package/dist/core/application-primitive-payload.js +65 -0
  38. package/dist/core/application-primitive-timing.d.ts +18 -0
  39. package/dist/core/application-primitive-timing.js +22 -0
  40. package/dist/core/atomic-state.js +2 -0
  41. package/dist/core/catalog/codec.d.ts +40 -0
  42. package/dist/core/catalog/codec.js +45 -0
  43. package/dist/core/catalog/errors.d.ts +104 -0
  44. package/dist/core/catalog/errors.js +41 -0
  45. package/dist/core/catalog/index.d.ts +25 -0
  46. package/dist/core/catalog/index.js +22 -0
  47. package/dist/core/catalog/reference-counts.d.ts +120 -0
  48. package/dist/core/catalog/reference-counts.js +28 -0
  49. package/dist/core/catalog/removal.d.ts +105 -0
  50. package/dist/core/catalog/removal.js +30 -0
  51. package/dist/core/catalog/storage-io.d.ts +101 -0
  52. package/dist/core/catalog/storage-io.js +106 -0
  53. package/dist/core/catalog/types.d.ts +108 -0
  54. package/dist/core/catalog/types.js +0 -0
  55. package/dist/core/catalog/workflow-catalog.d.ts +165 -0
  56. package/dist/core/catalog/workflow-catalog.js +198 -0
  57. package/dist/core/compare-codepoint.d.ts +13 -0
  58. package/dist/core/compare-codepoint.js +7 -0
  59. package/dist/core/compression.js +2 -0
  60. package/dist/core/context/attributes.d.ts +1 -1
  61. package/dist/core/context/durable-operations.d.ts +2 -2
  62. package/dist/core/context/index.js +5 -3
  63. package/dist/core/context/state-namespace.d.ts +1 -1
  64. package/dist/core/contract/build.d.ts +64 -0
  65. package/dist/core/contract/build.js +99 -0
  66. package/dist/core/contract/compatibility.d.ts +187 -0
  67. package/dist/core/contract/compatibility.js +37 -0
  68. package/dist/core/contract/failure.d.ts +64 -0
  69. package/dist/core/contract/failure.js +4 -0
  70. package/dist/core/contract/hash.d.ts +92 -0
  71. package/dist/core/contract/hash.js +34 -0
  72. package/dist/core/contract/index.d.ts +21 -0
  73. package/dist/core/contract/index.js +22 -0
  74. package/dist/core/contract/limits.d.ts +74 -0
  75. package/dist/core/contract/limits.js +1 -0
  76. package/dist/core/contract/manifest-parse-schema.d.ts +37 -0
  77. package/dist/core/contract/manifest-parse-schema.js +106 -0
  78. package/dist/core/contract/manifest-parse.d.ts +76 -0
  79. package/dist/core/contract/manifest-parse.js +189 -0
  80. package/dist/core/contract/manifest.d.ts +56 -0
  81. package/dist/core/contract/manifest.js +31 -0
  82. package/dist/core/contract/normalize.d.ts +97 -0
  83. package/dist/core/contract/normalize.js +127 -0
  84. package/dist/core/contract/revision.d.ts +29 -0
  85. package/dist/core/contract/revision.js +5 -0
  86. package/dist/core/contract/types.d.ts +274 -0
  87. package/dist/core/contract/types.js +1 -0
  88. package/dist/core/engine/activity-resolution.js +17 -17
  89. package/dist/core/engine/bulk-operations-purge.js +14 -20
  90. package/dist/core/engine/bulk-operations-retry.d.ts +9 -0
  91. package/dist/core/engine/bulk-operations-retry.js +177 -0
  92. package/dist/core/engine/bulk-operations-shared.d.ts +18 -0
  93. package/dist/core/engine/bulk-operations-shared.js +14 -0
  94. package/dist/core/engine/bulk-operations.js +8 -167
  95. package/dist/core/engine/callback-creators-bundles.js +4 -2
  96. package/dist/core/engine/callback-creators-core.js +9 -1
  97. package/dist/core/engine/callback-creators-schedule.js +2 -2
  98. package/dist/core/engine/catalog-activation.d.ts +40 -0
  99. package/dist/core/engine/catalog-activation.js +17 -0
  100. package/dist/core/engine/catalog-events.d.ts +36 -0
  101. package/dist/core/engine/catalog-events.js +15 -0
  102. package/dist/core/engine/catalog-readiness.d.ts +49 -0
  103. package/dist/core/engine/catalog-readiness.js +61 -0
  104. package/dist/core/engine/catalog-removal.d.ts +236 -0
  105. package/dist/core/engine/catalog-removal.js +123 -0
  106. package/dist/core/engine/catalog-tombstone-recovery.d.ts +56 -0
  107. package/dist/core/engine/catalog-tombstone-recovery.js +39 -0
  108. package/dist/core/engine/constraints.js +5 -1
  109. package/dist/core/engine/construction.d.ts +2 -2
  110. package/dist/core/engine/construction.js +4 -2
  111. package/dist/core/engine/decode-revision.d.ts +32 -0
  112. package/dist/core/engine/decode-revision.js +9 -0
  113. package/dist/core/engine/disposal.d.ts +6 -2
  114. package/dist/core/engine/disposal.js +26 -3
  115. package/dist/core/engine/dynamic-source-errors.d.ts +81 -0
  116. package/dist/core/engine/dynamic-source-errors.js +25 -0
  117. package/dist/core/engine/dynamic-source-execution.d.ts +173 -0
  118. package/dist/core/engine/dynamic-source-execution.js +108 -0
  119. package/dist/core/engine/engine-internal-types.d.ts +16 -0
  120. package/dist/core/engine/engine-workflows-namespace.d.ts +140 -0
  121. package/dist/core/engine/engine-workflows-namespace.js +51 -0
  122. package/dist/core/engine/finalizer-metadata.d.ts +22 -0
  123. package/dist/core/engine/finalizer-metadata.js +12 -0
  124. package/dist/core/engine/handle-result.js +2 -0
  125. package/dist/core/engine/index.d.ts +91 -0
  126. package/dist/core/engine/index.js +78 -6
  127. package/dist/core/engine/inline-launch-queue.js +1 -1
  128. package/dist/core/engine/internals.d.ts +54 -15
  129. package/dist/core/engine/internals.js +6 -0
  130. package/dist/core/engine/lifecycle/checkpoint-launch.d.ts +29 -0
  131. package/dist/core/engine/lifecycle/checkpoint-launch.js +75 -0
  132. package/dist/core/engine/lifecycle/delayed-start-registration.d.ts +30 -0
  133. package/dist/core/engine/lifecycle/delayed-start-registration.js +11 -0
  134. package/dist/core/engine/lifecycle/fork-helpers.d.ts +33 -1
  135. package/dist/core/engine/lifecycle/fork-helpers.js +3 -1
  136. package/dist/core/engine/lifecycle/recovery-revision-groups.d.ts +75 -0
  137. package/dist/core/engine/lifecycle/recovery-revision-groups.js +64 -0
  138. package/dist/core/engine/lifecycle/resume-generation-guard.d.ts +58 -0
  139. package/dist/core/engine/lifecycle/resume-generation-guard.js +11 -0
  140. package/dist/core/engine/lifecycle/resume.js +18 -9
  141. package/dist/core/engine/lifecycle/shared.d.ts +43 -0
  142. package/dist/core/engine/lifecycle/standalone-claim-acquire.d.ts +12 -0
  143. package/dist/core/engine/lifecycle/standalone-claim-acquire.js +6 -0
  144. package/dist/core/engine/lifecycle/start-commit-errors.d.ts +12 -0
  145. package/dist/core/engine/lifecycle/start-commit-errors.js +6 -0
  146. package/dist/core/engine/lifecycle/start-commit.d.ts +22 -7
  147. package/dist/core/engine/lifecycle/start-commit.js +49 -15
  148. package/dist/core/engine/lifecycle/start-exec.d.ts +18 -2
  149. package/dist/core/engine/lifecycle/start-exec.js +7 -5
  150. package/dist/core/engine/lifecycle/start-or-signal-create.js +1 -3
  151. package/dist/core/engine/lifecycle/start-or-signal.js +1 -1
  152. package/dist/core/engine/lifecycle/start-precondition-attribution.d.ts +49 -0
  153. package/dist/core/engine/lifecycle/start-precondition-attribution.js +13 -0
  154. package/dist/core/engine/lifecycle/start-revision-resolution.d.ts +34 -0
  155. package/dist/core/engine/lifecycle/start-revision-resolution.js +11 -0
  156. package/dist/core/engine/lifecycle/start-state.d.ts +16 -0
  157. package/dist/core/engine/lifecycle/start-state.js +60 -0
  158. package/dist/core/engine/lifecycle/start-terminal-conflict-purge.d.ts +66 -3
  159. package/dist/core/engine/lifecycle/start-terminal-conflict-purge.js +13 -3
  160. package/dist/core/engine/lifecycle/start.d.ts +16 -6
  161. package/dist/core/engine/lifecycle/start.js +39 -66
  162. package/dist/core/engine/lifecycle/transition.d.ts +3 -4
  163. package/dist/core/engine/lifecycle/transition.js +30 -80
  164. package/dist/core/engine/lifecycle.d.ts +4 -2
  165. package/dist/core/engine/lifecycle.js +6 -6
  166. package/dist/core/engine/listing.js +15 -1
  167. package/dist/core/engine/memo-durable-activity.js +4 -1
  168. package/dist/core/engine/nonterminal-revision-count.d.ts +25 -0
  169. package/dist/core/engine/nonterminal-revision-count.js +16 -0
  170. package/dist/core/engine/operations-time.d.ts +5 -23
  171. package/dist/core/engine/operations-time.js +13 -11
  172. package/dist/core/engine/ownership-bootstrap.d.ts +1 -1
  173. package/dist/core/engine/pinned-schedule-revision-count.d.ts +26 -0
  174. package/dist/core/engine/pinned-schedule-revision-count.js +19 -0
  175. package/dist/core/engine/pinned-schedule-revision.d.ts +76 -0
  176. package/dist/core/engine/pinned-schedule-revision.js +53 -0
  177. package/dist/core/engine/registration.d.ts +106 -0
  178. package/dist/core/engine/registration.js +28 -7
  179. package/dist/core/engine/retention.js +9 -2
  180. package/dist/core/engine/revision-errors.d.ts +71 -0
  181. package/dist/core/engine/revision-errors.js +13 -0
  182. package/dist/core/engine/schedule-revision-fire.d.ts +17 -0
  183. package/dist/core/engine/schedule-revision-fire.js +3 -0
  184. package/dist/core/engine/schedule-run.js +2 -1
  185. package/dist/core/engine/schedules.d.ts +2 -1
  186. package/dist/core/engine/schedules.js +28 -9
  187. package/dist/core/engine/source-diagnostics.d.ts +76 -0
  188. package/dist/core/engine/source-diagnostics.js +105 -0
  189. package/dist/core/engine/source-registration.d.ts +42 -0
  190. package/dist/core/engine/source-registration.js +38 -0
  191. package/dist/core/engine/source-resolution.d.ts +101 -0
  192. package/dist/core/engine/source-resolution.js +154 -0
  193. package/dist/core/engine/source-runtime-state.d.ts +92 -0
  194. package/dist/core/engine/source-runtime-state.js +36 -0
  195. package/dist/core/engine/storage-io.d.ts +19 -2
  196. package/dist/core/engine/storage-io.js +21 -2
  197. package/dist/core/engine/termination/finalizer-registration.d.ts +18 -0
  198. package/dist/core/engine/termination/finalizer-registration.js +21 -0
  199. package/dist/core/engine/termination/finalizer.d.ts +16 -19
  200. package/dist/core/engine/termination/finalizer.js +3 -3
  201. package/dist/core/engine/time-operation-callbacks.d.ts +32 -0
  202. package/dist/core/engine/time-operation-callbacks.js +0 -0
  203. package/dist/core/engine/validation/schedule-cadence.d.ts +16 -0
  204. package/dist/core/engine/validation/schedule-cadence.js +20 -0
  205. package/dist/core/engine/validation/schedule-options.d.ts +4 -1
  206. package/dist/core/engine/validation/schedule-options.js +14 -0
  207. package/dist/core/engine/validation/schedule-revision.d.ts +24 -0
  208. package/dist/core/engine/validation/schedule-revision.js +21 -0
  209. package/dist/core/engine/validation/schedule-warnings.d.ts +11 -0
  210. package/dist/core/engine/validation/schedule-warnings.js +5 -0
  211. package/dist/core/engine/validation/schedule.d.ts +4 -3
  212. package/dist/core/engine/validation/schedule.js +15 -26
  213. package/dist/core/engine/validation.js +5 -2
  214. package/dist/core/engine/workflow-claim-reclaim-target.d.ts +1 -1
  215. package/dist/core/engine/workflow-claim-reclaim-target.js +16 -2
  216. package/dist/core/engine/workflow-retention-deadline.d.ts +16 -0
  217. package/dist/core/engine/workflow-retention-deadline.js +33 -0
  218. package/dist/core/events/catalog-events.d.ts +117 -0
  219. package/dist/core/events/catalog-events.js +62 -0
  220. package/dist/core/events/event-map.d.ts +11 -0
  221. package/dist/core/events/index.d.ts +2 -0
  222. package/dist/core/events/index.js +2 -0
  223. package/dist/core/events/workflow-source-events.d.ts +102 -0
  224. package/dist/core/events/workflow-source-events.js +57 -0
  225. package/dist/core/execution-strategy.d.ts +7 -0
  226. package/dist/core/inline-execution-strategy.context-options.d.ts +1 -1
  227. package/dist/core/inline-execution-strategy.js +1 -1
  228. package/dist/core/mailbox-admission.d.ts +26 -0
  229. package/dist/core/mailbox-admission.js +130 -0
  230. package/dist/core/mailbox-claims.d.ts +251 -0
  231. package/dist/core/mailbox-claims.js +0 -0
  232. package/dist/core/mailbox-codec.d.ts +32 -0
  233. package/dist/core/mailbox-codec.js +221 -0
  234. package/dist/core/mailbox-contract.d.ts +290 -0
  235. package/dist/core/mailbox-contract.js +0 -0
  236. package/dist/core/mailbox-delivery.d.ts +37 -0
  237. package/dist/core/mailbox-delivery.js +193 -0
  238. package/dist/core/mailbox-guards.d.ts +78 -0
  239. package/dist/core/mailbox-guards.js +58 -0
  240. package/dist/core/mailbox-index-codec.d.ts +41 -0
  241. package/dist/core/mailbox-index-codec.js +71 -0
  242. package/dist/core/mailbox-internals.d.ts +156 -0
  243. package/dist/core/mailbox-internals.js +154 -0
  244. package/dist/core/mailbox-maintenance.d.ts +29 -0
  245. package/dist/core/mailbox-maintenance.js +196 -0
  246. package/dist/core/mailbox-settlement.d.ts +69 -0
  247. package/dist/core/mailbox-settlement.js +206 -0
  248. package/dist/core/mailbox-storage.d.ts +117 -0
  249. package/dist/core/mailbox-storage.js +115 -0
  250. package/dist/core/mailbox-transition-helpers.d.ts +70 -0
  251. package/dist/core/mailbox-transition-helpers.js +43 -0
  252. package/dist/core/mailbox-transitions-recovery.d.ts +28 -0
  253. package/dist/core/mailbox-transitions-recovery.js +64 -0
  254. package/dist/core/mailbox-transitions.d.ts +138 -0
  255. package/dist/core/mailbox-transitions.js +180 -0
  256. package/dist/core/mailbox-types.d.ts +406 -0
  257. package/dist/core/mailbox-types.js +16 -0
  258. package/dist/core/mailbox-validation.d.ts +65 -0
  259. package/dist/core/mailbox-validation.js +73 -0
  260. package/dist/core/mailbox-waits.d.ts +50 -0
  261. package/dist/core/mailbox-waits.js +97 -0
  262. package/dist/core/mailbox.d.ts +163 -0
  263. package/dist/core/mailbox.js +211 -0
  264. package/dist/core/outbox-claims.d.ts +307 -0
  265. package/dist/core/outbox-claims.js +0 -0
  266. package/dist/core/outbox-codec.d.ts +24 -0
  267. package/dist/core/outbox-codec.js +257 -0
  268. package/dist/core/outbox-contract.d.ts +346 -0
  269. package/dist/core/outbox-contract.js +0 -0
  270. package/dist/core/outbox-delivery.d.ts +34 -0
  271. package/dist/core/outbox-delivery.js +149 -0
  272. package/dist/core/outbox-drain.d.ts +29 -0
  273. package/dist/core/outbox-drain.js +158 -0
  274. package/dist/core/outbox-enqueue.d.ts +24 -0
  275. package/dist/core/outbox-enqueue.js +115 -0
  276. package/dist/core/outbox-guards.d.ts +76 -0
  277. package/dist/core/outbox-guards.js +60 -0
  278. package/dist/core/outbox-index-codec.d.ts +33 -0
  279. package/dist/core/outbox-index-codec.js +71 -0
  280. package/dist/core/outbox-internals.d.ts +99 -0
  281. package/dist/core/outbox-internals.js +159 -0
  282. package/dist/core/outbox-listing.d.ts +12 -0
  283. package/dist/core/outbox-listing.js +38 -0
  284. package/dist/core/outbox-maintenance.d.ts +28 -0
  285. package/dist/core/outbox-maintenance.js +191 -0
  286. package/dist/core/outbox-operations.d.ts +18 -0
  287. package/dist/core/outbox-operations.js +46 -0
  288. package/dist/core/outbox-runner.d.ts +30 -0
  289. package/dist/core/outbox-runner.js +217 -0
  290. package/dist/core/outbox-settlement.d.ts +57 -0
  291. package/dist/core/outbox-settlement.js +183 -0
  292. package/dist/core/outbox-storage.d.ts +107 -0
  293. package/dist/core/outbox-storage.js +127 -0
  294. package/dist/core/outbox-transition-helpers.d.ts +83 -0
  295. package/dist/core/outbox-transition-helpers.js +63 -0
  296. package/dist/core/outbox-transitions-recovery.d.ts +30 -0
  297. package/dist/core/outbox-transitions-recovery.js +42 -0
  298. package/dist/core/outbox-transitions.d.ts +145 -0
  299. package/dist/core/outbox-transitions.js +236 -0
  300. package/dist/core/outbox-types.d.ts +400 -0
  301. package/dist/core/outbox-types.js +20 -0
  302. package/dist/core/outbox-validation.d.ts +101 -0
  303. package/dist/core/outbox-validation.js +127 -0
  304. package/dist/core/outbox-waits.d.ts +39 -0
  305. package/dist/core/outbox-waits.js +88 -0
  306. package/dist/core/outbox.d.ts +156 -0
  307. package/dist/core/outbox.js +234 -0
  308. package/dist/core/registry-limits.d.ts +49 -0
  309. package/dist/core/registry-limits.js +10 -0
  310. package/dist/core/registry-schema-conversion.d.ts +20 -0
  311. package/dist/core/registry-schema-conversion.js +22 -0
  312. package/dist/core/registry-snapshot.d.ts +91 -42
  313. package/dist/core/registry-snapshot.js +39 -77
  314. package/dist/core/registry-workflow-contract-draft.d.ts +32 -0
  315. package/dist/core/registry-workflow-contract-draft.js +28 -0
  316. package/dist/core/registry-workflow-manifest.d.ts +122 -0
  317. package/dist/core/registry-workflow-manifest.js +92 -0
  318. package/dist/core/source/errors.d.ts +55 -0
  319. package/dist/core/source/errors.js +13 -0
  320. package/dist/core/source/index.d.ts +19 -0
  321. package/dist/core/source/index.js +4 -0
  322. package/dist/core/source/resolvers.d.ts +45 -0
  323. package/dist/core/source/resolvers.js +9 -0
  324. package/dist/core/source/types.d.ts +211 -0
  325. package/dist/core/source/types.js +0 -0
  326. package/dist/core/source/validate.d.ts +91 -0
  327. package/dist/core/source/validate.js +62 -0
  328. package/dist/core/source/workflow-source.d.ts +43 -0
  329. package/dist/core/source/workflow-source.js +16 -0
  330. package/dist/core/types/checkpoint.d.ts +14 -0
  331. package/dist/core/types/schedules.d.ts +52 -1
  332. package/dist/core/types/state.d.ts +16 -0
  333. package/dist/core/types/workflow-registries.d.ts +7 -0
  334. package/dist/core/types/workflow-registry.d.ts +12 -0
  335. package/dist/core/versioning.js +2 -0
  336. package/dist/core/weft-error.d.ts +1 -1
  337. package/dist/core/weft-error.js +12 -1
  338. package/dist/core/worker-execution-strategy.d.ts +1 -0
  339. package/dist/core/worker-execution-strategy.js +13 -1
  340. package/dist/core/worker-fault-handling.d.ts +10 -0
  341. package/dist/core/worker-fault-handling.js +1 -0
  342. package/dist/core/worker-inbound-message.d.ts +1 -0
  343. package/dist/core/worker-inbound-message.js +1 -0
  344. package/dist/core/worker-protocol-guard.js +4 -0
  345. package/dist/core/worker-protocol.d.ts +7 -0
  346. package/dist/core/worker-protocol.js +2 -1
  347. package/dist/core/worker-turn-watchdog.d.ts +8 -1
  348. package/dist/core/worker-turn-watchdog.js +3 -2
  349. package/dist/diagnostics/format.js +5 -0
  350. package/dist/diagnostics/types.d.ts +24 -0
  351. package/dist/diagnostics/version-check.js +8 -2
  352. package/dist/http.js +2 -2
  353. package/dist/index.d.ts +25 -4
  354. package/dist/index.js +57 -0
  355. package/dist/indexeddb.js +1 -1
  356. package/dist/json-schema.js +3 -3
  357. package/dist/mcp/resources.js +2 -0
  358. package/dist/runtime/portable.d.ts +9 -1
  359. package/dist/server/fault-to-json-rpc.js +4 -1
  360. package/dist/server/handler/auth-context-principal.js +4 -0
  361. package/dist/server/index.d.ts +11 -0
  362. package/dist/server/json-rpc-http.js +2 -0
  363. package/dist/server/json-rpc-websocket.js +6 -4
  364. package/dist/server/operation-catalog/index.d.ts +1 -1
  365. package/dist/server/operation-catalog/pipeline-helpers.js +2 -0
  366. package/dist/server/operation-catalog/types.d.ts +17 -0
  367. package/dist/server/operation-fault.d.ts +5 -0
  368. package/dist/server/operation-fault.js +4 -1
  369. package/dist/server/operations/activate-workflow-revision.d.ts +30 -0
  370. package/dist/server/operations/activate-workflow-revision.js +69 -0
  371. package/dist/server/operations/create-schedule.d.ts +2 -0
  372. package/dist/server/operations/create-schedule.js +10 -6
  373. package/dist/server/operations/fleet-events-subscription.js +1 -1
  374. package/dist/server/operations/fork-workflow.js +1 -1
  375. package/dist/server/operations/get-active-workflow-revision.d.ts +32 -0
  376. package/dist/server/operations/get-active-workflow-revision.js +46 -0
  377. package/dist/server/operations/get-catalog-diagnostics.d.ts +113 -0
  378. package/dist/server/operations/get-catalog-diagnostics.js +65 -0
  379. package/dist/server/operations/get-registry.js +17 -4
  380. package/dist/server/operations/get-task-detail-schema.d.ts +8 -0
  381. package/dist/server/operations/get-task-detail-schema.js +1 -0
  382. package/dist/server/operations/get-task-detail.d.ts +8 -0
  383. package/dist/server/operations/get-task-detail.js +1 -0
  384. package/dist/server/operations/get-task-diagnostics.d.ts +4 -4
  385. package/dist/server/operations/get-workflow-revision.d.ts +25 -0
  386. package/dist/server/operations/get-workflow-revision.js +50 -0
  387. package/dist/server/operations/install-workflow-revision.d.ts +27 -0
  388. package/dist/server/operations/install-workflow-revision.js +46 -0
  389. package/dist/server/operations/list-workflow-revisions.d.ts +20 -0
  390. package/dist/server/operations/list-workflow-revisions.js +40 -0
  391. package/dist/server/operations/preload-workflow-revision.d.ts +28 -0
  392. package/dist/server/operations/preload-workflow-revision.js +60 -0
  393. package/dist/server/operations/schedule-faults.d.ts +1 -0
  394. package/dist/server/operations/schedule-faults.js +32 -4
  395. package/dist/server/operations/schedule-rest-body.d.ts +1 -0
  396. package/dist/server/operations/schedule-rest-body.js +2 -1
  397. package/dist/server/operations/start-or-signal-workflow.js +1 -1
  398. package/dist/server/operations/start-workflow.js +1 -1
  399. package/dist/server/operations/static-registrations.js +42 -0
  400. package/dist/server/operations/storage.js +2 -2
  401. package/dist/server/operations/submit-review-decision.js +1 -1
  402. package/dist/server/operations/update-schedule.d.ts +2 -0
  403. package/dist/server/operations/update-schedule.js +4 -2
  404. package/dist/server/operations/workflow-catalog-operation-helpers.d.ts +59 -0
  405. package/dist/server/operations/workflow-catalog-operation-helpers.js +162 -0
  406. package/dist/server/runtime/task-dispatch-envelope.d.ts +14 -0
  407. package/dist/server/runtime/task-dispatch-envelope.js +32 -0
  408. package/dist/server/runtime/task-dispatch-revision.d.ts +29 -0
  409. package/dist/server/runtime/task-dispatch-revision.js +13 -0
  410. package/dist/server/runtime/task-dispatch.js +12 -37
  411. package/dist/server/runtime/task-ledger-recovery.js +1 -1
  412. package/dist/server/runtime/task-ledger-runtime.d.ts +14 -2
  413. package/dist/server/runtime/task-ledger-runtime.js +5 -3
  414. package/dist/server/runtime/task-polling.js +9 -3
  415. package/dist/server/runtime/task-reconciliation.js +2 -1
  416. package/dist/server/runtime/websocket-upgrade.js +2 -0
  417. package/dist/server/runtime/websocket-worker.js +9 -0
  418. package/dist/server/task-ledger-codec.d.ts +9 -0
  419. package/dist/server/task-ledger-codec.js +4 -1
  420. package/dist/server/task-ledger-transition-helpers.js +1 -0
  421. package/dist/server/task-ledger-types.d.ts +9 -0
  422. package/dist/server/task-ledger.d.ts +1 -1
  423. package/dist/server/task-ledger.js +2 -1
  424. package/dist/server/task-queue-types.d.ts +2 -0
  425. package/dist/storage/bun-sql.js +51 -6
  426. package/dist/storage/catalog-keys.d.ts +64 -0
  427. package/dist/storage/catalog-keys.js +8 -0
  428. package/dist/storage/compressed-storage.js +1 -1
  429. package/dist/storage/derived-operations.js +1 -1
  430. package/dist/storage/index.d.ts +28 -1
  431. package/dist/storage/interface.d.ts +28 -1
  432. package/dist/storage/interface.js +1 -1
  433. package/dist/storage/key-encoding.d.ts +15 -0
  434. package/dist/storage/key-encoding.js +3 -0
  435. package/dist/storage/key-prefixes.d.ts +1 -1
  436. package/dist/storage/key-prefixes.js +16 -0
  437. package/dist/storage/lmdb.d.ts +54 -1
  438. package/dist/storage/lmdb.js +1 -1
  439. package/dist/storage/mailbox-keys.d.ts +80 -0
  440. package/dist/storage/mailbox-keys.js +14 -0
  441. package/dist/storage/memory.js +1 -1
  442. package/dist/storage/neon.js +2 -2
  443. package/dist/storage/node-sqlite-loader.d.ts +1 -1
  444. package/dist/storage/node-sqlite.js +51 -6
  445. package/dist/storage/outbox-keys.d.ts +77 -0
  446. package/dist/storage/outbox-keys.js +14 -0
  447. package/dist/storage/postgres.js +2 -2
  448. package/dist/storage/resolve.js +1 -1
  449. package/dist/storage/scoped-storage.js +1 -1
  450. package/dist/storage/storage-configuration.d.ts +6 -0
  451. package/dist/storage/testing.js +1 -1
  452. package/dist/storage/turso.js +2 -2
  453. package/dist/version.d.ts +1 -1
  454. package/dist/version.js +1 -1
  455. package/dist/web-extension.js +1 -1
  456. package/dist/worker/manifest/registry-contract-builder.d.ts +21 -3
  457. package/dist/worker/manifest/registry-contract-builder.js +40 -31
  458. package/dist/worker/protocol-messages.d.ts +17 -0
  459. package/dist/worker/protocol-schemas.d.ts +32 -0
  460. package/dist/worker/protocol-schemas.js +7 -3
  461. package/dist/worker/protocol-task-result.js +35 -3
  462. package/dist/worker/protocol.js +1 -1
  463. package/dist/worker/registry/types.d.ts +2 -0
  464. package/dist/worker/registry.d.ts +1 -1
  465. package/dist/worker/registry.js +3 -1
  466. package/dist/workers/workflow-runner.d.ts +9 -0
  467. package/dist/workers/workflow-runner.js +9 -2
  468. package/dist/workers/workflow-worker-entry.js +9 -4
  469. package/package.json +2 -2
@@ -34,7 +34,9 @@
34
34
  * `data` payload forms the basis of cross-transport parity: every fault is
35
35
  * serialized consistently across REST and JSON-RPC transports.
36
36
  */
37
+ import type { WorkflowCompatibilityReason } from '../core/contract/compatibility.ts';
37
38
  import type { FaultCode } from '../core/fault-code.ts';
39
+ import type { WorkflowSourceRejectionReason } from '../core/source/errors.ts';
38
40
  import { type WeftErrorCode } from '../core/weft-error.ts';
39
41
  /** Transport identifiers as seen by `executeOperation`. */
40
42
  export type TransportKind = 'http-rest' | 'jsonRpcHttp' | 'jsonRpcWebSocket' | 'jsonRpcStdio';
@@ -78,6 +80,9 @@ export type OperationFault = {
78
80
  missingTypes?: readonly string[] | undefined;
79
81
  missingWorkflowCount?: number | undefined;
80
82
  samplesTruncated?: boolean | undefined;
83
+ currentGeneration?: number | undefined;
84
+ compatibilityReasons?: readonly WorkflowCompatibilityReason[] | undefined;
85
+ sourceValidationReasons?: readonly WorkflowSourceRejectionReason[] | undefined;
81
86
  };
82
87
  } | {
83
88
  code: 'Unprocessable';
@@ -30,7 +30,10 @@ const NO_REST_FAULT_DATA = Object.freeze({}), REST_FAULT_DATA_EXTRACTORS = {
30
30
  Conflict: (data) => filterDefined({
31
31
  missingTypes: data.missingTypes === void 0 ? void 0 : [...data.missingTypes],
32
32
  missingWorkflowCount: data.missingWorkflowCount,
33
- samplesTruncated: data.samplesTruncated
33
+ samplesTruncated: data.samplesTruncated,
34
+ currentGeneration: data.currentGeneration,
35
+ compatibilityReasons: data.compatibilityReasons === void 0 ? void 0 : [...data.compatibilityReasons],
36
+ sourceValidationReasons: data.sourceValidationReasons === void 0 ? void 0 : [...data.sourceValidationReasons]
34
37
  }),
35
38
  Unprocessable: () => NO_REST_FAULT_DATA,
36
39
  PayloadTooLarge: (data) => ({ maxBytes: data.maxBytes }),
@@ -0,0 +1,30 @@
1
+ /**
2
+ * `weft.workflows.revisions.activate` operation + REST binding.
3
+ *
4
+ * Activates an already-installed `(name, revision)` as the durably
5
+ * advertised active revision — bookkeeping only. See
6
+ * `core/engine/engine-workflows-namespace.ts`'s module doc: activation
7
+ * moves `RegistrySnapshot.activeRevisions`, never which in-process handler
8
+ * `engine.start()` dispatches to.
9
+ *
10
+ * @module server/operations/activate-workflow-revision
11
+ */
12
+ import { z } from 'zod';
13
+ import type { WorkflowCatalogActivationResult } from '../../core/catalog/index.ts';
14
+ import type { UnknownRestBinding } from '../rest-bindings.ts';
15
+ declare const activateWorkflowRevisionInput: z.ZodObject<{
16
+ name: z.ZodUnknown;
17
+ revision: z.ZodUnknown;
18
+ expectedGeneration: z.ZodOptional<z.ZodUnknown>;
19
+ policy: z.ZodOptional<z.ZodUnknown>;
20
+ }, z.core.$strip>;
21
+ export type ActivateWorkflowRevisionInput = z.infer<typeof activateWorkflowRevisionInput>;
22
+ export type ActivateWorkflowRevisionOutput = WorkflowCatalogActivationResult;
23
+ export declare const activateWorkflowRevisionOperation: import("../operation-catalog.ts").OperationDefinition<{
24
+ name: unknown;
25
+ revision: unknown;
26
+ expectedGeneration?: unknown;
27
+ policy?: unknown;
28
+ }, WorkflowCatalogActivationResult, unknown>;
29
+ export declare const activateWorkflowRevisionRestBinding: UnknownRestBinding;
30
+ export {};
@@ -0,0 +1,69 @@
1
+ import { z } from "zod";
2
+ import { defineOperation } from "../operation-registry.js";
3
+ import {
4
+ activationRefusalToFault,
5
+ readWorkflowCatalogRestBody,
6
+ throwWorkflowCatalogOperationFault,
7
+ validateExpectedGenerationField,
8
+ validatePolicyField,
9
+ validateWorkflowNameField,
10
+ validateWorkflowRevisionField,
11
+ workflowsAdminAccess
12
+ } from "./workflow-catalog-operation-helpers.js";
13
+ const activateWorkflowRevisionInput = z.object({
14
+ name: z.unknown().describe("Workflow name. Runtime validation requires a wire-safe identifier."),
15
+ revision: z.unknown().describe("Installed revision to activate. Runtime validation requires a non-empty string."),
16
+ expectedGeneration: z.unknown().optional().describe("The durable generation this caller last observed. Required once the workflow has an " + "active revision \u2014 omitting it there refuses with expected-generation-required."),
17
+ policy: z.unknown().optional().describe("Optional compatibility policy override.")
18
+ }), activateWorkflowRevisionOutput = z.unknown();
19
+ export const activateWorkflowRevisionOperation = defineOperation({
20
+ name: "weft.workflows.revisions.activate",
21
+ mcpExposable: !1,
22
+ summary: "Activate an installed workflow revision",
23
+ description: "Activate an already-installed `(name, revision)` as the durably advertised active revision for `name`. Returns the structured result verbatim: `{ applied: true, pointer }` on success, " + "or `{ applied: false, reason, ... }` on refusal \u2014 surfaced as a Conflict fault with `reason` " + "one of `incompatible`, `stale-generation`, `expected-generation-required`, or `conflict`. Faults with NotFound when the revision was never installed. Never changes which in-process " + "handler `engine.start()` dispatches to \u2014 see the workflow-versioning guide.",
24
+ destructive: !0,
25
+ tags: ["Workflow Catalog"],
26
+ inputSchema: activateWorkflowRevisionInput,
27
+ outputSchema: activateWorkflowRevisionOutput,
28
+ access: workflowsAdminAccess,
29
+ producibleFaults: ["NotFound", "Conflict", "InvalidParams"],
30
+ discoverable: !0,
31
+ transports: { http: !0, jsonRpcHttp: !0, jsonRpcWebSocket: !0, jsonRpcStdio: !0 },
32
+ unknownKeyPolicy: { http: "strip", jsonRpc: "reject" },
33
+ invoke: async ({ input, engine }) => {
34
+ const e = engine, name = validateWorkflowNameField(input.name), revision = validateWorkflowRevisionField(input.revision), expectedGeneration = validateExpectedGenerationField(input.expectedGeneration), policy = validatePolicyField(input.policy);
35
+ let result;
36
+ try {
37
+ result = await e.workflows.activate(name, revision, {
38
+ ...expectedGeneration === void 0 ? {} : { expectedGeneration },
39
+ ...policy === void 0 ? {} : { policy }
40
+ });
41
+ } catch (error) {
42
+ throwWorkflowCatalogOperationFault(error);
43
+ }
44
+ if (!result.applied)
45
+ throw activationRefusalToFault(result);
46
+ return result;
47
+ }
48
+ }), activateWorkflowRevisionRestBinding = {
49
+ method: "POST",
50
+ path: "/v1/registry/workflows/:name/activate",
51
+ pathParamNames: ["name"],
52
+ operationName: "weft.workflows.revisions.activate",
53
+ inputSources: {
54
+ name: { kind: "path", pathParam: "name" },
55
+ revision: { kind: "body-field", bodyField: "revision" },
56
+ expectedGeneration: { kind: "body-field", bodyField: "expectedGeneration" },
57
+ policy: { kind: "body-field", bodyField: "policy" }
58
+ },
59
+ extractInput: async (request, pathParams, context) => {
60
+ const body = await readWorkflowCatalogRestBody(request, context);
61
+ return {
62
+ name: pathParams.name ?? "",
63
+ revision: body.revision,
64
+ expectedGeneration: body.expectedGeneration,
65
+ policy: body.policy
66
+ };
67
+ },
68
+ success: { kind: "json", status: 200 }
69
+ };
@@ -10,6 +10,7 @@ declare const createScheduleInput: z.ZodObject<{
10
10
  overlap: z.ZodOptional<z.ZodUnknown>;
11
11
  backfill: z.ZodOptional<z.ZodUnknown>;
12
12
  jitter: z.ZodOptional<z.ZodUnknown>;
13
+ revisionPolicy: z.ZodOptional<z.ZodUnknown>;
13
14
  }, z.core.$strip>;
14
15
  declare const createScheduleOutput: z.ZodObject<{
15
16
  id: z.ZodString;
@@ -26,6 +27,7 @@ export declare const createScheduleOperation: import("../operation-catalog.ts").
26
27
  overlap?: unknown;
27
28
  backfill?: unknown;
28
29
  jitter?: unknown;
30
+ revisionPolicy?: unknown;
29
31
  }, {
30
32
  id: string;
31
33
  }, unknown>;
@@ -19,7 +19,8 @@ const createScheduleInput = z.object({
19
19
  description: z.unknown().optional().describe("Operator-facing schedule description. Runtime validation requires a string."),
20
20
  overlap: z.unknown().optional(),
21
21
  backfill: z.unknown().optional(),
22
- jitter: z.unknown().optional()
22
+ jitter: z.unknown().optional(),
23
+ revisionPolicy: z.unknown().optional().describe('Revision policy (WFT-20). Runtime validation requires "active-at-fire" or "pinned"; defaults to "active-at-fire".')
23
24
  }), createScheduleOutput = z.object({
24
25
  id: z.string()
25
26
  });
@@ -42,12 +43,13 @@ function validateOptionalScheduleFields(input) {
42
43
  description: validatedOptions.description,
43
44
  overlap: validatedOptions.overlap,
44
45
  backfill: validatedOptions.backfill,
45
- jitter: validatedOptions.jitter
46
+ jitter: validatedOptions.jitter,
47
+ revisionPolicy: validatedOptions.revisionPolicy
46
48
  };
47
49
  }
48
50
  function validateCreateScheduleInput(input) {
49
- const { type, spec } = validateRequiredScheduleFields(input), { id, description, overlap, backfill, jitter } = validateOptionalScheduleFields(input);
50
- return { type, spec, id, description, overlap, backfill, jitter };
51
+ const { type, spec } = validateRequiredScheduleFields(input), { id, description, overlap, backfill, jitter, revisionPolicy } = validateOptionalScheduleFields(input);
52
+ return { type, spec, id, description, overlap, backfill, jitter, revisionPolicy };
51
53
  }
52
54
  export const createScheduleOperation = defineOperation({
53
55
  name: "weft.schedules.create",
@@ -68,7 +70,8 @@ export const createScheduleOperation = defineOperation({
68
70
  ...validated.description !== void 0 ? { description: validated.description } : {},
69
71
  ...validated.overlap !== void 0 ? { overlap: validated.overlap } : {},
70
72
  ...validated.backfill !== void 0 ? { backfill: validated.backfill } : {},
71
- ...validated.jitter !== void 0 ? { jitter: validated.jitter } : {}
73
+ ...validated.jitter !== void 0 ? { jitter: validated.jitter } : {},
74
+ ...validated.revisionPolicy !== void 0 ? { revisionPolicy: validated.revisionPolicy } : {}
72
75
  };
73
76
  try {
74
77
  return { id: (await typedEngine.schedule(validated.type, input.input, validated.spec, options)).id };
@@ -90,7 +93,8 @@ export const createScheduleOperation = defineOperation({
90
93
  description: { kind: "body-field", bodyField: "description" },
91
94
  overlap: { kind: "body-field", bodyField: "overlap" },
92
95
  backfill: { kind: "body-field", bodyField: "backfill" },
93
- jitter: { kind: "body-field", bodyField: "jitter" }
96
+ jitter: { kind: "body-field", bodyField: "jitter" },
97
+ revisionPolicy: { kind: "body-field", bodyField: "revisionPolicy" }
94
98
  },
95
99
  extractInput: async (request, _pathParams, context) => {
96
100
  const record = await parseScheduleRestBodyRequestRecord(request, context);
@@ -85,7 +85,7 @@ function getFleetEventFeed(engine, transport) {
85
85
  if (isFleetEventSubscriber(fleetFeed))
86
86
  return fleetFeed;
87
87
  }
88
- raiseFault(fleetEventsSubscriptionOperation, {
88
+ return raiseFault(fleetEventsSubscriptionOperation, {
89
89
  code: "UnsupportedTransport",
90
90
  message: "Fleet event subscription requires a WebSocket fleet event feed",
91
91
  data: { transport, supported: ["jsonRpcWebSocket"] }
@@ -54,7 +54,7 @@ export const forkWorkflowOperation = defineOperation({
54
54
  try {
55
55
  return { id: (await typedEngine.fork(input.workflowId, options)).id };
56
56
  } catch (error) {
57
- resolveForkAccess(error);
57
+ return resolveForkAccess(error);
58
58
  }
59
59
  }
60
60
  }), forkWorkflowRestBinding = {
@@ -0,0 +1,32 @@
1
+ /**
2
+ * `weft.workflows.active.get` operation + REST binding.
3
+ *
4
+ * Returns the currently active revision pointer for one workflow name.
5
+ * Named `active.get` rather than `revisions.getActive` — `OPERATION_NAME_PATTERN`
6
+ * forbids camelCase wire segments, and `getActive` is only this namespace
7
+ * method's TypeScript name (`engine.workflows.getActive`).
8
+ *
9
+ * In-memory only: matches `RegistrySnapshot.activeRevisions`' existing
10
+ * staleness contract exactly (see `engine-workflows-namespace.ts`'s
11
+ * `getActive` JSDoc), which is what makes "operations and the registry
12
+ * snapshot agree" true by construction.
13
+ *
14
+ * @module server/operations/get-active-workflow-revision
15
+ */
16
+ import { z } from 'zod';
17
+ import type { WorkflowCatalogActivePointer } from '../../core/catalog/index.ts';
18
+ import type { UnknownRestBinding } from '../rest-bindings.ts';
19
+ declare const getActiveWorkflowRevisionInput: z.ZodObject<{
20
+ name: z.ZodUnknown;
21
+ }, z.core.$strip>;
22
+ export type GetActiveWorkflowRevisionInput = z.infer<typeof getActiveWorkflowRevisionInput>;
23
+ export type GetActiveWorkflowRevisionOutput = WorkflowCatalogActivePointer;
24
+ export declare const getActiveWorkflowRevisionOperation: import("../operation-catalog.ts").OperationDefinition<{
25
+ name: unknown;
26
+ }, Readonly<{
27
+ revision: string;
28
+ generation: number;
29
+ activatedAt: number;
30
+ }>, unknown>;
31
+ export declare const getActiveWorkflowRevisionRestBinding: UnknownRestBinding;
32
+ export {};
@@ -0,0 +1,46 @@
1
+ import { z } from "zod";
2
+ import { defineOperation } from "../operation-registry.js";
3
+ import {
4
+ validateWorkflowNameField,
5
+ workflowsReadAccess
6
+ } from "./workflow-catalog-operation-helpers.js";
7
+ const getActiveWorkflowRevisionInput = z.object({
8
+ name: z.unknown().describe("Workflow name. Runtime validation requires a wire-safe identifier.")
9
+ }), getActiveWorkflowRevisionOutput = z.unknown();
10
+ export const getActiveWorkflowRevisionOperation = defineOperation({
11
+ name: "weft.workflows.active.get",
12
+ mcpExposable: !1,
13
+ summary: "Get the currently active revision pointer for a workflow",
14
+ description: "Read the current `{ revision, generation, activatedAt }` active pointer for `name`. Read-only, in-memory (matches `RegistrySnapshot.activeRevisions`' staleness contract exactly). Faults with NotFound when `name` has never been activated.",
15
+ destructive: !1,
16
+ tags: ["Workflow Catalog"],
17
+ inputSchema: getActiveWorkflowRevisionInput,
18
+ outputSchema: getActiveWorkflowRevisionOutput,
19
+ access: workflowsReadAccess,
20
+ producibleFaults: ["NotFound", "InvalidParams"],
21
+ discoverable: !0,
22
+ transports: { http: !0, jsonRpcHttp: !0, jsonRpcWebSocket: !0, jsonRpcStdio: !0 },
23
+ unknownKeyPolicy: { http: "strip", jsonRpc: "reject" },
24
+ invoke: async ({ input, engine }) => {
25
+ const e = engine, name = validateWorkflowNameField(input.name), pointer = await e.workflows.getActive(name);
26
+ if (pointer === null)
27
+ throw {
28
+ code: "NotFound",
29
+ message: `Workflow "${name}" has never been activated`,
30
+ data: { resource: "workflow-active-revision", identifier: name }
31
+ };
32
+ return pointer;
33
+ }
34
+ }), getActiveWorkflowRevisionRestBinding = {
35
+ method: "GET",
36
+ path: "/v1/registry/workflows/:name/active",
37
+ pathParamNames: ["name"],
38
+ operationName: "weft.workflows.active.get",
39
+ inputSources: {
40
+ name: { kind: "path", pathParam: "name" }
41
+ },
42
+ extractInput: async (_request, pathParams) => ({
43
+ name: pathParams.name ?? ""
44
+ }),
45
+ success: { kind: "json", status: 200 }
46
+ };
@@ -0,0 +1,113 @@
1
+ /**
2
+ * `weft.catalog.diagnostics` operation + REST binding (WFT-12).
3
+ *
4
+ * Read-only, bounded diagnostics for one `(name, revision)` workflow
5
+ * catalog entry: whether it is installed, whether it is currently active,
6
+ * its full reference-count breakdown, and whether it would currently be
7
+ * removable. No REST/JSON-RPC removal surface exists this batch — removal
8
+ * (`removeWorkflowRevision`) is a plain in-process function, not a wire
9
+ * operation, per the coordinator's "single bounded diagnostics operation"
10
+ * steer.
11
+ *
12
+ * Static, not factory-built — unlike `get-worker-diagnostics.ts`'s injected
13
+ * `WorkerRegistry`, this operation needs no per-server state beyond the
14
+ * live `engine` every `invoke` already receives, matching
15
+ * `get-retention-overview.ts`'s shape.
16
+ *
17
+ * @module server/operations/get-catalog-diagnostics
18
+ */
19
+ import { z } from 'zod';
20
+ import type { UnknownRestBinding } from '../rest-bindings.ts';
21
+ declare const getCatalogDiagnosticsInput: z.ZodObject<{
22
+ name: z.ZodString;
23
+ revision: z.ZodString;
24
+ }, z.core.$strict>;
25
+ declare const getCatalogDiagnosticsOutput: z.ZodObject<{
26
+ name: z.ZodString;
27
+ revision: z.ZodString;
28
+ installed: z.ZodBoolean;
29
+ active: z.ZodBoolean;
30
+ activeRevision: z.ZodOptional<z.ZodString>;
31
+ references: z.ZodObject<{
32
+ registeredDefinitions: z.ZodNumber;
33
+ inFlightStarts: z.ZodNumber;
34
+ nonTerminalRuns: z.ZodNumber;
35
+ pinnedSchedules: z.ZodNumber;
36
+ pendingDispatches: z.ZodNumber;
37
+ activeExecutionRealms: z.ZodNumber;
38
+ retainedRecoveryRecords: z.ZodNumber;
39
+ }, z.core.$strict>;
40
+ removable: z.ZodBoolean;
41
+ source: z.ZodOptional<z.ZodObject<{
42
+ kind: z.ZodLiteral<"module">;
43
+ requestedRevision: z.ZodString;
44
+ state: z.ZodEnum<{
45
+ failed: "failed";
46
+ cancelled: "cancelled";
47
+ idle: "idle";
48
+ loading: "loading";
49
+ ready: "ready";
50
+ }>;
51
+ loadDurationMs: z.ZodOptional<z.ZodNumber>;
52
+ lastFailureCategory: z.ZodOptional<z.ZodEnum<{
53
+ application: "application";
54
+ timeout: "timeout";
55
+ cancellation: "cancellation";
56
+ resource: "resource";
57
+ system: "system";
58
+ }>>;
59
+ waiterCount: z.ZodNumber;
60
+ }, z.core.$strict>>;
61
+ }, z.core.$strict>;
62
+ export type GetCatalogDiagnosticsInput = z.infer<typeof getCatalogDiagnosticsInput>;
63
+ export type GetCatalogDiagnosticsOutput = z.infer<typeof getCatalogDiagnosticsOutput>;
64
+ /**
65
+ * `weft.catalog.diagnostics`: bounded, per-`(name, revision)` diagnostics
66
+ * for the durable workflow catalog. Requires `system:read`. Never returns
67
+ * manifest or contract content — only identity, active-pointer state, and
68
+ * low-cardinality reference counts, matching the repository's "metrics
69
+ * remain low-cardinality" observability convention.
70
+ *
71
+ * @example
72
+ * ```ts
73
+ * import { HttpClient } from '@lostgradient/weft/client';
74
+ *
75
+ * const client = new HttpClient({ baseUrl: 'https://weft.example.com' });
76
+ * const diagnostics = await client.operations['weft.catalog.diagnostics']({
77
+ * name: 'checkout',
78
+ * revision: 'some-revision',
79
+ * });
80
+ * console.log(diagnostics.installed, diagnostics.removable);
81
+ * ```
82
+ */
83
+ export declare const getCatalogDiagnosticsOperation: import("../operation-catalog.ts").OperationDefinition<{
84
+ name: string;
85
+ revision: string;
86
+ }, {
87
+ name: string;
88
+ revision: string;
89
+ installed: boolean;
90
+ active: boolean;
91
+ references: {
92
+ registeredDefinitions: number;
93
+ inFlightStarts: number;
94
+ nonTerminalRuns: number;
95
+ pinnedSchedules: number;
96
+ pendingDispatches: number;
97
+ activeExecutionRealms: number;
98
+ retainedRecoveryRecords: number;
99
+ };
100
+ removable: boolean;
101
+ activeRevision?: string | undefined;
102
+ source?: {
103
+ kind: "module";
104
+ requestedRevision: string;
105
+ state: "failed" | "cancelled" | "idle" | "loading" | "ready";
106
+ waiterCount: number;
107
+ loadDurationMs?: number | undefined;
108
+ lastFailureCategory?: "application" | "timeout" | "cancellation" | "resource" | "system" | undefined;
109
+ } | undefined;
110
+ }, unknown>;
111
+ /** REST binding for `weft.catalog.diagnostics`: `GET /v1/catalog/:name/revisions/:revision/diagnostics`. */
112
+ export declare const getCatalogDiagnosticsRestBinding: UnknownRestBinding;
113
+ export {};
@@ -0,0 +1,65 @@
1
+ import { z } from "zod";
2
+ import { getWorkflowRevisionDiagnostics } from "../../core/engine.js";
3
+ import { shapeOperationFaultAsJson } from "../operation-fault.js";
4
+ import { defineOperation } from "../operation-registry.js";
5
+ const workflowRevisionReferenceCountsSchema = z.object({
6
+ registeredDefinitions: z.number().int().nonnegative(),
7
+ inFlightStarts: z.number().int().nonnegative(),
8
+ nonTerminalRuns: z.number().int().nonnegative(),
9
+ pinnedSchedules: z.number().int().nonnegative(),
10
+ pendingDispatches: z.number().int().nonnegative(),
11
+ activeExecutionRealms: z.number().int().nonnegative(),
12
+ retainedRecoveryRecords: z.number().int().nonnegative()
13
+ }).strict(), getCatalogDiagnosticsInput = z.object({
14
+ name: z.string().min(1),
15
+ revision: z.string().min(1)
16
+ }).strict(), sourceLoadDiagnosticsSchema = z.object({
17
+ kind: z.literal("module"),
18
+ requestedRevision: z.string(),
19
+ state: z.enum(["idle", "loading", "ready", "failed", "cancelled"]),
20
+ loadDurationMs: z.number().nonnegative().optional(),
21
+ lastFailureCategory: z.enum(["application", "timeout", "cancellation", "resource", "system"]).optional(),
22
+ waiterCount: z.number().int().nonnegative()
23
+ }).strict(), getCatalogDiagnosticsOutput = z.object({
24
+ name: z.string(),
25
+ revision: z.string(),
26
+ installed: z.boolean(),
27
+ active: z.boolean(),
28
+ activeRevision: z.string().optional(),
29
+ references: workflowRevisionReferenceCountsSchema,
30
+ removable: z.boolean(),
31
+ source: sourceLoadDiagnosticsSchema.optional()
32
+ }).strict();
33
+ export const getCatalogDiagnosticsOperation = defineOperation({
34
+ name: "weft.catalog.diagnostics",
35
+ mcpExposable: !1,
36
+ summary: "Get bounded reference-count and removability diagnostics for one workflow revision",
37
+ description: "Report whether a `(name, revision)` workflow catalog entry is installed, whether it is currently the active revision, its full reference-count breakdown, and whether it's currently removable. When `name` was ever registered as a dynamic workflow source (`engine.registerSource()`), also reports its bounded load-state diagnostics: source kind, load state, load duration, last failure category, and outstanding waiter count. Never returns manifest or contract content.",
38
+ destructive: !1,
39
+ tags: ["Observability"],
40
+ inputSchema: getCatalogDiagnosticsInput,
41
+ outputSchema: getCatalogDiagnosticsOutput,
42
+ access: { kind: "scoped", scopes: { kind: "anyOf", scopes: ["system:read"] } },
43
+ producibleFaults: [],
44
+ discoverable: !0,
45
+ transports: { http: !0, jsonRpcHttp: !0, jsonRpcWebSocket: !0, jsonRpcStdio: !0 },
46
+ unknownKeyPolicy: { http: "strip", jsonRpc: "reject" },
47
+ invoke: async ({ engine, input }) => {
48
+ return getWorkflowRevisionDiagnostics(engine, input.name, input.revision);
49
+ }
50
+ }), getCatalogDiagnosticsRestBinding = {
51
+ method: "GET",
52
+ path: "/v1/catalog/:name/revisions/:revision/diagnostics",
53
+ pathParamNames: ["name", "revision"],
54
+ operationName: "weft.catalog.diagnostics",
55
+ inputSources: {
56
+ name: { kind: "path", pathParam: "name" },
57
+ revision: { kind: "path", pathParam: "revision" }
58
+ },
59
+ extractInput: async (_request, pathParams) => ({
60
+ name: pathParams.name ?? "",
61
+ revision: pathParams.revision ?? ""
62
+ }),
63
+ success: { kind: "json", status: 200 },
64
+ shapeFault: shapeOperationFaultAsJson
65
+ };
@@ -1,14 +1,19 @@
1
1
  import { z } from "zod";
2
2
  import {
3
3
  buildRegistrySnapshot,
4
- RegistrySchemaConversionError
4
+ REGISTRY_VERSION,
5
+ RegistryManifestLimitError,
6
+ RegistrySchemaConversionError,
7
+ RegistryWorkflowCountLimitError
5
8
  } from "../../core/registry-snapshot.js";
6
9
  import { defineOperation } from "../operation-registry.js";
7
10
  const getRegistryInput = z.object({}), objectValue = z.unknown().refine((value) => typeof value === "object" && value !== null && !Array.isArray(value), {
8
11
  message: "expected an object"
9
12
  }), getRegistryOutput = z.object({
10
- registryVersion: z.literal(1),
11
- workflows: objectValue,
13
+ registryVersion: z.literal(REGISTRY_VERSION),
14
+ generatedAt: z.string(),
15
+ workflows: z.array(objectValue),
16
+ activeRevisions: objectValue,
12
17
  activities: objectValue
13
18
  }).strict();
14
19
  export const getRegistryOperation = defineOperation({
@@ -28,7 +33,7 @@ export const getRegistryOperation = defineOperation({
28
33
  unknownKeyPolicy: { http: "strip", jsonRpc: "reject" },
29
34
  invoke: async ({ engine }) => {
30
35
  try {
31
- return buildRegistrySnapshot(engine);
36
+ return await buildRegistrySnapshot(engine);
32
37
  } catch (error) {
33
38
  if (error instanceof RegistrySchemaConversionError)
34
39
  console.error(`[weft.system.registry] ${error.message}`, {
@@ -36,6 +41,14 @@ export const getRegistryOperation = defineOperation({
36
41
  entityName: error.entityName,
37
42
  direction: error.direction
38
43
  });
44
+ else if (error instanceof RegistryManifestLimitError)
45
+ console.error(`[weft.system.registry] ${error.message}`, {
46
+ workflowType: error.workflowType
47
+ });
48
+ else if (error instanceof RegistryWorkflowCountLimitError)
49
+ console.error(`[weft.system.registry] ${error.message}`, {
50
+ count: error.count
51
+ });
39
52
  throw error;
40
53
  }
41
54
  }
@@ -39,6 +39,7 @@ export declare const getTaskDetailOutputSchema: z.ZodDiscriminatedUnion<[z.ZodOb
39
39
  operationId: z.ZodString;
40
40
  workflowId: z.ZodOptional<z.ZodString>;
41
41
  workflowExecutionToken: z.ZodOptional<z.ZodString>;
42
+ workflowRevision: z.ZodOptional<z.ZodString>;
42
43
  workflowType: z.ZodString;
43
44
  activityName: z.ZodString;
44
45
  queue: z.ZodString;
@@ -77,6 +78,7 @@ export declare const getTaskDetailOutputSchema: z.ZodDiscriminatedUnion<[z.ZodOb
77
78
  operationId: z.ZodString;
78
79
  workflowId: z.ZodOptional<z.ZodString>;
79
80
  workflowExecutionToken: z.ZodOptional<z.ZodString>;
81
+ workflowRevision: z.ZodOptional<z.ZodString>;
80
82
  workflowType: z.ZodString;
81
83
  activityName: z.ZodString;
82
84
  queue: z.ZodString;
@@ -120,6 +122,7 @@ export declare const getTaskDetailOutputSchema: z.ZodDiscriminatedUnion<[z.ZodOb
120
122
  operationId: z.ZodString;
121
123
  workflowId: z.ZodOptional<z.ZodString>;
122
124
  workflowExecutionToken: z.ZodOptional<z.ZodString>;
125
+ workflowRevision: z.ZodOptional<z.ZodString>;
123
126
  workflowType: z.ZodString;
124
127
  activityName: z.ZodString;
125
128
  queue: z.ZodString;
@@ -160,6 +163,7 @@ export declare const getTaskDetailOutputSchema: z.ZodDiscriminatedUnion<[z.ZodOb
160
163
  operationId: z.ZodString;
161
164
  workflowId: z.ZodOptional<z.ZodString>;
162
165
  workflowExecutionToken: z.ZodOptional<z.ZodString>;
166
+ workflowRevision: z.ZodOptional<z.ZodString>;
163
167
  workflowType: z.ZodString;
164
168
  activityName: z.ZodString;
165
169
  queue: z.ZodString;
@@ -200,6 +204,7 @@ export declare const getTaskDetailOutputSchema: z.ZodDiscriminatedUnion<[z.ZodOb
200
204
  operationId: z.ZodString;
201
205
  workflowId: z.ZodOptional<z.ZodString>;
202
206
  workflowExecutionToken: z.ZodOptional<z.ZodString>;
207
+ workflowRevision: z.ZodOptional<z.ZodString>;
203
208
  workflowType: z.ZodString;
204
209
  activityName: z.ZodString;
205
210
  queue: z.ZodString;
@@ -235,6 +240,7 @@ export declare const getTaskDetailOutputSchema: z.ZodDiscriminatedUnion<[z.ZodOb
235
240
  operationId: z.ZodString;
236
241
  workflowId: z.ZodOptional<z.ZodString>;
237
242
  workflowExecutionToken: z.ZodOptional<z.ZodString>;
243
+ workflowRevision: z.ZodOptional<z.ZodString>;
238
244
  workflowType: z.ZodString;
239
245
  activityName: z.ZodString;
240
246
  queue: z.ZodString;
@@ -270,6 +276,7 @@ export declare const getTaskDetailOutputSchema: z.ZodDiscriminatedUnion<[z.ZodOb
270
276
  operationId: z.ZodString;
271
277
  workflowId: z.ZodOptional<z.ZodString>;
272
278
  workflowExecutionToken: z.ZodOptional<z.ZodString>;
279
+ workflowRevision: z.ZodOptional<z.ZodString>;
273
280
  workflowType: z.ZodString;
274
281
  activityName: z.ZodString;
275
282
  queue: z.ZodString;
@@ -311,6 +318,7 @@ export declare const getTaskDetailOutputSchema: z.ZodDiscriminatedUnion<[z.ZodOb
311
318
  operationId: z.ZodString;
312
319
  workflowId: z.ZodOptional<z.ZodString>;
313
320
  workflowExecutionToken: z.ZodOptional<z.ZodString>;
321
+ workflowRevision: z.ZodOptional<z.ZodString>;
314
322
  workflowType: z.ZodString;
315
323
  activityName: z.ZodString;
316
324
  queue: z.ZodString;
@@ -23,6 +23,7 @@ const taskDetailBaseFields = {
23
23
  operationId: z.string(),
24
24
  workflowId: z.string().optional(),
25
25
  workflowExecutionToken: z.string().optional(),
26
+ workflowRevision: z.string().optional(),
26
27
  workflowType: z.string(),
27
28
  activityName: z.string(),
28
29
  queue: z.string(),
@@ -60,6 +60,7 @@ export declare const getTaskDetailOperation: import("../operation-catalog.ts").O
60
60
  adoptedAt?: number | undefined;
61
61
  workflowId?: string | undefined;
62
62
  workflowExecutionToken?: string | undefined;
63
+ workflowRevision?: string | undefined;
63
64
  priority?: number | undefined;
64
65
  retryPolicy?: {
65
66
  maxAttempts: number;
@@ -95,6 +96,7 @@ export declare const getTaskDetailOperation: import("../operation-catalog.ts").O
95
96
  adoptedAt?: number | undefined;
96
97
  workflowId?: string | undefined;
97
98
  workflowExecutionToken?: string | undefined;
99
+ workflowRevision?: string | undefined;
98
100
  priority?: number | undefined;
99
101
  retryPolicy?: {
100
102
  maxAttempts: number;
@@ -130,6 +132,7 @@ export declare const getTaskDetailOperation: import("../operation-catalog.ts").O
130
132
  adoptedAt?: number | undefined;
131
133
  workflowId?: string | undefined;
132
134
  workflowExecutionToken?: string | undefined;
135
+ workflowRevision?: string | undefined;
133
136
  priority?: number | undefined;
134
137
  retryPolicy?: {
135
138
  maxAttempts: number;
@@ -168,6 +171,7 @@ export declare const getTaskDetailOperation: import("../operation-catalog.ts").O
168
171
  lastRequeueReason?: string | undefined;
169
172
  workflowId?: string | undefined;
170
173
  workflowExecutionToken?: string | undefined;
174
+ workflowRevision?: string | undefined;
171
175
  priority?: number | undefined;
172
176
  retryPolicy?: {
173
177
  maxAttempts: number;
@@ -206,6 +210,7 @@ export declare const getTaskDetailOperation: import("../operation-catalog.ts").O
206
210
  lastRequeueReason?: string | undefined;
207
211
  workflowId?: string | undefined;
208
212
  workflowExecutionToken?: string | undefined;
213
+ workflowRevision?: string | undefined;
209
214
  priority?: number | undefined;
210
215
  retryPolicy?: {
211
216
  maxAttempts: number;
@@ -246,6 +251,7 @@ export declare const getTaskDetailOperation: import("../operation-catalog.ts").O
246
251
  lastRequeueReason?: string | undefined;
247
252
  workflowId?: string | undefined;
248
253
  workflowExecutionToken?: string | undefined;
254
+ workflowRevision?: string | undefined;
249
255
  priority?: number | undefined;
250
256
  retryPolicy?: {
251
257
  maxAttempts: number;
@@ -286,6 +292,7 @@ export declare const getTaskDetailOperation: import("../operation-catalog.ts").O
286
292
  lastRequeueReason?: string | undefined;
287
293
  workflowId?: string | undefined;
288
294
  workflowExecutionToken?: string | undefined;
295
+ workflowRevision?: string | undefined;
289
296
  priority?: number | undefined;
290
297
  retryPolicy?: {
291
298
  maxAttempts: number;
@@ -324,6 +331,7 @@ export declare const getTaskDetailOperation: import("../operation-catalog.ts").O
324
331
  lastRequeueReason?: string | undefined;
325
332
  workflowId?: string | undefined;
326
333
  workflowExecutionToken?: string | undefined;
334
+ workflowRevision?: string | undefined;
327
335
  priority?: number | undefined;
328
336
  retryPolicy?: {
329
337
  maxAttempts: number;