@plumbus/core 0.7.1 → 0.8.0-beta.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 (513) hide show
  1. package/CHANGELOG.md +49 -0
  2. package/README.md +2 -1
  3. package/dist/.tsbuildinfo +1 -1
  4. package/dist/admission/client.d.ts +9 -0
  5. package/dist/admission/client.d.ts.map +1 -0
  6. package/dist/admission/client.js +34 -0
  7. package/dist/admission/client.js.map +1 -0
  8. package/dist/admission/index.d.ts +5 -0
  9. package/dist/admission/index.d.ts.map +1 -0
  10. package/dist/admission/index.js +4 -0
  11. package/dist/admission/index.js.map +1 -0
  12. package/dist/admission/request-admission.d.ts +26 -0
  13. package/dist/admission/request-admission.d.ts.map +1 -0
  14. package/dist/admission/request-admission.js +85 -0
  15. package/dist/admission/request-admission.js.map +1 -0
  16. package/dist/admission/shared.d.ts +31 -0
  17. package/dist/admission/shared.d.ts.map +1 -0
  18. package/dist/admission/shared.js +30 -0
  19. package/dist/admission/shared.js.map +1 -0
  20. package/dist/ai/ai/provider.d.ts +5 -7
  21. package/dist/ai/ai-service.d.ts +8 -1
  22. package/dist/ai/ai-service.d.ts.map +1 -1
  23. package/dist/ai/ai-service.js +23 -13
  24. package/dist/ai/ai-service.js.map +1 -1
  25. package/dist/ai/errors/data-errors.d.ts +6 -0
  26. package/dist/ai/errors/index.d.ts +4 -1
  27. package/dist/ai/fill-prompt-template.d.ts +12 -0
  28. package/dist/ai/fill-prompt-template.d.ts.map +1 -0
  29. package/dist/ai/fill-prompt-template.js +19 -0
  30. package/dist/ai/fill-prompt-template.js.map +1 -0
  31. package/dist/ai/governed-artifacts.d.ts +49 -0
  32. package/dist/ai/governed-artifacts.d.ts.map +1 -0
  33. package/dist/ai/governed-artifacts.js +277 -0
  34. package/dist/ai/governed-artifacts.js.map +1 -0
  35. package/dist/ai/governed-budget.d.ts +17 -0
  36. package/dist/ai/governed-budget.d.ts.map +1 -0
  37. package/dist/ai/governed-budget.js +52 -0
  38. package/dist/ai/governed-budget.js.map +1 -0
  39. package/dist/ai/governed-host.d.ts +54 -0
  40. package/dist/ai/governed-host.d.ts.map +1 -0
  41. package/dist/ai/governed-host.js +8 -0
  42. package/dist/ai/governed-host.js.map +1 -0
  43. package/dist/ai/governed-invoke.d.ts +41 -0
  44. package/dist/ai/governed-invoke.d.ts.map +1 -0
  45. package/dist/ai/governed-invoke.js +102 -0
  46. package/dist/ai/governed-invoke.js.map +1 -0
  47. package/dist/ai/governed-runtime.d.ts +103 -0
  48. package/dist/ai/governed-runtime.d.ts.map +1 -0
  49. package/dist/ai/governed-runtime.js +151 -0
  50. package/dist/ai/governed-runtime.js.map +1 -0
  51. package/dist/ai/index.d.ts +12 -2
  52. package/dist/ai/index.d.ts.map +1 -1
  53. package/dist/ai/index.js +8 -2
  54. package/dist/ai/index.js.map +1 -1
  55. package/dist/ai/prompt-registry.d.ts +6 -0
  56. package/dist/ai/prompt-registry.d.ts.map +1 -1
  57. package/dist/ai/prompt-registry.js +12 -0
  58. package/dist/ai/prompt-registry.js.map +1 -1
  59. package/dist/ai/provider.d.ts +5 -7
  60. package/dist/ai/provider.d.ts.map +1 -1
  61. package/dist/ai/provider.js +29 -0
  62. package/dist/ai/provider.js.map +1 -1
  63. package/dist/ai/types/enums.d.ts +2 -0
  64. package/dist/ai/types/fields.d.ts +7 -0
  65. package/dist/ai/types/prompt.d.ts +8 -0
  66. package/dist/ai/validation.d.ts.map +1 -1
  67. package/dist/ai/validation.js +10 -1
  68. package/dist/ai/validation.js.map +1 -1
  69. package/dist/api/exposure.d.ts +14 -0
  70. package/dist/api/exposure.d.ts.map +1 -1
  71. package/dist/api/exposure.js +16 -0
  72. package/dist/api/exposure.js.map +1 -1
  73. package/dist/api/idempotency.d.ts +67 -0
  74. package/dist/api/idempotency.d.ts.map +1 -0
  75. package/dist/api/idempotency.js +176 -0
  76. package/dist/api/idempotency.js.map +1 -0
  77. package/dist/api/index.d.ts +3 -1
  78. package/dist/api/index.d.ts.map +1 -1
  79. package/dist/api/index.js +4 -2
  80. package/dist/api/index.js.map +1 -1
  81. package/dist/api/route-generator.d.ts +50 -6
  82. package/dist/api/route-generator.d.ts.map +1 -1
  83. package/dist/api/route-generator.js +254 -12
  84. package/dist/api/route-generator.js.map +1 -1
  85. package/dist/approvals/action-risk.d.ts +41 -0
  86. package/dist/approvals/action-risk.d.ts.map +1 -0
  87. package/dist/approvals/action-risk.js +56 -0
  88. package/dist/approvals/action-risk.js.map +1 -0
  89. package/dist/approvals/actors.d.ts +8 -0
  90. package/dist/approvals/actors.d.ts.map +1 -0
  91. package/dist/approvals/actors.js +26 -0
  92. package/dist/approvals/actors.js.map +1 -0
  93. package/dist/approvals/authorization.d.ts +5 -0
  94. package/dist/approvals/authorization.d.ts.map +1 -0
  95. package/dist/approvals/authorization.js +16 -0
  96. package/dist/approvals/authorization.js.map +1 -0
  97. package/dist/approvals/digest.d.ts +3 -0
  98. package/dist/approvals/digest.d.ts.map +1 -0
  99. package/dist/approvals/digest.js +21 -0
  100. package/dist/approvals/digest.js.map +1 -0
  101. package/dist/approvals/gate.d.ts +15 -0
  102. package/dist/approvals/gate.d.ts.map +1 -0
  103. package/dist/approvals/gate.js +102 -0
  104. package/dist/approvals/gate.js.map +1 -0
  105. package/dist/approvals/host-runtime.d.ts +16 -0
  106. package/dist/approvals/host-runtime.d.ts.map +1 -0
  107. package/dist/approvals/host-runtime.js +12 -0
  108. package/dist/approvals/host-runtime.js.map +1 -0
  109. package/dist/approvals/index.d.ts +19 -0
  110. package/dist/approvals/index.d.ts.map +1 -0
  111. package/dist/approvals/index.js +13 -0
  112. package/dist/approvals/index.js.map +1 -0
  113. package/dist/approvals/memory-store.d.ts +3 -0
  114. package/dist/approvals/memory-store.d.ts.map +1 -0
  115. package/dist/approvals/memory-store.js +33 -0
  116. package/dist/approvals/memory-store.js.map +1 -0
  117. package/dist/approvals/schema.d.ts +484 -0
  118. package/dist/approvals/schema.d.ts.map +1 -0
  119. package/dist/approvals/schema.js +55 -0
  120. package/dist/approvals/schema.js.map +1 -0
  121. package/dist/approvals/service.d.ts +17 -0
  122. package/dist/approvals/service.d.ts.map +1 -0
  123. package/dist/approvals/service.js +240 -0
  124. package/dist/approvals/service.js.map +1 -0
  125. package/dist/approvals/sql-store.d.ts +9 -0
  126. package/dist/approvals/sql-store.d.ts.map +1 -0
  127. package/dist/approvals/sql-store.js +179 -0
  128. package/dist/approvals/sql-store.js.map +1 -0
  129. package/dist/approvals/types.d.ts +156 -0
  130. package/dist/approvals/types.d.ts.map +1 -0
  131. package/dist/approvals/types.js +32 -0
  132. package/dist/approvals/types.js.map +1 -0
  133. package/dist/approvals/wait.d.ts +10 -0
  134. package/dist/approvals/wait.d.ts.map +1 -0
  135. package/dist/approvals/wait.js +11 -0
  136. package/dist/approvals/wait.js.map +1 -0
  137. package/dist/audit/service.d.ts.map +1 -1
  138. package/dist/audit/service.js +6 -1
  139. package/dist/audit/service.js.map +1 -1
  140. package/dist/cli/cli.d.ts.map +1 -1
  141. package/dist/cli/cli.js +2 -1
  142. package/dist/cli/cli.js.map +1 -1
  143. package/dist/cli/commands/api.d.ts +65 -0
  144. package/dist/cli/commands/api.d.ts.map +1 -1
  145. package/dist/cli/commands/api.js +79 -4
  146. package/dist/cli/commands/api.js.map +1 -1
  147. package/dist/cli/commands/compile-flows.d.ts +9 -0
  148. package/dist/cli/commands/compile-flows.d.ts.map +1 -0
  149. package/dist/cli/commands/compile-flows.js +55 -0
  150. package/dist/cli/commands/compile-flows.js.map +1 -0
  151. package/dist/cli/commands/dev.d.ts +6 -0
  152. package/dist/cli/commands/dev.d.ts.map +1 -1
  153. package/dist/cli/commands/dev.js +22 -5
  154. package/dist/cli/commands/dev.js.map +1 -1
  155. package/dist/cli/commands/e2e.d.ts +5 -0
  156. package/dist/cli/commands/e2e.d.ts.map +1 -1
  157. package/dist/cli/commands/e2e.js +42 -3
  158. package/dist/cli/commands/e2e.js.map +1 -1
  159. package/dist/cli/commands/flow.d.ts.map +1 -1
  160. package/dist/cli/commands/flow.js +12 -3
  161. package/dist/cli/commands/flow.js.map +1 -1
  162. package/dist/cli/commands/generate-openapi-from-zod.d.ts +26 -0
  163. package/dist/cli/commands/generate-openapi-from-zod.d.ts.map +1 -0
  164. package/dist/cli/commands/generate-openapi-from-zod.js +189 -0
  165. package/dist/cli/commands/generate-openapi-from-zod.js.map +1 -0
  166. package/dist/cli/commands/generate.d.ts +10 -4
  167. package/dist/cli/commands/generate.d.ts.map +1 -1
  168. package/dist/cli/commands/generate.js +27 -70
  169. package/dist/cli/commands/generate.js.map +1 -1
  170. package/dist/cli/commands/index.d.ts +1 -0
  171. package/dist/cli/commands/index.d.ts.map +1 -1
  172. package/dist/cli/commands/index.js +2 -0
  173. package/dist/cli/commands/index.js.map +1 -1
  174. package/dist/cli/commands/mcp.d.ts +5 -0
  175. package/dist/cli/commands/mcp.d.ts.map +1 -1
  176. package/dist/cli/commands/mcp.js +28 -2
  177. package/dist/cli/commands/mcp.js.map +1 -1
  178. package/dist/cli/commands/migrate.d.ts +1 -0
  179. package/dist/cli/commands/migrate.d.ts.map +1 -1
  180. package/dist/cli/commands/migrate.js +145 -34
  181. package/dist/cli/commands/migrate.js.map +1 -1
  182. package/dist/cli/commands/openapi-3-1.d.ts +34 -0
  183. package/dist/cli/commands/openapi-3-1.d.ts.map +1 -0
  184. package/dist/cli/commands/openapi-3-1.js +333 -0
  185. package/dist/cli/commands/openapi-3-1.js.map +1 -0
  186. package/dist/cli/commands/start.d.ts +5 -0
  187. package/dist/cli/commands/start.d.ts.map +1 -1
  188. package/dist/cli/commands/start.js +20 -2
  189. package/dist/cli/commands/start.js.map +1 -1
  190. package/dist/cli/commands/ui.d.ts +11 -0
  191. package/dist/cli/commands/ui.d.ts.map +1 -1
  192. package/dist/cli/commands/ui.js +105 -20
  193. package/dist/cli/commands/ui.js.map +1 -1
  194. package/dist/cli/commands/verify.d.ts.map +1 -1
  195. package/dist/cli/commands/verify.js +2 -0
  196. package/dist/cli/commands/verify.js.map +1 -1
  197. package/dist/cli/commands/worker.d.ts +5 -0
  198. package/dist/cli/commands/worker.d.ts.map +1 -1
  199. package/dist/cli/commands/worker.js +18 -2
  200. package/dist/cli/commands/worker.js.map +1 -1
  201. package/dist/cli/index.d.ts +1 -1
  202. package/dist/cli/index.d.ts.map +1 -1
  203. package/dist/cli/index.js +1 -1
  204. package/dist/cli/index.js.map +1 -1
  205. package/dist/credentials/catalog.d.ts +71 -0
  206. package/dist/credentials/catalog.d.ts.map +1 -0
  207. package/dist/credentials/catalog.js +293 -0
  208. package/dist/credentials/catalog.js.map +1 -0
  209. package/dist/credentials/index.d.ts +3 -0
  210. package/dist/credentials/index.d.ts.map +1 -0
  211. package/dist/credentials/index.js +2 -0
  212. package/dist/credentials/index.js.map +1 -0
  213. package/dist/data/drift-inspector.d.ts +1 -4
  214. package/dist/data/drift-inspector.d.ts.map +1 -1
  215. package/dist/data/drift-inspector.js +39 -5
  216. package/dist/data/drift-inspector.js.map +1 -1
  217. package/dist/data/field-encryption.d.ts +7 -0
  218. package/dist/data/field-encryption.d.ts.map +1 -1
  219. package/dist/data/field-encryption.js +35 -17
  220. package/dist/data/field-encryption.js.map +1 -1
  221. package/dist/data/framework-migration-rewriter.js +1 -1
  222. package/dist/data/framework-migration-rewriter.js.map +1 -1
  223. package/dist/data/index.d.ts +1 -1
  224. package/dist/data/index.d.ts.map +1 -1
  225. package/dist/data/index.js +1 -1
  226. package/dist/data/index.js.map +1 -1
  227. package/dist/data/mask-fields.d.ts +2 -0
  228. package/dist/data/mask-fields.d.ts.map +1 -1
  229. package/dist/data/mask-fields.js +6 -0
  230. package/dist/data/mask-fields.js.map +1 -1
  231. package/dist/data/migration.d.ts.map +1 -1
  232. package/dist/data/migration.js +25 -1
  233. package/dist/data/migration.js.map +1 -1
  234. package/dist/data/repository.d.ts.map +1 -1
  235. package/dist/data/repository.js +15 -3
  236. package/dist/data/repository.js.map +1 -1
  237. package/dist/data/schema-generator.d.ts +95 -3
  238. package/dist/data/schema-generator.d.ts.map +1 -1
  239. package/dist/data/schema-generator.js +122 -6
  240. package/dist/data/schema-generator.js.map +1 -1
  241. package/dist/define/defineCapability.d.ts +7 -0
  242. package/dist/define/defineCapability.d.ts.map +1 -1
  243. package/dist/define/defineCapability.js +15 -0
  244. package/dist/define/defineCapability.js.map +1 -1
  245. package/dist/define/defineFlow.d.ts +3 -1
  246. package/dist/define/defineFlow.d.ts.map +1 -1
  247. package/dist/define/defineFlow.js.map +1 -1
  248. package/dist/durable/apply-ddl.d.ts +13 -0
  249. package/dist/durable/apply-ddl.d.ts.map +1 -0
  250. package/dist/durable/apply-ddl.js +278 -0
  251. package/dist/durable/apply-ddl.js.map +1 -0
  252. package/dist/durable/harness.d.ts +31 -0
  253. package/dist/durable/harness.d.ts.map +1 -0
  254. package/dist/durable/harness.js +136 -0
  255. package/dist/durable/harness.js.map +1 -0
  256. package/dist/durable/index.d.ts +18 -0
  257. package/dist/durable/index.d.ts.map +1 -0
  258. package/dist/durable/index.js +16 -0
  259. package/dist/durable/index.js.map +1 -0
  260. package/dist/durable/memory-store.d.ts +48 -0
  261. package/dist/durable/memory-store.d.ts.map +1 -0
  262. package/dist/durable/memory-store.js +260 -0
  263. package/dist/durable/memory-store.js.map +1 -0
  264. package/dist/durable/migrations-path.d.ts +5 -0
  265. package/dist/durable/migrations-path.d.ts.map +1 -0
  266. package/dist/durable/migrations-path.js +8 -0
  267. package/dist/durable/migrations-path.js.map +1 -0
  268. package/dist/durable/opaque-dispatch.d.ts +7 -0
  269. package/dist/durable/opaque-dispatch.d.ts.map +1 -0
  270. package/dist/durable/opaque-dispatch.js +67 -0
  271. package/dist/durable/opaque-dispatch.js.map +1 -0
  272. package/dist/durable/persist-before-ack.d.ts +52 -0
  273. package/dist/durable/persist-before-ack.d.ts.map +1 -0
  274. package/dist/durable/persist-before-ack.js +153 -0
  275. package/dist/durable/persist-before-ack.js.map +1 -0
  276. package/dist/durable/pg-env.d.ts +9 -0
  277. package/dist/durable/pg-env.d.ts.map +1 -0
  278. package/dist/durable/pg-env.js +20 -0
  279. package/dist/durable/pg-env.js.map +1 -0
  280. package/dist/durable/postgres-persist.d.ts +33 -0
  281. package/dist/durable/postgres-persist.d.ts.map +1 -0
  282. package/dist/durable/postgres-persist.js +239 -0
  283. package/dist/durable/postgres-persist.js.map +1 -0
  284. package/dist/durable/reconciliation.d.ts +20 -0
  285. package/dist/durable/reconciliation.d.ts.map +1 -0
  286. package/dist/durable/reconciliation.js +91 -0
  287. package/dist/durable/reconciliation.js.map +1 -0
  288. package/dist/durable/schema.d.ts +1448 -0
  289. package/dist/durable/schema.d.ts.map +1 -0
  290. package/dist/durable/schema.js +138 -0
  291. package/dist/durable/schema.js.map +1 -0
  292. package/dist/durable/spine-claim.d.ts +16 -0
  293. package/dist/durable/spine-claim.d.ts.map +1 -0
  294. package/dist/durable/spine-claim.js +131 -0
  295. package/dist/durable/spine-claim.js.map +1 -0
  296. package/dist/durable/types.d.ts +153 -0
  297. package/dist/durable/types.d.ts.map +1 -0
  298. package/dist/durable/types.js +114 -0
  299. package/dist/durable/types.js.map +1 -0
  300. package/dist/errors/data-errors.d.ts +6 -0
  301. package/dist/errors/data-errors.d.ts.map +1 -1
  302. package/dist/errors/data-errors.js +9 -0
  303. package/dist/errors/data-errors.js.map +1 -1
  304. package/dist/errors/http.d.ts.map +1 -1
  305. package/dist/errors/http.js +9 -1
  306. package/dist/errors/http.js.map +1 -1
  307. package/dist/errors/index.d.ts +4 -1
  308. package/dist/errors/index.d.ts.map +1 -1
  309. package/dist/errors/index.js +11 -1
  310. package/dist/errors/index.js.map +1 -1
  311. package/dist/errors-entry.d.ts +1 -1
  312. package/dist/errors-entry.d.ts.map +1 -1
  313. package/dist/errors-entry.js +1 -1
  314. package/dist/errors-entry.js.map +1 -1
  315. package/dist/events/consumer-registry.d.ts +6 -0
  316. package/dist/events/consumer-registry.d.ts.map +1 -1
  317. package/dist/events/consumer-registry.js.map +1 -1
  318. package/dist/events/dispatcher.d.ts +19 -0
  319. package/dist/events/dispatcher.d.ts.map +1 -1
  320. package/dist/events/dispatcher.js +161 -114
  321. package/dist/events/dispatcher.js.map +1 -1
  322. package/dist/events/idempotency.d.ts +3 -2
  323. package/dist/events/idempotency.d.ts.map +1 -1
  324. package/dist/events/idempotency.js +3 -2
  325. package/dist/events/idempotency.js.map +1 -1
  326. package/dist/events/index.d.ts +2 -0
  327. package/dist/events/index.d.ts.map +1 -1
  328. package/dist/events/index.js +1 -0
  329. package/dist/events/index.js.map +1 -1
  330. package/dist/events/subscription.d.ts +29 -0
  331. package/dist/events/subscription.d.ts.map +1 -0
  332. package/dist/events/subscription.js +19 -0
  333. package/dist/events/subscription.js.map +1 -0
  334. package/dist/events/worker.d.ts +8 -1
  335. package/dist/events/worker.d.ts.map +1 -1
  336. package/dist/events/worker.js +32 -5
  337. package/dist/events/worker.js.map +1 -1
  338. package/dist/execution/capability-executor.d.ts +6 -3
  339. package/dist/execution/capability-executor.d.ts.map +1 -1
  340. package/dist/execution/capability-executor.js +34 -6
  341. package/dist/execution/capability-executor.js.map +1 -1
  342. package/dist/execution/context-deps.d.ts +2 -0
  343. package/dist/execution/context-deps.d.ts.map +1 -1
  344. package/dist/execution/context-deps.js +2 -1
  345. package/dist/execution/context-deps.js.map +1 -1
  346. package/dist/execution/context-factory.d.ts +38 -1
  347. package/dist/execution/context-factory.d.ts.map +1 -1
  348. package/dist/execution/context-factory.js +102 -4
  349. package/dist/execution/context-factory.js.map +1 -1
  350. package/dist/execution/index.d.ts +2 -2
  351. package/dist/execution/index.d.ts.map +1 -1
  352. package/dist/execution/index.js +1 -1
  353. package/dist/execution/index.js.map +1 -1
  354. package/dist/execution/transactional-outbox.d.ts +10 -0
  355. package/dist/execution/transactional-outbox.d.ts.map +1 -1
  356. package/dist/execution/transactional-outbox.js +41 -2
  357. package/dist/execution/transactional-outbox.js.map +1 -1
  358. package/dist/flows/budget.d.ts +44 -0
  359. package/dist/flows/budget.d.ts.map +1 -0
  360. package/dist/flows/budget.js +81 -0
  361. package/dist/flows/budget.js.map +1 -0
  362. package/dist/flows/compile-flow.d.ts +23 -0
  363. package/dist/flows/compile-flow.d.ts.map +1 -0
  364. package/dist/flows/compile-flow.js +176 -0
  365. package/dist/flows/compile-flow.js.map +1 -0
  366. package/dist/flows/compiled-registry.d.ts +43 -0
  367. package/dist/flows/compiled-registry.d.ts.map +1 -0
  368. package/dist/flows/compiled-registry.js +198 -0
  369. package/dist/flows/compiled-registry.js.map +1 -0
  370. package/dist/flows/dead-letter.d.ts +16 -0
  371. package/dist/flows/dead-letter.d.ts.map +1 -1
  372. package/dist/flows/dead-letter.js +67 -0
  373. package/dist/flows/dead-letter.js.map +1 -1
  374. package/dist/flows/definition-strategy.d.ts +13 -0
  375. package/dist/flows/definition-strategy.d.ts.map +1 -0
  376. package/dist/flows/definition-strategy.js +30 -0
  377. package/dist/flows/definition-strategy.js.map +1 -0
  378. package/dist/flows/engine.d.ts +38 -1
  379. package/dist/flows/engine.d.ts.map +1 -1
  380. package/dist/flows/engine.js +375 -32
  381. package/dist/flows/engine.js.map +1 -1
  382. package/dist/flows/index.d.ts +12 -4
  383. package/dist/flows/index.d.ts.map +1 -1
  384. package/dist/flows/index.js +7 -2
  385. package/dist/flows/index.js.map +1 -1
  386. package/dist/flows/scheduler.d.ts +26 -0
  387. package/dist/flows/scheduler.d.ts.map +1 -1
  388. package/dist/flows/scheduler.js +157 -37
  389. package/dist/flows/scheduler.js.map +1 -1
  390. package/dist/flows/schema.d.ts +34 -0
  391. package/dist/flows/schema.d.ts.map +1 -1
  392. package/dist/flows/schema.js +4 -0
  393. package/dist/flows/schema.js.map +1 -1
  394. package/dist/flows/step-executor.d.ts +3 -0
  395. package/dist/flows/step-executor.d.ts.map +1 -1
  396. package/dist/flows/step-executor.js +33 -0
  397. package/dist/flows/step-executor.js.map +1 -1
  398. package/dist/governance/capability-source-scan.d.ts.map +1 -1
  399. package/dist/governance/capability-source-scan.js +2 -29
  400. package/dist/governance/capability-source-scan.js.map +1 -1
  401. package/dist/governance/forbidden-path-scan.d.ts +7 -0
  402. package/dist/governance/forbidden-path-scan.d.ts.map +1 -0
  403. package/dist/governance/forbidden-path-scan.js +60 -0
  404. package/dist/governance/forbidden-path-scan.js.map +1 -0
  405. package/dist/governance/index.d.ts +2 -0
  406. package/dist/governance/index.d.ts.map +1 -1
  407. package/dist/governance/index.js +2 -0
  408. package/dist/governance/index.js.map +1 -1
  409. package/dist/governance/source-walk.d.ts +3 -0
  410. package/dist/governance/source-walk.d.ts.map +1 -0
  411. package/dist/governance/source-walk.js +33 -0
  412. package/dist/governance/source-walk.js.map +1 -0
  413. package/dist/index.d.ts +21 -12
  414. package/dist/index.d.ts.map +1 -1
  415. package/dist/index.js +22 -9
  416. package/dist/index.js.map +1 -1
  417. package/dist/runtime/bootstrap.d.ts +3 -1
  418. package/dist/runtime/bootstrap.d.ts.map +1 -1
  419. package/dist/runtime/load-extensions.d.ts.map +1 -1
  420. package/dist/runtime/load-extensions.js +11 -0
  421. package/dist/runtime/load-extensions.js.map +1 -1
  422. package/dist/runtime/register-consumers.d.ts +3 -0
  423. package/dist/runtime/register-consumers.d.ts.map +1 -1
  424. package/dist/runtime/register-consumers.js +4 -0
  425. package/dist/runtime/register-consumers.js.map +1 -1
  426. package/dist/runtime/start-worker-pool.d.ts.map +1 -1
  427. package/dist/runtime/start-worker-pool.js +1 -0
  428. package/dist/runtime/start-worker-pool.js.map +1 -1
  429. package/dist/runtime-entry.d.ts +4 -0
  430. package/dist/runtime-entry.d.ts.map +1 -0
  431. package/dist/runtime-entry.js +30 -0
  432. package/dist/runtime-entry.js.map +1 -0
  433. package/dist/server/bootstrap.d.ts +116 -8
  434. package/dist/server/bootstrap.d.ts.map +1 -1
  435. package/dist/server/bootstrap.js +139 -62
  436. package/dist/server/bootstrap.js.map +1 -1
  437. package/dist/tenancy/data-plane-connection.d.ts +108 -0
  438. package/dist/tenancy/data-plane-connection.d.ts.map +1 -0
  439. package/dist/tenancy/data-plane-connection.js +320 -0
  440. package/dist/tenancy/data-plane-connection.js.map +1 -0
  441. package/dist/tenancy/data-plane-migrate.d.ts +30 -0
  442. package/dist/tenancy/data-plane-migrate.d.ts.map +1 -0
  443. package/dist/tenancy/data-plane-migrate.js +44 -0
  444. package/dist/tenancy/data-plane-migrate.js.map +1 -0
  445. package/dist/tenancy/data-plane-provisioning.d.ts +135 -0
  446. package/dist/tenancy/data-plane-provisioning.d.ts.map +1 -0
  447. package/dist/tenancy/data-plane-provisioning.js +639 -0
  448. package/dist/tenancy/data-plane-provisioning.js.map +1 -0
  449. package/dist/tenancy/data-plane-resolver.d.ts +37 -0
  450. package/dist/tenancy/data-plane-resolver.d.ts.map +1 -0
  451. package/dist/tenancy/data-plane-resolver.js +302 -0
  452. package/dist/tenancy/data-plane-resolver.js.map +1 -0
  453. package/dist/tenancy/index.d.ts +9 -0
  454. package/dist/tenancy/index.d.ts.map +1 -0
  455. package/dist/tenancy/index.js +22 -0
  456. package/dist/tenancy/index.js.map +1 -0
  457. package/dist/tenancy/types.d.ts +117 -0
  458. package/dist/tenancy/types.d.ts.map +1 -0
  459. package/dist/tenancy/types.js +8 -0
  460. package/dist/tenancy/types.js.map +1 -0
  461. package/dist/testing/context.d.ts.map +1 -1
  462. package/dist/testing/context.js +6 -1
  463. package/dist/testing/context.js.map +1 -1
  464. package/dist/testing/crash-matrix-simulation.d.ts +51 -0
  465. package/dist/testing/crash-matrix-simulation.d.ts.map +1 -0
  466. package/dist/testing/crash-matrix-simulation.js +350 -0
  467. package/dist/testing/crash-matrix-simulation.js.map +1 -0
  468. package/dist/testing/scaffolding.d.ts.map +1 -1
  469. package/dist/testing/scaffolding.js +4 -1
  470. package/dist/testing/scaffolding.js.map +1 -1
  471. package/dist/types/capability.d.ts +16 -0
  472. package/dist/types/capability.d.ts.map +1 -1
  473. package/dist/types/capability.js.map +1 -1
  474. package/dist/types/context.d.ts +62 -0
  475. package/dist/types/context.d.ts.map +1 -1
  476. package/dist/types/enums.d.ts +2 -0
  477. package/dist/types/enums.d.ts.map +1 -1
  478. package/dist/types/enums.js +2 -0
  479. package/dist/types/enums.js.map +1 -1
  480. package/dist/types/fields.d.ts +7 -0
  481. package/dist/types/fields.d.ts.map +1 -1
  482. package/dist/types/flow.d.ts +96 -1
  483. package/dist/types/flow.d.ts.map +1 -1
  484. package/dist/types/flow.js +7 -1
  485. package/dist/types/flow.js.map +1 -1
  486. package/dist/types/index.d.ts +9 -6
  487. package/dist/types/index.d.ts.map +1 -1
  488. package/dist/types/index.js +5 -1
  489. package/dist/types/index.js.map +1 -1
  490. package/dist/types/prompt.d.ts +8 -0
  491. package/dist/types/prompt.d.ts.map +1 -1
  492. package/dist/types/prompt.js +7 -0
  493. package/dist/types/prompt.js.map +1 -1
  494. package/dist/worker/bootstrap.d.ts +100 -1
  495. package/dist/worker/bootstrap.d.ts.map +1 -1
  496. package/dist/worker/bootstrap.js +155 -14
  497. package/dist/worker/bootstrap.js.map +1 -1
  498. package/instructions/api.md +21 -0
  499. package/instructions/cli.md +15 -9
  500. package/instructions/deployment.md +27 -25
  501. package/instructions/flows.md +8 -1
  502. package/instructions/framework.md +2 -1
  503. package/instructions/mcp.md +1 -1
  504. package/instructions/peer-dependencies.md +16 -14
  505. package/instructions/prompts.md +3 -0
  506. package/instructions/security.md +4 -0
  507. package/instructions/testing.md +2 -2
  508. package/migrations/durable-tenant/0000_durable_tenant.sql +92 -0
  509. package/migrations/durable-tenant/0001_human_task.sql +45 -0
  510. package/migrations/durable-tenant/meta/_journal.json +20 -0
  511. package/migrations/spine/0000_opaque_dispatch.sql +26 -0
  512. package/migrations/spine/meta/_journal.json +13 -0
  513. package/package.json +26 -8
@@ -0,0 +1 @@
1
+ {"version":3,"file":"harness.d.ts","sourceRoot":"","sources":["../../src/durable/harness.ts"],"names":[],"mappings":"AAGA,OAAO,EAAW,KAAK,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAa3E,OAAO,EAA4B,KAAK,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAE/E,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,iBAAiB,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,kBAAkB,CAAC;IAC5B,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAsCD,wBAAsB,wBAAwB,CAAC,OAAO,CAAC,EAAE;IACvD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAsD9B;AAED,wBAAsB,yBAAyB,CAAC,OAAO,EAAE;IACvD,KAAK,CAAC,EAAE,iBAAiB,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACb,GAAG,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,kBAAkB,CAAC;IAAC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,CAAC,CA6B5E;AAED,wBAAsB,sBAAsB,CAC1C,KAAK,EAAE,iBAAiB,EACxB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC;IAAE,EAAE,EAAE,kBAAkB,CAAC;IAAC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,CAAC,CAQ7D"}
@@ -0,0 +1,136 @@
1
+ // Two-database durable test harness against local Postgres (no Docker).
2
+ // Creates only plumbus_durable_test_* databases and drops them on close.
3
+ import { drizzle } from 'drizzle-orm/postgres-js';
4
+ import { randomBytes } from 'node:crypto';
5
+ import postgres from 'postgres';
6
+ import { FRAMEWORK_SCHEMA } from '../data/schema-generator.js';
7
+ import { assertSafeIdentifier, quoteIdentifier } from '../tenancy/data-plane-provisioning.js';
8
+ import { eventDeliveryDdl, eventOutboxDdl, flowExecutionsDdl, DURABLE_TEST_DB_PATTERN, spineDispatchDdl, tenantDurableDdl, } from './apply-ddl.js';
9
+ import { resolveTestPostgresAdmin } from './pg-env.js';
10
+ function adminClient(admin, database = admin.database) {
11
+ return postgres({
12
+ host: admin.host,
13
+ port: admin.port,
14
+ database,
15
+ username: admin.user,
16
+ password: admin.password,
17
+ max: 1,
18
+ connect_timeout: 10,
19
+ onnotice: () => { },
20
+ });
21
+ }
22
+ async function applyStatements(client, ddl) {
23
+ for (const statement of ddl
24
+ .split(';')
25
+ .map((part) => part.trim())
26
+ .filter(Boolean)) {
27
+ await client.unsafe(`${statement};`);
28
+ }
29
+ }
30
+ async function dropHarnessDatabase(admin, name) {
31
+ const safe = assertSafeIdentifier(name, 'database', DURABLE_TEST_DB_PATTERN);
32
+ const quoted = quoteIdentifier(safe);
33
+ const client = adminClient(admin);
34
+ try {
35
+ await client.unsafe(`SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = '${safe}' AND pid <> pg_backend_pid()`);
36
+ await client.unsafe(`DROP DATABASE IF EXISTS ${quoted}`);
37
+ }
38
+ finally {
39
+ await client.end({ timeout: 5 }).catch(() => undefined);
40
+ }
41
+ }
42
+ export async function createDurableTestHarness(options) {
43
+ const admin = resolveTestPostgresAdmin();
44
+ const suffix = randomBytes(4).toString('hex');
45
+ const spineName = `plumbus_durable_test_spine_${suffix}`;
46
+ const tenantName = `plumbus_durable_test_tenant_${suffix}`;
47
+ const coreSchema = options?.coreSchema ?? FRAMEWORK_SCHEMA;
48
+ const bootstrap = adminClient(admin);
49
+ try {
50
+ await bootstrap.unsafe(`CREATE DATABASE ${quoteIdentifier(spineName)}`);
51
+ await bootstrap.unsafe(`CREATE DATABASE ${quoteIdentifier(tenantName)}`);
52
+ }
53
+ finally {
54
+ await bootstrap.end({ timeout: 5 }).catch(() => undefined);
55
+ }
56
+ const spineSql = adminClient(admin, spineName);
57
+ const tenantSql = adminClient(admin, tenantName);
58
+ try {
59
+ await applyStatements(spineSql, spineDispatchDdl());
60
+ await applyStatements(tenantSql, tenantDurableDdl(coreSchema));
61
+ if (options?.includeFlowExecutions !== false) {
62
+ await applyStatements(tenantSql, flowExecutionsDdl());
63
+ }
64
+ if (options?.includeEventOutbox) {
65
+ await applyStatements(tenantSql, eventOutboxDdl());
66
+ }
67
+ if (options?.includeEventDelivery) {
68
+ await applyStatements(tenantSql, eventDeliveryDdl());
69
+ }
70
+ }
71
+ catch (error) {
72
+ await spineSql.end({ timeout: 5 }).catch(() => undefined);
73
+ await tenantSql.end({ timeout: 5 }).catch(() => undefined);
74
+ await dropHarnessDatabase(admin, spineName);
75
+ await dropHarnessDatabase(admin, tenantName);
76
+ throw error;
77
+ }
78
+ const spineDb = drizzle(spineSql);
79
+ const tenantDb = drizzle(tenantSql);
80
+ return {
81
+ admin,
82
+ spineName,
83
+ tenantName,
84
+ spineDb,
85
+ tenantDb,
86
+ coreSchema,
87
+ async close() {
88
+ await spineSql.end({ timeout: 5 }).catch(() => undefined);
89
+ await tenantSql.end({ timeout: 5 }).catch(() => undefined);
90
+ await dropHarnessDatabase(admin, spineName);
91
+ await dropHarnessDatabase(admin, tenantName);
92
+ },
93
+ };
94
+ }
95
+ export async function createDurableTestDatabase(options) {
96
+ const admin = options.admin ?? resolveTestPostgresAdmin();
97
+ const suffix = randomBytes(4).toString('hex');
98
+ const name = `plumbus_durable_test_${options.kind}_${suffix}`;
99
+ const safe = assertSafeIdentifier(name, 'database', DURABLE_TEST_DB_PATTERN);
100
+ const bootstrap = adminClient(admin);
101
+ try {
102
+ await bootstrap.unsafe(`CREATE DATABASE ${quoteIdentifier(safe)}`);
103
+ }
104
+ finally {
105
+ await bootstrap.end({ timeout: 5 }).catch(() => undefined);
106
+ }
107
+ const client = adminClient(admin, safe);
108
+ try {
109
+ if (options.ddl.trim()) {
110
+ await applyStatements(client, options.ddl);
111
+ }
112
+ }
113
+ catch (error) {
114
+ await client.end({ timeout: 5 }).catch(() => undefined);
115
+ await dropHarnessDatabase(admin, safe);
116
+ throw error;
117
+ }
118
+ return {
119
+ name: safe,
120
+ db: drizzle(client),
121
+ async close() {
122
+ await client.end({ timeout: 5 }).catch(() => undefined);
123
+ await dropHarnessDatabase(admin, safe);
124
+ },
125
+ };
126
+ }
127
+ export async function extraHarnessConnection(admin, database) {
128
+ const client = adminClient(admin, database);
129
+ return {
130
+ db: drizzle(client),
131
+ async close() {
132
+ await client.end({ timeout: 5 }).catch(() => undefined);
133
+ },
134
+ };
135
+ }
136
+ //# sourceMappingURL=harness.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"harness.js","sourceRoot":"","sources":["../../src/durable/harness.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ export { createMemorySpineStore, createMemoryTenantStore, spineDispatchKey, } from './memory-store.js';
2
+ export type { MemorySpineStore, MemoryTenantStore, TenantTx } from './memory-store.js';
3
+ export { assertOpaqueDispatch, createOpaqueDispatchRecord, spineRecordFromUnknown, } from './opaque-dispatch.js';
4
+ export { assertCasCommitted, persistAcceptance, persistRetrySchedule, persistStepCompletion, } from './persist-before-ack.js';
5
+ export type { AcceptInput, PersistAcceptanceResult, PersistStepResult, RetryScheduleInput, StepCompletionInput, } from './persist-before-ack.js';
6
+ export { publishOutboxRow, runSpineSweep, runTenantSweep, } from './reconciliation.js';
7
+ export { eventDeliveryDdl, eventOutboxDdl, flowExecutionsDdl, DURABLE_TEST_DB_PATTERN, qualifyTable, spineDispatchDdl, tenantApprovalDdl, tenantDurableDdl, tenantEpochTableDdl, } from './apply-ddl.js';
8
+ export { createDurableTestDatabase, extraHarnessConnection, createDurableTestHarness, } from './harness.js';
9
+ export type { DurableTestHarness } from './harness.js';
10
+ export { FRAMEWORK_DURABLE_TENANT_MIGRATIONS, FRAMEWORK_SPINE_MIGRATIONS, } from './migrations-path.js';
11
+ export { resolveTestPostgresAdmin } from './pg-env.js';
12
+ export type { TestPostgresAdmin } from './pg-env.js';
13
+ export { bumpTenantEpochOnDb, casAdvanceExecution, insertDispatchOutbox, listSideEffects, listUnpublishedOutbox, loadExecutionState, markOutboxAcked, markOutboxPublished, persistAcceptanceOnDb, publishOutboxToSpine, } from './postgres-persist.js';
14
+ export { ackSpineDispatch, claimSpineDispatch, spineRowFromSql, upsertSpineDispatch, } from './spine-claim.js';
15
+ export { createSpineDispatchTable, createTenantDurableTables, SPINE_DISPATCH_TABLE_NAME, TENANT_DURABLE_TABLE_NAMES, } from './schema.js';
16
+ export { DEFAULT_PRIORITY_CLASS_ID, DEFAULT_WORK_CLASS_ID, DurableExecutionStatus, DurableStepStatus, EpochMismatchError, OPAQUE_DISPATCH_ALLOWED_KEYS, OPAQUE_DISPATCH_FORBIDDEN_KEYS, OPAQUE_DISPATCH_REQUIRED_KEYS, RevisionConflictError, SpineDeliveryState, } from './types.js';
17
+ export type { CasResult, DispatchOutboxRow, OpaqueDispatchRecord, StepExecutionRecord, TenantExecutionState, TerminalStateRecord, WaitStateRecord, } from './types.js';
18
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/durable/index.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AACvF,OAAO,EACL,oBAAoB,EACpB,0BAA0B,EAC1B,sBAAsB,GACvB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,yBAAyB,CAAC;AACjC,YAAY,EACV,WAAW,EACX,uBAAuB,EACvB,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,cAAc,GACf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,iBAAiB,EACjB,uBAAuB,EACvB,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,yBAAyB,EACzB,sBAAsB,EACtB,wBAAwB,GACzB,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EACL,mCAAmC,EACnC,0BAA0B,GAC3B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AACvD,YAAY,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,EACpB,eAAe,EACf,qBAAqB,EACrB,kBAAkB,EAClB,eAAe,EACf,mBAAmB,EACnB,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,EACf,mBAAmB,GACpB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,wBAAwB,EACxB,yBAAyB,EACzB,yBAAyB,EACzB,0BAA0B,GAC3B,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,yBAAyB,EACzB,qBAAqB,EACrB,sBAAsB,EACtB,iBAAiB,EACjB,kBAAkB,EAClB,4BAA4B,EAC5B,8BAA8B,EAC9B,6BAA6B,EAC7B,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,SAAS,EACT,iBAAiB,EACjB,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EACnB,eAAe,GAChB,MAAM,YAAY,CAAC"}
@@ -0,0 +1,16 @@
1
+ // Durable dispatch core — Protocol A tenant state, persist-before-ack, and
2
+ // opaque spine records. Not exported from the public @plumbus/core barrel yet;
3
+ // the existing flows engine still owns live execution. Stage 3 wires this in.
4
+ export { createMemorySpineStore, createMemoryTenantStore, spineDispatchKey, } from './memory-store.js';
5
+ export { assertOpaqueDispatch, createOpaqueDispatchRecord, spineRecordFromUnknown, } from './opaque-dispatch.js';
6
+ export { assertCasCommitted, persistAcceptance, persistRetrySchedule, persistStepCompletion, } from './persist-before-ack.js';
7
+ export { publishOutboxRow, runSpineSweep, runTenantSweep, } from './reconciliation.js';
8
+ export { eventDeliveryDdl, eventOutboxDdl, flowExecutionsDdl, DURABLE_TEST_DB_PATTERN, qualifyTable, spineDispatchDdl, tenantApprovalDdl, tenantDurableDdl, tenantEpochTableDdl, } from './apply-ddl.js';
9
+ export { createDurableTestDatabase, extraHarnessConnection, createDurableTestHarness, } from './harness.js';
10
+ export { FRAMEWORK_DURABLE_TENANT_MIGRATIONS, FRAMEWORK_SPINE_MIGRATIONS, } from './migrations-path.js';
11
+ export { resolveTestPostgresAdmin } from './pg-env.js';
12
+ export { bumpTenantEpochOnDb, casAdvanceExecution, insertDispatchOutbox, listSideEffects, listUnpublishedOutbox, loadExecutionState, markOutboxAcked, markOutboxPublished, persistAcceptanceOnDb, publishOutboxToSpine, } from './postgres-persist.js';
13
+ export { ackSpineDispatch, claimSpineDispatch, spineRowFromSql, upsertSpineDispatch, } from './spine-claim.js';
14
+ export { createSpineDispatchTable, createTenantDurableTables, SPINE_DISPATCH_TABLE_NAME, TENANT_DURABLE_TABLE_NAMES, } from './schema.js';
15
+ export { DEFAULT_PRIORITY_CLASS_ID, DEFAULT_WORK_CLASS_ID, DurableExecutionStatus, DurableStepStatus, EpochMismatchError, OPAQUE_DISPATCH_ALLOWED_KEYS, OPAQUE_DISPATCH_FORBIDDEN_KEYS, OPAQUE_DISPATCH_REQUIRED_KEYS, RevisionConflictError, SpineDeliveryState, } from './types.js';
16
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/durable/index.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,+EAA+E;AAC/E,8EAA8E;AAE9E,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,oBAAoB,EACpB,0BAA0B,EAC1B,sBAAsB,GACvB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,yBAAyB,CAAC;AAQjC,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,cAAc,GACf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,iBAAiB,EACjB,uBAAuB,EACvB,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,yBAAyB,EACzB,sBAAsB,EACtB,wBAAwB,GACzB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,mCAAmC,EACnC,0BAA0B,GAC3B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAEvD,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,EACpB,eAAe,EACf,qBAAqB,EACrB,kBAAkB,EAClB,eAAe,EACf,mBAAmB,EACnB,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,EACf,mBAAmB,GACpB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,wBAAwB,EACxB,yBAAyB,EACzB,yBAAyB,EACzB,0BAA0B,GAC3B,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,yBAAyB,EACzB,qBAAqB,EACrB,sBAAsB,EACtB,iBAAiB,EACjB,kBAAkB,EAClB,4BAA4B,EAC5B,8BAA8B,EAC9B,6BAA6B,EAC7B,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,YAAY,CAAC"}
@@ -0,0 +1,48 @@
1
+ import type { CasResult, DispatchOutboxRow, OpaqueDispatchRecord, StepExecutionRecord, TenantExecutionState, TerminalStateRecord, WaitStateRecord } from './types.js';
2
+ export interface TenantTx {
3
+ readonly epoch: number;
4
+ getExecution(executionId: string): TenantExecutionState | undefined;
5
+ insertExecution(row: TenantExecutionState): void;
6
+ casExecution(executionId: string, expectedRevision: number, next: TenantExecutionState): CasResult;
7
+ putStep(row: StepExecutionRecord): void;
8
+ listSteps(executionId: string): StepExecutionRecord[];
9
+ putWait(row: WaitStateRecord): void;
10
+ putTerminal(row: TerminalStateRecord): void;
11
+ getTerminal(executionId: string): TerminalStateRecord | undefined;
12
+ insertOutbox(row: DispatchOutboxRow): void;
13
+ updateOutbox(outboxId: string, patch: Partial<DispatchOutboxRow>): void;
14
+ getOutbox(outboxId: string): DispatchOutboxRow | undefined;
15
+ listOutbox(): DispatchOutboxRow[];
16
+ findOutbox(executionId: string, expectedRevision: number): DispatchOutboxRow | undefined;
17
+ hasIdempotency(key: string): boolean;
18
+ putIdempotency(key: string): void;
19
+ applySideEffect(key: string, label: string): boolean;
20
+ listSideEffects(): readonly string[];
21
+ }
22
+ export interface MemoryTenantStore {
23
+ epoch(): number;
24
+ /** Restore / generation bump. Live rows are stamped with the new epoch. */
25
+ bumpEpoch(): number;
26
+ getExecution(executionId: string): TenantExecutionState | undefined;
27
+ listExecutions(): TenantExecutionState[];
28
+ listOutbox(): DispatchOutboxRow[];
29
+ listSideEffects(): readonly string[];
30
+ listSteps(executionId: string): StepExecutionRecord[];
31
+ getTerminal(executionId: string): TerminalStateRecord | undefined;
32
+ dropExecution(executionId: string): void;
33
+ runInTransaction<T>(fn: (tx: TenantTx) => T): T;
34
+ }
35
+ export declare function createMemoryTenantStore(opts?: {
36
+ epoch?: number;
37
+ }): MemoryTenantStore;
38
+ export declare function spineDispatchKey(record: Pick<OpaqueDispatchRecord, 'tenantRouteId' | 'executionId' | 'expectedRevision'>): string;
39
+ export interface MemorySpineStore {
40
+ upsert(record: OpaqueDispatchRecord): OpaqueDispatchRecord;
41
+ claim(workerId: string, nowIso: string, leaseMs: number): OpaqueDispatchRecord | undefined;
42
+ ack(dispatchId: string, nowIso: string): void;
43
+ get(dispatchId: string): OpaqueDispatchRecord | undefined;
44
+ getByKey(key: string): OpaqueDispatchRecord | undefined;
45
+ list(): OpaqueDispatchRecord[];
46
+ }
47
+ export declare function createMemorySpineStore(): MemorySpineStore;
48
+ //# sourceMappingURL=memory-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-store.d.ts","sourceRoot":"","sources":["../../src/durable/memory-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,260 @@
1
+ // In-memory tenant and spine stores for Protocol A.
2
+ // Tenant writes go through runInTransaction so persist-before-ack can roll back.
3
+ import { SpineDeliveryState } from './types.js';
4
+ function cloneTenantData(data) {
5
+ return {
6
+ epoch: data.epoch,
7
+ executions: new Map(data.executions),
8
+ steps: new Map(data.steps),
9
+ waits: new Map(data.waits),
10
+ terminals: new Map(data.terminals),
11
+ outbox: new Map(data.outbox),
12
+ idempotency: new Set(data.idempotency),
13
+ sideEffectKeys: new Set(data.sideEffectKeys),
14
+ sideEffects: [...data.sideEffects],
15
+ };
16
+ }
17
+ function bindTx(data) {
18
+ return {
19
+ get epoch() {
20
+ return data.epoch;
21
+ },
22
+ getExecution(executionId) {
23
+ const row = data.executions.get(executionId);
24
+ return row ? { ...row } : undefined;
25
+ },
26
+ insertExecution(row) {
27
+ if (data.executions.has(row.executionId)) {
28
+ throw new Error(`execution already exists: ${row.executionId}`);
29
+ }
30
+ data.executions.set(row.executionId, { ...row });
31
+ },
32
+ casExecution(executionId, expectedRevision, next) {
33
+ const current = data.executions.get(executionId);
34
+ if (!current)
35
+ return 'missing';
36
+ if (current.revision !== expectedRevision)
37
+ return 'stale';
38
+ if (next.revision !== expectedRevision + 1) {
39
+ throw new Error(`CAS next revision must be expected+1 (expected ${expectedRevision + 1}, got ${next.revision})`);
40
+ }
41
+ data.executions.set(executionId, { ...next });
42
+ return 'ok';
43
+ },
44
+ putStep(row) {
45
+ data.steps.set(row.stepExecutionId, { ...row });
46
+ },
47
+ listSteps(executionId) {
48
+ return [...data.steps.values()].filter((step) => step.executionId === executionId);
49
+ },
50
+ putWait(row) {
51
+ data.waits.set(row.waitStateId, { ...row });
52
+ },
53
+ putTerminal(row) {
54
+ data.terminals.set(row.executionId, { ...row });
55
+ },
56
+ getTerminal(executionId) {
57
+ const row = data.terminals.get(executionId);
58
+ return row ? { ...row } : undefined;
59
+ },
60
+ insertOutbox(row) {
61
+ data.outbox.set(row.outboxId, { ...row });
62
+ },
63
+ updateOutbox(outboxId, patch) {
64
+ const current = data.outbox.get(outboxId);
65
+ if (!current)
66
+ throw new Error(`unknown outbox row: ${outboxId}`);
67
+ data.outbox.set(outboxId, { ...current, ...patch });
68
+ },
69
+ getOutbox(outboxId) {
70
+ const row = data.outbox.get(outboxId);
71
+ return row ? { ...row } : undefined;
72
+ },
73
+ listOutbox() {
74
+ return [...data.outbox.values()].map((row) => ({ ...row }));
75
+ },
76
+ findOutbox(executionId, expectedRevision) {
77
+ for (const row of data.outbox.values()) {
78
+ if (row.executionId === executionId && row.expectedRevision === expectedRevision) {
79
+ return { ...row };
80
+ }
81
+ }
82
+ return undefined;
83
+ },
84
+ hasIdempotency(key) {
85
+ return data.idempotency.has(key);
86
+ },
87
+ putIdempotency(key) {
88
+ data.idempotency.add(key);
89
+ },
90
+ applySideEffect(key, label) {
91
+ if (data.sideEffectKeys.has(key))
92
+ return false;
93
+ data.sideEffectKeys.add(key);
94
+ data.sideEffects.push(label);
95
+ return true;
96
+ },
97
+ listSideEffects() {
98
+ return [...data.sideEffects];
99
+ },
100
+ };
101
+ }
102
+ export function createMemoryTenantStore(opts) {
103
+ let data = {
104
+ epoch: opts?.epoch ?? 1,
105
+ executions: new Map(),
106
+ steps: new Map(),
107
+ waits: new Map(),
108
+ terminals: new Map(),
109
+ outbox: new Map(),
110
+ idempotency: new Set(),
111
+ sideEffectKeys: new Set(),
112
+ sideEffects: [],
113
+ };
114
+ return {
115
+ epoch() {
116
+ return data.epoch;
117
+ },
118
+ bumpEpoch() {
119
+ const nextEpoch = data.epoch + 1;
120
+ const next = cloneTenantData(data);
121
+ next.epoch = nextEpoch;
122
+ for (const [id, row] of next.executions) {
123
+ next.executions.set(id, { ...row, tenantEpoch: nextEpoch });
124
+ }
125
+ for (const [id, row] of next.outbox) {
126
+ if (!row.spineAckedAt) {
127
+ next.outbox.set(id, {
128
+ ...row,
129
+ tenantEpoch: nextEpoch,
130
+ publishedAt: undefined,
131
+ spineRowId: undefined,
132
+ });
133
+ }
134
+ }
135
+ data = next;
136
+ return nextEpoch;
137
+ },
138
+ getExecution(executionId) {
139
+ const row = data.executions.get(executionId);
140
+ return row ? { ...row } : undefined;
141
+ },
142
+ listExecutions() {
143
+ return [...data.executions.values()].map((row) => ({ ...row }));
144
+ },
145
+ listOutbox() {
146
+ return [...data.outbox.values()].map((row) => ({ ...row }));
147
+ },
148
+ listSideEffects() {
149
+ return [...data.sideEffects];
150
+ },
151
+ listSteps(executionId) {
152
+ return [...data.steps.values()]
153
+ .filter((step) => step.executionId === executionId)
154
+ .map((step) => ({ ...step }));
155
+ },
156
+ getTerminal(executionId) {
157
+ const row = data.terminals.get(executionId);
158
+ return row ? { ...row } : undefined;
159
+ },
160
+ dropExecution(executionId) {
161
+ data.executions.delete(executionId);
162
+ data.terminals.delete(executionId);
163
+ },
164
+ runInTransaction(fn) {
165
+ const draft = cloneTenantData(data);
166
+ const tx = bindTx(draft);
167
+ const result = fn(tx);
168
+ data = draft;
169
+ return result;
170
+ },
171
+ };
172
+ }
173
+ export function spineDispatchKey(record) {
174
+ return `${record.tenantRouteId}:${record.executionId}:${record.expectedRevision}`;
175
+ }
176
+ export function createMemorySpineStore() {
177
+ const byId = new Map();
178
+ const byKey = new Map();
179
+ function put(record) {
180
+ byId.set(record.dispatchId, { ...record });
181
+ byKey.set(spineDispatchKey(record), record.dispatchId);
182
+ }
183
+ return {
184
+ upsert(record) {
185
+ const key = spineDispatchKey(record);
186
+ const existingId = byKey.get(key);
187
+ if (existingId) {
188
+ const existing = byId.get(existingId);
189
+ if (!existing)
190
+ throw new Error(`spine index broken for ${key}`);
191
+ const merged = {
192
+ ...existing,
193
+ ...record,
194
+ dispatchId: existing.dispatchId,
195
+ createdAt: existing.createdAt,
196
+ };
197
+ put(merged);
198
+ return { ...merged };
199
+ }
200
+ put(record);
201
+ return { ...record };
202
+ },
203
+ claim(workerId, nowIso, leaseMs) {
204
+ const now = Date.parse(nowIso);
205
+ const candidates = [...byId.values()]
206
+ .filter((row) => {
207
+ if (row.deliveryState === SpineDeliveryState.Acknowledged)
208
+ return false;
209
+ if (row.deliveryState === SpineDeliveryState.DeadLettered)
210
+ return false;
211
+ if (Date.parse(row.notBefore) > now)
212
+ return false;
213
+ if (row.deliveryState === SpineDeliveryState.Leased &&
214
+ row.leaseExpiresAt &&
215
+ Date.parse(row.leaseExpiresAt) > now) {
216
+ return false;
217
+ }
218
+ return true;
219
+ })
220
+ .sort((a, b) => a.createdAt.localeCompare(b.createdAt) || a.dispatchId.localeCompare(b.dispatchId));
221
+ const next = candidates[0];
222
+ if (!next)
223
+ return undefined;
224
+ const leased = {
225
+ ...next,
226
+ deliveryState: SpineDeliveryState.Leased,
227
+ leaseRefId: workerId,
228
+ leaseExpiresAt: new Date(now + leaseMs).toISOString(),
229
+ attempt: next.attempt + 1,
230
+ updatedAt: nowIso,
231
+ };
232
+ put(leased);
233
+ return { ...leased };
234
+ },
235
+ ack(dispatchId, nowIso) {
236
+ const current = byId.get(dispatchId);
237
+ if (!current)
238
+ return;
239
+ put({
240
+ ...current,
241
+ deliveryState: SpineDeliveryState.Acknowledged,
242
+ leaseRefId: undefined,
243
+ leaseExpiresAt: undefined,
244
+ updatedAt: nowIso,
245
+ });
246
+ },
247
+ get(dispatchId) {
248
+ const row = byId.get(dispatchId);
249
+ return row ? { ...row } : undefined;
250
+ },
251
+ getByKey(key) {
252
+ const id = byKey.get(key);
253
+ return id ? this.get(id) : undefined;
254
+ },
255
+ list() {
256
+ return [...byId.values()].map((row) => ({ ...row }));
257
+ },
258
+ };
259
+ }
260
+ //# sourceMappingURL=memory-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-store.js","sourceRoot":"","sources":["../../src/durable/memory-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /** Shipped tenant durable-core SQL (core_plumbus). Do not apply to application tenant databases. */
2
+ export declare const FRAMEWORK_DURABLE_TENANT_MIGRATIONS: string;
3
+ /** Shipped spine opaque_dispatch SQL. Separate database from tenant state. */
4
+ export declare const FRAMEWORK_SPINE_MIGRATIONS: string;
5
+ //# sourceMappingURL=migrations-path.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrations-path.d.ts","sourceRoot":"","sources":["../../src/durable/migrations-path.ts"],"names":[],"mappings":"AAKA,oGAAoG;AACpG,eAAO,MAAM,mCAAmC,QAI/C,CAAC;AAEF,8EAA8E;AAC9E,eAAO,MAAM,0BAA0B,QAA2C,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { dirname, join } from 'node:path';
2
+ import { fileURLToPath } from 'node:url';
3
+ const packageRoot = join(dirname(fileURLToPath(import.meta.url)), '..', '..');
4
+ /** Shipped tenant durable-core SQL (core_plumbus). Do not apply to application tenant databases. */
5
+ export const FRAMEWORK_DURABLE_TENANT_MIGRATIONS = join(packageRoot, 'migrations', 'durable-tenant');
6
+ /** Shipped spine opaque_dispatch SQL. Separate database from tenant state. */
7
+ export const FRAMEWORK_SPINE_MIGRATIONS = join(packageRoot, 'migrations', 'spine');
8
+ //# sourceMappingURL=migrations-path.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrations-path.js","sourceRoot":"","sources":["../../src/durable/migrations-path.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAE9E,oGAAoG;AACpG,MAAM,CAAC,MAAM,mCAAmC,GAAG,IAAI,CACrD,WAAW,EACX,YAAY,EACZ,gBAAgB,CACjB,CAAC;AAEF,8EAA8E;AAC9E,MAAM,CAAC,MAAM,0BAA0B,GAAG,IAAI,CAAC,WAAW,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { type OpaqueDispatchRecord } from './types.js';
2
+ export declare function spineRecordFromUnknown(value: unknown): OpaqueDispatchRecord;
3
+ export declare function assertOpaqueDispatch(value: unknown): asserts value is OpaqueDispatchRecord;
4
+ export declare function createOpaqueDispatchRecord(fields: Omit<OpaqueDispatchRecord, 'contractVersion'> & {
5
+ contractVersion?: '0.1.0';
6
+ }): OpaqueDispatchRecord;
7
+ //# sourceMappingURL=opaque-dispatch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opaque-dispatch.d.ts","sourceRoot":"","sources":["../../src/durable/opaque-dispatch.ts"],"names":[],"mappings":"AAKA,OAAO,EAKL,KAAK,oBAAoB,EAE1B,MAAM,YAAY,CAAC;AAIpB,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,oBAAoB,CAwE3E;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,KAAK,IAAI,oBAAoB,CAE1F;AAED,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,IAAI,CAAC,oBAAoB,EAAE,iBAAiB,CAAC,GAAG;IAAE,eAAe,CAAC,EAAE,OAAO,CAAA;CAAE,GACpF,oBAAoB,CAMtB"}
@@ -0,0 +1,67 @@
1
+ // Opaque spine dispatch records. Privacy by construction: only the allowlisted
2
+ // scheduling fields may appear. extra keys (payload, input, auth, …) fail closed.
3
+ import { PlumbusError } from '../errors/plumbus-error.js';
4
+ import { ErrorCode } from '../types/enums.js';
5
+ import { OPAQUE_DISPATCH_ALLOWED_KEYS, OPAQUE_DISPATCH_FORBIDDEN_KEYS, OPAQUE_DISPATCH_REQUIRED_KEYS, SpineDeliveryState, } from './types.js';
6
+ const DELIVERY_STATES = new Set(Object.values(SpineDeliveryState));
7
+ export function spineRecordFromUnknown(value) {
8
+ if (value === null || typeof value !== 'object' || Array.isArray(value)) {
9
+ throw new PlumbusError(ErrorCode.Validation, 'opaque dispatch must be an object');
10
+ }
11
+ const record = value;
12
+ for (const key of Object.keys(record)) {
13
+ if (OPAQUE_DISPATCH_FORBIDDEN_KEYS.includes(key)) {
14
+ throw new PlumbusError(ErrorCode.Forbidden, `opaque dispatch forbids private field "${key}"`, {
15
+ key,
16
+ });
17
+ }
18
+ if (!OPAQUE_DISPATCH_ALLOWED_KEYS.has(key)) {
19
+ throw new PlumbusError(ErrorCode.Validation, `opaque dispatch rejects additional property "${key}"`, { key });
20
+ }
21
+ }
22
+ for (const key of OPAQUE_DISPATCH_REQUIRED_KEYS) {
23
+ if (record[key] === undefined) {
24
+ throw new PlumbusError(ErrorCode.Validation, `opaque dispatch missing required field "${key}"`, {
25
+ key,
26
+ });
27
+ }
28
+ }
29
+ if (record.contractVersion !== '0.1.0') {
30
+ throw new PlumbusError(ErrorCode.Validation, 'opaque dispatch contractVersion must be 0.1.0');
31
+ }
32
+ if (typeof record.expectedRevision !== 'number' || record.expectedRevision < 1) {
33
+ throw new PlumbusError(ErrorCode.Validation, 'opaque dispatch expectedRevision must be >= 1');
34
+ }
35
+ if (typeof record.tenantEpoch !== 'number' || record.tenantEpoch < 1) {
36
+ throw new PlumbusError(ErrorCode.Validation, 'opaque dispatch tenantEpoch must be >= 1');
37
+ }
38
+ if (typeof record.attempt !== 'number' || record.attempt < 0) {
39
+ throw new PlumbusError(ErrorCode.Validation, 'opaque dispatch attempt must be >= 0');
40
+ }
41
+ if (!DELIVERY_STATES.has(String(record.deliveryState))) {
42
+ throw new PlumbusError(ErrorCode.Validation, 'opaque dispatch deliveryState is invalid');
43
+ }
44
+ const deliveryState = record.deliveryState;
45
+ if (deliveryState === SpineDeliveryState.Leased) {
46
+ if (typeof record.leaseRefId !== 'string' || typeof record.leaseExpiresAt !== 'string') {
47
+ throw new PlumbusError(ErrorCode.Validation, 'leased opaque dispatch requires leaseRefId and leaseExpiresAt');
48
+ }
49
+ }
50
+ if (deliveryState === SpineDeliveryState.DeadLettered) {
51
+ if (typeof record.privacySafeFailureCategoryId !== 'string') {
52
+ throw new PlumbusError(ErrorCode.Validation, 'dead-lettered opaque dispatch requires privacySafeFailureCategoryId');
53
+ }
54
+ }
55
+ return record;
56
+ }
57
+ export function assertOpaqueDispatch(value) {
58
+ spineRecordFromUnknown(value);
59
+ }
60
+ export function createOpaqueDispatchRecord(fields) {
61
+ const record = {
62
+ contractVersion: '0.1.0',
63
+ ...fields,
64
+ };
65
+ return spineRecordFromUnknown(record);
66
+ }
67
+ //# sourceMappingURL=opaque-dispatch.js.map