@lssm/lib.contracts 0.0.0-canary-20251120170226 → 0.0.0-canary-20251206160926

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 (569) hide show
  1. package/README.md +3 -1
  2. package/dist/app-config/branding.d.ts +1 -2
  3. package/dist/app-config/contracts.d.ts +51 -52
  4. package/dist/app-config/contracts.js +1 -2
  5. package/dist/app-config/events.d.ts +28 -29
  6. package/dist/app-config/events.js +1 -2
  7. package/dist/app-config/lifecycle-contracts.d.ts +81 -82
  8. package/dist/app-config/lifecycle-contracts.js +1 -2
  9. package/dist/app-config/lifecycle.d.ts +1 -2
  10. package/dist/app-config/runtime.d.ts +1 -2
  11. package/dist/app-config/runtime.js +1 -2
  12. package/dist/app-config/spec.d.ts +3 -4
  13. package/dist/app-config/spec.js +1 -2
  14. package/dist/app-config/validation.d.ts +1 -2
  15. package/dist/app-config/validation.js +1 -2
  16. package/dist/capabilities/openbanking.d.ts +1 -2
  17. package/dist/capabilities/openbanking.js +1 -2
  18. package/dist/capabilities.d.ts +2 -2
  19. package/dist/capabilities.js +1 -2
  20. package/dist/client/index.d.ts +2 -2
  21. package/dist/client/react/drivers/rn-reusables.d.ts +1 -2
  22. package/dist/client/react/drivers/rn-reusables.js +1 -2
  23. package/dist/client/react/drivers/shadcn.d.ts +1 -2
  24. package/dist/client/react/drivers/shadcn.js +1 -2
  25. package/dist/client/react/feature-render.d.ts +2 -4
  26. package/dist/client/react/feature-render.js +1 -2
  27. package/dist/client/react/form-render.d.ts +1 -2
  28. package/dist/client/react/form-render.js +1 -2
  29. package/dist/client/react/index.d.ts +2 -2
  30. package/dist/contracts-adapter-hydration.d.ts +1 -2
  31. package/dist/contracts-adapter-hydration.js +1 -2
  32. package/dist/contracts-adapter-input.d.ts +1 -2
  33. package/dist/contracts-adapter-input.js +1 -2
  34. package/dist/data-views/query-generator.d.ts +1 -2
  35. package/dist/data-views/query-generator.js +1 -2
  36. package/dist/data-views/runtime.d.ts +1 -2
  37. package/dist/data-views/runtime.js +1 -2
  38. package/dist/data-views.d.ts +1 -2
  39. package/dist/data-views.js +1 -2
  40. package/dist/events.d.ts +1 -2
  41. package/dist/events.js +1 -2
  42. package/dist/experiments/evaluator.d.ts +1 -2
  43. package/dist/experiments/evaluator.js +1 -2
  44. package/dist/experiments/spec-resolver.d.ts +16 -0
  45. package/dist/experiments/spec-resolver.js +0 -0
  46. package/dist/experiments/spec.d.ts +1 -2
  47. package/dist/experiments/spec.js +1 -2
  48. package/dist/features.d.ts +1 -2
  49. package/dist/features.js +1 -2
  50. package/dist/forms.d.ts +1 -2
  51. package/dist/forms.js +1 -2
  52. package/dist/graphql-federation/dist/index.js +1 -2
  53. package/dist/index.d.ts +7 -4
  54. package/dist/index.js +1 -1
  55. package/dist/install.d.ts +1 -2
  56. package/dist/install.js +1 -2
  57. package/dist/integrations/binding.d.ts +1 -2
  58. package/dist/integrations/connection.d.ts +1 -2
  59. package/dist/integrations/contracts.d.ts +103 -104
  60. package/dist/integrations/contracts.js +1 -2
  61. package/dist/integrations/health.d.ts +1 -2
  62. package/dist/integrations/health.js +1 -2
  63. package/dist/integrations/openbanking/contracts/accounts.d.ts +67 -68
  64. package/dist/integrations/openbanking/contracts/accounts.js +1 -2
  65. package/dist/integrations/openbanking/contracts/balances.d.ts +35 -36
  66. package/dist/integrations/openbanking/contracts/balances.js +1 -2
  67. package/dist/integrations/openbanking/contracts/index.d.ts +1 -2
  68. package/dist/integrations/openbanking/contracts/index.js +1 -2
  69. package/dist/integrations/openbanking/contracts/transactions.d.ts +49 -50
  70. package/dist/integrations/openbanking/contracts/transactions.js +1 -2
  71. package/dist/integrations/openbanking/guards.d.ts +1 -2
  72. package/dist/integrations/openbanking/guards.js +1 -2
  73. package/dist/integrations/openbanking/models.d.ts +56 -57
  74. package/dist/integrations/openbanking/models.js +1 -2
  75. package/dist/integrations/openbanking/telemetry.d.ts +1 -2
  76. package/dist/integrations/openbanking/telemetry.js +1 -2
  77. package/dist/integrations/providers/calendar.d.ts +1 -2
  78. package/dist/integrations/providers/elevenlabs.d.ts +1 -2
  79. package/dist/integrations/providers/elevenlabs.js +1 -2
  80. package/dist/integrations/providers/email.d.ts +1 -2
  81. package/dist/integrations/providers/embedding.d.ts +1 -2
  82. package/dist/integrations/providers/gcs-storage.d.ts +1 -2
  83. package/dist/integrations/providers/gcs-storage.js +1 -2
  84. package/dist/integrations/providers/gmail.d.ts +1 -2
  85. package/dist/integrations/providers/gmail.js +1 -2
  86. package/dist/integrations/providers/google-calendar.d.ts +1 -2
  87. package/dist/integrations/providers/google-calendar.js +1 -2
  88. package/dist/integrations/providers/impls/elevenlabs-voice.d.ts +1 -2
  89. package/dist/integrations/providers/impls/elevenlabs-voice.js +1 -2
  90. package/dist/integrations/providers/impls/gcs-storage.d.ts +1 -2
  91. package/dist/integrations/providers/impls/gcs-storage.js +1 -2
  92. package/dist/integrations/providers/impls/gmail-inbound.d.ts +1 -2
  93. package/dist/integrations/providers/impls/gmail-inbound.js +1 -2
  94. package/dist/integrations/providers/impls/gmail-outbound.d.ts +1 -2
  95. package/dist/integrations/providers/impls/gmail-outbound.js +1 -2
  96. package/dist/integrations/providers/impls/google-calendar.d.ts +1 -2
  97. package/dist/integrations/providers/impls/google-calendar.js +1 -2
  98. package/dist/integrations/providers/impls/mistral-embedding.d.ts +1 -2
  99. package/dist/integrations/providers/impls/mistral-embedding.js +1 -2
  100. package/dist/integrations/providers/impls/mistral-llm.d.ts +1 -2
  101. package/dist/integrations/providers/impls/mistral-llm.js +1 -2
  102. package/dist/integrations/providers/impls/postmark-email.d.ts +1 -2
  103. package/dist/integrations/providers/impls/postmark-email.js +1 -2
  104. package/dist/integrations/providers/impls/powens-client.d.ts +1 -2
  105. package/dist/integrations/providers/impls/powens-client.js +1 -2
  106. package/dist/integrations/providers/impls/powens-openbanking.d.ts +1 -2
  107. package/dist/integrations/providers/impls/powens-openbanking.js +1 -2
  108. package/dist/integrations/providers/impls/provider-factory.d.ts +1 -2
  109. package/dist/integrations/providers/impls/provider-factory.js +1 -2
  110. package/dist/integrations/providers/impls/qdrant-vector.d.ts +1 -2
  111. package/dist/integrations/providers/impls/qdrant-vector.js +1 -2
  112. package/dist/integrations/providers/impls/stripe-payments.d.ts +1 -2
  113. package/dist/integrations/providers/impls/stripe-payments.js +1 -2
  114. package/dist/integrations/providers/impls/twilio-sms.d.ts +1 -2
  115. package/dist/integrations/providers/impls/twilio-sms.js +1 -2
  116. package/dist/integrations/providers/llm.d.ts +1 -2
  117. package/dist/integrations/providers/mistral.d.ts +1 -2
  118. package/dist/integrations/providers/mistral.js +1 -2
  119. package/dist/integrations/providers/openbanking.d.ts +1 -2
  120. package/dist/integrations/providers/payments.d.ts +1 -2
  121. package/dist/integrations/providers/postmark.d.ts +1 -2
  122. package/dist/integrations/providers/postmark.js +1 -2
  123. package/dist/integrations/providers/powens.d.ts +1 -2
  124. package/dist/integrations/providers/powens.js +1 -2
  125. package/dist/integrations/providers/qdrant.d.ts +1 -2
  126. package/dist/integrations/providers/qdrant.js +1 -2
  127. package/dist/integrations/providers/sms.d.ts +1 -2
  128. package/dist/integrations/providers/storage.d.ts +1 -2
  129. package/dist/integrations/providers/stripe.d.ts +1 -2
  130. package/dist/integrations/providers/stripe.js +1 -2
  131. package/dist/integrations/providers/twilio-sms.d.ts +1 -2
  132. package/dist/integrations/providers/twilio-sms.js +1 -2
  133. package/dist/integrations/providers/vector-store.d.ts +1 -2
  134. package/dist/integrations/providers/voice.d.ts +1 -2
  135. package/dist/integrations/runtime.d.ts +1 -2
  136. package/dist/integrations/runtime.js +1 -2
  137. package/dist/integrations/secrets/env-secret-provider.d.ts +1 -2
  138. package/dist/integrations/secrets/env-secret-provider.js +1 -2
  139. package/dist/integrations/secrets/gcp-secret-manager.d.ts +1 -2
  140. package/dist/integrations/secrets/gcp-secret-manager.js +1 -2
  141. package/dist/integrations/secrets/manager.d.ts +3 -4
  142. package/dist/integrations/secrets/manager.js +1 -2
  143. package/dist/integrations/secrets/provider.d.ts +1 -2
  144. package/dist/integrations/secrets/provider.js +1 -2
  145. package/dist/integrations/spec.d.ts +1 -2
  146. package/dist/integrations/spec.js +1 -2
  147. package/dist/jobs/gcp-cloud-tasks.d.ts +1 -2
  148. package/dist/jobs/gcp-cloud-tasks.js +1 -2
  149. package/dist/jobs/gcp-pubsub.d.ts +1 -2
  150. package/dist/jobs/gcp-pubsub.js +1 -2
  151. package/dist/jobs/handlers/gmail-sync-handler.d.ts +1 -2
  152. package/dist/jobs/handlers/gmail-sync-handler.js +1 -2
  153. package/dist/jobs/handlers/storage-document-handler.d.ts +1 -2
  154. package/dist/jobs/handlers/storage-document-handler.js +1 -2
  155. package/dist/jobs/memory-queue.d.ts +1 -2
  156. package/dist/jobs/memory-queue.js +1 -2
  157. package/dist/jobs/queue.d.ts +1 -2
  158. package/dist/jsonschema.d.ts +1 -2
  159. package/dist/jsonschema.js +1 -2
  160. package/dist/knowledge/binding.d.ts +1 -2
  161. package/dist/knowledge/contracts.d.ts +67 -68
  162. package/dist/knowledge/contracts.js +1 -2
  163. package/dist/knowledge/ingestion/document-processor.d.ts +1 -2
  164. package/dist/knowledge/ingestion/document-processor.js +1 -2
  165. package/dist/knowledge/ingestion/embedding-service.d.ts +1 -2
  166. package/dist/knowledge/ingestion/embedding-service.js +1 -2
  167. package/dist/knowledge/ingestion/gmail-adapter.d.ts +1 -2
  168. package/dist/knowledge/ingestion/gmail-adapter.js +1 -2
  169. package/dist/knowledge/ingestion/storage-adapter.d.ts +1 -2
  170. package/dist/knowledge/ingestion/storage-adapter.js +1 -2
  171. package/dist/knowledge/ingestion/vector-indexer.d.ts +1 -2
  172. package/dist/knowledge/ingestion/vector-indexer.js +1 -2
  173. package/dist/knowledge/query/service.d.ts +3 -4
  174. package/dist/knowledge/query/service.js +1 -2
  175. package/dist/knowledge/runtime.d.ts +1 -2
  176. package/dist/knowledge/runtime.js +1 -2
  177. package/dist/knowledge/source.d.ts +1 -2
  178. package/dist/knowledge/spaces/email-threads.d.ts +1 -2
  179. package/dist/knowledge/spaces/email-threads.js +1 -2
  180. package/dist/knowledge/spaces/financial-docs.d.ts +1 -2
  181. package/dist/knowledge/spaces/financial-docs.js +1 -2
  182. package/dist/knowledge/spaces/financial-overview.d.ts +1 -2
  183. package/dist/knowledge/spaces/financial-overview.js +1 -2
  184. package/dist/knowledge/spaces/product-canon.d.ts +1 -2
  185. package/dist/knowledge/spaces/product-canon.js +1 -2
  186. package/dist/knowledge/spaces/support-faq.d.ts +1 -2
  187. package/dist/knowledge/spaces/support-faq.js +1 -2
  188. package/dist/knowledge/spaces/uploaded-docs.d.ts +1 -2
  189. package/dist/knowledge/spaces/uploaded-docs.js +1 -2
  190. package/dist/knowledge/spec.d.ts +1 -2
  191. package/dist/knowledge/spec.js +1 -2
  192. package/dist/markdown.d.ts +1 -2
  193. package/dist/markdown.js +1 -2
  194. package/dist/migrations.d.ts +1 -2
  195. package/dist/migrations.js +1 -2
  196. package/dist/onboarding-base.d.ts +30 -31
  197. package/dist/onboarding-base.js +1 -2
  198. package/dist/ownership.d.ts +1 -2
  199. package/dist/ownership.js +1 -2
  200. package/dist/policy/engine.d.ts +1 -2
  201. package/dist/policy/engine.js +1 -2
  202. package/dist/policy/opa-adapter.d.ts +1 -2
  203. package/dist/policy/opa-adapter.js +1 -2
  204. package/dist/policy/spec.d.ts +1 -2
  205. package/dist/policy/spec.js +1 -2
  206. package/dist/presentations.backcompat.d.ts +1 -2
  207. package/dist/presentations.backcompat.js +1 -2
  208. package/dist/presentations.d.ts +1 -2
  209. package/dist/presentations.js +1 -2
  210. package/dist/presentations.v2.d.ts +21 -2
  211. package/dist/presentations.v2.js +1 -2
  212. package/dist/prompt.d.ts +1 -2
  213. package/dist/prompt.js +1 -2
  214. package/dist/promptRegistry.d.ts +1 -2
  215. package/dist/promptRegistry.js +1 -2
  216. package/dist/regenerator/adapters.d.ts +1 -2
  217. package/dist/regenerator/executor.d.ts +1 -2
  218. package/dist/regenerator/executor.js +1 -2
  219. package/dist/regenerator/service.d.ts +1 -2
  220. package/dist/regenerator/service.js +1 -2
  221. package/dist/regenerator/sinks.d.ts +1 -2
  222. package/dist/regenerator/sinks.js +1 -2
  223. package/dist/regenerator/types.d.ts +1 -2
  224. package/dist/regenerator/utils.d.ts +1 -2
  225. package/dist/regenerator/utils.js +1 -2
  226. package/dist/registry.d.ts +1 -2
  227. package/dist/registry.js +1 -2
  228. package/dist/resources.d.ts +1 -2
  229. package/dist/resources.js +1 -2
  230. package/dist/schema/dist/FieldType.js +1 -2
  231. package/dist/schema/dist/ScalarTypeEnum.js +1 -2
  232. package/dist/schema/dist/SchemaModel.js +1 -2
  233. package/dist/schema/dist/entity/defineEntity.js +1 -0
  234. package/dist/schema/dist/entity/index.js +1 -0
  235. package/dist/schema/dist/entity/types.js +1 -0
  236. package/dist/schema/dist/index.js +1 -1
  237. package/dist/schema-to-markdown.d.ts +54 -0
  238. package/dist/schema-to-markdown.js +10 -0
  239. package/dist/server/graphql-pothos.d.ts +1 -2
  240. package/dist/server/graphql-pothos.js +1 -2
  241. package/dist/server/graphql-schema-export.d.ts +1 -2
  242. package/dist/server/graphql-schema-export.js +1 -2
  243. package/dist/server/provider-mcp.d.ts +1 -2
  244. package/dist/server/provider-mcp.js +1 -2
  245. package/dist/server/rest-elysia.d.ts +1 -2
  246. package/dist/server/rest-elysia.js +1 -2
  247. package/dist/server/rest-express.d.ts +1 -2
  248. package/dist/server/rest-express.js +1 -2
  249. package/dist/server/rest-generic.d.ts +1 -2
  250. package/dist/server/rest-generic.js +1 -2
  251. package/dist/server/rest-next-app.d.ts +1 -2
  252. package/dist/server/rest-next-app.js +1 -2
  253. package/dist/server/rest-next-mcp.d.ts +1 -2
  254. package/dist/server/rest-next-mcp.js +1 -2
  255. package/dist/server/rest-next-pages.d.ts +1 -2
  256. package/dist/server/rest-next-pages.js +1 -2
  257. package/dist/spec.d.ts +1 -2
  258. package/dist/spec.js +1 -2
  259. package/dist/telemetry/anomaly.d.ts +1 -2
  260. package/dist/telemetry/anomaly.js +1 -2
  261. package/dist/telemetry/spec.d.ts +1 -2
  262. package/dist/telemetry/spec.js +1 -2
  263. package/dist/telemetry/tracker.d.ts +1 -2
  264. package/dist/telemetry/tracker.js +1 -2
  265. package/dist/tests/runner.d.ts +1 -2
  266. package/dist/tests/runner.js +1 -2
  267. package/dist/tests/spec.d.ts +1 -2
  268. package/dist/tests/spec.js +1 -2
  269. package/dist/themes.d.ts +1 -2
  270. package/dist/themes.js +1 -2
  271. package/dist/translations/catalog.d.ts +1 -2
  272. package/dist/translations/tenant.d.ts +1 -2
  273. package/dist/types/all.d.ts +3 -3
  274. package/dist/types.d.ts +4 -2
  275. package/dist/workflow/adapters/db-adapter.d.ts +1 -2
  276. package/dist/workflow/adapters/db-adapter.js +1 -2
  277. package/dist/workflow/adapters/file-adapter.d.ts +1 -2
  278. package/dist/workflow/adapters/file-adapter.js +1 -2
  279. package/dist/workflow/adapters/memory-store.d.ts +1 -2
  280. package/dist/workflow/adapters/memory-store.js +1 -2
  281. package/dist/workflow/expression.d.ts +1 -2
  282. package/dist/workflow/expression.js +1 -2
  283. package/dist/workflow/runner.d.ts +1 -2
  284. package/dist/workflow/runner.js +1 -2
  285. package/dist/workflow/sla-monitor.d.ts +1 -2
  286. package/dist/workflow/sla-monitor.js +1 -2
  287. package/dist/workflow/spec.d.ts +1 -2
  288. package/dist/workflow/spec.js +1 -2
  289. package/dist/workflow/state.d.ts +1 -2
  290. package/dist/workflow/validation.d.ts +1 -2
  291. package/dist/workflow/validation.js +1 -2
  292. package/package.json +31 -25
  293. package/dist/app-config/branding.d.ts.map +0 -1
  294. package/dist/app-config/contracts.d.ts.map +0 -1
  295. package/dist/app-config/contracts.js.map +0 -1
  296. package/dist/app-config/events.d.ts.map +0 -1
  297. package/dist/app-config/events.js.map +0 -1
  298. package/dist/app-config/lifecycle-contracts.d.ts.map +0 -1
  299. package/dist/app-config/lifecycle-contracts.js.map +0 -1
  300. package/dist/app-config/lifecycle.d.ts.map +0 -1
  301. package/dist/app-config/runtime.d.ts.map +0 -1
  302. package/dist/app-config/runtime.js.map +0 -1
  303. package/dist/app-config/spec.d.ts.map +0 -1
  304. package/dist/app-config/spec.js.map +0 -1
  305. package/dist/app-config/validation.d.ts.map +0 -1
  306. package/dist/app-config/validation.js.map +0 -1
  307. package/dist/capabilities/openbanking.d.ts.map +0 -1
  308. package/dist/capabilities/openbanking.js.map +0 -1
  309. package/dist/capabilities.d.ts.map +0 -1
  310. package/dist/capabilities.js.map +0 -1
  311. package/dist/client/react/drivers/rn-reusables.d.ts.map +0 -1
  312. package/dist/client/react/drivers/rn-reusables.js.map +0 -1
  313. package/dist/client/react/drivers/shadcn.d.ts.map +0 -1
  314. package/dist/client/react/drivers/shadcn.js.map +0 -1
  315. package/dist/client/react/feature-render.d.ts.map +0 -1
  316. package/dist/client/react/feature-render.js.map +0 -1
  317. package/dist/client/react/form-render.d.ts.map +0 -1
  318. package/dist/client/react/form-render.js.map +0 -1
  319. package/dist/contracts-adapter-hydration.d.ts.map +0 -1
  320. package/dist/contracts-adapter-hydration.js.map +0 -1
  321. package/dist/contracts-adapter-input.d.ts.map +0 -1
  322. package/dist/contracts-adapter-input.js.map +0 -1
  323. package/dist/data-views/query-generator.d.ts.map +0 -1
  324. package/dist/data-views/query-generator.js.map +0 -1
  325. package/dist/data-views/runtime.d.ts.map +0 -1
  326. package/dist/data-views/runtime.js.map +0 -1
  327. package/dist/data-views.d.ts.map +0 -1
  328. package/dist/data-views.js.map +0 -1
  329. package/dist/events.d.ts.map +0 -1
  330. package/dist/events.js.map +0 -1
  331. package/dist/experiments/evaluator.d.ts.map +0 -1
  332. package/dist/experiments/evaluator.js.map +0 -1
  333. package/dist/experiments/spec.d.ts.map +0 -1
  334. package/dist/experiments/spec.js.map +0 -1
  335. package/dist/features.d.ts.map +0 -1
  336. package/dist/features.js.map +0 -1
  337. package/dist/forms.d.ts.map +0 -1
  338. package/dist/forms.js.map +0 -1
  339. package/dist/graphql-federation/dist/index.js.map +0 -1
  340. package/dist/install.d.ts.map +0 -1
  341. package/dist/install.js.map +0 -1
  342. package/dist/integrations/binding.d.ts.map +0 -1
  343. package/dist/integrations/connection.d.ts.map +0 -1
  344. package/dist/integrations/contracts.d.ts.map +0 -1
  345. package/dist/integrations/contracts.js.map +0 -1
  346. package/dist/integrations/health.d.ts.map +0 -1
  347. package/dist/integrations/health.js.map +0 -1
  348. package/dist/integrations/openbanking/contracts/accounts.d.ts.map +0 -1
  349. package/dist/integrations/openbanking/contracts/accounts.js.map +0 -1
  350. package/dist/integrations/openbanking/contracts/balances.d.ts.map +0 -1
  351. package/dist/integrations/openbanking/contracts/balances.js.map +0 -1
  352. package/dist/integrations/openbanking/contracts/index.d.ts.map +0 -1
  353. package/dist/integrations/openbanking/contracts/index.js.map +0 -1
  354. package/dist/integrations/openbanking/contracts/transactions.d.ts.map +0 -1
  355. package/dist/integrations/openbanking/contracts/transactions.js.map +0 -1
  356. package/dist/integrations/openbanking/guards.d.ts.map +0 -1
  357. package/dist/integrations/openbanking/guards.js.map +0 -1
  358. package/dist/integrations/openbanking/models.d.ts.map +0 -1
  359. package/dist/integrations/openbanking/models.js.map +0 -1
  360. package/dist/integrations/openbanking/telemetry.d.ts.map +0 -1
  361. package/dist/integrations/openbanking/telemetry.js.map +0 -1
  362. package/dist/integrations/providers/calendar.d.ts.map +0 -1
  363. package/dist/integrations/providers/elevenlabs.d.ts.map +0 -1
  364. package/dist/integrations/providers/elevenlabs.js.map +0 -1
  365. package/dist/integrations/providers/email.d.ts.map +0 -1
  366. package/dist/integrations/providers/embedding.d.ts.map +0 -1
  367. package/dist/integrations/providers/gcs-storage.d.ts.map +0 -1
  368. package/dist/integrations/providers/gcs-storage.js.map +0 -1
  369. package/dist/integrations/providers/gmail.d.ts.map +0 -1
  370. package/dist/integrations/providers/gmail.js.map +0 -1
  371. package/dist/integrations/providers/google-calendar.d.ts.map +0 -1
  372. package/dist/integrations/providers/google-calendar.js.map +0 -1
  373. package/dist/integrations/providers/impls/elevenlabs-voice.d.ts.map +0 -1
  374. package/dist/integrations/providers/impls/elevenlabs-voice.js.map +0 -1
  375. package/dist/integrations/providers/impls/gcs-storage.d.ts.map +0 -1
  376. package/dist/integrations/providers/impls/gcs-storage.js.map +0 -1
  377. package/dist/integrations/providers/impls/gmail-inbound.d.ts.map +0 -1
  378. package/dist/integrations/providers/impls/gmail-inbound.js.map +0 -1
  379. package/dist/integrations/providers/impls/gmail-outbound.d.ts.map +0 -1
  380. package/dist/integrations/providers/impls/gmail-outbound.js.map +0 -1
  381. package/dist/integrations/providers/impls/google-calendar.d.ts.map +0 -1
  382. package/dist/integrations/providers/impls/google-calendar.js.map +0 -1
  383. package/dist/integrations/providers/impls/mistral-embedding.d.ts.map +0 -1
  384. package/dist/integrations/providers/impls/mistral-embedding.js.map +0 -1
  385. package/dist/integrations/providers/impls/mistral-llm.d.ts.map +0 -1
  386. package/dist/integrations/providers/impls/mistral-llm.js.map +0 -1
  387. package/dist/integrations/providers/impls/postmark-email.d.ts.map +0 -1
  388. package/dist/integrations/providers/impls/postmark-email.js.map +0 -1
  389. package/dist/integrations/providers/impls/powens-client.d.ts.map +0 -1
  390. package/dist/integrations/providers/impls/powens-client.js.map +0 -1
  391. package/dist/integrations/providers/impls/powens-openbanking.d.ts.map +0 -1
  392. package/dist/integrations/providers/impls/powens-openbanking.js.map +0 -1
  393. package/dist/integrations/providers/impls/provider-factory.d.ts.map +0 -1
  394. package/dist/integrations/providers/impls/provider-factory.js.map +0 -1
  395. package/dist/integrations/providers/impls/qdrant-vector.d.ts.map +0 -1
  396. package/dist/integrations/providers/impls/qdrant-vector.js.map +0 -1
  397. package/dist/integrations/providers/impls/stripe-payments.d.ts.map +0 -1
  398. package/dist/integrations/providers/impls/stripe-payments.js.map +0 -1
  399. package/dist/integrations/providers/impls/twilio-sms.d.ts.map +0 -1
  400. package/dist/integrations/providers/impls/twilio-sms.js.map +0 -1
  401. package/dist/integrations/providers/llm.d.ts.map +0 -1
  402. package/dist/integrations/providers/mistral.d.ts.map +0 -1
  403. package/dist/integrations/providers/mistral.js.map +0 -1
  404. package/dist/integrations/providers/openbanking.d.ts.map +0 -1
  405. package/dist/integrations/providers/payments.d.ts.map +0 -1
  406. package/dist/integrations/providers/postmark.d.ts.map +0 -1
  407. package/dist/integrations/providers/postmark.js.map +0 -1
  408. package/dist/integrations/providers/powens.d.ts.map +0 -1
  409. package/dist/integrations/providers/powens.js.map +0 -1
  410. package/dist/integrations/providers/qdrant.d.ts.map +0 -1
  411. package/dist/integrations/providers/qdrant.js.map +0 -1
  412. package/dist/integrations/providers/sms.d.ts.map +0 -1
  413. package/dist/integrations/providers/storage.d.ts.map +0 -1
  414. package/dist/integrations/providers/stripe.d.ts.map +0 -1
  415. package/dist/integrations/providers/stripe.js.map +0 -1
  416. package/dist/integrations/providers/twilio-sms.d.ts.map +0 -1
  417. package/dist/integrations/providers/twilio-sms.js.map +0 -1
  418. package/dist/integrations/providers/vector-store.d.ts.map +0 -1
  419. package/dist/integrations/providers/voice.d.ts.map +0 -1
  420. package/dist/integrations/runtime.d.ts.map +0 -1
  421. package/dist/integrations/runtime.js.map +0 -1
  422. package/dist/integrations/secrets/env-secret-provider.d.ts.map +0 -1
  423. package/dist/integrations/secrets/env-secret-provider.js.map +0 -1
  424. package/dist/integrations/secrets/gcp-secret-manager.d.ts.map +0 -1
  425. package/dist/integrations/secrets/gcp-secret-manager.js.map +0 -1
  426. package/dist/integrations/secrets/manager.d.ts.map +0 -1
  427. package/dist/integrations/secrets/manager.js.map +0 -1
  428. package/dist/integrations/secrets/provider.d.ts.map +0 -1
  429. package/dist/integrations/secrets/provider.js.map +0 -1
  430. package/dist/integrations/spec.d.ts.map +0 -1
  431. package/dist/integrations/spec.js.map +0 -1
  432. package/dist/jobs/gcp-cloud-tasks.d.ts.map +0 -1
  433. package/dist/jobs/gcp-cloud-tasks.js.map +0 -1
  434. package/dist/jobs/gcp-pubsub.d.ts.map +0 -1
  435. package/dist/jobs/gcp-pubsub.js.map +0 -1
  436. package/dist/jobs/handlers/gmail-sync-handler.d.ts.map +0 -1
  437. package/dist/jobs/handlers/gmail-sync-handler.js.map +0 -1
  438. package/dist/jobs/handlers/storage-document-handler.d.ts.map +0 -1
  439. package/dist/jobs/handlers/storage-document-handler.js.map +0 -1
  440. package/dist/jobs/memory-queue.d.ts.map +0 -1
  441. package/dist/jobs/memory-queue.js.map +0 -1
  442. package/dist/jobs/queue.d.ts.map +0 -1
  443. package/dist/jsonschema.d.ts.map +0 -1
  444. package/dist/jsonschema.js.map +0 -1
  445. package/dist/knowledge/binding.d.ts.map +0 -1
  446. package/dist/knowledge/contracts.d.ts.map +0 -1
  447. package/dist/knowledge/contracts.js.map +0 -1
  448. package/dist/knowledge/ingestion/document-processor.d.ts.map +0 -1
  449. package/dist/knowledge/ingestion/document-processor.js.map +0 -1
  450. package/dist/knowledge/ingestion/embedding-service.d.ts.map +0 -1
  451. package/dist/knowledge/ingestion/embedding-service.js.map +0 -1
  452. package/dist/knowledge/ingestion/gmail-adapter.d.ts.map +0 -1
  453. package/dist/knowledge/ingestion/gmail-adapter.js.map +0 -1
  454. package/dist/knowledge/ingestion/storage-adapter.d.ts.map +0 -1
  455. package/dist/knowledge/ingestion/storage-adapter.js.map +0 -1
  456. package/dist/knowledge/ingestion/vector-indexer.d.ts.map +0 -1
  457. package/dist/knowledge/ingestion/vector-indexer.js.map +0 -1
  458. package/dist/knowledge/query/service.d.ts.map +0 -1
  459. package/dist/knowledge/query/service.js.map +0 -1
  460. package/dist/knowledge/runtime.d.ts.map +0 -1
  461. package/dist/knowledge/runtime.js.map +0 -1
  462. package/dist/knowledge/source.d.ts.map +0 -1
  463. package/dist/knowledge/spaces/email-threads.d.ts.map +0 -1
  464. package/dist/knowledge/spaces/email-threads.js.map +0 -1
  465. package/dist/knowledge/spaces/financial-docs.d.ts.map +0 -1
  466. package/dist/knowledge/spaces/financial-docs.js.map +0 -1
  467. package/dist/knowledge/spaces/financial-overview.d.ts.map +0 -1
  468. package/dist/knowledge/spaces/financial-overview.js.map +0 -1
  469. package/dist/knowledge/spaces/product-canon.d.ts.map +0 -1
  470. package/dist/knowledge/spaces/product-canon.js.map +0 -1
  471. package/dist/knowledge/spaces/support-faq.d.ts.map +0 -1
  472. package/dist/knowledge/spaces/support-faq.js.map +0 -1
  473. package/dist/knowledge/spaces/uploaded-docs.d.ts.map +0 -1
  474. package/dist/knowledge/spaces/uploaded-docs.js.map +0 -1
  475. package/dist/knowledge/spec.d.ts.map +0 -1
  476. package/dist/knowledge/spec.js.map +0 -1
  477. package/dist/markdown.d.ts.map +0 -1
  478. package/dist/markdown.js.map +0 -1
  479. package/dist/migrations.d.ts.map +0 -1
  480. package/dist/migrations.js.map +0 -1
  481. package/dist/onboarding-base.d.ts.map +0 -1
  482. package/dist/onboarding-base.js.map +0 -1
  483. package/dist/ownership.d.ts.map +0 -1
  484. package/dist/ownership.js.map +0 -1
  485. package/dist/policy/engine.d.ts.map +0 -1
  486. package/dist/policy/engine.js.map +0 -1
  487. package/dist/policy/opa-adapter.d.ts.map +0 -1
  488. package/dist/policy/opa-adapter.js.map +0 -1
  489. package/dist/policy/spec.d.ts.map +0 -1
  490. package/dist/policy/spec.js.map +0 -1
  491. package/dist/presentations.backcompat.d.ts.map +0 -1
  492. package/dist/presentations.backcompat.js.map +0 -1
  493. package/dist/presentations.d.ts.map +0 -1
  494. package/dist/presentations.js.map +0 -1
  495. package/dist/presentations.v2.d.ts.map +0 -1
  496. package/dist/presentations.v2.js.map +0 -1
  497. package/dist/prompt.d.ts.map +0 -1
  498. package/dist/prompt.js.map +0 -1
  499. package/dist/promptRegistry.d.ts.map +0 -1
  500. package/dist/promptRegistry.js.map +0 -1
  501. package/dist/regenerator/adapters.d.ts.map +0 -1
  502. package/dist/regenerator/executor.d.ts.map +0 -1
  503. package/dist/regenerator/executor.js.map +0 -1
  504. package/dist/regenerator/service.d.ts.map +0 -1
  505. package/dist/regenerator/service.js.map +0 -1
  506. package/dist/regenerator/sinks.d.ts.map +0 -1
  507. package/dist/regenerator/sinks.js.map +0 -1
  508. package/dist/regenerator/types.d.ts.map +0 -1
  509. package/dist/regenerator/utils.d.ts.map +0 -1
  510. package/dist/regenerator/utils.js.map +0 -1
  511. package/dist/registry.d.ts.map +0 -1
  512. package/dist/registry.js.map +0 -1
  513. package/dist/resources.d.ts.map +0 -1
  514. package/dist/resources.js.map +0 -1
  515. package/dist/schema/dist/FieldType.js.map +0 -1
  516. package/dist/schema/dist/ScalarTypeEnum.js.map +0 -1
  517. package/dist/schema/dist/SchemaModel.js.map +0 -1
  518. package/dist/server/graphql-pothos.d.ts.map +0 -1
  519. package/dist/server/graphql-pothos.js.map +0 -1
  520. package/dist/server/graphql-schema-export.d.ts.map +0 -1
  521. package/dist/server/graphql-schema-export.js.map +0 -1
  522. package/dist/server/provider-mcp.d.ts.map +0 -1
  523. package/dist/server/provider-mcp.js.map +0 -1
  524. package/dist/server/rest-elysia.d.ts.map +0 -1
  525. package/dist/server/rest-elysia.js.map +0 -1
  526. package/dist/server/rest-express.d.ts.map +0 -1
  527. package/dist/server/rest-express.js.map +0 -1
  528. package/dist/server/rest-generic.d.ts.map +0 -1
  529. package/dist/server/rest-generic.js.map +0 -1
  530. package/dist/server/rest-next-app.d.ts.map +0 -1
  531. package/dist/server/rest-next-app.js.map +0 -1
  532. package/dist/server/rest-next-mcp.d.ts.map +0 -1
  533. package/dist/server/rest-next-mcp.js.map +0 -1
  534. package/dist/server/rest-next-pages.d.ts.map +0 -1
  535. package/dist/server/rest-next-pages.js.map +0 -1
  536. package/dist/spec.d.ts.map +0 -1
  537. package/dist/spec.js.map +0 -1
  538. package/dist/telemetry/anomaly.d.ts.map +0 -1
  539. package/dist/telemetry/anomaly.js.map +0 -1
  540. package/dist/telemetry/spec.d.ts.map +0 -1
  541. package/dist/telemetry/spec.js.map +0 -1
  542. package/dist/telemetry/tracker.d.ts.map +0 -1
  543. package/dist/telemetry/tracker.js.map +0 -1
  544. package/dist/tests/runner.d.ts.map +0 -1
  545. package/dist/tests/runner.js.map +0 -1
  546. package/dist/tests/spec.d.ts.map +0 -1
  547. package/dist/tests/spec.js.map +0 -1
  548. package/dist/themes.d.ts.map +0 -1
  549. package/dist/themes.js.map +0 -1
  550. package/dist/translations/catalog.d.ts.map +0 -1
  551. package/dist/translations/tenant.d.ts.map +0 -1
  552. package/dist/types.d.ts.map +0 -1
  553. package/dist/workflow/adapters/db-adapter.d.ts.map +0 -1
  554. package/dist/workflow/adapters/db-adapter.js.map +0 -1
  555. package/dist/workflow/adapters/file-adapter.d.ts.map +0 -1
  556. package/dist/workflow/adapters/file-adapter.js.map +0 -1
  557. package/dist/workflow/adapters/memory-store.d.ts.map +0 -1
  558. package/dist/workflow/adapters/memory-store.js.map +0 -1
  559. package/dist/workflow/expression.d.ts.map +0 -1
  560. package/dist/workflow/expression.js.map +0 -1
  561. package/dist/workflow/runner.d.ts.map +0 -1
  562. package/dist/workflow/runner.js.map +0 -1
  563. package/dist/workflow/sla-monitor.d.ts.map +0 -1
  564. package/dist/workflow/sla-monitor.js.map +0 -1
  565. package/dist/workflow/spec.d.ts.map +0 -1
  566. package/dist/workflow/spec.js.map +0 -1
  567. package/dist/workflow/state.d.ts.map +0 -1
  568. package/dist/workflow/validation.d.ts.map +0 -1
  569. package/dist/workflow/validation.js.map +0 -1
@@ -1,2 +1 @@
1
- function e(n,r){if(!n)return!0;let i=n.trim();if(!i)return!0;let a=o(i,`||`);if(a.length>1)return a.some(t=>e(t,r));let s=o(i,`&&`);return s.length>1?s.every(t=>e(t,r)):t(i,r)}function t(e,a){let o=e.trim();if(!o)return!0;if(o.startsWith(`!`))return!t(o.slice(1),a);let s=o.match(/^(data|input|output)\.([A-Za-z0-9_.\[\]]+)\s*(===|==|!==|!=|>=|<=|>|<)\s*(.+)$/);if(s){let[,e,t,o,c]=s;return n(i(e,a,t),r(c),o)}let c=o.match(/^(data|input|output)\.([A-Za-z0-9_.\[\]]+)$/);if(c){let[,e,t]=c;return!!i(e,a,t)}return!!r(o)}function n(e,t,n){switch(n){case`===`:case`==`:return e===t;case`!==`:case`!=`:return e!==t;case`>`:return Number(e)>Number(t);case`>=`:return Number(e)>=Number(t);case`<`:return Number(e)<Number(t);case`<=`:return Number(e)<=Number(t);default:return!1}}function r(e){let t=(e??``).trim();if(t.startsWith(`"`)&&t.endsWith(`"`)||t.startsWith(`'`)&&t.endsWith(`'`))return t.slice(1,-1);if(/^-?\d+(\.\d+)?$/.test(t))return Number(t);if(/^true$/i.test(t))return!0;if(/^false$/i.test(t))return!1;if(/^null$/i.test(t))return null;if(!/^undefined$/i.test(t))return t}function i(e,t,n){return a(e===`data`?t.data:e===`input`?t.input:t.output,n)}function a(e,t){if(e==null)return;if(!t)return e;let n=t.replace(/\[(\d+)\]/g,`.$1`).split(`.`).filter(Boolean),r=e;for(let e of n){if(r==null)return;r=r[e]}return r}function o(e,t){let n=[],r=``,i=!1,a=!1;for(let o=0;o<e.length;o++){let s=e[o],c=e.slice(o,o+t.length);if(s===`'`&&!a){i=!i,r+=s;continue}if(s===`"`&&!i){a=!a,r+=s;continue}if(!i&&!a&&c===t){n.push(r.trim()),r=``,o+=t.length-1;continue}r+=s}return r.trim().length&&n.push(r.trim()),n}export{e as evaluateExpression};
2
- //# sourceMappingURL=expression.js.map
1
+ function e(n,r){if(!n)return!0;let i=n.trim();if(!i)return!0;let a=o(i,`||`);if(a.length>1)return a.some(t=>e(t,r));let s=o(i,`&&`);return s.length>1?s.every(t=>e(t,r)):t(i,r)}function t(e,a){let o=e.trim();if(!o)return!0;if(o.startsWith(`!`))return!t(o.slice(1),a);let s=o.match(/^(data|input|output)\.([A-Za-z0-9_.\[\]]+)\s*(===|==|!==|!=|>=|<=|>|<)\s*(.+)$/);if(s){let[,e,t,o,c]=s;return n(i(e,a,t),r(c),o)}let c=o.match(/^(data|input|output)\.([A-Za-z0-9_.\[\]]+)$/);if(c){let[,e,t]=c;return!!i(e,a,t)}return!!r(o)}function n(e,t,n){switch(n){case`===`:case`==`:return e===t;case`!==`:case`!=`:return e!==t;case`>`:return Number(e)>Number(t);case`>=`:return Number(e)>=Number(t);case`<`:return Number(e)<Number(t);case`<=`:return Number(e)<=Number(t);default:return!1}}function r(e){let t=(e??``).trim();if(t.startsWith(`"`)&&t.endsWith(`"`)||t.startsWith(`'`)&&t.endsWith(`'`))return t.slice(1,-1);if(/^-?\d+(\.\d+)?$/.test(t))return Number(t);if(/^true$/i.test(t))return!0;if(/^false$/i.test(t))return!1;if(/^null$/i.test(t))return null;if(!/^undefined$/i.test(t))return t}function i(e,t,n){return a(e===`data`?t.data:e===`input`?t.input:t.output,n)}function a(e,t){if(e==null)return;if(!t)return e;let n=t.replace(/\[(\d+)\]/g,`.$1`).split(`.`).filter(Boolean),r=e;for(let e of n){if(r==null)return;r=r[e]}return r}function o(e,t){let n=[],r=``,i=!1,a=!1;for(let o=0;o<e.length;o++){let s=e[o],c=e.slice(o,o+t.length);if(s===`'`&&!a){i=!i,r+=s;continue}if(s===`"`&&!i){a=!a,r+=s;continue}if(!i&&!a&&c===t){n.push(r.trim()),r=``,o+=t.length-1;continue}r+=s}return r.trim().length&&n.push(r.trim()),n}export{e as evaluateExpression};
@@ -71,5 +71,4 @@ 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 };
75
- //# sourceMappingURL=runner.d.ts.map
74
+ export { GuardContext, GuardEvaluator, OperationExecutor, OperationExecutorContext, WorkflowPreFlightError, WorkflowPreFlightIssue, WorkflowPreFlightIssueSeverity, WorkflowPreFlightIssueType, WorkflowPreFlightResult, WorkflowRunner, WorkflowRunnerConfig };
@@ -1,2 +1 @@
1
- import{evaluateExpression as e}from"./expression.js";import{randomUUID as t}from"node:crypto";var n=class{constructor(e){this.config=e}async preFlightCheck(e,t,n){let r=this.getSpec(e,t);return this.performPreFlight(r,n)}async start(e,n,i){let a=this.getSpec(e,n),o=r(a),s=new Date,l=t(),u={workflowId:l,workflowName:a.meta.name,workflowVersion:a.meta.version,currentStep:o,data:{...i??{}},retryCounts:{},history:[],status:`running`,createdAt:s,updatedAt:s},d=this.config.appConfigProvider?await this.config.appConfigProvider(u):void 0,f=await this.performPreFlight(a,d);if(!f.canStart)throw new c(f.issues);return await this.config.stateStore.create(u),this.emit(`workflow.started`,{workflowId:l,workflowName:a.meta.name,workflowVersion:a.meta.version,currentStep:o}),l}async executeStep(e,t){let n=await this.getStateOrThrow(e);if(s(n.status))throw Error(`Workflow ${e} is in terminal status "${n.status}".`);let r=this.getSpec(n.workflowName,n.workflowVersion),c=i(r,n.currentStep);if(!await this.evaluateGuard(c,n,t))throw Error(`GuardRejected: ${n.workflowName} -> ${c.id}`);let l={stepId:c.id,startedAt:new Date,status:`running`,input:t},u={...n,data:{...n.data},history:[...n.history]};try{let i=await this.runStepAction(c,u,t);l.output=i,l.status=`completed`,l.completedAt=new Date,u.history.push(l),u.updatedAt=new Date,o(t)&&(u.data={...u.data,...t}),o(i)&&(u.data={...u.data,...i});let s=this.pickNextStepId(r,u,c,t,i);if(s)u.currentStep=s,u.status=`running`;else if(!a(r,c.id))u.status=`completed`;else throw Error(`No transition matched after executing step "${c.id}".`);await this.config.stateStore.update(e,()=>u),this.emit(`workflow.step_completed`,{workflowId:e,workflowName:n.workflowName,stepId:c.id,status:u.status})}catch(i){if(l.status=`failed`,l.completedAt=new Date,l.error=i instanceof Error?i.message:String(i),u.history.push(l),u.updatedAt=new Date,c.retry){let r=n.retryCounts?.[c.id]??0;if(r<c.retry.maxAttempts){let i=c.retry.backoff??`exponential`,a=c.retry.delayMs??1e3,o=i===`exponential`?a*2**r:a,s=Math.min(o,c.retry.maxDelayMs??1/0);return u.retryCounts={...n.retryCounts??{},[c.id]:r+1},u.status=`running`,await this.config.stateStore.update(e,()=>u),this.emit(`workflow.step_retrying`,{workflowId:e,workflowName:n.workflowName,stepId:c.id,attempt:r+1,delay:s,error:l.error}),await new Promise(e=>setTimeout(e,s)),this.executeStep(e,t)}}throw u.status=`failed`,await this.config.stateStore.update(e,()=>u),this.emit(`workflow.step_failed`,{workflowId:e,workflowName:n.workflowName,stepId:c.id,error:l.error??`unknown`}),r.definition.compensation?.trigger===`on_failure`&&await this.rollback(e),i}}async rollback(e){let t=await this.getStateOrThrow(e),n=this.getSpec(t.workflowName,t.workflowVersion);if(!n.definition.compensation)return;this.emit(`workflow.rollback_started`,{workflowId:e});let r=t.history.filter(e=>e.status===`completed`).reverse();for(let a of r){let r=n.definition.compensation.steps.find(e=>e.stepId===a.stepId);if(r){let o={stepId:a.stepId,originalInput:a.input,originalOutput:a.output,workflowData:t.data};try{let s=i(n,a.stepId),c=this.config.appConfigProvider?await this.config.appConfigProvider(t):void 0,l={workflow:t,step:s,resolvedAppConfig:c,integrations:c?.integrations??[],knowledge:c?.knowledge??[],branding:c?.branding,translation:c?.translation,translationResolver:this.config.translationResolver,secretProvider:this.config.secretProvider};await this.config.opExecutor(r.operation,o,l),this.emit(`workflow.compensation_step_completed`,{workflowId:e,stepId:a.stepId,compensationOp:r.operation.name})}catch(t){let n=t instanceof Error?t.message:String(t);this.emit(`workflow.compensation_step_failed`,{workflowId:e,stepId:a.stepId,compensationOp:r.operation.name,error:n})}}}this.emit(`workflow.rollback_completed`,{workflowId:e})}async getState(e){return this.getStateOrThrow(e)}async cancel(e){let t=await this.getStateOrThrow(e);if(t.status===`cancelled`)return;let n={...t,status:`cancelled`,updatedAt:new Date};await this.config.stateStore.update(e,()=>n),this.emit(`workflow.cancelled`,{workflowId:e,workflowName:t.workflowName})}async performPreFlight(e,t){if(!t)return{canStart:!0,issues:[]};let n=[],r=new Map;for(let e of t.integrations)r.set(e.slot.slotId,e);for(let t of e.definition.steps)for(let e of t.requiredIntegrations??[]){let i=r.get(e);if(!i){n.push({stepId:t.id,type:`integration`,identifier:e,severity:`error`,reason:`Integration slot "${e}" is not bound in the resolved app config.`});continue}let a=i.connection.status;a===`disconnected`||a===`error`?n.push({stepId:t.id,type:`integration`,identifier:e,severity:`error`,reason:`Integration slot "${e}" is in status "${a}".`}):a===`unknown`&&n.push({stepId:t.id,type:`integration`,identifier:e,severity:`warning`,reason:`Integration slot "${e}" reports unknown health status.`})}let i=new Set(t.capabilities.enabled.map(l));for(let t of e.definition.steps)for(let e of t.requiredCapabilities??[])i.has(l(e))||n.push({stepId:t.id,type:`capability`,identifier:l(e),severity:`error`,reason:`Capability "${e.key}@${e.version}" is not enabled.`});return{canStart:n.every(e=>e.severity!==`error`),issues:n}}async evaluateGuard(t,n,r){return t.guard?this.config.guardEvaluator?this.config.guardEvaluator(t.guard,{workflow:n,step:t,input:r}):t.guard.type===`expression`?e(t.guard.value,{data:n.data,input:r}):!0:!0}async runStepAction(e,t,n){if(e.type===`automation`){let r=e.action?.operation;if(!r)throw Error(`Automation step "${e.id}" requires an operation.`);let i=this.config.appConfigProvider?await this.config.appConfigProvider(t):void 0,a={workflow:t,step:e,resolvedAppConfig:i,integrations:i?.integrations??[],knowledge:i?.knowledge??[],branding:i?.branding,translation:i?.translation,translationResolver:this.config.translationResolver,secretProvider:this.config.secretProvider};return this.config.enforceCapabilities&&await this.config.enforceCapabilities(r,a),this.config.opExecutor(r,n,a)}return e.type,n}pickNextStepId(t,n,r,i,a){let o=t.definition.transitions.filter(e=>e.from===r.id);for(let r of o)if(e(r.condition,{data:n.data,input:i,output:a})){let e=t.definition.steps.find(e=>e.id===r.to);if(!e)throw Error(`Transition ${r.from} -> ${r.to} points to missing step.`);return e.id}return null}getSpec(e,t){let n=this.config.registry.get(e,t);if(!n)throw Error(`Workflow spec not found for ${e}${t?`.v${t}`:``}`);return n}async getStateOrThrow(e){let t=await this.config.stateStore.get(e);if(!t)throw Error(`Workflow state not found for ${e}`);return t}emit(e,t){this.config.eventEmitter?.(e,t)}};function r(e){let t=e.definition.entryStepId??e.definition.steps[0]?.id??null;if(!t)throw Error(`Workflow ${e.meta.name}.v${e.meta.version} has no entry step.`);return t}function i(e,t){let n=e.definition.steps.find(e=>e.id===t);if(!n)throw Error(`Step "${t}" not found in workflow ${e.meta.name}.v${e.meta.version}.`);return n}function a(e,t){return e.definition.transitions.some(e=>e.from===t)}function o(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function s(e){return e===`completed`||e===`failed`||e===`cancelled`}var c=class extends Error{constructor(e){super(`Workflow pre-flight failed: ${e.filter(e=>e.severity===`error`).map(e=>`${e.type}:${e.identifier}`).join(`, `)}`),this.issues=e,this.name=`WorkflowPreFlightError`}};function l(e){return`${e.key}@${e.version}`}export{c as WorkflowPreFlightError,n as WorkflowRunner};
2
- //# sourceMappingURL=runner.js.map
1
+ import{evaluateExpression as e}from"./expression.js";import{randomUUID as t}from"node:crypto";var n=class{constructor(e){this.config=e}async preFlightCheck(e,t,n){let r=this.getSpec(e,t);return this.performPreFlight(r,n)}async start(e,n,i){let a=this.getSpec(e,n),o=r(a),s=new Date,l=t(),u={workflowId:l,workflowName:a.meta.name,workflowVersion:a.meta.version,currentStep:o,data:{...i??{}},retryCounts:{},history:[],status:`running`,createdAt:s,updatedAt:s},d=this.config.appConfigProvider?await this.config.appConfigProvider(u):void 0,f=await this.performPreFlight(a,d);if(!f.canStart)throw new c(f.issues);return await this.config.stateStore.create(u),this.emit(`workflow.started`,{workflowId:l,workflowName:a.meta.name,workflowVersion:a.meta.version,currentStep:o}),l}async executeStep(e,t){let n=await this.getStateOrThrow(e);if(s(n.status))throw Error(`Workflow ${e} is in terminal status "${n.status}".`);let r=this.getSpec(n.workflowName,n.workflowVersion),c=i(r,n.currentStep);if(!await this.evaluateGuard(c,n,t))throw Error(`GuardRejected: ${n.workflowName} -> ${c.id}`);let l={stepId:c.id,startedAt:new Date,status:`running`,input:t},u={...n,data:{...n.data},history:[...n.history]};try{let i=await this.runStepAction(c,u,t);l.output=i,l.status=`completed`,l.completedAt=new Date,u.history.push(l),u.updatedAt=new Date,o(t)&&(u.data={...u.data,...t}),o(i)&&(u.data={...u.data,...i});let s=this.pickNextStepId(r,u,c,t,i);if(s)u.currentStep=s,u.status=`running`;else if(!a(r,c.id))u.status=`completed`;else throw Error(`No transition matched after executing step "${c.id}".`);await this.config.stateStore.update(e,()=>u),this.emit(`workflow.step_completed`,{workflowId:e,workflowName:n.workflowName,stepId:c.id,status:u.status})}catch(i){if(l.status=`failed`,l.completedAt=new Date,l.error=i instanceof Error?i.message:String(i),u.history.push(l),u.updatedAt=new Date,c.retry){let r=n.retryCounts?.[c.id]??0;if(r<c.retry.maxAttempts){let i=c.retry.backoff??`exponential`,a=c.retry.delayMs??1e3,o=i===`exponential`?a*2**r:a,s=Math.min(o,c.retry.maxDelayMs??1/0);return u.retryCounts={...n.retryCounts??{},[c.id]:r+1},u.status=`running`,await this.config.stateStore.update(e,()=>u),this.emit(`workflow.step_retrying`,{workflowId:e,workflowName:n.workflowName,stepId:c.id,attempt:r+1,delay:s,error:l.error}),await new Promise(e=>setTimeout(e,s)),this.executeStep(e,t)}}throw u.status=`failed`,await this.config.stateStore.update(e,()=>u),this.emit(`workflow.step_failed`,{workflowId:e,workflowName:n.workflowName,stepId:c.id,error:l.error??`unknown`}),r.definition.compensation?.trigger===`on_failure`&&await this.rollback(e),i}}async rollback(e){let t=await this.getStateOrThrow(e),n=this.getSpec(t.workflowName,t.workflowVersion);if(!n.definition.compensation)return;this.emit(`workflow.rollback_started`,{workflowId:e});let r=t.history.filter(e=>e.status===`completed`).reverse();for(let a of r){let r=n.definition.compensation.steps.find(e=>e.stepId===a.stepId);if(r){let o={stepId:a.stepId,originalInput:a.input,originalOutput:a.output,workflowData:t.data};try{let s=i(n,a.stepId),c=this.config.appConfigProvider?await this.config.appConfigProvider(t):void 0,l={workflow:t,step:s,resolvedAppConfig:c,integrations:c?.integrations??[],knowledge:c?.knowledge??[],branding:c?.branding,translation:c?.translation,translationResolver:this.config.translationResolver,secretProvider:this.config.secretProvider};await this.config.opExecutor(r.operation,o,l),this.emit(`workflow.compensation_step_completed`,{workflowId:e,stepId:a.stepId,compensationOp:r.operation.name})}catch(t){let n=t instanceof Error?t.message:String(t);this.emit(`workflow.compensation_step_failed`,{workflowId:e,stepId:a.stepId,compensationOp:r.operation.name,error:n})}}}this.emit(`workflow.rollback_completed`,{workflowId:e})}async getState(e){return this.getStateOrThrow(e)}async cancel(e){let t=await this.getStateOrThrow(e);if(t.status===`cancelled`)return;let n={...t,status:`cancelled`,updatedAt:new Date};await this.config.stateStore.update(e,()=>n),this.emit(`workflow.cancelled`,{workflowId:e,workflowName:t.workflowName})}async performPreFlight(e,t){if(!t)return{canStart:!0,issues:[]};let n=[],r=new Map;for(let e of t.integrations)r.set(e.slot.slotId,e);for(let t of e.definition.steps)for(let e of t.requiredIntegrations??[]){let i=r.get(e);if(!i){n.push({stepId:t.id,type:`integration`,identifier:e,severity:`error`,reason:`Integration slot "${e}" is not bound in the resolved app config.`});continue}let a=i.connection.status;a===`disconnected`||a===`error`?n.push({stepId:t.id,type:`integration`,identifier:e,severity:`error`,reason:`Integration slot "${e}" is in status "${a}".`}):a===`unknown`&&n.push({stepId:t.id,type:`integration`,identifier:e,severity:`warning`,reason:`Integration slot "${e}" reports unknown health status.`})}let i=new Set(t.capabilities.enabled.map(l));for(let t of e.definition.steps)for(let e of t.requiredCapabilities??[])i.has(l(e))||n.push({stepId:t.id,type:`capability`,identifier:l(e),severity:`error`,reason:`Capability "${e.key}@${e.version}" is not enabled.`});return{canStart:n.every(e=>e.severity!==`error`),issues:n}}async evaluateGuard(t,n,r){return t.guard?this.config.guardEvaluator?this.config.guardEvaluator(t.guard,{workflow:n,step:t,input:r}):t.guard.type===`expression`?e(t.guard.value,{data:n.data,input:r}):!0:!0}async runStepAction(e,t,n){if(e.type===`automation`){let r=e.action?.operation;if(!r)throw Error(`Automation step "${e.id}" requires an operation.`);let i=this.config.appConfigProvider?await this.config.appConfigProvider(t):void 0,a={workflow:t,step:e,resolvedAppConfig:i,integrations:i?.integrations??[],knowledge:i?.knowledge??[],branding:i?.branding,translation:i?.translation,translationResolver:this.config.translationResolver,secretProvider:this.config.secretProvider};return this.config.enforceCapabilities&&await this.config.enforceCapabilities(r,a),this.config.opExecutor(r,n,a)}return e.type,n}pickNextStepId(t,n,r,i,a){let o=t.definition.transitions.filter(e=>e.from===r.id);for(let r of o)if(e(r.condition,{data:n.data,input:i,output:a})){let e=t.definition.steps.find(e=>e.id===r.to);if(!e)throw Error(`Transition ${r.from} -> ${r.to} points to missing step.`);return e.id}return null}getSpec(e,t){let n=this.config.registry.get(e,t);if(!n)throw Error(`Workflow spec not found for ${e}${t?`.v${t}`:``}`);return n}async getStateOrThrow(e){let t=await this.config.stateStore.get(e);if(!t)throw Error(`Workflow state not found for ${e}`);return t}emit(e,t){this.config.eventEmitter?.(e,t)}};function r(e){let t=e.definition.entryStepId??e.definition.steps[0]?.id??null;if(!t)throw Error(`Workflow ${e.meta.name}.v${e.meta.version} has no entry step.`);return t}function i(e,t){let n=e.definition.steps.find(e=>e.id===t);if(!n)throw Error(`Step "${t}" not found in workflow ${e.meta.name}.v${e.meta.version}.`);return n}function a(e,t){return e.definition.transitions.some(e=>e.from===t)}function o(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function s(e){return e===`completed`||e===`failed`||e===`cancelled`}var c=class extends Error{constructor(e){super(`Workflow pre-flight failed: ${e.filter(e=>e.severity===`error`).map(e=>`${e.type}:${e.identifier}`).join(`, `)}`),this.issues=e,this.name=`WorkflowPreFlightError`}};function l(e){return`${e.key}@${e.version}`}export{c as WorkflowPreFlightError,n as WorkflowRunner};
@@ -17,5 +17,4 @@ declare class SLAMonitor {
17
17
  check(state: WorkflowState, spec: WorkflowSpec): void;
18
18
  }
19
19
  //#endregion
20
- export { SLABreachEvent, SLAMonitor };
21
- //# sourceMappingURL=sla-monitor.d.ts.map
20
+ export { SLABreachEvent, SLAMonitor };
@@ -1,2 +1 @@
1
- var e=class{constructor(e){this.eventEmitter=e}check(e,t){let n=t.definition.sla;if(!n)return;let r=new Date().getTime();if(n.totalDurationMs){let t=r-e.createdAt.getTime();t>n.totalDurationMs&&(e.status===`running`||e.status===`paused`)&&this.eventEmitter(`workflow.sla_breach`,{workflowId:e.workflowId,workflowName:e.workflowName,type:`workflow_duration`,expectedMs:n.totalDurationMs,actualMs:t,breachedAt:new Date})}if(n.stepDurationMs&&e.status===`running`&&e.currentStep){let t=e.history.find(t=>t.stepId===e.currentStep&&t.status===`running`);if(t){let i=n.stepDurationMs[e.currentStep];if(i){let n=r-t.startedAt.getTime();n>i&&this.eventEmitter(`workflow.sla_breach`,{workflowId:e.workflowId,workflowName:e.workflowName,type:`step_duration`,stepId:e.currentStep,expectedMs:i,actualMs:n,breachedAt:new Date})}}}}};export{e as SLAMonitor};
2
- //# sourceMappingURL=sla-monitor.js.map
1
+ var e=class{constructor(e){this.eventEmitter=e}check(e,t){let n=t.definition.sla;if(!n)return;let r=new Date().getTime();if(n.totalDurationMs){let t=r-e.createdAt.getTime();t>n.totalDurationMs&&(e.status===`running`||e.status===`paused`)&&this.eventEmitter(`workflow.sla_breach`,{workflowId:e.workflowId,workflowName:e.workflowName,type:`workflow_duration`,expectedMs:n.totalDurationMs,actualMs:t,breachedAt:new Date})}if(n.stepDurationMs&&e.status===`running`&&e.currentStep){let t=e.history.find(t=>t.stepId===e.currentStep&&t.status===`running`);if(t){let i=n.stepDurationMs[e.currentStep];if(i){let n=r-t.startedAt.getTime();n>i&&this.eventEmitter(`workflow.sla_breach`,{workflowId:e.workflowId,workflowName:e.workflowName,type:`step_duration`,stepId:e.currentStep,expectedMs:i,actualMs:n,breachedAt:new Date})}}}}};export{e as SLAMonitor};
@@ -96,5 +96,4 @@ 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 };
100
- //# sourceMappingURL=spec.d.ts.map
99
+ export { CompensationStep, CompensationStrategy, FormRef, GuardCondition, GuardConditionKind, RetryPolicy, SLA, Step, StepAction, StepType, Transition, WorkflowDefinition, WorkflowMeta, WorkflowRegistry, WorkflowSpec, WorkflowStatus };
@@ -1,2 +1 @@
1
- function e(e){return`${e.name}.v${e.version}`}var t=class{items=new Map;register(t){let n=e(t.meta);if(this.items.has(n))throw Error(`Duplicate workflow ${n}`);return this.items.set(n,t),this}list(){return[...this.items.values()]}get(e,t){if(t!=null)return this.items.get(`${e}.v${t}`);let n,r=-1/0;for(let t of this.items.values())t.meta.name===e&&t.meta.version>r&&(r=t.meta.version,n=t);return n}};export{t as WorkflowRegistry};
2
- //# sourceMappingURL=spec.js.map
1
+ function e(e){return`${e.name}.v${e.version}`}var t=class{items=new Map;register(t){let n=e(t.meta);if(this.items.has(n))throw Error(`Duplicate workflow ${n}`);return this.items.set(n,t),this}list(){return[...this.items.values()]}get(e,t){if(t!=null)return this.items.get(`${e}.v${t}`);let n,r=-1/0;for(let t of this.items.values())t.meta.name===e&&t.meta.version>r&&(r=t.meta.version,n=t);return n}};export{t as WorkflowRegistry};
@@ -32,5 +32,4 @@ interface StateStore {
32
32
  list(filters?: WorkflowStateFilters): Promise<WorkflowState[]>;
33
33
  }
34
34
  //#endregion
35
- export { StateStore, StepExecution, WorkflowState, WorkflowStateFilters };
36
- //# sourceMappingURL=state.d.ts.map
35
+ export { StateStore, StepExecution, WorkflowState, WorkflowStateFilters };
@@ -25,5 +25,4 @@ declare class WorkflowValidationError extends Error {
25
25
  declare function validateWorkflowSpec(spec: WorkflowSpec, options?: ValidateWorkflowSpecOptions): WorkflowValidationIssue[];
26
26
  declare function assertWorkflowSpecValid(spec: WorkflowSpec, options?: ValidateWorkflowSpecOptions): void;
27
27
  //#endregion
28
- export { ValidateWorkflowSpecOptions, WorkflowValidationError, WorkflowValidationIssue, WorkflowValidationLevel, assertWorkflowSpecValid, validateWorkflowSpec };
29
- //# sourceMappingURL=validation.d.ts.map
28
+ export { ValidateWorkflowSpecOptions, WorkflowValidationError, WorkflowValidationIssue, WorkflowValidationLevel, assertWorkflowSpecValid, validateWorkflowSpec };
@@ -1,2 +1 @@
1
- var e=class extends Error{constructor(e,t){super(e),this.issues=t,this.name=`WorkflowValidationError`}};function t(e,t={}){let n=[],{definition:a}=e;if(!a.steps.length)return n.push({level:`error`,message:`Workflow must declare at least one step.`}),n;let l=r(a,n),u=a.entryStepId??a.steps[0]?.id??null;u?l.has(u)||n.push({level:`error`,message:`Entry step "${u}" is not defined in steps.`}):n.push({level:`error`,message:`Workflow requires an entry step (definition.entryStepId).`});let d=i(a,l,n);return o(a.steps,t,n),s(u,l,d,n),c(d,n),n}function n(n,r={}){let i=t(n,r);if(i.filter(e=>e.level===`error`).length)throw new e(`Workflow ${n.meta.name}.v${n.meta.version} is invalid`,i)}function r(e,t){let n=new Map;for(let r of e.steps){if(n.has(r.id)){t.push({level:`error`,message:`Duplicate step id "${r.id}" detected.`});continue}n.set(r.id,r),r.type===`automation`&&!r.action?.operation&&t.push({level:`warning`,message:`Automation step "${r.id}" does not declare an operation.`}),r.type===`human`&&!r.action?.form&&t.push({level:`warning`,message:`Human step "${r.id}" does not declare a form.`}),r.guard&&!r.guard.value.trim()&&t.push({level:`error`,message:`Guard for step "${r.id}" must have a non-empty value.`})}return n}function i(e,t,n){let r=new Map,i=new Map;for(let e of t.keys())r.set(e,new Set),i.set(e,0);for(let o of e.transitions){let e=t.get(o.from),s=t.get(o.to);if(!e){n.push({level:`error`,message:`Transition refers to unknown "from" step "${o.from}".`});continue}if(!s){n.push({level:`error`,message:`Transition refers to unknown "to" step "${o.to}".`});continue}r.get(o.from)?.add(o.to),i.set(o.to,(i.get(o.to)??0)+1),a(o,n)}let o=[...i.entries()].filter(([,e])=>e===0).map(([e])=>e);return o.length>1&&n.push({level:`warning`,message:`Workflow has multiple potential entry steps: ${o.join(`, `)}`}),r}function a(e,t){e.condition&&!e.condition.trim()&&t.push({level:`error`,message:`Transition ${e.from} -> ${e.to} declares an empty condition.`})}function o(e,t,n){for(let r of e){let e=r.action;e&&(e.operation&&t.operations&&(t.operations.getSpec(e.operation.name,e.operation.version)||n.push({level:`error`,message:`Step "${r.id}" references unknown operation ${e.operation.name}.v${e.operation.version}.`})),e.form&&t.forms&&(t.forms.get(e.form.key,e.form.version)||n.push({level:`error`,message:`Step "${r.id}" references unknown form ${e.form.key}.v${e.form.version}.`})))}}function s(e,t,n,r){if(!e||!t.has(e))return;let i=new Set,a=[e];for(i.add(e);a.length;){let e=a.shift(),t=n.get(e);if(t)for(let e of t)i.has(e)||(i.add(e),a.push(e))}for(let n of t.keys())i.has(n)||r.push({level:`error`,message:`Step "${n}" is unreachable from entry step "${e}".`})}function c(e,t){let n=new Set,r=new Set,i=!1,a=o=>{if(r.has(o)){i||=(t.push({level:`error`,message:`Workflow contains a cycle involving step "${o}".`}),!0);return}if(n.has(o))return;r.add(o);let s=e.get(o);if(s)for(let e of s)a(e);r.delete(o),n.add(o)};for(let t of e.keys())a(t)}export{e as WorkflowValidationError,n as assertWorkflowSpecValid,t as validateWorkflowSpec};
2
- //# sourceMappingURL=validation.js.map
1
+ var e=class extends Error{constructor(e,t){super(e),this.issues=t,this.name=`WorkflowValidationError`}};function t(e,t={}){let n=[],{definition:a}=e;if(!a.steps.length)return n.push({level:`error`,message:`Workflow must declare at least one step.`}),n;let l=r(a,n),u=a.entryStepId??a.steps[0]?.id??null;u?l.has(u)||n.push({level:`error`,message:`Entry step "${u}" is not defined in steps.`}):n.push({level:`error`,message:`Workflow requires an entry step (definition.entryStepId).`});let d=i(a,l,n);return o(a.steps,t,n),s(u,l,d,n),c(d,n),n}function n(n,r={}){let i=t(n,r);if(i.filter(e=>e.level===`error`).length)throw new e(`Workflow ${n.meta.name}.v${n.meta.version} is invalid`,i)}function r(e,t){let n=new Map;for(let r of e.steps){if(n.has(r.id)){t.push({level:`error`,message:`Duplicate step id "${r.id}" detected.`});continue}n.set(r.id,r),r.type===`automation`&&!r.action?.operation&&t.push({level:`warning`,message:`Automation step "${r.id}" does not declare an operation.`}),r.type===`human`&&!r.action?.form&&t.push({level:`warning`,message:`Human step "${r.id}" does not declare a form.`}),r.guard&&!r.guard.value.trim()&&t.push({level:`error`,message:`Guard for step "${r.id}" must have a non-empty value.`})}return n}function i(e,t,n){let r=new Map,i=new Map;for(let e of t.keys())r.set(e,new Set),i.set(e,0);for(let o of e.transitions){let e=t.get(o.from),s=t.get(o.to);if(!e){n.push({level:`error`,message:`Transition refers to unknown "from" step "${o.from}".`});continue}if(!s){n.push({level:`error`,message:`Transition refers to unknown "to" step "${o.to}".`});continue}r.get(o.from)?.add(o.to),i.set(o.to,(i.get(o.to)??0)+1),a(o,n)}let o=[...i.entries()].filter(([,e])=>e===0).map(([e])=>e);return o.length>1&&n.push({level:`warning`,message:`Workflow has multiple potential entry steps: ${o.join(`, `)}`}),r}function a(e,t){e.condition&&!e.condition.trim()&&t.push({level:`error`,message:`Transition ${e.from} -> ${e.to} declares an empty condition.`})}function o(e,t,n){for(let r of e){let e=r.action;e&&(e.operation&&t.operations&&(t.operations.getSpec(e.operation.name,e.operation.version)||n.push({level:`error`,message:`Step "${r.id}" references unknown operation ${e.operation.name}.v${e.operation.version}.`})),e.form&&t.forms&&(t.forms.get(e.form.key,e.form.version)||n.push({level:`error`,message:`Step "${r.id}" references unknown form ${e.form.key}.v${e.form.version}.`})))}}function s(e,t,n,r){if(!e||!t.has(e))return;let i=new Set,a=[e];for(i.add(e);a.length;){let e=a.shift(),t=n.get(e);if(t)for(let e of t)i.has(e)||(i.add(e),a.push(e))}for(let n of t.keys())i.has(n)||r.push({level:`error`,message:`Step "${n}" is unreachable from entry step "${e}".`})}function c(e,t){let n=new Set,r=new Set,i=!1,a=o=>{if(r.has(o)){i||=(t.push({level:`error`,message:`Workflow contains a cycle involving step "${o}".`}),!0);return}if(n.has(o))return;r.add(o);let s=e.get(o);if(s)for(let e of s)a(e);r.delete(o),n.add(o)};for(let t of e.keys())a(t)}export{e as WorkflowValidationError,n as assertWorkflowSpecValid,t as validateWorkflowSpec};
package/package.json CHANGED
@@ -1,7 +1,8 @@
1
1
  {
2
2
  "name": "@lssm/lib.contracts",
3
- "version": "0.0.0-canary-20251120170226",
3
+ "version": "0.0.0-canary-20251206160926",
4
4
  "scripts": {
5
+ "publish:pkg": "bun publish --tolerate-republish --ignore-scripts --verbose",
5
6
  "build": "bun build:bundle && bun build:types",
6
7
  "build:bundle": "tsdown",
7
8
  "build:types": "tsc --noEmit",
@@ -10,43 +11,45 @@
10
11
  "lint": "bun lint:fix",
11
12
  "lint:fix": "eslint src --fix",
12
13
  "lint:check": "eslint src",
13
- "test": "vitest run"
14
+ "test": "bun run"
14
15
  },
15
16
  "devDependencies": {
16
- "@lssm/tool.tsdown": "0.0.0-canary-20251120170226",
17
- "@lssm/tool.typescript": "0.0.0-canary-20251120170226",
17
+ "@lssm/tool.tsdown": "workspace:*",
18
+ "@lssm/tool.typescript": "workspace:*",
18
19
  "@types/express": "^5.0.3",
19
- "tsdown": "^0.15.9",
20
- "typescript": "^5.9.3",
21
- "vitest": "^1.6.0"
20
+ "@types/turndown": "^5.0.6",
21
+ "tsdown": "^0.17.0",
22
+ "typescript": "^5.9.3"
22
23
  },
23
24
  "dependencies": {
25
+ "@elevenlabs/elevenlabs-js": "^2.26.0",
24
26
  "@google-cloud/secret-manager": "^6.1.1",
27
+ "@google-cloud/storage": "^7.18.0",
28
+ "@lssm/lib.graphql-federation": "workspace:*",
29
+ "@lssm/lib.schema": "workspace:*",
25
30
  "@mistralai/mistralai": "^1.2.3",
26
- "@qdrant/js-client-rest": "^1.11.0",
27
- "googleapis": "^166.0.0",
28
- "@elevenlabs/elevenlabs-js": "^2.24.0",
29
- "@google-cloud/storage": "^7.8.0",
30
- "stripe": "^19.1.0",
31
+ "@modelcontextprotocol/sdk": "^1.24.3",
32
+ "@qdrant/js-client-rest": "^1.16.2",
33
+ "googleapis": "^167.0.0",
34
+ "mcp-handler": "^1.0.4",
31
35
  "postmark": "^4.0.4",
32
- "twilio": "^5.10.5",
33
- "@lssm/lib.schema": "0.0.0-canary-20251120170226",
34
- "@modelcontextprotocol/sdk": "^1.20.1",
35
- "mcp-handler": "^1.0.2",
36
- "zod": "^4.1.5"
36
+ "stripe": "^19.1.0",
37
+ "turndown": "^7.2.2",
38
+ "twilio": "^5.10.7",
39
+ "zod": "^4.1.13"
37
40
  },
38
41
  "peerDependencies": {
39
42
  "@pothos/core": "^4.9.1",
40
43
  "@pothos/plugin-relay": "^4.4.3",
41
- "elysia": "^1.4.11",
42
- "express": "^5.1.0",
44
+ "elysia": "^1.4.18",
45
+ "express": "^5.2.1",
43
46
  "graphql-scalars": "^1.24.2",
44
- "next": "15.5.6",
45
- "@blocknote/core": "^0.41.1",
46
- "@blocknote/react": "^0.41.1",
47
- "react": "^19.1.0",
48
- "react-dom": "^19.1.0",
49
- "react-hook-form": "^7.66.0",
47
+ "next": "16.0.7",
48
+ "@blocknote/core": "^0.44.0",
49
+ "@blocknote/react": "^0.44.0",
50
+ "react": "^19.2.1",
51
+ "react-dom": "^19.2.1",
52
+ "react-hook-form": "^7.68.0",
50
53
  "@hookform/resolvers": "^5.2.2"
51
54
  },
52
55
  "type": "module",
@@ -84,6 +87,7 @@
84
87
  "./events": "./dist/events.js",
85
88
  "./experiments/evaluator": "./dist/experiments/evaluator.js",
86
89
  "./experiments/spec": "./dist/experiments/spec.js",
90
+ "./experiments/spec-resolver": "./dist/experiments/spec-resolver.js",
87
91
  "./features": "./dist/features.js",
88
92
  "./forms": "./dist/forms.js",
89
93
  "./install": "./dist/install.js",
@@ -193,6 +197,7 @@
193
197
  "./regenerator/utils": "./dist/regenerator/utils.js",
194
198
  "./registry": "./dist/registry.js",
195
199
  "./resources": "./dist/resources.js",
200
+ "./schema-to-markdown": "./dist/schema-to-markdown.js",
196
201
  "./server": "./dist/server/index.js",
197
202
  "./server/graphql-pothos": "./dist/server/graphql-pothos.js",
198
203
  "./server/graphql-schema-export": "./dist/server/graphql-schema-export.js",
@@ -230,6 +235,7 @@
230
235
  "./*": "./*"
231
236
  },
232
237
  "publishConfig": {
238
+ "access": "public",
233
239
  "exports": {
234
240
  ".": "./dist/index.js",
235
241
  "./app-config": "./dist/app-config/index.js",
@@ -1 +0,0 @@
1
- {"version":3,"file":"branding.d.ts","names":[],"sources":["../../src/app-config/branding.ts"],"sourcesContent":[],"mappings":";UAAiB,gBAAA;EAAA,IAAA,EAAA,MAAA,GAAA,WAAgB,GAAA,SAAA,GAAA,UAAA;EAMhB,GAAA,CAAA,EAAA,MAAA;EASA,UAAA,CAAA,EAAA;IAUA,KAAA,EAAA,MAAA;IAWA,MAAA,EAAA,MAAA;;;UA9BA,gBAAA;;WAEN;;;;;;UAOM,mBAAA;;;;;;;;;;;;UAUA,oBAAA;YACL;WACD;;;;;;;;UASM,gBAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"contracts.d.ts","names":[],"sources":["../../src/app-config/contracts.ts"],"sourcesContent":[],"mappings":";;;;;;cAgIa,6BAA2B,aAAA;;UAoBtC,mBAAA,CAAA;IApBW,UAAA,EAAA,KAAA;EAoBX,CAAA;;;;;;;;;;;;;;;MApBsC,IAAA,EAAA;QAAA,IAAA,+BAAA,CAAA,MAAA,EAAA,MAAA,CAAA;;;;QAAA,IAAA,+BAAA,CAAA,MAAA,EAAA,MAAA,CAAA;QAAA,UAAA,EAAA,KAAA;MAsB3B,CAAA;MAoBX,QAAA,EAAA;;;MApBoC,CAAA;IAAA,CAAA,CAAA;;;EAAA,CAAA;EAAA,MAAA,EAAA;IAsBzB,IAAA,+BAoBX,OAAA,CAAA,MAAA,EAAA,OAAA,CAAA,QAAA,CAAA,MAAA,EAAA,OAAA,CAAA,CAAA;IAAA,UAAA,EAAA,IAAA;;;;;;;;;;;EApBmD,OAAA,EAAA;IAAA,IAAA,EA5Cb,mBAAA,CAAA,SA4Ca,CAAA,OAAA,EAAA,OAAA,CAAA;;;;IAAA,IAAA,+BAAA,KAAA,EAAA,MAAA,CAAA;IAAA,UAAA,EAAA,KAAA;EAsBxC,CAAA;CAoBX,CAAA,EAAA,SAAA,CAAA;cAhEW,2BAAyB,aAAA;;UAoBpC,mBAAA,CAAA;;;;;;EAwBkD,CAAA;EAAA,MAAA,EAAA;;;;CAAA,CAAA,aAAA,CAAA;EAAA,MAAA,EAAA;IAsBvC,IAAA,EAlEyB,mBAAA,CAAA,SAkGpC,CAAA,MAAA,EAAA,MAAA,CAAA;IAAA,UAAA,EAAA,KAAA;;;IAhCmC,IAAA,+BAAA,CAAA,MAAA,EAAA,MAAA,CAAA;;;;cA5CxB,0CAAwC,aAAA;EA4ChB,aAAA,EAAA;IAAA,IAAA,EAxBnC,mBAAA,CAAA,SAwBmC,CAAA,MAAA,EAAA,MAAA,CAAA;IAkCxB,UAAA,EAAA,KAAA;EAqBX,CAAA;;;;EArB8B,CAAA;EAAA,WAAA,EAAA;;;EAAA,CAAA;EAAA,cAAA,EAAA;IAuBnB,IAAA,+BAAmC,CAAA,MAAf,EAAM,MAAA,CAAA;IASvB,UAAA,EAAA,KAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UA9GqC,mBAAA,CAAA;;;;;;;;cAsBxC,yCAAuC,aAAA;;UAoBlD,mBAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UApBkD,mBAAA,CAAA;;;;;;;;cAsBvC,0BAAwB,aAAA;;UAgCnC,mBAAA,CAAA;;;;;;;;;;;;;;;;;cAEW,qBAAmB,aAAA;;UAqB9B,mBAAA,CAAA;;;;;;;;;;;;;;;;;UArB8B,mBAAA,CAAA;;;;;;;;cAuBnB,oBAAoB,eAAe;iBAShC,0BAAA,WAAqC,eAAY"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"contracts.js","names":["SchemaModel","ScalarTypeEnum","appConfigContracts: Record<string, ContractSpec<any, any>>"],"sources":["../../src/app-config/contracts.ts"],"sourcesContent":["import {\n ScalarTypeEnum,\n SchemaModel,\n} from '@lssm/lib.schema';\nimport {\n defineCommand,\n defineQuery,\n} from '../spec';\nimport { OwnersEnum, StabilityEnum, TagsEnum } from '../ownership';\nimport type { ContractSpec } from '../spec';\nimport type { SpecRegistry } from '../registry';\n\nconst BrandingAssetInput = new SchemaModel({\n name: 'BrandingAssetInput',\n fields: {\n type: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },\n url: { type: ScalarTypeEnum.URL(), isOptional: false },\n mimeType: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },\n },\n});\n\nconst UpdateTenantBrandingInput = new SchemaModel({\n name: 'UpdateTenantBrandingInput',\n fields: {\n tenantId: { type: ScalarTypeEnum.ID(), isOptional: false },\n appId: { type: ScalarTypeEnum.ID(), isOptional: false },\n environment: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },\n appName: { type: ScalarTypeEnum.JSONObject(), isOptional: true },\n assets: { type: BrandingAssetInput, isOptional: true, isArray: true },\n colors: { type: ScalarTypeEnum.JSONObject(), isOptional: true },\n customDomain: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },\n subdomain: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },\n },\n});\n\nconst UpdateTenantBrandingOutput = new SchemaModel({\n name: 'UpdateTenantBrandingOutput',\n fields: {\n success: { type: ScalarTypeEnum.Boolean(), isOptional: false },\n updatedAt: { type: ScalarTypeEnum.DateTime(), isOptional: false },\n },\n});\n\nconst VerifyCustomDomainInput = new SchemaModel({\n name: 'VerifyCustomDomainInput',\n fields: {\n tenantId: { type: ScalarTypeEnum.ID(), isOptional: false },\n appId: { type: ScalarTypeEnum.ID(), isOptional: false },\n domain: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },\n },\n});\n\nconst VerifyCustomDomainOutput = new SchemaModel({\n name: 'VerifyCustomDomainOutput',\n fields: {\n status: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },\n message: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },\n },\n});\n\nconst TranslationEntryInput = new SchemaModel({\n name: 'TranslationEntryInput',\n fields: {\n key: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },\n locale: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },\n value: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },\n context: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },\n },\n});\n\nconst UpdateBlueprintTranslationInput = new SchemaModel({\n name: 'UpdateBlueprintTranslationInput',\n fields: {\n blueprintName: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },\n blueprintVersion: { type: ScalarTypeEnum.Int_unsecure(), isOptional: false },\n catalogName: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },\n catalogVersion: { type: ScalarTypeEnum.Int_unsecure(), isOptional: false },\n defaultLocale: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },\n supportedLocales: {\n type: ScalarTypeEnum.String_unsecure(),\n isOptional: false,\n isArray: true,\n },\n entries: {\n type: TranslationEntryInput,\n isOptional: false,\n isArray: true,\n },\n },\n});\n\nconst UpdateTenantTranslationInput = new SchemaModel({\n name: 'UpdateTenantTranslationInput',\n fields: {\n tenantId: { type: ScalarTypeEnum.ID(), isOptional: false },\n appId: { type: ScalarTypeEnum.ID(), isOptional: false },\n entries: {\n type: TranslationEntryInput,\n isOptional: false,\n isArray: true,\n },\n defaultLocale: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },\n enabledLocales: {\n type: ScalarTypeEnum.String_unsecure(),\n isOptional: true,\n isArray: true,\n },\n },\n});\n\nconst MessageResolutionInput = new SchemaModel({\n name: 'MessageResolutionInput',\n fields: {\n tenantId: { type: ScalarTypeEnum.ID(), isOptional: false },\n appId: { type: ScalarTypeEnum.ID(), isOptional: false },\n locale: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },\n key: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },\n },\n});\n\nconst MessageResolutionOutput = new SchemaModel({\n name: 'MessageResolutionOutput',\n fields: {\n value: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },\n source: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },\n },\n});\n\nexport const UpdateTenantBrandingCommand = defineCommand({\n meta: {\n name: 'appConfig.updateTenantBranding',\n version: 1,\n description: 'Applies tenant branding overrides (names, assets, domains).',\n owners: [OwnersEnum.PlatformSigil],\n tags: ['branding'],\n stability: StabilityEnum.Beta,\n goal: 'Maintain tenant-specific branding assets and domains.',\n context:\n 'Invoked by the Studio or automation when a tenant updates branding settings.',\n },\n io: {\n input: UpdateTenantBrandingInput,\n output: UpdateTenantBrandingOutput,\n },\n policy: {\n auth: 'admin',\n policies: [{ name: 'platform.app-config.manage', version: 1 }],\n },\n});\n\nexport const VerifyCustomDomainCommand = defineCommand({\n meta: {\n name: 'appConfig.verifyCustomDomain',\n version: 1,\n description: 'Validates DNS ownership for tenant custom domains.',\n owners: [OwnersEnum.PlatformSigil],\n tags: ['branding'],\n stability: StabilityEnum.Experimental,\n goal: 'Confirm tenant-provided domains before activation.',\n context:\n 'Triggered after the tenant adds DNS records to verify domain ownership.',\n },\n io: {\n input: VerifyCustomDomainInput,\n output: VerifyCustomDomainOutput,\n },\n policy: {\n auth: 'admin',\n policies: [{ name: 'platform.app-config.manage', version: 1 }],\n },\n});\n\nexport const UpdateBlueprintTranslationCatalogCommand = defineCommand({\n meta: {\n name: 'appConfig.updateBlueprintTranslationCatalog',\n version: 1,\n description: 'Registers or updates translation entries for a blueprint.',\n owners: [OwnersEnum.PlatformSigil],\n tags: [TagsEnum.I18n],\n stability: StabilityEnum.Beta,\n goal: 'Keep blueprint translation catalogs in sync with shipped copy.',\n context:\n 'Executed by platform automation or CI when committing updated translation catalogs.',\n },\n io: {\n input: UpdateBlueprintTranslationInput,\n output: UpdateTenantBrandingOutput,\n },\n policy: {\n auth: 'admin',\n policies: [{ name: 'platform.app-config.manage', version: 1 }],\n },\n});\n\nexport const UpdateTenantTranslationOverridesCommand = defineCommand({\n meta: {\n name: 'appConfig.updateTenantTranslations',\n version: 1,\n description: 'Applies tenant-specific translation entries.',\n owners: [OwnersEnum.PlatformSigil],\n tags: [TagsEnum.I18n],\n stability: StabilityEnum.Beta,\n goal: 'Allow tenants to override selected message keys.',\n context:\n 'Called by the Studio when a tenant customizes labels or copy for their locale.',\n },\n io: {\n input: UpdateTenantTranslationInput,\n output: UpdateTenantBrandingOutput,\n },\n policy: {\n auth: 'admin',\n policies: [{ name: 'platform.app-config.manage', version: 1 }],\n },\n});\n\nexport const GetResolvedBrandingQuery = defineQuery({\n meta: {\n name: 'appConfig.getResolvedBranding',\n version: 1,\n description: 'Returns the resolved branding for a tenant/app/environment.',\n owners: [OwnersEnum.PlatformSigil],\n tags: ['branding'],\n stability: StabilityEnum.Beta,\n goal: 'Expose hydrated branding assets for rendering UI/email experiences.',\n context:\n 'Used by runtime surfaces to fetch brand assets prior to rendering tenant-specific experiences.',\n },\n io: {\n input: new SchemaModel({\n name: 'GetResolvedBrandingInput',\n fields: {\n tenantId: { type: ScalarTypeEnum.ID(), isOptional: false },\n appId: { type: ScalarTypeEnum.ID(), isOptional: false },\n environment: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },\n },\n }),\n output: new SchemaModel({\n name: 'GetResolvedBrandingOutput',\n fields: {\n branding: { type: ScalarTypeEnum.JSONObject(), isOptional: false },\n },\n }),\n },\n policy: {\n auth: 'admin',\n policies: [{ name: 'platform.app-config.read', version: 1 }],\n },\n});\n\nexport const ResolveMessageQuery = defineQuery({\n meta: {\n name: 'appConfig.resolveMessage',\n version: 1,\n description:\n 'Resolves a translation key for a tenant in the requested locale.',\n owners: [OwnersEnum.PlatformSigil],\n tags: [TagsEnum.I18n],\n stability: StabilityEnum.Experimental,\n goal: 'Expose a server-side API for resolving message keys on demand.',\n context:\n 'Used by backend services or scripts that need translated copy outside the front-end runtime.',\n },\n io: {\n input: MessageResolutionInput,\n output: MessageResolutionOutput,\n },\n policy: {\n auth: 'admin',\n policies: [{ name: 'platform.app-config.read', version: 1 }],\n },\n});\n\nexport const appConfigContracts: Record<string, ContractSpec<any, any>> = {\n UpdateTenantBrandingCommand,\n VerifyCustomDomainCommand,\n UpdateBlueprintTranslationCatalogCommand,\n UpdateTenantTranslationOverridesCommand,\n GetResolvedBrandingQuery,\n ResolveMessageQuery,\n};\n\nexport function registerAppConfigContracts(registry: SpecRegistry) {\n return registry\n .register(UpdateTenantBrandingCommand)\n .register(VerifyCustomDomainCommand)\n .register(UpdateBlueprintTranslationCatalogCommand)\n .register(UpdateTenantTranslationOverridesCommand)\n .register(GetResolvedBrandingQuery)\n .register(ResolveMessageQuery);\n}\n\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"events.d.ts","names":[],"sources":["../../src/app-config/events.ts"],"sourcesContent":[],"mappings":";;;;;;cAca,yBAAuB,UAAA;;UAoBlC,mBAAA,CAAA;;;EApBW,KAAA,EAAA;IAoBX,IAAA,+BAAA,CAAA,MAAA,EAAA,MAAA,CAAA;;;;;;;EApBkC,aAAA,EAAA;IAAA,IAAA,+BAAA,CAAA,MAAA,EAAA,MAAA,CAAA;IAAA,UAAA,EAAA,KAAA;EAsBvB,CAAA;EAmBX,gBAAA,EAAA;;;;;IAnBuC,IAAA,+BAAA,CAAA,MAAA,EAAA,MAAA,CAAA;IAAA,UAAA,EAAA,KAAA;EAAA,CAAA;EAqB5B,UAAA,EAAA;IA8BX,IAAA,+BAAA,CAAA,MAAA,EAAA,MAAA,CAAA;;;;cAnDW,8BAA4B,UAAA;;UAmBvC,mBAAA,CAAA;IAE+B,UAAA,EAAA,KAAA;EAAA,CAAA;EAAA,KAAA,EAAA;IAgCpB,IAAA,+BA0BX,CAAA,MAAA,EAAA,MAAA,CAAA;IAAA,UAAA,EAAA,KAAA;;;;;;;IA1BgC,IAAA,+BAAA,CAAA,MAAA,EAAA,MAAA,CAAA;IAAA,UAAA,EAAA,KAAA;EAAA,CAAA;;;;;;;cAhCrB,sBAAoB,UAAA;;UA8B/B,mBAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAEW,uBAAqB,UAAA;;UA0BhC,mBAAA,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"events.js","names":["SchemaModel","ScalarTypeEnum"],"sources":["../../src/app-config/events.ts"],"sourcesContent":["import { SchemaModel, ScalarTypeEnum } from '@lssm/lib.schema';\nimport { defineEvent } from '../events';\nimport { OwnersEnum, StabilityEnum, TagsEnum } from '../ownership';\n\nconst lifecycleOwnership = {\n title: 'Tenant App Config Lifecycle',\n description:\n 'Events emitted when tenant app configurations move through lifecycle stages.',\n domain: 'app-config.lifecycle',\n owners: [OwnersEnum.PlatformSigil],\n tags: [TagsEnum.Hygiene],\n stability: StabilityEnum.Beta,\n};\n\nexport const ConfigDraftCreatedEvent = defineEvent({\n name: 'app_config.draft_created',\n version: 1,\n description: 'A new tenant config draft was created.',\n ownership: lifecycleOwnership,\n payload: new SchemaModel({\n name: 'ConfigDraftCreatedPayload',\n fields: {\n tenantId: { type: ScalarTypeEnum.ID(), isOptional: false },\n appId: { type: ScalarTypeEnum.ID(), isOptional: false },\n version: { type: ScalarTypeEnum.Int_unsecure(), isOptional: false },\n blueprintName: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },\n blueprintVersion: {\n type: ScalarTypeEnum.Int_unsecure(),\n isOptional: false,\n },\n createdBy: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },\n clonedFrom: { type: ScalarTypeEnum.Int_unsecure(), isOptional: true },\n },\n }),\n});\n\nexport const ConfigPromotedToPreviewEvent = defineEvent({\n name: 'app_config.promoted_to_preview',\n version: 1,\n description: 'A tenant config draft was promoted to preview.',\n ownership: lifecycleOwnership,\n payload: new SchemaModel({\n name: 'ConfigPromotedToPreviewPayload',\n fields: {\n tenantId: { type: ScalarTypeEnum.ID(), isOptional: false },\n appId: { type: ScalarTypeEnum.ID(), isOptional: false },\n version: { type: ScalarTypeEnum.Int_unsecure(), isOptional: false },\n promotedBy: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },\n warnings: {\n type: ScalarTypeEnum.String_unsecure(),\n isOptional: true,\n isArray: true,\n },\n },\n }),\n});\n\nexport const ConfigPublishedEvent = defineEvent({\n name: 'app_config.published',\n version: 1,\n description: 'A tenant config version was published to production.',\n ownership: lifecycleOwnership,\n payload: new SchemaModel({\n name: 'ConfigPublishedPayload',\n fields: {\n tenantId: { type: ScalarTypeEnum.ID(), isOptional: false },\n appId: { type: ScalarTypeEnum.ID(), isOptional: false },\n version: { type: ScalarTypeEnum.Int_unsecure(), isOptional: false },\n previousVersion: {\n type: ScalarTypeEnum.Int_unsecure(),\n isOptional: true,\n },\n publishedBy: {\n type: ScalarTypeEnum.String_unsecure(),\n isOptional: false,\n },\n changeSummary: {\n type: ScalarTypeEnum.String_unsecure(),\n isOptional: true,\n },\n changedSections: {\n type: ScalarTypeEnum.String_unsecure(),\n isOptional: true,\n isArray: true,\n },\n },\n }),\n});\n\nexport const ConfigRolledBackEvent = defineEvent({\n name: 'app_config.rolled_back',\n version: 1,\n description: 'A tenant config was rolled back to a previous version.',\n ownership: lifecycleOwnership,\n payload: new SchemaModel({\n name: 'ConfigRolledBackPayload',\n fields: {\n tenantId: { type: ScalarTypeEnum.ID(), isOptional: false },\n appId: { type: ScalarTypeEnum.ID(), isOptional: false },\n newVersion: { type: ScalarTypeEnum.Int_unsecure(), isOptional: false },\n rolledBackFrom: {\n type: ScalarTypeEnum.Int_unsecure(),\n isOptional: false,\n },\n rolledBackTo: {\n type: ScalarTypeEnum.Int_unsecure(),\n isOptional: false,\n },\n rolledBackBy: {\n type: ScalarTypeEnum.String_unsecure(),\n isOptional: false,\n },\n reason: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },\n },\n }),\n});\n\n\n\n\n\n\n\n\n"],"mappings":"2PAIA,MAAM,EAAqB,CACzB,MAAO,8BACP,YACE,+EACF,OAAQ,uBACR,OAAQ,CAAC,EAAW,cAAc,CAClC,KAAM,CAAC,EAAS,QAAQ,CACxB,UAAW,EAAc,KAC1B,CAEY,EAA0B,EAAY,CACjD,KAAM,2BACN,QAAS,EACT,YAAa,yCACb,UAAW,EACX,QAAS,IAAIA,EAAY,CACvB,KAAM,4BACN,OAAQ,CACN,SAAU,CAAE,KAAMC,EAAe,IAAI,CAAE,WAAY,GAAO,CAC1D,MAAO,CAAE,KAAMA,EAAe,IAAI,CAAE,WAAY,GAAO,CACvD,QAAS,CAAE,KAAMA,EAAe,cAAc,CAAE,WAAY,GAAO,CACnE,cAAe,CAAE,KAAMA,EAAe,iBAAiB,CAAE,WAAY,GAAO,CAC5E,iBAAkB,CAChB,KAAMA,EAAe,cAAc,CACnC,WAAY,GACb,CACD,UAAW,CAAE,KAAMA,EAAe,iBAAiB,CAAE,WAAY,GAAO,CACxE,WAAY,CAAE,KAAMA,EAAe,cAAc,CAAE,WAAY,GAAM,CACtE,CACF,CAAC,CACH,CAAC,CAEW,EAA+B,EAAY,CACtD,KAAM,iCACN,QAAS,EACT,YAAa,iDACb,UAAW,EACX,QAAS,IAAID,EAAY,CACvB,KAAM,iCACN,OAAQ,CACN,SAAU,CAAE,KAAMC,EAAe,IAAI,CAAE,WAAY,GAAO,CAC1D,MAAO,CAAE,KAAMA,EAAe,IAAI,CAAE,WAAY,GAAO,CACvD,QAAS,CAAE,KAAMA,EAAe,cAAc,CAAE,WAAY,GAAO,CACnE,WAAY,CAAE,KAAMA,EAAe,iBAAiB,CAAE,WAAY,GAAO,CACzE,SAAU,CACR,KAAMA,EAAe,iBAAiB,CACtC,WAAY,GACZ,QAAS,GACV,CACF,CACF,CAAC,CACH,CAAC,CAEW,EAAuB,EAAY,CAC9C,KAAM,uBACN,QAAS,EACT,YAAa,uDACb,UAAW,EACX,QAAS,IAAID,EAAY,CACvB,KAAM,yBACN,OAAQ,CACN,SAAU,CAAE,KAAMC,EAAe,IAAI,CAAE,WAAY,GAAO,CAC1D,MAAO,CAAE,KAAMA,EAAe,IAAI,CAAE,WAAY,GAAO,CACvD,QAAS,CAAE,KAAMA,EAAe,cAAc,CAAE,WAAY,GAAO,CACnE,gBAAiB,CACf,KAAMA,EAAe,cAAc,CACnC,WAAY,GACb,CACD,YAAa,CACX,KAAMA,EAAe,iBAAiB,CACtC,WAAY,GACb,CACD,cAAe,CACb,KAAMA,EAAe,iBAAiB,CACtC,WAAY,GACb,CACD,gBAAiB,CACf,KAAMA,EAAe,iBAAiB,CACtC,WAAY,GACZ,QAAS,GACV,CACF,CACF,CAAC,CACH,CAAC,CAEW,EAAwB,EAAY,CAC/C,KAAM,yBACN,QAAS,EACT,YAAa,yDACb,UAAW,EACX,QAAS,IAAID,EAAY,CACvB,KAAM,0BACN,OAAQ,CACN,SAAU,CAAE,KAAMC,EAAe,IAAI,CAAE,WAAY,GAAO,CAC1D,MAAO,CAAE,KAAMA,EAAe,IAAI,CAAE,WAAY,GAAO,CACvD,WAAY,CAAE,KAAMA,EAAe,cAAc,CAAE,WAAY,GAAO,CACtE,eAAgB,CACd,KAAMA,EAAe,cAAc,CACnC,WAAY,GACb,CACD,aAAc,CACZ,KAAMA,EAAe,cAAc,CACnC,WAAY,GACb,CACD,aAAc,CACZ,KAAMA,EAAe,iBAAiB,CACtC,WAAY,GACb,CACD,OAAQ,CAAE,KAAMA,EAAe,iBAAiB,CAAE,WAAY,GAAO,CACtE,CACF,CAAC,CACH,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"lifecycle-contracts.d.ts","names":[],"sources":["../../src/app-config/lifecycle-contracts.ts"],"sourcesContent":[],"mappings":";;;;;;;;cAwEa,gCAA8B,aAAA;;UAyBzC,mBAAA,CAAA;;;EAzBW,KAAA,EAAA;IAyBX,IAAA,+BAAA,CAAA,MAAA,EAAA,MAAA,CAAA;;;;;;;EAzByC,gBAAA,EAAA;IAAA,IAAA,+BAAA,CAAA,MAAA,EAAA,MAAA,CAAA;;;;;;;;;;;;;;EAAA,CAAA;CAAA,CAAA,aAAA,CAAA;EAkD9B,OAAA,EAAA;IAyBX,IAAA,EA3EyC,mBAAA,CAAA,SA2EzC,CAAA,MAAA,EAAA,MAAA,CAAA;;;;IAzB8C,IAAA,+BAAA,CAAA,MAAA,EAAA,MAAA,CAAA;IAAA,UAAA,EAAA,KAAA;;;;;;;;;;;IAAA,CAAA;IAAA,KAAA,EAAA;MAoDnC,IAAA,+BAyBX,CAAA,MAAA,EAAA,MAAA,CAAA;MAAA,UAAA,EAAA,KAAA;;;;;;IAzBqC,aAAA,EAAA;MAAA,IAAA,+BAAA,CAAA,MAAA,EAAA,MAAA,CAAA;;;;;;;;;;;;;;;EAAA,CAAA,CAAA,CAAA;EAAA,IAAA,EAAA,MAAA;AAgDvC,CAAA,EAAA,CAAa;AAyBX,cA7HW,mCA6HX,EA7H8C,YA6H9C,CA7H8C,WA6H9C,CAAA;;UApGA,mBAAA,CAAA;;;;IA2EsC,IAAA,+BAAA,CAAA,MAAA,EAAA,MAAA,CAAA;IAAA,UAAA,EAAA,KAAA;;;;;;;;;;;;UApGQ,mBAAA,CAAA;IAoGR,UAAA,EAAA,KAAA;EAAA,CAAA;EA+C3B,MAAA,EAAA;IAiBX,IAAA,+BAAA,CAAA,MAAA,EAAA,MAAA,CAAA;;EAjBwC,CAAA;;;;;;;;;;;;;;;;;;;IAAA,CAAA;IAAA,UAAA,EAAA;MAmC7B,IAAA,+BAiBX,CAAA,MAAA,EAAA,MAAA,CAAA;MAAA,UAAA,EAAA,KAAA;;;MAjBsC,IAAA,+BAAA,CAAA,MAAA,EAAA,MAAA,CAAA;;;;;;;cAlI3B,4BAA0B,aAAA;;IAkIC,IAAA,EAzGtC,mBAAA,CAAA,SAyGsC,CAAA,MAAA,EAAA,MAAA,CAAA;IAAA,UAAA,EAAA,KAAA;EAmB3B,CAAA;EASG,KAAA,EAAA;;;;;;;;;;;;;;;;;;;;;;UA9JuB,mBAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAgD1B,6BAA2B,aAAA;;UAyBtC,mBAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;UAzBsC,mBAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cA+C3B,+BAA6B,aAAA;;UAiBxC,mBAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAkBW,6BAA2B,aAAA;;UAiBtC,mBAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;cAEW,oBAAoB,eAAe;iBAShC,mCAAA,WAA8C,eAAY"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"lifecycle-contracts.js","names":["SchemaModel","ScalarTypeEnum","lifecycleContracts: Record<string, ContractSpec<any, any>>"],"sources":["../../src/app-config/lifecycle-contracts.ts"],"sourcesContent":["import { SchemaModel, ScalarTypeEnum } from '@lssm/lib.schema';\nimport type { ContractSpec } from '../spec';\nimport { defineCommand, defineQuery } from '../spec';\nimport { OwnersEnum, StabilityEnum, TagsEnum } from '../ownership';\nimport type { SpecRegistry } from '../registry';\nimport {\n ConfigDraftCreatedEvent,\n ConfigPromotedToPreviewEvent,\n ConfigPublishedEvent,\n ConfigRolledBackEvent,\n} from './events';\n\nconst LifecyclePolicy = {\n auth: 'admin' as const,\n policies: [{ name: 'platform.app-config.manage', version: 1 }],\n};\n\nconst LifecycleReadPolicy = {\n auth: 'admin' as const,\n policies: [{ name: 'platform.app-config.read', version: 1 }],\n};\n\nconst ConfigVersionRecord = new SchemaModel({\n name: 'ConfigVersionRecord',\n fields: {\n meta: { type: ScalarTypeEnum.JSONObject(), isOptional: false },\n config: { type: ScalarTypeEnum.JSONObject(), isOptional: false },\n },\n});\n\nconst ConfigTransitionRecord = new SchemaModel({\n name: 'ConfigTransitionRecord',\n fields: {\n tenantId: { type: ScalarTypeEnum.ID(), isOptional: false },\n appId: { type: ScalarTypeEnum.ID(), isOptional: false },\n fromStatus: {\n type: ScalarTypeEnum.String_unsecure(),\n isOptional: false,\n },\n toStatus: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },\n version: { type: ScalarTypeEnum.Int_unsecure(), isOptional: false },\n timestamp: { type: ScalarTypeEnum.DateTime(), isOptional: false },\n actor: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },\n reason: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },\n },\n});\n\nconst CreateDraftInput = new SchemaModel({\n name: 'CreateTenantConfigDraftInput',\n fields: {\n tenantId: { type: ScalarTypeEnum.ID(), isOptional: false },\n appId: { type: ScalarTypeEnum.ID(), isOptional: false },\n blueprintName: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },\n blueprintVersion: {\n type: ScalarTypeEnum.Int_unsecure(),\n isOptional: false,\n },\n environment: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },\n fromVersion: { type: ScalarTypeEnum.Int_unsecure(), isOptional: true },\n createdBy: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },\n },\n});\n\nconst CreateDraftOutput = new SchemaModel({\n name: 'CreateTenantConfigDraftOutput',\n fields: {\n version: { type: ScalarTypeEnum.Int_unsecure(), isOptional: false },\n status: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },\n createdAt: { type: ScalarTypeEnum.DateTime(), isOptional: false },\n },\n});\n\nexport const CreateTenantConfigDraftCommand = defineCommand({\n meta: {\n name: 'appConfig.lifecycle.createDraft',\n version: 1,\n description: 'Creates a new draft tenant config version.',\n owners: [OwnersEnum.PlatformSigil],\n tags: [TagsEnum.Hygiene, 'app-config'],\n stability: StabilityEnum.Experimental,\n goal: 'Allow operators to start editing a new tenant config version.',\n context:\n 'Invoked by the Studio or automation when starting a new configuration run.',\n },\n io: {\n input: CreateDraftInput,\n output: CreateDraftOutput,\n },\n policy: LifecyclePolicy,\n sideEffects: {\n emits: [\n {\n ref: ConfigDraftCreatedEvent,\n when: 'after successful draft creation',\n },\n ],\n },\n});\n\nconst PromotePreviewInput = new SchemaModel({\n name: 'PromoteTenantConfigPreviewInput',\n fields: {\n tenantId: { type: ScalarTypeEnum.ID(), isOptional: false },\n appId: { type: ScalarTypeEnum.ID(), isOptional: false },\n version: { type: ScalarTypeEnum.Int_unsecure(), isOptional: false },\n promotedBy: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },\n },\n});\n\nconst PromotePreviewOutput = new SchemaModel({\n name: 'PromoteTenantConfigPreviewOutput',\n fields: {\n version: { type: ScalarTypeEnum.Int_unsecure(), isOptional: false },\n status: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },\n warnings: {\n type: ScalarTypeEnum.String_unsecure(),\n isOptional: true,\n isArray: true,\n },\n },\n});\n\nexport const PromoteTenantConfigToPreviewCommand = defineCommand({\n meta: {\n name: 'appConfig.lifecycle.promoteToPreview',\n version: 1,\n description: 'Promotes a draft tenant config to preview/testing state.',\n owners: [OwnersEnum.PlatformSigil],\n tags: [TagsEnum.Hygiene, 'app-config'],\n stability: StabilityEnum.Experimental,\n goal: 'Enable validation and testing of draft configurations.',\n context:\n 'Called when a draft passes initial checks and should be exposed to preview environments.',\n },\n io: {\n input: PromotePreviewInput,\n output: PromotePreviewOutput,\n },\n policy: LifecyclePolicy,\n sideEffects: {\n emits: [\n {\n ref: ConfigPromotedToPreviewEvent,\n when: 'after promotion to preview',\n },\n ],\n },\n});\n\nconst PublishConfigInput = new SchemaModel({\n name: 'PublishTenantConfigInput',\n fields: {\n tenantId: { type: ScalarTypeEnum.ID(), isOptional: false },\n appId: { type: ScalarTypeEnum.ID(), isOptional: false },\n version: { type: ScalarTypeEnum.Int_unsecure(), isOptional: false },\n environment: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },\n publishedBy: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },\n changeSummary: {\n type: ScalarTypeEnum.String_unsecure(),\n isOptional: true,\n },\n },\n});\n\nconst PublishConfigOutput = new SchemaModel({\n name: 'PublishTenantConfigOutput',\n fields: {\n version: { type: ScalarTypeEnum.Int_unsecure(), isOptional: false },\n status: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },\n previousVersion: { type: ScalarTypeEnum.Int_unsecure(), isOptional: true },\n publishedAt: { type: ScalarTypeEnum.DateTime(), isOptional: false },\n },\n});\n\nexport const PublishTenantConfigCommand = defineCommand({\n meta: {\n name: 'appConfig.lifecycle.publish',\n version: 1,\n description: 'Publishes a preview tenant config to production.',\n owners: [OwnersEnum.PlatformSigil],\n tags: [TagsEnum.Hygiene, 'app-config'],\n stability: StabilityEnum.Experimental,\n goal: 'Promote tested configurations to production safely.',\n context:\n 'Triggered after validation passes and change management approvals are complete.',\n },\n io: {\n input: PublishConfigInput,\n output: PublishConfigOutput,\n },\n policy: LifecyclePolicy,\n sideEffects: {\n emits: [\n {\n ref: ConfigPublishedEvent,\n when: 'after publish succeeds',\n },\n ],\n },\n});\n\nconst RollbackConfigInput = new SchemaModel({\n name: 'RollbackTenantConfigInput',\n fields: {\n tenantId: { type: ScalarTypeEnum.ID(), isOptional: false },\n appId: { type: ScalarTypeEnum.ID(), isOptional: false },\n toVersion: { type: ScalarTypeEnum.Int_unsecure(), isOptional: false },\n environment: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },\n rolledBackBy: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },\n reason: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },\n },\n});\n\nconst RollbackConfigOutput = new SchemaModel({\n name: 'RollbackTenantConfigOutput',\n fields: {\n newVersion: { type: ScalarTypeEnum.Int_unsecure(), isOptional: false },\n status: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },\n rolledBackFrom: { type: ScalarTypeEnum.Int_unsecure(), isOptional: false },\n },\n});\n\nexport const RollbackTenantConfigCommand = defineCommand({\n meta: {\n name: 'appConfig.lifecycle.rollback',\n version: 1,\n description: 'Rolls back to a previously published tenant config version.',\n owners: [OwnersEnum.PlatformSigil],\n tags: [TagsEnum.Hygiene, 'app-config'],\n stability: StabilityEnum.Experimental,\n goal: 'Provide rapid recovery when new configs regress production.',\n context:\n 'Called manually or automatically when monitoring detects regression and a rollback is required.',\n },\n io: {\n input: RollbackConfigInput,\n output: RollbackConfigOutput,\n },\n policy: LifecyclePolicy,\n sideEffects: {\n emits: [\n {\n ref: ConfigRolledBackEvent,\n when: 'after rollback completes',\n },\n ],\n },\n});\n\nconst ListVersionsInput = new SchemaModel({\n name: 'ListTenantConfigVersionsInput',\n fields: {\n tenantId: { type: ScalarTypeEnum.ID(), isOptional: false },\n appId: { type: ScalarTypeEnum.ID(), isOptional: false },\n },\n});\n\nconst ListVersionsOutput = new SchemaModel({\n name: 'ListTenantConfigVersionsOutput',\n fields: {\n versions: { type: ConfigVersionRecord, isOptional: false, isArray: true },\n transitions: {\n type: ConfigTransitionRecord,\n isOptional: true,\n isArray: true,\n },\n },\n});\n\nexport const ListTenantConfigVersionsQuery = defineQuery({\n meta: {\n name: 'appConfig.lifecycle.listVersions',\n version: 1,\n description: 'Lists all versions of a tenant configuration.',\n owners: [OwnersEnum.PlatformSigil],\n tags: ['app-config', TagsEnum.Hygiene],\n stability: StabilityEnum.Experimental,\n goal: 'Support lifecycle views and change audit tooling.',\n context:\n 'Used by the Studio to render history timelines and by automation for change tracking.',\n },\n io: {\n input: ListVersionsInput,\n output: ListVersionsOutput,\n },\n policy: LifecycleReadPolicy,\n});\n\nconst GetVersionInput = new SchemaModel({\n name: 'GetTenantConfigVersionInput',\n fields: {\n tenantId: { type: ScalarTypeEnum.ID(), isOptional: false },\n appId: { type: ScalarTypeEnum.ID(), isOptional: false },\n version: { type: ScalarTypeEnum.Int_unsecure(), isOptional: false },\n },\n});\n\nconst GetVersionOutput = new SchemaModel({\n name: 'GetTenantConfigVersionOutput',\n fields: {\n version: { type: ConfigVersionRecord, isOptional: false },\n },\n});\n\nexport const GetTenantConfigVersionQuery = defineQuery({\n meta: {\n name: 'appConfig.lifecycle.getVersion',\n version: 1,\n description: 'Fetches a single tenant config version by id.',\n owners: [OwnersEnum.PlatformSigil],\n tags: ['app-config', TagsEnum.Hygiene],\n stability: StabilityEnum.Experimental,\n goal: 'Allow detail drill-down for lifecycle entries.',\n context:\n 'Used by automation to fetch config payloads for comparison or export.',\n },\n io: {\n input: GetVersionInput,\n output: GetVersionOutput,\n },\n policy: LifecycleReadPolicy,\n});\n\nexport const lifecycleContracts: Record<string, ContractSpec<any, any>> = {\n CreateTenantConfigDraftCommand,\n PromoteTenantConfigToPreviewCommand,\n PublishTenantConfigCommand,\n RollbackTenantConfigCommand,\n ListTenantConfigVersionsQuery,\n GetTenantConfigVersionQuery,\n};\n\nexport function registerAppConfigLifecycleContracts(registry: SpecRegistry) {\n return registry\n .register(CreateTenantConfigDraftCommand)\n .register(PromoteTenantConfigToPreviewCommand)\n .register(PublishTenantConfigCommand)\n .register(RollbackTenantConfigCommand)\n .register(ListTenantConfigVersionsQuery)\n .register(GetTenantConfigVersionQuery);\n}\n\n\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"lifecycle.d.ts","names":[],"sources":["../../src/app-config/lifecycle.ts"],"sourcesContent":[],"mappings":";;;KAEY,YAAA;UAOK,sBAAA;EAPL,IAAA,EAQJ,eARgB,CAAA,MAAA,CAAA;EAOP,MAAA,EAEP,eAFO;AAKjB;AAGc,UAHG,gBAAA,CAGH;EACF,QAAA,EAAA,MAAA;EAEU,KAAA,EAAA,MAAA;EAAI,UAAA,EAHZ,YAGY;EAKT,QAAA,EAPL,YAOK;;sBALK;;;;UAKL,oBAAA;;;YAGL;eACG"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"runtime.d.ts","names":[],"sources":["../../src/app-config/runtime.ts"],"sourcesContent":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"runtime.js","names":["missing: MissingReference[]","merged: Record<string, SpecPointer>","binding: TelemetryBinding","localePreferenceOrder: string[]","appName: string | undefined","assets","assets: ResolvedBranding['assets']","colors: ResolvedBranding['colors']","resolved: ResolvedIntegration[]","resolved: CapabilitySpec[]","resolved: FeatureModuleSpec[]","resolved: Record<string, TSpec>","resolved: PolicySpec[]","themeMissing: MissingReference[]","fallbacks: ThemeSpec[]","telemetryMissing: MissingReference[]","resolved: ExperimentSpec[]"],"sources":["../../src/app-config/runtime.ts"],"sourcesContent":["import type {\n CapabilityRef,\n CapabilityRegistry,\n CapabilitySpec,\n} from '../capabilities';\nimport type {\n FeatureRegistry,\n FeatureModuleSpec,\n FeatureRef,\n} from '../features';\nimport type { DataViewRegistry, DataViewSpec } from '../data-views';\nimport type { WorkflowRegistry, WorkflowSpec } from '../workflow/spec';\nimport type { PolicyRef, PolicyRegistry, PolicySpec } from '../policy/spec';\nimport type { ThemeRegistry, ThemeSpec } from '../themes';\nimport type { TelemetryRegistry, TelemetrySpec } from '../telemetry/spec';\nimport type {\n ExperimentRef,\n ExperimentRegistry,\n ExperimentSpec,\n} from '../experiments/spec';\nimport type {\n IntegrationSpec,\n IntegrationSpecRegistry,\n} from '../integrations/spec';\nimport type { IntegrationConnection } from '../integrations/connection';\nimport type { AppIntegrationBinding } from '../integrations/binding';\nimport type {\n KnowledgeSpaceSpec,\n KnowledgeSpaceRegistry,\n} from '../knowledge/spec';\nimport type { KnowledgeSourceConfig } from '../knowledge/source';\nimport type { AppKnowledgeBinding } from '../knowledge/binding';\nimport type {\n BrandingAssetRef,\n BrandingDefaults,\n ResolvedBranding,\n TenantBrandingAsset,\n TenantBrandingConfig,\n} from './branding';\nimport type {\n Locale,\n TranslationEntry,\n} from '../translations/catalog';\nimport type {\n AppBlueprintSpec,\n AppIntegrationSlot,\n AppRouteConfig,\n AppThemeBinding,\n FeatureFlagState,\n SpecPointer,\n TelemetryBinding,\n TenantAppConfig,\n TenantRouteOverride,\n TenantSpecOverride,\n TranslationCatalogPointer,\n} from './spec';\n\nexport interface ResolvedIntegration {\n slot: AppIntegrationSlot;\n binding: AppIntegrationBinding;\n connection: IntegrationConnection;\n spec: IntegrationSpec;\n}\n\nexport interface ResolvedKnowledge {\n binding: AppKnowledgeBinding;\n space: KnowledgeSpaceSpec;\n sources: KnowledgeSourceConfig[];\n}\n\nexport interface ResolvedTranslation {\n defaultLocale: Locale;\n supportedLocales: Locale[];\n blueprintCatalog?: TranslationCatalogPointer;\n tenantOverrides: TranslationEntry[];\n}\n\nexport interface ResolvedAppConfig {\n appId: string;\n tenantId: string;\n environment?: string;\n blueprintName: string;\n blueprintVersion: number;\n configVersion: number;\n capabilities: {\n enabled: CapabilityRef[];\n disabled: CapabilityRef[];\n };\n features: {\n include: FeatureRef[];\n exclude: FeatureRef[];\n };\n dataViews: Record<string, SpecPointer>;\n workflows: Record<string, SpecPointer>;\n policies: PolicyRef[];\n theme?: AppThemeBinding;\n telemetry?: TelemetryBinding;\n experiments: {\n catalog: ExperimentRef[];\n active: ExperimentRef[];\n paused: ExperimentRef[];\n };\n featureFlags: FeatureFlagState[];\n routes: AppRouteConfig[];\n integrations: ResolvedIntegration[];\n knowledge: ResolvedKnowledge[];\n translation: ResolvedTranslation;\n branding: ResolvedBranding;\n notes?: string;\n}\n\nexport interface AppComposition {\n resolved: ResolvedAppConfig;\n capabilities: CapabilitySpec[];\n features: FeatureModuleSpec[];\n dataViews: Record<string, DataViewSpec>;\n workflows: Record<string, WorkflowSpec>;\n policies: PolicySpec[];\n theme?: ThemeSpec;\n themeFallbacks: ThemeSpec[];\n telemetry?: TelemetrySpec;\n experiments: {\n active: ExperimentSpec[];\n paused: ExperimentSpec[];\n };\n integrations: ResolvedIntegration[];\n knowledge: ResolvedKnowledge[];\n missing: MissingReference[];\n}\n\nexport interface MissingReference {\n type:\n | 'capability'\n | 'feature'\n | 'dataView'\n | 'workflow'\n | 'policy'\n | 'theme'\n | 'telemetry'\n | 'experiment'\n | 'integrationConnection'\n | 'integrationSpec'\n | 'integrationSlot'\n | 'knowledgeSpace'\n | 'knowledgeSource';\n identifier: string;\n}\n\nexport interface ResolveAppConfigDeps {\n integrationSpecs?: IntegrationSpecRegistry;\n integrationConnections?: IntegrationConnection[];\n knowledgeSpaces?: KnowledgeSpaceRegistry;\n knowledgeSources?: KnowledgeSourceConfig[];\n}\n\nexport interface AppCompositionDeps extends ResolveAppConfigDeps {\n capabilities?: CapabilityRegistry;\n features?: FeatureRegistry;\n dataViews?: DataViewRegistry;\n workflows?: WorkflowRegistry;\n policies?: PolicyRegistry;\n themes?: ThemeRegistry;\n telemetry?: TelemetryRegistry;\n experiments?: ExperimentRegistry;\n}\n\nexport interface ComposeOptions {\n strict?: boolean;\n}\n\nexport function resolveAppConfig(\n blueprint: AppBlueprintSpec,\n tenant: TenantAppConfig,\n deps: ResolveAppConfigDeps = {}\n): ResolvedAppConfig {\n const capabilities = mergeCapabilities(\n blueprint.capabilities,\n tenant.capabilities\n );\n const features = mergeFeatures(\n blueprint.features,\n tenant.features\n );\n const dataViews = mergeMappings(\n blueprint.dataViews ?? {},\n tenant.dataViewOverrides\n );\n const workflows = mergeMappings(\n blueprint.workflows ?? {},\n tenant.workflowOverrides\n );\n const policies = mergePolicies(\n blueprint.policies ?? [],\n tenant.additionalPolicies ?? []\n );\n const theme = mergeTheme(blueprint.theme, tenant.themeOverride);\n const telemetry = mergeTelemetry(\n blueprint.telemetry,\n tenant.telemetryOverride\n );\n const experiments = mergeExperiments(\n blueprint.experiments,\n tenant.experiments\n );\n const featureFlags = mergeFeatureFlags(\n blueprint.featureFlags ?? [],\n tenant.featureFlags ?? []\n );\n const routes = mergeRoutes(\n blueprint.routes ?? [],\n tenant.routeOverrides ?? []\n );\n const { resolved: integrations } = evaluateIntegrationSlots(\n blueprint.integrationSlots,\n tenant.integrations,\n deps.integrationConnections,\n deps.integrationSpecs\n );\n const knowledge = resolveKnowledgeBindings(\n tenant.knowledge,\n deps.knowledgeSpaces,\n deps.knowledgeSources\n );\n const branding = resolveBranding(blueprint.branding, tenant);\n const translation = resolveTranslation(\n blueprint.translationCatalog,\n tenant.locales,\n tenant.translationOverrides\n );\n\n return {\n appId: blueprint.meta.appId,\n tenantId: tenant.meta.tenantId,\n environment: tenant.meta.environment,\n blueprintName: blueprint.meta.name,\n blueprintVersion: blueprint.meta.version,\n configVersion: tenant.meta.version,\n capabilities,\n features,\n dataViews,\n workflows,\n policies,\n theme,\n telemetry,\n experiments,\n featureFlags,\n routes,\n integrations,\n knowledge,\n translation,\n branding,\n notes: tenant.notes ?? blueprint.notes,\n };\n}\n\nexport function composeAppConfig(\n blueprint: AppBlueprintSpec,\n tenant: TenantAppConfig,\n deps: AppCompositionDeps,\n options: ComposeOptions = {}\n): AppComposition {\n const resolved = resolveAppConfig(blueprint, tenant, deps);\n const missing: MissingReference[] = [];\n\n const integrationEvaluation = evaluateIntegrationSlots(\n blueprint.integrationSlots,\n tenant.integrations,\n deps.integrationConnections,\n deps.integrationSpecs\n );\n resolved.integrations = integrationEvaluation.resolved;\n missing.push(...integrationEvaluation.missing);\n missing.push(\n ...collectMissingKnowledge(\n tenant.knowledge ?? [],\n deps.knowledgeSpaces,\n deps.knowledgeSources\n )\n );\n\n const capabilities = resolveCapabilityRefs(\n resolved.capabilities.enabled,\n deps.capabilities,\n missing\n );\n\n const features = resolveFeatureRefs(\n resolved.features.include,\n deps.features,\n missing\n );\n\n const dataViews = resolvePointerRecord(\n resolved.dataViews,\n deps.dataViews,\n 'dataView',\n missing\n );\n\n const workflows = resolvePointerRecord(\n resolved.workflows,\n deps.workflows,\n 'workflow',\n missing\n );\n\n const policies = resolvePolicies(\n resolved.policies,\n deps.policies,\n missing\n );\n\n const { theme, fallbacks, themeMissing } = resolveThemeBinding(\n resolved.theme,\n deps.themes\n );\n missing.push(...themeMissing);\n\n const { telemetry, telemetryMissing } = resolveTelemetryBinding(\n resolved.telemetry,\n deps.telemetry\n );\n missing.push(...telemetryMissing);\n\n const experiments = resolveExperimentsSpecs(\n resolved.experiments,\n deps.experiments,\n missing\n );\n\n if (options.strict && missing.length > 0) {\n const reasons = missing\n .map((item) => `${item.type}:${item.identifier}`)\n .join(', ');\n throw new Error(`composeAppConfig: missing references -> ${reasons}`);\n }\n\n return {\n resolved,\n capabilities,\n features,\n dataViews,\n workflows,\n policies,\n theme,\n themeFallbacks: fallbacks,\n telemetry,\n experiments,\n integrations: resolved.integrations,\n knowledge: resolved.knowledge,\n missing,\n };\n}\n\nfunction mergeCapabilities(\n blueprint: AppBlueprintSpec['capabilities'],\n tenant: TenantAppConfig['capabilities']\n): { enabled: CapabilityRef[]; disabled: CapabilityRef[] } {\n const enabled = dedupeRefs(\n [...(blueprint?.enabled ?? []), ...(tenant?.enable ?? [])],\n capabilityKey\n );\n const disabled = dedupeRefs(\n [...(blueprint?.disabled ?? []), ...(tenant?.disable ?? [])],\n capabilityKey\n );\n const disabledKeys = new Set(disabled.map(capabilityKey));\n const filteredEnabled = enabled.filter(\n (ref) => !disabledKeys.has(capabilityKey(ref))\n );\n return { enabled: filteredEnabled, disabled };\n}\n\nfunction mergeFeatures(\n blueprint: AppBlueprintSpec['features'],\n tenant: TenantAppConfig['features']\n): { include: FeatureRef[]; exclude: FeatureRef[] } {\n const include = dedupeRefs(\n [...(blueprint?.include ?? []), ...(tenant?.include ?? [])],\n featureKey\n );\n const exclude = dedupeRefs(\n [...(blueprint?.exclude ?? []), ...(tenant?.exclude ?? [])],\n featureKey\n );\n const excludeSet = new Set(exclude.map(featureKey));\n const filteredInclude = include.filter(\n (ref) => !excludeSet.has(featureKey(ref))\n );\n return { include: filteredInclude, exclude };\n}\n\nfunction mergeMappings(\n blueprint: Record<string, SpecPointer>,\n overrides: TenantSpecOverride[] | undefined\n): Record<string, SpecPointer> {\n const merged: Record<string, SpecPointer> = { ...blueprint };\n if (!overrides) return merged;\n for (const override of overrides) {\n if (!override) continue;\n if (!override.pointer) {\n delete merged[override.slot];\n } else {\n merged[override.slot] = override.pointer;\n }\n }\n return merged;\n}\n\nfunction mergePolicies(\n blueprint: PolicyRef[],\n additional: PolicyRef[]\n): PolicyRef[] {\n return dedupeRefs([...blueprint, ...additional], policyKey);\n}\n\nfunction mergeTheme(\n blueprint: AppThemeBinding | undefined,\n override: TenantAppConfig['themeOverride']\n): AppThemeBinding | undefined {\n if (!blueprint && !override) return undefined;\n const primary = override?.primary ?? blueprint?.primary;\n if (!primary) return undefined;\n const fallbacks = override?.fallbacks ?? blueprint?.fallbacks ?? [];\n return { primary, fallbacks };\n}\n\nfunction mergeTelemetry(\n blueprint: TelemetryBinding | undefined,\n override: TenantAppConfig['telemetryOverride']\n): TelemetryBinding | undefined {\n if (!blueprint && !override) return undefined;\n const binding: TelemetryBinding = {\n spec: blueprint?.spec,\n disabledEvents: blueprint?.disabledEvents\n ? [...blueprint.disabledEvents]\n : undefined,\n samplingOverrides: blueprint?.samplingOverrides\n ? { ...blueprint.samplingOverrides }\n : undefined,\n };\n if (override?.spec !== undefined) {\n binding.spec = override.spec ?? undefined;\n }\n if (override?.disabledEvents) {\n binding.disabledEvents = dedupeStrings([\n ...(binding.disabledEvents ?? []),\n ...override.disabledEvents,\n ]);\n }\n if (override?.samplingOverrides) {\n binding.samplingOverrides = {\n ...(binding.samplingOverrides ?? {}),\n ...override.samplingOverrides,\n };\n }\n if (!binding.spec && !binding.disabledEvents?.length) {\n return undefined;\n }\n return binding;\n}\n\nfunction mergeExperiments(\n blueprint: AppBlueprintSpec['experiments'],\n tenant: TenantAppConfig['experiments']\n): {\n catalog: ExperimentRef[];\n active: ExperimentRef[];\n paused: ExperimentRef[];\n} {\n const defaultActive = blueprint?.active ?? [];\n const defaultPaused = blueprint?.paused ?? [];\n const tenantActive = tenant?.active;\n const tenantPaused = tenant?.paused;\n\n const activeSource =\n tenantActive && tenantActive.length > 0\n ? tenantActive\n : defaultActive;\n const pausedSource =\n tenantPaused && tenantPaused.length > 0\n ? tenantPaused\n : defaultPaused;\n\n const active = dedupeRefs(activeSource, experimentKey);\n let paused = dedupeRefs(pausedSource, experimentKey);\n const activeKeys = new Set(active.map(experimentKey));\n paused = paused.filter((ref) => !activeKeys.has(experimentKey(ref)));\n\n const catalog = dedupeRefs(\n [\n ...defaultActive,\n ...defaultPaused,\n ...(tenantActive ?? []),\n ...(tenantPaused ?? []),\n ],\n experimentKey\n );\n\n return { catalog, active, paused };\n}\n\nfunction resolveBranding(\n defaults: BrandingDefaults | undefined,\n tenant: TenantAppConfig\n): ResolvedBranding {\n const override = tenant.branding;\n const tenantMeta = tenant.meta;\n const baseDomain = 'app.localhost';\n const domain =\n override?.customDomain ??\n (override?.subdomain\n ? `${override.subdomain}.${baseDomain}`\n : `${tenantMeta.tenantId}.${baseDomain}`);\n\n const localePreferenceOrder: string[] = [];\n if (tenant.locales?.defaultLocale) {\n localePreferenceOrder.push(tenant.locales.defaultLocale);\n }\n if (override?.appName) {\n localePreferenceOrder.push('default', 'en');\n }\n\n let appName: string | undefined;\n if (override?.appName) {\n for (const key of localePreferenceOrder) {\n const candidate = override.appName[key];\n if (candidate) {\n appName = candidate;\n break;\n }\n }\n if (!appName) {\n const [, firstValue] =\n Object.entries(override.appName)[0] ?? [];\n if (typeof firstValue === 'string') {\n appName = firstValue;\n }\n }\n }\n if (!appName) {\n appName = defaults?.appNameKey ?? tenantMeta.appId;\n }\n\n const assetEntries = new Map<\n BrandingAssetRef['type'],\n string | undefined\n >();\n\n const applyAssets = (\n assets?: Array<BrandingAssetRef | TenantBrandingAsset>\n ) => {\n if (!assets) return;\n for (const asset of assets) {\n if (!asset?.type) continue;\n if ('url' in asset && asset.url) {\n assetEntries.set(asset.type, asset.url);\n }\n }\n };\n\n applyAssets(defaults?.assets);\n applyAssets(override?.assets);\n\n const assets: ResolvedBranding['assets'] = {\n logo: assetEntries.get('logo'),\n logoDark: assetEntries.get('logo-dark'),\n favicon: assetEntries.get('favicon'),\n ogImage: assetEntries.get('og-image'),\n };\n\n const colors: ResolvedBranding['colors'] = {\n primary:\n override?.colors?.primary ??\n defaults?.colorTokens?.primary ??\n '#1f2937',\n secondary:\n override?.colors?.secondary ??\n defaults?.colorTokens?.secondary ??\n '#4b5563',\n };\n\n return {\n appName,\n assets,\n colors,\n domain,\n };\n}\n\nfunction resolveTranslation(\n catalogPointer: TranslationCatalogPointer | undefined,\n locales: TenantAppConfig['locales'],\n overrides: TenantAppConfig['translationOverrides']\n): ResolvedTranslation {\n const defaultLocale = locales?.defaultLocale ?? 'en';\n const enabled = locales?.enabledLocales ?? [];\n const supportedLocales = dedupeStrings([defaultLocale, ...enabled]);\n const entries = overrides?.entries ?? [];\n\n return {\n defaultLocale,\n supportedLocales,\n blueprintCatalog: catalogPointer,\n tenantOverrides: entries,\n };\n}\n\nfunction mergeFeatureFlags(\n blueprint: FeatureFlagState[],\n overrides: FeatureFlagState[]\n): FeatureFlagState[] {\n const merged = new Map<string, FeatureFlagState>();\n for (const flag of blueprint) {\n merged.set(flag.key, { ...flag });\n }\n for (const override of overrides) {\n merged.set(override.key, { ...override });\n }\n return [...merged.values()];\n}\n\nfunction mergeRoutes(\n blueprint: AppRouteConfig[],\n overrides: TenantRouteOverride[]\n): AppRouteConfig[] {\n const routes = new Map<string, AppRouteConfig>();\n for (const route of blueprint) {\n routes.set(route.path, { ...route });\n }\n for (const override of overrides) {\n const existing = routes.get(override.path) ?? { path: override.path };\n if (override.label !== undefined) {\n if (override.label === null) delete existing.label;\n else existing.label = override.label;\n }\n if (override.dataView !== undefined) {\n if (override.dataView === null) delete existing.dataView;\n else existing.dataView = override.dataView;\n }\n if (override.workflow !== undefined) {\n if (override.workflow === null) delete existing.workflow;\n else existing.workflow = override.workflow;\n }\n if (override.guard !== undefined) {\n if (override.guard === null) delete existing.guard;\n else existing.guard = override.guard;\n }\n if (override.featureFlag !== undefined) {\n if (override.featureFlag === null) delete existing.featureFlag;\n else existing.featureFlag = override.featureFlag;\n }\n if (override.experiment !== undefined) {\n if (override.experiment === null) delete existing.experiment;\n else existing.experiment = override.experiment;\n }\n routes.set(existing.path, existing);\n }\n return [...routes.values()];\n}\n\nfunction evaluateIntegrationSlots(\n slots: AppIntegrationSlot[] | undefined,\n bindings: AppIntegrationBinding[] | undefined,\n connections: IntegrationConnection[] | undefined,\n specs: IntegrationSpecRegistry | undefined\n): { resolved: ResolvedIntegration[]; missing: MissingReference[] } {\n const resolved: ResolvedIntegration[] = [];\n const missing: MissingReference[] = [];\n const missingKeys = new Set<string>();\n\n const recordMissing = (entry: MissingReference) => {\n const key = `${entry.type}:${entry.identifier}`;\n if (missingKeys.has(key)) return;\n missingKeys.add(key);\n missing.push(entry);\n };\n\n const slotList = slots ?? [];\n const slotById = new Map<string, AppIntegrationSlot>();\n for (const slot of slotList) {\n slotById.set(slot.slotId, slot);\n }\n\n const bindingsBySlot = new Map<string, AppIntegrationBinding[]>();\n for (const binding of bindings ?? []) {\n const slot = slotById.get(binding.slotId);\n if (!slot) {\n recordMissing({\n type: 'integrationSlot',\n identifier: `slot:${binding.slotId}`,\n });\n continue;\n }\n const entries = bindingsBySlot.get(binding.slotId);\n if (entries) entries.push(binding);\n else bindingsBySlot.set(binding.slotId, [binding]);\n }\n\n for (const slot of slotList) {\n const slotBindings = bindingsBySlot.get(slot.slotId) ?? [];\n if (slot.required && slotBindings.length === 0) {\n recordMissing({\n type: 'integrationSlot',\n identifier: `slot:${slot.slotId}`,\n });\n }\n }\n\n if (!connections || !specs) {\n return { resolved, missing };\n }\n\n const connectionById = new Map<string, IntegrationConnection>();\n for (const connection of connections) {\n connectionById.set(connection.meta.id, connection);\n }\n\n for (const slot of slotList) {\n const slotBindings = bindingsBySlot.get(slot.slotId) ?? [];\n if (slotBindings.length === 0) continue;\n\n const orderedBindings = [...slotBindings].sort((a, b) => {\n const aPriority = a.priority ?? Number.MAX_SAFE_INTEGER;\n const bPriority = b.priority ?? Number.MAX_SAFE_INTEGER;\n if (aPriority === bPriority) return 0;\n return aPriority < bPriority ? -1 : 1;\n });\n\n let slotResolved = false;\n for (const binding of orderedBindings) {\n const connection = connectionById.get(binding.connectionId);\n if (!connection) {\n recordMissing({\n type: 'integrationConnection',\n identifier: `connection:${binding.connectionId}`,\n });\n continue;\n }\n\n const spec = specs.get(\n connection.meta.integrationKey,\n connection.meta.integrationVersion\n );\n if (!spec) {\n recordMissing({\n type: 'integrationSpec',\n identifier: `spec:${connection.meta.integrationKey}.v${connection.meta.integrationVersion}`,\n });\n continue;\n }\n\n if (spec.meta.category !== slot.requiredCategory) {\n recordMissing({\n type: 'integrationSpec',\n identifier: `spec:${spec.meta.key}.category`,\n });\n continue;\n }\n\n if (!spec.supportedModes.includes(connection.ownershipMode)) {\n recordMissing({\n type: 'integrationSpec',\n identifier: `spec:${spec.meta.key}.mode:${connection.ownershipMode}`,\n });\n continue;\n }\n\n if (\n slot.allowedModes &&\n slot.allowedModes.length > 0 &&\n !slot.allowedModes.includes(connection.ownershipMode)\n ) {\n recordMissing({\n type: 'integrationConnection',\n identifier: `connection:${connection.meta.id}:mode`,\n });\n continue;\n }\n\n if (\n slot.requiredCapabilities &&\n !slot.requiredCapabilities.every((requirement) =>\n integrationProvidesCapability(spec, requirement)\n )\n ) {\n recordMissing({\n type: 'integrationSpec',\n identifier: `spec:${spec.meta.key}.capabilities`,\n });\n continue;\n }\n\n resolved.push({\n slot,\n binding,\n connection,\n spec,\n });\n slotResolved = true;\n break;\n }\n\n if (!slotResolved && slot.required) {\n recordMissing({\n type: 'integrationSlot',\n identifier: `slot:${slot.slotId}`,\n });\n }\n }\n\n return { resolved, missing };\n}\n\nfunction integrationProvidesCapability(\n spec: IntegrationSpec,\n required: CapabilityRef\n): boolean {\n return spec.capabilities.provides.some((capability) => {\n if (capability.key !== required.key) return false;\n if (required.version == null) return true;\n return capability.version === required.version;\n });\n}\n\nfunction resolveKnowledgeBindings(\n bindings: AppKnowledgeBinding[] | undefined,\n spaces: KnowledgeSpaceRegistry | undefined,\n sources: KnowledgeSourceConfig[] | undefined\n): ResolvedKnowledge[] {\n if (!bindings?.length || !spaces) return [];\n const sourceList = sources ?? [];\n return bindings\n .map((binding) => {\n const space = spaces.get(binding.spaceKey, binding.spaceVersion);\n if (!space) return null;\n const relevantSources = sourceList.filter((source) => {\n if (source.meta.spaceKey !== binding.spaceKey) return false;\n if (binding.spaceVersion != null) {\n return source.meta.spaceVersion === binding.spaceVersion;\n }\n return true;\n });\n return {\n binding,\n space,\n sources: relevantSources,\n };\n })\n .filter((entry): entry is ResolvedKnowledge => entry !== null);\n}\n\nfunction collectMissingKnowledge(\n bindings: AppKnowledgeBinding[],\n spaces: KnowledgeSpaceRegistry | undefined,\n sources: KnowledgeSourceConfig[] | undefined\n): MissingReference[] {\n if (!bindings.length || !spaces) return [];\n const missing: MissingReference[] = [];\n const sourceList = sources ?? [];\n\n for (const binding of bindings) {\n const space = spaces.get(binding.spaceKey, binding.spaceVersion);\n if (!space) {\n missing.push({\n type: 'knowledgeSpace',\n identifier: binding.spaceVersion\n ? `${binding.spaceKey}@${binding.spaceVersion}`\n : binding.spaceKey,\n });\n continue;\n }\n if (sources) {\n const relevantSources = sourceList.filter((source) => {\n if (source.meta.spaceKey !== binding.spaceKey) return false;\n if (binding.spaceVersion != null) {\n return source.meta.spaceVersion === binding.spaceVersion;\n }\n return true;\n });\n if (relevantSources.length === 0) {\n missing.push({\n type: 'knowledgeSource',\n identifier: binding.spaceVersion\n ? `${binding.spaceKey}@${binding.spaceVersion}`\n : binding.spaceKey,\n });\n }\n }\n }\n\n return missing;\n}\n\nfunction resolveCapabilityRefs(\n refs: CapabilityRef[],\n registry: CapabilityRegistry | undefined,\n missing: MissingReference[]\n): CapabilitySpec[] {\n if (!registry) {\n if (refs.length > 0) {\n for (const ref of refs) {\n missing.push({\n type: 'capability',\n identifier: capabilityKey(ref),\n });\n }\n }\n return [];\n }\n\n const resolved: CapabilitySpec[] = [];\n for (const ref of refs) {\n const spec = registry.get(ref.key, ref.version);\n if (!spec) {\n missing.push({\n type: 'capability',\n identifier: capabilityKey(ref),\n });\n continue;\n }\n resolved.push(spec);\n }\n return resolved;\n}\n\nfunction resolveFeatureRefs(\n refs: FeatureRef[],\n registry: FeatureRegistry | undefined,\n missing: MissingReference[]\n): FeatureModuleSpec[] {\n if (!registry) {\n if (refs.length > 0) {\n for (const ref of refs) {\n missing.push({ type: 'feature', identifier: ref.key });\n }\n }\n return [];\n }\n const resolved: FeatureModuleSpec[] = [];\n for (const ref of refs) {\n const spec = registry.get(ref.key);\n if (!spec) {\n missing.push({ type: 'feature', identifier: ref.key });\n continue;\n }\n resolved.push(spec);\n }\n return resolved;\n}\n\nfunction resolvePointerRecord<TSpec>(\n record: Record<string, SpecPointer>,\n registry:\n | { get(name: string, version?: number): TSpec | undefined }\n | undefined,\n type: 'dataView' | 'workflow',\n missing: MissingReference[]\n): Record<string, TSpec> {\n if (!registry) {\n if (Object.keys(record).length > 0) {\n for (const [slot, pointer] of Object.entries(record)) {\n missing.push({\n type,\n identifier: `${slot} -> ${specPointerKey(pointer)}`,\n });\n }\n }\n return {};\n }\n const resolved: Record<string, TSpec> = {};\n for (const [slot, pointer] of Object.entries(record)) {\n const spec = registry.get(pointer.name, pointer.version);\n if (!spec) {\n missing.push({\n type,\n identifier: `${slot} -> ${specPointerKey(pointer)}`,\n });\n continue;\n }\n resolved[slot] = spec;\n }\n return resolved;\n}\n\nfunction resolvePolicies(\n policies: PolicyRef[],\n registry: PolicyRegistry | undefined,\n missing: MissingReference[]\n): PolicySpec[] {\n if (!registry) {\n if (policies.length > 0) {\n for (const policy of policies) {\n missing.push({\n type: 'policy',\n identifier: policyKey(policy),\n });\n }\n }\n return [];\n }\n const resolved: PolicySpec[] = [];\n for (const policy of policies) {\n const spec = registry.get(policy.name, policy.version);\n if (!spec) {\n missing.push({\n type: 'policy',\n identifier: policyKey(policy),\n });\n continue;\n }\n resolved.push(spec);\n }\n return resolved;\n}\n\nfunction resolveThemeBinding(\n binding: AppThemeBinding | undefined,\n registry: ThemeRegistry | undefined\n): {\n theme?: ThemeSpec;\n fallbacks: ThemeSpec[];\n themeMissing: MissingReference[];\n} {\n const themeMissing: MissingReference[] = [];\n if (!binding) {\n return { theme: undefined, fallbacks: [], themeMissing };\n }\n if (!registry) {\n themeMissing.push({\n type: 'theme',\n identifier: `${binding.primary.name}.v${binding.primary.version}`,\n });\n for (const fallback of binding.fallbacks ?? []) {\n themeMissing.push({\n type: 'theme',\n identifier: `${fallback.name}.v${fallback.version}`,\n });\n }\n return { theme: undefined, fallbacks: [], themeMissing };\n }\n const theme = registry.get(binding.primary.name, binding.primary.version);\n if (!theme) {\n themeMissing.push({\n type: 'theme',\n identifier: `${binding.primary.name}.v${binding.primary.version}`,\n });\n }\n const fallbacks: ThemeSpec[] = [];\n for (const fallback of binding.fallbacks ?? []) {\n const spec = registry.get(fallback.name, fallback.version);\n if (!spec) {\n themeMissing.push({\n type: 'theme',\n identifier: `${fallback.name}.v${fallback.version}`,\n });\n continue;\n }\n fallbacks.push(spec);\n }\n return { theme: theme ?? undefined, fallbacks, themeMissing };\n}\n\nfunction resolveTelemetryBinding(\n binding: TelemetryBinding | undefined,\n registry: TelemetryRegistry | undefined\n): { telemetry?: TelemetrySpec; telemetryMissing: MissingReference[] } {\n const telemetryMissing: MissingReference[] = [];\n if (!binding?.spec) {\n return { telemetry: undefined, telemetryMissing };\n }\n if (!registry) {\n telemetryMissing.push({\n type: 'telemetry',\n identifier: specPointerKey(binding.spec),\n });\n return { telemetry: undefined, telemetryMissing };\n }\n const telemetry = registry.get(binding.spec.name, binding.spec.version);\n if (!telemetry) {\n telemetryMissing.push({\n type: 'telemetry',\n identifier: specPointerKey(binding.spec),\n });\n }\n return { telemetry: telemetry ?? undefined, telemetryMissing };\n}\n\nfunction resolveExperimentsSpecs(\n experiments: ResolvedAppConfig['experiments'],\n registry: ExperimentRegistry | undefined,\n missing: MissingReference[]\n): { active: ExperimentSpec[]; paused: ExperimentSpec[] } {\n const resolveList = (refs: ExperimentRef[]): ExperimentSpec[] => {\n if (refs.length === 0) return [];\n if (!registry) {\n for (const ref of refs) {\n missing.push({\n type: 'experiment',\n identifier: experimentKey(ref),\n });\n }\n return [];\n }\n const resolved: ExperimentSpec[] = [];\n for (const ref of refs) {\n const spec = registry.get(ref.name, ref.version);\n if (!spec) {\n missing.push({\n type: 'experiment',\n identifier: experimentKey(ref),\n });\n continue;\n }\n resolved.push(spec);\n }\n return resolved;\n };\n\n return {\n active: resolveList(experiments.active),\n paused: resolveList(experiments.paused),\n };\n}\n\nfunction capabilityKey(ref: CapabilityRef) {\n return `${ref.key}${ref.version ? `.v${ref.version}` : ''}`;\n}\n\nfunction featureKey(ref: FeatureRef) {\n return ref.key;\n}\n\nfunction specPointerKey(pointer: SpecPointer) {\n return `${pointer.name}${pointer.version ? `.v${pointer.version}` : ''}`;\n}\n\nfunction policyKey(ref: PolicyRef) {\n return `${ref.name}${ref.version ? `.v${ref.version}` : ''}`;\n}\n\nfunction experimentKey(ref: ExperimentRef) {\n return `${ref.name}${ref.version ? `.v${ref.version}` : ''}`;\n}\n\nfunction dedupeRefs<T>(\n refs: T[],\n keyFn: (value: T) => string\n): T[] {\n const map = new Map<string, T>();\n for (const ref of refs) {\n map.set(keyFn(ref), ref);\n }\n return [...map.values()];\n}\n\nfunction dedupeStrings(values: string[]): string[] {\n return [...new Set(values)];\n}\n\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"spec.d.ts","names":[],"sources":["../../src/app-config/spec.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;;;;;UAgBiB,WAAA;;EAAA,OAAA,CAAA,EAAA,MAAW;AAK5B;AAUiB,UAVA,cAAA,CAUyB;EAKzB,IAAA,EAAA,MAAA;EAIG,KAAA,CAAA,EAAA,MAAA;EAEH,QAAA,CAAA,EAAA,MAAA;EAEQ,QAAA,CAAA,EAAA,MAAA;EAAa,KAAA,CAAA,EAlB5B,SAkB4B;EAOrB,WAAA,CAAA,EAAA,MAAgB;EAOhB,UAAA,CAAA,EA9BF,aA8BkB;AAMjC;AAKiB,UAtCA,yBAAA,CAsCyB;EASzB,IAAA,EAAA,MAAA;EACT,OAAA,EAAA,MAAA;;AAGO,UA9CE,kBAAA,CA8CF;EAGD;EACA,MAAA,EAAA,MAAA;EAEO;EACR,gBAAA,EAjDO,mBAiDP;EACU;EACM,YAAA,CAAA,EAjDZ,wBAiDY,EAAA;EAAf;EACe,oBAAA,CAAA,EAhDJ,aAgDI,EAAA;EAAf;EACD,QAAA,CAAA,EAAA,OAAA;EACH;EACI,WAAA,CAAA,EAAA,MAAA;;AAGD,UA/CI,gBAAA,CA+CJ;EAEI,GAAA,EAAA,MAAA;EACN,OAAA,EAAA,OAAA;EAAc,OAAA,CAAA,EAAA,MAAA;EAOZ,WAAA,CAAA,EAAA,MAAA;;AAYH,UA9DO,gBAAA,CA8DP;EAI6B,IAAA,CAAA,EAjE9B,WAiE8B;EAAgB,cAAA,CAAA,EAAA,MAAA,EAAA;EAiBvC,iBAAA,CAAA,EAhFM,MAgFa,CAAA,MAAA,EAAO,MAAA,CAAA;AAI1C;AASU,UA1FO,eAAA,CA0FP;EAGe,OAAA,EA5Fd,QA4Fc;EAIF,SAAA,CAAA,EA/FT,QA+FS,EAAA;;AACI,UA7FV,gBAAA,SAAyB,aA6Ff,CAAA;EAGV;EAKA,IAAA,EAAA,MAAA;EAUA;EACT,OAAA,EAAA,MAAA;EAEK;EACC,KAAA,EAAA,MAAA;;AAIA,UA9GG,gBAAA,CA8GH;EAEQ,IAAA,EA/Gd,gBA+Gc;EACA,YAAA,CAAA,EAAA;IACC,OAAA,CAAA,EA/GT,aA+GS,EAAA;IAET,QAAA,CAAA,EAhHC,aAgHD,EAAA;EACE,CAAA;EAGL,QAAA,CAAA,EAAA;IAEa,OAAA,CAAA,EAnHV,UAmHU,EAAA;IAGX,OAAA,CAAA,EArHC,UAqHD,EAAA;EACA,CAAA;EAEI,gBAAA,CAAA,EAtHI,kBAsHJ,EAAA;EACE,QAAA,CAAA,EAtHN,gBAsHM;EACF,kBAAA,CAAA,EAtHM,yBAsHN;EACH,SAAA,CAAA,EAtHA,MAsHA,CAAA,MAAA,EAtHe,WAsHf,CAAA;EAEK,SAAA,CAAA,EAvHL,MAuHK,CAAA,MAAA,EAvHU,WAuHV,CAAA;EACC,QAAA,CAAA,EAvHP,SAuHO,EAAA;EAGN,KAAA,CAAA,EAzHJ,eAyHI;EAED,SAAA,CAAA,EA1HC,gBA0HD;EAAoB,WAAA,CAAA,EAAA;aAxHpB;aACA;;iBAEI;WACN;;;cAOE,oBAAA;;iBAGI;UASP;uCAI6B;;iBAiBvB,mBAAA,OAA0B;UAIzB,mBAAA;;;;;;;;;UASP;;;yBAGe;;;;uBAIF;uBACA;;UAGN,kBAAA;;YAEL;;UAGK,mBAAA;;;;;WAKN;;gBAEK;;UAGC,eAAA;QACT;;aAEK;cACC;;;cAGA;cACA;;sBAEQ;sBACA;uBACC;;cAET;gBACE;;;WAGL;;wBAEa;;;aAGX;aACA;;iBAEI;mBACE;iBACF;cACH;;mBAEK;oBACC;;;cAGN;;aAED"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"spec.js","names":["latest: AppBlueprintSpec | undefined"],"sources":["../../src/app-config/spec.ts"],"sourcesContent":["import type { OwnerShipMeta } from '../ownership';\nimport type { CapabilityRef } from '../capabilities';\nimport type { FeatureRef } from '../features';\nimport type { PolicyRef } from '../policy/spec';\nimport type { ThemeRef } from '../themes';\nimport type { ExperimentRef } from '../experiments/spec';\nimport type {\n IntegrationCategory,\n IntegrationOwnershipMode,\n} from '../integrations/spec';\nimport type { AppIntegrationBinding } from '../integrations/binding';\nimport type { AppKnowledgeBinding } from '../knowledge/binding';\nimport type { BrandingDefaults, TenantBrandingConfig } from './branding';\nimport type { Locale, TranslationEntry } from '../translations/catalog';\nimport type { ConfigStatus } from './lifecycle';\n\nexport interface SpecPointer {\n name: string;\n version?: number;\n}\n\nexport interface AppRouteConfig {\n path: string;\n label?: string;\n dataView?: string;\n workflow?: string;\n guard?: PolicyRef;\n featureFlag?: string;\n experiment?: ExperimentRef;\n}\n\nexport interface TranslationCatalogPointer {\n name: string;\n version: number;\n}\n\nexport interface AppIntegrationSlot {\n /** Slot identifier unique within the blueprint (e.g., \"primaryPayments\"). */\n slotId: string;\n /** Integration category required to satisfy this slot. */\n requiredCategory: IntegrationCategory;\n /** Ownership modes allowed for this slot (defaults to any supported mode). */\n allowedModes?: IntegrationOwnershipMode[];\n /** Capabilities that must be provided by the integration spec. */\n requiredCapabilities?: CapabilityRef[];\n /** Whether this slot must be satisfied for the app to function. */\n required?: boolean;\n /** Description for App Studio UX. */\n description?: string;\n}\n\nexport interface FeatureFlagState {\n key: string;\n enabled: boolean;\n variant?: string;\n description?: string;\n}\n\nexport interface TelemetryBinding {\n spec?: SpecPointer;\n disabledEvents?: string[];\n samplingOverrides?: Record<string, number>;\n}\n\nexport interface AppThemeBinding {\n primary: ThemeRef;\n fallbacks?: ThemeRef[];\n}\n\nexport interface AppBlueprintMeta extends OwnerShipMeta {\n /** Fully qualified blueprint name (e.g. \"artisan.app\"). */\n name: string;\n /** Versioned definition of the blueprint. Increment on breaking changes. */\n version: number;\n /** Logical application id (e.g. \"artisan\"). */\n appId: string;\n}\n\nexport interface AppBlueprintSpec {\n meta: AppBlueprintMeta;\n capabilities?: {\n enabled?: CapabilityRef[];\n disabled?: CapabilityRef[];\n };\n features?: {\n include?: FeatureRef[];\n exclude?: FeatureRef[];\n };\n integrationSlots?: AppIntegrationSlot[];\n branding?: BrandingDefaults;\n translationCatalog?: TranslationCatalogPointer;\n dataViews?: Record<string, SpecPointer>;\n workflows?: Record<string, SpecPointer>;\n policies?: PolicyRef[];\n theme?: AppThemeBinding;\n telemetry?: TelemetryBinding;\n experiments?: {\n active?: ExperimentRef[];\n paused?: ExperimentRef[];\n };\n featureFlags?: FeatureFlagState[];\n routes?: AppRouteConfig[];\n notes?: string;\n}\n\nconst blueprintKey = (meta: Pick<AppBlueprintMeta, 'name' | 'version'>) =>\n `${meta.name}.v${meta.version}`;\n\nexport class AppBlueprintRegistry {\n private readonly items = new Map<string, AppBlueprintSpec>();\n\n register(spec: AppBlueprintSpec): this {\n const key = blueprintKey(spec.meta);\n if (this.items.has(key)) {\n throw new Error(`Duplicate AppBlueprint ${key}`);\n }\n this.items.set(key, spec);\n return this;\n }\n\n list(): AppBlueprintSpec[] {\n return [...this.items.values()];\n }\n\n get(name: string, version?: number): AppBlueprintSpec | undefined {\n if (version != null) {\n return this.items.get(blueprintKey({ name, version }));\n }\n let latest: AppBlueprintSpec | 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 makeAppBlueprintKey(meta: AppBlueprintMeta) {\n return blueprintKey(meta);\n}\n\nexport interface TenantAppConfigMeta {\n id: string;\n tenantId: string;\n appId: string;\n blueprintName: string;\n blueprintVersion: number;\n environment?: string;\n /** Monotonic version for auditing changes to the tenant config. */\n version: number;\n status: ConfigStatus;\n createdBy?: string;\n publishedBy?: string;\n publishedAt?: string | Date;\n rolledBackFrom?: number;\n rolledBackTo?: number;\n changeSummary?: string;\n createdAt?: string | Date;\n updatedAt?: string | Date;\n}\n\nexport interface TenantSpecOverride {\n slot: string;\n pointer?: SpecPointer | null;\n}\n\nexport interface TenantRouteOverride {\n path: string;\n label?: string | null;\n dataView?: string | null;\n workflow?: string | null;\n guard?: (PolicyRef | null);\n featureFlag?: string | null;\n experiment?: (ExperimentRef | null);\n}\n\nexport interface TenantAppConfig {\n meta: TenantAppConfigMeta;\n capabilities?: {\n enable?: CapabilityRef[];\n disable?: CapabilityRef[];\n };\n features?: {\n include?: FeatureRef[];\n exclude?: FeatureRef[];\n };\n dataViewOverrides?: TenantSpecOverride[];\n workflowOverrides?: TenantSpecOverride[];\n additionalPolicies?: PolicyRef[];\n themeOverride?: {\n primary?: ThemeRef | null;\n fallbacks?: ThemeRef[];\n };\n telemetryOverride?: {\n spec?: SpecPointer | null;\n disabledEvents?: string[];\n samplingOverrides?: Record<string, number>;\n };\n experiments?: {\n active?: ExperimentRef[];\n paused?: ExperimentRef[];\n };\n featureFlags?: FeatureFlagState[];\n routeOverrides?: TenantRouteOverride[];\n integrations?: AppIntegrationBinding[];\n knowledge?: AppKnowledgeBinding[];\n locales?: {\n defaultLocale: Locale;\n enabledLocales: Locale[];\n };\n translationOverrides?: {\n entries?: TranslationEntry[];\n };\n branding?: TenantBrandingConfig;\n notes?: string;\n}\n\n"],"mappings":"AAyGA,MAAM,EAAgB,GACpB,GAAG,EAAK,KAAK,IAAI,EAAK,UAExB,IAAa,EAAb,KAAkC,CAChC,MAAyB,IAAI,IAE7B,SAAS,EAA8B,CACrC,IAAM,EAAM,EAAa,EAAK,KAAK,CACnC,GAAI,KAAK,MAAM,IAAI,EAAI,CACrB,MAAU,MAAM,0BAA0B,IAAM,CAGlD,OADA,KAAK,MAAM,IAAI,EAAK,EAAK,CAClB,KAGT,MAA2B,CACzB,MAAO,CAAC,GAAG,KAAK,MAAM,QAAQ,CAAC,CAGjC,IAAI,EAAc,EAAgD,CAChE,GAAI,GAAW,KACb,OAAO,KAAK,MAAM,IAAI,EAAa,CAAE,OAAM,UAAS,CAAC,CAAC,CAExD,IAAIA,EACA,EAAa,KACjB,IAAK,IAAM,KAAQ,KAAK,MAAM,QAAQ,CAChC,EAAK,KAAK,OAAS,GACnB,EAAK,KAAK,QAAU,IACtB,EAAa,EAAK,KAAK,QACvB,EAAS,GAGb,OAAO,IAIX,SAAgB,EAAoB,EAAwB,CAC1D,OAAO,EAAa,EAAK"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"validation.d.ts","names":[],"sources":["../../src/app-config/validation.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;;;KAkBY,kBAAA;UAEK,eAAA;EAFL,IAAA,EAAA,MAAA;EAEK,QAAA,EAEL,kBAFoB;EASf,IAAA,EAAA,MAAA;EAEP,OAAA,EAAA,MAAA;EACE,UAAA,CAAA,EAAA,MAAA;EACJ,OAAA,CAAA,EAAA,MAAA;;AAGS,UAPA,gBAAA,CAOiB;EACb,KAAA,EAAA,OAAA;EACD,MAAA,EAPV,eAOU,EAAA;EACC,QAAA,EAPT,eAOS,EAAA;EACJ,IAAA,EAPT,eAOS,EAAA;;AAEH,UANG,iBAAA,CAMH;EACQ,gBAAA,CAAA,EAND,uBAMC;EACF,eAAA,CAAA,EANA,sBAMA;EAGZ,gBAAA,CAAA,EARa,qBAQb,EAAA;EACA,YAAA,CAAA,EARS,kBAQT;EAGA,SAAA,CAAA,EAVM,gBAUN;EACA,SAAA,CAAA,EAVM,gBAUN;EAA2B,iBAAA,CAAA,EATb,qBASa,EAAA;EA0HnB,eAAA,CAAA,EAlII,eAkIU,EAAA;EACjB,mBAAA,CAAA,EAAA;IACH,QAAA,CAAA,EAjIF,0BAiIE,GAhIF,0BAgIE,EAAA,GAAA,SAAA;IACC,SAAA,CAAA,EA9HH,2BA8HG,GA7HH,2BA6HG,EAAA,GAAA,SAAA;EACR,CAAA;;AAWa,iBAfA,cAAA,CAeiB,SAAA,EAdpB,gBAcoB,EAAA,MAAA,EAbvB,eAauB,EAAA,OAAA,CAAA,EAZtB,iBAYsB,CAAA,EAX9B,gBAW8B;AACpB,iBADG,iBAAA,CACH,SAAA,EAAA,gBAAA,EAAA,OAAA,CAAA,EACF,iBADE,CAAA,EAEV,gBAFU;AACF,iBAMK,oBAAA,CANL,SAAA,EAOE,gBAPF,EAAA,MAAA,EAQD,eARC,EAAA,OAAA,CAAA,EASA,iBATA,CAAA,EAUR,gBAVQ;AACR,iBAca,sBAAA,CAdb,SAAA,EAeU,gBAfV,EAAA,QAAA,EAgBS,iBAhBT,EAAA,OAAA,CAAA,EAiBQ,iBAjBR,CAAA,EAkBA,gBAlBA"}