@lssm/lib.contracts 0.0.0-canary-20251217080011 → 0.0.0-canary-20251219202229

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 (835) hide show
  1. package/LICENSE +21 -0
  2. package/dist/app-config/app-config.feature.d.ts +2 -1
  3. package/dist/app-config/app-config.feature.d.ts.map +1 -0
  4. package/dist/app-config/app-config.feature.js +2 -1
  5. package/dist/app-config/app-config.feature.js.map +1 -0
  6. package/dist/app-config/branding.d.ts +2 -1
  7. package/dist/app-config/branding.d.ts.map +1 -0
  8. package/dist/app-config/contracts.d.ts +52 -51
  9. package/dist/app-config/contracts.d.ts.map +1 -0
  10. package/dist/app-config/contracts.js +56 -57
  11. package/dist/app-config/contracts.js.map +1 -0
  12. package/dist/app-config/docs/app-config.docblock.d.ts +2 -1
  13. package/dist/app-config/docs/app-config.docblock.d.ts.map +1 -0
  14. package/dist/app-config/docs/app-config.docblock.js +2 -1
  15. package/dist/app-config/docs/app-config.docblock.js.map +1 -0
  16. package/dist/app-config/events.d.ts +29 -28
  17. package/dist/app-config/events.d.ts.map +1 -0
  18. package/dist/app-config/events.js +33 -34
  19. package/dist/app-config/events.js.map +1 -0
  20. package/dist/app-config/lifecycle-contracts.d.ts +82 -81
  21. package/dist/app-config/lifecycle-contracts.d.ts.map +1 -0
  22. package/dist/app-config/lifecycle-contracts.js +68 -69
  23. package/dist/app-config/lifecycle-contracts.js.map +1 -0
  24. package/dist/app-config/lifecycle.d.ts +2 -1
  25. package/dist/app-config/lifecycle.d.ts.map +1 -0
  26. package/dist/app-config/runtime.d.ts +2 -1
  27. package/dist/app-config/runtime.d.ts.map +1 -0
  28. package/dist/app-config/runtime.js +2 -1
  29. package/dist/app-config/runtime.js.map +1 -0
  30. package/dist/app-config/spec.d.ts +2 -1
  31. package/dist/app-config/spec.d.ts.map +1 -0
  32. package/dist/app-config/spec.js +2 -1
  33. package/dist/app-config/spec.js.map +1 -0
  34. package/dist/app-config/validation.d.ts +2 -1
  35. package/dist/app-config/validation.d.ts.map +1 -0
  36. package/dist/app-config/validation.js +2 -1
  37. package/dist/app-config/validation.js.map +1 -0
  38. package/dist/capabilities/docs/capabilities.docblock.d.ts +2 -1
  39. package/dist/capabilities/docs/capabilities.docblock.d.ts.map +1 -0
  40. package/dist/capabilities/docs/capabilities.docblock.js +2 -1
  41. package/dist/capabilities/docs/capabilities.docblock.js.map +1 -0
  42. package/dist/capabilities/openbanking.d.ts +2 -1
  43. package/dist/capabilities/openbanking.d.ts.map +1 -0
  44. package/dist/capabilities/openbanking.js +2 -1
  45. package/dist/capabilities/openbanking.js.map +1 -0
  46. package/dist/capabilities.d.ts +2 -1
  47. package/dist/capabilities.d.ts.map +1 -0
  48. package/dist/capabilities.js +2 -1
  49. package/dist/capabilities.js.map +1 -0
  50. package/dist/client/react/drivers/rn-reusables.d.ts +2 -1
  51. package/dist/client/react/drivers/rn-reusables.d.ts.map +1 -0
  52. package/dist/client/react/drivers/rn-reusables.js +2 -1
  53. package/dist/client/react/drivers/rn-reusables.js.map +1 -0
  54. package/dist/client/react/drivers/shadcn.d.ts +2 -1
  55. package/dist/client/react/drivers/shadcn.d.ts.map +1 -0
  56. package/dist/client/react/drivers/shadcn.js +2 -1
  57. package/dist/client/react/drivers/shadcn.js.map +1 -0
  58. package/dist/client/react/feature-render.d.ts +2 -1
  59. package/dist/client/react/feature-render.d.ts.map +1 -0
  60. package/dist/client/react/feature-render.js +2 -1
  61. package/dist/client/react/feature-render.js.map +1 -0
  62. package/dist/client/react/form-render.d.ts +8 -7
  63. package/dist/client/react/form-render.d.ts.map +1 -0
  64. package/dist/client/react/form-render.js +17 -16
  65. package/dist/client/react/form-render.js.map +1 -0
  66. package/dist/contract-registry/schemas.d.ts +2 -1
  67. package/dist/contract-registry/schemas.d.ts.map +1 -0
  68. package/dist/contract-registry/schemas.js +2 -1
  69. package/dist/contract-registry/schemas.js.map +1 -0
  70. package/dist/contract-registry/types.d.ts +2 -1
  71. package/dist/contract-registry/types.d.ts.map +1 -0
  72. package/dist/contracts-adapter-hydration.d.ts +2 -1
  73. package/dist/contracts-adapter-hydration.d.ts.map +1 -0
  74. package/dist/contracts-adapter-hydration.js +2 -1
  75. package/dist/contracts-adapter-hydration.js.map +1 -0
  76. package/dist/contracts-adapter-input.d.ts +2 -1
  77. package/dist/contracts-adapter-input.d.ts.map +1 -0
  78. package/dist/contracts-adapter-input.js +2 -1
  79. package/dist/contracts-adapter-input.js.map +1 -0
  80. package/dist/data-views/docs/data-views.docblock.d.ts +2 -1
  81. package/dist/data-views/docs/data-views.docblock.d.ts.map +1 -0
  82. package/dist/data-views/docs/data-views.docblock.js +2 -1
  83. package/dist/data-views/docs/data-views.docblock.js.map +1 -0
  84. package/dist/data-views/query-generator.d.ts +2 -1
  85. package/dist/data-views/query-generator.d.ts.map +1 -0
  86. package/dist/data-views/query-generator.js +2 -1
  87. package/dist/data-views/query-generator.js.map +1 -0
  88. package/dist/data-views/runtime.d.ts +2 -1
  89. package/dist/data-views/runtime.d.ts.map +1 -0
  90. package/dist/data-views/runtime.js +2 -1
  91. package/dist/data-views/runtime.js.map +1 -0
  92. package/dist/data-views.d.ts +2 -1
  93. package/dist/data-views.d.ts.map +1 -0
  94. package/dist/data-views.js +2 -1
  95. package/dist/data-views.js.map +1 -0
  96. package/dist/docs/accessibility_wcag_compliance_specs.docblock.d.ts +2 -1
  97. package/dist/docs/accessibility_wcag_compliance_specs.docblock.d.ts.map +1 -0
  98. package/dist/docs/accessibility_wcag_compliance_specs.docblock.js +2 -1
  99. package/dist/docs/accessibility_wcag_compliance_specs.docblock.js.map +1 -0
  100. package/dist/docs/index.js +0 -6
  101. package/dist/docs/meta.docs.d.ts +2 -1
  102. package/dist/docs/meta.docs.d.ts.map +1 -0
  103. package/dist/docs/meta.docs.js +5 -1
  104. package/dist/docs/meta.docs.js.map +1 -0
  105. package/dist/docs/presentations.d.ts +2 -1
  106. package/dist/docs/presentations.d.ts.map +1 -0
  107. package/dist/docs/presentations.js +2 -1
  108. package/dist/docs/presentations.js.map +1 -0
  109. package/dist/docs/registry.d.ts +2 -1
  110. package/dist/docs/registry.d.ts.map +1 -0
  111. package/dist/docs/registry.js +2 -1
  112. package/dist/docs/registry.js.map +1 -0
  113. package/dist/docs/tech/auth/better-auth-nextjs.docblock.d.ts +2 -1
  114. package/dist/docs/tech/auth/better-auth-nextjs.docblock.d.ts.map +1 -0
  115. package/dist/docs/tech/auth/better-auth-nextjs.docblock.js +2 -1
  116. package/dist/docs/tech/auth/better-auth-nextjs.docblock.js.map +1 -0
  117. package/dist/docs/tech/contracts/README.docblock.d.ts +2 -1
  118. package/dist/docs/tech/contracts/README.docblock.d.ts.map +1 -0
  119. package/dist/docs/tech/contracts/README.docblock.js +2 -1
  120. package/dist/docs/tech/contracts/README.docblock.js.map +1 -0
  121. package/dist/docs/tech/contracts/create-subscription.docblock.d.ts +2 -1
  122. package/dist/docs/tech/contracts/create-subscription.docblock.d.ts.map +1 -0
  123. package/dist/docs/tech/contracts/create-subscription.docblock.js +2 -1
  124. package/dist/docs/tech/contracts/create-subscription.docblock.js.map +1 -0
  125. package/dist/docs/tech/contracts/graphql-typed-outputs.docblock.d.ts +2 -1
  126. package/dist/docs/tech/contracts/graphql-typed-outputs.docblock.d.ts.map +1 -0
  127. package/dist/docs/tech/contracts/graphql-typed-outputs.docblock.js +2 -1
  128. package/dist/docs/tech/contracts/graphql-typed-outputs.docblock.js.map +1 -0
  129. package/dist/docs/tech/contracts/migrations.docblock.d.ts +2 -1
  130. package/dist/docs/tech/contracts/migrations.docblock.d.ts.map +1 -0
  131. package/dist/docs/tech/contracts/migrations.docblock.js +2 -1
  132. package/dist/docs/tech/contracts/migrations.docblock.js.map +1 -0
  133. package/dist/docs/tech/contracts/openapi-export.docblock.d.ts +2 -1
  134. package/dist/docs/tech/contracts/openapi-export.docblock.d.ts.map +1 -0
  135. package/dist/docs/tech/contracts/openapi-export.docblock.js +2 -1
  136. package/dist/docs/tech/contracts/openapi-export.docblock.js.map +1 -0
  137. package/dist/docs/tech/contracts/ops-to-presentation-linking.docblock.d.ts +2 -1
  138. package/dist/docs/tech/contracts/ops-to-presentation-linking.docblock.d.ts.map +1 -0
  139. package/dist/docs/tech/contracts/ops-to-presentation-linking.docblock.js +2 -1
  140. package/dist/docs/tech/contracts/ops-to-presentation-linking.docblock.js.map +1 -0
  141. package/dist/docs/tech/contracts/overlays.docblock.d.ts +2 -1
  142. package/dist/docs/tech/contracts/overlays.docblock.d.ts.map +1 -0
  143. package/dist/docs/tech/contracts/overlays.docblock.js +2 -1
  144. package/dist/docs/tech/contracts/overlays.docblock.js.map +1 -0
  145. package/dist/docs/tech/contracts/tests.docblock.d.ts +2 -1
  146. package/dist/docs/tech/contracts/tests.docblock.d.ts.map +1 -0
  147. package/dist/docs/tech/contracts/tests.docblock.js +2 -1
  148. package/dist/docs/tech/contracts/tests.docblock.js.map +1 -0
  149. package/dist/docs/tech/contracts/themes.docblock.d.ts +2 -1
  150. package/dist/docs/tech/contracts/themes.docblock.d.ts.map +1 -0
  151. package/dist/docs/tech/contracts/themes.docblock.js +2 -1
  152. package/dist/docs/tech/contracts/themes.docblock.js.map +1 -0
  153. package/dist/docs/tech/contracts/vertical-pocket-family-office.docblock.d.ts +2 -1
  154. package/dist/docs/tech/contracts/vertical-pocket-family-office.docblock.d.ts.map +1 -0
  155. package/dist/docs/tech/contracts/vertical-pocket-family-office.docblock.js +2 -1
  156. package/dist/docs/tech/contracts/vertical-pocket-family-office.docblock.js.map +1 -0
  157. package/dist/docs/tech/lifecycle-stage-system.docblock.d.ts +2 -1
  158. package/dist/docs/tech/lifecycle-stage-system.docblock.d.ts.map +1 -0
  159. package/dist/docs/tech/lifecycle-stage-system.docblock.js +2 -1
  160. package/dist/docs/tech/lifecycle-stage-system.docblock.js.map +1 -0
  161. package/dist/docs/tech/llm/llm-integration.docblock.d.ts +2 -1
  162. package/dist/docs/tech/llm/llm-integration.docblock.d.ts.map +1 -0
  163. package/dist/docs/tech/llm/llm-integration.docblock.js +2 -1
  164. package/dist/docs/tech/llm/llm-integration.docblock.js.map +1 -0
  165. package/dist/docs/tech/mcp-endpoints.docblock.d.ts +2 -1
  166. package/dist/docs/tech/mcp-endpoints.docblock.d.ts.map +1 -0
  167. package/dist/docs/tech/mcp-endpoints.docblock.js +2 -1
  168. package/dist/docs/tech/mcp-endpoints.docblock.js.map +1 -0
  169. package/dist/docs/tech/presentation-runtime.docblock.d.ts +2 -1
  170. package/dist/docs/tech/presentation-runtime.docblock.d.ts.map +1 -0
  171. package/dist/docs/tech/presentation-runtime.docblock.js +2 -1
  172. package/dist/docs/tech/presentation-runtime.docblock.js.map +1 -0
  173. package/dist/docs/tech/schema/README.docblock.d.ts +2 -1
  174. package/dist/docs/tech/schema/README.docblock.d.ts.map +1 -0
  175. package/dist/docs/tech/schema/README.docblock.js +2 -1
  176. package/dist/docs/tech/schema/README.docblock.js.map +1 -0
  177. package/dist/docs/tech/studio/learning-events.docblock.d.ts +2 -1
  178. package/dist/docs/tech/studio/learning-events.docblock.d.ts.map +1 -0
  179. package/dist/docs/tech/studio/learning-events.docblock.js +2 -1
  180. package/dist/docs/tech/studio/learning-events.docblock.js.map +1 -0
  181. package/dist/docs/tech/studio/learning-journeys.docblock.d.ts +2 -1
  182. package/dist/docs/tech/studio/learning-journeys.docblock.d.ts.map +1 -0
  183. package/dist/docs/tech/studio/learning-journeys.docblock.js +2 -1
  184. package/dist/docs/tech/studio/learning-journeys.docblock.js.map +1 -0
  185. package/dist/docs/tech/studio/platform-admin-panel.docblock.d.ts +2 -1
  186. package/dist/docs/tech/studio/platform-admin-panel.docblock.d.ts.map +1 -0
  187. package/dist/docs/tech/studio/platform-admin-panel.docblock.js +2 -1
  188. package/dist/docs/tech/studio/platform-admin-panel.docblock.js.map +1 -0
  189. package/dist/docs/tech/studio/project-access-teams.docblock.d.ts +2 -1
  190. package/dist/docs/tech/studio/project-access-teams.docblock.d.ts.map +1 -0
  191. package/dist/docs/tech/studio/project-access-teams.docblock.js +2 -1
  192. package/dist/docs/tech/studio/project-access-teams.docblock.js.map +1 -0
  193. package/dist/docs/tech/studio/project-routing.docblock.d.ts +2 -1
  194. package/dist/docs/tech/studio/project-routing.docblock.d.ts.map +1 -0
  195. package/dist/docs/tech/studio/project-routing.docblock.js +2 -1
  196. package/dist/docs/tech/studio/project-routing.docblock.js.map +1 -0
  197. package/dist/docs/tech/studio/sandbox-unlogged.docblock.d.ts +2 -1
  198. package/dist/docs/tech/studio/sandbox-unlogged.docblock.d.ts.map +1 -0
  199. package/dist/docs/tech/studio/sandbox-unlogged.docblock.js +2 -1
  200. package/dist/docs/tech/studio/sandbox-unlogged.docblock.js.map +1 -0
  201. package/dist/docs/tech/studio/team-invitations.docblock.d.ts +2 -1
  202. package/dist/docs/tech/studio/team-invitations.docblock.d.ts.map +1 -0
  203. package/dist/docs/tech/studio/team-invitations.docblock.js +2 -1
  204. package/dist/docs/tech/studio/team-invitations.docblock.js.map +1 -0
  205. package/dist/docs/tech/studio/workspace-ops.docblock.d.ts +2 -1
  206. package/dist/docs/tech/studio/workspace-ops.docblock.d.ts.map +1 -0
  207. package/dist/docs/tech/studio/workspace-ops.docblock.js +2 -1
  208. package/dist/docs/tech/studio/workspace-ops.docblock.js.map +1 -0
  209. package/dist/docs/tech/studio/workspaces.docblock.d.ts +2 -1
  210. package/dist/docs/tech/studio/workspaces.docblock.d.ts.map +1 -0
  211. package/dist/docs/tech/studio/workspaces.docblock.js +2 -1
  212. package/dist/docs/tech/studio/workspaces.docblock.js.map +1 -0
  213. package/dist/docs/tech/telemetry-ingest.docblock.d.ts +2 -1
  214. package/dist/docs/tech/telemetry-ingest.docblock.d.ts.map +1 -0
  215. package/dist/docs/tech/telemetry-ingest.docblock.js +2 -1
  216. package/dist/docs/tech/telemetry-ingest.docblock.js.map +1 -0
  217. package/dist/docs/tech/templates/runtime.docblock.d.ts +2 -1
  218. package/dist/docs/tech/templates/runtime.docblock.d.ts.map +1 -0
  219. package/dist/docs/tech/templates/runtime.docblock.js +2 -1
  220. package/dist/docs/tech/templates/runtime.docblock.js.map +1 -0
  221. package/dist/docs/tech/vscode-extension.docblock.d.ts +2 -1
  222. package/dist/docs/tech/vscode-extension.docblock.d.ts.map +1 -0
  223. package/dist/docs/tech/vscode-extension.docblock.js +2 -1
  224. package/dist/docs/tech/vscode-extension.docblock.js.map +1 -0
  225. package/dist/docs/tech/workflows/overview.docblock.d.ts +2 -1
  226. package/dist/docs/tech/workflows/overview.docblock.d.ts.map +1 -0
  227. package/dist/docs/tech/workflows/overview.docblock.js +2 -1
  228. package/dist/docs/tech/workflows/overview.docblock.js.map +1 -0
  229. package/dist/docs/tech-contracts.docs.d.ts +2 -1
  230. package/dist/docs/tech-contracts.docs.d.ts.map +1 -0
  231. package/dist/docs/tech-contracts.docs.js +5 -1
  232. package/dist/docs/tech-contracts.docs.js.map +1 -0
  233. package/dist/docs/types.d.ts +2 -1
  234. package/dist/docs/types.d.ts.map +1 -0
  235. package/dist/events.d.ts +2 -1
  236. package/dist/events.d.ts.map +1 -0
  237. package/dist/events.js +2 -1
  238. package/dist/events.js.map +1 -0
  239. package/dist/experiments/docs/experiments.docblock.d.ts +2 -1
  240. package/dist/experiments/docs/experiments.docblock.d.ts.map +1 -0
  241. package/dist/experiments/docs/experiments.docblock.js +2 -1
  242. package/dist/experiments/docs/experiments.docblock.js.map +1 -0
  243. package/dist/experiments/evaluator.d.ts +2 -1
  244. package/dist/experiments/evaluator.d.ts.map +1 -0
  245. package/dist/experiments/evaluator.js +2 -1
  246. package/dist/experiments/evaluator.js.map +1 -0
  247. package/dist/experiments/spec-resolver.d.ts +2 -1
  248. package/dist/experiments/spec-resolver.d.ts.map +1 -0
  249. package/dist/experiments/spec.d.ts +2 -1
  250. package/dist/experiments/spec.d.ts.map +1 -0
  251. package/dist/experiments/spec.js +2 -1
  252. package/dist/experiments/spec.js.map +1 -0
  253. package/dist/features.d.ts +2 -1
  254. package/dist/features.d.ts.map +1 -0
  255. package/dist/features.js +2 -1
  256. package/dist/features.js.map +1 -0
  257. package/dist/forms/docs/forms.docblock.d.ts +2 -1
  258. package/dist/forms/docs/forms.docblock.d.ts.map +1 -0
  259. package/dist/forms/docs/forms.docblock.js +2 -1
  260. package/dist/forms/docs/forms.docblock.js.map +1 -0
  261. package/dist/forms.d.ts +2 -1
  262. package/dist/forms.d.ts.map +1 -0
  263. package/dist/forms.js +2 -1
  264. package/dist/forms.js.map +1 -0
  265. package/dist/index.js +2 -3
  266. package/dist/install.d.ts +2 -1
  267. package/dist/install.d.ts.map +1 -0
  268. package/dist/install.js +2 -1
  269. package/dist/install.js.map +1 -0
  270. package/dist/integrations/binding.d.ts +2 -1
  271. package/dist/integrations/binding.d.ts.map +1 -0
  272. package/dist/integrations/connection.d.ts +2 -1
  273. package/dist/integrations/connection.d.ts.map +1 -0
  274. package/dist/integrations/contracts.d.ts +104 -103
  275. package/dist/integrations/contracts.d.ts.map +1 -0
  276. package/dist/integrations/contracts.js +65 -66
  277. package/dist/integrations/contracts.js.map +1 -0
  278. package/dist/integrations/docs/integrations.docblock.d.ts +2 -1
  279. package/dist/integrations/docs/integrations.docblock.d.ts.map +1 -0
  280. package/dist/integrations/docs/integrations.docblock.js +2 -1
  281. package/dist/integrations/docs/integrations.docblock.js.map +1 -0
  282. package/dist/integrations/health.d.ts +2 -1
  283. package/dist/integrations/health.d.ts.map +1 -0
  284. package/dist/integrations/health.js +2 -1
  285. package/dist/integrations/health.js.map +1 -0
  286. package/dist/integrations/openbanking/contracts/accounts.d.ts +68 -67
  287. package/dist/integrations/openbanking/contracts/accounts.d.ts.map +1 -0
  288. package/dist/integrations/openbanking/contracts/accounts.js +31 -32
  289. package/dist/integrations/openbanking/contracts/accounts.js.map +1 -0
  290. package/dist/integrations/openbanking/contracts/balances.d.ts +2 -1
  291. package/dist/integrations/openbanking/contracts/balances.d.ts.map +1 -0
  292. package/dist/integrations/openbanking/contracts/balances.js +18 -19
  293. package/dist/integrations/openbanking/contracts/balances.js.map +1 -0
  294. package/dist/integrations/openbanking/contracts/index.d.ts +2 -1
  295. package/dist/integrations/openbanking/contracts/index.d.ts.map +1 -0
  296. package/dist/integrations/openbanking/contracts/index.js +2 -1
  297. package/dist/integrations/openbanking/contracts/index.js.map +1 -0
  298. package/dist/integrations/openbanking/contracts/transactions.d.ts +50 -49
  299. package/dist/integrations/openbanking/contracts/transactions.d.ts.map +1 -0
  300. package/dist/integrations/openbanking/contracts/transactions.js +32 -33
  301. package/dist/integrations/openbanking/contracts/transactions.js.map +1 -0
  302. package/dist/integrations/openbanking/guards.d.ts +2 -1
  303. package/dist/integrations/openbanking/guards.d.ts.map +1 -0
  304. package/dist/integrations/openbanking/guards.js +2 -1
  305. package/dist/integrations/openbanking/guards.js.map +1 -0
  306. package/dist/integrations/openbanking/models.d.ts +2 -1
  307. package/dist/integrations/openbanking/models.d.ts.map +1 -0
  308. package/dist/integrations/openbanking/models.js +60 -61
  309. package/dist/integrations/openbanking/models.js.map +1 -0
  310. package/dist/integrations/openbanking/openbanking.feature.d.ts +2 -1
  311. package/dist/integrations/openbanking/openbanking.feature.d.ts.map +1 -0
  312. package/dist/integrations/openbanking/openbanking.feature.js +2 -1
  313. package/dist/integrations/openbanking/openbanking.feature.js.map +1 -0
  314. package/dist/integrations/openbanking/telemetry.d.ts +2 -1
  315. package/dist/integrations/openbanking/telemetry.d.ts.map +1 -0
  316. package/dist/integrations/openbanking/telemetry.js +2 -1
  317. package/dist/integrations/openbanking/telemetry.js.map +1 -0
  318. package/dist/integrations/providers/calendar.d.ts +2 -1
  319. package/dist/integrations/providers/calendar.d.ts.map +1 -0
  320. package/dist/integrations/providers/elevenlabs.d.ts +2 -1
  321. package/dist/integrations/providers/elevenlabs.d.ts.map +1 -0
  322. package/dist/integrations/providers/elevenlabs.js +2 -1
  323. package/dist/integrations/providers/elevenlabs.js.map +1 -0
  324. package/dist/integrations/providers/email.d.ts +2 -1
  325. package/dist/integrations/providers/email.d.ts.map +1 -0
  326. package/dist/integrations/providers/embedding.d.ts +2 -1
  327. package/dist/integrations/providers/embedding.d.ts.map +1 -0
  328. package/dist/integrations/providers/gcs-storage.d.ts +2 -1
  329. package/dist/integrations/providers/gcs-storage.d.ts.map +1 -0
  330. package/dist/integrations/providers/gcs-storage.js +2 -1
  331. package/dist/integrations/providers/gcs-storage.js.map +1 -0
  332. package/dist/integrations/providers/gmail.d.ts +2 -1
  333. package/dist/integrations/providers/gmail.d.ts.map +1 -0
  334. package/dist/integrations/providers/gmail.js +2 -1
  335. package/dist/integrations/providers/gmail.js.map +1 -0
  336. package/dist/integrations/providers/google-calendar.d.ts +2 -1
  337. package/dist/integrations/providers/google-calendar.d.ts.map +1 -0
  338. package/dist/integrations/providers/google-calendar.js +2 -1
  339. package/dist/integrations/providers/google-calendar.js.map +1 -0
  340. package/dist/integrations/providers/impls/elevenlabs-voice.d.ts +2 -1
  341. package/dist/integrations/providers/impls/elevenlabs-voice.d.ts.map +1 -0
  342. package/dist/integrations/providers/impls/elevenlabs-voice.js +2 -1
  343. package/dist/integrations/providers/impls/elevenlabs-voice.js.map +1 -0
  344. package/dist/integrations/providers/impls/gcs-storage.d.ts +2 -1
  345. package/dist/integrations/providers/impls/gcs-storage.d.ts.map +1 -0
  346. package/dist/integrations/providers/impls/gcs-storage.js +2 -1
  347. package/dist/integrations/providers/impls/gcs-storage.js.map +1 -0
  348. package/dist/integrations/providers/impls/gmail-inbound.d.ts +2 -1
  349. package/dist/integrations/providers/impls/gmail-inbound.d.ts.map +1 -0
  350. package/dist/integrations/providers/impls/gmail-inbound.js +2 -1
  351. package/dist/integrations/providers/impls/gmail-inbound.js.map +1 -0
  352. package/dist/integrations/providers/impls/gmail-outbound.d.ts +2 -1
  353. package/dist/integrations/providers/impls/gmail-outbound.d.ts.map +1 -0
  354. package/dist/integrations/providers/impls/gmail-outbound.js +2 -1
  355. package/dist/integrations/providers/impls/gmail-outbound.js.map +1 -0
  356. package/dist/integrations/providers/impls/google-calendar.d.ts +2 -1
  357. package/dist/integrations/providers/impls/google-calendar.d.ts.map +1 -0
  358. package/dist/integrations/providers/impls/google-calendar.js +2 -1
  359. package/dist/integrations/providers/impls/google-calendar.js.map +1 -0
  360. package/dist/integrations/providers/impls/mistral-embedding.d.ts +2 -1
  361. package/dist/integrations/providers/impls/mistral-embedding.d.ts.map +1 -0
  362. package/dist/integrations/providers/impls/mistral-embedding.js +2 -1
  363. package/dist/integrations/providers/impls/mistral-embedding.js.map +1 -0
  364. package/dist/integrations/providers/impls/mistral-llm.d.ts +2 -1
  365. package/dist/integrations/providers/impls/mistral-llm.d.ts.map +1 -0
  366. package/dist/integrations/providers/impls/mistral-llm.js +2 -1
  367. package/dist/integrations/providers/impls/mistral-llm.js.map +1 -0
  368. package/dist/integrations/providers/impls/postmark-email.d.ts +2 -1
  369. package/dist/integrations/providers/impls/postmark-email.d.ts.map +1 -0
  370. package/dist/integrations/providers/impls/postmark-email.js +2 -1
  371. package/dist/integrations/providers/impls/postmark-email.js.map +1 -0
  372. package/dist/integrations/providers/impls/powens-client.d.ts +2 -1
  373. package/dist/integrations/providers/impls/powens-client.d.ts.map +1 -0
  374. package/dist/integrations/providers/impls/powens-client.js +2 -1
  375. package/dist/integrations/providers/impls/powens-client.js.map +1 -0
  376. package/dist/integrations/providers/impls/powens-openbanking.d.ts +2 -1
  377. package/dist/integrations/providers/impls/powens-openbanking.d.ts.map +1 -0
  378. package/dist/integrations/providers/impls/powens-openbanking.js +2 -1
  379. package/dist/integrations/providers/impls/powens-openbanking.js.map +1 -0
  380. package/dist/integrations/providers/impls/provider-factory.d.ts +2 -1
  381. package/dist/integrations/providers/impls/provider-factory.d.ts.map +1 -0
  382. package/dist/integrations/providers/impls/provider-factory.js +2 -1
  383. package/dist/integrations/providers/impls/provider-factory.js.map +1 -0
  384. package/dist/integrations/providers/impls/qdrant-vector.d.ts +2 -1
  385. package/dist/integrations/providers/impls/qdrant-vector.d.ts.map +1 -0
  386. package/dist/integrations/providers/impls/qdrant-vector.js +2 -1
  387. package/dist/integrations/providers/impls/qdrant-vector.js.map +1 -0
  388. package/dist/integrations/providers/impls/stripe-payments.d.ts +2 -1
  389. package/dist/integrations/providers/impls/stripe-payments.d.ts.map +1 -0
  390. package/dist/integrations/providers/impls/stripe-payments.js +2 -1
  391. package/dist/integrations/providers/impls/stripe-payments.js.map +1 -0
  392. package/dist/integrations/providers/impls/twilio-sms.d.ts +2 -1
  393. package/dist/integrations/providers/impls/twilio-sms.d.ts.map +1 -0
  394. package/dist/integrations/providers/impls/twilio-sms.js +2 -1
  395. package/dist/integrations/providers/impls/twilio-sms.js.map +1 -0
  396. package/dist/integrations/providers/llm.d.ts +2 -1
  397. package/dist/integrations/providers/llm.d.ts.map +1 -0
  398. package/dist/integrations/providers/mistral.d.ts +2 -1
  399. package/dist/integrations/providers/mistral.d.ts.map +1 -0
  400. package/dist/integrations/providers/mistral.js +2 -1
  401. package/dist/integrations/providers/mistral.js.map +1 -0
  402. package/dist/integrations/providers/openbanking.d.ts +2 -1
  403. package/dist/integrations/providers/openbanking.d.ts.map +1 -0
  404. package/dist/integrations/providers/payments.d.ts +2 -1
  405. package/dist/integrations/providers/payments.d.ts.map +1 -0
  406. package/dist/integrations/providers/postmark.d.ts +2 -1
  407. package/dist/integrations/providers/postmark.d.ts.map +1 -0
  408. package/dist/integrations/providers/postmark.js +2 -1
  409. package/dist/integrations/providers/postmark.js.map +1 -0
  410. package/dist/integrations/providers/powens.d.ts +2 -1
  411. package/dist/integrations/providers/powens.d.ts.map +1 -0
  412. package/dist/integrations/providers/powens.js +2 -1
  413. package/dist/integrations/providers/powens.js.map +1 -0
  414. package/dist/integrations/providers/qdrant.d.ts +2 -1
  415. package/dist/integrations/providers/qdrant.d.ts.map +1 -0
  416. package/dist/integrations/providers/qdrant.js +2 -1
  417. package/dist/integrations/providers/qdrant.js.map +1 -0
  418. package/dist/integrations/providers/registry.d.ts +2 -1
  419. package/dist/integrations/providers/registry.d.ts.map +1 -0
  420. package/dist/integrations/providers/registry.js +2 -1
  421. package/dist/integrations/providers/registry.js.map +1 -0
  422. package/dist/integrations/providers/sms.d.ts +2 -1
  423. package/dist/integrations/providers/sms.d.ts.map +1 -0
  424. package/dist/integrations/providers/storage.d.ts +2 -1
  425. package/dist/integrations/providers/storage.d.ts.map +1 -0
  426. package/dist/integrations/providers/stripe.d.ts +2 -1
  427. package/dist/integrations/providers/stripe.d.ts.map +1 -0
  428. package/dist/integrations/providers/stripe.js +2 -1
  429. package/dist/integrations/providers/stripe.js.map +1 -0
  430. package/dist/integrations/providers/twilio-sms.d.ts +2 -1
  431. package/dist/integrations/providers/twilio-sms.d.ts.map +1 -0
  432. package/dist/integrations/providers/twilio-sms.js +2 -1
  433. package/dist/integrations/providers/twilio-sms.js.map +1 -0
  434. package/dist/integrations/providers/vector-store.d.ts +2 -1
  435. package/dist/integrations/providers/vector-store.d.ts.map +1 -0
  436. package/dist/integrations/providers/voice.d.ts +2 -1
  437. package/dist/integrations/providers/voice.d.ts.map +1 -0
  438. package/dist/integrations/runtime.d.ts +2 -1
  439. package/dist/integrations/runtime.d.ts.map +1 -0
  440. package/dist/integrations/runtime.js +2 -1
  441. package/dist/integrations/runtime.js.map +1 -0
  442. package/dist/integrations/secrets/aws-secret-manager.d.ts +2 -1
  443. package/dist/integrations/secrets/aws-secret-manager.d.ts.map +1 -0
  444. package/dist/integrations/secrets/aws-secret-manager.js +2 -1
  445. package/dist/integrations/secrets/aws-secret-manager.js.map +1 -0
  446. package/dist/integrations/secrets/env-secret-provider.d.ts +2 -1
  447. package/dist/integrations/secrets/env-secret-provider.d.ts.map +1 -0
  448. package/dist/integrations/secrets/env-secret-provider.js +2 -1
  449. package/dist/integrations/secrets/env-secret-provider.js.map +1 -0
  450. package/dist/integrations/secrets/gcp-secret-manager.d.ts +2 -1
  451. package/dist/integrations/secrets/gcp-secret-manager.d.ts.map +1 -0
  452. package/dist/integrations/secrets/gcp-secret-manager.js +2 -1
  453. package/dist/integrations/secrets/gcp-secret-manager.js.map +1 -0
  454. package/dist/integrations/secrets/manager.d.ts +2 -1
  455. package/dist/integrations/secrets/manager.d.ts.map +1 -0
  456. package/dist/integrations/secrets/manager.js +2 -1
  457. package/dist/integrations/secrets/manager.js.map +1 -0
  458. package/dist/integrations/secrets/provider.d.ts +2 -1
  459. package/dist/integrations/secrets/provider.d.ts.map +1 -0
  460. package/dist/integrations/secrets/provider.js +2 -1
  461. package/dist/integrations/secrets/provider.js.map +1 -0
  462. package/dist/integrations/secrets/scaleway-secret-manager.d.ts +2 -1
  463. package/dist/integrations/secrets/scaleway-secret-manager.d.ts.map +1 -0
  464. package/dist/integrations/secrets/scaleway-secret-manager.js +2 -1
  465. package/dist/integrations/secrets/scaleway-secret-manager.js.map +1 -0
  466. package/dist/integrations/spec.d.ts +2 -1
  467. package/dist/integrations/spec.d.ts.map +1 -0
  468. package/dist/integrations/spec.js +2 -1
  469. package/dist/integrations/spec.js.map +1 -0
  470. package/dist/jobs/define-job.d.ts +2 -1
  471. package/dist/jobs/define-job.d.ts.map +1 -0
  472. package/dist/jobs/define-job.js +2 -1
  473. package/dist/jobs/define-job.js.map +1 -0
  474. package/dist/jobs/gcp-cloud-tasks.d.ts +2 -1
  475. package/dist/jobs/gcp-cloud-tasks.d.ts.map +1 -0
  476. package/dist/jobs/gcp-cloud-tasks.js +2 -1
  477. package/dist/jobs/gcp-cloud-tasks.js.map +1 -0
  478. package/dist/jobs/gcp-pubsub.d.ts +2 -1
  479. package/dist/jobs/gcp-pubsub.d.ts.map +1 -0
  480. package/dist/jobs/gcp-pubsub.js +2 -1
  481. package/dist/jobs/gcp-pubsub.js.map +1 -0
  482. package/dist/jobs/handlers/gmail-sync-handler.d.ts +2 -1
  483. package/dist/jobs/handlers/gmail-sync-handler.d.ts.map +1 -0
  484. package/dist/jobs/handlers/gmail-sync-handler.js +2 -1
  485. package/dist/jobs/handlers/gmail-sync-handler.js.map +1 -0
  486. package/dist/jobs/handlers/index.d.ts +2 -1
  487. package/dist/jobs/handlers/index.d.ts.map +1 -0
  488. package/dist/jobs/handlers/index.js +2 -1
  489. package/dist/jobs/handlers/index.js.map +1 -0
  490. package/dist/jobs/handlers/ping-handler.d.ts +2 -1
  491. package/dist/jobs/handlers/ping-handler.d.ts.map +1 -0
  492. package/dist/jobs/handlers/ping-handler.js +2 -1
  493. package/dist/jobs/handlers/ping-handler.js.map +1 -0
  494. package/dist/jobs/handlers/storage-document-handler.d.ts +2 -1
  495. package/dist/jobs/handlers/storage-document-handler.d.ts.map +1 -0
  496. package/dist/jobs/handlers/storage-document-handler.js +2 -1
  497. package/dist/jobs/handlers/storage-document-handler.js.map +1 -0
  498. package/dist/jobs/memory-queue.d.ts +2 -1
  499. package/dist/jobs/memory-queue.d.ts.map +1 -0
  500. package/dist/jobs/memory-queue.js +2 -1
  501. package/dist/jobs/memory-queue.js.map +1 -0
  502. package/dist/jobs/queue.d.ts +2 -1
  503. package/dist/jobs/queue.d.ts.map +1 -0
  504. package/dist/jobs/queue.js +2 -1
  505. package/dist/jobs/queue.js.map +1 -0
  506. package/dist/jobs/scaleway-sqs-queue.d.ts +2 -1
  507. package/dist/jobs/scaleway-sqs-queue.d.ts.map +1 -0
  508. package/dist/jobs/scaleway-sqs-queue.js +2 -1
  509. package/dist/jobs/scaleway-sqs-queue.js.map +1 -0
  510. package/dist/jsonschema.d.ts +5 -4
  511. package/dist/jsonschema.d.ts.map +1 -0
  512. package/dist/jsonschema.js +2 -1
  513. package/dist/jsonschema.js.map +1 -0
  514. package/dist/knowledge/binding.d.ts +2 -1
  515. package/dist/knowledge/binding.d.ts.map +1 -0
  516. package/dist/knowledge/contracts.d.ts +68 -67
  517. package/dist/knowledge/contracts.d.ts.map +1 -0
  518. package/dist/knowledge/contracts.js +44 -45
  519. package/dist/knowledge/contracts.js.map +1 -0
  520. package/dist/knowledge/docs/knowledge.docblock.d.ts +2 -1
  521. package/dist/knowledge/docs/knowledge.docblock.d.ts.map +1 -0
  522. package/dist/knowledge/docs/knowledge.docblock.js +2 -1
  523. package/dist/knowledge/docs/knowledge.docblock.js.map +1 -0
  524. package/dist/knowledge/ingestion/document-processor.d.ts +2 -1
  525. package/dist/knowledge/ingestion/document-processor.d.ts.map +1 -0
  526. package/dist/knowledge/ingestion/document-processor.js +2 -1
  527. package/dist/knowledge/ingestion/document-processor.js.map +1 -0
  528. package/dist/knowledge/ingestion/embedding-service.d.ts +2 -1
  529. package/dist/knowledge/ingestion/embedding-service.d.ts.map +1 -0
  530. package/dist/knowledge/ingestion/embedding-service.js +2 -1
  531. package/dist/knowledge/ingestion/embedding-service.js.map +1 -0
  532. package/dist/knowledge/ingestion/gmail-adapter.d.ts +2 -1
  533. package/dist/knowledge/ingestion/gmail-adapter.d.ts.map +1 -0
  534. package/dist/knowledge/ingestion/gmail-adapter.js +2 -1
  535. package/dist/knowledge/ingestion/gmail-adapter.js.map +1 -0
  536. package/dist/knowledge/ingestion/storage-adapter.d.ts +2 -1
  537. package/dist/knowledge/ingestion/storage-adapter.d.ts.map +1 -0
  538. package/dist/knowledge/ingestion/storage-adapter.js +2 -1
  539. package/dist/knowledge/ingestion/storage-adapter.js.map +1 -0
  540. package/dist/knowledge/ingestion/vector-indexer.d.ts +2 -1
  541. package/dist/knowledge/ingestion/vector-indexer.d.ts.map +1 -0
  542. package/dist/knowledge/ingestion/vector-indexer.js +2 -1
  543. package/dist/knowledge/ingestion/vector-indexer.js.map +1 -0
  544. package/dist/knowledge/query/service.d.ts +2 -1
  545. package/dist/knowledge/query/service.d.ts.map +1 -0
  546. package/dist/knowledge/query/service.js +2 -1
  547. package/dist/knowledge/query/service.js.map +1 -0
  548. package/dist/knowledge/runtime.d.ts +2 -1
  549. package/dist/knowledge/runtime.d.ts.map +1 -0
  550. package/dist/knowledge/runtime.js +2 -1
  551. package/dist/knowledge/runtime.js.map +1 -0
  552. package/dist/knowledge/source.d.ts +2 -1
  553. package/dist/knowledge/source.d.ts.map +1 -0
  554. package/dist/knowledge/spaces/email-threads.d.ts +2 -1
  555. package/dist/knowledge/spaces/email-threads.d.ts.map +1 -0
  556. package/dist/knowledge/spaces/email-threads.js +2 -1
  557. package/dist/knowledge/spaces/email-threads.js.map +1 -0
  558. package/dist/knowledge/spaces/financial-docs.d.ts +2 -1
  559. package/dist/knowledge/spaces/financial-docs.d.ts.map +1 -0
  560. package/dist/knowledge/spaces/financial-docs.js +2 -1
  561. package/dist/knowledge/spaces/financial-docs.js.map +1 -0
  562. package/dist/knowledge/spaces/financial-overview.d.ts +2 -1
  563. package/dist/knowledge/spaces/financial-overview.d.ts.map +1 -0
  564. package/dist/knowledge/spaces/financial-overview.js +2 -1
  565. package/dist/knowledge/spaces/financial-overview.js.map +1 -0
  566. package/dist/knowledge/spaces/product-canon.d.ts +2 -1
  567. package/dist/knowledge/spaces/product-canon.d.ts.map +1 -0
  568. package/dist/knowledge/spaces/product-canon.js +2 -1
  569. package/dist/knowledge/spaces/product-canon.js.map +1 -0
  570. package/dist/knowledge/spaces/support-faq.d.ts +2 -1
  571. package/dist/knowledge/spaces/support-faq.d.ts.map +1 -0
  572. package/dist/knowledge/spaces/support-faq.js +2 -1
  573. package/dist/knowledge/spaces/support-faq.js.map +1 -0
  574. package/dist/knowledge/spaces/uploaded-docs.d.ts +2 -1
  575. package/dist/knowledge/spaces/uploaded-docs.d.ts.map +1 -0
  576. package/dist/knowledge/spaces/uploaded-docs.js +2 -1
  577. package/dist/knowledge/spaces/uploaded-docs.js.map +1 -0
  578. package/dist/knowledge/spec.d.ts +2 -1
  579. package/dist/knowledge/spec.d.ts.map +1 -0
  580. package/dist/knowledge/spec.js +2 -1
  581. package/dist/knowledge/spec.js.map +1 -0
  582. package/dist/llm/exporters.d.ts +2 -1
  583. package/dist/llm/exporters.d.ts.map +1 -0
  584. package/dist/llm/exporters.js +2 -1
  585. package/dist/llm/exporters.js.map +1 -0
  586. package/dist/llm/prompts.d.ts +2 -1
  587. package/dist/llm/prompts.d.ts.map +1 -0
  588. package/dist/llm/prompts.js +2 -1
  589. package/dist/llm/prompts.js.map +1 -0
  590. package/dist/llm/types.d.ts +2 -1
  591. package/dist/llm/types.d.ts.map +1 -0
  592. package/dist/markdown.d.ts +2 -1
  593. package/dist/markdown.d.ts.map +1 -0
  594. package/dist/markdown.js +2 -1
  595. package/dist/markdown.js.map +1 -0
  596. package/dist/migrations.d.ts +2 -1
  597. package/dist/migrations.d.ts.map +1 -0
  598. package/dist/migrations.js +2 -1
  599. package/dist/migrations.js.map +1 -0
  600. package/dist/onboarding-base.d.ts +31 -30
  601. package/dist/onboarding-base.d.ts.map +1 -0
  602. package/dist/onboarding-base.js +22 -23
  603. package/dist/onboarding-base.js.map +1 -0
  604. package/dist/openapi.d.ts +2 -1
  605. package/dist/openapi.d.ts.map +1 -0
  606. package/dist/openapi.js +2 -1
  607. package/dist/openapi.js.map +1 -0
  608. package/dist/openbanking/docs/openbanking.docblock.d.ts +2 -1
  609. package/dist/openbanking/docs/openbanking.docblock.d.ts.map +1 -0
  610. package/dist/openbanking/docs/openbanking.docblock.js +2 -1
  611. package/dist/openbanking/docs/openbanking.docblock.js.map +1 -0
  612. package/dist/ownership.d.ts +6 -7
  613. package/dist/ownership.d.ts.map +1 -0
  614. package/dist/ownership.js +6 -6
  615. package/dist/ownership.js.map +1 -0
  616. package/dist/policy/docs/policy.docblock.d.ts +2 -1
  617. package/dist/policy/docs/policy.docblock.d.ts.map +1 -0
  618. package/dist/policy/docs/policy.docblock.js +2 -1
  619. package/dist/policy/docs/policy.docblock.js.map +1 -0
  620. package/dist/policy/engine.d.ts +2 -1
  621. package/dist/policy/engine.d.ts.map +1 -0
  622. package/dist/policy/engine.js +2 -1
  623. package/dist/policy/engine.js.map +1 -0
  624. package/dist/policy/opa-adapter.d.ts +2 -1
  625. package/dist/policy/opa-adapter.d.ts.map +1 -0
  626. package/dist/policy/opa-adapter.js +2 -1
  627. package/dist/policy/opa-adapter.js.map +1 -0
  628. package/dist/policy/spec.d.ts +2 -1
  629. package/dist/policy/spec.d.ts.map +1 -0
  630. package/dist/policy/spec.js +2 -1
  631. package/dist/policy/spec.js.map +1 -0
  632. package/dist/presentations/docs/presentations-conventions.docblock.d.ts +2 -1
  633. package/dist/presentations/docs/presentations-conventions.docblock.d.ts.map +1 -0
  634. package/dist/presentations/docs/presentations-conventions.docblock.js +2 -1
  635. package/dist/presentations/docs/presentations-conventions.docblock.js.map +1 -0
  636. package/dist/presentations.backcompat.d.ts +2 -1
  637. package/dist/presentations.backcompat.d.ts.map +1 -0
  638. package/dist/presentations.backcompat.js +2 -1
  639. package/dist/presentations.backcompat.js.map +1 -0
  640. package/dist/presentations.d.ts +5 -4
  641. package/dist/presentations.d.ts.map +1 -0
  642. package/dist/presentations.js +2 -1
  643. package/dist/presentations.js.map +1 -0
  644. package/dist/presentations.v2.d.ts +2 -1
  645. package/dist/presentations.v2.d.ts.map +1 -0
  646. package/dist/presentations.v2.js +2 -1
  647. package/dist/presentations.v2.js.map +1 -0
  648. package/dist/prompt.d.ts +2 -1
  649. package/dist/prompt.d.ts.map +1 -0
  650. package/dist/prompt.js +2 -1
  651. package/dist/prompt.js.map +1 -0
  652. package/dist/promptRegistry.d.ts +2 -1
  653. package/dist/promptRegistry.d.ts.map +1 -0
  654. package/dist/promptRegistry.js +2 -1
  655. package/dist/promptRegistry.js.map +1 -0
  656. package/dist/regenerator/adapters.d.ts +2 -1
  657. package/dist/regenerator/adapters.d.ts.map +1 -0
  658. package/dist/regenerator/docs/regenerator.docblock.d.ts +2 -1
  659. package/dist/regenerator/docs/regenerator.docblock.d.ts.map +1 -0
  660. package/dist/regenerator/docs/regenerator.docblock.js +2 -1
  661. package/dist/regenerator/docs/regenerator.docblock.js.map +1 -0
  662. package/dist/regenerator/executor.d.ts +2 -1
  663. package/dist/regenerator/executor.d.ts.map +1 -0
  664. package/dist/regenerator/executor.js +2 -1
  665. package/dist/regenerator/executor.js.map +1 -0
  666. package/dist/regenerator/service.d.ts +2 -1
  667. package/dist/regenerator/service.d.ts.map +1 -0
  668. package/dist/regenerator/service.js +2 -1
  669. package/dist/regenerator/service.js.map +1 -0
  670. package/dist/regenerator/sinks.d.ts +2 -1
  671. package/dist/regenerator/sinks.d.ts.map +1 -0
  672. package/dist/regenerator/sinks.js +2 -1
  673. package/dist/regenerator/sinks.js.map +1 -0
  674. package/dist/regenerator/types.d.ts +2 -1
  675. package/dist/regenerator/types.d.ts.map +1 -0
  676. package/dist/regenerator/utils.d.ts +2 -1
  677. package/dist/regenerator/utils.d.ts.map +1 -0
  678. package/dist/regenerator/utils.js +2 -1
  679. package/dist/regenerator/utils.js.map +1 -0
  680. package/dist/registry.d.ts +2 -1
  681. package/dist/registry.d.ts.map +1 -0
  682. package/dist/registry.js +2 -1
  683. package/dist/registry.js.map +1 -0
  684. package/dist/resources.d.ts +2 -1
  685. package/dist/resources.d.ts.map +1 -0
  686. package/dist/resources.js +2 -1
  687. package/dist/resources.js.map +1 -0
  688. package/dist/schema/dist/index.js +4684 -6
  689. package/dist/schema/dist/index.js.map +1 -0
  690. package/dist/schema-to-markdown.d.ts +2 -1
  691. package/dist/schema-to-markdown.d.ts.map +1 -0
  692. package/dist/schema-to-markdown.js +2 -1
  693. package/dist/schema-to-markdown.js.map +1 -0
  694. package/dist/server/graphql-pothos.d.ts +2 -1
  695. package/dist/server/graphql-pothos.d.ts.map +1 -0
  696. package/dist/server/graphql-pothos.js +2 -1
  697. package/dist/server/graphql-pothos.js.map +1 -0
  698. package/dist/server/mcp/createMcpServer.d.ts +2 -1
  699. package/dist/server/mcp/createMcpServer.d.ts.map +1 -0
  700. package/dist/server/mcp/createMcpServer.js +2 -1
  701. package/dist/server/mcp/createMcpServer.js.map +1 -0
  702. package/dist/server/mcp/mcpTypes.d.ts +2 -1
  703. package/dist/server/mcp/mcpTypes.d.ts.map +1 -0
  704. package/dist/server/mcp/registerPresentations.d.ts +2 -1
  705. package/dist/server/mcp/registerPresentations.d.ts.map +1 -0
  706. package/dist/server/mcp/registerPresentations.js +2 -1
  707. package/dist/server/mcp/registerPresentations.js.map +1 -0
  708. package/dist/server/mcp/registerPrompts.d.ts +2 -1
  709. package/dist/server/mcp/registerPrompts.d.ts.map +1 -0
  710. package/dist/server/mcp/registerPrompts.js +2 -1
  711. package/dist/server/mcp/registerPrompts.js.map +1 -0
  712. package/dist/server/mcp/registerResources.d.ts +2 -1
  713. package/dist/server/mcp/registerResources.d.ts.map +1 -0
  714. package/dist/server/mcp/registerResources.js +2 -1
  715. package/dist/server/mcp/registerResources.js.map +1 -0
  716. package/dist/server/mcp/registerTools.d.ts +2 -1
  717. package/dist/server/mcp/registerTools.d.ts.map +1 -0
  718. package/dist/server/mcp/registerTools.js +2 -1
  719. package/dist/server/mcp/registerTools.js.map +1 -0
  720. package/dist/server/rest-elysia.d.ts +2 -1
  721. package/dist/server/rest-elysia.d.ts.map +1 -0
  722. package/dist/server/rest-elysia.js +2 -1
  723. package/dist/server/rest-elysia.js.map +1 -0
  724. package/dist/server/rest-express.d.ts +2 -1
  725. package/dist/server/rest-express.d.ts.map +1 -0
  726. package/dist/server/rest-express.js +2 -1
  727. package/dist/server/rest-express.js.map +1 -0
  728. package/dist/server/rest-generic.d.ts +2 -1
  729. package/dist/server/rest-generic.d.ts.map +1 -0
  730. package/dist/server/rest-generic.js +2 -1
  731. package/dist/server/rest-generic.js.map +1 -0
  732. package/dist/server/rest-next-app.d.ts +2 -1
  733. package/dist/server/rest-next-app.d.ts.map +1 -0
  734. package/dist/server/rest-next-app.js +2 -1
  735. package/dist/server/rest-next-app.js.map +1 -0
  736. package/dist/server/rest-next-mcp.d.ts +2 -1
  737. package/dist/server/rest-next-mcp.d.ts.map +1 -0
  738. package/dist/server/rest-next-mcp.js +2 -1
  739. package/dist/server/rest-next-mcp.js.map +1 -0
  740. package/dist/server/rest-next-pages.d.ts +2 -1
  741. package/dist/server/rest-next-pages.d.ts.map +1 -0
  742. package/dist/server/rest-next-pages.js +2 -1
  743. package/dist/server/rest-next-pages.js.map +1 -0
  744. package/dist/spec.d.ts +2 -1
  745. package/dist/spec.d.ts.map +1 -0
  746. package/dist/spec.js +2 -1
  747. package/dist/spec.js.map +1 -0
  748. package/dist/telemetry/anomaly.d.ts +2 -1
  749. package/dist/telemetry/anomaly.d.ts.map +1 -0
  750. package/dist/telemetry/anomaly.js +2 -1
  751. package/dist/telemetry/anomaly.js.map +1 -0
  752. package/dist/telemetry/docs/telemetry.docblock.d.ts +2 -1
  753. package/dist/telemetry/docs/telemetry.docblock.d.ts.map +1 -0
  754. package/dist/telemetry/docs/telemetry.docblock.js +2 -1
  755. package/dist/telemetry/docs/telemetry.docblock.js.map +1 -0
  756. package/dist/telemetry/spec.d.ts +2 -1
  757. package/dist/telemetry/spec.d.ts.map +1 -0
  758. package/dist/telemetry/spec.js +2 -1
  759. package/dist/telemetry/spec.js.map +1 -0
  760. package/dist/telemetry/tracker.d.ts +2 -1
  761. package/dist/telemetry/tracker.d.ts.map +1 -0
  762. package/dist/telemetry/tracker.js +2 -1
  763. package/dist/telemetry/tracker.js.map +1 -0
  764. package/dist/tests/runner.d.ts +2 -1
  765. package/dist/tests/runner.d.ts.map +1 -0
  766. package/dist/tests/runner.js +2 -1
  767. package/dist/tests/runner.js.map +1 -0
  768. package/dist/tests/spec.d.ts +2 -1
  769. package/dist/tests/spec.d.ts.map +1 -0
  770. package/dist/tests/spec.js +2 -1
  771. package/dist/tests/spec.js.map +1 -0
  772. package/dist/themes.d.ts +2 -1
  773. package/dist/themes.d.ts.map +1 -0
  774. package/dist/themes.js +2 -1
  775. package/dist/themes.js.map +1 -0
  776. package/dist/translations/catalog.d.ts +2 -1
  777. package/dist/translations/catalog.d.ts.map +1 -0
  778. package/dist/translations/tenant.d.ts +2 -1
  779. package/dist/translations/tenant.d.ts.map +1 -0
  780. package/dist/types.d.ts +2 -1
  781. package/dist/types.d.ts.map +1 -0
  782. package/dist/workflow/adapters/db-adapter.d.ts +21 -8
  783. package/dist/workflow/adapters/db-adapter.d.ts.map +1 -0
  784. package/dist/workflow/adapters/db-adapter.js +5 -4
  785. package/dist/workflow/adapters/db-adapter.js.map +1 -0
  786. package/dist/workflow/adapters/file-adapter.d.ts +2 -1
  787. package/dist/workflow/adapters/file-adapter.d.ts.map +1 -0
  788. package/dist/workflow/adapters/file-adapter.js +2 -1
  789. package/dist/workflow/adapters/file-adapter.js.map +1 -0
  790. package/dist/workflow/adapters/memory-store.d.ts +2 -1
  791. package/dist/workflow/adapters/memory-store.d.ts.map +1 -0
  792. package/dist/workflow/adapters/memory-store.js +2 -1
  793. package/dist/workflow/adapters/memory-store.js.map +1 -0
  794. package/dist/workflow/expression.d.ts +2 -1
  795. package/dist/workflow/expression.d.ts.map +1 -0
  796. package/dist/workflow/expression.js +2 -1
  797. package/dist/workflow/expression.js.map +1 -0
  798. package/dist/workflow/runner.d.ts +2 -1
  799. package/dist/workflow/runner.d.ts.map +1 -0
  800. package/dist/workflow/runner.js +2 -1
  801. package/dist/workflow/runner.js.map +1 -0
  802. package/dist/workflow/sla-monitor.d.ts +2 -1
  803. package/dist/workflow/sla-monitor.d.ts.map +1 -0
  804. package/dist/workflow/sla-monitor.js +2 -1
  805. package/dist/workflow/sla-monitor.js.map +1 -0
  806. package/dist/workflow/spec.d.ts +2 -1
  807. package/dist/workflow/spec.d.ts.map +1 -0
  808. package/dist/workflow/spec.js +2 -1
  809. package/dist/workflow/spec.js.map +1 -0
  810. package/dist/workflow/state.d.ts +2 -1
  811. package/dist/workflow/state.d.ts.map +1 -0
  812. package/dist/workflow/validation.d.ts +2 -1
  813. package/dist/workflow/validation.d.ts.map +1 -0
  814. package/dist/workflow/validation.js +2 -1
  815. package/dist/workflow/validation.js.map +1 -0
  816. package/package.json +12 -17
  817. package/dist/docs/PUBLISHING.docblock.d.ts +0 -6
  818. package/dist/docs/PUBLISHING.docblock.js +0 -17
  819. package/dist/docs/tech/PHASE_1_QUICKSTART.docblock.d.ts +0 -6
  820. package/dist/docs/tech/PHASE_1_QUICKSTART.docblock.js +0 -17
  821. package/dist/docs/tech/PHASE_2_AI_NATIVE_OPERATIONS.docblock.d.ts +0 -6
  822. package/dist/docs/tech/PHASE_2_AI_NATIVE_OPERATIONS.docblock.js +0 -17
  823. package/dist/docs/tech/PHASE_3_AUTO_EVOLUTION.docblock.d.ts +0 -6
  824. package/dist/docs/tech/PHASE_3_AUTO_EVOLUTION.docblock.js +0 -17
  825. package/dist/docs/tech/PHASE_4_PERSONALIZATION_ENGINE.docblock.d.ts +0 -6
  826. package/dist/docs/tech/PHASE_4_PERSONALIZATION_ENGINE.docblock.js +0 -17
  827. package/dist/docs/tech/PHASE_5_ZERO_TOUCH_OPERATIONS.docblock.d.ts +0 -6
  828. package/dist/docs/tech/PHASE_5_ZERO_TOUCH_OPERATIONS.docblock.js +0 -17
  829. package/dist/schema/dist/EnumType.js +0 -2
  830. package/dist/schema/dist/FieldType.js +0 -49
  831. package/dist/schema/dist/ScalarTypeEnum.js +0 -236
  832. package/dist/schema/dist/SchemaModel.js +0 -39
  833. package/dist/schema/dist/entity/defineEntity.js +0 -1
  834. package/dist/schema/dist/entity/index.js +0 -2
  835. package/dist/schema/dist/entity/types.js +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry.docblock.js","names":["tech_contracts_telemetry_DocBlocks: DocBlock[]"],"sources":["../../../src/telemetry/docs/telemetry.docblock.ts"],"sourcesContent":["import type { DocBlock } from '@lssm/lib.contracts/docs';\nimport { registerDocBlocks } from '../../registry';\n\nexport const tech_contracts_telemetry_DocBlocks: DocBlock[] = [\n {\n id: 'docs.tech.contracts.telemetry',\n title: 'TelemetrySpec',\n summary:\n 'Telemetry specs describe product analytics in a durable, type-safe way. They reference existing `EventSpec`s (same name/version) but layer on privacy classification, retention, sampling, and anomaly detection so instrumentation stays compliant and observable.',\n kind: 'reference',\n visibility: 'public',\n route: '/docs/tech/contracts/telemetry',\n tags: ['tech', 'contracts', 'telemetry'],\n body: \"## TelemetrySpec\\n\\nTelemetry specs describe product analytics in a durable, type-safe way. They reference existing `EventSpec`s (same name/version) but layer on privacy classification, retention, sampling, and anomaly detection so instrumentation stays compliant and observable.\\n\\n- **File location**: `packages/libs/contracts/src/telemetry/spec.ts`\\n- **Runtime tracker**: `packages/libs/contracts/src/telemetry/tracker.ts`\\n- **Anomaly monitor**: `packages/libs/contracts/src/telemetry/anomaly.ts`\\n\\n### Core concepts\\n\\n```ts\\nexport interface TelemetrySpec {\\n meta: TelemetryMeta;\\n events: TelemetryEventDef[];\\n config?: TelemetryConfig;\\n}\\n```\\n\\n- `meta`: ownership + identifiers (`name`, `version`, `domain`)\\n- `events`: per-event semantics, property definitions, privacy level, retention, sampling, anomaly rules\\n- `config`: defaults and provider configuration\\n- `TelemetryRegistry`: registers specs, resolves latest version, finds event definitions by name/version\\n\\n### An example\\n\\n```ts\\nexport const SigilTelemetry: TelemetrySpec = {\\n meta: {\\n name: 'sigil.telemetry',\\n version: 1,\\n title: 'Sigil telemetry',\\n description: 'Core Sigil product telemetry',\\n domain: 'sigil',\\n owners: ['@team.analytics'],\\n tags: ['telemetry'],\\n stability: StabilityEnum.Experimental,\\n },\\n config: {\\n defaultRetentionDays: 30,\\n defaultSamplingRate: 1,\\n providers: [\\n { type: 'posthog', config: { projectApiKey: process.env.POSTHOG_KEY } },\\n ],\\n },\\n events: [\\n {\\n name: 'sigil.telemetry.workflow_step',\\n version: 1,\\n semantics: {\\n what: 'Workflow step executed',\\n who: 'Actor executing the workflow',\\n },\\n privacy: 'internal',\\n properties: {\\n workflow: { type: 'string', required: true },\\n step: { type: 'string', required: true },\\n durationMs: { type: 'number' },\\n userId: { type: 'string', pii: true, redact: true },\\n },\\n anomalyDetection: {\\n enabled: true,\\n minimumSample: 10,\\n thresholds: [\\n { metric: 'durationMs', max: 1500 },\\n ],\\n actions: ['alert', 'trigger_regen'],\\n },\\n },\\n ],\\n};\\n```\\n\\n### Tracking events at runtime\\n\\n`TelemetryTracker` performs sampling, PII redaction, provider dispatch, and anomaly detection.\\n\\n```ts\\nconst tracker = new TelemetryTracker({\\n registry: telemetryRegistry,\\n providers: [\\n {\\n id: 'posthog',\\n async send(dispatch) {\\n posthog.capture({\\n event: dispatch.name,\\n properties: dispatch.properties,\\n distinctId: dispatch.context.userId ?? dispatch.context.sessionId,\\n });\\n },\\n },\\n ],\\n anomalyMonitor: new TelemetryAnomalyMonitor({\\n onAnomaly(event) {\\n console.warn('Telemetry anomaly detected', event);\\n },\\n }),\\n});\\n\\nawait tracker.track('sigil.telemetry.workflow_step', 1, {\\n workflow: 'onboarding',\\n step: 'verify_email',\\n durationMs: 2100,\\n userId: 'user-123',\\n});\\n```\\n\\n- Sampling obeys the event-specific rate (fallback to spec defaults)\\n- Properties flagged with `pii` or `redact` are masked before dispatch\\n- Anomaly monitor evaluates thresholds and triggers actions (e.g., log, alert, regeneration)\\n\\n### Spec integration\\n\\n- `ContractSpec.telemetry` allows operations to emit success/failure events automatically\\n- `SpecRegistry.execute()` uses the tracker when `ctx.telemetry` is provided\\n- `WorkflowRunner` (Phase 4 follow-up) will emit telemetry during step transitions\\n- `TelemetrySpec` events should reuse `EventSpec` names/versions to keep analytics/contract parity\\n\\n### CLI workflow\\n\\n```\\ncontracts-cli create telemetry\\n```\\n\\n- Interactive wizard prompts for meta, providers, events, properties, retention, anomaly rules\\n- Output: `*.telemetry.ts` file using `TelemetrySpec`\\n\\n### Best practices\\n\\n- Prefer `internal` privacy for non-PII; mark PII properties explicitly with `pii` + `redact`\\n- Keep sampling \\u22650.05 except for high-volume events\\n- Configure anomaly detection on key metrics (duration, error count, conversion)\\n- Check telemetry into source control alongside contracts; regenerate via CLI when specs change\\n\\n### Next steps\\n\\n- Phase 5: Regenerator monitors telemetry anomalies to propose spec improvements\\n- Phase 6: Studio surfaces telemetry controls per tenant via `TenantAppConfig`\\n\\n\",\n },\n];\nregisterDocBlocks(tech_contracts_telemetry_DocBlocks);\n"],"mappings":";;;;AAGA,MAAaA,qCAAiD,CAC5D;CACE,IAAI;CACJ,OAAO;CACP,SACE;CACF,MAAM;CACN,YAAY;CACZ,OAAO;CACP,MAAM;EAAC;EAAQ;EAAa;EAAY;CACxC,MAAM;CACP,CACF;AACD,kBAAkB,mCAAmC"}
@@ -95,4 +95,5 @@ declare class TelemetryRegistry {
95
95
  }
96
96
  declare function makeTelemetryKey(meta: TelemetryMeta): string;
97
97
  //#endregion
98
- export { TelemetryAnomalyAction, TelemetryAnomalyDetectionConfig, TelemetryAnomalyThreshold, TelemetryConfig, TelemetryEventDef, TelemetryMeta, TelemetryPrivacyLevel, TelemetryPropertyDef, TelemetryProviderConfig, TelemetryRegistry, TelemetryRetentionConfig, TelemetrySamplingConfig, TelemetrySpec, makeTelemetryKey };
98
+ export { TelemetryAnomalyAction, TelemetryAnomalyDetectionConfig, TelemetryAnomalyThreshold, TelemetryConfig, TelemetryEventDef, TelemetryMeta, TelemetryPrivacyLevel, TelemetryPropertyDef, TelemetryProviderConfig, TelemetryRegistry, TelemetryRetentionConfig, TelemetrySamplingConfig, TelemetrySpec, makeTelemetryKey };
99
+ //# sourceMappingURL=spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spec.d.ts","names":[],"sources":["../../src/telemetry/spec.ts"],"sourcesContent":[],"mappings":";;;KAGY,qBAAA;UAEK,aAAA,SAAsB;EAF3B;EAEK,IAAA,EAAA,MAAA;EASA;EAQA,OAAA,EAAA,MAAA;EAML;EAEK,MAAA,EAAA,MAAA;AAWjB;AAKiB,UAhCA,oBAAA,CAgCwB;EAKxB,IAAA,EAAA,QAAA,GAAA,QAAiB,GAAA,SAAA,GAAA,WAAA,GAAA,MAAA;EAYL,QAAA,CAAA,EAAA,OAAA;EAAf,GAAA,CAAA,EAAA,OAAA;EAEH,MAAA,CAAA,EAAA,OAAA;EAEG,WAAA,CAAA,EAAA,MAAA;;AAIO,UAjDJ,yBAAA,CAiDI;EAA+B,MAAA,EAAA,MAAA;EAKnC,GAAA,CAAA,EAAA,MAAA;EAKA,GAAA,CAAA,EAAA,MAAA;AAUjB;AACQ,KAhEI,sBAAA,GAgEJ,OAAA,GAAA,KAAA,GAAA,eAAA;AACE,UA/DO,+BAAA,CA+DP;EACC,OAAA,EAAA,OAAA;EAAe,UAAA,CAAA,EA9DX,yBA8DW,EAAA;EAKb,OAAA,CAAA,EAlED,sBAkEkB,EAAA;EAKb;;;;EAmDkC,aAAA,CAAA,EAAA,MAAA;;AAmBnC,UArIC,uBAAA,CAqIsB;;;;UAhItB,wBAAA;;;;UAKA,iBAAA;;;;;;;;;;;;cAYH,eAAe;;WAElB;;cAEG;;aAED;;qBAEQ;;;;UAKJ,uBAAA;;UAEP;;UAGO,eAAA;;;cAGH;;;;;;UAOG,aAAA;QACT;UACE;WACC;;cAKE,iBAAA;;;;iBAKI;UAaP;uCAI6B;gDAgBS;mDAkBG;;iBAmBnC,gBAAA,OAAuB"}
@@ -66,4 +66,5 @@ function makeTelemetryKey(meta) {
66
66
  }
67
67
 
68
68
  //#endregion
69
- export { TelemetryRegistry, makeTelemetryKey };
69
+ export { TelemetryRegistry, makeTelemetryKey };
70
+ //# sourceMappingURL=spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spec.js","names":["latest: TelemetrySpec | undefined","latest: TelemetryEventDef | undefined"],"sources":["../../src/telemetry/spec.ts"],"sourcesContent":["import type { OwnerShipMeta } from '../ownership';\nimport type { EventKey } from '../events';\n\nexport type TelemetryPrivacyLevel = 'public' | 'internal' | 'pii' | 'sensitive';\n\nexport interface TelemetryMeta extends OwnerShipMeta {\n /** Fully-qualified telemetry spec name (e.g., \"sigil.core\"). */\n name: string;\n /** Incremented when telemetry definitions change in a breaking way. */\n version: number;\n /** Optional domain or bounded-context hint (e.g., \"onboarding\"). */\n domain: string;\n}\n\nexport interface TelemetryPropertyDef {\n type: 'string' | 'number' | 'boolean' | 'timestamp' | 'json';\n required?: boolean;\n pii?: boolean;\n redact?: boolean;\n description?: string;\n}\n\nexport interface TelemetryAnomalyThreshold {\n metric: string;\n min?: number;\n max?: number;\n}\n\nexport type TelemetryAnomalyAction = 'alert' | 'log' | 'trigger_regen';\n\nexport interface TelemetryAnomalyDetectionConfig {\n enabled: boolean;\n thresholds?: TelemetryAnomalyThreshold[];\n actions?: TelemetryAnomalyAction[];\n /**\n * Minimum sample size before evaluating thresholds.\n * Helps avoid false positives on small sample sizes.\n */\n minimumSample?: number;\n}\n\nexport interface TelemetrySamplingConfig {\n rate: number;\n conditions?: string[];\n}\n\nexport interface TelemetryRetentionConfig {\n days: number;\n policy?: 'archive' | 'delete';\n}\n\nexport interface TelemetryEventDef {\n /** Name of the event (should match EventSpec.name for cross-reference). */\n name: string;\n /** Version of the underlying event. */\n version: number;\n /** High-level semantics for docs/analyzers. */\n semantics: {\n who?: string;\n what: string;\n why?: string;\n };\n /** Detailed property metadata keyed by property name. */\n properties: Record<string, TelemetryPropertyDef>;\n /** Privacy level for the entire event. */\n privacy: TelemetryPrivacyLevel;\n /** Retention policy overrides. */\n retention?: TelemetryRetentionConfig;\n /** Sampling rules, defaulting to spec.config defaults. */\n sampling?: TelemetrySamplingConfig;\n /** Anomaly detection overrides. */\n anomalyDetection?: TelemetryAnomalyDetectionConfig;\n /** Optional tags for analytics/AI hints. */\n tags?: string[];\n}\n\nexport interface TelemetryProviderConfig {\n type: 'posthog' | 'segment' | 'opentelemetry' | 'internal';\n config: Record<string, unknown>;\n}\n\nexport interface TelemetryConfig {\n defaultRetentionDays?: number;\n defaultSamplingRate?: number;\n providers?: TelemetryProviderConfig[];\n anomalyDetection?: {\n enabled: boolean;\n checkIntervalMs?: number;\n };\n}\n\nexport interface TelemetrySpec {\n meta: TelemetryMeta;\n events: TelemetryEventDef[];\n config?: TelemetryConfig;\n}\n\nconst telemetryKey = (meta: TelemetryMeta) => `${meta.name}.v${meta.version}`;\n\nexport class TelemetryRegistry {\n private readonly items = new Map<string, TelemetrySpec>();\n private readonly eventsByKey = new Map<EventKey, TelemetryEventDef>();\n private readonly specByEventKey = new Map<EventKey, TelemetrySpec>();\n\n register(spec: TelemetrySpec): this {\n const key = telemetryKey(spec.meta);\n if (this.items.has(key)) {\n throw new Error(`Duplicate TelemetrySpec registration for ${key}`);\n }\n this.items.set(key, spec);\n for (const event of spec.events) {\n this.eventsByKey.set(`${event.name}.v${event.version}`, event);\n this.specByEventKey.set(`${event.name}.v${event.version}`, spec);\n }\n return this;\n }\n\n list(): TelemetrySpec[] {\n return [...this.items.values()];\n }\n\n get(name: string, version?: number): TelemetrySpec | undefined {\n if (version != null) {\n return this.items.get(`${name}.v${version}`);\n }\n let latest: TelemetrySpec | undefined;\n let maxVersion = -Infinity;\n for (const item of this.items.values()) {\n if (item.meta.name !== name) continue;\n if (item.meta.version > maxVersion) {\n maxVersion = item.meta.version;\n latest = item;\n }\n }\n return latest;\n }\n\n findEventDef(name: string, version?: number): TelemetryEventDef | undefined {\n if (version != null) {\n return this.eventsByKey.get(`${name}.v${version}`);\n }\n let latest: TelemetryEventDef | undefined;\n let maxVersion = -Infinity;\n for (const [key, event] of this.eventsByKey.entries()) {\n const [eventName, versionPart] = key.split('.v');\n if (eventName !== name) continue;\n const ver = Number(versionPart);\n if (Number.isFinite(ver) && ver > maxVersion) {\n maxVersion = ver;\n latest = event;\n }\n }\n return latest;\n }\n\n getSpecForEvent(name: string, version?: number): TelemetrySpec | undefined {\n if (version != null) {\n return this.specByEventKey.get(`${name}.v${version}`);\n }\n let latest: TelemetrySpec | undefined;\n let maxVersion = -Infinity;\n for (const [key, spec] of this.specByEventKey.entries()) {\n const [eventName, versionPart] = key.split('.v');\n if (eventName !== name) continue;\n const ver = Number(versionPart);\n if (Number.isFinite(ver) && ver > maxVersion) {\n maxVersion = ver;\n latest = spec;\n }\n }\n return latest;\n }\n}\n\nexport function makeTelemetryKey(meta: TelemetryMeta) {\n return telemetryKey(meta);\n}\n"],"mappings":";AAiGA,MAAM,gBAAgB,SAAwB,GAAG,KAAK,KAAK,IAAI,KAAK;AAEpE,IAAa,oBAAb,MAA+B;CAC7B,AAAiB,wBAAQ,IAAI,KAA4B;CACzD,AAAiB,8BAAc,IAAI,KAAkC;CACrE,AAAiB,iCAAiB,IAAI,KAA8B;CAEpE,SAAS,MAA2B;EAClC,MAAM,MAAM,aAAa,KAAK,KAAK;AACnC,MAAI,KAAK,MAAM,IAAI,IAAI,CACrB,OAAM,IAAI,MAAM,4CAA4C,MAAM;AAEpE,OAAK,MAAM,IAAI,KAAK,KAAK;AACzB,OAAK,MAAM,SAAS,KAAK,QAAQ;AAC/B,QAAK,YAAY,IAAI,GAAG,MAAM,KAAK,IAAI,MAAM,WAAW,MAAM;AAC9D,QAAK,eAAe,IAAI,GAAG,MAAM,KAAK,IAAI,MAAM,WAAW,KAAK;;AAElE,SAAO;;CAGT,OAAwB;AACtB,SAAO,CAAC,GAAG,KAAK,MAAM,QAAQ,CAAC;;CAGjC,IAAI,MAAc,SAA6C;AAC7D,MAAI,WAAW,KACb,QAAO,KAAK,MAAM,IAAI,GAAG,KAAK,IAAI,UAAU;EAE9C,IAAIA;EACJ,IAAI,aAAa;AACjB,OAAK,MAAM,QAAQ,KAAK,MAAM,QAAQ,EAAE;AACtC,OAAI,KAAK,KAAK,SAAS,KAAM;AAC7B,OAAI,KAAK,KAAK,UAAU,YAAY;AAClC,iBAAa,KAAK,KAAK;AACvB,aAAS;;;AAGb,SAAO;;CAGT,aAAa,MAAc,SAAiD;AAC1E,MAAI,WAAW,KACb,QAAO,KAAK,YAAY,IAAI,GAAG,KAAK,IAAI,UAAU;EAEpD,IAAIC;EACJ,IAAI,aAAa;AACjB,OAAK,MAAM,CAAC,KAAK,UAAU,KAAK,YAAY,SAAS,EAAE;GACrD,MAAM,CAAC,WAAW,eAAe,IAAI,MAAM,KAAK;AAChD,OAAI,cAAc,KAAM;GACxB,MAAM,MAAM,OAAO,YAAY;AAC/B,OAAI,OAAO,SAAS,IAAI,IAAI,MAAM,YAAY;AAC5C,iBAAa;AACb,aAAS;;;AAGb,SAAO;;CAGT,gBAAgB,MAAc,SAA6C;AACzE,MAAI,WAAW,KACb,QAAO,KAAK,eAAe,IAAI,GAAG,KAAK,IAAI,UAAU;EAEvD,IAAID;EACJ,IAAI,aAAa;AACjB,OAAK,MAAM,CAAC,KAAK,SAAS,KAAK,eAAe,SAAS,EAAE;GACvD,MAAM,CAAC,WAAW,eAAe,IAAI,MAAM,KAAK;AAChD,OAAI,cAAc,KAAM;GACxB,MAAM,MAAM,OAAO,YAAY;AAC/B,OAAI,OAAO,SAAS,IAAI,IAAI,MAAM,YAAY;AAC5C,iBAAa;AACb,aAAS;;;AAGb,SAAO;;;AAIX,SAAgB,iBAAiB,MAAqB;AACpD,QAAO,aAAa,KAAK"}
@@ -48,4 +48,5 @@ declare class TelemetryTracker {
48
48
  private redactProperties;
49
49
  }
50
50
  //#endregion
51
- export { RuntimeTelemetryProvider, TelemetryDispatch, TelemetryEventContext, TelemetryTracker, TelemetryTrackerOptions };
51
+ export { RuntimeTelemetryProvider, TelemetryDispatch, TelemetryEventContext, TelemetryTracker, TelemetryTrackerOptions };
52
+ //# sourceMappingURL=tracker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracker.d.ts","names":[],"sources":["../../src/telemetry/tracker.ts"],"sourcesContent":[],"mappings":";;;;UASiB,qBAAA;;EAAA,cAAA,CAAA,EAAA,MAAA,GAAqB,IAAA;EAUrB,MAAA,CAAA,EAAA,MAAA,GAAA,IAAiB;EAKpB,SAAA,CAAA,EAAA,MAAA,GAAA,IAAA;EACH,KAAA,CAAA,EAAA,WAAA,GAAA,MAAA,GAAA,OAAA;EACA,OAAA,CAAA,EAAA,KAAA,GAAA,QAAA,GAAA,KAAA,GAAA,OAAA;EAEH,QAAA,CAAA,EAZK,MAYL,CAAA,MAAA,EAAA,OAAA,CAAA;;AACuB,UAVd,iBAAA,CAUc;EAGd,EAAA,EAAA,MAAA;EAKA,IAAA,EAAA,MAAA;EACL,OAAA,EAAA,MAAA;EACE,UAAA,EAAA,MAAA;EACK,UAAA,EAhBL,MAgBK,CAAA,MAAA,EAAA,OAAA,CAAA;EAEH,OAAA,EAjBL,iBAiBK,CAAA,SAAA,CAAA;EAAI,OAAA,EAhBT,qBAgBS;EAoBP,IAAA,CAAA,EAAA,MAAA,EAAA;EAOU,IAAA,EAzCf,aAyCe;EAWM,UAAA,EAnDf,iBAmDe;;AAYhB,UA5DI,wBAAA,CA4DJ;EACR,EAAA,EAAA,MAAA;EAAO,IAAA,CAAA,KAAA,EA3DE,iBA2DF,CAAA,EA3DsB,OA2DtB,CAAA,IAAA,CAAA;;UAxDK,uBAAA;YACL;cACE;mBACK;;gBAEH;;cAoBH,gBAAA;;;;;;uBAOU;6BAWM;;mDAWb,mCACH,wBACR"}
@@ -73,4 +73,5 @@ var TelemetryTracker = class {
73
73
  };
74
74
 
75
75
  //#endregion
76
- export { TelemetryTracker };
76
+ export { TelemetryTracker };
77
+ //# sourceMappingURL=tracker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracker.js","names":["dispatch: TelemetryDispatch","result: Record<string, unknown>"],"sources":["../../src/telemetry/tracker.ts"],"sourcesContent":["import { randomUUID } from 'crypto';\nimport type { TelemetryAnomalyMonitor } from './anomaly';\nimport type {\n TelemetryEventDef,\n TelemetryRegistry,\n TelemetrySamplingConfig,\n TelemetrySpec,\n} from './spec';\n\nexport interface TelemetryEventContext {\n tenantId?: string;\n organizationId?: string | null;\n userId?: string | null;\n sessionId?: string | null;\n actor?: 'anonymous' | 'user' | 'admin';\n channel?: 'web' | 'mobile' | 'job' | 'agent';\n metadata?: Record<string, unknown>;\n}\n\nexport interface TelemetryDispatch {\n id: string;\n name: string;\n version: number;\n occurredAt: string;\n properties: Record<string, unknown>;\n privacy: TelemetryEventDef['privacy'];\n context: TelemetryEventContext;\n tags?: string[];\n spec: TelemetrySpec;\n definition: TelemetryEventDef;\n}\n\nexport interface RuntimeTelemetryProvider {\n id: string;\n send(event: TelemetryDispatch): Promise<void>;\n}\n\nexport interface TelemetryTrackerOptions {\n registry: TelemetryRegistry;\n providers?: RuntimeTelemetryProvider[];\n anomalyMonitor?: TelemetryAnomalyMonitor;\n random?: () => number;\n clock?: () => Date;\n}\n\nconst maskValue = (value: unknown) => {\n if (value == null) return value;\n if (typeof value === 'string') return 'REDACTED';\n if (typeof value === 'number') return 0;\n if (typeof value === 'boolean') return false;\n if (Array.isArray(value)) return value.map(() => 'REDACTED');\n if (typeof value === 'object') {\n return Object.fromEntries(\n Object.keys(value as Record<string, unknown>).map((key) => [\n key,\n 'REDACTED',\n ])\n );\n }\n return 'REDACTED';\n};\n\nexport class TelemetryTracker {\n private readonly providers = new Map<string, RuntimeTelemetryProvider>();\n private readonly registry: TelemetryRegistry;\n private readonly anomalyMonitor?: TelemetryAnomalyMonitor;\n private readonly random: () => number;\n private readonly clock: () => Date;\n\n constructor(options: TelemetryTrackerOptions) {\n this.registry = options.registry;\n this.anomalyMonitor = options.anomalyMonitor;\n this.random = options.random ?? Math.random;\n this.clock = options.clock ?? (() => new Date());\n\n for (const provider of options.providers ?? []) {\n this.providers.set(provider.id, provider);\n }\n }\n\n registerProvider(provider: RuntimeTelemetryProvider) {\n this.providers.set(provider.id, provider);\n }\n\n unregisterProvider(providerId: string) {\n this.providers.delete(providerId);\n }\n\n async track(\n name: string,\n version: number,\n properties: Record<string, unknown>,\n context: TelemetryEventContext = {}\n ): Promise<boolean> {\n const definition = this.registry.findEventDef(name, version);\n if (!definition) return false;\n\n const spec = this.registry.getSpecForEvent(\n definition.name,\n definition.version\n );\n if (!spec) return false;\n\n if (\n !this.shouldSample(\n definition.sampling ?? spec.config?.defaultSamplingRate\n )\n ) {\n return false;\n }\n\n const redactedProperties = this.redactProperties(definition, properties);\n const dispatch: TelemetryDispatch = {\n id: randomUUID(),\n name: definition.name,\n version: definition.version,\n occurredAt: this.clock().toISOString(),\n properties: redactedProperties,\n privacy: definition.privacy,\n context,\n tags: definition.tags,\n spec,\n definition,\n };\n\n await Promise.all(\n [...this.providers.values()].map((provider) => provider.send(dispatch))\n );\n\n this.anomalyMonitor?.observe(dispatch);\n return true;\n }\n\n private shouldSample(\n sampling: TelemetrySamplingConfig | number | undefined\n ): boolean {\n if (typeof sampling === 'number') {\n return this.random() < sampling;\n }\n if (!sampling) return true;\n return this.random() < sampling.rate;\n }\n\n private redactProperties(\n definition: TelemetryEventDef,\n properties: Record<string, unknown>\n ): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(properties)) {\n const def = definition.properties[key];\n if (!def) {\n result[key] = value;\n continue;\n }\n if (def.redact || def.pii || definition.privacy === 'sensitive') {\n result[key] = maskValue(value);\n } else {\n result[key] = value;\n }\n }\n return result;\n }\n}\n"],"mappings":";;;AA6CA,MAAM,aAAa,UAAmB;AACpC,KAAI,SAAS,KAAM,QAAO;AAC1B,KAAI,OAAO,UAAU,SAAU,QAAO;AACtC,KAAI,OAAO,UAAU,SAAU,QAAO;AACtC,KAAI,OAAO,UAAU,UAAW,QAAO;AACvC,KAAI,MAAM,QAAQ,MAAM,CAAE,QAAO,MAAM,UAAU,WAAW;AAC5D,KAAI,OAAO,UAAU,SACnB,QAAO,OAAO,YACZ,OAAO,KAAK,MAAiC,CAAC,KAAK,QAAQ,CACzD,KACA,WACD,CAAC,CACH;AAEH,QAAO;;AAGT,IAAa,mBAAb,MAA8B;CAC5B,AAAiB,4BAAY,IAAI,KAAuC;CACxE,AAAiB;CACjB,AAAiB;CACjB,AAAiB;CACjB,AAAiB;CAEjB,YAAY,SAAkC;AAC5C,OAAK,WAAW,QAAQ;AACxB,OAAK,iBAAiB,QAAQ;AAC9B,OAAK,SAAS,QAAQ,UAAU,KAAK;AACrC,OAAK,QAAQ,QAAQ,gCAAgB,IAAI,MAAM;AAE/C,OAAK,MAAM,YAAY,QAAQ,aAAa,EAAE,CAC5C,MAAK,UAAU,IAAI,SAAS,IAAI,SAAS;;CAI7C,iBAAiB,UAAoC;AACnD,OAAK,UAAU,IAAI,SAAS,IAAI,SAAS;;CAG3C,mBAAmB,YAAoB;AACrC,OAAK,UAAU,OAAO,WAAW;;CAGnC,MAAM,MACJ,MACA,SACA,YACA,UAAiC,EAAE,EACjB;EAClB,MAAM,aAAa,KAAK,SAAS,aAAa,MAAM,QAAQ;AAC5D,MAAI,CAAC,WAAY,QAAO;EAExB,MAAM,OAAO,KAAK,SAAS,gBACzB,WAAW,MACX,WAAW,QACZ;AACD,MAAI,CAAC,KAAM,QAAO;AAElB,MACE,CAAC,KAAK,aACJ,WAAW,YAAY,KAAK,QAAQ,oBACrC,CAED,QAAO;EAGT,MAAM,qBAAqB,KAAK,iBAAiB,YAAY,WAAW;EACxE,MAAMA,WAA8B;GAClC,IAAI,YAAY;GAChB,MAAM,WAAW;GACjB,SAAS,WAAW;GACpB,YAAY,KAAK,OAAO,CAAC,aAAa;GACtC,YAAY;GACZ,SAAS,WAAW;GACpB;GACA,MAAM,WAAW;GACjB;GACA;GACD;AAED,QAAM,QAAQ,IACZ,CAAC,GAAG,KAAK,UAAU,QAAQ,CAAC,CAAC,KAAK,aAAa,SAAS,KAAK,SAAS,CAAC,CACxE;AAED,OAAK,gBAAgB,QAAQ,SAAS;AACtC,SAAO;;CAGT,AAAQ,aACN,UACS;AACT,MAAI,OAAO,aAAa,SACtB,QAAO,KAAK,QAAQ,GAAG;AAEzB,MAAI,CAAC,SAAU,QAAO;AACtB,SAAO,KAAK,QAAQ,GAAG,SAAS;;CAGlC,AAAQ,iBACN,YACA,YACyB;EACzB,MAAMC,SAAkC,EAAE;AAC1C,OAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,WAAW,EAAE;GACrD,MAAM,MAAM,WAAW,WAAW;AAClC,OAAI,CAAC,KAAK;AACR,WAAO,OAAO;AACd;;AAEF,OAAI,IAAI,UAAU,IAAI,OAAO,WAAW,YAAY,YAClD,QAAO,OAAO,UAAU,MAAM;OAE9B,QAAO,OAAO;;AAGlB,SAAO"}
@@ -40,4 +40,5 @@ declare class TestRunner {
40
40
  private evaluateEventsAssertion;
41
41
  }
42
42
  //#endregion
43
- export { AssertionResult, ScenarioRunResult, TestRunResult, TestRunner, TestRunnerConfig };
43
+ export { AssertionResult, ScenarioRunResult, TestRunResult, TestRunner, TestRunnerConfig };
44
+ //# sourceMappingURL=runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner.d.ts","names":[],"sources":["../../src/tests/runner.ts"],"sourcesContent":[],"mappings":";;;;;;UAciB,iBAAA;YACL;;EADK,KAAA,CAAA,EAGP,KAHO;EACL,gBAAA,EAGQ,eAHR,EAAA;;AAGQ,UAGH,eAAA,CAHG;EAAe,SAAA,EAItB,SAJsB;EAGlB,MAAA,EAAA,QAAA,GAAe,QAAA;EAMf,OAAA,CAAA,EAAA,MAAa;AAO9B;AACY,UARK,aAAA,CAQL;EACY,IAAA,EARhB,QAQgB;EAAqB,SAAA,EAPhC,iBAOgC,EAAA;EAAR,MAAA,EAAA,MAAA;EACX,MAAA,EAAA,MAAA;;AAEZ,UALG,gBAAA,CAKH;EACF,QAAA,EALA,YAKA;EACE,aAAA,CAAA,EAAA,GAAA,GALU,UAKV,GALuB,OAKvB,CAL+B,UAK/B,CAAA;EAAO,UAAA,CAAA,EAAA,CAAA,QAAA,EAJK,YAIL,EAAA,GAAA,IAAA,GAJ6B,OAI7B,CAAA,IAAA,CAAA;EAeR,SAAA,CAAA,EAAA,CAAU,QAAA,EAjBT,YAiBS,EAAA,MAAA,EAhBX,iBAgBW,EAAA,GAAA,IAAA,GAfT,OAeS,CAAA,IAAA,CAAA;;AAGL,cAHL,UAAA,CAGK;EAAmB,iBAAA,MAAA;EAAR,WAAA,CAAA,MAAA,EAFU,gBAEV;EAAO,GAAA,CAAA,IAAA,EAAlB,QAAkB,CAAA,EAAP,OAAO,CAAC,aAAD,CAAA"}
@@ -147,4 +147,5 @@ var TestRunner = class {
147
147
  };
148
148
 
149
149
  //#endregion
150
- export { TestRunner };
150
+ export { TestRunner };
151
+ //# sourceMappingURL=runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner.js","names":["config: TestRunnerConfig","scenarios: ScenarioRunResult[]","assertionResults: AssertionResult[]","events: RecordedEvent[]","ctx: HandlerCtx","failures: string[]"],"sources":["../../src/tests/runner.ts"],"sourcesContent":["import { deepStrictEqual } from 'node:assert';\nimport { SpecRegistry } from '../index';\nimport type { HandlerCtx } from '../types';\nimport type {\n Action,\n Assertion,\n ExpectErrorAssertion,\n ExpectEventsAssertion,\n ExpectOutputAssertion,\n Fixture,\n TestScenario,\n TestSpec,\n} from './spec';\n\nexport interface ScenarioRunResult {\n scenario: TestScenario;\n status: 'passed' | 'failed';\n error?: Error;\n assertionResults: AssertionResult[];\n}\n\nexport interface AssertionResult {\n assertion: Assertion;\n status: 'passed' | 'failed';\n message?: string;\n}\n\nexport interface TestRunResult {\n spec: TestSpec;\n scenarios: ScenarioRunResult[];\n passed: number;\n failed: number;\n}\n\nexport interface TestRunnerConfig {\n registry: SpecRegistry;\n createContext?: () => HandlerCtx | Promise<HandlerCtx>;\n beforeEach?: (scenario: TestScenario) => void | Promise<void>;\n afterEach?: (\n scenario: TestScenario,\n result: ScenarioRunResult\n ) => void | Promise<void>;\n}\n\ninterface OperationResult {\n output?: unknown;\n error?: Error;\n events: RecordedEvent[];\n}\n\ninterface RecordedEvent {\n name: string;\n version: number;\n payload: unknown;\n}\n\nexport class TestRunner {\n constructor(private readonly config: TestRunnerConfig) {}\n\n async run(spec: TestSpec): Promise<TestRunResult> {\n const scenarios: ScenarioRunResult[] = [];\n let passed = 0;\n let failed = 0;\n\n for (const scenario of spec.scenarios) {\n await this.config.beforeEach?.(scenario);\n\n const result = await this.runScenario(spec, scenario);\n scenarios.push(result);\n if (result.status === 'passed') passed += 1;\n else failed += 1;\n\n await this.config.afterEach?.(scenario, result);\n }\n\n return {\n spec,\n scenarios,\n passed,\n failed,\n };\n }\n\n private async runScenario(\n spec: TestSpec,\n scenario: TestScenario\n ): Promise<ScenarioRunResult> {\n const assertionResults: AssertionResult[] = [];\n\n try {\n const context = await this.createContext();\n const fixtures = [...(spec.fixtures ?? []), ...(scenario.given ?? [])];\n const events: RecordedEvent[] = [];\n\n for (const fixture of fixtures) {\n await this.executeOperation(fixture, context, events);\n }\n\n const actionResult = await this.executeOperation(\n scenario.when,\n context,\n events\n );\n\n const assertions = scenario.then ?? [];\n for (const assertion of assertions) {\n const assertionResult = this.evaluateAssertion(\n assertion,\n actionResult,\n events\n );\n assertionResults.push(assertionResult);\n }\n\n const hasFailure = assertionResults.some(\n (assertion) => assertion.status === 'failed'\n );\n return {\n scenario,\n status: hasFailure ? 'failed' : 'passed',\n assertionResults,\n };\n } catch (error) {\n return {\n scenario,\n status: 'failed',\n error: error as Error,\n assertionResults,\n };\n }\n }\n\n private async createContext(): Promise<HandlerCtx> {\n const baseCtx = (await this.config.createContext?.()) ?? {};\n return { ...baseCtx };\n }\n\n private async executeOperation(\n action: Action | Fixture,\n baseCtx: HandlerCtx,\n recordedEvents: RecordedEvent[]\n ): Promise<OperationResult> {\n const ctx: HandlerCtx = {\n ...baseCtx,\n eventPublisher: async (event) => {\n recordedEvents.push({\n name: event.name,\n version: event.version,\n payload: event.payload,\n });\n await baseCtx.eventPublisher?.(event);\n },\n };\n\n try {\n const output = await this.config.registry.execute(\n action.operation.name,\n action.operation.version,\n action.input ?? null,\n ctx\n );\n return { output, events: recordedEvents };\n } catch (error) {\n return { error: error as Error, events: recordedEvents };\n }\n }\n\n private evaluateAssertion(\n assertion: Assertion,\n result: OperationResult,\n events: RecordedEvent[]\n ): AssertionResult {\n switch (assertion.type) {\n case 'expectOutput':\n return this.evaluateOutputAssertion(assertion, result);\n case 'expectError':\n return this.evaluateErrorAssertion(assertion, result);\n case 'expectEvents':\n return this.evaluateEventsAssertion(assertion, events);\n default:\n return {\n assertion,\n status: 'failed',\n message: `Unknown assertion type ${(assertion as Assertion).type}`,\n };\n }\n }\n\n private evaluateOutputAssertion(\n assertion: ExpectOutputAssertion,\n result: OperationResult\n ): AssertionResult {\n if (result.error) {\n return {\n assertion,\n status: 'failed',\n message: `Expected output but operation threw error: ${result.error.message}`,\n };\n }\n try {\n deepStrictEqual(result.output, assertion.match);\n return { assertion, status: 'passed' };\n } catch (error) {\n return {\n assertion,\n status: 'failed',\n message:\n error instanceof Error ? error.message : 'Output assertion failed',\n };\n }\n }\n\n private evaluateErrorAssertion(\n assertion: ExpectErrorAssertion,\n result: OperationResult\n ): AssertionResult {\n if (!result.error) {\n return {\n assertion,\n status: 'failed',\n message: 'Expected an error but operation completed successfully',\n };\n }\n if (\n assertion.messageIncludes &&\n !result.error.message.includes(assertion.messageIncludes)\n ) {\n return {\n assertion,\n status: 'failed',\n message: `Error message \"${result.error.message}\" did not include expected substring \"${assertion.messageIncludes}\"`,\n };\n }\n return { assertion, status: 'passed' };\n }\n\n private evaluateEventsAssertion(\n assertion: ExpectEventsAssertion,\n events: RecordedEvent[]\n ): AssertionResult {\n const failures: string[] = [];\n\n for (const expected of assertion.events) {\n const matches = events.filter(\n (event) =>\n event.name === expected.name && event.version === expected.version\n );\n const count = matches.length;\n if (\n (typeof expected.min === 'number' && count < expected.min) ||\n (typeof expected.max === 'number' && count > expected.max)\n ) {\n failures.push(\n `Event ${expected.name}.v${expected.version} occurred ${count} times (expected ${expected.min ?? 0} - ${expected.max ?? '∞'})`\n );\n } else if (\n typeof expected.min === 'undefined' &&\n typeof expected.max === 'undefined' &&\n count === 0\n ) {\n failures.push(\n `Event ${expected.name}.v${expected.version} did not occur`\n );\n }\n }\n\n if (failures.length > 0) {\n return {\n assertion,\n status: 'failed',\n message: failures.join('; '),\n };\n }\n return { assertion, status: 'passed' };\n }\n}\n"],"mappings":"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"}
@@ -86,4 +86,5 @@ declare class TestRegistry {
86
86
  }
87
87
  declare function makeTestKey(meta: TestSpecMeta): string;
88
88
  //#endregion
89
- export { Action, Assertion, CoverageRequirement, ExpectErrorAssertion, ExpectEventsAssertion, ExpectOutputAssertion, ExpectedEvent, Fixture, OperationTargetRef, TestRegistry, TestScenario, TestSpec, TestSpecMeta, TestSpecRef, TestTarget, WorkflowTargetRef, makeTestKey };
89
+ export { Action, Assertion, CoverageRequirement, ExpectErrorAssertion, ExpectEventsAssertion, ExpectOutputAssertion, ExpectedEvent, Fixture, OperationTargetRef, TestRegistry, TestScenario, TestSpec, TestSpecMeta, TestSpecRef, TestTarget, WorkflowTargetRef, makeTestKey };
90
+ //# sourceMappingURL=spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spec.d.ts","names":[],"sources":["../../src/tests/spec.ts"],"sourcesContent":[],"mappings":";;;UAEiB,kBAAA;;EAAA,OAAA,CAAA,EAAA,MAAA;AAKjB;AAKY,UALK,iBAAA,CAMkB;EAGlB,IAAA,EAAA,MAAO;EAMP,OAAA,CAAA,EAAM,MAAA;AAKvB;AAKiB,KApBL,UAAA,GAoBK;EAKA,IAAA,EAAA,UAAa;EAOb,SAAA,EA/BkB,kBA+BG;AAKtC,CAAA,GAAY;EACR,IAAA,EAAA,UAAA;EACA,QAAA,EArC8B,iBAqC9B;CACA;AAAqB,UApCR,OAAA,CAoCQ;EAER,WAAA,CAAA,EAAA,MAAY;EAGnB,SAAA,EAvCG,kBAuCH;EACF,KAAA,CAAA,EAAA,OAAA;;AACU,UArCD,MAAA,CAqCC;EAGD,SAAA,EAvCJ,kBAuCuB;EAQnB,KAAA,CAAA,EAAA,OAAY;;AAMrB,UAjDS,qBAAA,CAiDT;EACK,IAAA,EAAA,cAAA;EAAS,KAAA,EAAA,OAAA;AAGtB;AACQ,UAjDS,oBAAA,CAiDT;EACE,IAAA,EAAA,aAAA;EACG,eAAA,CAAA,EAAA,MAAA;;AAEA,UAhDI,aAAA,CAgDJ;EAAmB,IAAA,EAAA,MAAA;EAGf,OAAA,EAAA,MAAW;EAOf,GAAA,CAAA,EAAA,MAAA;EAGI,GAAA,CAAA,EAAA,MAAA;;AAasB,UAnEtB,qBAAA,CAmEsB;EAAQ,IAAA,EAAA,cAAA;EAiB/B,MAAA,EAlFN,aAkFiB,EAAA;;KA/Ef,SAAA,GACR,wBACA,uBACA;UAEa,YAAA;;;UAGP;QACF;SACC;;UAGQ,mBAAA;;;;;;;UAQA,YAAA;;;;;UAKP;QACF;aACK;;UAGI,QAAA;QACT;UACE;aACG;aACA;aACA;;UAGI,WAAA;;;;cAOJ,YAAA;;iBAGI;UASP;uCAI6B;;iBAiBvB,WAAA,OAAkB"}
@@ -30,4 +30,5 @@ function makeTestKey(meta) {
30
30
  }
31
31
 
32
32
  //#endregion
33
- export { TestRegistry, makeTestKey };
33
+ export { TestRegistry, makeTestKey };
34
+ //# sourceMappingURL=spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spec.js","names":["latest: TestSpec | undefined"],"sources":["../../src/tests/spec.ts"],"sourcesContent":["import type { Owner, Stability, Tag } from '../ownership';\n\nexport interface OperationTargetRef {\n name: string;\n version?: number;\n}\n\nexport interface WorkflowTargetRef {\n name: string;\n version?: number;\n}\n\nexport type TestTarget =\n | { type: 'contract'; operation: OperationTargetRef }\n | { type: 'workflow'; workflow: WorkflowTargetRef };\n\nexport interface Fixture {\n description?: string;\n operation: OperationTargetRef;\n input?: unknown;\n}\n\nexport interface Action {\n operation: OperationTargetRef;\n input?: unknown;\n}\n\nexport interface ExpectOutputAssertion {\n type: 'expectOutput';\n match: unknown;\n}\n\nexport interface ExpectErrorAssertion {\n type: 'expectError';\n messageIncludes?: string;\n}\n\nexport interface ExpectedEvent {\n name: string;\n version: number;\n min?: number;\n max?: number;\n}\n\nexport interface ExpectEventsAssertion {\n type: 'expectEvents';\n events: ExpectedEvent[];\n}\n\nexport type Assertion =\n | ExpectOutputAssertion\n | ExpectErrorAssertion\n | ExpectEventsAssertion;\n\nexport interface TestScenario {\n name: string;\n description?: string;\n given?: Fixture[];\n when: Action;\n then?: Assertion[];\n}\n\nexport interface CoverageRequirement {\n statements?: number;\n branches?: number;\n functions?: number;\n lines?: number;\n mutations?: number;\n}\n\nexport interface TestSpecMeta {\n name: string;\n version: number;\n title: string;\n description?: string;\n owners: Owner[];\n tags: Tag[];\n stability: Stability;\n}\n\nexport interface TestSpec {\n meta: TestSpecMeta;\n target: TestTarget;\n fixtures?: Fixture[];\n scenarios: TestScenario[];\n coverage?: CoverageRequirement;\n}\n\nexport interface TestSpecRef {\n name: string;\n version?: number;\n}\n\nconst testKey = (meta: TestSpecMeta) => `${meta.name}.v${meta.version}`;\n\nexport class TestRegistry {\n private readonly items = new Map<string, TestSpec>();\n\n register(spec: TestSpec): this {\n const key = testKey(spec.meta);\n if (this.items.has(key)) {\n throw new Error(`Duplicate TestSpec registration for ${key}`);\n }\n this.items.set(key, spec);\n return this;\n }\n\n list(): TestSpec[] {\n return [...this.items.values()];\n }\n\n get(name: string, version?: number): TestSpec | undefined {\n if (version != null) {\n return this.items.get(`${name}.v${version}`);\n }\n let latest: TestSpec | undefined;\n let maxVersion = -Infinity;\n for (const spec of this.items.values()) {\n if (spec.meta.name !== name) continue;\n if (spec.meta.version > maxVersion) {\n maxVersion = spec.meta.version;\n latest = spec;\n }\n }\n return latest;\n }\n}\n\nexport function makeTestKey(meta: TestSpecMeta) {\n return testKey(meta);\n}\n"],"mappings":";AA6FA,MAAM,WAAW,SAAuB,GAAG,KAAK,KAAK,IAAI,KAAK;AAE9D,IAAa,eAAb,MAA0B;CACxB,AAAiB,wBAAQ,IAAI,KAAuB;CAEpD,SAAS,MAAsB;EAC7B,MAAM,MAAM,QAAQ,KAAK,KAAK;AAC9B,MAAI,KAAK,MAAM,IAAI,IAAI,CACrB,OAAM,IAAI,MAAM,uCAAuC,MAAM;AAE/D,OAAK,MAAM,IAAI,KAAK,KAAK;AACzB,SAAO;;CAGT,OAAmB;AACjB,SAAO,CAAC,GAAG,KAAK,MAAM,QAAQ,CAAC;;CAGjC,IAAI,MAAc,SAAwC;AACxD,MAAI,WAAW,KACb,QAAO,KAAK,MAAM,IAAI,GAAG,KAAK,IAAI,UAAU;EAE9C,IAAIA;EACJ,IAAI,aAAa;AACjB,OAAK,MAAM,QAAQ,KAAK,MAAM,QAAQ,EAAE;AACtC,OAAI,KAAK,KAAK,SAAS,KAAM;AAC7B,OAAI,KAAK,KAAK,UAAU,YAAY;AAClC,iBAAa,KAAK,KAAK;AACvB,aAAS;;;AAGb,SAAO;;;AAIX,SAAgB,YAAY,MAAoB;AAC9C,QAAO,QAAQ,KAAK"}
package/dist/themes.d.ts CHANGED
@@ -52,4 +52,5 @@ declare class ThemeRegistry {
52
52
  }
53
53
  declare function makeThemeRef(spec: ThemeSpec): ThemeRef;
54
54
  //#endregion
55
- export { ComponentVariantDefinition, ComponentVariantSpec, ThemeMeta, ThemeOverride, ThemeRef, ThemeRegistry, ThemeScope, ThemeSpec, ThemeToken, ThemeTokens, makeThemeRef };
55
+ export { ComponentVariantDefinition, ComponentVariantSpec, ThemeMeta, ThemeOverride, ThemeRef, ThemeRegistry, ThemeScope, ThemeSpec, ThemeToken, ThemeTokens, makeThemeRef };
56
+ //# sourceMappingURL=themes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"themes.d.ts","names":[],"sources":["../src/themes.ts"],"sourcesContent":[],"mappings":";;;KAEY,UAAA;UAEK;EAFL,KAAA,EAGH,CAHG;EAEK,WAAA,CAAA,EAAU,MAAA;AAK3B;AAC0B,UADT,WAAA,CACS;EAAf,MAAA,CAAA,EAAA,MAAA,CAAA,MAAA,EAAe,UAAf,CAAA,MAAA,CAAA,CAAA;EACc,KAAA,CAAA,EAAf,MAAe,CAAA,MAAA,EAAA,UAAA,CAAA,MAAA,CAAA,CAAA;EAAf,KAAA,CAAA,EACA,MADA,CAAA,MAAA,EACe,UADf,CAAA,MAAA,CAAA,CAAA;EACe,UAAA,CAAA,EACV,MADU,CAAA,MAAA,EACK,UADL,CAAA,MAAA,CAAA,CAAA;EAAf,OAAA,CAAA,EAEE,MAFF,CAAA,MAAA,EAEiB,UAFjB,CAAA,MAAA,CAAA,CAAA;EACoB,MAAA,CAAA,EAEnB,MAFmB,CAAA,MAAA,EAEJ,UAFI,CAAA,MAAA,CAAA,CAAA;;AACH,UAIV,0BAAA,CAJU;EAAf,KAAA,CAAA,EAKF,MALE,CAAA,MAAA,EAAA,OAAA,CAAA;EACc,MAAA,CAAA,EAKf,WALe;;AAAT,UAQA,oBAAA,CARA;EAGA,SAAA,EAAA,MAAA;EAKA,QAAA,EAEL,MAFK,CAAA,MAAoB,EAEV,0BAAA,CAAA;AAG3B;AACS,UADQ,aAAA,CACR;EAEE,KAAA,EAFF,UAEE;EACI,MAAA,EAAA,MAAA;EAAoB,MAAA,CAAA,EADxB,WACwB;EAGlB,UAAA,CAAA,EAHF,oBAGY,EAAA;;AAIhB,UAJM,SAAA,SAAkB,aAIxB,CAAA;EAJwB,IAAA,EAAA,MAAA;EAAa,OAAA,EAAA,MAAA;EAO/B,OAAA,CAAA,EAJL,QAIc;EAClB,MAAA,CAAA,EAJG,UAIH,EAAA;;AAEO,UAHE,SAAA,CAGF;EACD,IAAA,EAHN,SAGM;EAAa,MAAA,EAFjB,WAEiB;EAGV,UAAA,CAAQ,EAJV,oBAIU,EAAA;EAOZ,SAAA,CAAA,EAVC,aAUY,EAAA;;AAUhB,UAjBO,QAAA,CAiBP;EAI6B,IAAA,EAAA,MAAA;EAAS,OAAA,EAAA,MAAA;AAehD;cA7Ba,aAAA;;iBAGI;UAOP;uCAI6B;;iBAevB,YAAA,OAAmB,YAAY"}
package/dist/themes.js CHANGED
@@ -36,4 +36,5 @@ function makeThemeRef(spec) {
36
36
  }
37
37
 
38
38
  //#endregion
39
- export { ThemeRegistry, makeThemeRef };
39
+ export { ThemeRegistry, makeThemeRef };
40
+ //# sourceMappingURL=themes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"themes.js","names":["candidate: ThemeSpec | undefined"],"sources":["../src/themes.ts"],"sourcesContent":["import type { OwnerShipMeta } from './ownership';\n\nexport type ThemeScope = 'global' | 'tenant' | 'user';\n\nexport interface ThemeToken<T> {\n value: T;\n description?: string;\n}\n\nexport interface ThemeTokens {\n colors?: Record<string, ThemeToken<string>>;\n radii?: Record<string, ThemeToken<number>>;\n space?: Record<string, ThemeToken<number>>;\n typography?: Record<string, ThemeToken<number>>;\n shadows?: Record<string, ThemeToken<string>>;\n motion?: Record<string, ThemeToken<string>>;\n}\n\nexport interface ComponentVariantDefinition {\n props?: Record<string, unknown>;\n tokens?: ThemeTokens;\n}\n\nexport interface ComponentVariantSpec {\n component: string;\n variants: Record<string, ComponentVariantDefinition>;\n}\n\nexport interface ThemeOverride {\n scope: ThemeScope;\n target: string;\n tokens?: ThemeTokens;\n components?: ComponentVariantSpec[];\n}\n\nexport interface ThemeMeta extends OwnerShipMeta {\n name: string;\n version: number;\n extends?: ThemeRef;\n scopes?: ThemeScope[];\n}\n\nexport interface ThemeSpec {\n meta: ThemeMeta;\n tokens: ThemeTokens;\n components?: ComponentVariantSpec[];\n overrides?: ThemeOverride[];\n}\n\nexport interface ThemeRef {\n name: string;\n version: number;\n}\n\nconst themeKey = (ref: ThemeRef | ThemeMeta) => `${ref.name}.v${ref.version}`;\n\nexport class ThemeRegistry {\n private readonly items = new Map<string, ThemeSpec>();\n\n register(spec: ThemeSpec): this {\n const key = themeKey(spec.meta);\n if (this.items.has(key)) throw new Error(`Duplicate theme ${key}`);\n this.items.set(key, spec);\n return this;\n }\n\n list(): ThemeSpec[] {\n return [...this.items.values()];\n }\n\n get(name: string, version?: number): ThemeSpec | undefined {\n if (version != null) return this.items.get(themeKey({ name, version }));\n let candidate: ThemeSpec | undefined;\n let max = -Infinity;\n for (const spec of this.items.values()) {\n if (spec.meta.name !== name) continue;\n if (spec.meta.version > max) {\n max = spec.meta.version;\n candidate = spec;\n }\n }\n return candidate;\n }\n}\n\nexport function makeThemeRef(spec: ThemeSpec): ThemeRef {\n return { name: spec.meta.name, version: spec.meta.version };\n}\n"],"mappings":";AAsDA,MAAM,YAAY,QAA8B,GAAG,IAAI,KAAK,IAAI,IAAI;AAEpE,IAAa,gBAAb,MAA2B;CACzB,AAAiB,wBAAQ,IAAI,KAAwB;CAErD,SAAS,MAAuB;EAC9B,MAAM,MAAM,SAAS,KAAK,KAAK;AAC/B,MAAI,KAAK,MAAM,IAAI,IAAI,CAAE,OAAM,IAAI,MAAM,mBAAmB,MAAM;AAClE,OAAK,MAAM,IAAI,KAAK,KAAK;AACzB,SAAO;;CAGT,OAAoB;AAClB,SAAO,CAAC,GAAG,KAAK,MAAM,QAAQ,CAAC;;CAGjC,IAAI,MAAc,SAAyC;AACzD,MAAI,WAAW,KAAM,QAAO,KAAK,MAAM,IAAI,SAAS;GAAE;GAAM;GAAS,CAAC,CAAC;EACvE,IAAIA;EACJ,IAAI,MAAM;AACV,OAAK,MAAM,QAAQ,KAAK,MAAM,QAAQ,EAAE;AACtC,OAAI,KAAK,KAAK,SAAS,KAAM;AAC7B,OAAI,KAAK,KAAK,UAAU,KAAK;AAC3B,UAAM,KAAK,KAAK;AAChB,gBAAY;;;AAGhB,SAAO;;;AAIX,SAAgB,aAAa,MAA2B;AACtD,QAAO;EAAE,MAAM,KAAK,KAAK;EAAM,SAAS,KAAK,KAAK;EAAS"}
@@ -25,4 +25,5 @@ interface BlueprintTranslationCatalog {
25
25
  entries: TranslationEntry[];
26
26
  }
27
27
  //#endregion
28
- export { BlueprintTranslationCatalog, Locale, MessageKey, PlatformTranslationCatalog, TranslationCatalogMeta, TranslationEntry };
28
+ export { BlueprintTranslationCatalog, Locale, MessageKey, PlatformTranslationCatalog, TranslationCatalogMeta, TranslationEntry };
29
+ //# sourceMappingURL=catalog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog.d.ts","names":[],"sources":["../../src/translations/catalog.ts"],"sourcesContent":[],"mappings":";KAAY,MAAA;AAAA,KACA,UAAA,GADM,MAAA;AACN,UAEK,gBAAA,CAFK;EAEL,GAAA,EACV,UADU;EAOA,MAAA,EALP,MAKO;EAMA,KAAA,EAAA,MAAA;EACT,OAAA,CAAA,EAAA,MAAA;;AAEY,UATH,sBAAA,CASG;EACT,IAAA,EAAA,MAAA;EAAgB,OAAA,EAAA,MAAA;EAGV,WAAA,CAAA,EAAA,MAAA;;AAEA,UATA,0BAAA,CASA;EACG,IAAA,EATZ,sBASY;EACT,aAAA,EATM,MASN;EAAgB,gBAAA,EARP,MAQO,EAAA;WAPhB;;UAGM,2BAAA;QACT;iBACS;oBACG;WACT"}
@@ -12,4 +12,5 @@ interface TenantTranslationOverride {
12
12
  updatedAt?: string;
13
13
  }
14
14
  //#endregion
15
- export { TenantTranslationOverride };
15
+ export { TenantTranslationOverride };
16
+ //# sourceMappingURL=tenant.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tenant.d.ts","names":[],"sources":["../../src/translations/tenant.ts"],"sourcesContent":[],"mappings":";;;UAEiB,yBAAA;;EAAA,KAAA,EAAA,MAAA;EAKN,aAAA,EAAA,MAAA;EACO,gBAAA,EAAA,MAAA;EACC,OAAA,EAFR,gBAEQ,EAAA;EAAM,aAAA,CAAA,EADP,MACO;mBAAN"}
package/dist/types.d.ts CHANGED
@@ -85,4 +85,5 @@ interface HandlerCtx {
85
85
  specVariantResolver?: SpecVariantResolver;
86
86
  }
87
87
  //#endregion
88
- export { Actor, Channel, EventPublisher, FieldLevelDecision, HandlerCtx, PolicyDecider, PolicyDeciderInput, PolicyDecision, RateLimiter, TranslationResolver };
88
+ export { Actor, Channel, EventPublisher, FieldLevelDecision, HandlerCtx, PolicyDecider, PolicyDeciderInput, PolicyDecision, RateLimiter, TranslationResolver };
89
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","names":[],"sources":["../src/types.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;;;KAGY,KAAA;KACA,OAAA;AAyBK,UANA,kBAAA,CAMc;EAI3B,KAAA,EAAA,MAAA;EADU,MAAA,EAAA,OAAA,GAAA,MAAA;EAKK,MAAA,CAAA,EAAA,MAAA;;AAEE,UAVJ,cAAA,CAUI;EAAiB,MAAA,EAAA,OAAA,GAAA,MAAA;EAIrB,MAAA,CAAA,EAAA,MAAA;EAYL,SAAA,CAAA,EAvBE,IAuBW,CAtBrB,mBAsBqB,EAAA,KAAA,GAAA,KAAA,GAAA,eAAA,GAAA,OAAA,CAAA;EAChB,QAAA,CAAA,EAAA,cAAA,GAAA,IAAA;EACI,cAAA,CAAA,EApBM,kBAoBN,EAAA;EAAR,GAAA,CAAA,EAnBG,UAmBH,CAAA,KAAA,CAAA;EAAO,gBAAA,CAAA,EAlBS,iBAkBT,EAAA;EAEA,WAAA,CAAA,EAAW,QAAA,GAAA,KAIlB;AAEL;AACO,UAvBU,kBAAA,CAuBV;EACI,OAAA,EAAA,MAAA;EACN,OAAA,EAAA,MAAA;EAAO,OAAA,EAAA,MAAA;EAGA,KAAA,EAxBH,KAwBG;EAOK,OAAA,CAAA,EA9BL,OA8Be;EAKjB,KAAA,CAAA,EAAA,MAAA,EAAA;EACE,cAAA,CAAA,EAAA,MAAA,GAAA,IAAA;EAID,MAAA,CAAA,EAAA,MAAA,GAAA,IAAA;EAEG,KAAA,CAAA,EAAA,MAAA,EAAA;;AAIK,KAvCP,aAAA,GAuCO,CAAA,KAAA,EAtCV,kBAsCU,EAAA,GArCd,OAqCc,CArCN,cAqCM,CAAA;AAEA,KArCP,WAAA,GAqCO,CAAA,GAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,EAAA,GAAA,EAAA,MAAA,EAAA,GAjCd,OAiCc,CAAA,IAAA,CAAA;AAOZ,KAtCK,mBAAA,GAsCL,CAAA,GAAA,EArCA,UAqCA,EAAA,MAAA,CAAA,EApCI,MAoCJ,EAAA,GAnCF,OAmCE,CAAA,MAAA,GAAA,IAAA,CAAA,GAAA,MAAA,GAAA,IAAA;;AAIU,KApCL,cAAA,GAoCK,CAAA,QAAA,EAAA;EAEH,IAAA,EAAA,MAAA;EAED,OAAA,EAAA,MAAA;EAGD,OAAA,EAAA,OAAA;EACE,OAAA,CAAA,EAAA,MAAA;CAGU,EAAA,GA1ClB,OA0CkB,CAAA,IAAA,CAAA;AAAmB,UAxC1B,UAAA,CAwC0B;;;;;UAnCjC;YACE;;;WAID;;cAEG;;cAEA;;mBAEK;;mBAEA;;uEAOZ;;cAEO;;iBAEG;;cAEH;;aAED;;;YAGD;cACE;;;wBAGU"}
@@ -1,25 +1,37 @@
1
1
  import { StateStore, WorkflowState, WorkflowStateFilters } from "../state.js";
2
2
 
3
3
  //#region src/workflow/adapters/db-adapter.d.ts
4
+ interface WorkflowStateRecord {
5
+ id: string;
6
+ name: string;
7
+ version: string;
8
+ status: string;
9
+ currentStep: string;
10
+ data: unknown;
11
+ history: unknown[];
12
+ retryCounts: Record<string, number>;
13
+ createdAt: Date;
14
+ updatedAt: Date;
15
+ }
4
16
  interface PrismaClientLike {
5
17
  workflowState: {
6
18
  create: (args: {
7
- data: any;
8
- }) => Promise<any>;
19
+ data: Record<string, unknown>;
20
+ }) => Promise<WorkflowStateRecord>;
9
21
  findUnique: (args: {
10
22
  where: {
11
23
  id: string;
12
24
  };
13
- }) => Promise<any>;
25
+ }) => Promise<WorkflowStateRecord | null>;
14
26
  update: (args: {
15
27
  where: {
16
28
  id: string;
17
29
  };
18
- data: any;
19
- }) => Promise<any>;
30
+ data: Record<string, unknown>;
31
+ }) => Promise<WorkflowStateRecord>;
20
32
  findMany: (args: {
21
- where?: any;
22
- }) => Promise<any[]>;
33
+ where?: Record<string, unknown>;
34
+ }) => Promise<WorkflowStateRecord[]>;
23
35
  };
24
36
  }
25
37
  declare class PrismaStateStore implements StateStore {
@@ -31,4 +43,5 @@ declare class PrismaStateStore implements StateStore {
31
43
  list(filters?: WorkflowStateFilters): Promise<WorkflowState[]>;
32
44
  }
33
45
  //#endregion
34
- export { PrismaStateStore };
46
+ export { PrismaStateStore };
47
+ //# sourceMappingURL=db-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db-adapter.d.ts","names":[],"sources":["../../../src/workflow/adapters/db-adapter.ts"],"sourcesContent":[],"mappings":";;;UAGU,mBAAA;;EAAA,IAAA,EAAA,MAAA;EAQK,OAAA,EAAA,MAAA;EACF,MAAA,EAAA,MAAA;EACA,WAAA,EAAA,MAAA;EAAI,IAAA,EAAA,OAAA;EAGP,OAAA,EAAA,OAAA,EAAA;EAGE,WAAA,EARG,MAQH,CAAA,MAAA,EAAA,MAAA,CAAA;EACM,SAAA,EARL,IAQK;EAAR,SAAA,EAPG,IAOH;;UAJA,gBAAA,CAOA;EAGE,aAAA,EAAA;IACM,MAAA,EAAA,CAAA,IAAA,EAAA;MAAR,IAAA,EARE,MAQF,CAAA,MAAA,EAAA,OAAA,CAAA;IAEI,CAAA,EAAA,GATJ,OASI,CATI,mBASJ,CAAA;IACI,UAAA,EAAA,CAAA,IAAA,EAAA;MAAR,KAAA,EAAA;QAAO,EAAA,EAAA,MAAA;MAIJ,CAAA;IAC0B,CAAA,EAAA,GAZ7B,OAY6B,CAZrB,mBAYqB,GAAA,IAAA,CAAA;IAEjB,MAAA,EAAA,CAAA,IAAA,EAAA;MAAgB,KAAA,EAAA;QAiBG,EAAA,EAAA,MAAA;MAAR,CAAA;MAuBV,IAAA,EAnDX,MAmDW,CAAA,MAAA,EAAA,OAAA,CAAA;IAAkB,CAAA,EAAA,GAlD/B,OAkD+B,CAlDvB,mBAkDuB,CAAA;IAC5B,QAAA,EAAA,CAAA,IAAA,EAAA;MAAR,KAAA,CAAA,EAjDS,MAiDT,CAAA,MAAA,EAAA,OAAA,CAAA;IAkCkB,CAAA,EAAA,GAlFb,OAkFa,CAlFL,mBAkFK,EAAA,CAAA;EAA+B,CAAA;;AA9Eb,cAA5B,gBAAA,YAA4B,UAAA,CAAA;EAAU,iBAAA,MAAA;sBACZ;gBAEjB,gBAAgB;2BAiBL,QAAQ;gDAuBlB,kBAAkB,gBACpC,QAAQ;iBAkCU,uBAAuB,QAAQ"}
@@ -23,7 +23,7 @@ var PrismaStateStore = class {
23
23
  return {
24
24
  workflowId: record.id,
25
25
  workflowName: record.name,
26
- workflowVersion: record.version,
26
+ workflowVersion: parseInt(record.version, 10),
27
27
  currentStep: record.currentStep,
28
28
  data: record.data,
29
29
  history: record.history,
@@ -51,7 +51,7 @@ var PrismaStateStore = class {
51
51
  return {
52
52
  workflowId: updated.id,
53
53
  workflowName: updated.name,
54
- workflowVersion: updated.version,
54
+ workflowVersion: parseInt(updated.version, 10),
55
55
  currentStep: updated.currentStep,
56
56
  data: updated.data,
57
57
  history: updated.history,
@@ -67,7 +67,7 @@ var PrismaStateStore = class {
67
67
  return (await this.prisma.workflowState.findMany({ where })).map((record) => ({
68
68
  workflowId: record.id,
69
69
  workflowName: record.name,
70
- workflowVersion: record.version,
70
+ workflowVersion: parseInt(record.version, 10),
71
71
  currentStep: record.currentStep,
72
72
  data: record.data,
73
73
  history: record.history,
@@ -80,4 +80,5 @@ var PrismaStateStore = class {
80
80
  };
81
81
 
82
82
  //#endregion
83
- export { PrismaStateStore };
83
+ export { PrismaStateStore };
84
+ //# sourceMappingURL=db-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db-adapter.js","names":["prisma: PrismaClientLike","where: Record<string, unknown>"],"sources":["../../../src/workflow/adapters/db-adapter.ts"],"sourcesContent":["import type { StateStore, WorkflowState, WorkflowStateFilters } from '../state';\n\n// Generic interface for Prisma Client to avoid hard dependency on generated client\ninterface WorkflowStateRecord {\n id: string;\n name: string;\n version: string;\n status: string;\n currentStep: string;\n data: unknown;\n history: unknown[];\n retryCounts: Record<string, number>;\n createdAt: Date;\n updatedAt: Date;\n}\n\ninterface PrismaClientLike {\n workflowState: {\n create: (args: {\n data: Record<string, unknown>;\n }) => Promise<WorkflowStateRecord>;\n findUnique: (args: {\n where: { id: string };\n }) => Promise<WorkflowStateRecord | null>;\n update: (args: {\n where: { id: string };\n data: Record<string, unknown>;\n }) => Promise<WorkflowStateRecord>;\n findMany: (args: {\n where?: Record<string, unknown>;\n }) => Promise<WorkflowStateRecord[]>;\n };\n}\n\nexport class PrismaStateStore implements StateStore {\n constructor(private readonly prisma: PrismaClientLike) {}\n\n async create(state: WorkflowState): Promise<void> {\n await this.prisma.workflowState.create({\n data: {\n id: state.workflowId,\n name: state.workflowName,\n version: state.workflowVersion,\n status: state.status,\n currentStep: state.currentStep,\n data: state.data, // Assumes Prisma handles JSON\n history: state.history, // Assumes Prisma handles JSON\n retryCounts: state.retryCounts ?? {},\n createdAt: state.createdAt,\n updatedAt: state.updatedAt,\n },\n });\n }\n\n async get(workflowId: string): Promise<WorkflowState | undefined> {\n const record = await this.prisma.workflowState.findUnique({\n where: { id: workflowId },\n });\n\n if (!record) return undefined;\n\n return {\n workflowId: record.id,\n workflowName: record.name,\n workflowVersion: parseInt(record.version, 10),\n currentStep: record.currentStep,\n data: record.data as Record<string, unknown>,\n history: record.history as any,\n retryCounts: record.retryCounts,\n status: record.status as any,\n createdAt: record.createdAt,\n updatedAt: record.updatedAt,\n };\n }\n\n async update(\n workflowId: string,\n updater: (current: WorkflowState) => WorkflowState\n ): Promise<WorkflowState> {\n const current = await this.get(workflowId);\n if (!current) {\n throw new Error(`Workflow ${workflowId} not found`);\n }\n\n const next = updater(current);\n\n const updated = await this.prisma.workflowState.update({\n where: { id: workflowId },\n data: {\n status: next.status,\n currentStep: next.currentStep,\n data: next.data,\n history: next.history,\n retryCounts: next.retryCounts,\n updatedAt: next.updatedAt,\n },\n });\n\n return {\n workflowId: updated.id,\n workflowName: updated.name,\n workflowVersion: parseInt(updated.version, 10),\n currentStep: updated.currentStep,\n data: updated.data as Record<string, unknown>,\n history: updated.history as any,\n retryCounts: updated.retryCounts,\n status: updated.status as any,\n createdAt: updated.createdAt,\n updatedAt: updated.updatedAt,\n };\n }\n\n async list(filters?: WorkflowStateFilters): Promise<WorkflowState[]> {\n const where: Record<string, unknown> = {};\n if (filters?.status) {\n where.status = filters.status;\n }\n\n const records = await this.prisma.workflowState.findMany({\n where,\n });\n\n return records.map((record) => ({\n workflowId: record.id,\n workflowName: record.name,\n workflowVersion: parseInt(record.version, 10),\n currentStep: record.currentStep,\n data: record.data as Record<string, unknown>,\n history: record.history as any,\n retryCounts: record.retryCounts,\n status: record.status as any,\n createdAt: record.createdAt,\n updatedAt: record.updatedAt,\n }));\n }\n}\n"],"mappings":";AAkCA,IAAa,mBAAb,MAAoD;CAClD,YAAY,AAAiBA,QAA0B;EAA1B;;CAE7B,MAAM,OAAO,OAAqC;AAChD,QAAM,KAAK,OAAO,cAAc,OAAO,EACrC,MAAM;GACJ,IAAI,MAAM;GACV,MAAM,MAAM;GACZ,SAAS,MAAM;GACf,QAAQ,MAAM;GACd,aAAa,MAAM;GACnB,MAAM,MAAM;GACZ,SAAS,MAAM;GACf,aAAa,MAAM,eAAe,EAAE;GACpC,WAAW,MAAM;GACjB,WAAW,MAAM;GAClB,EACF,CAAC;;CAGJ,MAAM,IAAI,YAAwD;EAChE,MAAM,SAAS,MAAM,KAAK,OAAO,cAAc,WAAW,EACxD,OAAO,EAAE,IAAI,YAAY,EAC1B,CAAC;AAEF,MAAI,CAAC,OAAQ,QAAO;AAEpB,SAAO;GACL,YAAY,OAAO;GACnB,cAAc,OAAO;GACrB,iBAAiB,SAAS,OAAO,SAAS,GAAG;GAC7C,aAAa,OAAO;GACpB,MAAM,OAAO;GACb,SAAS,OAAO;GAChB,aAAa,OAAO;GACpB,QAAQ,OAAO;GACf,WAAW,OAAO;GAClB,WAAW,OAAO;GACnB;;CAGH,MAAM,OACJ,YACA,SACwB;EACxB,MAAM,UAAU,MAAM,KAAK,IAAI,WAAW;AAC1C,MAAI,CAAC,QACH,OAAM,IAAI,MAAM,YAAY,WAAW,YAAY;EAGrD,MAAM,OAAO,QAAQ,QAAQ;EAE7B,MAAM,UAAU,MAAM,KAAK,OAAO,cAAc,OAAO;GACrD,OAAO,EAAE,IAAI,YAAY;GACzB,MAAM;IACJ,QAAQ,KAAK;IACb,aAAa,KAAK;IAClB,MAAM,KAAK;IACX,SAAS,KAAK;IACd,aAAa,KAAK;IAClB,WAAW,KAAK;IACjB;GACF,CAAC;AAEF,SAAO;GACL,YAAY,QAAQ;GACpB,cAAc,QAAQ;GACtB,iBAAiB,SAAS,QAAQ,SAAS,GAAG;GAC9C,aAAa,QAAQ;GACrB,MAAM,QAAQ;GACd,SAAS,QAAQ;GACjB,aAAa,QAAQ;GACrB,QAAQ,QAAQ;GAChB,WAAW,QAAQ;GACnB,WAAW,QAAQ;GACpB;;CAGH,MAAM,KAAK,SAA0D;EACnE,MAAMC,QAAiC,EAAE;AACzC,MAAI,SAAS,OACX,OAAM,SAAS,QAAQ;AAOzB,UAJgB,MAAM,KAAK,OAAO,cAAc,SAAS,EACvD,OACD,CAAC,EAEa,KAAK,YAAY;GAC9B,YAAY,OAAO;GACnB,cAAc,OAAO;GACrB,iBAAiB,SAAS,OAAO,SAAS,GAAG;GAC7C,aAAa,OAAO;GACpB,MAAM,OAAO;GACb,SAAS,OAAO;GAChB,aAAa,OAAO;GACpB,QAAQ,OAAO;GACf,WAAW,OAAO;GAClB,WAAW,OAAO;GACnB,EAAE"}
@@ -11,4 +11,5 @@ interface FileStateStoreOptions {
11
11
  */
12
12
  declare function createFileStateStore(_options: FileStateStoreOptions): StateStore;
13
13
  //#endregion
14
- export { FileStateStoreOptions, createFileStateStore };
14
+ export { FileStateStoreOptions, createFileStateStore };
15
+ //# sourceMappingURL=file-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-adapter.d.ts","names":[],"sources":["../../../src/workflow/adapters/file-adapter.ts"],"sourcesContent":[],"mappings":";;;UAEiB,qBAAA;;EAAA,QAAA,EAAA,MAAA;AASjB;;;;;iBAAgB,oBAAA,WACJ,wBACT"}
@@ -8,4 +8,5 @@ function createFileStateStore(_options) {
8
8
  }
9
9
 
10
10
  //#endregion
11
- export { createFileStateStore };
11
+ export { createFileStateStore };
12
+ //# sourceMappingURL=file-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-adapter.js","names":[],"sources":["../../../src/workflow/adapters/file-adapter.ts"],"sourcesContent":["import type { StateStore } from '../state';\n\nexport interface FileStateStoreOptions {\n /** Absolute or relative path to the persistence file. */\n filePath: string;\n}\n\n/**\n * Placeholder for a file-backed state store adapter.\n * Implementations should manage locking/concurrency and JSON serialization.\n */\nexport function createFileStateStore(\n _options: FileStateStoreOptions\n): StateStore {\n throw new Error(\n 'File-backed state store adapter not implemented. Provide a custom adapter that satisfies StateStore.'\n );\n}\n"],"mappings":";;;;;AAWA,SAAgB,qBACd,UACY;AACZ,OAAM,IAAI,MACR,uGACD"}
@@ -15,4 +15,5 @@ declare class InMemoryStateStore implements StateStore {
15
15
  clear(): void;
16
16
  }
17
17
  //#endregion
18
- export { InMemoryStateStore };
18
+ export { InMemoryStateStore };
19
+ //# sourceMappingURL=memory-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-store.d.ts","names":[],"sources":["../../../src/workflow/adapters/memory-store.ts"],"sourcesContent":[],"mappings":";;;;;;AAwBA;;AAGsC,cAHzB,kBAAA,YAA8B,UAGL,CAAA;EAMG,iBAAA,KAAA;EAAR,MAAA,CAAA,KAAA,EANX,aAMW,CAAA,EANK,OAML,CAAA,IAAA,CAAA;EAOV,GAAA,CAAA,UAAA,EAAA,MAAA,CAAA,EAPU,OAOV,CAPkB,aAOlB,GAAA,SAAA,CAAA;EAAkB,MAAA,CAAA,UAAA,EAAA,MAAA,EAAA,OAAA,EAAA,CAAA,OAAA,EAAlB,aAAkB,EAAA,GAAA,aAAA,CAAA,EACpC,OADoC,CAC5B,aAD4B,CAAA;EAC5B,IAAA,CAAA,OAAA,CAAA,EAQU,oBARV,CAAA,EAQiC,OARjC,CAQyC,aARzC,EAAA,CAAA;EAAR,KAAA,CAAA,CAAA,EAAA,IAAA"}
@@ -55,4 +55,5 @@ function deepCopy(value) {
55
55
  }
56
56
 
57
57
  //#endregion
58
- export { InMemoryStateStore };
58
+ export { InMemoryStateStore };
59
+ //# sourceMappingURL=memory-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-store.js","names":["result: Record<string, unknown>"],"sources":["../../../src/workflow/adapters/memory-store.ts"],"sourcesContent":["import type { StateStore, WorkflowState, WorkflowStateFilters } from '../state';\n\nfunction cloneState(state: WorkflowState): WorkflowState {\n return {\n ...state,\n data: deepCopy(state.data),\n history: state.history.map((execution) => ({\n ...execution,\n input: deepCopy(execution.input),\n output: deepCopy(execution.output),\n startedAt: new Date(execution.startedAt),\n completedAt: execution.completedAt\n ? new Date(execution.completedAt)\n : undefined,\n })),\n createdAt: new Date(state.createdAt),\n updatedAt: new Date(state.updatedAt),\n };\n}\n\n/**\n * Naive in-memory state store. Suitable for tests and single-node development\n * environments. Swap with a database-backed adapter in production.\n */\nexport class InMemoryStateStore implements StateStore {\n private readonly items = new Map<string, WorkflowState>();\n\n async create(state: WorkflowState): Promise<void> {\n if (this.items.has(state.workflowId))\n throw new Error(`Workflow state already exists: ${state.workflowId}`);\n this.items.set(state.workflowId, cloneState(state));\n }\n\n async get(workflowId: string): Promise<WorkflowState | undefined> {\n const state = this.items.get(workflowId);\n return state ? cloneState(state) : undefined;\n }\n\n async update(\n workflowId: string,\n updater: (current: WorkflowState) => WorkflowState\n ): Promise<WorkflowState> {\n const current = this.items.get(workflowId);\n if (!current) throw new Error(`Workflow state not found for ${workflowId}`);\n const next = cloneState(updater(cloneState(current)));\n this.items.set(workflowId, next);\n return cloneState(next);\n }\n\n async list(filters?: WorkflowStateFilters): Promise<WorkflowState[]> {\n const all = [...this.items.values()];\n const filtered = filters?.status\n ? all.filter((state) => state.status === filters.status)\n : all;\n return filtered.map(cloneState);\n }\n\n clear() {\n this.items.clear();\n }\n}\n\nfunction deepCopy<T>(value: T): T {\n if (value instanceof Date) return new Date(value.getTime()) as T;\n if (Array.isArray(value)) return value.map((item) => deepCopy(item)) as T;\n if (value && typeof value === 'object') {\n const result: Record<string, unknown> = {};\n for (const [key, val] of Object.entries(value as Record<string, unknown>)) {\n result[key] = deepCopy(val);\n }\n return result as T;\n }\n return value;\n}\n"],"mappings":";AAEA,SAAS,WAAW,OAAqC;AACvD,QAAO;EACL,GAAG;EACH,MAAM,SAAS,MAAM,KAAK;EAC1B,SAAS,MAAM,QAAQ,KAAK,eAAe;GACzC,GAAG;GACH,OAAO,SAAS,UAAU,MAAM;GAChC,QAAQ,SAAS,UAAU,OAAO;GAClC,WAAW,IAAI,KAAK,UAAU,UAAU;GACxC,aAAa,UAAU,cACnB,IAAI,KAAK,UAAU,YAAY,GAC/B;GACL,EAAE;EACH,WAAW,IAAI,KAAK,MAAM,UAAU;EACpC,WAAW,IAAI,KAAK,MAAM,UAAU;EACrC;;;;;;AAOH,IAAa,qBAAb,MAAsD;CACpD,AAAiB,wBAAQ,IAAI,KAA4B;CAEzD,MAAM,OAAO,OAAqC;AAChD,MAAI,KAAK,MAAM,IAAI,MAAM,WAAW,CAClC,OAAM,IAAI,MAAM,kCAAkC,MAAM,aAAa;AACvE,OAAK,MAAM,IAAI,MAAM,YAAY,WAAW,MAAM,CAAC;;CAGrD,MAAM,IAAI,YAAwD;EAChE,MAAM,QAAQ,KAAK,MAAM,IAAI,WAAW;AACxC,SAAO,QAAQ,WAAW,MAAM,GAAG;;CAGrC,MAAM,OACJ,YACA,SACwB;EACxB,MAAM,UAAU,KAAK,MAAM,IAAI,WAAW;AAC1C,MAAI,CAAC,QAAS,OAAM,IAAI,MAAM,gCAAgC,aAAa;EAC3E,MAAM,OAAO,WAAW,QAAQ,WAAW,QAAQ,CAAC,CAAC;AACrD,OAAK,MAAM,IAAI,YAAY,KAAK;AAChC,SAAO,WAAW,KAAK;;CAGzB,MAAM,KAAK,SAA0D;EACnE,MAAM,MAAM,CAAC,GAAG,KAAK,MAAM,QAAQ,CAAC;AAIpC,UAHiB,SAAS,SACtB,IAAI,QAAQ,UAAU,MAAM,WAAW,QAAQ,OAAO,GACtD,KACY,IAAI,WAAW;;CAGjC,QAAQ;AACN,OAAK,MAAM,OAAO;;;AAItB,SAAS,SAAY,OAAa;AAChC,KAAI,iBAAiB,KAAM,QAAO,IAAI,KAAK,MAAM,SAAS,CAAC;AAC3D,KAAI,MAAM,QAAQ,MAAM,CAAE,QAAO,MAAM,KAAK,SAAS,SAAS,KAAK,CAAC;AACpE,KAAI,SAAS,OAAO,UAAU,UAAU;EACtC,MAAMA,SAAkC,EAAE;AAC1C,OAAK,MAAM,CAAC,KAAK,QAAQ,OAAO,QAAQ,MAAiC,CACvE,QAAO,OAAO,SAAS,IAAI;AAE7B,SAAO;;AAET,QAAO"}
@@ -6,4 +6,5 @@ interface ExpressionContext {
6
6
  }
7
7
  declare function evaluateExpression(expression: string | undefined, ctx: ExpressionContext): boolean;
8
8
  //#endregion
9
- export { ExpressionContext, evaluateExpression };
9
+ export { ExpressionContext, evaluateExpression };
10
+ //# sourceMappingURL=expression.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expression.d.ts","names":[],"sources":["../../src/workflow/expression.ts"],"sourcesContent":[],"mappings":";UAAiB,iBAAA;EAAA,IAAA,EACT,MADS,CAAA,MAAA,EAAiB,OAAA,CAAA;EAMlB,KAAA,CAAA,EAAA,OAAA;;;iBAAA,kBAAA,sCAET"}
@@ -95,4 +95,5 @@ function splitByOperator(expr, operator) {
95
95
  }
96
96
 
97
97
  //#endregion
98
- export { evaluateExpression };
98
+ export { evaluateExpression };
99
+ //# sourceMappingURL=expression.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expression.js","names":["current: any","parts: string[]"],"sources":["../../src/workflow/expression.ts"],"sourcesContent":["export interface ExpressionContext {\n data: Record<string, unknown>;\n input?: unknown;\n output?: unknown;\n}\n\nexport function evaluateExpression(\n expression: string | undefined,\n ctx: ExpressionContext\n): boolean {\n if (!expression) return true;\n const trimmed = expression.trim();\n if (!trimmed) return true;\n\n const orParts = splitByOperator(trimmed, '||');\n if (orParts.length > 1)\n return orParts.some((part) => evaluateExpression(part, ctx));\n\n const andParts = splitByOperator(trimmed, '&&');\n if (andParts.length > 1)\n return andParts.every((part) => evaluateExpression(part, ctx));\n\n return evaluateSingle(trimmed, ctx);\n}\n\nfunction evaluateSingle(expr: string, ctx: ExpressionContext): boolean {\n const trimmed = expr.trim();\n if (!trimmed) return true;\n if (trimmed.startsWith('!')) return !evaluateSingle(trimmed.slice(1), ctx);\n\n const comparisonMatch = trimmed.match(\n /^(data|input|output)\\.([A-Za-z0-9_.\\[\\]]+)\\s*(===|==|!==|!=|>=|<=|>|<)\\s*(.+)$/\n );\n if (comparisonMatch) {\n const [, root, path, operator, rawRight] = comparisonMatch as [\n string,\n string,\n string,\n ComparisonOperator,\n string,\n ];\n const left = resolveRoot(root, ctx, path);\n const right = parseLiteral(rawRight);\n return compare(left, right, operator);\n }\n\n const truthyMatch = trimmed.match(\n /^(data|input|output)\\.([A-Za-z0-9_.\\[\\]]+)$/\n );\n if (truthyMatch) {\n const [, root, path] = truthyMatch as [string, string, string];\n const value = resolveRoot(root, ctx, path);\n return Boolean(value);\n }\n\n const literal = parseLiteral(trimmed);\n return Boolean(literal);\n}\n\ntype ComparisonOperator = '===' | '==' | '!==' | '!=' | '>=' | '<=' | '>' | '<';\n\nfunction compare(\n left: unknown,\n right: unknown,\n operator: ComparisonOperator\n): boolean {\n switch (operator) {\n case '===':\n case '==':\n return left === right;\n case '!==':\n case '!=':\n return left !== right;\n case '>':\n return Number(left) > Number(right);\n case '>=':\n return Number(left) >= Number(right);\n case '<':\n return Number(left) < Number(right);\n case '<=':\n return Number(left) <= Number(right);\n default:\n return false;\n }\n}\n\nfunction parseLiteral(value: string): unknown {\n const trimmed = (value ?? '').trim();\n if (\n (trimmed.startsWith('\"') && trimmed.endsWith('\"')) ||\n (trimmed.startsWith(\"'\") && trimmed.endsWith(\"'\"))\n )\n return trimmed.slice(1, -1);\n if (/^-?\\d+(\\.\\d+)?$/.test(trimmed)) return Number(trimmed);\n if (/^true$/i.test(trimmed)) return true;\n if (/^false$/i.test(trimmed)) return false;\n if (/^null$/i.test(trimmed)) return null;\n if (/^undefined$/i.test(trimmed)) return undefined;\n return trimmed;\n}\n\nfunction resolveRoot(\n root: string,\n ctx: ExpressionContext,\n path: string\n): unknown {\n const source =\n root === 'data' ? ctx.data : root === 'input' ? ctx.input : ctx.output;\n return resolvePath(source, path);\n}\n\nfunction resolvePath(source: unknown, path: string): unknown {\n if (source == null) return undefined;\n if (!path) return source;\n const segments = path\n .replace(/\\[(\\d+)\\]/g, '.$1')\n .split('.')\n .filter(Boolean);\n\n let current: any = source;\n for (const segment of segments) {\n if (current == null) return undefined;\n current = current[segment as keyof typeof current];\n }\n return current;\n}\n\nfunction splitByOperator(expr: string, operator: '&&' | '||'): string[] {\n const parts: string[] = [];\n let buffer = '';\n let inSingleQuote = false;\n let inDoubleQuote = false;\n\n for (let i = 0; i < expr.length; i++) {\n const char = expr[i]!;\n const next = expr.slice(i, i + operator.length);\n\n if (char === \"'\" && !inDoubleQuote) {\n inSingleQuote = !inSingleQuote;\n buffer += char;\n continue;\n }\n if (char === '\"' && !inSingleQuote) {\n inDoubleQuote = !inDoubleQuote;\n buffer += char;\n continue;\n }\n\n if (!inSingleQuote && !inDoubleQuote && next === operator) {\n parts.push(buffer.trim());\n buffer = '';\n i += operator.length - 1;\n continue;\n }\n\n buffer += char;\n }\n\n if (buffer.trim().length) parts.push(buffer.trim());\n return parts;\n}\n"],"mappings":"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"}
@@ -71,4 +71,5 @@ declare class WorkflowPreFlightError extends Error {
71
71
  constructor(issues: WorkflowPreFlightIssue[]);
72
72
  }
73
73
  //#endregion
74
- export { GuardContext, GuardEvaluator, OperationExecutor, OperationExecutorContext, WorkflowPreFlightError, WorkflowPreFlightIssue, WorkflowPreFlightIssueSeverity, WorkflowPreFlightIssueType, WorkflowPreFlightResult, WorkflowRunner, WorkflowRunnerConfig };
74
+ export { GuardContext, GuardEvaluator, OperationExecutor, OperationExecutorContext, WorkflowPreFlightError, WorkflowPreFlightIssue, WorkflowPreFlightIssueSeverity, WorkflowPreFlightIssueType, WorkflowPreFlightResult, WorkflowRunner, WorkflowRunnerConfig };
75
+ //# sourceMappingURL=runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner.d.ts","names":[],"sources":["../../src/workflow/runner.ts"],"sourcesContent":[],"mappings":"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"}
@@ -334,4 +334,5 @@ function capabilityKey(ref) {
334
334
  }
335
335
 
336
336
  //#endregion
337
- export { WorkflowPreFlightError, WorkflowRunner };
337
+ export { WorkflowPreFlightError, WorkflowRunner };
338
+ //# sourceMappingURL=runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner.js","names":["config: WorkflowRunnerConfig","state: WorkflowState","execution: StepExecution","workingState: WorkflowState","executorContext: OperationExecutorContext","nextState: WorkflowState","issues: WorkflowPreFlightIssue[]"],"sources":["../../src/workflow/runner.ts"],"sourcesContent":["import { randomUUID } from 'node:crypto';\nimport type {\n GuardCondition,\n Step,\n WorkflowRegistry,\n WorkflowSpec,\n} from './spec';\nimport type { StateStore, WorkflowState, StepExecution } from './state';\nimport { evaluateExpression } from './expression';\nimport type { OpRef } from '../features';\nimport type { CapabilityRef } from '../capabilities';\nimport type {\n ResolvedAppConfig,\n ResolvedIntegration,\n ResolvedKnowledge,\n ResolvedTranslation,\n} from '../app-config/runtime';\nimport type { ResolvedBranding } from '../app-config/branding';\nimport type { TranslationResolver } from '../types';\nimport type { SecretProvider } from '../integrations/secrets/provider';\n\nexport interface OperationExecutorContext {\n workflow: WorkflowState;\n step: Step;\n resolvedAppConfig?: ResolvedAppConfig;\n integrations?: ResolvedIntegration[];\n knowledge?: ResolvedKnowledge[];\n branding?: ResolvedBranding;\n translation?: ResolvedTranslation;\n translationResolver?: TranslationResolver;\n secretProvider?: SecretProvider;\n}\n\nexport type OperationExecutor = (\n op: OpRef,\n input: unknown,\n context: OperationExecutorContext\n) => Promise<unknown>;\n\nexport type WorkflowPreFlightIssueType = 'integration' | 'capability';\n\nexport type WorkflowPreFlightIssueSeverity = 'error' | 'warning';\n\nexport interface WorkflowPreFlightIssue {\n stepId: string;\n type: WorkflowPreFlightIssueType;\n identifier: string;\n severity: WorkflowPreFlightIssueSeverity;\n reason: string;\n}\n\nexport interface WorkflowPreFlightResult {\n canStart: boolean;\n issues: WorkflowPreFlightIssue[];\n}\n\nexport interface GuardContext {\n workflow: WorkflowState;\n step: Step;\n input?: unknown;\n}\n\nexport type GuardEvaluator = (\n guard: GuardCondition,\n context: GuardContext\n) => Promise<boolean> | boolean;\n\nexport interface WorkflowRunnerConfig {\n registry: WorkflowRegistry;\n stateStore: StateStore;\n opExecutor: OperationExecutor;\n guardEvaluator?: GuardEvaluator;\n eventEmitter?: (event: string, payload: Record<string, unknown>) => void;\n appConfigProvider?: (\n state: WorkflowState\n ) => ResolvedAppConfig | undefined | Promise<ResolvedAppConfig | undefined>;\n enforceCapabilities?: (\n operation: OpRef,\n context: OperationExecutorContext\n ) => void | Promise<void>;\n secretProvider?: SecretProvider;\n translationResolver?: TranslationResolver;\n}\n\nexport class WorkflowRunner {\n constructor(private readonly config: WorkflowRunnerConfig) {}\n\n async preFlightCheck(\n workflowName: string,\n version?: number,\n resolvedConfig?: ResolvedAppConfig\n ): Promise<WorkflowPreFlightResult> {\n const spec = this.getSpec(workflowName, version);\n return this.performPreFlight(spec, resolvedConfig);\n }\n\n async start(\n workflowName: string,\n version?: number,\n initialData?: Record<string, unknown>\n ): Promise<string> {\n const spec = this.getSpec(workflowName, version);\n const entryStepId = resolveEntryStepId(spec);\n const now = new Date();\n const workflowId = randomUUID();\n\n const state: WorkflowState = {\n workflowId,\n workflowName: spec.meta.name,\n workflowVersion: spec.meta.version,\n currentStep: entryStepId,\n data: { ...(initialData ?? {}) },\n retryCounts: {},\n history: [],\n status: 'running',\n createdAt: now,\n updatedAt: now,\n };\n\n const resolvedAppConfig = this.config.appConfigProvider\n ? await this.config.appConfigProvider(state)\n : undefined;\n\n const preFlightResult = await this.performPreFlight(\n spec,\n resolvedAppConfig\n );\n if (!preFlightResult.canStart) {\n throw new WorkflowPreFlightError(preFlightResult.issues);\n }\n\n await this.config.stateStore.create(state);\n this.emit('workflow.started', {\n workflowId,\n workflowName: spec.meta.name,\n workflowVersion: spec.meta.version,\n currentStep: entryStepId,\n });\n return workflowId;\n }\n\n async executeStep(workflowId: string, input?: unknown): Promise<void> {\n const state = await this.getStateOrThrow(workflowId);\n if (isTerminalStatus(state.status)) {\n throw new Error(\n `Workflow ${workflowId} is in terminal status \"${state.status}\".`\n );\n }\n\n const spec = this.getSpec(state.workflowName, state.workflowVersion);\n const step = getCurrentStep(spec, state.currentStep);\n const guardOk = await this.evaluateGuard(step, state, input);\n if (!guardOk)\n throw new Error(`GuardRejected: ${state.workflowName} -> ${step.id}`);\n\n const execution: StepExecution = {\n stepId: step.id,\n startedAt: new Date(),\n status: 'running',\n input,\n };\n\n const workingState: WorkflowState = {\n ...state,\n data: { ...state.data },\n history: [...state.history],\n };\n\n try {\n const output = await this.runStepAction(step, workingState, input);\n execution.output = output;\n execution.status = 'completed';\n execution.completedAt = new Date();\n workingState.history.push(execution);\n workingState.updatedAt = new Date();\n\n if (isRecord(input)) {\n workingState.data = { ...workingState.data, ...input };\n }\n if (isRecord(output)) {\n workingState.data = { ...workingState.data, ...output };\n }\n\n const nextStepId = this.pickNextStepId(\n spec,\n workingState,\n step,\n input,\n output\n );\n\n if (nextStepId) {\n workingState.currentStep = nextStepId;\n workingState.status = 'running';\n } else if (!hasOutgoing(spec, step.id)) {\n workingState.status = 'completed';\n } else {\n throw new Error(\n `No transition matched after executing step \"${step.id}\".`\n );\n }\n\n await this.config.stateStore.update(workflowId, () => workingState);\n this.emit('workflow.step_completed', {\n workflowId,\n workflowName: state.workflowName,\n stepId: step.id,\n status: workingState.status,\n });\n } catch (error) {\n execution.status = 'failed';\n execution.completedAt = new Date();\n execution.error = error instanceof Error ? error.message : String(error);\n workingState.history.push(execution);\n workingState.updatedAt = new Date();\n\n if (step.retry) {\n const retries = state.retryCounts?.[step.id] ?? 0;\n if (retries < step.retry.maxAttempts) {\n const backoff = step.retry.backoff ?? 'exponential';\n const baseDelay = step.retry.delayMs ?? 1000;\n const delay =\n backoff === 'exponential'\n ? baseDelay * Math.pow(2, retries)\n : baseDelay;\n const cappedDelay = Math.min(\n delay,\n step.retry.maxDelayMs ?? Infinity\n );\n\n workingState.retryCounts = {\n ...(state.retryCounts ?? {}),\n [step.id]: retries + 1,\n };\n workingState.status = 'running';\n\n await this.config.stateStore.update(workflowId, () => workingState);\n this.emit('workflow.step_retrying', {\n workflowId,\n workflowName: state.workflowName,\n stepId: step.id,\n attempt: retries + 1,\n delay: cappedDelay,\n error: execution.error,\n });\n\n await new Promise((resolve) => setTimeout(resolve, cappedDelay));\n return this.executeStep(workflowId, input);\n }\n }\n\n workingState.status = 'failed';\n await this.config.stateStore.update(workflowId, () => workingState);\n this.emit('workflow.step_failed', {\n workflowId,\n workflowName: state.workflowName,\n stepId: step.id,\n error: execution.error ?? 'unknown',\n });\n\n // Trigger compensation if configured\n if (spec.definition.compensation?.trigger === 'on_failure') {\n await this.rollback(workflowId);\n }\n\n throw error;\n }\n }\n\n async rollback(workflowId: string): Promise<void> {\n const state = await this.getStateOrThrow(workflowId);\n const spec = this.getSpec(state.workflowName, state.workflowVersion);\n\n if (!spec.definition.compensation) {\n return;\n }\n\n this.emit('workflow.rollback_started', { workflowId });\n\n // Filter history for completed automation steps in reverse order\n const completedSteps = state.history\n .filter((h) => h.status === 'completed')\n .reverse();\n\n for (const execution of completedSteps) {\n const compStep = spec.definition.compensation.steps.find(\n (s) => s.stepId === execution.stepId\n );\n if (compStep) {\n const input = {\n stepId: execution.stepId,\n originalInput: execution.input,\n originalOutput: execution.output,\n workflowData: state.data,\n };\n\n try {\n // Create a context for the compensation step\n // We use the same state as it provides access to data/history\n const step = getCurrentStep(spec, execution.stepId);\n const resolvedAppConfig = this.config.appConfigProvider\n ? await this.config.appConfigProvider(state)\n : undefined;\n\n const executorContext: OperationExecutorContext = {\n workflow: state,\n step,\n resolvedAppConfig,\n integrations: resolvedAppConfig?.integrations ?? [],\n knowledge: resolvedAppConfig?.knowledge ?? [],\n branding: resolvedAppConfig?.branding,\n translation: resolvedAppConfig?.translation,\n translationResolver: this.config.translationResolver,\n secretProvider: this.config.secretProvider,\n };\n\n await this.config.opExecutor(\n compStep.operation,\n input,\n executorContext\n );\n\n this.emit('workflow.compensation_step_completed', {\n workflowId,\n stepId: execution.stepId,\n compensationOp: compStep.operation.name,\n });\n } catch (error) {\n const errorMessage =\n error instanceof Error ? error.message : String(error);\n this.emit('workflow.compensation_step_failed', {\n workflowId,\n stepId: execution.stepId,\n compensationOp: compStep.operation.name,\n error: errorMessage,\n });\n // We continue with other compensations even if one fails (best effort)\n }\n }\n }\n\n // We don't change status from 'failed' or 'cancelled' usually,\n // but we might want to mark that rollback was attempted/completed.\n // For now, just emitting events is enough.\n this.emit('workflow.rollback_completed', { workflowId });\n }\n\n async getState(workflowId: string): Promise<WorkflowState> {\n return this.getStateOrThrow(workflowId);\n }\n\n async cancel(workflowId: string): Promise<void> {\n const state = await this.getStateOrThrow(workflowId);\n if (state.status === 'cancelled') return;\n\n const nextState: WorkflowState = {\n ...state,\n status: 'cancelled',\n updatedAt: new Date(),\n };\n await this.config.stateStore.update(workflowId, () => nextState);\n this.emit('workflow.cancelled', {\n workflowId,\n workflowName: state.workflowName,\n });\n }\n\n private async performPreFlight(\n spec: WorkflowSpec,\n resolvedConfig?: ResolvedAppConfig\n ): Promise<WorkflowPreFlightResult> {\n if (!resolvedConfig) {\n return { canStart: true, issues: [] };\n }\n\n const issues: WorkflowPreFlightIssue[] = [];\n const integrationBySlot = new Map<string, ResolvedIntegration>();\n for (const integration of resolvedConfig.integrations) {\n integrationBySlot.set(integration.slot.slotId, integration);\n }\n\n for (const step of spec.definition.steps) {\n for (const slotId of step.requiredIntegrations ?? []) {\n const integration = integrationBySlot.get(slotId);\n if (!integration) {\n issues.push({\n stepId: step.id,\n type: 'integration',\n identifier: slotId,\n severity: 'error',\n reason: `Integration slot \"${slotId}\" is not bound in the resolved app config.`,\n });\n continue;\n }\n const status = integration.connection.status;\n if (status === 'disconnected' || status === 'error') {\n issues.push({\n stepId: step.id,\n type: 'integration',\n identifier: slotId,\n severity: 'error',\n reason: `Integration slot \"${slotId}\" is in status \"${status}\".`,\n });\n } else if (status === 'unknown') {\n issues.push({\n stepId: step.id,\n type: 'integration',\n identifier: slotId,\n severity: 'warning',\n reason: `Integration slot \"${slotId}\" reports unknown health status.`,\n });\n }\n }\n }\n\n const enabledCapabilities = new Set(\n resolvedConfig.capabilities.enabled.map(capabilityKey)\n );\n for (const step of spec.definition.steps) {\n for (const required of step.requiredCapabilities ?? []) {\n if (!enabledCapabilities.has(capabilityKey(required))) {\n issues.push({\n stepId: step.id,\n type: 'capability',\n identifier: capabilityKey(required),\n severity: 'error',\n reason: `Capability \"${required.key}@${required.version}\" is not enabled.`,\n });\n }\n }\n }\n\n const canStart = issues.every((issue) => issue.severity !== 'error');\n return { canStart, issues };\n }\n\n private async evaluateGuard(\n step: Step,\n state: WorkflowState,\n input: unknown\n ) {\n if (!step.guard) return true;\n if (this.config.guardEvaluator)\n return this.config.guardEvaluator(step.guard, {\n workflow: state,\n step,\n input,\n });\n if (step.guard.type === 'expression') {\n return evaluateExpression(step.guard.value, {\n data: state.data,\n input,\n });\n }\n return true;\n }\n\n private async runStepAction(\n step: Step,\n state: WorkflowState,\n input: unknown\n ): Promise<unknown> {\n if (step.type === 'automation') {\n const op = step.action?.operation;\n if (!op)\n throw new Error(`Automation step \"${step.id}\" requires an operation.`);\n const resolvedAppConfig = this.config.appConfigProvider\n ? await this.config.appConfigProvider(state)\n : undefined;\n const executorContext: OperationExecutorContext = {\n workflow: state,\n step,\n resolvedAppConfig,\n integrations: resolvedAppConfig?.integrations ?? [],\n knowledge: resolvedAppConfig?.knowledge ?? [],\n branding: resolvedAppConfig?.branding,\n translation: resolvedAppConfig?.translation,\n translationResolver: this.config.translationResolver,\n secretProvider: this.config.secretProvider,\n };\n if (this.config.enforceCapabilities) {\n await this.config.enforceCapabilities(op, executorContext);\n }\n return this.config.opExecutor(op, input, executorContext);\n }\n\n if (step.type === 'human') {\n return input;\n }\n\n // decision step\n return input;\n }\n\n private pickNextStepId(\n spec: WorkflowSpec,\n state: WorkflowState,\n step: Step,\n input: unknown,\n output: unknown\n ): string | null {\n const transitions = spec.definition.transitions.filter(\n (t) => t.from === step.id\n );\n for (const transition of transitions) {\n if (\n evaluateExpression(transition.condition, {\n data: state.data,\n input,\n output,\n })\n ) {\n const target = spec.definition.steps.find(\n (s) => s.id === transition.to\n );\n if (!target)\n throw new Error(\n `Transition ${transition.from} -> ${transition.to} points to missing step.`\n );\n return target.id;\n }\n }\n return null;\n }\n\n private getSpec(name: string, version?: number): WorkflowSpec {\n const spec = this.config.registry.get(name, version);\n if (!spec)\n throw new Error(\n `Workflow spec not found for ${name}${version ? `.v${version}` : ''}`\n );\n return spec;\n }\n\n private async getStateOrThrow(workflowId: string): Promise<WorkflowState> {\n const state = await this.config.stateStore.get(workflowId);\n if (!state) throw new Error(`Workflow state not found for ${workflowId}`);\n return state;\n }\n\n private emit(event: string, payload: Record<string, unknown>) {\n this.config.eventEmitter?.(event, payload);\n }\n}\n\nfunction resolveEntryStepId(spec: WorkflowSpec): string {\n const entry =\n spec.definition.entryStepId ?? spec.definition.steps[0]?.id ?? null;\n if (!entry)\n throw new Error(\n `Workflow ${spec.meta.name}.v${spec.meta.version} has no entry step.`\n );\n return entry;\n}\n\nfunction getCurrentStep(spec: WorkflowSpec, stepId: string): Step {\n const step = spec.definition.steps.find((s) => s.id === stepId);\n if (!step)\n throw new Error(\n `Step \"${stepId}\" not found in workflow ${spec.meta.name}.v${spec.meta.version}.`\n );\n return step;\n}\n\nfunction hasOutgoing(spec: WorkflowSpec, stepId: string): boolean {\n return spec.definition.transitions.some((t) => t.from === stepId);\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return value != null && typeof value === 'object' && !Array.isArray(value);\n}\n\nfunction isTerminalStatus(status: WorkflowState['status']) {\n return (\n status === 'completed' || status === 'failed' || status === 'cancelled'\n );\n}\n\nexport class WorkflowPreFlightError extends Error {\n constructor(public readonly issues: WorkflowPreFlightIssue[]) {\n super(\n `Workflow pre-flight failed: ${issues\n .filter((issue) => issue.severity === 'error')\n .map((issue) => `${issue.type}:${issue.identifier}`)\n .join(', ')}`\n );\n this.name = 'WorkflowPreFlightError';\n }\n}\n\nfunction capabilityKey(ref: CapabilityRef): string {\n return `${ref.key}@${ref.version}`;\n}\n"],"mappings":"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"}
@@ -17,4 +17,5 @@ declare class SLAMonitor {
17
17
  check(state: WorkflowState, spec: WorkflowSpec): void;
18
18
  }
19
19
  //#endregion
20
- export { SLABreachEvent, SLAMonitor };
20
+ export { SLABreachEvent, SLAMonitor };
21
+ //# sourceMappingURL=sla-monitor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sla-monitor.d.ts","names":[],"sources":["../../src/workflow/sla-monitor.ts"],"sourcesContent":[],"mappings":";;;;UAGiB,cAAA;;EAAA,YAAA,EAAA,MAAc;EAUlB,IAAA,EAAA,mBAAU,GAAA,eAAA;EAIR,MAAA,CAAA,EAAA,MAAA;EAIA,UAAA,EAAA,MAAA;EAAqB,QAAA,EAAA,MAAA;EAAY,UAAA,EAXlC,IAWkC;;cARnC,UAAA;;qDAIE;eAIA,qBAAqB"}
@@ -44,4 +44,5 @@ var SLAMonitor = class {
44
44
  };
45
45
 
46
46
  //#endregion
47
- export { SLAMonitor };
47
+ export { SLAMonitor };
48
+ //# sourceMappingURL=sla-monitor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sla-monitor.js","names":["eventEmitter: (\n event: string,\n payload: SLABreachEvent\n ) => void"],"sources":["../../src/workflow/sla-monitor.ts"],"sourcesContent":["import type { WorkflowState } from './state';\nimport type { WorkflowSpec } from './spec';\n\nexport interface SLABreachEvent {\n workflowId: string;\n workflowName: string;\n type: 'workflow_duration' | 'step_duration';\n stepId?: string;\n expectedMs: number;\n actualMs: number;\n breachedAt: Date;\n}\n\nexport class SLAMonitor {\n constructor(\n private readonly eventEmitter: (\n event: string,\n payload: SLABreachEvent\n ) => void\n ) {}\n\n check(state: WorkflowState, spec: WorkflowSpec): void {\n const sla = spec.definition.sla;\n if (!sla) return;\n\n const now = new Date().getTime();\n\n // Check total workflow duration\n if (sla.totalDurationMs) {\n const duration = now - state.createdAt.getTime();\n if (duration > sla.totalDurationMs) {\n // Only emit if not already completed/failed/cancelled\n if (state.status === 'running' || state.status === 'paused') {\n this.eventEmitter('workflow.sla_breach', {\n workflowId: state.workflowId,\n workflowName: state.workflowName,\n type: 'workflow_duration',\n expectedMs: sla.totalDurationMs,\n actualMs: duration,\n breachedAt: new Date(),\n });\n }\n }\n }\n\n // Check step durations\n if (sla.stepDurationMs) {\n // Check currently running step\n if (state.status === 'running' && state.currentStep) {\n // Find when the current step started\n // It might be the last entry in history if it's running?\n // But history usually stores *completed* steps or *failed* attempts.\n // Runner updates history with status='running' at start of execution?\n // Let's check runner.ts:\n // const execution: StepExecution = { ... status: 'running' ... };\n // workingState.history.push(execution);\n // Yes, it pushes running execution.\n\n const currentExecution = state.history.find(\n (h) => h.stepId === state.currentStep && h.status === 'running'\n );\n\n if (currentExecution) {\n const stepLimit = sla.stepDurationMs[state.currentStep];\n if (stepLimit) {\n const stepDuration = now - currentExecution.startedAt.getTime();\n if (stepDuration > stepLimit) {\n this.eventEmitter('workflow.sla_breach', {\n workflowId: state.workflowId,\n workflowName: state.workflowName,\n type: 'step_duration',\n stepId: state.currentStep,\n expectedMs: stepLimit,\n actualMs: stepDuration,\n breachedAt: new Date(),\n });\n }\n }\n }\n }\n }\n }\n}\n"],"mappings":";AAaA,IAAa,aAAb,MAAwB;CACtB,YACE,AAAiBA,cAIjB;EAJiB;;CAMnB,MAAM,OAAsB,MAA0B;EACpD,MAAM,MAAM,KAAK,WAAW;AAC5B,MAAI,CAAC,IAAK;EAEV,MAAM,uBAAM,IAAI,MAAM,EAAC,SAAS;AAGhC,MAAI,IAAI,iBAAiB;GACvB,MAAM,WAAW,MAAM,MAAM,UAAU,SAAS;AAChD,OAAI,WAAW,IAAI,iBAEjB;QAAI,MAAM,WAAW,aAAa,MAAM,WAAW,SACjD,MAAK,aAAa,uBAAuB;KACvC,YAAY,MAAM;KAClB,cAAc,MAAM;KACpB,MAAM;KACN,YAAY,IAAI;KAChB,UAAU;KACV,4BAAY,IAAI,MAAM;KACvB,CAAC;;;AAMR,MAAI,IAAI,gBAEN;OAAI,MAAM,WAAW,aAAa,MAAM,aAAa;IAUnD,MAAM,mBAAmB,MAAM,QAAQ,MACpC,MAAM,EAAE,WAAW,MAAM,eAAe,EAAE,WAAW,UACvD;AAED,QAAI,kBAAkB;KACpB,MAAM,YAAY,IAAI,eAAe,MAAM;AAC3C,SAAI,WAAW;MACb,MAAM,eAAe,MAAM,iBAAiB,UAAU,SAAS;AAC/D,UAAI,eAAe,UACjB,MAAK,aAAa,uBAAuB;OACvC,YAAY,MAAM;OAClB,cAAc,MAAM;OACpB,MAAM;OACN,QAAQ,MAAM;OACd,YAAY;OACZ,UAAU;OACV,4BAAY,IAAI,MAAM;OACvB,CAAC"}
@@ -96,4 +96,5 @@ declare class WorkflowRegistry {
96
96
  get(name: string, version?: number): WorkflowSpec | undefined;
97
97
  }
98
98
  //#endregion
99
- export { CompensationStep, CompensationStrategy, FormRef, GuardCondition, GuardConditionKind, RetryPolicy, SLA, Step, StepAction, StepType, Transition, WorkflowDefinition, WorkflowMeta, WorkflowRegistry, WorkflowSpec, WorkflowStatus };
99
+ export { CompensationStep, CompensationStrategy, FormRef, GuardCondition, GuardConditionKind, RetryPolicy, SLA, Step, StepAction, StepType, Transition, WorkflowDefinition, WorkflowMeta, WorkflowRegistry, WorkflowSpec, WorkflowStatus };
100
+ //# sourceMappingURL=spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spec.d.ts","names":[],"sources":["../../src/workflow/spec.ts"],"sourcesContent":[],"mappings":";;;;;;;;;AAQA;AAKY,UALK,OAAA,CAKG;EAER,GAAA,EAAA,MAAA;EAOA,OAAA,EAAA,MAAA;AAEZ;AAMiB,KAjBL,QAAA,GAiBgB,OAAA,GAAA,YAAA,GAAA,UAAA;AAQX,KAvBL,cAAA,GAuBe,SAIlB,GAAA,QAAO,GAAA,WAAA,GAAA,QAAA,GAAA,WAAA;AAGC,KAvBL,kBAAA,GAuBS,QAAA,GAAA,YAAA;AAEb,UAvBS,cAAA,CAuBT;EAGG,IAAA,EAzBH,kBAyBG;EACD;EAEA,KAAA,EAAA,MAAA;;AAI4B,UA3BrB,WAAA,CA2BqB;EAGrB,WAAA,EAAU,MAAA;EAQV,OAAG,EAAA,QAAA,GAED,aAAM;EAGR,OAAA,EAAA,MAAA;EAMA;EAKA,UAAA,CAAA,EAAA,MAAA;;AAEF,UAhDE,UAAA,CAgDF;EAGP;EACS,SAAA,CAAA,EAlDH,KAkDG;EAAoB;EAGpB,IAAA,CAAA,EAnDR,OAmDQ;AAOjB;AACQ,UAxDS,IAAA,CAwDT;EACM,EAAA,EAAA,MAAA;EAEE,IAAA,EAzDR,QAyDQ;EAAa,KAAA,EAAA,MAAA;EAOhB,WAAA,CAAA,EAAA,MAAgB;EAGZ,MAAA,CAAA,EAhEN,UAgEM;EAOP,KAAA,CAAA,EAtEA,cAsEA;EAI6B,SAAA,CAAA,EAAA,MAAA;EAAY,KAAA,CAAA,EAxEzC,WAwEyC;;;;yBApE1B;;UAGR,UAAA;;;;;;;UAQA,GAAA;;mBAEE;;UAGF,gBAAA;;aAEJ;;;UAII,oBAAA;;SAER;;UAGQ,kBAAA;SACR;eACM;;;QAGP;iBACS;;UAGA,YAAA,SAAqB;;;;;;UAOrB,YAAA;QACT;cACM;;;;gBAEE;;cAOH,gBAAA;;iBAGI;UAOP;uCAI6B"}