@alneas/eaos-server 0.0.0-stage → 0.2.0

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 (360) hide show
  1. package/CHANGELOG.md +41 -0
  2. package/LICENSE +21 -0
  3. package/README.ja.md +49 -0
  4. package/README.md +46 -2
  5. package/dist/agentic/agent-jobs.d.ts +333 -0
  6. package/dist/agentic/agent-jobs.js +15 -0
  7. package/dist/agentic/agent-jobs.js.map +1 -0
  8. package/dist/agentic/agent-node.d.ts +40 -0
  9. package/dist/agentic/agent-node.js +7 -0
  10. package/dist/agentic/agent-node.js.map +1 -0
  11. package/dist/agentic/agent-runner.d.ts +33 -0
  12. package/dist/agentic/agent-runner.js +7 -0
  13. package/dist/agentic/agent-runner.js.map +1 -0
  14. package/dist/agentic/ai-broker.d.ts +169 -0
  15. package/dist/agentic/ai-broker.js +8 -0
  16. package/dist/agentic/ai-broker.js.map +1 -0
  17. package/dist/agentic/atomic-checkpointer.d.ts +137 -0
  18. package/dist/agentic/atomic-checkpointer.js +9 -0
  19. package/dist/agentic/atomic-checkpointer.js.map +1 -0
  20. package/dist/agentic/autonomous-worker.d.ts +122 -0
  21. package/dist/agentic/autonomous-worker.js +10 -0
  22. package/dist/agentic/autonomous-worker.js.map +1 -0
  23. package/dist/agentic/event-bridge.d.ts +350 -0
  24. package/dist/agentic/event-bridge.js +9 -0
  25. package/dist/agentic/event-bridge.js.map +1 -0
  26. package/dist/agentic/executor.d.ts +91 -0
  27. package/dist/agentic/executor.js +12 -0
  28. package/dist/agentic/executor.js.map +1 -0
  29. package/dist/agentic/graph-projection.d.ts +119 -0
  30. package/dist/agentic/graph-projection.js +7 -0
  31. package/dist/agentic/graph-projection.js.map +1 -0
  32. package/dist/agentic/graph.d.ts +524 -0
  33. package/dist/agentic/graph.js +7 -0
  34. package/dist/agentic/graph.js.map +1 -0
  35. package/dist/agentic/index.d.ts +28 -0
  36. package/dist/agentic/index.js +87 -0
  37. package/dist/agentic/index.js.map +1 -0
  38. package/dist/agentic/local-runner.d.ts +106 -0
  39. package/dist/agentic/local-runner.js +7 -0
  40. package/dist/agentic/local-runner.js.map +1 -0
  41. package/dist/agentic/remote-executor.d.ts +67 -0
  42. package/dist/agentic/remote-executor.js +8 -0
  43. package/dist/agentic/remote-executor.js.map +1 -0
  44. package/dist/agentic/types.d.ts +157 -0
  45. package/dist/agentic/types.js +7 -0
  46. package/dist/agentic/types.js.map +1 -0
  47. package/dist/agentic/workflow-catalog.d.ts +152 -0
  48. package/dist/agentic/workflow-catalog.js +7 -0
  49. package/dist/agentic/workflow-catalog.js.map +1 -0
  50. package/dist/agentic/workflow-compiler.d.ts +44 -0
  51. package/dist/agentic/workflow-compiler.js +8 -0
  52. package/dist/agentic/workflow-compiler.js.map +1 -0
  53. package/dist/agentic/workflow-coordinator.d.ts +170 -0
  54. package/dist/agentic/workflow-coordinator.js +8 -0
  55. package/dist/agentic/workflow-coordinator.js.map +1 -0
  56. package/dist/agentic/workflow-manager.d.ts +91 -0
  57. package/dist/agentic/workflow-manager.js +7 -0
  58. package/dist/agentic/workflow-manager.js.map +1 -0
  59. package/dist/agentic/workflow-registry.d.ts +334 -0
  60. package/dist/agentic/workflow-registry.js +7 -0
  61. package/dist/agentic/workflow-registry.js.map +1 -0
  62. package/dist/artifacts-CteHmCMI.d.ts +614 -0
  63. package/dist/auth-hooks/api-key.d.ts +75 -0
  64. package/dist/auth-hooks/api-key.js +7 -0
  65. package/dist/auth-hooks/api-key.js.map +1 -0
  66. package/dist/auth-hooks/index.d.ts +80 -0
  67. package/dist/auth-hooks/index.js +28 -0
  68. package/dist/auth-hooks/index.js.map +1 -0
  69. package/dist/browser-auth/account-memberships.d.ts +213 -0
  70. package/dist/browser-auth/account-memberships.js +13 -0
  71. package/dist/browser-auth/account-memberships.js.map +1 -0
  72. package/dist/browser-auth/index.d.ts +8 -0
  73. package/dist/browser-auth/index.js +59 -0
  74. package/dist/browser-auth/index.js.map +1 -0
  75. package/dist/browser-auth/kratos-session.d.ts +37 -0
  76. package/dist/browser-auth/kratos-session.js +7 -0
  77. package/dist/browser-auth/kratos-session.js.map +1 -0
  78. package/dist/browser-auth/platform-session.d.ts +120 -0
  79. package/dist/browser-auth/platform-session.js +7 -0
  80. package/dist/browser-auth/platform-session.js.map +1 -0
  81. package/dist/browser-auth/public-memberships.d.ts +22 -0
  82. package/dist/browser-auth/public-memberships.js +7 -0
  83. package/dist/browser-auth/public-memberships.js.map +1 -0
  84. package/dist/cache/index.d.ts +181 -0
  85. package/dist/cache/index.js +197 -0
  86. package/dist/cache/index.js.map +1 -0
  87. package/dist/chunk-32746UQZ.js +131 -0
  88. package/dist/chunk-32746UQZ.js.map +1 -0
  89. package/dist/chunk-3NLSWP2Y.js +223 -0
  90. package/dist/chunk-3NLSWP2Y.js.map +1 -0
  91. package/dist/chunk-3P4XTTQH.js +346 -0
  92. package/dist/chunk-3P4XTTQH.js.map +1 -0
  93. package/dist/chunk-3VITSHN3.js +15 -0
  94. package/dist/chunk-3VITSHN3.js.map +1 -0
  95. package/dist/chunk-46UWPEW2.js +226 -0
  96. package/dist/chunk-46UWPEW2.js.map +1 -0
  97. package/dist/chunk-4BARRLJR.js +180 -0
  98. package/dist/chunk-4BARRLJR.js.map +1 -0
  99. package/dist/chunk-4VORUFKR.js +45 -0
  100. package/dist/chunk-4VORUFKR.js.map +1 -0
  101. package/dist/chunk-55D4ERWO.js +1 -0
  102. package/dist/chunk-55D4ERWO.js.map +1 -0
  103. package/dist/chunk-5TBBZIND.js +18 -0
  104. package/dist/chunk-5TBBZIND.js.map +1 -0
  105. package/dist/chunk-5WOZWPZA.js +211 -0
  106. package/dist/chunk-5WOZWPZA.js.map +1 -0
  107. package/dist/chunk-6CBVZ6CT.js +168 -0
  108. package/dist/chunk-6CBVZ6CT.js.map +1 -0
  109. package/dist/chunk-6XZXYNJR.js +74 -0
  110. package/dist/chunk-6XZXYNJR.js.map +1 -0
  111. package/dist/chunk-753HWDSC.js +222 -0
  112. package/dist/chunk-753HWDSC.js.map +1 -0
  113. package/dist/chunk-7AHSS7SO.js +81 -0
  114. package/dist/chunk-7AHSS7SO.js.map +1 -0
  115. package/dist/chunk-7FTJN4SA.js +1 -0
  116. package/dist/chunk-7FTJN4SA.js.map +1 -0
  117. package/dist/chunk-AVDMLTPF.js +24 -0
  118. package/dist/chunk-AVDMLTPF.js.map +1 -0
  119. package/dist/chunk-BKAHUEIT.js +95 -0
  120. package/dist/chunk-BKAHUEIT.js.map +1 -0
  121. package/dist/chunk-CJ7OFEF7.js +134 -0
  122. package/dist/chunk-CJ7OFEF7.js.map +1 -0
  123. package/dist/chunk-EJKWDZIU.js +111 -0
  124. package/dist/chunk-EJKWDZIU.js.map +1 -0
  125. package/dist/chunk-F2J6IQ6I.js +247 -0
  126. package/dist/chunk-F2J6IQ6I.js.map +1 -0
  127. package/dist/chunk-F3O7CELI.js +23 -0
  128. package/dist/chunk-F3O7CELI.js.map +1 -0
  129. package/dist/chunk-F4IITPGX.js +221 -0
  130. package/dist/chunk-F4IITPGX.js.map +1 -0
  131. package/dist/chunk-FD6VC2NA.js +66 -0
  132. package/dist/chunk-FD6VC2NA.js.map +1 -0
  133. package/dist/chunk-FRRRWAHO.js +14 -0
  134. package/dist/chunk-FRRRWAHO.js.map +1 -0
  135. package/dist/chunk-HCKAGLLB.js +17 -0
  136. package/dist/chunk-HCKAGLLB.js.map +1 -0
  137. package/dist/chunk-HVC7FG6B.js +191 -0
  138. package/dist/chunk-HVC7FG6B.js.map +1 -0
  139. package/dist/chunk-HXFVOR7Z.js +496 -0
  140. package/dist/chunk-HXFVOR7Z.js.map +1 -0
  141. package/dist/chunk-IJWYS2PF.js +122 -0
  142. package/dist/chunk-IJWYS2PF.js.map +1 -0
  143. package/dist/chunk-INCHXAFK.js +1395 -0
  144. package/dist/chunk-INCHXAFK.js.map +1 -0
  145. package/dist/chunk-JT6BRGQM.js +1 -0
  146. package/dist/chunk-JT6BRGQM.js.map +1 -0
  147. package/dist/chunk-L6PMAEMB.js +115 -0
  148. package/dist/chunk-L6PMAEMB.js.map +1 -0
  149. package/dist/chunk-LOUGW6MU.js +126 -0
  150. package/dist/chunk-LOUGW6MU.js.map +1 -0
  151. package/dist/chunk-LYPZPE53.js +129 -0
  152. package/dist/chunk-LYPZPE53.js.map +1 -0
  153. package/dist/chunk-NNCCN7JP.js +186 -0
  154. package/dist/chunk-NNCCN7JP.js.map +1 -0
  155. package/dist/chunk-PBC3MZUL.js +212 -0
  156. package/dist/chunk-PBC3MZUL.js.map +1 -0
  157. package/dist/chunk-R4ADP2DC.js +20 -0
  158. package/dist/chunk-R4ADP2DC.js.map +1 -0
  159. package/dist/chunk-RHN4Y6VS.js +44 -0
  160. package/dist/chunk-RHN4Y6VS.js.map +1 -0
  161. package/dist/chunk-SDJNYPYK.js +770 -0
  162. package/dist/chunk-SDJNYPYK.js.map +1 -0
  163. package/dist/chunk-UGNTCOVR.js +28 -0
  164. package/dist/chunk-UGNTCOVR.js.map +1 -0
  165. package/dist/chunk-VC2PCK2S.js +31 -0
  166. package/dist/chunk-VC2PCK2S.js.map +1 -0
  167. package/dist/chunk-VF5YDZJC.js +305 -0
  168. package/dist/chunk-VF5YDZJC.js.map +1 -0
  169. package/dist/chunk-VISRDVTK.js +675 -0
  170. package/dist/chunk-VISRDVTK.js.map +1 -0
  171. package/dist/chunk-W6O3LVBY.js +102 -0
  172. package/dist/chunk-W6O3LVBY.js.map +1 -0
  173. package/dist/chunk-WFEAKJLR.js +47 -0
  174. package/dist/chunk-WFEAKJLR.js.map +1 -0
  175. package/dist/chunk-XIEY2OF4.js +67 -0
  176. package/dist/chunk-XIEY2OF4.js.map +1 -0
  177. package/dist/chunk-XITLHDG3.js +37 -0
  178. package/dist/chunk-XITLHDG3.js.map +1 -0
  179. package/dist/chunk-XMWPYZWZ.js +61 -0
  180. package/dist/chunk-XMWPYZWZ.js.map +1 -0
  181. package/dist/chunk-XUP6CNOM.js +34 -0
  182. package/dist/chunk-XUP6CNOM.js.map +1 -0
  183. package/dist/chunk-YABTQZDJ.js +25 -0
  184. package/dist/chunk-YABTQZDJ.js.map +1 -0
  185. package/dist/chunk-YMHVRBUU.js +199 -0
  186. package/dist/chunk-YMHVRBUU.js.map +1 -0
  187. package/dist/chunk-YMJ7BRKU.js +510 -0
  188. package/dist/chunk-YMJ7BRKU.js.map +1 -0
  189. package/dist/chunk-ZC3XWU7B.js +28 -0
  190. package/dist/chunk-ZC3XWU7B.js.map +1 -0
  191. package/dist/chunk-ZHMTD5KV.js +90 -0
  192. package/dist/chunk-ZHMTD5KV.js.map +1 -0
  193. package/dist/chunk-ZWZDLOE7.js +160 -0
  194. package/dist/chunk-ZWZDLOE7.js.map +1 -0
  195. package/dist/db-package/db/local-first-sqlite-adapter.d.ts +432 -0
  196. package/dist/db-package/db/local-first-sqlite-adapter.js +7 -0
  197. package/dist/db-package/db/local-first-sqlite-adapter.js.map +1 -0
  198. package/dist/db-package/index.d.ts +7 -0
  199. package/dist/db-package/index.js +16 -0
  200. package/dist/db-package/index.js.map +1 -0
  201. package/dist/db-package/migration/aggregator.d.ts +86 -0
  202. package/dist/db-package/migration/aggregator.js +7 -0
  203. package/dist/db-package/migration/aggregator.js.map +1 -0
  204. package/dist/db-package/migration/index.d.ts +3 -0
  205. package/dist/db-package/migration/index.js +8 -0
  206. package/dist/db-package/migration/index.js.map +1 -0
  207. package/dist/engine.d.ts +205 -0
  208. package/dist/engine.js +20 -0
  209. package/dist/engine.js.map +1 -0
  210. package/dist/entitlements/index.d.ts +313 -0
  211. package/dist/entitlements/index.js +23 -0
  212. package/dist/entitlements/index.js.map +1 -0
  213. package/dist/execution/chat.d.ts +7 -0
  214. package/dist/execution/chat.js +7 -0
  215. package/dist/execution/chat.js.map +1 -0
  216. package/dist/execution/index.d.ts +342 -0
  217. package/dist/execution/index.js +66 -0
  218. package/dist/execution/index.js.map +1 -0
  219. package/dist/execution/tool-agent.d.ts +7 -0
  220. package/dist/execution/tool-agent.js +8 -0
  221. package/dist/execution/tool-agent.js.map +1 -0
  222. package/dist/extensions/index.d.ts +172 -0
  223. package/dist/extensions/index.js +95 -0
  224. package/dist/extensions/index.js.map +1 -0
  225. package/dist/health/index.d.ts +35 -0
  226. package/dist/health/index.js +7 -0
  227. package/dist/health/index.js.map +1 -0
  228. package/dist/index.d.ts +43 -0
  229. package/dist/index.js +161 -0
  230. package/dist/index.js.map +1 -0
  231. package/dist/lifecycle/index.d.ts +133 -0
  232. package/dist/lifecycle/index.js +13 -0
  233. package/dist/lifecycle/index.js.map +1 -0
  234. package/dist/lifecycle-engine/backend-migration.d.ts +2 -0
  235. package/dist/lifecycle-engine/backend-migration.js +11 -0
  236. package/dist/lifecycle-engine/backend-migration.js.map +1 -0
  237. package/dist/lifecycle-engine/baseline.d.ts +2 -0
  238. package/dist/lifecycle-engine/baseline.js +9 -0
  239. package/dist/lifecycle-engine/baseline.js.map +1 -0
  240. package/dist/lifecycle-engine/index.d.ts +1497 -0
  241. package/dist/lifecycle-engine/index.js +41 -0
  242. package/dist/lifecycle-engine/index.js.map +1 -0
  243. package/dist/lifecycle-engine/platform/artifacts.d.ts +4 -0
  244. package/dist/lifecycle-engine/platform/artifacts.js +7 -0
  245. package/dist/lifecycle-engine/platform/artifacts.js.map +1 -0
  246. package/dist/lifecycle-engine/platform/control-plane.d.ts +12 -0
  247. package/dist/lifecycle-engine/platform/control-plane.js +2 -0
  248. package/dist/lifecycle-engine/platform/control-plane.js.map +1 -0
  249. package/dist/lifecycle-engine/platform/database-router.d.ts +118 -0
  250. package/dist/lifecycle-engine/platform/database-router.js +7 -0
  251. package/dist/lifecycle-engine/platform/database-router.js.map +1 -0
  252. package/dist/lifecycle-engine/platform/deployment-placements.d.ts +464 -0
  253. package/dist/lifecycle-engine/platform/deployment-placements.js +16 -0
  254. package/dist/lifecycle-engine/platform/deployment-placements.js.map +1 -0
  255. package/dist/lifecycle-engine/platform/deployment.d.ts +4 -0
  256. package/dist/lifecycle-engine/platform/deployment.js +17 -0
  257. package/dist/lifecycle-engine/platform/deployment.js.map +1 -0
  258. package/dist/lifecycle-engine/platform/index.d.ts +737 -0
  259. package/dist/lifecycle-engine/platform/index.js +60 -0
  260. package/dist/lifecycle-engine/platform/index.js.map +1 -0
  261. package/dist/lifecycle-engine/platform/runtime.d.ts +80 -0
  262. package/dist/lifecycle-engine/platform/runtime.js +11 -0
  263. package/dist/lifecycle-engine/platform/runtime.js.map +1 -0
  264. package/dist/lifecycle-engine/platform/site-publication.d.ts +102 -0
  265. package/dist/lifecycle-engine/platform/site-publication.js +7 -0
  266. package/dist/lifecycle-engine/platform/site-publication.js.map +1 -0
  267. package/dist/lifecycle-engine/platform/user-directory.d.ts +139 -0
  268. package/dist/lifecycle-engine/platform/user-directory.js +13 -0
  269. package/dist/lifecycle-engine/platform/user-directory.js.map +1 -0
  270. package/dist/mcp.d.ts +92 -0
  271. package/dist/mcp.js +10 -0
  272. package/dist/mcp.js.map +1 -0
  273. package/dist/middleware/auth.d.ts +118 -0
  274. package/dist/middleware/auth.js +7 -0
  275. package/dist/middleware/auth.js.map +1 -0
  276. package/dist/middleware/error-handler.d.ts +35 -0
  277. package/dist/middleware/error-handler.js +7 -0
  278. package/dist/middleware/error-handler.js.map +1 -0
  279. package/dist/middleware/module-guard.d.ts +33 -0
  280. package/dist/middleware/module-guard.js +7 -0
  281. package/dist/middleware/module-guard.js.map +1 -0
  282. package/dist/platform-admin/index.d.ts +37 -0
  283. package/dist/platform-admin/index.js +11 -0
  284. package/dist/platform-admin/index.js.map +1 -0
  285. package/dist/platform-admin/store.d.ts +346 -0
  286. package/dist/platform-admin/store.js +7 -0
  287. package/dist/platform-admin/store.js.map +1 -0
  288. package/dist/plugin-data/annotations.d.ts +6 -0
  289. package/dist/plugin-data/annotations.js +12 -0
  290. package/dist/plugin-data/annotations.js.map +1 -0
  291. package/dist/plugin-data/atomic-context.d.ts +41 -0
  292. package/dist/plugin-data/atomic-context.js +9 -0
  293. package/dist/plugin-data/atomic-context.js.map +1 -0
  294. package/dist/plugin-data/atomic.d.ts +6 -0
  295. package/dist/plugin-data/atomic.js +26 -0
  296. package/dist/plugin-data/atomic.js.map +1 -0
  297. package/dist/plugin-data/audit.d.ts +6 -0
  298. package/dist/plugin-data/audit.js +12 -0
  299. package/dist/plugin-data/audit.js.map +1 -0
  300. package/dist/plugin-data/commands.d.ts +6 -0
  301. package/dist/plugin-data/commands.js +8 -0
  302. package/dist/plugin-data/commands.js.map +1 -0
  303. package/dist/plugin-data/composite.d.ts +6 -0
  304. package/dist/plugin-data/composite.js +8 -0
  305. package/dist/plugin-data/composite.js.map +1 -0
  306. package/dist/plugin-data/delivery.d.ts +6 -0
  307. package/dist/plugin-data/delivery.js +16 -0
  308. package/dist/plugin-data/delivery.js.map +1 -0
  309. package/dist/plugin-data/index.d.ts +2798 -0
  310. package/dist/plugin-data/index.js +102 -0
  311. package/dist/plugin-data/index.js.map +1 -0
  312. package/dist/plugin-data/json-documents.d.ts +6 -0
  313. package/dist/plugin-data/json-documents.js +16 -0
  314. package/dist/plugin-data/json-documents.js.map +1 -0
  315. package/dist/plugin-data/outbox.d.ts +6 -0
  316. package/dist/plugin-data/outbox.js +16 -0
  317. package/dist/plugin-data/outbox.js.map +1 -0
  318. package/dist/plugin-data/scoped-records.d.ts +6 -0
  319. package/dist/plugin-data/scoped-records.js +10 -0
  320. package/dist/plugin-data/scoped-records.js.map +1 -0
  321. package/dist/plugin-sdk.d.ts +41 -0
  322. package/dist/plugin-sdk.js +10 -0
  323. package/dist/plugin-sdk.js.map +1 -0
  324. package/dist/sql-lifecycle/index.d.ts +138 -0
  325. package/dist/sql-lifecycle/index.js +167 -0
  326. package/dist/sql-lifecycle/index.js.map +1 -0
  327. package/dist/storage/index.d.ts +2 -0
  328. package/dist/storage/index.js +13 -0
  329. package/dist/storage/index.js.map +1 -0
  330. package/dist/storage/s3-compatible.d.ts +139 -0
  331. package/dist/storage/s3-compatible.js +11 -0
  332. package/dist/storage/s3-compatible.js.map +1 -0
  333. package/dist/tenant.d.ts +108 -0
  334. package/dist/tenant.js +9 -0
  335. package/dist/tenant.js.map +1 -0
  336. package/dist/workspace-context.d.ts +119 -0
  337. package/dist/workspace-context.js +9 -0
  338. package/dist/workspace-context.js.map +1 -0
  339. package/docs/api.md +30560 -0
  340. package/docs/db/README.md +49 -0
  341. package/docs/db/docs/api.md +1613 -0
  342. package/docs/db/docs/guide.md +47 -0
  343. package/docs/entitlements.md +60 -0
  344. package/docs/guide.md +92 -0
  345. package/docs/index.md +57 -0
  346. package/docs/ja/db/README.md +46 -0
  347. package/docs/ja/db/docs/guide.md +53 -0
  348. package/docs/ja/guide.md +46 -0
  349. package/docs/ja/lifecycle/README.md +46 -0
  350. package/docs/ja/lifecycle/docs/guide.md +45 -0
  351. package/docs/ja/storage/README.md +46 -0
  352. package/docs/ja/storage/docs/guide.md +43 -0
  353. package/docs/lifecycle/README.md +49 -0
  354. package/docs/lifecycle/docs/api.md +3770 -0
  355. package/docs/lifecycle/docs/baseline.md +50 -0
  356. package/docs/lifecycle/docs/guide.md +47 -0
  357. package/docs/storage/README.md +49 -0
  358. package/docs/storage/docs/api.md +470 -0
  359. package/docs/storage/docs/guide.md +47 -0
  360. package/package.json +354 -4
@@ -0,0 +1,66 @@
1
+ // src/agentic/workflow-manager.ts
2
+ var ServerWorkflowManager = class {
3
+ onApprovalRequired;
4
+ authorizeResume;
5
+ /**
6
+ * Captures optional host approval notification and authorization callbacks.
7
+ * @param options - Host callbacks; omitted options perform no external notification and supply no resume authorizer.
8
+ */
9
+ constructor(options) {
10
+ this.onApprovalRequired = options?.onApprovalRequired;
11
+ this.authorizeResume = options?.authorizeResume;
12
+ }
13
+ /**
14
+ * Runs the graph and notifies the host if execution pauses for approval.
15
+ * @param graph - Configured graph with appropriate durable checkpointer/admission.
16
+ * @param initialState - Verified workflow identity and starting state.
17
+ * @returns Graph state after runStep, including any pending approval; notification failures do not change it.
18
+ * @throws Rejects graph execution failures; notification errors are caught and warned.
19
+ * @example
20
+ * ```typescript
21
+ * import { ServerWorkflowManager } from "@alneas/eaos-server/agentic/workflow-manager";
22
+ * import type { AgentGraphEngine, AgentGraphState } from "@alneas/eaos-server/agentic/graph";
23
+ * export async function run(graph: AgentGraphEngine, initialState: AgentGraphState) {
24
+ * return new ServerWorkflowManager().runWorkflow(graph, initialState);
25
+ * }
26
+ * ```
27
+ */
28
+ async runWorkflow(graph, initialState) {
29
+ const state = await graph.runStep(initialState);
30
+ if (state.pendingApproval) {
31
+ if (this.onApprovalRequired) {
32
+ try {
33
+ await this.onApprovalRequired(state);
34
+ } catch (err) {
35
+ console.warn(`[ServerWorkflowManager] Approval notification failed: ${err.message}`);
36
+ }
37
+ }
38
+ }
39
+ return state;
40
+ }
41
+ /**
42
+ * Delegates an authenticated approval decision to graph checkpoint/binding verification and resume.
43
+ * @param graph - Graph owning the pending task checkpoint.
44
+ * @param payload - Verified approver decision with optional approval/hash bindings; taskId selects the graph session.
45
+ * @returns Resume outcome, optional updated state, or failure data from resumeAfterApproval.
46
+ * @throws Propagates graph/checkpointer errors not normalized by resumeAfterApproval.
47
+ * @remarks The host verifies caller identity and role before constructing payload. This wrapper does not send a second approval notification after resume.
48
+ * @example
49
+ * ```typescript
50
+ * import { ServerWorkflowManager, type ServerWorkflowOptions } from "@alneas/eaos-server/agentic/workflow-manager";
51
+ * import type { AgentGraphEngine } from "@alneas/eaos-server/agentic/graph";
52
+ * import type { ServerApprovalCallbackPayload } from "@alneas/eaos-server/agentic/types";
53
+ * export async function approve(graph: AgentGraphEngine, options: ServerWorkflowOptions, payload: ServerApprovalCallbackPayload) {
54
+ * return new ServerWorkflowManager(options).handleApproval(graph, payload);
55
+ * }
56
+ * ```
57
+ */
58
+ async handleApproval(graph, payload) {
59
+ return graph.resumeAfterApproval({ sessionId: payload.taskId, approvalId: payload.approvalId, bindingHash: payload.bindingHash, approved: payload.approved, approverId: payload.approverId, approverRole: payload.approverRole, comment: payload.comment, authorizeResume: this.authorizeResume });
60
+ }
61
+ };
62
+
63
+ export {
64
+ ServerWorkflowManager
65
+ };
66
+ //# sourceMappingURL=chunk-FD6VC2NA.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/agentic/workflow-manager.ts"],"sourcesContent":["import { AgentGraphEngine, type AgentGraphState } from './graph'\nimport type { ServerApprovalCallbackPayload } from './types'\n\n/**\n * Host notification and approval authority callbacks used by {@link ServerWorkflowManager}.\n */\nexport interface ServerWorkflowOptions {\n /** Called after runStep returns pendingApproval; receives the returned state. Notification failures are warned and do not fail runWorkflow. */\n onApprovalRequired?: (state: AgentGraphState) => Promise<void>\n /** Live host approval check receiving workflow state and verified approver/decision; must resolve true to permit resume. Errors are delegated to graph resume handling. */\n authorizeResume?: (state: AgentGraphState, input: {\n /**\n * Host-authenticated approver identifier attached to the pending decision.\n */\n approverId: string;\n /**\n * Host-verified approver role to recheck against current resource/approval policy.\n */\n approverRole: string;\n /**\n * True requests continuation; false requests rejection, and a supplied authorizer also checks that decision.\n */\n approved: boolean }) => Promise<boolean>\n}\n\n/**\n * Coordinates graph execution and host approval notifications without choosing a notification transport.\n * @remarks Checkpoint persistence and approval binding are delegated to AgentGraphEngine; the host authenticates approval callbacks. No webhook listener, retry queue, or delivery guarantee is installed.\n * @example\n * ```typescript\n * import { ServerWorkflowManager, type ServerWorkflowOptions } from \"@alneas/eaos-server/agentic/workflow-manager\";\n * export function workflowManager(options: ServerWorkflowOptions) {\n * return new ServerWorkflowManager(options);\n * }\n * ```\n */\nexport class ServerWorkflowManager {\n private onApprovalRequired?: (state: AgentGraphState) => Promise<void>\n private authorizeResume?: ServerWorkflowOptions['authorizeResume']\n\n /**\n * Captures optional host approval notification and authorization callbacks.\n * @param options - Host callbacks; omitted options perform no external notification and supply no resume authorizer.\n */\n constructor(options?: ServerWorkflowOptions) {\n this.onApprovalRequired = options?.onApprovalRequired\n this.authorizeResume = options?.authorizeResume\n }\n\n /**\n * Runs the graph and notifies the host if execution pauses for approval.\n * @param graph - Configured graph with appropriate durable checkpointer/admission.\n * @param initialState - Verified workflow identity and starting state.\n * @returns Graph state after runStep, including any pending approval; notification failures do not change it.\n * @throws Rejects graph execution failures; notification errors are caught and warned.\n * @example\n * ```typescript\n * import { ServerWorkflowManager } from \"@alneas/eaos-server/agentic/workflow-manager\";\n * import type { AgentGraphEngine, AgentGraphState } from \"@alneas/eaos-server/agentic/graph\";\n * export async function run(graph: AgentGraphEngine, initialState: AgentGraphState) {\n * return new ServerWorkflowManager().runWorkflow(graph, initialState);\n * }\n * ```\n */\n async runWorkflow(graph: AgentGraphEngine, initialState: AgentGraphState): Promise<AgentGraphState> {\n const state = await graph.runStep(initialState)\n\n if (state.pendingApproval) {\n if (this.onApprovalRequired) {\n try {\n await this.onApprovalRequired(state)\n } catch (err) {\n console.warn(`[ServerWorkflowManager] Approval notification failed: ${(err as Error).message}`)\n }\n }\n }\n\n return state\n }\n\n /**\n * Delegates an authenticated approval decision to graph checkpoint/binding verification and resume.\n * @param graph - Graph owning the pending task checkpoint.\n * @param payload - Verified approver decision with optional approval/hash bindings; taskId selects the graph session.\n * @returns Resume outcome, optional updated state, or failure data from resumeAfterApproval.\n * @throws Propagates graph/checkpointer errors not normalized by resumeAfterApproval.\n * @remarks The host verifies caller identity and role before constructing payload. This wrapper does not send a second approval notification after resume.\n * @example\n * ```typescript\n * import { ServerWorkflowManager, type ServerWorkflowOptions } from \"@alneas/eaos-server/agentic/workflow-manager\";\n * import type { AgentGraphEngine } from \"@alneas/eaos-server/agentic/graph\";\n * import type { ServerApprovalCallbackPayload } from \"@alneas/eaos-server/agentic/types\";\n * export async function approve(graph: AgentGraphEngine, options: ServerWorkflowOptions, payload: ServerApprovalCallbackPayload) {\n * return new ServerWorkflowManager(options).handleApproval(graph, payload);\n * }\n * ```\n */\n async handleApproval(\n graph: AgentGraphEngine,\n payload: ServerApprovalCallbackPayload\n ): Promise<{ \n /** Whether graph approval verification/resumption produced a saved state; false can follow partial effects and is not proof that nothing ran. */\n resumed: boolean; \n /** Optional graph checkpoint state returned after successful resumption; absent on the normalized failure paths. */\n state?: AgentGraphState; \n /** Optional normalized checkpoint, approval, authorization or invocation failure detail when resumed is false; other errors can still reject the Promise. */\n error?: string }> {\n return graph.resumeAfterApproval({ sessionId: payload.taskId, approvalId: payload.approvalId, bindingHash: payload.bindingHash, approved: payload.approved, approverId: payload.approverId, approverRole: payload.approverRole, comment: payload.comment, authorizeResume: this.authorizeResume })\n }\n}\n"],"mappings":";AAoCO,IAAM,wBAAN,MAA4B;AAAA,EACzB;AAAA,EACA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMR,YAAY,SAAiC;AAC3C,SAAK,qBAAqB,SAAS;AACnC,SAAK,kBAAkB,SAAS;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBA,MAAM,YAAY,OAAyB,cAAyD;AAClG,UAAM,QAAQ,MAAM,MAAM,QAAQ,YAAY;AAE9C,QAAI,MAAM,iBAAiB;AACzB,UAAI,KAAK,oBAAoB;AAC3B,YAAI;AACF,gBAAM,KAAK,mBAAmB,KAAK;AAAA,QACrC,SAAS,KAAK;AACZ,kBAAQ,KAAK,yDAA0D,IAAc,OAAO,EAAE;AAAA,QAChG;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmBA,MAAM,eACJ,OACA,SAOgB;AAChB,WAAO,MAAM,oBAAoB,EAAE,WAAW,QAAQ,QAAQ,YAAY,QAAQ,YAAY,aAAa,QAAQ,aAAa,UAAU,QAAQ,UAAU,YAAY,QAAQ,YAAY,cAAc,QAAQ,cAAc,SAAS,QAAQ,SAAS,iBAAiB,KAAK,gBAAgB,CAAC;AAAA,EACnS;AACF;","names":[]}
@@ -0,0 +1,14 @@
1
+ // src/browser-auth/public-memberships.ts
2
+ import { parseAccountMemberships } from "@alneas/eaos-server/platform";
3
+ function publicAccountMemberships(identity) {
4
+ if (identity.state !== "active") throw new Error("Active identity required");
5
+ const value = identity.metadata_public;
6
+ if (value !== void 0 && value !== null && (typeof value !== "object" || Array.isArray(value))) throw new Error("Invalid public metadata");
7
+ const metadata = value ?? {};
8
+ return parseAccountMemberships({ memberships: metadata.eaos_memberships ?? [], defaultTenantId: metadata.eaos_default_tenant_id ?? void 0 });
9
+ }
10
+
11
+ export {
12
+ publicAccountMemberships
13
+ };
14
+ //# sourceMappingURL=chunk-FRRRWAHO.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/browser-auth/public-memberships.ts"],"sourcesContent":["import { parseAccountMemberships, type AccountMemberships } from '@alneas/eaos-server/platform'\n\n/**\n * Parses account membership claims exclusively from an active identity's public metadata.\n * @param identity - Identity returned by a server-verified Kratos session; state must equal active.\n * @returns Parsed memberships and optional defaultTenantId; absent/null public metadata supplies an empty membership list.\n * @throws For inactive identities, malformed public metadata, or invalid membership claims rejected by the platform parser.\n * @remarks Never pass editable traits or unverified client JSON. There is no fallback to private metadata or SQL membership lookup, and parsing does not authenticate the identity.\n * @example\n * ```typescript\n * import { publicAccountMemberships } from \"@alneas/eaos-server/browser-auth/public-memberships\";\n * import { createKratosSessionVerifier } from \"@alneas/eaos-server/browser-auth/kratos-session\";\n * const verify = createKratosSessionVerifier({ publicUrl: \"https://identity.example.com\" });\n * export async function memberships(cookie: string | undefined) {\n * const session = await verify({ cookie });\n * return session ? publicAccountMemberships(session.identity) : null;\n * }\n * ```\n */\nexport function publicAccountMemberships(identity: Record<string, unknown>): AccountMemberships {\n if (identity.state !== 'active') throw new Error('Active identity required')\n const value = identity.metadata_public\n if (value !== undefined && value !== null && (typeof value !== 'object' || Array.isArray(value))) throw new Error('Invalid public metadata')\n const metadata = (value ?? {}) as Record<string, unknown>\n // No fallback to editable traits, private metadata, or a SQL directory.\n return parseAccountMemberships({ memberships: metadata.eaos_memberships ?? [], defaultTenantId: metadata.eaos_default_tenant_id ?? undefined })\n}\n"],"mappings":";AAAA,SAAS,+BAAwD;AAmB1D,SAAS,yBAAyB,UAAuD;AAC9F,MAAI,SAAS,UAAU,SAAU,OAAM,IAAI,MAAM,0BAA0B;AAC3E,QAAM,QAAQ,SAAS;AACvB,MAAI,UAAU,UAAa,UAAU,SAAS,OAAO,UAAU,YAAY,MAAM,QAAQ,KAAK,GAAI,OAAM,IAAI,MAAM,yBAAyB;AAC3I,QAAM,WAAY,SAAS,CAAC;AAE5B,SAAO,wBAAwB,EAAE,aAAa,SAAS,oBAAoB,CAAC,GAAG,iBAAiB,SAAS,0BAA0B,OAAU,CAAC;AAChJ;","names":[]}
@@ -0,0 +1,17 @@
1
+ // src/lifecycle-engine/platform/artifacts.ts
2
+ function validatePlatformPackages(value) {
3
+ if (value === void 0) return [];
4
+ if (!Array.isArray(value)) throw new Error("Platform packages must be an array");
5
+ const ids = /* @__PURE__ */ new Set();
6
+ const path = (v) => typeof v === "string" && v.length > 0 && !v.startsWith("/") && !v.includes("\\") && v.split("/").every((p) => p && p !== "." && p !== "..");
7
+ for (const entry of value) {
8
+ if (!entry || typeof entry !== "object" || Object.keys(entry).some((k) => !["id", "inventory", "module", "tenantIds", "pluginIds", "settings"].includes(k)) || typeof entry.id !== "string" || !entry.id.trim() || ids.has(entry.id) || !path(entry.inventory) || !path(entry.module) || !Array.isArray(entry.pluginIds) || !entry.pluginIds.length || entry.pluginIds.some((p) => typeof p !== "string" || !p.trim()) || new Set(entry.pluginIds).size !== entry.pluginIds.length || !Array.isArray(entry.tenantIds) || !entry.tenantIds.length || entry.tenantIds.some((t) => typeof t !== "string" || !t.trim() || t !== t.trim() || t === "*") || entry.settings !== void 0 && (!entry.settings || typeof entry.settings !== "object" || Array.isArray(entry.settings))) throw new Error("Invalid platform package registration");
9
+ ids.add(entry.id);
10
+ }
11
+ return value;
12
+ }
13
+
14
+ export {
15
+ validatePlatformPackages
16
+ };
17
+ //# sourceMappingURL=chunk-HCKAGLLB.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/lifecycle-engine/platform/artifacts.ts"],"sourcesContent":["import type { PluginManifest } from '@alneas/eaos-core/plugin-sdk'\nimport type { LifecyclePlugin } from '../index'\nimport type { DeploymentPlugin } from './deployment'\n\n/**\n * Trusted code contributions restricted to explicit tenant IDs; registration never activates a plugin.\n * \n * \n * Trusted package contributions; code registration does not grant tenant activation.\n * @see PluginLifecycle for canonical integration usage.\n */\nexport interface PlatformContribution {\n /**\n * Contribution contract discriminator; currently 1.\n */\n apiVersion: 1\n /**\n * Contribution/package identity.\n */\n id: string\n /**\n * Concrete admitted tenant catalog; never wildcard authorization.\n */\n tenantIds: string[]\n /**\n * Optional public plugin manifests contributed by the trusted package.\n */\n manifests?: PluginManifest[]\n /**\n * Optional trusted lifecycle release definitions.\n */\n lifecycle?: LifecyclePlugin[]\n /**\n * Optional plugin ID to allowed route-prefix contributions.\n */\n routePrefixes?: Record<string, string[]>\n}\n/**\n * Checksummed artifact metadata and explicit per-plugin deployment work, separate from runtime admission.\n * \n * @see PluginLifecycle for canonical integration usage.\n */\nexport interface DeploymentInventory {\n /**\n * Inventory discriminator; currently 1.\n */\n apiVersion: 1\n /**\n * Stable package/contribution owner used to bind receipts.\n */\n owner: string\n /**\n * Optional package release version.\n */\n version?: string\n /**\n * Optional declared execution runtime descriptor.\n */\n runtime?: string\n /**\n * Optional ordered lifecycle plugin IDs; required for classified plugin work.\n */\n lifecycleBundle?: string[]\n /**\n * Tenant-scoped function source declarations and required tenant bindings.\n */\n functions: Array<{ \n /**\n * Unique tenant-scoped function identity.\n */\n id: string; \n /**\n * Project-relative packaged function/database source path.\n */\n source: string; \n /**\n * Function scope discriminator; must be tenant.\n */\n scope: 'tenant'; \n /**\n * Explicit binding names that the host must resolve separately for each tenant.\n */\n requiredTenantBindings: string[] }>\n /**\n * Optional adopted existing-history database declaration; never an instruction to recreate history.\n */\n database?: { \n /**\n * Project-relative packaged function/database source path.\n */\n source: string; \n /**\n * Database history policy; adopt-existing-history never recreates historical migrations.\n */\n mode: 'adopt-existing-history'; \n /**\n * Canonical tenant isolation column; currently tenant_id.\n */\n tenantColumn: 'tenant_id' }\n /**\n * Exact project-relative packaged asset paths and SHA-256 digests.\n */\n assets: Array<{ \n /**\n * Exact project-relative packaged asset path.\n */\n path: string; \n /**\n * Lowercase SHA-256 digest of the asset bytes.\n */\n sha256: string }>\n /**\n * Optional classified component/task declarations; absence is legacy-unclassified.\n * \n * Explicit per-plugin composition and required work. Omission is legacy/unclassified.\n */\n plugins?: DeploymentPlugin[]\n}\n/**\n * Trusted project-relative artifact/module registration with explicit tenant/plugin scopes.\n * \n * \n * Paths are project-relative. Settings are non-secret; use host-resolved references for credentials.\n * @see PluginLifecycle for canonical integration usage.\n */\nexport interface PlatformPackage {\n /**\n * Unique nonblank registration ID.\n */\n id: string\n /**\n * Project-relative inventory path without absolute/traversal/backslash segments.\n */\n inventory: string\n /**\n * Project-relative entry module path without traversal.\n */\n module: string\n /**\n * Nonempty concrete trimmed tenant IDs; wildcard is forbidden.\n */\n tenantIds: string[]\n /**\n * Nonempty unique plugin IDs contributed by this package.\n */\n pluginIds: string[]\n /**\n * Optional nonsecret host configuration object; resolve credentials by host references.\n */\n settings?: Record<string, unknown>\n}\n/**\n * Validates explicit checksummed package registrations and concrete tenant/plugin scope metadata.\n * @param value - Untrusted package registration array, or undefined for no packages.\n * @returns The original accepted array, or a new empty array for undefined.\n * @throws Error for nonarray input, unknown fields, duplicate package IDs, invalid paths, empty/duplicate plugin IDs or invalid tenant scopes.\n * \n * @remarks\n * Checks project-relative nontraversing inventory/module paths and nonsecret settings shape. It does not load files, verify checksums, resolve membership or activate plugins.\n * \n * @example\n * ```typescript\n * import { validatePlatformPackages } from '@alneas/eaos-server/platform/artifacts';\n * const packages = validatePlatformPackages([{ id: 'reports', inventory: '.eaos/packages/reports/deployment.json', module: '.eaos/packages/reports/index.js', tenantIds: ['sample'], pluginIds: ['reports'] }]);\n * ```\n */\nexport function validatePlatformPackages(value: unknown): PlatformPackage[] {\n if (value === undefined) return []\n if (!Array.isArray(value)) throw new Error('Platform packages must be an array')\n const ids = new Set<string>()\n const path = (v: unknown) => typeof v === 'string' && v.length > 0 && !v.startsWith('/') && !v.includes('\\\\') && v.split('/').every(p => p && p !== '.' && p !== '..')\n for (const entry of value) {\n if (!entry || typeof entry !== 'object' || Object.keys(entry).some(k => !['id', 'inventory', 'module', 'tenantIds', 'pluginIds', 'settings'].includes(k))\n || typeof entry.id !== 'string' || !entry.id.trim() || ids.has(entry.id) || !path(entry.inventory) || !path(entry.module)\n || !Array.isArray(entry.pluginIds) || !entry.pluginIds.length || entry.pluginIds.some((p: unknown) => typeof p !== 'string' || !p.trim()) || new Set(entry.pluginIds).size !== entry.pluginIds.length\n || !Array.isArray(entry.tenantIds) || !entry.tenantIds.length || entry.tenantIds.some((t: unknown) => typeof t !== 'string' || !t.trim() || t !== t.trim() || t === '*')\n || (entry.settings !== undefined && (!entry.settings || typeof entry.settings !== 'object' || Array.isArray(entry.settings)))) throw new Error('Invalid platform package registration')\n ids.add(entry.id)\n\n }\n return value\n}\n"],"mappings":";AAsKO,SAAS,yBAAyB,OAAmC;AAC1E,MAAI,UAAU,OAAW,QAAO,CAAC;AACjC,MAAI,CAAC,MAAM,QAAQ,KAAK,EAAG,OAAM,IAAI,MAAM,oCAAoC;AAC/E,QAAM,MAAM,oBAAI,IAAY;AAC5B,QAAM,OAAO,CAAC,MAAe,OAAO,MAAM,YAAY,EAAE,SAAS,KAAK,CAAC,EAAE,WAAW,GAAG,KAAK,CAAC,EAAE,SAAS,IAAI,KAAK,EAAE,MAAM,GAAG,EAAE,MAAM,OAAK,KAAK,MAAM,OAAO,MAAM,IAAI;AACrK,aAAW,SAAS,OAAO;AACzB,QAAI,CAAC,SAAS,OAAO,UAAU,YAAY,OAAO,KAAK,KAAK,EAAE,KAAK,OAAK,CAAC,CAAC,MAAM,aAAa,UAAU,aAAa,aAAa,UAAU,EAAE,SAAS,CAAC,CAAC,KACnJ,OAAO,MAAM,OAAO,YAAY,CAAC,MAAM,GAAG,KAAK,KAAK,IAAI,IAAI,MAAM,EAAE,KAAK,CAAC,KAAK,MAAM,SAAS,KAAK,CAAC,KAAK,MAAM,MAAM,KACrH,CAAC,MAAM,QAAQ,MAAM,SAAS,KAAK,CAAC,MAAM,UAAU,UAAU,MAAM,UAAU,KAAK,CAAC,MAAe,OAAO,MAAM,YAAY,CAAC,EAAE,KAAK,CAAC,KAAK,IAAI,IAAI,MAAM,SAAS,EAAE,SAAS,MAAM,UAAU,UAC5L,CAAC,MAAM,QAAQ,MAAM,SAAS,KAAK,CAAC,MAAM,UAAU,UAAU,MAAM,UAAU,KAAK,CAAC,MAAe,OAAO,MAAM,YAAY,CAAC,EAAE,KAAK,KAAK,MAAM,EAAE,KAAK,KAAK,MAAM,GAAG,KACnK,MAAM,aAAa,WAAc,CAAC,MAAM,YAAY,OAAO,MAAM,aAAa,YAAY,MAAM,QAAQ,MAAM,QAAQ,GAAK,OAAM,IAAI,MAAM,uCAAuC;AACxL,QAAI,IAAI,MAAM,EAAE;AAAA,EAElB;AACA,SAAO;AACT;","names":[]}
@@ -0,0 +1,191 @@
1
+ // src/agentic/workflow-registry.ts
2
+ import { canonicalJsonHash, validateWorkflowDefinition } from "@alneas/eaos-core";
3
+ var InMemoryWorkflowDefinitionRegistry = class {
4
+ records = /* @__PURE__ */ new Map();
5
+ now;
6
+ validateDefinition;
7
+ /**
8
+ * Captures authoring clock and optional semantic validation callback.
9
+ * @param options - now returns a timestamp string and defaults to current ISO time; validate synchronously checks a structurally valid draft during validate and may throw.
10
+ */
11
+ constructor(options = {}) {
12
+ this.now = options.now ?? (() => (/* @__PURE__ */ new Date()).toISOString());
13
+ this.validateDefinition = options.validate;
14
+ }
15
+ /**
16
+ * Validates and inserts or replaces a draft version, incrementing its revision.
17
+ * @param input - Unknown workflow definition validated by core validation.
18
+ * @param actorId - Optional author label recorded as creator/updater; not authenticated here.
19
+ * @returns A cloned draft record with canonical definition hash.
20
+ * @throws Invalid definition, non-draft existing version, clock/hash/clone failure.
21
+ * @example
22
+ * ```typescript
23
+ * import { InMemoryWorkflowDefinitionRegistry } from "@alneas/eaos-server/agentic/workflow-registry";
24
+ * export function draft(input: unknown) { return new InMemoryWorkflowDefinitionRegistry().saveDraft(input); }
25
+ * ```
26
+ */
27
+ saveDraft(input, actorId) {
28
+ const definition = validateWorkflowDefinition(input);
29
+ const key = this.key(definition.workflowId, definition.version);
30
+ const current = this.records.get(key);
31
+ if (current && current.status !== "draft") throw new Error(`Workflow version '${definition.workflowId}@${definition.version}' is immutable after draft`);
32
+ const timestamp = this.now();
33
+ const record = {
34
+ workflowId: definition.workflowId,
35
+ version: definition.version,
36
+ status: "draft",
37
+ definition,
38
+ definitionHash: canonicalJsonHash(definition),
39
+ revision: (current?.revision ?? 0) + 1,
40
+ createdAt: current?.createdAt ?? timestamp,
41
+ updatedAt: timestamp,
42
+ ...current?.createdBy ?? actorId ? { createdBy: current?.createdBy ?? actorId } : {},
43
+ ...actorId === void 0 ? {} : { updatedBy: actorId }
44
+ };
45
+ this.records.set(key, record);
46
+ return clone(record);
47
+ }
48
+ /**
49
+ * Transitions an existing draft to validated after core and optional host checks.
50
+ * @param workflowId - Exact workflow identifier.
51
+ * @param version - Exact stored version.
52
+ * @param actorId - Optional updater label.
53
+ * @returns A cloned validated record with incremented revision.
54
+ * @throws Missing version, nondraft status, validation/callback/clock failure.
55
+ * @example
56
+ * ```typescript
57
+ * import { InMemoryWorkflowDefinitionRegistry } from "@alneas/eaos-server/agentic/workflow-registry";
58
+ * export function validate(registry: InMemoryWorkflowDefinitionRegistry, workflowId: string, version: string) { return registry.validate(workflowId, version); }
59
+ * ```
60
+ */
61
+ validate(workflowId, version, actorId) {
62
+ const current = this.require(workflowId, version);
63
+ if (current.status !== "draft") throw new Error(`Workflow version '${workflowId}@${version}' is not a draft`);
64
+ validateWorkflowDefinition(current.definition);
65
+ this.validateDefinition?.(current.definition);
66
+ return this.update(current, { status: "validated", ...actorId === void 0 ? {} : { updatedBy: actorId } });
67
+ }
68
+ /**
69
+ * Transitions a validated version to approved and records approver metadata.
70
+ * @param workflowId - Exact workflow identifier.
71
+ * @param version - Exact stored version.
72
+ * @param actorId - Nonblank verified host approver label; no role check occurs here.
73
+ * @returns A cloned approved record.
74
+ * @throws Blank actor, missing version, nonvalidated status, or clock failure.
75
+ * @example
76
+ * ```typescript
77
+ * import { InMemoryWorkflowDefinitionRegistry } from "@alneas/eaos-server/agentic/workflow-registry";
78
+ * export function approve(registry: InMemoryWorkflowDefinitionRegistry, workflowId: string, version: string, actorId: string) { return registry.approve(workflowId, version, actorId); }
79
+ * ```
80
+ */
81
+ approve(workflowId, version, actorId) {
82
+ if (!actorId.trim()) throw new Error("Workflow approver identity is required");
83
+ const current = this.require(workflowId, version);
84
+ if (current.status !== "validated") throw new Error(`Workflow version '${workflowId}@${version}' must be validated before approval`);
85
+ return this.update(current, { status: "approved", approvedAt: this.now(), approvedBy: actorId, updatedBy: actorId });
86
+ }
87
+ /**
88
+ * Publishes an approved version and retires any currently published version of the same workflow.
89
+ * @param workflowId - Exact workflow identifier.
90
+ * @param version - Approved version to publish.
91
+ * @param actorId - Nonblank verified host publisher label.
92
+ * @returns A cloned published record; previous published records become retired.
93
+ * @throws Blank actor, missing version, nonapproved status, or clock/clone failure; earlier retirement updates can already have occurred.
94
+ * @example
95
+ * ```typescript
96
+ * import { InMemoryWorkflowDefinitionRegistry } from "@alneas/eaos-server/agentic/workflow-registry";
97
+ * export function publish(registry: InMemoryWorkflowDefinitionRegistry, workflowId: string, version: string, actorId: string) { return registry.publish(workflowId, version, actorId); }
98
+ * ```
99
+ */
100
+ publish(workflowId, version, actorId) {
101
+ if (!actorId.trim()) throw new Error("Workflow publisher identity is required");
102
+ const current = this.require(workflowId, version);
103
+ if (current.status !== "approved") throw new Error(`Workflow version '${workflowId}@${version}' must be approved before publication`);
104
+ for (const record of this.records.values()) {
105
+ if (record.workflowId === workflowId && record.status === "published") this.records.set(this.key(record.workflowId, record.version), this.update(record, { status: "retired", retiredAt: this.now(), retiredBy: actorId }));
106
+ }
107
+ return this.update(current, { status: "published", publishedAt: this.now(), publishedBy: actorId, updatedBy: actorId });
108
+ }
109
+ /**
110
+ * Transitions a published version to retired and records retirement metadata.
111
+ * @param workflowId - Exact workflow identifier.
112
+ * @param version - Currently published version.
113
+ * @param actorId - Nonblank verified host operator label.
114
+ * @returns A cloned retired record.
115
+ * @throws Blank actor, missing version, nonpublished status, or clock failure.
116
+ * @example
117
+ * ```typescript
118
+ * import { InMemoryWorkflowDefinitionRegistry } from "@alneas/eaos-server/agentic/workflow-registry";
119
+ * export function retire(registry: InMemoryWorkflowDefinitionRegistry, workflowId: string, version: string, actorId: string) { return registry.retire(workflowId, version, actorId); }
120
+ * ```
121
+ */
122
+ retire(workflowId, version, actorId) {
123
+ if (!actorId.trim()) throw new Error("Workflow retire identity is required");
124
+ const current = this.require(workflowId, version);
125
+ if (current.status !== "published") throw new Error(`Workflow version '${workflowId}@${version}' is not published`);
126
+ return this.update(current, { status: "retired", retiredAt: this.now(), retiredBy: actorId, updatedBy: actorId });
127
+ }
128
+ /**
129
+ * Reads one workflow version without mutating lifecycle state.
130
+ * @param workflowId - Exact workflow identifier.
131
+ * @param version - Exact stored version.
132
+ * @returns A cloned record, or undefined when absent.
133
+ * @example
134
+ * ```typescript
135
+ * import { InMemoryWorkflowDefinitionRegistry } from "@alneas/eaos-server/agentic/workflow-registry";
136
+ * console.log(new InMemoryWorkflowDefinitionRegistry().get("example", "1.0.0")); // undefined
137
+ * ```
138
+ */
139
+ get(workflowId, version) {
140
+ const record = this.records.get(this.key(workflowId, version));
141
+ return record ? clone(record) : void 0;
142
+ }
143
+ /**
144
+ * Finds the currently published version of one workflow.
145
+ * @param workflowId - Exact workflow identifier.
146
+ * @returns A cloned published record, or undefined when none exists.
147
+ * @example
148
+ * ```typescript
149
+ * import { InMemoryWorkflowDefinitionRegistry } from "@alneas/eaos-server/agentic/workflow-registry";
150
+ * console.log(new InMemoryWorkflowDefinitionRegistry().getPublished("example")); // undefined
151
+ * ```
152
+ */
153
+ getPublished(workflowId) {
154
+ const record = [...this.records.values()].find((item) => item.workflowId === workflowId && item.status === "published");
155
+ return record ? clone(record) : void 0;
156
+ }
157
+ /**
158
+ * Lists records in insertion order with optional workflow filtering.
159
+ * @param workflowId - Exact workflow identifier to filter, or omit for all workflows.
160
+ * @returns Independent cloned records, or an empty array.
161
+ * @example
162
+ * ```typescript
163
+ * import { InMemoryWorkflowDefinitionRegistry } from "@alneas/eaos-server/agentic/workflow-registry";
164
+ * console.log(new InMemoryWorkflowDefinitionRegistry().list()); // []
165
+ * ```
166
+ */
167
+ list(workflowId) {
168
+ return [...this.records.values()].filter((record) => workflowId === void 0 || record.workflowId === workflowId).map(clone);
169
+ }
170
+ require(workflowId, version) {
171
+ const record = this.records.get(this.key(workflowId, version));
172
+ if (!record) throw new Error(`Workflow version '${workflowId}@${version}' was not found`);
173
+ return record;
174
+ }
175
+ update(current, patch) {
176
+ const next = { ...current, ...patch, revision: current.revision + 1, updatedAt: this.now() };
177
+ this.records.set(this.key(current.workflowId, current.version), next);
178
+ return clone(next);
179
+ }
180
+ key(workflowId, version) {
181
+ return `${workflowId}@${version}`;
182
+ }
183
+ };
184
+ function clone(record) {
185
+ return structuredClone(record);
186
+ }
187
+
188
+ export {
189
+ InMemoryWorkflowDefinitionRegistry
190
+ };
191
+ //# sourceMappingURL=chunk-HVC7FG6B.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/agentic/workflow-registry.ts"],"sourcesContent":["import { canonicalJsonHash, type WorkflowDefinition, type WorkflowDefinitionLifecycle, validateWorkflowDefinition } from '@alneas/eaos-core'\n\n/**\n * Versioned workflow definition with lifecycle, integrity hash, revision, and actor/timestamp metadata.\n * @see InMemoryWorkflowDefinitionRegistry.\n */\nexport interface WorkflowDefinitionRecord {\n /** Workflow identifier copied from the validated definition. */\n workflowId: string\n /** Immutable version key within a workflow after draft. */\n version: string\n /** Current draft/validated/approved/published/retired lifecycle phase. */\n status: WorkflowDefinitionLifecycle\n /** Validated serializable definition; returned records are cloned by this registry. */\n definition: WorkflowDefinition\n /** Canonical SHA-256 definition hash calculated on saveDraft. */\n definitionHash: string\n /** Record revision starting at one and incrementing on each saved transition. */\n revision: number\n /** Creation timestamp from the registry clock. */\n createdAt: string\n /** Latest transition timestamp from the registry clock. */\n updatedAt: string\n /** Optional first author label. */\n createdBy?: string\n /** Optional latest actor label. */\n updatedBy?: string\n /** Optional approval timestamp. */\n approvedAt?: string\n /** Optional approver label. */\n approvedBy?: string\n /** Optional publication timestamp. */\n publishedAt?: string\n /** Optional publisher label. */\n publishedBy?: string\n /** Optional retirement timestamp. */\n retiredAt?: string\n /** Optional retiring actor label. */\n retiredBy?: string\n}\n\n/**\n * Workflow authoring lifecycle contract; durable hosts must supply authorization and consistent persistence.\n * @see InMemoryWorkflowDefinitionRegistry for transition semantics.\n */\nexport interface WorkflowDefinitionRegistry {\n /**\n * Validates and inserts or replaces a draft version, incrementing its revision.\n * @param definition - Unknown workflow definition validated by core validation.\n * @param actorId - Optional author label recorded as creator/updater; not authenticated here.\n * @returns A cloned draft record with canonical definition hash.\n * @throws Invalid definition, non-draft existing version, clock/hash/clone failure.\n \n * @example\n * ```typescript\n * import type { WorkflowDefinitionRegistry } from \"@alneas/eaos-server\";\n * export function saveReviewedDraft(\n * registry: WorkflowDefinitionRegistry,\n * definition: Parameters<WorkflowDefinitionRegistry[\"saveDraft\"]>[0], authenticatedActorId: string,\n * ) {\n * // Supply a real host workflow definition with its registered node types.\n * return registry.saveDraft(definition, authenticatedActorId);\n * }\n * ```\n */\n saveDraft(definition: unknown, actorId?: string): WorkflowDefinitionRecord\n /**\n * Transitions an existing draft to validated after core and optional host checks.\n * @param workflowId - Exact workflow identifier.\n * @param version - Exact stored version.\n * @param actorId - Optional updater label.\n * @returns A cloned validated record with incremented revision.\n * @throws Missing version, nondraft status, validation/callback/clock failure.\n \n * @example\n * ```typescript\n * import type { WorkflowDefinitionRegistry } from \"@alneas/eaos-server\";\n * export function validateStoredDraft(\n * registry: WorkflowDefinitionRegistry, workflowId: string, version: string, actorId: string,\n * ) {\n * const record = registry.validate(workflowId, version, actorId);\n * return record.status; // Host/Core validation must succeed before transition.\n * }\n * ```\n */\n validate(workflowId: string, version: string, actorId?: string): WorkflowDefinitionRecord\n /**\n * Transitions a validated version to approved and records approver metadata.\n * @param workflowId - Exact workflow identifier.\n * @param version - Exact stored version.\n * @param actorId - Nonblank verified host approver label; no role check occurs here.\n * @returns A cloned approved record.\n * @throws Blank actor, missing version, nonvalidated status, or clock failure.\n \n * @example\n * ```typescript\n * import type { WorkflowDefinitionRegistry } from \"@alneas/eaos-server\";\n * export function approveValidatedWorkflow(\n * registry: WorkflowDefinitionRegistry, workflowId: string, version: string, authorizedApproverId: string,\n * ) {\n * // The host checks reviewer authority before requesting this lifecycle change.\n * return registry.approve(workflowId, version, authorizedApproverId);\n * }\n * ```\n */\n approve(workflowId: string, version: string, actorId: string): WorkflowDefinitionRecord\n /**\n * Publishes an approved version and retires any currently published version of the same workflow.\n * @param workflowId - Exact workflow identifier.\n * @param version - Approved version to publish.\n * @param actorId - Nonblank verified host publisher label.\n * @returns A cloned published record; previous published records become retired.\n * @throws Blank actor, missing version, nonapproved status, or clock/clone failure; earlier retirement updates can already have occurred.\n \n * @example\n * ```typescript\n * import type { WorkflowDefinitionRegistry } from \"@alneas/eaos-server\";\n * export function publishApprovedWorkflow(\n * registry: WorkflowDefinitionRegistry, workflowId: string, version: string, authorizedPublisherId: string,\n * ) {\n * return registry.publish(workflowId, version, authorizedPublisherId);\n * // Host execution can select the resulting published record explicitly.\n * }\n * ```\n */\n publish(workflowId: string, version: string, actorId: string): WorkflowDefinitionRecord\n /**\n * Transitions a published version to retired and records retirement metadata.\n * @param workflowId - Exact workflow identifier.\n * @param version - Currently published version.\n * @param actorId - Nonblank verified host operator label.\n * @returns A cloned retired record.\n * @throws Blank actor, missing version, nonpublished status, or clock failure.\n \n * @example\n * ```typescript\n * import type { WorkflowDefinitionRegistry } from \"@alneas/eaos-server\";\n * export function retirePublishedWorkflow(\n * registry: WorkflowDefinitionRegistry, workflowId: string, version: string, authorizedActorId: string,\n * ) {\n * return registry.retire(workflowId, version, authorizedActorId);\n * }\n * ```\n */\n retire(workflowId: string, version: string, actorId: string): WorkflowDefinitionRecord\n /**\n * Reads one workflow version without mutating lifecycle state.\n * @param workflowId - Exact workflow identifier.\n * @param version - Exact stored version.\n * @returns A cloned record, or undefined when absent.\n \n * @example\n * ```typescript\n * import type { WorkflowDefinitionRegistry } from \"@alneas/eaos-server\";\n * export function inspectWorkflowVersion(\n * registry: WorkflowDefinitionRegistry, workflowId: string, version: string,\n * ) {\n * return registry.get(workflowId, version); // Undefined when this version is absent.\n * }\n * ```\n */\n get(workflowId: string, version: string): WorkflowDefinitionRecord | undefined\n /**\n * Finds the currently published version of one workflow.\n * @param workflowId - Exact workflow identifier.\n * @returns A cloned published record, or undefined when none exists.\n \n * @example\n * ```typescript\n * import type { WorkflowDefinitionRegistry } from \"@alneas/eaos-server\";\n * export function inspectPublishedWorkflow(registry: WorkflowDefinitionRegistry, workflowId: string) {\n * return registry.getPublished(workflowId); // Undefined when no version is published.\n * }\n * ```\n */\n getPublished(workflowId: string): WorkflowDefinitionRecord | undefined\n /**\n * Lists records in insertion order with optional workflow filtering.\n * @param workflowId - Exact workflow identifier to filter, or omit for all workflows.\n * @returns Independent cloned records, or an empty array.\n \n * @example\n * ```typescript\n * import type { WorkflowDefinitionRegistry } from \"@alneas/eaos-server\";\n * export function listWorkflowVersions(registry: WorkflowDefinitionRegistry, workflowId: string) {\n * return registry.list(workflowId).map(record => ({ version: record.version, status: record.status }));\n * }\n * ```\n */\n list(workflowId?: string): readonly WorkflowDefinitionRecord[]\n}\n\n/**\n * Stores versioned workflow drafts and validated/approved/published/retired records in process memory.\n * @remarks Reference registry for tests/local authoring; it performs no actor authentication, role authorization, durable storage, or cross-process coordination. Transitions increment record revision and preserve definitions after draft.\n * @example\n * ```typescript\n * import { InMemoryWorkflowDefinitionRegistry } from \"@alneas/eaos-server/agentic/workflow-registry\";\n * const registry = new InMemoryWorkflowDefinitionRegistry();\n * console.log(registry.list()); // []\n * ```\n */\nexport class InMemoryWorkflowDefinitionRegistry implements WorkflowDefinitionRegistry {\n private readonly records = new Map<string, WorkflowDefinitionRecord>()\n private readonly now: () => string\n private readonly validateDefinition?: (definition: WorkflowDefinition) => void\n\n /**\n * Captures authoring clock and optional semantic validation callback.\n * @param options - now returns a timestamp string and defaults to current ISO time; validate synchronously checks a structurally valid draft during validate and may throw.\n */\n constructor(options: { \n /**\n * Optional timestamp-string clock used when creating/updating registry records; defaults to current ISO time.\n * @returns Timestamp text recorded without additional format validation by this registry.\n * @see {@link InMemoryWorkflowDefinitionRegistry.saveDraft}\n */\n now?: () => string; \n /**\n * Optional synchronous host semantic validator called after Core structural validation during a draft-to-validated transition.\n * @param definition - Structurally valid stored workflow definition presented for host semantic checks.\n * @returns No value when accepted; throw to reject validation before the status update.\n * @remarks The callback receives the stored definition reference, so it should inspect without mutating it; this registry supplies no actor authentication or cross-process coordination.\n * @see {@link InMemoryWorkflowDefinitionRegistry.validate}\n */\n validate?: (definition: WorkflowDefinition) => void } = {}) {\n this.now = options.now ?? (() => new Date().toISOString())\n this.validateDefinition = options.validate\n }\n\n /**\n * Validates and inserts or replaces a draft version, incrementing its revision.\n * @param input - Unknown workflow definition validated by core validation.\n * @param actorId - Optional author label recorded as creator/updater; not authenticated here.\n * @returns A cloned draft record with canonical definition hash.\n * @throws Invalid definition, non-draft existing version, clock/hash/clone failure.\n * @example\n * ```typescript\n * import { InMemoryWorkflowDefinitionRegistry } from \"@alneas/eaos-server/agentic/workflow-registry\";\n * export function draft(input: unknown) { return new InMemoryWorkflowDefinitionRegistry().saveDraft(input); }\n * ```\n */\n saveDraft(input: unknown, actorId?: string): WorkflowDefinitionRecord {\n const definition = validateWorkflowDefinition(input)\n const key = this.key(definition.workflowId, definition.version)\n const current = this.records.get(key)\n if (current && current.status !== 'draft') throw new Error(`Workflow version '${definition.workflowId}@${definition.version}' is immutable after draft`)\n const timestamp = this.now()\n const record: WorkflowDefinitionRecord = {\n workflowId: definition.workflowId,\n version: definition.version,\n status: 'draft',\n definition,\n definitionHash: canonicalJsonHash(definition),\n revision: (current?.revision ?? 0) + 1,\n createdAt: current?.createdAt ?? timestamp,\n updatedAt: timestamp,\n ...(current?.createdBy ?? actorId ? { createdBy: current?.createdBy ?? actorId } : {}),\n ...(actorId === undefined ? {} : { updatedBy: actorId }),\n }\n this.records.set(key, record)\n return clone(record)\n }\n\n /**\n * Transitions an existing draft to validated after core and optional host checks.\n * @param workflowId - Exact workflow identifier.\n * @param version - Exact stored version.\n * @param actorId - Optional updater label.\n * @returns A cloned validated record with incremented revision.\n * @throws Missing version, nondraft status, validation/callback/clock failure.\n * @example\n * ```typescript\n * import { InMemoryWorkflowDefinitionRegistry } from \"@alneas/eaos-server/agentic/workflow-registry\";\n * export function validate(registry: InMemoryWorkflowDefinitionRegistry, workflowId: string, version: string) { return registry.validate(workflowId, version); }\n * ```\n */\n validate(workflowId: string, version: string, actorId?: string): WorkflowDefinitionRecord {\n const current = this.require(workflowId, version)\n if (current.status !== 'draft') throw new Error(`Workflow version '${workflowId}@${version}' is not a draft`)\n validateWorkflowDefinition(current.definition)\n this.validateDefinition?.(current.definition)\n return this.update(current, { status: 'validated', ...(actorId === undefined ? {} : { updatedBy: actorId }) })\n }\n\n /**\n * Transitions a validated version to approved and records approver metadata.\n * @param workflowId - Exact workflow identifier.\n * @param version - Exact stored version.\n * @param actorId - Nonblank verified host approver label; no role check occurs here.\n * @returns A cloned approved record.\n * @throws Blank actor, missing version, nonvalidated status, or clock failure.\n * @example\n * ```typescript\n * import { InMemoryWorkflowDefinitionRegistry } from \"@alneas/eaos-server/agentic/workflow-registry\";\n * export function approve(registry: InMemoryWorkflowDefinitionRegistry, workflowId: string, version: string, actorId: string) { return registry.approve(workflowId, version, actorId); }\n * ```\n */\n approve(workflowId: string, version: string, actorId: string): WorkflowDefinitionRecord {\n if (!actorId.trim()) throw new Error('Workflow approver identity is required')\n const current = this.require(workflowId, version)\n if (current.status !== 'validated') throw new Error(`Workflow version '${workflowId}@${version}' must be validated before approval`)\n return this.update(current, { status: 'approved', approvedAt: this.now(), approvedBy: actorId, updatedBy: actorId })\n }\n\n /**\n * Publishes an approved version and retires any currently published version of the same workflow.\n * @param workflowId - Exact workflow identifier.\n * @param version - Approved version to publish.\n * @param actorId - Nonblank verified host publisher label.\n * @returns A cloned published record; previous published records become retired.\n * @throws Blank actor, missing version, nonapproved status, or clock/clone failure; earlier retirement updates can already have occurred.\n * @example\n * ```typescript\n * import { InMemoryWorkflowDefinitionRegistry } from \"@alneas/eaos-server/agentic/workflow-registry\";\n * export function publish(registry: InMemoryWorkflowDefinitionRegistry, workflowId: string, version: string, actorId: string) { return registry.publish(workflowId, version, actorId); }\n * ```\n */\n publish(workflowId: string, version: string, actorId: string): WorkflowDefinitionRecord {\n if (!actorId.trim()) throw new Error('Workflow publisher identity is required')\n const current = this.require(workflowId, version)\n if (current.status !== 'approved') throw new Error(`Workflow version '${workflowId}@${version}' must be approved before publication`)\n for (const record of this.records.values()) {\n if (record.workflowId === workflowId && record.status === 'published') this.records.set(this.key(record.workflowId, record.version), this.update(record, { status: 'retired', retiredAt: this.now(), retiredBy: actorId }))\n }\n return this.update(current, { status: 'published', publishedAt: this.now(), publishedBy: actorId, updatedBy: actorId })\n }\n\n /**\n * Transitions a published version to retired and records retirement metadata.\n * @param workflowId - Exact workflow identifier.\n * @param version - Currently published version.\n * @param actorId - Nonblank verified host operator label.\n * @returns A cloned retired record.\n * @throws Blank actor, missing version, nonpublished status, or clock failure.\n * @example\n * ```typescript\n * import { InMemoryWorkflowDefinitionRegistry } from \"@alneas/eaos-server/agentic/workflow-registry\";\n * export function retire(registry: InMemoryWorkflowDefinitionRegistry, workflowId: string, version: string, actorId: string) { return registry.retire(workflowId, version, actorId); }\n * ```\n */\n retire(workflowId: string, version: string, actorId: string): WorkflowDefinitionRecord {\n if (!actorId.trim()) throw new Error('Workflow retire identity is required')\n const current = this.require(workflowId, version)\n if (current.status !== 'published') throw new Error(`Workflow version '${workflowId}@${version}' is not published`)\n return this.update(current, { status: 'retired', retiredAt: this.now(), retiredBy: actorId, updatedBy: actorId })\n }\n\n /**\n * Reads one workflow version without mutating lifecycle state.\n * @param workflowId - Exact workflow identifier.\n * @param version - Exact stored version.\n * @returns A cloned record, or undefined when absent.\n * @example\n * ```typescript\n * import { InMemoryWorkflowDefinitionRegistry } from \"@alneas/eaos-server/agentic/workflow-registry\";\n * console.log(new InMemoryWorkflowDefinitionRegistry().get(\"example\", \"1.0.0\")); // undefined\n * ```\n */\n get(workflowId: string, version: string): WorkflowDefinitionRecord | undefined {\n const record = this.records.get(this.key(workflowId, version))\n return record ? clone(record) : undefined\n }\n\n /**\n * Finds the currently published version of one workflow.\n * @param workflowId - Exact workflow identifier.\n * @returns A cloned published record, or undefined when none exists.\n * @example\n * ```typescript\n * import { InMemoryWorkflowDefinitionRegistry } from \"@alneas/eaos-server/agentic/workflow-registry\";\n * console.log(new InMemoryWorkflowDefinitionRegistry().getPublished(\"example\")); // undefined\n * ```\n */\n getPublished(workflowId: string): WorkflowDefinitionRecord | undefined {\n const record = [...this.records.values()].find(item => item.workflowId === workflowId && item.status === 'published')\n return record ? clone(record) : undefined\n }\n\n /**\n * Lists records in insertion order with optional workflow filtering.\n * @param workflowId - Exact workflow identifier to filter, or omit for all workflows.\n * @returns Independent cloned records, or an empty array.\n * @example\n * ```typescript\n * import { InMemoryWorkflowDefinitionRegistry } from \"@alneas/eaos-server/agentic/workflow-registry\";\n * console.log(new InMemoryWorkflowDefinitionRegistry().list()); // []\n * ```\n */\n list(workflowId?: string): readonly WorkflowDefinitionRecord[] {\n return [...this.records.values()].filter(record => workflowId === undefined || record.workflowId === workflowId).map(clone)\n }\n\n private require(workflowId: string, version: string): WorkflowDefinitionRecord {\n const record = this.records.get(this.key(workflowId, version))\n if (!record) throw new Error(`Workflow version '${workflowId}@${version}' was not found`)\n return record\n }\n\n private update(current: WorkflowDefinitionRecord, patch: Partial<WorkflowDefinitionRecord>): WorkflowDefinitionRecord {\n const next = { ...current, ...patch, revision: current.revision + 1, updatedAt: this.now() }\n this.records.set(this.key(current.workflowId, current.version), next)\n return clone(next)\n }\n\n private key(workflowId: string, version: string): string { return `${workflowId}@${version}` }\n}\n\nfunction clone(record: WorkflowDefinitionRecord): WorkflowDefinitionRecord { return structuredClone(record) }\n"],"mappings":";AAAA,SAAS,mBAA8E,kCAAkC;AA0MlH,IAAM,qCAAN,MAA+E;AAAA,EACnE,UAAU,oBAAI,IAAsC;AAAA,EACpD;AAAA,EACA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMjB,YAAY,UAc4C,CAAC,GAAG;AAC1D,SAAK,MAAM,QAAQ,QAAQ,OAAM,oBAAI,KAAK,GAAE,YAAY;AACxD,SAAK,qBAAqB,QAAQ;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcA,UAAU,OAAgB,SAA4C;AACpE,UAAM,aAAa,2BAA2B,KAAK;AACnD,UAAM,MAAM,KAAK,IAAI,WAAW,YAAY,WAAW,OAAO;AAC9D,UAAM,UAAU,KAAK,QAAQ,IAAI,GAAG;AACpC,QAAI,WAAW,QAAQ,WAAW,QAAS,OAAM,IAAI,MAAM,qBAAqB,WAAW,UAAU,IAAI,WAAW,OAAO,4BAA4B;AACvJ,UAAM,YAAY,KAAK,IAAI;AAC3B,UAAM,SAAmC;AAAA,MACvC,YAAY,WAAW;AAAA,MACvB,SAAS,WAAW;AAAA,MACpB,QAAQ;AAAA,MACR;AAAA,MACA,gBAAgB,kBAAkB,UAAU;AAAA,MAC5C,WAAW,SAAS,YAAY,KAAK;AAAA,MACrC,WAAW,SAAS,aAAa;AAAA,MACjC,WAAW;AAAA,MACX,GAAI,SAAS,aAAa,UAAU,EAAE,WAAW,SAAS,aAAa,QAAQ,IAAI,CAAC;AAAA,MACpF,GAAI,YAAY,SAAY,CAAC,IAAI,EAAE,WAAW,QAAQ;AAAA,IACxD;AACA,SAAK,QAAQ,IAAI,KAAK,MAAM;AAC5B,WAAO,MAAM,MAAM;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeA,SAAS,YAAoB,SAAiB,SAA4C;AACxF,UAAM,UAAU,KAAK,QAAQ,YAAY,OAAO;AAChD,QAAI,QAAQ,WAAW,QAAS,OAAM,IAAI,MAAM,qBAAqB,UAAU,IAAI,OAAO,kBAAkB;AAC5G,+BAA2B,QAAQ,UAAU;AAC7C,SAAK,qBAAqB,QAAQ,UAAU;AAC5C,WAAO,KAAK,OAAO,SAAS,EAAE,QAAQ,aAAa,GAAI,YAAY,SAAY,CAAC,IAAI,EAAE,WAAW,QAAQ,EAAG,CAAC;AAAA,EAC/G;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeA,QAAQ,YAAoB,SAAiB,SAA2C;AACtF,QAAI,CAAC,QAAQ,KAAK,EAAG,OAAM,IAAI,MAAM,wCAAwC;AAC7E,UAAM,UAAU,KAAK,QAAQ,YAAY,OAAO;AAChD,QAAI,QAAQ,WAAW,YAAa,OAAM,IAAI,MAAM,qBAAqB,UAAU,IAAI,OAAO,qCAAqC;AACnI,WAAO,KAAK,OAAO,SAAS,EAAE,QAAQ,YAAY,YAAY,KAAK,IAAI,GAAG,YAAY,SAAS,WAAW,QAAQ,CAAC;AAAA,EACrH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeA,QAAQ,YAAoB,SAAiB,SAA2C;AACtF,QAAI,CAAC,QAAQ,KAAK,EAAG,OAAM,IAAI,MAAM,yCAAyC;AAC9E,UAAM,UAAU,KAAK,QAAQ,YAAY,OAAO;AAChD,QAAI,QAAQ,WAAW,WAAY,OAAM,IAAI,MAAM,qBAAqB,UAAU,IAAI,OAAO,uCAAuC;AACpI,eAAW,UAAU,KAAK,QAAQ,OAAO,GAAG;AAC1C,UAAI,OAAO,eAAe,cAAc,OAAO,WAAW,YAAa,MAAK,QAAQ,IAAI,KAAK,IAAI,OAAO,YAAY,OAAO,OAAO,GAAG,KAAK,OAAO,QAAQ,EAAE,QAAQ,WAAW,WAAW,KAAK,IAAI,GAAG,WAAW,QAAQ,CAAC,CAAC;AAAA,IAC5N;AACA,WAAO,KAAK,OAAO,SAAS,EAAE,QAAQ,aAAa,aAAa,KAAK,IAAI,GAAG,aAAa,SAAS,WAAW,QAAQ,CAAC;AAAA,EACxH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeA,OAAO,YAAoB,SAAiB,SAA2C;AACrF,QAAI,CAAC,QAAQ,KAAK,EAAG,OAAM,IAAI,MAAM,sCAAsC;AAC3E,UAAM,UAAU,KAAK,QAAQ,YAAY,OAAO;AAChD,QAAI,QAAQ,WAAW,YAAa,OAAM,IAAI,MAAM,qBAAqB,UAAU,IAAI,OAAO,oBAAoB;AAClH,WAAO,KAAK,OAAO,SAAS,EAAE,QAAQ,WAAW,WAAW,KAAK,IAAI,GAAG,WAAW,SAAS,WAAW,QAAQ,CAAC;AAAA,EAClH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,IAAI,YAAoB,SAAuD;AAC7E,UAAM,SAAS,KAAK,QAAQ,IAAI,KAAK,IAAI,YAAY,OAAO,CAAC;AAC7D,WAAO,SAAS,MAAM,MAAM,IAAI;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,aAAa,YAA0D;AACrE,UAAM,SAAS,CAAC,GAAG,KAAK,QAAQ,OAAO,CAAC,EAAE,KAAK,UAAQ,KAAK,eAAe,cAAc,KAAK,WAAW,WAAW;AACpH,WAAO,SAAS,MAAM,MAAM,IAAI;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,KAAK,YAA0D;AAC7D,WAAO,CAAC,GAAG,KAAK,QAAQ,OAAO,CAAC,EAAE,OAAO,YAAU,eAAe,UAAa,OAAO,eAAe,UAAU,EAAE,IAAI,KAAK;AAAA,EAC5H;AAAA,EAEQ,QAAQ,YAAoB,SAA2C;AAC7E,UAAM,SAAS,KAAK,QAAQ,IAAI,KAAK,IAAI,YAAY,OAAO,CAAC;AAC7D,QAAI,CAAC,OAAQ,OAAM,IAAI,MAAM,qBAAqB,UAAU,IAAI,OAAO,iBAAiB;AACxF,WAAO;AAAA,EACT;AAAA,EAEQ,OAAO,SAAmC,OAAoE;AACpH,UAAM,OAAO,EAAE,GAAG,SAAS,GAAG,OAAO,UAAU,QAAQ,WAAW,GAAG,WAAW,KAAK,IAAI,EAAE;AAC3F,SAAK,QAAQ,IAAI,KAAK,IAAI,QAAQ,YAAY,QAAQ,OAAO,GAAG,IAAI;AACpE,WAAO,MAAM,IAAI;AAAA,EACnB;AAAA,EAEQ,IAAI,YAAoB,SAAyB;AAAE,WAAO,GAAG,UAAU,IAAI,OAAO;AAAA,EAAG;AAC/F;AAEA,SAAS,MAAM,QAA4D;AAAE,SAAO,gBAAgB,MAAM;AAAE;","names":[]}