@lssm/lib.contracts 1.41.1 → 1.42.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 (499) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +7 -4
  3. package/dist/_virtual/rolldown_runtime.js +37 -1
  4. package/dist/app-config/app-config.feature.d.ts +11 -0
  5. package/dist/app-config/app-config.feature.js +54 -1
  6. package/dist/app-config/branding.d.ts +55 -0
  7. package/dist/app-config/contracts.d.ts +245 -0
  8. package/dist/app-config/contracts.js +395 -1
  9. package/dist/app-config/docs/app-config.docblock.d.ts +6 -0
  10. package/dist/app-config/docs/app-config.docblock.js +21 -220
  11. package/dist/app-config/events.d.ts +122 -0
  12. package/dist/app-config/events.js +174 -1
  13. package/dist/app-config/index.d.ts +9 -0
  14. package/dist/app-config/index.js +8 -1
  15. package/dist/app-config/lifecycle-contracts.d.ts +273 -0
  16. package/dist/app-config/lifecycle-contracts.js +440 -1
  17. package/dist/app-config/lifecycle.d.ts +27 -0
  18. package/dist/app-config/runtime.d.ts +117 -0
  19. package/dist/app-config/runtime.js +617 -1
  20. package/dist/app-config/spec.d.ts +172 -0
  21. package/dist/app-config/spec.js +36 -1
  22. package/dist/app-config/validation.d.ts +49 -0
  23. package/dist/app-config/validation.js +538 -1
  24. package/dist/capabilities/capabilities.d.ts +48 -0
  25. package/dist/capabilities/capabilities.js +50 -0
  26. package/dist/capabilities/docs/capabilities.docblock.d.ts +6 -0
  27. package/dist/capabilities/docs/capabilities.docblock.js +21 -1
  28. package/dist/capabilities/index.d.ts +3 -0
  29. package/dist/capabilities/index.js +4 -0
  30. package/dist/capabilities/openbanking.d.ts +10 -0
  31. package/dist/capabilities/openbanking.js +92 -1
  32. package/dist/client/index.d.ts +6 -0
  33. package/dist/client/index.js +9 -1
  34. package/dist/client/react/drivers/rn-reusables.d.ts +22 -0
  35. package/dist/client/react/drivers/rn-reusables.js +21 -1
  36. package/dist/client/react/drivers/shadcn.d.ts +12 -0
  37. package/dist/client/react/drivers/shadcn.js +11 -1
  38. package/dist/client/react/feature-render.d.ts +21 -0
  39. package/dist/client/react/feature-render.js +44 -1
  40. package/dist/client/react/form-render.d.ts +92 -0
  41. package/dist/client/react/form-render.js +298 -1
  42. package/dist/client/react/index.d.ts +5 -0
  43. package/dist/client/react/index.js +8 -1
  44. package/dist/contract-registry/index.d.ts +3 -0
  45. package/dist/contract-registry/index.js +3 -1
  46. package/dist/contract-registry/schemas.d.ts +124 -0
  47. package/dist/contract-registry/schemas.js +61 -1
  48. package/dist/contract-registry/types.d.ts +46 -0
  49. package/dist/data-views/data-views.d.ts +138 -0
  50. package/dist/data-views/data-views.js +58 -0
  51. package/dist/data-views/docs/data-views.docblock.d.ts +6 -0
  52. package/dist/data-views/docs/data-views.docblock.js +21 -1
  53. package/dist/data-views/index.d.ts +4 -0
  54. package/dist/data-views/index.js +5 -0
  55. package/dist/data-views/query-generator.d.ts +40 -0
  56. package/dist/data-views/query-generator.js +48 -1
  57. package/dist/data-views/runtime.d.ts +27 -0
  58. package/dist/data-views/runtime.js +39 -1
  59. package/dist/docs/accessibility_wcag_compliance_specs.docblock.d.ts +6 -0
  60. package/dist/docs/accessibility_wcag_compliance_specs.docblock.js +17 -350
  61. package/dist/docs/index.d.ts +6 -0
  62. package/dist/docs/index.js +27 -1
  63. package/dist/docs/meta.docs.d.ts +6 -0
  64. package/dist/docs/meta.docs.js +18 -2
  65. package/dist/docs/presentations.d.ts +33 -0
  66. package/dist/docs/presentations.js +64 -1
  67. package/dist/docs/registry.d.ts +23 -0
  68. package/dist/docs/registry.js +51 -1
  69. package/dist/docs/tech/auth/better-auth-nextjs.docblock.d.ts +6 -0
  70. package/dist/docs/tech/auth/better-auth-nextjs.docblock.js +25 -2
  71. package/dist/docs/tech/contracts/README.docblock.d.ts +6 -0
  72. package/dist/docs/tech/contracts/README.docblock.js +21 -1
  73. package/dist/docs/tech/contracts/create-subscription.docblock.d.ts +6 -0
  74. package/dist/docs/tech/contracts/create-subscription.docblock.js +21 -1
  75. package/dist/docs/tech/contracts/graphql-typed-outputs.docblock.d.ts +6 -0
  76. package/dist/docs/tech/contracts/graphql-typed-outputs.docblock.js +21 -180
  77. package/dist/docs/tech/contracts/migrations.docblock.d.ts +6 -0
  78. package/dist/docs/tech/contracts/migrations.docblock.js +21 -1
  79. package/dist/docs/tech/contracts/openapi-export.docblock.d.ts +6 -0
  80. package/dist/docs/tech/contracts/openapi-export.docblock.js +25 -5
  81. package/dist/docs/tech/contracts/ops-to-presentation-linking.docblock.d.ts +6 -0
  82. package/dist/docs/tech/contracts/ops-to-presentation-linking.docblock.js +19 -60
  83. package/dist/docs/tech/contracts/overlays.docblock.d.ts +6 -0
  84. package/dist/docs/tech/contracts/overlays.docblock.js +21 -68
  85. package/dist/docs/tech/contracts/tests.docblock.d.ts +6 -0
  86. package/dist/docs/tech/contracts/tests.docblock.js +21 -132
  87. package/dist/docs/tech/contracts/themes.docblock.d.ts +6 -0
  88. package/dist/docs/tech/contracts/themes.docblock.js +21 -1
  89. package/dist/docs/tech/contracts/vertical-pocket-family-office.docblock.d.ts +6 -0
  90. package/dist/docs/tech/contracts/vertical-pocket-family-office.docblock.js +21 -106
  91. package/dist/docs/tech/lifecycle-stage-system.docblock.d.ts +6 -0
  92. package/dist/docs/tech/lifecycle-stage-system.docblock.js +17 -213
  93. package/dist/docs/tech/llm/llm-integration.docblock.d.ts +7 -0
  94. package/dist/docs/tech/llm/llm-integration.docblock.js +76 -7
  95. package/dist/docs/tech/mcp-endpoints.docblock.d.ts +6 -0
  96. package/dist/docs/tech/mcp-endpoints.docblock.js +38 -1
  97. package/dist/docs/tech/presentation-runtime.docblock.d.ts +6 -0
  98. package/dist/docs/tech/presentation-runtime.docblock.js +17 -1
  99. package/dist/docs/tech/schema/README.docblock.d.ts +6 -0
  100. package/dist/docs/tech/schema/README.docblock.js +21 -262
  101. package/dist/docs/tech/studio/learning-events.docblock.d.ts +6 -0
  102. package/dist/docs/tech/studio/learning-events.docblock.js +49 -1
  103. package/dist/docs/tech/studio/learning-journeys.docblock.d.ts +6 -0
  104. package/dist/docs/tech/studio/learning-journeys.docblock.js +25 -2
  105. package/dist/docs/tech/studio/platform-admin-panel.docblock.d.ts +6 -0
  106. package/dist/docs/tech/studio/platform-admin-panel.docblock.js +24 -2
  107. package/dist/docs/tech/studio/project-access-teams.docblock.d.ts +6 -0
  108. package/dist/docs/tech/studio/project-access-teams.docblock.js +26 -16
  109. package/dist/docs/tech/studio/project-routing.docblock.d.ts +6 -0
  110. package/dist/docs/tech/studio/project-routing.docblock.js +68 -1
  111. package/dist/docs/tech/studio/sandbox-unlogged.docblock.d.ts +6 -0
  112. package/dist/docs/tech/studio/sandbox-unlogged.docblock.js +23 -2
  113. package/dist/docs/tech/studio/team-invitations.docblock.d.ts +6 -0
  114. package/dist/docs/tech/studio/team-invitations.docblock.js +41 -36
  115. package/dist/docs/tech/studio/workspace-ops.docblock.d.ts +6 -0
  116. package/dist/docs/tech/studio/workspace-ops.docblock.js +48 -1
  117. package/dist/docs/tech/studio/workspaces.docblock.d.ts +6 -0
  118. package/dist/docs/tech/studio/workspaces.docblock.js +24 -2
  119. package/dist/docs/tech/telemetry-ingest.docblock.d.ts +6 -0
  120. package/dist/docs/tech/telemetry-ingest.docblock.js +37 -3
  121. package/dist/docs/tech/templates/runtime.docblock.d.ts +6 -0
  122. package/dist/docs/tech/templates/runtime.docblock.js +21 -1
  123. package/dist/docs/tech/vscode-extension.docblock.d.ts +6 -0
  124. package/dist/docs/tech/vscode-extension.docblock.js +37 -3
  125. package/dist/docs/tech/workflows/overview.docblock.d.ts +6 -0
  126. package/dist/docs/tech/workflows/overview.docblock.js +21 -1
  127. package/dist/docs/tech-contracts.docs.d.ts +6 -0
  128. package/dist/docs/tech-contracts.docs.js +27 -7
  129. package/dist/docs/types.d.ts +41 -0
  130. package/dist/events.d.ts +47 -0
  131. package/dist/events.js +19 -1
  132. package/dist/experiments/docs/experiments.docblock.d.ts +6 -0
  133. package/dist/experiments/docs/experiments.docblock.js +21 -128
  134. package/dist/experiments/evaluator.d.ts +37 -0
  135. package/dist/experiments/evaluator.js +101 -1
  136. package/dist/experiments/spec-resolver.d.ts +17 -0
  137. package/dist/experiments/spec.d.ts +82 -0
  138. package/dist/experiments/spec.js +33 -1
  139. package/dist/features.d.ts +104 -0
  140. package/dist/features.js +91 -1
  141. package/dist/forms/docs/forms.docblock.d.ts +6 -0
  142. package/dist/forms/docs/forms.docblock.js +21 -1
  143. package/dist/forms/forms.d.ts +266 -0
  144. package/dist/forms/forms.js +146 -0
  145. package/dist/forms/index.d.ts +2 -0
  146. package/dist/forms/index.js +3 -0
  147. package/dist/index.d.ts +142 -0
  148. package/dist/index.js +119 -1
  149. package/dist/install.d.ts +77 -0
  150. package/dist/install.js +40 -1
  151. package/dist/integrations/binding.d.ts +17 -0
  152. package/dist/integrations/connection.d.ts +51 -0
  153. package/dist/integrations/docs/integrations.docblock.d.ts +6 -0
  154. package/dist/integrations/docs/integrations.docblock.js +94 -1
  155. package/dist/integrations/health.d.ts +21 -0
  156. package/dist/integrations/health.js +69 -1
  157. package/dist/integrations/index.d.ts +34 -0
  158. package/dist/integrations/index.js +23 -1
  159. package/dist/integrations/integrations.feature.d.ts +11 -0
  160. package/dist/integrations/integrations.feature.js +60 -0
  161. package/dist/integrations/openbanking/contracts/accounts.d.ts +289 -0
  162. package/dist/integrations/openbanking/contracts/accounts.js +236 -1
  163. package/dist/integrations/openbanking/contracts/balances.d.ts +165 -0
  164. package/dist/integrations/openbanking/contracts/balances.js +166 -1
  165. package/dist/integrations/openbanking/contracts/index.d.ts +10 -0
  166. package/dist/integrations/openbanking/contracts/index.js +12 -1
  167. package/dist/integrations/openbanking/contracts/transactions.d.ts +213 -0
  168. package/dist/integrations/openbanking/contracts/transactions.js +217 -1
  169. package/dist/integrations/openbanking/guards.d.ts +12 -0
  170. package/dist/integrations/openbanking/guards.js +33 -1
  171. package/dist/integrations/openbanking/models.d.ts +228 -0
  172. package/dist/integrations/openbanking/models.js +240 -1
  173. package/dist/integrations/openbanking/openbanking.feature.d.ts +11 -0
  174. package/dist/integrations/openbanking/openbanking.feature.js +69 -1
  175. package/dist/integrations/openbanking/telemetry.d.ts +15 -0
  176. package/dist/integrations/openbanking/telemetry.js +39 -1
  177. package/dist/integrations/operations.d.ts +437 -0
  178. package/dist/integrations/operations.js +392 -0
  179. package/dist/integrations/providers/calendar.d.ts +78 -0
  180. package/dist/integrations/providers/elevenlabs.d.ts +7 -0
  181. package/dist/integrations/providers/elevenlabs.js +55 -1
  182. package/dist/integrations/providers/email.d.ts +86 -0
  183. package/dist/integrations/providers/embedding.d.ts +24 -0
  184. package/dist/integrations/providers/gcs-storage.d.ts +7 -0
  185. package/dist/integrations/providers/gcs-storage.js +78 -1
  186. package/dist/integrations/providers/gmail.d.ts +7 -0
  187. package/dist/integrations/providers/gmail.js +90 -1
  188. package/dist/integrations/providers/google-calendar.d.ts +7 -0
  189. package/dist/integrations/providers/google-calendar.js +69 -1
  190. package/dist/integrations/providers/impls/elevenlabs-voice.d.ts +20 -0
  191. package/dist/integrations/providers/impls/elevenlabs-voice.js +95 -1
  192. package/dist/integrations/providers/impls/gcs-storage.d.ts +24 -0
  193. package/dist/integrations/providers/impls/gcs-storage.js +88 -1
  194. package/dist/integrations/providers/impls/gmail-inbound.d.ts +26 -0
  195. package/dist/integrations/providers/impls/gmail-inbound.js +200 -1
  196. package/dist/integrations/providers/impls/gmail-outbound.d.ts +18 -0
  197. package/dist/integrations/providers/impls/gmail-outbound.js +104 -5
  198. package/dist/integrations/providers/impls/google-calendar.d.ts +23 -0
  199. package/dist/integrations/providers/impls/google-calendar.js +154 -1
  200. package/dist/integrations/providers/impls/index.d.ts +15 -0
  201. package/dist/integrations/providers/impls/index.js +16 -1
  202. package/dist/integrations/providers/impls/mistral-embedding.d.ts +23 -0
  203. package/dist/integrations/providers/impls/mistral-embedding.js +41 -1
  204. package/dist/integrations/providers/impls/mistral-llm.d.ts +31 -0
  205. package/dist/integrations/providers/impls/mistral-llm.js +247 -1
  206. package/dist/integrations/providers/impls/postmark-email.d.ts +19 -0
  207. package/dist/integrations/providers/impls/postmark-email.js +55 -1
  208. package/dist/integrations/providers/impls/powens-client.d.ts +124 -0
  209. package/dist/integrations/providers/impls/powens-client.js +171 -1
  210. package/dist/integrations/providers/impls/powens-openbanking.d.ts +27 -0
  211. package/dist/integrations/providers/impls/powens-openbanking.js +218 -1
  212. package/dist/integrations/providers/impls/provider-factory.d.ts +26 -0
  213. package/dist/integrations/providers/impls/provider-factory.js +145 -1
  214. package/dist/integrations/providers/impls/qdrant-vector.d.ts +24 -0
  215. package/dist/integrations/providers/impls/qdrant-vector.js +69 -1
  216. package/dist/integrations/providers/impls/stripe-payments.d.ts +28 -0
  217. package/dist/integrations/providers/impls/stripe-payments.js +202 -1
  218. package/dist/integrations/providers/impls/twilio-sms.d.ts +20 -0
  219. package/dist/integrations/providers/impls/twilio-sms.js +58 -1
  220. package/dist/integrations/providers/index.d.ts +22 -0
  221. package/dist/integrations/providers/index.js +13 -1
  222. package/dist/integrations/providers/llm.d.ts +82 -0
  223. package/dist/integrations/providers/mistral.d.ts +7 -0
  224. package/dist/integrations/providers/mistral.js +71 -1
  225. package/dist/integrations/providers/openbanking.d.ts +128 -0
  226. package/dist/integrations/providers/payments.d.ts +109 -0
  227. package/dist/integrations/providers/postmark.d.ts +7 -0
  228. package/dist/integrations/providers/postmark.js +71 -1
  229. package/dist/integrations/providers/powens.d.ts +7 -0
  230. package/dist/integrations/providers/powens.js +119 -1
  231. package/dist/integrations/providers/qdrant.d.ts +7 -0
  232. package/dist/integrations/providers/qdrant.js +76 -1
  233. package/dist/integrations/providers/registry.d.ts +11 -0
  234. package/dist/integrations/providers/registry.js +34 -1
  235. package/dist/integrations/providers/sms.d.ts +34 -0
  236. package/dist/integrations/providers/storage.d.ts +60 -0
  237. package/dist/integrations/providers/stripe.d.ts +7 -0
  238. package/dist/integrations/providers/stripe.js +86 -1
  239. package/dist/integrations/providers/twilio-sms.d.ts +7 -0
  240. package/dist/integrations/providers/twilio-sms.js +64 -1
  241. package/dist/integrations/providers/vector-store.d.ts +43 -0
  242. package/dist/integrations/providers/voice.d.ts +34 -0
  243. package/dist/integrations/runtime.d.ts +99 -0
  244. package/dist/integrations/runtime.js +186 -1
  245. package/dist/integrations/secrets/aws-secret-manager.d.ts +31 -0
  246. package/dist/integrations/secrets/aws-secret-manager.js +231 -1
  247. package/dist/integrations/secrets/env-secret-provider.d.ts +31 -0
  248. package/dist/integrations/secrets/env-secret-provider.js +81 -1
  249. package/dist/integrations/secrets/gcp-secret-manager.d.ts +32 -0
  250. package/dist/integrations/secrets/gcp-secret-manager.js +229 -1
  251. package/dist/integrations/secrets/index.d.ts +7 -0
  252. package/dist/integrations/secrets/index.js +8 -1
  253. package/dist/integrations/secrets/manager.d.ts +47 -0
  254. package/dist/integrations/secrets/manager.js +103 -1
  255. package/dist/integrations/secrets/provider.d.ts +52 -0
  256. package/dist/integrations/secrets/provider.js +58 -1
  257. package/dist/integrations/secrets/scaleway-secret-manager.d.ts +38 -0
  258. package/dist/integrations/secrets/scaleway-secret-manager.js +247 -1
  259. package/dist/integrations/secrets-types.d.ts +17 -0
  260. package/dist/integrations/spec.d.ts +75 -0
  261. package/dist/integrations/spec.js +39 -1
  262. package/dist/jobs/define-job.d.ts +18 -0
  263. package/dist/jobs/define-job.js +16 -1
  264. package/dist/jobs/gcp-cloud-tasks.d.ts +41 -0
  265. package/dist/jobs/gcp-cloud-tasks.js +53 -1
  266. package/dist/jobs/gcp-pubsub.d.ts +25 -0
  267. package/dist/jobs/gcp-pubsub.js +39 -1
  268. package/dist/jobs/handlers/gmail-sync-handler.d.ts +9 -0
  269. package/dist/jobs/handlers/gmail-sync-handler.js +9 -1
  270. package/dist/jobs/handlers/index.d.ts +9 -0
  271. package/dist/jobs/handlers/index.js +12 -1
  272. package/dist/jobs/handlers/ping-handler.d.ts +10 -0
  273. package/dist/jobs/handlers/ping-handler.js +15 -1
  274. package/dist/jobs/handlers/storage-document-handler.d.ts +12 -0
  275. package/dist/jobs/handlers/storage-document-handler.js +14 -1
  276. package/dist/jobs/index.d.ts +3 -0
  277. package/dist/jobs/index.js +4 -1
  278. package/dist/jobs/memory-queue.d.ts +18 -0
  279. package/dist/jobs/memory-queue.js +71 -1
  280. package/dist/jobs/queue.d.ts +131 -0
  281. package/dist/jobs/queue.js +33 -1
  282. package/dist/jobs/scaleway-sqs-queue.d.ts +30 -0
  283. package/dist/jobs/scaleway-sqs-queue.js +153 -1
  284. package/dist/jsonschema.d.ts +28 -0
  285. package/dist/jsonschema.js +32 -1
  286. package/dist/knowledge/binding.d.ts +25 -0
  287. package/dist/knowledge/docs/knowledge.docblock.d.ts +6 -0
  288. package/dist/knowledge/docs/knowledge.docblock.js +21 -138
  289. package/dist/knowledge/index.d.ts +11 -0
  290. package/dist/knowledge/index.js +10 -1
  291. package/dist/knowledge/ingestion/document-processor.d.ts +24 -0
  292. package/dist/knowledge/ingestion/document-processor.js +54 -1
  293. package/dist/knowledge/ingestion/embedding-service.d.ts +12 -0
  294. package/dist/knowledge/ingestion/embedding-service.js +25 -1
  295. package/dist/knowledge/ingestion/gmail-adapter.d.ts +18 -0
  296. package/dist/knowledge/ingestion/gmail-adapter.js +50 -5
  297. package/dist/knowledge/ingestion/index.d.ts +6 -0
  298. package/dist/knowledge/ingestion/index.js +7 -1
  299. package/dist/knowledge/ingestion/storage-adapter.d.ts +15 -0
  300. package/dist/knowledge/ingestion/storage-adapter.js +26 -1
  301. package/dist/knowledge/ingestion/vector-indexer.d.ts +18 -0
  302. package/dist/knowledge/ingestion/vector-indexer.js +32 -1
  303. package/dist/knowledge/knowledge.feature.d.ts +11 -0
  304. package/dist/knowledge/knowledge.feature.js +61 -0
  305. package/dist/knowledge/operations.d.ts +318 -0
  306. package/dist/knowledge/operations.js +321 -0
  307. package/dist/knowledge/query/index.d.ts +2 -0
  308. package/dist/knowledge/query/index.js +3 -1
  309. package/dist/knowledge/query/service.d.ts +29 -0
  310. package/dist/knowledge/query/service.js +64 -2
  311. package/dist/knowledge/runtime.d.ts +32 -0
  312. package/dist/knowledge/runtime.js +49 -1
  313. package/dist/knowledge/source.d.ts +32 -0
  314. package/dist/knowledge/spaces/email-threads.d.ts +7 -0
  315. package/dist/knowledge/spaces/email-threads.js +37 -1
  316. package/dist/knowledge/spaces/financial-docs.d.ts +7 -0
  317. package/dist/knowledge/spaces/financial-docs.js +37 -1
  318. package/dist/knowledge/spaces/financial-overview.d.ts +7 -0
  319. package/dist/knowledge/spaces/financial-overview.js +41 -1
  320. package/dist/knowledge/spaces/index.d.ts +7 -0
  321. package/dist/knowledge/spaces/index.js +8 -1
  322. package/dist/knowledge/spaces/product-canon.d.ts +7 -0
  323. package/dist/knowledge/spaces/product-canon.js +37 -1
  324. package/dist/knowledge/spaces/support-faq.d.ts +7 -0
  325. package/dist/knowledge/spaces/support-faq.js +40 -1
  326. package/dist/knowledge/spaces/uploaded-docs.d.ts +7 -0
  327. package/dist/knowledge/spaces/uploaded-docs.js +37 -1
  328. package/dist/knowledge/spec.d.ts +48 -0
  329. package/dist/knowledge/spec.js +39 -1
  330. package/dist/llm/exporters.d.ts +69 -0
  331. package/dist/llm/exporters.js +542 -8
  332. package/dist/llm/index.d.ts +4 -0
  333. package/dist/llm/index.js +4 -1
  334. package/dist/llm/prompts.d.ts +52 -0
  335. package/dist/llm/prompts.js +246 -56
  336. package/dist/llm/types.d.ts +214 -0
  337. package/dist/markdown.d.ts +22 -0
  338. package/dist/markdown.js +119 -3
  339. package/dist/migrations.d.ts +52 -0
  340. package/dist/migrations.js +33 -1
  341. package/dist/onboarding-base.d.ts +138 -0
  342. package/dist/onboarding-base.js +195 -1
  343. package/dist/openapi.d.ts +31 -0
  344. package/dist/openapi.js +75 -1
  345. package/dist/operations/index.d.ts +3 -0
  346. package/dist/operations/index.js +4 -0
  347. package/dist/operations/operation.d.ts +180 -0
  348. package/dist/operations/operation.js +35 -0
  349. package/dist/operations/registry.d.ts +103 -0
  350. package/dist/operations/registry.js +252 -0
  351. package/dist/ownership.d.ts +84 -0
  352. package/dist/ownership.js +38 -1
  353. package/dist/policy/docs/policy.docblock.d.ts +6 -0
  354. package/dist/policy/docs/policy.docblock.js +21 -1
  355. package/dist/policy/engine.d.ts +40 -0
  356. package/dist/policy/engine.js +223 -1
  357. package/dist/policy/index.d.ts +5 -0
  358. package/dist/policy/index.js +5 -0
  359. package/dist/policy/opa-adapter.d.ts +45 -0
  360. package/dist/policy/opa-adapter.js +71 -1
  361. package/dist/policy/registry.d.ts +9 -0
  362. package/dist/policy/registry.js +11 -0
  363. package/dist/policy/spec.d.ts +103 -0
  364. package/dist/policy/spec.js +0 -1
  365. package/dist/presentations/docs/presentations-conventions.docblock.d.ts +6 -0
  366. package/dist/presentations/docs/presentations-conventions.docblock.js +20 -7
  367. package/dist/presentations/index.d.ts +4 -0
  368. package/dist/presentations/index.js +5 -0
  369. package/dist/presentations/presentations.d.ts +50 -0
  370. package/dist/presentations/presentations.js +7 -0
  371. package/dist/presentations/registry.d.ts +10 -0
  372. package/dist/presentations/registry.js +12 -0
  373. package/dist/presentations/transform-engine.d.ts +66 -0
  374. package/dist/presentations/transform-engine.js +282 -0
  375. package/dist/prompt.d.ts +60 -0
  376. package/dist/prompt.js +10 -1
  377. package/dist/promptRegistry.d.ts +15 -0
  378. package/dist/promptRegistry.js +34 -1
  379. package/dist/regenerator/adapters.d.ts +19 -0
  380. package/dist/regenerator/docs/regenerator.docblock.d.ts +6 -0
  381. package/dist/regenerator/docs/regenerator.docblock.js +21 -184
  382. package/dist/regenerator/executor.d.ts +70 -0
  383. package/dist/regenerator/executor.js +86 -1
  384. package/dist/regenerator/index.d.ts +7 -0
  385. package/dist/regenerator/index.js +6 -1
  386. package/dist/regenerator/service.d.ts +33 -0
  387. package/dist/regenerator/service.js +92 -1
  388. package/dist/regenerator/sinks.d.ts +26 -0
  389. package/dist/regenerator/sinks.js +32 -1
  390. package/dist/regenerator/types.d.ts +107 -0
  391. package/dist/regenerator/utils.d.ts +9 -0
  392. package/dist/regenerator/utils.js +51 -1
  393. package/dist/registry-utils.d.ts +106 -0
  394. package/dist/registry-utils.js +122 -0
  395. package/dist/registry.d.ts +30 -0
  396. package/dist/registry.js +58 -1
  397. package/dist/resources.d.ts +64 -0
  398. package/dist/resources.js +50 -1
  399. package/dist/schema-to-markdown.d.ts +54 -0
  400. package/dist/schema-to-markdown.js +214 -10
  401. package/dist/server/contracts-adapter-hydration.d.ts +15 -0
  402. package/dist/server/contracts-adapter-hydration.js +41 -0
  403. package/dist/server/contracts-adapter-input.d.ts +9 -0
  404. package/dist/server/contracts-adapter-input.js +77 -0
  405. package/dist/server/graphql-pothos.d.ts +31 -0
  406. package/dist/server/graphql-pothos.js +127 -1
  407. package/dist/server/index.d.ts +9 -0
  408. package/dist/server/index.js +10 -1
  409. package/dist/server/mcp/createMcpServer.d.ts +15 -0
  410. package/dist/server/mcp/createMcpServer.js +28 -1
  411. package/dist/server/mcp/mcpTypes.d.ts +30 -0
  412. package/dist/server/mcp/registerPresentations.d.ts +7 -0
  413. package/dist/server/mcp/registerPresentations.js +112 -1
  414. package/dist/server/mcp/registerPrompts.d.ts +8 -0
  415. package/dist/server/mcp/registerPrompts.js +36 -2
  416. package/dist/server/mcp/registerResources.d.ts +8 -0
  417. package/dist/server/mcp/registerResources.js +35 -1
  418. package/dist/server/mcp/registerTools.d.ts +8 -0
  419. package/dist/server/mcp/registerTools.js +22 -1
  420. package/dist/server/provider-mcp.d.ts +2 -0
  421. package/dist/server/provider-mcp.js +3 -1
  422. package/dist/server/rest-elysia.d.ts +40 -0
  423. package/dist/server/rest-elysia.js +20 -1
  424. package/dist/server/rest-express.d.ts +16 -0
  425. package/dist/server/rest-express.js +36 -1
  426. package/dist/server/rest-generic.d.ts +32 -0
  427. package/dist/server/rest-generic.js +124 -1
  428. package/dist/server/rest-next-app.d.ts +35 -0
  429. package/dist/server/rest-next-app.js +38 -1
  430. package/dist/server/rest-next-mcp.d.ts +11 -0
  431. package/dist/server/rest-next-mcp.js +45 -1
  432. package/dist/server/rest-next-pages.d.ts +9 -0
  433. package/dist/server/rest-next-pages.js +22 -1
  434. package/dist/telemetry/anomaly.d.ts +27 -0
  435. package/dist/telemetry/anomaly.js +48 -1
  436. package/dist/telemetry/docs/telemetry.docblock.d.ts +6 -0
  437. package/dist/telemetry/docs/telemetry.docblock.js +21 -139
  438. package/dist/telemetry/index.d.ts +4 -0
  439. package/dist/telemetry/index.js +5 -1
  440. package/dist/telemetry/spec.d.ts +91 -0
  441. package/dist/telemetry/spec.js +69 -1
  442. package/dist/telemetry/tracker.d.ts +51 -0
  443. package/dist/telemetry/tracker.js +76 -1
  444. package/dist/tests/index.d.ts +3 -0
  445. package/dist/tests/index.js +4 -1
  446. package/dist/tests/runner.d.ts +43 -0
  447. package/dist/tests/runner.js +150 -1
  448. package/dist/tests/spec.d.ts +89 -0
  449. package/dist/tests/spec.js +33 -1
  450. package/dist/themes.d.ts +53 -0
  451. package/dist/themes.js +39 -1
  452. package/dist/translations/catalog.d.ts +28 -0
  453. package/dist/translations/tenant.d.ts +15 -0
  454. package/dist/types.d.ts +92 -0
  455. package/dist/workflow/adapters/db-adapter.d.ts +46 -0
  456. package/dist/workflow/adapters/db-adapter.js +83 -1
  457. package/dist/workflow/adapters/file-adapter.d.ts +14 -0
  458. package/dist/workflow/adapters/file-adapter.js +11 -1
  459. package/dist/workflow/adapters/index.d.ts +4 -0
  460. package/dist/workflow/adapters/index.js +5 -1
  461. package/dist/workflow/adapters/memory-store.d.ts +18 -0
  462. package/dist/workflow/adapters/memory-store.js +58 -1
  463. package/dist/workflow/expression.d.ts +9 -0
  464. package/dist/workflow/expression.js +99 -1
  465. package/dist/workflow/index.d.ts +10 -0
  466. package/dist/workflow/index.js +9 -1
  467. package/dist/workflow/runner.d.ts +74 -0
  468. package/dist/workflow/runner.js +337 -1
  469. package/dist/workflow/sla-monitor.d.ts +20 -0
  470. package/dist/workflow/sla-monitor.js +47 -1
  471. package/dist/workflow/spec.d.ts +105 -0
  472. package/dist/workflow/spec.js +55 -1
  473. package/dist/workflow/state.d.ts +35 -0
  474. package/dist/workflow/validation.d.ts +29 -0
  475. package/dist/workflow/validation.js +176 -1
  476. package/dist/workspace-config/contractsrc-schema.d.ts +786 -0
  477. package/dist/workspace-config/contractsrc-schema.js +247 -0
  478. package/dist/workspace-config/index.d.ts +2 -0
  479. package/dist/workspace-config/index.js +3 -0
  480. package/package.json +286 -266
  481. package/dist/capabilities.js +0 -1
  482. package/dist/contracts-adapter-hydration.js +0 -1
  483. package/dist/contracts-adapter-input.js +0 -1
  484. package/dist/data-views.js +0 -1
  485. package/dist/docs/PUBLISHING.docblock.js +0 -76
  486. package/dist/docs/tech/PHASE_1_QUICKSTART.docblock.js +0 -383
  487. package/dist/docs/tech/PHASE_2_AI_NATIVE_OPERATIONS.docblock.js +0 -68
  488. package/dist/docs/tech/PHASE_3_AUTO_EVOLUTION.docblock.js +0 -140
  489. package/dist/docs/tech/PHASE_4_PERSONALIZATION_ENGINE.docblock.js +0 -86
  490. package/dist/docs/tech/PHASE_5_ZERO_TOUCH_OPERATIONS.docblock.js +0 -1
  491. package/dist/forms.js +0 -1
  492. package/dist/integrations/contracts.js +0 -1
  493. package/dist/knowledge/contracts.js +0 -1
  494. package/dist/openbanking/docs/openbanking.docblock.js +0 -109
  495. package/dist/presentations.backcompat.js +0 -1
  496. package/dist/presentations.js +0 -1
  497. package/dist/presentations.v2.js +0 -7
  498. package/dist/spec.js +0 -1
  499. /package/dist/{types/all.js → integrations/secrets-types.js} +0 -0
@@ -1 +1,337 @@
1
- import{evaluateExpression as e}from"./expression.js";import{randomUUID as t}from"node:crypto";var n=class{constructor(e){this.config=e}async preFlightCheck(e,t,n){let r=this.getSpec(e,t);return this.performPreFlight(r,n)}async start(e,n,i){let a=this.getSpec(e,n),o=r(a),s=new Date,l=t(),u={workflowId:l,workflowName:a.meta.name,workflowVersion:a.meta.version,currentStep:o,data:{...i??{}},retryCounts:{},history:[],status:`running`,createdAt:s,updatedAt:s},d=this.config.appConfigProvider?await this.config.appConfigProvider(u):void 0,f=await this.performPreFlight(a,d);if(!f.canStart)throw new c(f.issues);return await this.config.stateStore.create(u),this.emit(`workflow.started`,{workflowId:l,workflowName:a.meta.name,workflowVersion:a.meta.version,currentStep:o}),l}async executeStep(e,t){let n=await this.getStateOrThrow(e);if(s(n.status))throw Error(`Workflow ${e} is in terminal status "${n.status}".`);let r=this.getSpec(n.workflowName,n.workflowVersion),c=i(r,n.currentStep);if(!await this.evaluateGuard(c,n,t))throw Error(`GuardRejected: ${n.workflowName} -> ${c.id}`);let l={stepId:c.id,startedAt:new Date,status:`running`,input:t},u={...n,data:{...n.data},history:[...n.history]};try{let i=await this.runStepAction(c,u,t);l.output=i,l.status=`completed`,l.completedAt=new Date,u.history.push(l),u.updatedAt=new Date,o(t)&&(u.data={...u.data,...t}),o(i)&&(u.data={...u.data,...i});let s=this.pickNextStepId(r,u,c,t,i);if(s)u.currentStep=s,u.status=`running`;else if(!a(r,c.id))u.status=`completed`;else throw Error(`No transition matched after executing step "${c.id}".`);await this.config.stateStore.update(e,()=>u),this.emit(`workflow.step_completed`,{workflowId:e,workflowName:n.workflowName,stepId:c.id,status:u.status})}catch(i){if(l.status=`failed`,l.completedAt=new Date,l.error=i instanceof Error?i.message:String(i),u.history.push(l),u.updatedAt=new Date,c.retry){let r=n.retryCounts?.[c.id]??0;if(r<c.retry.maxAttempts){let i=c.retry.backoff??`exponential`,a=c.retry.delayMs??1e3,o=i===`exponential`?a*2**r:a,s=Math.min(o,c.retry.maxDelayMs??1/0);return u.retryCounts={...n.retryCounts??{},[c.id]:r+1},u.status=`running`,await this.config.stateStore.update(e,()=>u),this.emit(`workflow.step_retrying`,{workflowId:e,workflowName:n.workflowName,stepId:c.id,attempt:r+1,delay:s,error:l.error}),await new Promise(e=>setTimeout(e,s)),this.executeStep(e,t)}}throw u.status=`failed`,await this.config.stateStore.update(e,()=>u),this.emit(`workflow.step_failed`,{workflowId:e,workflowName:n.workflowName,stepId:c.id,error:l.error??`unknown`}),r.definition.compensation?.trigger===`on_failure`&&await this.rollback(e),i}}async rollback(e){let t=await this.getStateOrThrow(e),n=this.getSpec(t.workflowName,t.workflowVersion);if(!n.definition.compensation)return;this.emit(`workflow.rollback_started`,{workflowId:e});let r=t.history.filter(e=>e.status===`completed`).reverse();for(let a of r){let r=n.definition.compensation.steps.find(e=>e.stepId===a.stepId);if(r){let o={stepId:a.stepId,originalInput:a.input,originalOutput:a.output,workflowData:t.data};try{let s=i(n,a.stepId),c=this.config.appConfigProvider?await this.config.appConfigProvider(t):void 0,l={workflow:t,step:s,resolvedAppConfig:c,integrations:c?.integrations??[],knowledge:c?.knowledge??[],branding:c?.branding,translation:c?.translation,translationResolver:this.config.translationResolver,secretProvider:this.config.secretProvider};await this.config.opExecutor(r.operation,o,l),this.emit(`workflow.compensation_step_completed`,{workflowId:e,stepId:a.stepId,compensationOp:r.operation.name})}catch(t){let n=t instanceof Error?t.message:String(t);this.emit(`workflow.compensation_step_failed`,{workflowId:e,stepId:a.stepId,compensationOp:r.operation.name,error:n})}}}this.emit(`workflow.rollback_completed`,{workflowId:e})}async getState(e){return this.getStateOrThrow(e)}async cancel(e){let t=await this.getStateOrThrow(e);if(t.status===`cancelled`)return;let n={...t,status:`cancelled`,updatedAt:new Date};await this.config.stateStore.update(e,()=>n),this.emit(`workflow.cancelled`,{workflowId:e,workflowName:t.workflowName})}async performPreFlight(e,t){if(!t)return{canStart:!0,issues:[]};let n=[],r=new Map;for(let e of t.integrations)r.set(e.slot.slotId,e);for(let t of e.definition.steps)for(let e of t.requiredIntegrations??[]){let i=r.get(e);if(!i){n.push({stepId:t.id,type:`integration`,identifier:e,severity:`error`,reason:`Integration slot "${e}" is not bound in the resolved app config.`});continue}let a=i.connection.status;a===`disconnected`||a===`error`?n.push({stepId:t.id,type:`integration`,identifier:e,severity:`error`,reason:`Integration slot "${e}" is in status "${a}".`}):a===`unknown`&&n.push({stepId:t.id,type:`integration`,identifier:e,severity:`warning`,reason:`Integration slot "${e}" reports unknown health status.`})}let i=new Set(t.capabilities.enabled.map(l));for(let t of e.definition.steps)for(let e of t.requiredCapabilities??[])i.has(l(e))||n.push({stepId:t.id,type:`capability`,identifier:l(e),severity:`error`,reason:`Capability "${e.key}@${e.version}" is not enabled.`});return{canStart:n.every(e=>e.severity!==`error`),issues:n}}async evaluateGuard(t,n,r){return t.guard?this.config.guardEvaluator?this.config.guardEvaluator(t.guard,{workflow:n,step:t,input:r}):t.guard.type===`expression`?e(t.guard.value,{data:n.data,input:r}):!0:!0}async runStepAction(e,t,n){if(e.type===`automation`){let r=e.action?.operation;if(!r)throw Error(`Automation step "${e.id}" requires an operation.`);let i=this.config.appConfigProvider?await this.config.appConfigProvider(t):void 0,a={workflow:t,step:e,resolvedAppConfig:i,integrations:i?.integrations??[],knowledge:i?.knowledge??[],branding:i?.branding,translation:i?.translation,translationResolver:this.config.translationResolver,secretProvider:this.config.secretProvider};return this.config.enforceCapabilities&&await this.config.enforceCapabilities(r,a),this.config.opExecutor(r,n,a)}return e.type,n}pickNextStepId(t,n,r,i,a){let o=t.definition.transitions.filter(e=>e.from===r.id);for(let r of o)if(e(r.condition,{data:n.data,input:i,output:a})){let e=t.definition.steps.find(e=>e.id===r.to);if(!e)throw Error(`Transition ${r.from} -> ${r.to} points to missing step.`);return e.id}return null}getSpec(e,t){let n=this.config.registry.get(e,t);if(!n)throw Error(`Workflow spec not found for ${e}${t?`.v${t}`:``}`);return n}async getStateOrThrow(e){let t=await this.config.stateStore.get(e);if(!t)throw Error(`Workflow state not found for ${e}`);return t}emit(e,t){this.config.eventEmitter?.(e,t)}};function r(e){let t=e.definition.entryStepId??e.definition.steps[0]?.id??null;if(!t)throw Error(`Workflow ${e.meta.name}.v${e.meta.version} has no entry step.`);return t}function i(e,t){let n=e.definition.steps.find(e=>e.id===t);if(!n)throw Error(`Step "${t}" not found in workflow ${e.meta.name}.v${e.meta.version}.`);return n}function a(e,t){return e.definition.transitions.some(e=>e.from===t)}function o(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function s(e){return e===`completed`||e===`failed`||e===`cancelled`}var c=class extends Error{constructor(e){super(`Workflow pre-flight failed: ${e.filter(e=>e.severity===`error`).map(e=>`${e.type}:${e.identifier}`).join(`, `)}`),this.issues=e,this.name=`WorkflowPreFlightError`}};function l(e){return`${e.key}@${e.version}`}export{c as WorkflowPreFlightError,n as WorkflowRunner};
1
+ import { evaluateExpression } from "./expression.js";
2
+ import { randomUUID } from "node:crypto";
3
+
4
+ //#region src/workflow/runner.ts
5
+ var WorkflowRunner = class {
6
+ constructor(config) {
7
+ this.config = config;
8
+ }
9
+ async preFlightCheck(workflowName, version, resolvedConfig) {
10
+ const spec = this.getSpec(workflowName, version);
11
+ return this.performPreFlight(spec, resolvedConfig);
12
+ }
13
+ async start(workflowName, version, initialData) {
14
+ const spec = this.getSpec(workflowName, version);
15
+ const entryStepId = resolveEntryStepId(spec);
16
+ const now = /* @__PURE__ */ new Date();
17
+ const workflowId = randomUUID();
18
+ const state = {
19
+ workflowId,
20
+ workflowName: spec.meta.key,
21
+ workflowVersion: spec.meta.version,
22
+ currentStep: entryStepId,
23
+ data: { ...initialData ?? {} },
24
+ retryCounts: {},
25
+ history: [],
26
+ status: "running",
27
+ createdAt: now,
28
+ updatedAt: now
29
+ };
30
+ const resolvedAppConfig = this.config.appConfigProvider ? await this.config.appConfigProvider(state) : void 0;
31
+ const preFlightResult = await this.performPreFlight(spec, resolvedAppConfig);
32
+ if (!preFlightResult.canStart) throw new WorkflowPreFlightError(preFlightResult.issues);
33
+ await this.config.stateStore.create(state);
34
+ this.emit("workflow.started", {
35
+ workflowId,
36
+ workflowName: spec.meta.key,
37
+ workflowVersion: spec.meta.version,
38
+ currentStep: entryStepId
39
+ });
40
+ return workflowId;
41
+ }
42
+ async executeStep(workflowId, input) {
43
+ const state = await this.getStateOrThrow(workflowId);
44
+ if (isTerminalStatus(state.status)) throw new Error(`Workflow ${workflowId} is in terminal status "${state.status}".`);
45
+ const spec = this.getSpec(state.workflowName, state.workflowVersion);
46
+ const step = getCurrentStep(spec, state.currentStep);
47
+ if (!await this.evaluateGuard(step, state, input)) throw new Error(`GuardRejected: ${state.workflowName} -> ${step.id}`);
48
+ const execution = {
49
+ stepId: step.id,
50
+ startedAt: /* @__PURE__ */ new Date(),
51
+ status: "running",
52
+ input
53
+ };
54
+ const workingState = {
55
+ ...state,
56
+ data: { ...state.data },
57
+ history: [...state.history]
58
+ };
59
+ try {
60
+ const output = await this.runStepAction(step, workingState, input);
61
+ execution.output = output;
62
+ execution.status = "completed";
63
+ execution.completedAt = /* @__PURE__ */ new Date();
64
+ workingState.history.push(execution);
65
+ workingState.updatedAt = /* @__PURE__ */ new Date();
66
+ if (isRecord(input)) workingState.data = {
67
+ ...workingState.data,
68
+ ...input
69
+ };
70
+ if (isRecord(output)) workingState.data = {
71
+ ...workingState.data,
72
+ ...output
73
+ };
74
+ const nextStepId = this.pickNextStepId(spec, workingState, step, input, output);
75
+ if (nextStepId) {
76
+ workingState.currentStep = nextStepId;
77
+ workingState.status = "running";
78
+ } else if (!hasOutgoing(spec, step.id)) workingState.status = "completed";
79
+ else throw new Error(`No transition matched after executing step "${step.id}".`);
80
+ await this.config.stateStore.update(workflowId, () => workingState);
81
+ this.emit("workflow.step_completed", {
82
+ workflowId,
83
+ workflowName: state.workflowName,
84
+ stepId: step.id,
85
+ status: workingState.status
86
+ });
87
+ } catch (error) {
88
+ execution.status = "failed";
89
+ execution.completedAt = /* @__PURE__ */ new Date();
90
+ execution.error = error instanceof Error ? error.message : String(error);
91
+ workingState.history.push(execution);
92
+ workingState.updatedAt = /* @__PURE__ */ new Date();
93
+ if (step.retry) {
94
+ const retries = state.retryCounts?.[step.id] ?? 0;
95
+ if (retries < step.retry.maxAttempts) {
96
+ const backoff = step.retry.backoff ?? "exponential";
97
+ const baseDelay = step.retry.delayMs ?? 1e3;
98
+ const delay = backoff === "exponential" ? baseDelay * Math.pow(2, retries) : baseDelay;
99
+ const cappedDelay = Math.min(delay, step.retry.maxDelayMs ?? Infinity);
100
+ workingState.retryCounts = {
101
+ ...state.retryCounts ?? {},
102
+ [step.id]: retries + 1
103
+ };
104
+ workingState.status = "running";
105
+ await this.config.stateStore.update(workflowId, () => workingState);
106
+ this.emit("workflow.step_retrying", {
107
+ workflowId,
108
+ workflowName: state.workflowName,
109
+ stepId: step.id,
110
+ attempt: retries + 1,
111
+ delay: cappedDelay,
112
+ error: execution.error
113
+ });
114
+ await new Promise((resolve) => setTimeout(resolve, cappedDelay));
115
+ return this.executeStep(workflowId, input);
116
+ }
117
+ }
118
+ workingState.status = "failed";
119
+ await this.config.stateStore.update(workflowId, () => workingState);
120
+ this.emit("workflow.step_failed", {
121
+ workflowId,
122
+ workflowName: state.workflowName,
123
+ stepId: step.id,
124
+ error: execution.error ?? "unknown"
125
+ });
126
+ if (spec.definition.compensation?.trigger === "on_failure") await this.rollback(workflowId);
127
+ throw error;
128
+ }
129
+ }
130
+ async rollback(workflowId) {
131
+ const state = await this.getStateOrThrow(workflowId);
132
+ const spec = this.getSpec(state.workflowName, state.workflowVersion);
133
+ if (!spec.definition.compensation) return;
134
+ this.emit("workflow.rollback_started", { workflowId });
135
+ const completedSteps = state.history.filter((h) => h.status === "completed").reverse();
136
+ for (const execution of completedSteps) {
137
+ const compStep = spec.definition.compensation.steps.find((s) => s.stepId === execution.stepId);
138
+ if (compStep) {
139
+ const input = {
140
+ stepId: execution.stepId,
141
+ originalInput: execution.input,
142
+ originalOutput: execution.output,
143
+ workflowData: state.data
144
+ };
145
+ try {
146
+ const step = getCurrentStep(spec, execution.stepId);
147
+ const resolvedAppConfig = this.config.appConfigProvider ? await this.config.appConfigProvider(state) : void 0;
148
+ const executorContext = {
149
+ workflow: state,
150
+ step,
151
+ resolvedAppConfig,
152
+ integrations: resolvedAppConfig?.integrations ?? [],
153
+ knowledge: resolvedAppConfig?.knowledge ?? [],
154
+ branding: resolvedAppConfig?.branding,
155
+ translation: resolvedAppConfig?.translation,
156
+ translationResolver: this.config.translationResolver,
157
+ secretProvider: this.config.secretProvider
158
+ };
159
+ await this.config.opExecutor(compStep.operation, input, executorContext);
160
+ this.emit("workflow.compensation_step_completed", {
161
+ workflowId,
162
+ stepId: execution.stepId,
163
+ compensationOp: compStep.operation.key
164
+ });
165
+ } catch (error) {
166
+ const errorMessage = error instanceof Error ? error.message : String(error);
167
+ this.emit("workflow.compensation_step_failed", {
168
+ workflowId,
169
+ stepId: execution.stepId,
170
+ compensationOp: compStep.operation.key,
171
+ error: errorMessage
172
+ });
173
+ }
174
+ }
175
+ }
176
+ this.emit("workflow.rollback_completed", { workflowId });
177
+ }
178
+ async getState(workflowId) {
179
+ return this.getStateOrThrow(workflowId);
180
+ }
181
+ async cancel(workflowId) {
182
+ const state = await this.getStateOrThrow(workflowId);
183
+ if (state.status === "cancelled") return;
184
+ const nextState = {
185
+ ...state,
186
+ status: "cancelled",
187
+ updatedAt: /* @__PURE__ */ new Date()
188
+ };
189
+ await this.config.stateStore.update(workflowId, () => nextState);
190
+ this.emit("workflow.cancelled", {
191
+ workflowId,
192
+ workflowName: state.workflowName
193
+ });
194
+ }
195
+ async performPreFlight(spec, resolvedConfig) {
196
+ if (!resolvedConfig) return {
197
+ canStart: true,
198
+ issues: []
199
+ };
200
+ const issues = [];
201
+ const integrationBySlot = /* @__PURE__ */ new Map();
202
+ for (const integration of resolvedConfig.integrations) integrationBySlot.set(integration.slot.slotId, integration);
203
+ for (const step of spec.definition.steps) for (const slotId of step.requiredIntegrations ?? []) {
204
+ const integration = integrationBySlot.get(slotId);
205
+ if (!integration) {
206
+ issues.push({
207
+ stepId: step.id,
208
+ type: "integration",
209
+ identifier: slotId,
210
+ severity: "error",
211
+ reason: `Integration slot "${slotId}" is not bound in the resolved app config.`
212
+ });
213
+ continue;
214
+ }
215
+ const status = integration.connection.status;
216
+ if (status === "disconnected" || status === "error") issues.push({
217
+ stepId: step.id,
218
+ type: "integration",
219
+ identifier: slotId,
220
+ severity: "error",
221
+ reason: `Integration slot "${slotId}" is in status "${status}".`
222
+ });
223
+ else if (status === "unknown") issues.push({
224
+ stepId: step.id,
225
+ type: "integration",
226
+ identifier: slotId,
227
+ severity: "warning",
228
+ reason: `Integration slot "${slotId}" reports unknown health status.`
229
+ });
230
+ }
231
+ const enabledCapabilities = new Set(resolvedConfig.capabilities.enabled.map(capabilityKey));
232
+ for (const step of spec.definition.steps) for (const required of step.requiredCapabilities ?? []) if (!enabledCapabilities.has(capabilityKey(required))) issues.push({
233
+ stepId: step.id,
234
+ type: "capability",
235
+ identifier: capabilityKey(required),
236
+ severity: "error",
237
+ reason: `Capability "${required.key}@${required.version}" is not enabled.`
238
+ });
239
+ return {
240
+ canStart: issues.every((issue) => issue.severity !== "error"),
241
+ issues
242
+ };
243
+ }
244
+ async evaluateGuard(step, state, input) {
245
+ if (!step.guard) return true;
246
+ if (this.config.guardEvaluator) return this.config.guardEvaluator(step.guard, {
247
+ workflow: state,
248
+ step,
249
+ input
250
+ });
251
+ if (step.guard.type === "expression") return evaluateExpression(step.guard.value, {
252
+ data: state.data,
253
+ input
254
+ });
255
+ return true;
256
+ }
257
+ async runStepAction(step, state, input) {
258
+ if (step.type === "automation") {
259
+ const op = step.action?.operation;
260
+ if (!op) throw new Error(`Automation step "${step.id}" requires an operation.`);
261
+ const resolvedAppConfig = this.config.appConfigProvider ? await this.config.appConfigProvider(state) : void 0;
262
+ const executorContext = {
263
+ workflow: state,
264
+ step,
265
+ resolvedAppConfig,
266
+ integrations: resolvedAppConfig?.integrations ?? [],
267
+ knowledge: resolvedAppConfig?.knowledge ?? [],
268
+ branding: resolvedAppConfig?.branding,
269
+ translation: resolvedAppConfig?.translation,
270
+ translationResolver: this.config.translationResolver,
271
+ secretProvider: this.config.secretProvider
272
+ };
273
+ if (this.config.enforceCapabilities) await this.config.enforceCapabilities(op, executorContext);
274
+ return this.config.opExecutor(op, input, executorContext);
275
+ }
276
+ if (step.type === "human") return input;
277
+ return input;
278
+ }
279
+ pickNextStepId(spec, state, step, input, output) {
280
+ const transitions = spec.definition.transitions.filter((t) => t.from === step.id);
281
+ for (const transition of transitions) if (evaluateExpression(transition.condition, {
282
+ data: state.data,
283
+ input,
284
+ output
285
+ })) {
286
+ const target = spec.definition.steps.find((s) => s.id === transition.to);
287
+ if (!target) throw new Error(`Transition ${transition.from} -> ${transition.to} points to missing step.`);
288
+ return target.id;
289
+ }
290
+ return null;
291
+ }
292
+ getSpec(name, version) {
293
+ const spec = this.config.registry.get(name, version);
294
+ if (!spec) throw new Error(`Workflow spec not found for ${name}${version ? `.v${version}` : ""}`);
295
+ return spec;
296
+ }
297
+ async getStateOrThrow(workflowId) {
298
+ const state = await this.config.stateStore.get(workflowId);
299
+ if (!state) throw new Error(`Workflow state not found for ${workflowId}`);
300
+ return state;
301
+ }
302
+ emit(event, payload) {
303
+ this.config.eventEmitter?.(event, payload);
304
+ }
305
+ };
306
+ function resolveEntryStepId(spec) {
307
+ const entry = spec.definition.entryStepId ?? spec.definition.steps[0]?.id ?? null;
308
+ if (!entry) throw new Error(`Workflow ${spec.meta.key}.v${spec.meta.version} has no entry step.`);
309
+ return entry;
310
+ }
311
+ function getCurrentStep(spec, stepId) {
312
+ const step = spec.definition.steps.find((s) => s.id === stepId);
313
+ if (!step) throw new Error(`Step "${stepId}" not found in workflow ${spec.meta.key}.v${spec.meta.version}.`);
314
+ return step;
315
+ }
316
+ function hasOutgoing(spec, stepId) {
317
+ return spec.definition.transitions.some((t) => t.from === stepId);
318
+ }
319
+ function isRecord(value) {
320
+ return value != null && typeof value === "object" && !Array.isArray(value);
321
+ }
322
+ function isTerminalStatus(status) {
323
+ return status === "completed" || status === "failed" || status === "cancelled";
324
+ }
325
+ var WorkflowPreFlightError = class extends Error {
326
+ constructor(issues) {
327
+ super(`Workflow pre-flight failed: ${issues.filter((issue) => issue.severity === "error").map((issue) => `${issue.type}:${issue.identifier}`).join(", ")}`);
328
+ this.issues = issues;
329
+ this.name = "WorkflowPreFlightError";
330
+ }
331
+ };
332
+ function capabilityKey(ref) {
333
+ return `${ref.key}@${ref.version}`;
334
+ }
335
+
336
+ //#endregion
337
+ export { WorkflowPreFlightError, WorkflowRunner };
@@ -0,0 +1,20 @@
1
+ import { WorkflowSpec } from "./spec.js";
2
+ import { WorkflowState } from "./state.js";
3
+
4
+ //#region src/workflow/sla-monitor.d.ts
5
+ interface SLABreachEvent {
6
+ workflowId: string;
7
+ workflowName: string;
8
+ type: 'workflow_duration' | 'step_duration';
9
+ stepId?: string;
10
+ expectedMs: number;
11
+ actualMs: number;
12
+ breachedAt: Date;
13
+ }
14
+ declare class SLAMonitor {
15
+ private readonly eventEmitter;
16
+ constructor(eventEmitter: (event: string, payload: SLABreachEvent) => void);
17
+ check(state: WorkflowState, spec: WorkflowSpec): void;
18
+ }
19
+ //#endregion
20
+ export { SLABreachEvent, SLAMonitor };
@@ -1 +1,47 @@
1
- var e=class{constructor(e){this.eventEmitter=e}check(e,t){let n=t.definition.sla;if(!n)return;let r=new Date().getTime();if(n.totalDurationMs){let t=r-e.createdAt.getTime();t>n.totalDurationMs&&(e.status===`running`||e.status===`paused`)&&this.eventEmitter(`workflow.sla_breach`,{workflowId:e.workflowId,workflowName:e.workflowName,type:`workflow_duration`,expectedMs:n.totalDurationMs,actualMs:t,breachedAt:new Date})}if(n.stepDurationMs&&e.status===`running`&&e.currentStep){let t=e.history.find(t=>t.stepId===e.currentStep&&t.status===`running`);if(t){let i=n.stepDurationMs[e.currentStep];if(i){let n=r-t.startedAt.getTime();n>i&&this.eventEmitter(`workflow.sla_breach`,{workflowId:e.workflowId,workflowName:e.workflowName,type:`step_duration`,stepId:e.currentStep,expectedMs:i,actualMs:n,breachedAt:new Date})}}}}};export{e as SLAMonitor};
1
+ //#region src/workflow/sla-monitor.ts
2
+ var SLAMonitor = class {
3
+ constructor(eventEmitter) {
4
+ this.eventEmitter = eventEmitter;
5
+ }
6
+ check(state, spec) {
7
+ const sla = spec.definition.sla;
8
+ if (!sla) return;
9
+ const now = (/* @__PURE__ */ new Date()).getTime();
10
+ if (sla.totalDurationMs) {
11
+ const duration = now - state.createdAt.getTime();
12
+ if (duration > sla.totalDurationMs) {
13
+ if (state.status === "running" || state.status === "paused") this.eventEmitter("workflow.sla_breach", {
14
+ workflowId: state.workflowId,
15
+ workflowName: state.workflowName,
16
+ type: "workflow_duration",
17
+ expectedMs: sla.totalDurationMs,
18
+ actualMs: duration,
19
+ breachedAt: /* @__PURE__ */ new Date()
20
+ });
21
+ }
22
+ }
23
+ if (sla.stepDurationMs) {
24
+ if (state.status === "running" && state.currentStep) {
25
+ const currentExecution = state.history.find((h) => h.stepId === state.currentStep && h.status === "running");
26
+ if (currentExecution) {
27
+ const stepLimit = sla.stepDurationMs[state.currentStep];
28
+ if (stepLimit) {
29
+ const stepDuration = now - currentExecution.startedAt.getTime();
30
+ if (stepDuration > stepLimit) this.eventEmitter("workflow.sla_breach", {
31
+ workflowId: state.workflowId,
32
+ workflowName: state.workflowName,
33
+ type: "step_duration",
34
+ stepId: state.currentStep,
35
+ expectedMs: stepLimit,
36
+ actualMs: stepDuration,
37
+ breachedAt: /* @__PURE__ */ new Date()
38
+ });
39
+ }
40
+ }
41
+ }
42
+ }
43
+ }
44
+ };
45
+
46
+ //#endregion
47
+ export { SLAMonitor };
@@ -0,0 +1,105 @@
1
+ import { OwnerShipMeta } from "../ownership.js";
2
+ import { GroupKeyFn, RegistryFilter } from "../registry-utils.js";
3
+ import { CapabilityRef } from "../capabilities/capabilities.js";
4
+ import "../capabilities/index.js";
5
+ import { ExperimentRef } from "../experiments/spec.js";
6
+ import { OpRef } from "../features.js";
7
+
8
+ //#region src/workflow/spec.d.ts
9
+ /**
10
+ * Reference to a form spec declared in {@link FormRegistry}.
11
+ */
12
+ interface FormRef {
13
+ key: string;
14
+ version: number;
15
+ }
16
+ type StepType = 'human' | 'automation' | 'decision';
17
+ type WorkflowStatus = 'running' | 'paused' | 'completed' | 'failed' | 'cancelled';
18
+ type GuardConditionKind = 'policy' | 'expression';
19
+ interface GuardCondition {
20
+ type: GuardConditionKind;
21
+ /** Policy name or expression string depending on the type. */
22
+ value: string;
23
+ }
24
+ interface RetryPolicy {
25
+ maxAttempts: number;
26
+ backoff: 'linear' | 'exponential';
27
+ delayMs: number;
28
+ /** Optional max delay cap for exponential backoff. */
29
+ maxDelayMs?: number;
30
+ }
31
+ interface StepAction {
32
+ /** Operation executed for automation steps. */
33
+ operation?: OpRef;
34
+ /** Form rendered for human input steps. */
35
+ form?: FormRef;
36
+ }
37
+ interface Step {
38
+ id: string;
39
+ type: StepType;
40
+ label: string;
41
+ description?: string;
42
+ action?: StepAction;
43
+ guard?: GuardCondition;
44
+ timeoutMs?: number;
45
+ retry?: RetryPolicy;
46
+ /** Integration slot identifiers required before this step can execute. */
47
+ requiredIntegrations?: string[];
48
+ /** Capabilities that must be enabled for this step to execute. */
49
+ requiredCapabilities?: CapabilityRef[];
50
+ }
51
+ interface Transition {
52
+ from: string;
53
+ to: string;
54
+ label?: string;
55
+ /** Expression evaluated against workflow data (e.g., `data.approved === true`). */
56
+ condition?: string;
57
+ }
58
+ interface SLA {
59
+ totalDurationMs?: number;
60
+ stepDurationMs?: Record<string, number>;
61
+ }
62
+ interface CompensationStep {
63
+ stepId: string;
64
+ operation: OpRef;
65
+ description?: string;
66
+ }
67
+ interface CompensationStrategy {
68
+ trigger?: 'on_failure' | 'manual';
69
+ steps: CompensationStep[];
70
+ }
71
+ interface WorkflowDefinition {
72
+ steps: Step[];
73
+ transitions: Transition[];
74
+ /** Optional explicit entry step. Defaults to the first step when omitted. */
75
+ entryStepId?: string;
76
+ sla?: SLA;
77
+ compensation?: CompensationStrategy;
78
+ }
79
+ type WorkflowMeta = OwnerShipMeta;
80
+ interface WorkflowSpec {
81
+ meta: WorkflowMeta;
82
+ definition: WorkflowDefinition;
83
+ policy?: {
84
+ flags?: string[];
85
+ };
86
+ experiments?: ExperimentRef[];
87
+ }
88
+ declare class WorkflowRegistry {
89
+ private readonly items;
90
+ register(spec: WorkflowSpec): this;
91
+ list(): WorkflowSpec[];
92
+ get(name: string, version?: number): WorkflowSpec | undefined;
93
+ /** Filter workflows by criteria. */
94
+ filter(criteria: RegistryFilter): WorkflowSpec[];
95
+ /** List workflows with specific tag. */
96
+ listByTag(tag: string): WorkflowSpec[];
97
+ /** List workflows by owner. */
98
+ listByOwner(owner: string): WorkflowSpec[];
99
+ /** Group workflows by key function. */
100
+ groupBy(keyFn: GroupKeyFn<WorkflowSpec>): Map<string, WorkflowSpec[]>;
101
+ /** Get unique tags from all workflows. */
102
+ getUniqueTags(): string[];
103
+ }
104
+ //#endregion
105
+ export { CompensationStep, CompensationStrategy, FormRef, GuardCondition, GuardConditionKind, RetryPolicy, SLA, Step, StepAction, StepType, Transition, WorkflowDefinition, WorkflowMeta, WorkflowRegistry, WorkflowSpec, WorkflowStatus };
@@ -1 +1,55 @@
1
- function e(e){return`${e.name}.v${e.version}`}var t=class{items=new Map;register(t){let n=e(t.meta);if(this.items.has(n))throw Error(`Duplicate workflow ${n}`);return this.items.set(n,t),this}list(){return[...this.items.values()]}get(e,t){if(t!=null)return this.items.get(`${e}.v${t}`);let n,r=-1/0;for(let t of this.items.values())t.meta.name===e&&t.meta.version>r&&(r=t.meta.version,n=t);return n}};export{t as WorkflowRegistry};
1
+ import { filterBy, getUniqueTags, groupBy, init_registry_utils } from "../registry-utils.js";
2
+
3
+ //#region src/workflow/spec.ts
4
+ init_registry_utils();
5
+ function workflowKey(meta) {
6
+ return `${meta.key}.v${meta.version}`;
7
+ }
8
+ var WorkflowRegistry = class {
9
+ items = /* @__PURE__ */ new Map();
10
+ register(spec) {
11
+ const key = workflowKey(spec.meta);
12
+ if (this.items.has(key)) throw new Error(`Duplicate workflow ${key}`);
13
+ this.items.set(key, spec);
14
+ return this;
15
+ }
16
+ list() {
17
+ return [...this.items.values()];
18
+ }
19
+ get(name, version) {
20
+ if (version != null) return this.items.get(`${name}.v${version}`);
21
+ let candidate;
22
+ let max = -Infinity;
23
+ for (const spec of this.items.values()) {
24
+ if (spec.meta.key !== name) continue;
25
+ if (spec.meta.version > max) {
26
+ max = spec.meta.version;
27
+ candidate = spec;
28
+ }
29
+ }
30
+ return candidate;
31
+ }
32
+ /** Filter workflows by criteria. */
33
+ filter(criteria) {
34
+ return filterBy(this.list(), criteria);
35
+ }
36
+ /** List workflows with specific tag. */
37
+ listByTag(tag) {
38
+ return this.list().filter((w) => w.meta.tags?.includes(tag));
39
+ }
40
+ /** List workflows by owner. */
41
+ listByOwner(owner) {
42
+ return this.list().filter((w) => w.meta.owners?.includes(owner));
43
+ }
44
+ /** Group workflows by key function. */
45
+ groupBy(keyFn) {
46
+ return groupBy(this.list(), keyFn);
47
+ }
48
+ /** Get unique tags from all workflows. */
49
+ getUniqueTags() {
50
+ return getUniqueTags(this.list());
51
+ }
52
+ };
53
+
54
+ //#endregion
55
+ export { WorkflowRegistry };
@@ -0,0 +1,35 @@
1
+ import { WorkflowStatus } from "./spec.js";
2
+
3
+ //#region src/workflow/state.d.ts
4
+ interface StepExecution {
5
+ stepId: string;
6
+ startedAt: Date;
7
+ completedAt?: Date;
8
+ status: 'pending' | 'running' | 'completed' | 'failed';
9
+ input?: unknown;
10
+ output?: unknown;
11
+ error?: string;
12
+ }
13
+ interface WorkflowState {
14
+ workflowId: string;
15
+ workflowName: string;
16
+ workflowVersion: number;
17
+ currentStep: string;
18
+ data: Record<string, unknown>;
19
+ retryCounts?: Record<string, number>;
20
+ history: StepExecution[];
21
+ status: WorkflowStatus;
22
+ createdAt: Date;
23
+ updatedAt: Date;
24
+ }
25
+ interface WorkflowStateFilters {
26
+ status?: WorkflowStatus;
27
+ }
28
+ interface StateStore {
29
+ create(state: WorkflowState): Promise<void>;
30
+ get(workflowId: string): Promise<WorkflowState | undefined>;
31
+ update(workflowId: string, updater: (current: WorkflowState) => WorkflowState): Promise<WorkflowState>;
32
+ list(filters?: WorkflowStateFilters): Promise<WorkflowState[]>;
33
+ }
34
+ //#endregion
35
+ export { StateStore, StepExecution, WorkflowState, WorkflowStateFilters };
@@ -0,0 +1,29 @@
1
+ import { WorkflowSpec } from "./spec.js";
2
+ import { OperationSpecRegistry } from "../operations/registry.js";
3
+ import { FormRegistry } from "../forms/forms.js";
4
+ import "../forms/index.js";
5
+
6
+ //#region src/workflow/validation.d.ts
7
+ type WorkflowValidationLevel = 'error' | 'warning';
8
+ interface WorkflowValidationIssue {
9
+ level: WorkflowValidationLevel;
10
+ message: string;
11
+ context?: Record<string, unknown>;
12
+ }
13
+ interface ValidateWorkflowSpecOptions {
14
+ operations?: OperationSpecRegistry;
15
+ forms?: FormRegistry;
16
+ }
17
+ declare class WorkflowValidationError extends Error {
18
+ readonly issues: WorkflowValidationIssue[];
19
+ constructor(message: string, issues: WorkflowValidationIssue[]);
20
+ }
21
+ /**
22
+ * Validate workflow structure, references, and reachability.
23
+ * Returns the collected issues. Consumers may call {@link assertWorkflowSpecValid}
24
+ * to throw on validation errors.
25
+ */
26
+ declare function validateWorkflowSpec(spec: WorkflowSpec, options?: ValidateWorkflowSpecOptions): WorkflowValidationIssue[];
27
+ declare function assertWorkflowSpecValid(spec: WorkflowSpec, options?: ValidateWorkflowSpecOptions): void;
28
+ //#endregion
29
+ export { ValidateWorkflowSpecOptions, WorkflowValidationError, WorkflowValidationIssue, WorkflowValidationLevel, assertWorkflowSpecValid, validateWorkflowSpec };