@lssm/lib.contracts 1.41.1 → 1.42.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (499) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +7 -4
  3. package/dist/_virtual/rolldown_runtime.js +37 -1
  4. package/dist/app-config/app-config.feature.d.ts +11 -0
  5. package/dist/app-config/app-config.feature.js +54 -1
  6. package/dist/app-config/branding.d.ts +55 -0
  7. package/dist/app-config/contracts.d.ts +245 -0
  8. package/dist/app-config/contracts.js +395 -1
  9. package/dist/app-config/docs/app-config.docblock.d.ts +6 -0
  10. package/dist/app-config/docs/app-config.docblock.js +21 -220
  11. package/dist/app-config/events.d.ts +122 -0
  12. package/dist/app-config/events.js +174 -1
  13. package/dist/app-config/index.d.ts +9 -0
  14. package/dist/app-config/index.js +8 -1
  15. package/dist/app-config/lifecycle-contracts.d.ts +273 -0
  16. package/dist/app-config/lifecycle-contracts.js +440 -1
  17. package/dist/app-config/lifecycle.d.ts +27 -0
  18. package/dist/app-config/runtime.d.ts +117 -0
  19. package/dist/app-config/runtime.js +617 -1
  20. package/dist/app-config/spec.d.ts +172 -0
  21. package/dist/app-config/spec.js +36 -1
  22. package/dist/app-config/validation.d.ts +49 -0
  23. package/dist/app-config/validation.js +538 -1
  24. package/dist/capabilities/capabilities.d.ts +48 -0
  25. package/dist/capabilities/capabilities.js +50 -0
  26. package/dist/capabilities/docs/capabilities.docblock.d.ts +6 -0
  27. package/dist/capabilities/docs/capabilities.docblock.js +21 -1
  28. package/dist/capabilities/index.d.ts +3 -0
  29. package/dist/capabilities/index.js +4 -0
  30. package/dist/capabilities/openbanking.d.ts +10 -0
  31. package/dist/capabilities/openbanking.js +92 -1
  32. package/dist/client/index.d.ts +6 -0
  33. package/dist/client/index.js +9 -1
  34. package/dist/client/react/drivers/rn-reusables.d.ts +22 -0
  35. package/dist/client/react/drivers/rn-reusables.js +21 -1
  36. package/dist/client/react/drivers/shadcn.d.ts +12 -0
  37. package/dist/client/react/drivers/shadcn.js +11 -1
  38. package/dist/client/react/feature-render.d.ts +21 -0
  39. package/dist/client/react/feature-render.js +44 -1
  40. package/dist/client/react/form-render.d.ts +92 -0
  41. package/dist/client/react/form-render.js +298 -1
  42. package/dist/client/react/index.d.ts +5 -0
  43. package/dist/client/react/index.js +8 -1
  44. package/dist/contract-registry/index.d.ts +3 -0
  45. package/dist/contract-registry/index.js +3 -1
  46. package/dist/contract-registry/schemas.d.ts +124 -0
  47. package/dist/contract-registry/schemas.js +61 -1
  48. package/dist/contract-registry/types.d.ts +46 -0
  49. package/dist/data-views/data-views.d.ts +138 -0
  50. package/dist/data-views/data-views.js +58 -0
  51. package/dist/data-views/docs/data-views.docblock.d.ts +6 -0
  52. package/dist/data-views/docs/data-views.docblock.js +21 -1
  53. package/dist/data-views/index.d.ts +4 -0
  54. package/dist/data-views/index.js +5 -0
  55. package/dist/data-views/query-generator.d.ts +40 -0
  56. package/dist/data-views/query-generator.js +48 -1
  57. package/dist/data-views/runtime.d.ts +27 -0
  58. package/dist/data-views/runtime.js +39 -1
  59. package/dist/docs/accessibility_wcag_compliance_specs.docblock.d.ts +6 -0
  60. package/dist/docs/accessibility_wcag_compliance_specs.docblock.js +17 -350
  61. package/dist/docs/index.d.ts +6 -0
  62. package/dist/docs/index.js +27 -1
  63. package/dist/docs/meta.docs.d.ts +6 -0
  64. package/dist/docs/meta.docs.js +18 -2
  65. package/dist/docs/presentations.d.ts +33 -0
  66. package/dist/docs/presentations.js +64 -1
  67. package/dist/docs/registry.d.ts +23 -0
  68. package/dist/docs/registry.js +51 -1
  69. package/dist/docs/tech/auth/better-auth-nextjs.docblock.d.ts +6 -0
  70. package/dist/docs/tech/auth/better-auth-nextjs.docblock.js +25 -2
  71. package/dist/docs/tech/contracts/README.docblock.d.ts +6 -0
  72. package/dist/docs/tech/contracts/README.docblock.js +21 -1
  73. package/dist/docs/tech/contracts/create-subscription.docblock.d.ts +6 -0
  74. package/dist/docs/tech/contracts/create-subscription.docblock.js +21 -1
  75. package/dist/docs/tech/contracts/graphql-typed-outputs.docblock.d.ts +6 -0
  76. package/dist/docs/tech/contracts/graphql-typed-outputs.docblock.js +21 -180
  77. package/dist/docs/tech/contracts/migrations.docblock.d.ts +6 -0
  78. package/dist/docs/tech/contracts/migrations.docblock.js +21 -1
  79. package/dist/docs/tech/contracts/openapi-export.docblock.d.ts +6 -0
  80. package/dist/docs/tech/contracts/openapi-export.docblock.js +25 -5
  81. package/dist/docs/tech/contracts/ops-to-presentation-linking.docblock.d.ts +6 -0
  82. package/dist/docs/tech/contracts/ops-to-presentation-linking.docblock.js +19 -60
  83. package/dist/docs/tech/contracts/overlays.docblock.d.ts +6 -0
  84. package/dist/docs/tech/contracts/overlays.docblock.js +21 -68
  85. package/dist/docs/tech/contracts/tests.docblock.d.ts +6 -0
  86. package/dist/docs/tech/contracts/tests.docblock.js +21 -132
  87. package/dist/docs/tech/contracts/themes.docblock.d.ts +6 -0
  88. package/dist/docs/tech/contracts/themes.docblock.js +21 -1
  89. package/dist/docs/tech/contracts/vertical-pocket-family-office.docblock.d.ts +6 -0
  90. package/dist/docs/tech/contracts/vertical-pocket-family-office.docblock.js +21 -106
  91. package/dist/docs/tech/lifecycle-stage-system.docblock.d.ts +6 -0
  92. package/dist/docs/tech/lifecycle-stage-system.docblock.js +17 -213
  93. package/dist/docs/tech/llm/llm-integration.docblock.d.ts +7 -0
  94. package/dist/docs/tech/llm/llm-integration.docblock.js +76 -7
  95. package/dist/docs/tech/mcp-endpoints.docblock.d.ts +6 -0
  96. package/dist/docs/tech/mcp-endpoints.docblock.js +38 -1
  97. package/dist/docs/tech/presentation-runtime.docblock.d.ts +6 -0
  98. package/dist/docs/tech/presentation-runtime.docblock.js +17 -1
  99. package/dist/docs/tech/schema/README.docblock.d.ts +6 -0
  100. package/dist/docs/tech/schema/README.docblock.js +21 -262
  101. package/dist/docs/tech/studio/learning-events.docblock.d.ts +6 -0
  102. package/dist/docs/tech/studio/learning-events.docblock.js +49 -1
  103. package/dist/docs/tech/studio/learning-journeys.docblock.d.ts +6 -0
  104. package/dist/docs/tech/studio/learning-journeys.docblock.js +25 -2
  105. package/dist/docs/tech/studio/platform-admin-panel.docblock.d.ts +6 -0
  106. package/dist/docs/tech/studio/platform-admin-panel.docblock.js +24 -2
  107. package/dist/docs/tech/studio/project-access-teams.docblock.d.ts +6 -0
  108. package/dist/docs/tech/studio/project-access-teams.docblock.js +26 -16
  109. package/dist/docs/tech/studio/project-routing.docblock.d.ts +6 -0
  110. package/dist/docs/tech/studio/project-routing.docblock.js +68 -1
  111. package/dist/docs/tech/studio/sandbox-unlogged.docblock.d.ts +6 -0
  112. package/dist/docs/tech/studio/sandbox-unlogged.docblock.js +23 -2
  113. package/dist/docs/tech/studio/team-invitations.docblock.d.ts +6 -0
  114. package/dist/docs/tech/studio/team-invitations.docblock.js +41 -36
  115. package/dist/docs/tech/studio/workspace-ops.docblock.d.ts +6 -0
  116. package/dist/docs/tech/studio/workspace-ops.docblock.js +48 -1
  117. package/dist/docs/tech/studio/workspaces.docblock.d.ts +6 -0
  118. package/dist/docs/tech/studio/workspaces.docblock.js +24 -2
  119. package/dist/docs/tech/telemetry-ingest.docblock.d.ts +6 -0
  120. package/dist/docs/tech/telemetry-ingest.docblock.js +37 -3
  121. package/dist/docs/tech/templates/runtime.docblock.d.ts +6 -0
  122. package/dist/docs/tech/templates/runtime.docblock.js +21 -1
  123. package/dist/docs/tech/vscode-extension.docblock.d.ts +6 -0
  124. package/dist/docs/tech/vscode-extension.docblock.js +37 -3
  125. package/dist/docs/tech/workflows/overview.docblock.d.ts +6 -0
  126. package/dist/docs/tech/workflows/overview.docblock.js +21 -1
  127. package/dist/docs/tech-contracts.docs.d.ts +6 -0
  128. package/dist/docs/tech-contracts.docs.js +27 -7
  129. package/dist/docs/types.d.ts +41 -0
  130. package/dist/events.d.ts +47 -0
  131. package/dist/events.js +19 -1
  132. package/dist/experiments/docs/experiments.docblock.d.ts +6 -0
  133. package/dist/experiments/docs/experiments.docblock.js +21 -128
  134. package/dist/experiments/evaluator.d.ts +37 -0
  135. package/dist/experiments/evaluator.js +101 -1
  136. package/dist/experiments/spec-resolver.d.ts +17 -0
  137. package/dist/experiments/spec.d.ts +82 -0
  138. package/dist/experiments/spec.js +33 -1
  139. package/dist/features.d.ts +104 -0
  140. package/dist/features.js +91 -1
  141. package/dist/forms/docs/forms.docblock.d.ts +6 -0
  142. package/dist/forms/docs/forms.docblock.js +21 -1
  143. package/dist/forms/forms.d.ts +266 -0
  144. package/dist/forms/forms.js +146 -0
  145. package/dist/forms/index.d.ts +2 -0
  146. package/dist/forms/index.js +3 -0
  147. package/dist/index.d.ts +142 -0
  148. package/dist/index.js +119 -1
  149. package/dist/install.d.ts +77 -0
  150. package/dist/install.js +40 -1
  151. package/dist/integrations/binding.d.ts +17 -0
  152. package/dist/integrations/connection.d.ts +51 -0
  153. package/dist/integrations/docs/integrations.docblock.d.ts +6 -0
  154. package/dist/integrations/docs/integrations.docblock.js +94 -1
  155. package/dist/integrations/health.d.ts +21 -0
  156. package/dist/integrations/health.js +69 -1
  157. package/dist/integrations/index.d.ts +34 -0
  158. package/dist/integrations/index.js +23 -1
  159. package/dist/integrations/integrations.feature.d.ts +11 -0
  160. package/dist/integrations/integrations.feature.js +60 -0
  161. package/dist/integrations/openbanking/contracts/accounts.d.ts +289 -0
  162. package/dist/integrations/openbanking/contracts/accounts.js +236 -1
  163. package/dist/integrations/openbanking/contracts/balances.d.ts +165 -0
  164. package/dist/integrations/openbanking/contracts/balances.js +166 -1
  165. package/dist/integrations/openbanking/contracts/index.d.ts +10 -0
  166. package/dist/integrations/openbanking/contracts/index.js +12 -1
  167. package/dist/integrations/openbanking/contracts/transactions.d.ts +213 -0
  168. package/dist/integrations/openbanking/contracts/transactions.js +217 -1
  169. package/dist/integrations/openbanking/guards.d.ts +12 -0
  170. package/dist/integrations/openbanking/guards.js +33 -1
  171. package/dist/integrations/openbanking/models.d.ts +228 -0
  172. package/dist/integrations/openbanking/models.js +240 -1
  173. package/dist/integrations/openbanking/openbanking.feature.d.ts +11 -0
  174. package/dist/integrations/openbanking/openbanking.feature.js +69 -1
  175. package/dist/integrations/openbanking/telemetry.d.ts +15 -0
  176. package/dist/integrations/openbanking/telemetry.js +39 -1
  177. package/dist/integrations/operations.d.ts +437 -0
  178. package/dist/integrations/operations.js +392 -0
  179. package/dist/integrations/providers/calendar.d.ts +78 -0
  180. package/dist/integrations/providers/elevenlabs.d.ts +7 -0
  181. package/dist/integrations/providers/elevenlabs.js +55 -1
  182. package/dist/integrations/providers/email.d.ts +86 -0
  183. package/dist/integrations/providers/embedding.d.ts +24 -0
  184. package/dist/integrations/providers/gcs-storage.d.ts +7 -0
  185. package/dist/integrations/providers/gcs-storage.js +78 -1
  186. package/dist/integrations/providers/gmail.d.ts +7 -0
  187. package/dist/integrations/providers/gmail.js +90 -1
  188. package/dist/integrations/providers/google-calendar.d.ts +7 -0
  189. package/dist/integrations/providers/google-calendar.js +69 -1
  190. package/dist/integrations/providers/impls/elevenlabs-voice.d.ts +20 -0
  191. package/dist/integrations/providers/impls/elevenlabs-voice.js +95 -1
  192. package/dist/integrations/providers/impls/gcs-storage.d.ts +24 -0
  193. package/dist/integrations/providers/impls/gcs-storage.js +88 -1
  194. package/dist/integrations/providers/impls/gmail-inbound.d.ts +26 -0
  195. package/dist/integrations/providers/impls/gmail-inbound.js +200 -1
  196. package/dist/integrations/providers/impls/gmail-outbound.d.ts +18 -0
  197. package/dist/integrations/providers/impls/gmail-outbound.js +104 -5
  198. package/dist/integrations/providers/impls/google-calendar.d.ts +23 -0
  199. package/dist/integrations/providers/impls/google-calendar.js +154 -1
  200. package/dist/integrations/providers/impls/index.d.ts +15 -0
  201. package/dist/integrations/providers/impls/index.js +16 -1
  202. package/dist/integrations/providers/impls/mistral-embedding.d.ts +23 -0
  203. package/dist/integrations/providers/impls/mistral-embedding.js +41 -1
  204. package/dist/integrations/providers/impls/mistral-llm.d.ts +31 -0
  205. package/dist/integrations/providers/impls/mistral-llm.js +247 -1
  206. package/dist/integrations/providers/impls/postmark-email.d.ts +19 -0
  207. package/dist/integrations/providers/impls/postmark-email.js +55 -1
  208. package/dist/integrations/providers/impls/powens-client.d.ts +124 -0
  209. package/dist/integrations/providers/impls/powens-client.js +171 -1
  210. package/dist/integrations/providers/impls/powens-openbanking.d.ts +27 -0
  211. package/dist/integrations/providers/impls/powens-openbanking.js +218 -1
  212. package/dist/integrations/providers/impls/provider-factory.d.ts +26 -0
  213. package/dist/integrations/providers/impls/provider-factory.js +145 -1
  214. package/dist/integrations/providers/impls/qdrant-vector.d.ts +24 -0
  215. package/dist/integrations/providers/impls/qdrant-vector.js +69 -1
  216. package/dist/integrations/providers/impls/stripe-payments.d.ts +28 -0
  217. package/dist/integrations/providers/impls/stripe-payments.js +202 -1
  218. package/dist/integrations/providers/impls/twilio-sms.d.ts +20 -0
  219. package/dist/integrations/providers/impls/twilio-sms.js +58 -1
  220. package/dist/integrations/providers/index.d.ts +22 -0
  221. package/dist/integrations/providers/index.js +13 -1
  222. package/dist/integrations/providers/llm.d.ts +82 -0
  223. package/dist/integrations/providers/mistral.d.ts +7 -0
  224. package/dist/integrations/providers/mistral.js +71 -1
  225. package/dist/integrations/providers/openbanking.d.ts +128 -0
  226. package/dist/integrations/providers/payments.d.ts +109 -0
  227. package/dist/integrations/providers/postmark.d.ts +7 -0
  228. package/dist/integrations/providers/postmark.js +71 -1
  229. package/dist/integrations/providers/powens.d.ts +7 -0
  230. package/dist/integrations/providers/powens.js +119 -1
  231. package/dist/integrations/providers/qdrant.d.ts +7 -0
  232. package/dist/integrations/providers/qdrant.js +76 -1
  233. package/dist/integrations/providers/registry.d.ts +11 -0
  234. package/dist/integrations/providers/registry.js +34 -1
  235. package/dist/integrations/providers/sms.d.ts +34 -0
  236. package/dist/integrations/providers/storage.d.ts +60 -0
  237. package/dist/integrations/providers/stripe.d.ts +7 -0
  238. package/dist/integrations/providers/stripe.js +86 -1
  239. package/dist/integrations/providers/twilio-sms.d.ts +7 -0
  240. package/dist/integrations/providers/twilio-sms.js +64 -1
  241. package/dist/integrations/providers/vector-store.d.ts +43 -0
  242. package/dist/integrations/providers/voice.d.ts +34 -0
  243. package/dist/integrations/runtime.d.ts +99 -0
  244. package/dist/integrations/runtime.js +186 -1
  245. package/dist/integrations/secrets/aws-secret-manager.d.ts +31 -0
  246. package/dist/integrations/secrets/aws-secret-manager.js +231 -1
  247. package/dist/integrations/secrets/env-secret-provider.d.ts +31 -0
  248. package/dist/integrations/secrets/env-secret-provider.js +81 -1
  249. package/dist/integrations/secrets/gcp-secret-manager.d.ts +32 -0
  250. package/dist/integrations/secrets/gcp-secret-manager.js +229 -1
  251. package/dist/integrations/secrets/index.d.ts +7 -0
  252. package/dist/integrations/secrets/index.js +8 -1
  253. package/dist/integrations/secrets/manager.d.ts +47 -0
  254. package/dist/integrations/secrets/manager.js +103 -1
  255. package/dist/integrations/secrets/provider.d.ts +52 -0
  256. package/dist/integrations/secrets/provider.js +58 -1
  257. package/dist/integrations/secrets/scaleway-secret-manager.d.ts +38 -0
  258. package/dist/integrations/secrets/scaleway-secret-manager.js +247 -1
  259. package/dist/integrations/secrets-types.d.ts +17 -0
  260. package/dist/integrations/spec.d.ts +75 -0
  261. package/dist/integrations/spec.js +39 -1
  262. package/dist/jobs/define-job.d.ts +18 -0
  263. package/dist/jobs/define-job.js +16 -1
  264. package/dist/jobs/gcp-cloud-tasks.d.ts +41 -0
  265. package/dist/jobs/gcp-cloud-tasks.js +53 -1
  266. package/dist/jobs/gcp-pubsub.d.ts +25 -0
  267. package/dist/jobs/gcp-pubsub.js +39 -1
  268. package/dist/jobs/handlers/gmail-sync-handler.d.ts +9 -0
  269. package/dist/jobs/handlers/gmail-sync-handler.js +9 -1
  270. package/dist/jobs/handlers/index.d.ts +9 -0
  271. package/dist/jobs/handlers/index.js +12 -1
  272. package/dist/jobs/handlers/ping-handler.d.ts +10 -0
  273. package/dist/jobs/handlers/ping-handler.js +15 -1
  274. package/dist/jobs/handlers/storage-document-handler.d.ts +12 -0
  275. package/dist/jobs/handlers/storage-document-handler.js +14 -1
  276. package/dist/jobs/index.d.ts +3 -0
  277. package/dist/jobs/index.js +4 -1
  278. package/dist/jobs/memory-queue.d.ts +18 -0
  279. package/dist/jobs/memory-queue.js +71 -1
  280. package/dist/jobs/queue.d.ts +131 -0
  281. package/dist/jobs/queue.js +33 -1
  282. package/dist/jobs/scaleway-sqs-queue.d.ts +30 -0
  283. package/dist/jobs/scaleway-sqs-queue.js +153 -1
  284. package/dist/jsonschema.d.ts +28 -0
  285. package/dist/jsonschema.js +32 -1
  286. package/dist/knowledge/binding.d.ts +25 -0
  287. package/dist/knowledge/docs/knowledge.docblock.d.ts +6 -0
  288. package/dist/knowledge/docs/knowledge.docblock.js +21 -138
  289. package/dist/knowledge/index.d.ts +11 -0
  290. package/dist/knowledge/index.js +10 -1
  291. package/dist/knowledge/ingestion/document-processor.d.ts +24 -0
  292. package/dist/knowledge/ingestion/document-processor.js +54 -1
  293. package/dist/knowledge/ingestion/embedding-service.d.ts +12 -0
  294. package/dist/knowledge/ingestion/embedding-service.js +25 -1
  295. package/dist/knowledge/ingestion/gmail-adapter.d.ts +18 -0
  296. package/dist/knowledge/ingestion/gmail-adapter.js +50 -5
  297. package/dist/knowledge/ingestion/index.d.ts +6 -0
  298. package/dist/knowledge/ingestion/index.js +7 -1
  299. package/dist/knowledge/ingestion/storage-adapter.d.ts +15 -0
  300. package/dist/knowledge/ingestion/storage-adapter.js +26 -1
  301. package/dist/knowledge/ingestion/vector-indexer.d.ts +18 -0
  302. package/dist/knowledge/ingestion/vector-indexer.js +32 -1
  303. package/dist/knowledge/knowledge.feature.d.ts +11 -0
  304. package/dist/knowledge/knowledge.feature.js +61 -0
  305. package/dist/knowledge/operations.d.ts +318 -0
  306. package/dist/knowledge/operations.js +321 -0
  307. package/dist/knowledge/query/index.d.ts +2 -0
  308. package/dist/knowledge/query/index.js +3 -1
  309. package/dist/knowledge/query/service.d.ts +29 -0
  310. package/dist/knowledge/query/service.js +64 -2
  311. package/dist/knowledge/runtime.d.ts +32 -0
  312. package/dist/knowledge/runtime.js +49 -1
  313. package/dist/knowledge/source.d.ts +32 -0
  314. package/dist/knowledge/spaces/email-threads.d.ts +7 -0
  315. package/dist/knowledge/spaces/email-threads.js +37 -1
  316. package/dist/knowledge/spaces/financial-docs.d.ts +7 -0
  317. package/dist/knowledge/spaces/financial-docs.js +37 -1
  318. package/dist/knowledge/spaces/financial-overview.d.ts +7 -0
  319. package/dist/knowledge/spaces/financial-overview.js +41 -1
  320. package/dist/knowledge/spaces/index.d.ts +7 -0
  321. package/dist/knowledge/spaces/index.js +8 -1
  322. package/dist/knowledge/spaces/product-canon.d.ts +7 -0
  323. package/dist/knowledge/spaces/product-canon.js +37 -1
  324. package/dist/knowledge/spaces/support-faq.d.ts +7 -0
  325. package/dist/knowledge/spaces/support-faq.js +40 -1
  326. package/dist/knowledge/spaces/uploaded-docs.d.ts +7 -0
  327. package/dist/knowledge/spaces/uploaded-docs.js +37 -1
  328. package/dist/knowledge/spec.d.ts +48 -0
  329. package/dist/knowledge/spec.js +39 -1
  330. package/dist/llm/exporters.d.ts +69 -0
  331. package/dist/llm/exporters.js +542 -8
  332. package/dist/llm/index.d.ts +4 -0
  333. package/dist/llm/index.js +4 -1
  334. package/dist/llm/prompts.d.ts +52 -0
  335. package/dist/llm/prompts.js +246 -56
  336. package/dist/llm/types.d.ts +214 -0
  337. package/dist/markdown.d.ts +22 -0
  338. package/dist/markdown.js +119 -3
  339. package/dist/migrations.d.ts +52 -0
  340. package/dist/migrations.js +33 -1
  341. package/dist/onboarding-base.d.ts +138 -0
  342. package/dist/onboarding-base.js +195 -1
  343. package/dist/openapi.d.ts +31 -0
  344. package/dist/openapi.js +75 -1
  345. package/dist/operations/index.d.ts +3 -0
  346. package/dist/operations/index.js +4 -0
  347. package/dist/operations/operation.d.ts +180 -0
  348. package/dist/operations/operation.js +35 -0
  349. package/dist/operations/registry.d.ts +103 -0
  350. package/dist/operations/registry.js +252 -0
  351. package/dist/ownership.d.ts +84 -0
  352. package/dist/ownership.js +38 -1
  353. package/dist/policy/docs/policy.docblock.d.ts +6 -0
  354. package/dist/policy/docs/policy.docblock.js +21 -1
  355. package/dist/policy/engine.d.ts +40 -0
  356. package/dist/policy/engine.js +223 -1
  357. package/dist/policy/index.d.ts +5 -0
  358. package/dist/policy/index.js +5 -0
  359. package/dist/policy/opa-adapter.d.ts +45 -0
  360. package/dist/policy/opa-adapter.js +71 -1
  361. package/dist/policy/registry.d.ts +9 -0
  362. package/dist/policy/registry.js +11 -0
  363. package/dist/policy/spec.d.ts +103 -0
  364. package/dist/policy/spec.js +0 -1
  365. package/dist/presentations/docs/presentations-conventions.docblock.d.ts +6 -0
  366. package/dist/presentations/docs/presentations-conventions.docblock.js +20 -7
  367. package/dist/presentations/index.d.ts +4 -0
  368. package/dist/presentations/index.js +5 -0
  369. package/dist/presentations/presentations.d.ts +50 -0
  370. package/dist/presentations/presentations.js +7 -0
  371. package/dist/presentations/registry.d.ts +10 -0
  372. package/dist/presentations/registry.js +12 -0
  373. package/dist/presentations/transform-engine.d.ts +66 -0
  374. package/dist/presentations/transform-engine.js +282 -0
  375. package/dist/prompt.d.ts +60 -0
  376. package/dist/prompt.js +10 -1
  377. package/dist/promptRegistry.d.ts +15 -0
  378. package/dist/promptRegistry.js +34 -1
  379. package/dist/regenerator/adapters.d.ts +19 -0
  380. package/dist/regenerator/docs/regenerator.docblock.d.ts +6 -0
  381. package/dist/regenerator/docs/regenerator.docblock.js +21 -184
  382. package/dist/regenerator/executor.d.ts +70 -0
  383. package/dist/regenerator/executor.js +86 -1
  384. package/dist/regenerator/index.d.ts +7 -0
  385. package/dist/regenerator/index.js +6 -1
  386. package/dist/regenerator/service.d.ts +33 -0
  387. package/dist/regenerator/service.js +92 -1
  388. package/dist/regenerator/sinks.d.ts +26 -0
  389. package/dist/regenerator/sinks.js +32 -1
  390. package/dist/regenerator/types.d.ts +107 -0
  391. package/dist/regenerator/utils.d.ts +9 -0
  392. package/dist/regenerator/utils.js +51 -1
  393. package/dist/registry-utils.d.ts +106 -0
  394. package/dist/registry-utils.js +122 -0
  395. package/dist/registry.d.ts +30 -0
  396. package/dist/registry.js +58 -1
  397. package/dist/resources.d.ts +64 -0
  398. package/dist/resources.js +50 -1
  399. package/dist/schema-to-markdown.d.ts +54 -0
  400. package/dist/schema-to-markdown.js +214 -10
  401. package/dist/server/contracts-adapter-hydration.d.ts +15 -0
  402. package/dist/server/contracts-adapter-hydration.js +41 -0
  403. package/dist/server/contracts-adapter-input.d.ts +9 -0
  404. package/dist/server/contracts-adapter-input.js +77 -0
  405. package/dist/server/graphql-pothos.d.ts +31 -0
  406. package/dist/server/graphql-pothos.js +127 -1
  407. package/dist/server/index.d.ts +9 -0
  408. package/dist/server/index.js +10 -1
  409. package/dist/server/mcp/createMcpServer.d.ts +15 -0
  410. package/dist/server/mcp/createMcpServer.js +28 -1
  411. package/dist/server/mcp/mcpTypes.d.ts +30 -0
  412. package/dist/server/mcp/registerPresentations.d.ts +7 -0
  413. package/dist/server/mcp/registerPresentations.js +112 -1
  414. package/dist/server/mcp/registerPrompts.d.ts +8 -0
  415. package/dist/server/mcp/registerPrompts.js +36 -2
  416. package/dist/server/mcp/registerResources.d.ts +8 -0
  417. package/dist/server/mcp/registerResources.js +35 -1
  418. package/dist/server/mcp/registerTools.d.ts +8 -0
  419. package/dist/server/mcp/registerTools.js +22 -1
  420. package/dist/server/provider-mcp.d.ts +2 -0
  421. package/dist/server/provider-mcp.js +3 -1
  422. package/dist/server/rest-elysia.d.ts +40 -0
  423. package/dist/server/rest-elysia.js +20 -1
  424. package/dist/server/rest-express.d.ts +16 -0
  425. package/dist/server/rest-express.js +36 -1
  426. package/dist/server/rest-generic.d.ts +32 -0
  427. package/dist/server/rest-generic.js +124 -1
  428. package/dist/server/rest-next-app.d.ts +35 -0
  429. package/dist/server/rest-next-app.js +38 -1
  430. package/dist/server/rest-next-mcp.d.ts +11 -0
  431. package/dist/server/rest-next-mcp.js +45 -1
  432. package/dist/server/rest-next-pages.d.ts +9 -0
  433. package/dist/server/rest-next-pages.js +22 -1
  434. package/dist/telemetry/anomaly.d.ts +27 -0
  435. package/dist/telemetry/anomaly.js +48 -1
  436. package/dist/telemetry/docs/telemetry.docblock.d.ts +6 -0
  437. package/dist/telemetry/docs/telemetry.docblock.js +21 -139
  438. package/dist/telemetry/index.d.ts +4 -0
  439. package/dist/telemetry/index.js +5 -1
  440. package/dist/telemetry/spec.d.ts +91 -0
  441. package/dist/telemetry/spec.js +69 -1
  442. package/dist/telemetry/tracker.d.ts +51 -0
  443. package/dist/telemetry/tracker.js +76 -1
  444. package/dist/tests/index.d.ts +3 -0
  445. package/dist/tests/index.js +4 -1
  446. package/dist/tests/runner.d.ts +43 -0
  447. package/dist/tests/runner.js +150 -1
  448. package/dist/tests/spec.d.ts +89 -0
  449. package/dist/tests/spec.js +33 -1
  450. package/dist/themes.d.ts +53 -0
  451. package/dist/themes.js +39 -1
  452. package/dist/translations/catalog.d.ts +28 -0
  453. package/dist/translations/tenant.d.ts +15 -0
  454. package/dist/types.d.ts +92 -0
  455. package/dist/workflow/adapters/db-adapter.d.ts +46 -0
  456. package/dist/workflow/adapters/db-adapter.js +83 -1
  457. package/dist/workflow/adapters/file-adapter.d.ts +14 -0
  458. package/dist/workflow/adapters/file-adapter.js +11 -1
  459. package/dist/workflow/adapters/index.d.ts +4 -0
  460. package/dist/workflow/adapters/index.js +5 -1
  461. package/dist/workflow/adapters/memory-store.d.ts +18 -0
  462. package/dist/workflow/adapters/memory-store.js +58 -1
  463. package/dist/workflow/expression.d.ts +9 -0
  464. package/dist/workflow/expression.js +99 -1
  465. package/dist/workflow/index.d.ts +10 -0
  466. package/dist/workflow/index.js +9 -1
  467. package/dist/workflow/runner.d.ts +74 -0
  468. package/dist/workflow/runner.js +337 -1
  469. package/dist/workflow/sla-monitor.d.ts +20 -0
  470. package/dist/workflow/sla-monitor.js +47 -1
  471. package/dist/workflow/spec.d.ts +105 -0
  472. package/dist/workflow/spec.js +55 -1
  473. package/dist/workflow/state.d.ts +35 -0
  474. package/dist/workflow/validation.d.ts +29 -0
  475. package/dist/workflow/validation.js +176 -1
  476. package/dist/workspace-config/contractsrc-schema.d.ts +786 -0
  477. package/dist/workspace-config/contractsrc-schema.js +247 -0
  478. package/dist/workspace-config/index.d.ts +2 -0
  479. package/dist/workspace-config/index.js +3 -0
  480. package/package.json +286 -266
  481. package/dist/capabilities.js +0 -1
  482. package/dist/contracts-adapter-hydration.js +0 -1
  483. package/dist/contracts-adapter-input.js +0 -1
  484. package/dist/data-views.js +0 -1
  485. package/dist/docs/PUBLISHING.docblock.js +0 -76
  486. package/dist/docs/tech/PHASE_1_QUICKSTART.docblock.js +0 -383
  487. package/dist/docs/tech/PHASE_2_AI_NATIVE_OPERATIONS.docblock.js +0 -68
  488. package/dist/docs/tech/PHASE_3_AUTO_EVOLUTION.docblock.js +0 -140
  489. package/dist/docs/tech/PHASE_4_PERSONALIZATION_ENGINE.docblock.js +0 -86
  490. package/dist/docs/tech/PHASE_5_ZERO_TOUCH_OPERATIONS.docblock.js +0 -1
  491. package/dist/forms.js +0 -1
  492. package/dist/integrations/contracts.js +0 -1
  493. package/dist/knowledge/contracts.js +0 -1
  494. package/dist/openbanking/docs/openbanking.docblock.js +0 -109
  495. package/dist/presentations.backcompat.js +0 -1
  496. package/dist/presentations.js +0 -1
  497. package/dist/presentations.v2.js +0 -7
  498. package/dist/spec.js +0 -1
  499. /package/dist/{types/all.js → integrations/secrets-types.js} +0 -0
@@ -1 +1,45 @@
1
- import{defaultMcpTool as e,jsonSchemaForSpec as t}from"../jsonschema.js";import{ResourceTemplate as n}from"@modelcontextprotocol/sdk/server/mcp.js";import{createMcpHandler as r}from"mcp-handler";function i(i,a){let o=r(r=>{for(let o of i.listSpecs()){let{input:s,output:c,meta:l}=t(o);if(l.kind===`query`){let t=o.transport?.mcp?.toolName??e(o.meta.name,o.meta.version);r.registerResource(t,new n(`users://{userId}/profile`,{list:void 0}),{description:o.meta.description,inputSchema:s},(async(e,t,n)=>{let r=await i.execute(o.meta.name,o.meta.version,t??{},a());return{contents:[{uri:e.href,text:String(r)}]}}))}else if(l.kind===`command`){let t=o.transport?.mcp?.toolName??e(o.meta.name,o.meta.version);r.registerTool(t,{description:o.meta.description,inputSchema:s},(async(e,t)=>{let n=await i.execute(o.meta.name,o.meta.version,e??{},a());return{content:[{type:`text`,text:String(n)}]}}))}else throw Error(`Unsupported kind: ${l.kind}`)}},{},{basePath:`/api`});return{GET:o,POST:o,DELETE:o}}export{i as makeNextMcpServerFromRegistry};
1
+ import { defaultMcpTool, jsonSchemaForSpec } from "../jsonschema.js";
2
+ import { ResourceTemplate } from "@modelcontextprotocol/sdk/server/mcp.js";
3
+ import { createMcpHandler } from "mcp-handler";
4
+
5
+ //#region src/server/rest-next-mcp.ts
6
+ function makeNextMcpServerFromRegistry(reg, ctxFactory) {
7
+ const handler = createMcpHandler((server) => {
8
+ for (const spec of reg.listSpecs()) {
9
+ const { input, meta } = jsonSchemaForSpec(spec);
10
+ if (meta.kind === "query") {
11
+ const resourceName = spec.transport?.mcp?.toolName ?? defaultMcpTool(spec.meta.key, spec.meta.version);
12
+ server.registerResource(resourceName, new ResourceTemplate("users://{userId}/profile", { list: void 0 }), {
13
+ description: spec.meta.description,
14
+ inputSchema: input
15
+ }, (async (uri, args, _req) => {
16
+ const result = await reg.execute(spec.meta.key, spec.meta.version, args ?? {}, ctxFactory());
17
+ return { contents: [{
18
+ uri: uri.href,
19
+ text: String(result)
20
+ }] };
21
+ }));
22
+ } else if (meta.kind === "command") {
23
+ const toolName = spec.transport?.mcp?.toolName ?? defaultMcpTool(spec.meta.key, spec.meta.version);
24
+ server.registerTool(toolName, {
25
+ description: spec.meta.description,
26
+ inputSchema: input
27
+ }, (async (args, _req) => {
28
+ const result = await reg.execute(spec.meta.key, spec.meta.version, args ?? {}, ctxFactory());
29
+ return { content: [{
30
+ type: "text",
31
+ text: String(result)
32
+ }] };
33
+ }));
34
+ } else throw new Error(`Unsupported kind: ${meta.kind}`);
35
+ }
36
+ }, {}, { basePath: "/api" });
37
+ return {
38
+ GET: handler,
39
+ POST: handler,
40
+ DELETE: handler
41
+ };
42
+ }
43
+
44
+ //#endregion
45
+ export { makeNextMcpServerFromRegistry };
@@ -0,0 +1,9 @@
1
+ import { HandlerCtx } from "../types.js";
2
+ import { OperationSpecRegistry } from "../operations/registry.js";
3
+ import { RestOptions } from "./rest-generic.js";
4
+ import { NextApiRequest, NextApiResponse } from "next";
5
+
6
+ //#region src/server/rest-next-pages.d.ts
7
+ declare function makeNextPagesHandler(reg: OperationSpecRegistry, ctxFactory: (req: NextApiRequest) => HandlerCtx, options?: RestOptions): (req: NextApiRequest, res: NextApiResponse) => Promise<void>;
8
+ //#endregion
9
+ export { makeNextPagesHandler };
@@ -1 +1,22 @@
1
- import{createFetchHandler as e}from"./rest-generic.js";function t(t,n,r){return e(t,e=>{throw Error(`Use per-request wrapper`)},r),async function(i,a){let o=`${i.headers[`x-forwarded-proto`]??`http`}://${i.headers.host}${i.url}`,s=i.method?.toUpperCase()||`GET`,c=new Request(o,{method:s,headers:Object.fromEntries(Object.entries(i.headers).map(([e,t])=>[e,String(t)])),body:s===`POST`?JSON.stringify(i.body??{}):void 0}),l=await e(t,()=>n(i),r)(c);a.status(l.status),l.headers.forEach((e,t)=>a.setHeader(t,e));let u=await l.text();a.send(u)}}export{t as makeNextPagesHandler};
1
+ import { createFetchHandler } from "./rest-generic.js";
2
+
3
+ //#region src/server/rest-next-pages.ts
4
+ function makeNextPagesHandler(reg, ctxFactory, options) {
5
+ return async function handler(req, res) {
6
+ const url = `${req.headers["x-forwarded-proto"] ?? "http"}://${req.headers.host}${req.url}`;
7
+ const method = req.method?.toUpperCase() || "GET";
8
+ const request = new Request(url, {
9
+ method,
10
+ headers: Object.fromEntries(Object.entries(req.headers).map(([k, v]) => [k, String(v)])),
11
+ body: method === "POST" ? JSON.stringify(req.body ?? {}) : void 0
12
+ });
13
+ const response = await createFetchHandler(reg, () => ctxFactory(req), options)(request);
14
+ res.status(response.status);
15
+ response.headers.forEach((v, k) => res.setHeader(k, v));
16
+ const text = await response.text();
17
+ res.send(text);
18
+ };
19
+ }
20
+
21
+ //#endregion
22
+ export { makeNextPagesHandler };
@@ -0,0 +1,27 @@
1
+ import { TelemetryAnomalyDetectionConfig } from "./spec.js";
2
+ import { TelemetryDispatch } from "./tracker.js";
3
+
4
+ //#region src/telemetry/anomaly.d.ts
5
+ interface TelemetryAnomalyEvent {
6
+ dispatch: TelemetryDispatch;
7
+ threshold: TelemetryAnomalyDetectionConfig;
8
+ metric: string;
9
+ value: number | undefined;
10
+ type: 'min' | 'max';
11
+ }
12
+ interface TelemetryAnomalyMonitorOptions {
13
+ onAnomaly?: (event: TelemetryAnomalyEvent) => void;
14
+ now?: () => Date;
15
+ }
16
+ declare class TelemetryAnomalyMonitor {
17
+ private readonly onAnomaly?;
18
+ private readonly now;
19
+ private readonly samples;
20
+ constructor(options?: TelemetryAnomalyMonitorOptions);
21
+ observe(dispatch: TelemetryDispatch): void;
22
+ private extractMetric;
23
+ private emit;
24
+ reset(): void;
25
+ }
26
+ //#endregion
27
+ export { TelemetryAnomalyEvent, TelemetryAnomalyMonitor, TelemetryAnomalyMonitorOptions };
@@ -1 +1,48 @@
1
- var e=class{onAnomaly;now;samples=new Map;constructor(e={}){this.onAnomaly=e.onAnomaly,this.now=e.now??(()=>new Date)}observe(e){let t=e.definition.anomalyDetection;if(!t?.enabled||!t.thresholds?.length)return;let n=`${e.name}.v${e.version}`,r=(this.samples.get(n)??0)+1;if(this.samples.set(n,r),!(typeof t.minimumSample==`number`&&r<t.minimumSample))for(let n of t.thresholds){let r=this.extractMetric(e,n.metric);typeof r==`number`&&(typeof n.min==`number`&&r<n.min&&this.emit(e,t,n.metric,r,`min`),typeof n.max==`number`&&r>n.max&&this.emit(e,t,n.metric,r,`max`))}}extractMetric(e,t){let n=e.properties[t];if(typeof n==`number`)return n;if(typeof n==`object`&&n&&`value`in n){let e=n.value;return typeof e==`number`?e:void 0}}emit(e,t,n,r,i){this.onAnomaly?.({dispatch:e,threshold:t,metric:n,value:r,type:i})}reset(){this.samples.clear()}};export{e as TelemetryAnomalyMonitor};
1
+ //#region src/telemetry/anomaly.ts
2
+ var TelemetryAnomalyMonitor = class {
3
+ onAnomaly;
4
+ now;
5
+ samples = /* @__PURE__ */ new Map();
6
+ constructor(options = {}) {
7
+ this.onAnomaly = options.onAnomaly;
8
+ this.now = options.now ?? (() => /* @__PURE__ */ new Date());
9
+ }
10
+ observe(dispatch) {
11
+ const anomalyConfig = dispatch.definition.anomalyDetection;
12
+ if (!anomalyConfig?.enabled) return;
13
+ if (!anomalyConfig.thresholds?.length) return;
14
+ const eventKey = `${dispatch.name}.v${dispatch.version}`;
15
+ const newCount = (this.samples.get(eventKey) ?? 0) + 1;
16
+ this.samples.set(eventKey, newCount);
17
+ if (typeof anomalyConfig.minimumSample === "number" && newCount < anomalyConfig.minimumSample) return;
18
+ for (const threshold of anomalyConfig.thresholds) {
19
+ const value = this.extractMetric(dispatch, threshold.metric);
20
+ if (typeof value !== "number") continue;
21
+ if (typeof threshold.min === "number" && value < threshold.min) this.emit(dispatch, anomalyConfig, threshold.metric, value, "min");
22
+ if (typeof threshold.max === "number" && value > threshold.max) this.emit(dispatch, anomalyConfig, threshold.metric, value, "max");
23
+ }
24
+ }
25
+ extractMetric(dispatch, metric) {
26
+ const value = dispatch.properties[metric];
27
+ if (typeof value === "number") return value;
28
+ if (typeof value === "object" && value !== null && "value" in value) {
29
+ const maybeNumber = value.value;
30
+ return typeof maybeNumber === "number" ? maybeNumber : void 0;
31
+ }
32
+ }
33
+ emit(dispatch, threshold, metric, value, type) {
34
+ this.onAnomaly?.({
35
+ dispatch,
36
+ threshold,
37
+ metric,
38
+ value,
39
+ type
40
+ });
41
+ }
42
+ reset() {
43
+ this.samples.clear();
44
+ }
45
+ };
46
+
47
+ //#endregion
48
+ export { TelemetryAnomalyMonitor };
@@ -0,0 +1,6 @@
1
+ import { DocBlock } from "@lssm/lib.contracts/docs";
2
+
3
+ //#region src/telemetry/docs/telemetry.docblock.d.ts
4
+ declare const tech_contracts_telemetry_DocBlocks: DocBlock[];
5
+ //#endregion
6
+ export { tech_contracts_telemetry_DocBlocks };
@@ -1,139 +1,21 @@
1
- import{registerDocBlocks as e}from"../../docs/registry.js";import"../../registry.js";const t=[{id:`docs.tech.contracts.telemetry`,title:`TelemetrySpec`,summary:"Telemetry specs describe product analytics in a durable, type-safe way. They reference existing `EventSpec`s (same name/version) but layer on privacy classification, retention, sampling, and anomaly detection so instrumentation stays compliant and observable.",kind:`reference`,visibility:`public`,route:`/docs/tech/contracts/telemetry`,tags:[`tech`,`contracts`,`telemetry`],body:`## TelemetrySpec
2
-
3
- Telemetry specs describe product analytics in a durable, type-safe way. They reference existing \`EventSpec\`s (same name/version) but layer on privacy classification, retention, sampling, and anomaly detection so instrumentation stays compliant and observable.
4
-
5
- - **File location**: \`packages/libs/contracts/src/telemetry/spec.ts\`
6
- - **Runtime tracker**: \`packages/libs/contracts/src/telemetry/tracker.ts\`
7
- - **Anomaly monitor**: \`packages/libs/contracts/src/telemetry/anomaly.ts\`
8
-
9
- ### Core concepts
10
-
11
- \`\`\`ts
12
- export interface TelemetrySpec {
13
- meta: TelemetryMeta;
14
- events: TelemetryEventDef[];
15
- config?: TelemetryConfig;
16
- }
17
- \`\`\`
18
-
19
- - \`meta\`: ownership + identifiers (\`name\`, \`version\`, \`domain\`)
20
- - \`events\`: per-event semantics, property definitions, privacy level, retention, sampling, anomaly rules
21
- - \`config\`: defaults and provider configuration
22
- - \`TelemetryRegistry\`: registers specs, resolves latest version, finds event definitions by name/version
23
-
24
- ### An example
25
-
26
- \`\`\`ts
27
- export const SigilTelemetry: TelemetrySpec = {
28
- meta: {
29
- name: 'sigil.telemetry',
30
- version: 1,
31
- title: 'Sigil telemetry',
32
- description: 'Core Sigil product telemetry',
33
- domain: 'sigil',
34
- owners: ['@team.analytics'],
35
- tags: ['telemetry'],
36
- stability: StabilityEnum.Experimental,
37
- },
38
- config: {
39
- defaultRetentionDays: 30,
40
- defaultSamplingRate: 1,
41
- providers: [
42
- { type: 'posthog', config: { projectApiKey: process.env.POSTHOG_KEY } },
43
- ],
44
- },
45
- events: [
46
- {
47
- name: 'sigil.telemetry.workflow_step',
48
- version: 1,
49
- semantics: {
50
- what: 'Workflow step executed',
51
- who: 'Actor executing the workflow',
52
- },
53
- privacy: 'internal',
54
- properties: {
55
- workflow: { type: 'string', required: true },
56
- step: { type: 'string', required: true },
57
- durationMs: { type: 'number' },
58
- userId: { type: 'string', pii: true, redact: true },
59
- },
60
- anomalyDetection: {
61
- enabled: true,
62
- minimumSample: 10,
63
- thresholds: [
64
- { metric: 'durationMs', max: 1500 },
65
- ],
66
- actions: ['alert', 'trigger_regen'],
67
- },
68
- },
69
- ],
70
- };
71
- \`\`\`
72
-
73
- ### Tracking events at runtime
74
-
75
- \`TelemetryTracker\` performs sampling, PII redaction, provider dispatch, and anomaly detection.
76
-
77
- \`\`\`ts
78
- const tracker = new TelemetryTracker({
79
- registry: telemetryRegistry,
80
- providers: [
81
- {
82
- id: 'posthog',
83
- async send(dispatch) {
84
- posthog.capture({
85
- event: dispatch.name,
86
- properties: dispatch.properties,
87
- distinctId: dispatch.context.userId ?? dispatch.context.sessionId,
88
- });
89
- },
90
- },
91
- ],
92
- anomalyMonitor: new TelemetryAnomalyMonitor({
93
- onAnomaly(event) {
94
- console.warn('Telemetry anomaly detected', event);
95
- },
96
- }),
97
- });
98
-
99
- await tracker.track('sigil.telemetry.workflow_step', 1, {
100
- workflow: 'onboarding',
101
- step: 'verify_email',
102
- durationMs: 2100,
103
- userId: 'user-123',
104
- });
105
- \`\`\`
106
-
107
- - Sampling obeys the event-specific rate (fallback to spec defaults)
108
- - Properties flagged with \`pii\` or \`redact\` are masked before dispatch
109
- - Anomaly monitor evaluates thresholds and triggers actions (e.g., log, alert, regeneration)
110
-
111
- ### Spec integration
112
-
113
- - \`ContractSpec.telemetry\` allows operations to emit success/failure events automatically
114
- - \`SpecRegistry.execute()\` uses the tracker when \`ctx.telemetry\` is provided
115
- - \`WorkflowRunner\` (Phase 4 follow-up) will emit telemetry during step transitions
116
- - \`TelemetrySpec\` events should reuse \`EventSpec\` names/versions to keep analytics/contract parity
117
-
118
- ### CLI workflow
119
-
120
- \`\`\`
121
- contracts-cli create telemetry
122
- \`\`\`
123
-
124
- - Interactive wizard prompts for meta, providers, events, properties, retention, anomaly rules
125
- - Output: \`*.telemetry.ts\` file using \`TelemetrySpec\`
126
-
127
- ### Best practices
128
-
129
- - Prefer \`internal\` privacy for non-PII; mark PII properties explicitly with \`pii\` + \`redact\`
130
- - Keep sampling ≥0.05 except for high-volume events
131
- - Configure anomaly detection on key metrics (duration, error count, conversion)
132
- - Check telemetry into source control alongside contracts; regenerate via CLI when specs change
133
-
134
- ### Next steps
135
-
136
- - Phase 5: Regenerator monitors telemetry anomalies to propose spec improvements
137
- - Phase 6: Studio surfaces telemetry controls per tenant via \`TenantAppConfig\`
138
-
139
- `}];e(t);export{t as tech_contracts_telemetry_DocBlocks};
1
+ import { registerDocBlocks } from "../../docs/registry.js";
2
+
3
+ //#region src/telemetry/docs/telemetry.docblock.ts
4
+ const tech_contracts_telemetry_DocBlocks = [{
5
+ id: "docs.tech.contracts.telemetry",
6
+ title: "TelemetrySpec",
7
+ summary: "Telemetry specs describe product analytics in a durable, type-safe way. They reference existing `EventSpec`s (same name/version) but layer on privacy classification, retention, sampling, and anomaly detection so instrumentation stays compliant and observable.",
8
+ kind: "reference",
9
+ visibility: "public",
10
+ route: "/docs/tech/contracts/telemetry",
11
+ tags: [
12
+ "tech",
13
+ "contracts",
14
+ "telemetry"
15
+ ],
16
+ body: "## TelemetrySpec\n\nTelemetry specs describe product analytics in a durable, type-safe way. They reference existing `EventSpec`s (same name/version) but layer on privacy classification, retention, sampling, and anomaly detection so instrumentation stays compliant and observable.\n\n- **File location**: `packages/libs/contracts/src/telemetry/spec.ts`\n- **Runtime tracker**: `packages/libs/contracts/src/telemetry/tracker.ts`\n- **Anomaly monitor**: `packages/libs/contracts/src/telemetry/anomaly.ts`\n\n### Core concepts\n\n```ts\nexport interface TelemetrySpec {\n meta: TelemetryMeta;\n events: TelemetryEventDef[];\n config?: TelemetryConfig;\n}\n```\n\n- `meta`: ownership + identifiers (`name`, `version`, `domain`)\n- `events`: per-event semantics, property definitions, privacy level, retention, sampling, anomaly rules\n- `config`: defaults and provider configuration\n- `TelemetryRegistry`: registers specs, resolves latest version, finds event definitions by name/version\n\n### An example\n\n```ts\nexport const SigilTelemetry: TelemetrySpec = {\n meta: {\n name: 'sigil.telemetry',\n version: 1,\n title: 'Sigil telemetry',\n description: 'Core Sigil product telemetry',\n domain: 'sigil',\n owners: ['@team.analytics'],\n tags: ['telemetry'],\n stability: StabilityEnum.Experimental,\n },\n config: {\n defaultRetentionDays: 30,\n defaultSamplingRate: 1,\n providers: [\n { type: 'posthog', config: { projectApiKey: process.env.POSTHOG_KEY } },\n ],\n },\n events: [\n {\n name: 'sigil.telemetry.workflow_step',\n version: 1,\n semantics: {\n what: 'Workflow step executed',\n who: 'Actor executing the workflow',\n },\n privacy: 'internal',\n properties: {\n workflow: { type: 'string', required: true },\n step: { type: 'string', required: true },\n durationMs: { type: 'number' },\n userId: { type: 'string', pii: true, redact: true },\n },\n anomalyDetection: {\n enabled: true,\n minimumSample: 10,\n thresholds: [\n { metric: 'durationMs', max: 1500 },\n ],\n actions: ['alert', 'trigger_regen'],\n },\n },\n ],\n};\n```\n\n### Tracking events at runtime\n\n`TelemetryTracker` performs sampling, PII redaction, provider dispatch, and anomaly detection.\n\n```ts\nconst tracker = new TelemetryTracker({\n registry: telemetryRegistry,\n providers: [\n {\n id: 'posthog',\n async send(dispatch) {\n posthog.capture({\n event: dispatch.name,\n properties: dispatch.properties,\n distinctId: dispatch.context.userId ?? dispatch.context.sessionId,\n });\n },\n },\n ],\n anomalyMonitor: new TelemetryAnomalyMonitor({\n onAnomaly(event) {\n console.warn('Telemetry anomaly detected', event);\n },\n }),\n});\n\nawait tracker.track('sigil.telemetry.workflow_step', 1, {\n workflow: 'onboarding',\n step: 'verify_email',\n durationMs: 2100,\n userId: 'user-123',\n});\n```\n\n- Sampling obeys the event-specific rate (fallback to spec defaults)\n- Properties flagged with `pii` or `redact` are masked before dispatch\n- Anomaly monitor evaluates thresholds and triggers actions (e.g., log, alert, regeneration)\n\n### Spec integration\n\n- `ContractSpec.telemetry` allows operations to emit success/failure events automatically\n- `OperationSpecRegistry.execute()` uses the tracker when `ctx.telemetry` is provided\n- `WorkflowRunner` (Phase 4 follow-up) will emit telemetry during step transitions\n- `TelemetrySpec` events should reuse `EventSpec` names/versions to keep analytics/contract parity\n\n### CLI workflow\n\n```\ncontracts-cli create telemetry\n```\n\n- Interactive wizard prompts for meta, providers, events, properties, retention, anomaly rules\n- Output: `*.telemetry.ts` file using `TelemetrySpec`\n\n### Best practices\n\n- Prefer `internal` privacy for non-PII; mark PII properties explicitly with `pii` + `redact`\n- Keep sampling ≥0.05 except for high-volume events\n- Configure anomaly detection on key metrics (duration, error count, conversion)\n- Check telemetry into source control alongside contracts; regenerate via CLI when specs change\n\n### Next steps\n\n- Phase 5: Regenerator monitors telemetry anomalies to propose spec improvements\n- Phase 6: Studio surfaces telemetry controls per tenant via `TenantAppConfig`\n\n"
17
+ }];
18
+ registerDocBlocks(tech_contracts_telemetry_DocBlocks);
19
+
20
+ //#endregion
21
+ export { tech_contracts_telemetry_DocBlocks };
@@ -0,0 +1,4 @@
1
+ import { TelemetryAnomalyAction, TelemetryAnomalyDetectionConfig, TelemetryAnomalyThreshold, TelemetryConfig, TelemetryEventDef, TelemetryMeta, TelemetryPrivacyLevel, TelemetryPropertyDef, TelemetryProviderConfig, TelemetryRegistry, TelemetryRetentionConfig, TelemetrySamplingConfig, TelemetrySpec, makeTelemetryKey } from "./spec.js";
2
+ import { TelemetryAnomalyEvent, TelemetryAnomalyMonitor, TelemetryAnomalyMonitorOptions } from "./anomaly.js";
3
+ import { RuntimeTelemetryProvider, TelemetryDispatch, TelemetryEventContext, TelemetryTracker, TelemetryTrackerOptions } from "./tracker.js";
4
+ export { RuntimeTelemetryProvider, TelemetryAnomalyAction, TelemetryAnomalyDetectionConfig, TelemetryAnomalyEvent, TelemetryAnomalyMonitor, TelemetryAnomalyMonitorOptions, TelemetryAnomalyThreshold, TelemetryConfig, TelemetryDispatch, TelemetryEventContext, TelemetryEventDef, TelemetryMeta, TelemetryPrivacyLevel, TelemetryPropertyDef, TelemetryProviderConfig, TelemetryRegistry, TelemetryRetentionConfig, TelemetrySamplingConfig, TelemetrySpec, TelemetryTracker, TelemetryTrackerOptions, makeTelemetryKey };
@@ -1 +1,5 @@
1
- import{TelemetryRegistry as e,makeTelemetryKey as t}from"./spec.js";import{TelemetryTracker as n}from"./tracker.js";import{TelemetryAnomalyMonitor as r}from"./anomaly.js";export{r as TelemetryAnomalyMonitor,e as TelemetryRegistry,n as TelemetryTracker,t as makeTelemetryKey};
1
+ import { TelemetryRegistry, makeTelemetryKey } from "./spec.js";
2
+ import { TelemetryTracker } from "./tracker.js";
3
+ import { TelemetryAnomalyMonitor } from "./anomaly.js";
4
+
5
+ export { TelemetryAnomalyMonitor, TelemetryRegistry, TelemetryTracker, makeTelemetryKey };
@@ -0,0 +1,91 @@
1
+ import { OwnerShipMeta } from "../ownership.js";
2
+
3
+ //#region src/telemetry/spec.d.ts
4
+ type TelemetryPrivacyLevel = 'public' | 'internal' | 'pii' | 'sensitive';
5
+ type TelemetryMeta = OwnerShipMeta;
6
+ interface TelemetryPropertyDef {
7
+ type: 'string' | 'number' | 'boolean' | 'timestamp' | 'json';
8
+ required?: boolean;
9
+ pii?: boolean;
10
+ redact?: boolean;
11
+ description?: string;
12
+ }
13
+ interface TelemetryAnomalyThreshold {
14
+ metric: string;
15
+ min?: number;
16
+ max?: number;
17
+ }
18
+ type TelemetryAnomalyAction = 'alert' | 'log' | 'trigger_regen';
19
+ interface TelemetryAnomalyDetectionConfig {
20
+ enabled: boolean;
21
+ thresholds?: TelemetryAnomalyThreshold[];
22
+ actions?: TelemetryAnomalyAction[];
23
+ /**
24
+ * Minimum sample size before evaluating thresholds.
25
+ * Helps avoid false positives on small sample sizes.
26
+ */
27
+ minimumSample?: number;
28
+ }
29
+ interface TelemetrySamplingConfig {
30
+ rate: number;
31
+ conditions?: string[];
32
+ }
33
+ interface TelemetryRetentionConfig {
34
+ days: number;
35
+ policy?: 'archive' | 'delete';
36
+ }
37
+ interface TelemetryEventDef {
38
+ /** Name of the event (should match EventSpec.key for cross-reference). */
39
+ key: string;
40
+ /** Version of the underlying event. */
41
+ version: number;
42
+ /** High-level semantics for docs/analyzers. */
43
+ semantics: {
44
+ who?: string;
45
+ what: string;
46
+ why?: string;
47
+ };
48
+ /** Detailed property metadata keyed by property name. */
49
+ properties: Record<string, TelemetryPropertyDef>;
50
+ /** Privacy level for the entire event. */
51
+ privacy: TelemetryPrivacyLevel;
52
+ /** Retention policy overrides. */
53
+ retention?: TelemetryRetentionConfig;
54
+ /** Sampling rules, defaulting to spec.config defaults. */
55
+ sampling?: TelemetrySamplingConfig;
56
+ /** Anomaly detection overrides. */
57
+ anomalyDetection?: TelemetryAnomalyDetectionConfig;
58
+ /** Optional tags for analytics/AI hints. */
59
+ tags?: string[];
60
+ }
61
+ interface TelemetryProviderConfig {
62
+ type: 'posthog' | 'segment' | 'opentelemetry' | 'internal';
63
+ config: Record<string, unknown>;
64
+ }
65
+ interface TelemetryConfig {
66
+ defaultRetentionDays?: number;
67
+ defaultSamplingRate?: number;
68
+ providers?: TelemetryProviderConfig[];
69
+ anomalyDetection?: {
70
+ enabled: boolean;
71
+ checkIntervalMs?: number;
72
+ };
73
+ }
74
+ interface TelemetrySpec {
75
+ meta: TelemetryMeta;
76
+ events: TelemetryEventDef[];
77
+ config?: TelemetryConfig;
78
+ }
79
+ declare class TelemetryRegistry {
80
+ private readonly items;
81
+ private readonly eventsByKey;
82
+ private readonly specByEventKey;
83
+ register(spec: TelemetrySpec): this;
84
+ list(): TelemetrySpec[];
85
+ get(key: string, version?: number): TelemetrySpec | undefined;
86
+ findEventDef(name: string, version?: number): TelemetryEventDef | undefined;
87
+ getSpecForEvent(name: string, version?: number): TelemetrySpec | undefined;
88
+ }
89
+ declare function makeTelemetryKey(meta: TelemetryMeta): string;
90
+ //#endregion
91
+ export { TelemetryAnomalyAction, TelemetryAnomalyDetectionConfig, TelemetryAnomalyThreshold, TelemetryConfig, TelemetryEventDef, TelemetryMeta, TelemetryPrivacyLevel, TelemetryPropertyDef, TelemetryProviderConfig, TelemetryRegistry, TelemetryRetentionConfig, TelemetrySamplingConfig, TelemetrySpec, makeTelemetryKey };
@@ -1 +1,69 @@
1
- const e=e=>`${e.name}.v${e.version}`;var t=class{items=new Map;eventsByKey=new Map;specByEventKey=new Map;register(t){let n=e(t.meta);if(this.items.has(n))throw Error(`Duplicate TelemetrySpec registration for ${n}`);this.items.set(n,t);for(let e of t.events)this.eventsByKey.set(`${e.name}.v${e.version}`,e),this.specByEventKey.set(`${e.name}.v${e.version}`,t);return 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}findEventDef(e,t){if(t!=null)return this.eventsByKey.get(`${e}.v${t}`);let n,r=-1/0;for(let[t,i]of this.eventsByKey.entries()){let[a,o]=t.split(`.v`);if(a!==e)continue;let s=Number(o);Number.isFinite(s)&&s>r&&(r=s,n=i)}return n}getSpecForEvent(e,t){if(t!=null)return this.specByEventKey.get(`${e}.v${t}`);let n,r=-1/0;for(let[t,i]of this.specByEventKey.entries()){let[a,o]=t.split(`.v`);if(a!==e)continue;let s=Number(o);Number.isFinite(s)&&s>r&&(r=s,n=i)}return n}};function n(t){return e(t)}export{t as TelemetryRegistry,n as makeTelemetryKey};
1
+ //#region src/telemetry/spec.ts
2
+ const telemetryKey = (meta) => `${meta.key}.v${meta.version}`;
3
+ var TelemetryRegistry = class {
4
+ items = /* @__PURE__ */ new Map();
5
+ eventsByKey = /* @__PURE__ */ new Map();
6
+ specByEventKey = /* @__PURE__ */ new Map();
7
+ register(spec) {
8
+ const key = telemetryKey(spec.meta);
9
+ if (this.items.has(key)) throw new Error(`Duplicate TelemetrySpec registration for ${key}`);
10
+ this.items.set(key, spec);
11
+ for (const event of spec.events) {
12
+ this.eventsByKey.set(`${event.key}.v${event.version}`, event);
13
+ this.specByEventKey.set(`${event.key}.v${event.version}`, spec);
14
+ }
15
+ return this;
16
+ }
17
+ list() {
18
+ return [...this.items.values()];
19
+ }
20
+ get(key, version) {
21
+ if (version != null) return this.items.get(`${key}.v${version}`);
22
+ let latest;
23
+ let maxVersion = -Infinity;
24
+ for (const item of this.items.values()) {
25
+ if (item.meta.key !== key) continue;
26
+ if (item.meta.version > maxVersion) {
27
+ maxVersion = item.meta.version;
28
+ latest = item;
29
+ }
30
+ }
31
+ return latest;
32
+ }
33
+ findEventDef(name, version) {
34
+ if (version != null) return this.eventsByKey.get(`${name}.v${version}`);
35
+ let latest;
36
+ let maxVersion = -Infinity;
37
+ for (const [key, event] of this.eventsByKey.entries()) {
38
+ const [eventName, versionPart] = key.split(".v");
39
+ if (eventName !== name) continue;
40
+ const ver = Number(versionPart);
41
+ if (Number.isFinite(ver) && ver > maxVersion) {
42
+ maxVersion = ver;
43
+ latest = event;
44
+ }
45
+ }
46
+ return latest;
47
+ }
48
+ getSpecForEvent(name, version) {
49
+ if (version != null) return this.specByEventKey.get(`${name}.v${version}`);
50
+ let latest;
51
+ let maxVersion = -Infinity;
52
+ for (const [key, spec] of this.specByEventKey.entries()) {
53
+ const [eventName, versionPart] = key.split(".v");
54
+ if (eventName !== name) continue;
55
+ const ver = Number(versionPart);
56
+ if (Number.isFinite(ver) && ver > maxVersion) {
57
+ maxVersion = ver;
58
+ latest = spec;
59
+ }
60
+ }
61
+ return latest;
62
+ }
63
+ };
64
+ function makeTelemetryKey(meta) {
65
+ return telemetryKey(meta);
66
+ }
67
+
68
+ //#endregion
69
+ export { TelemetryRegistry, makeTelemetryKey };
@@ -0,0 +1,51 @@
1
+ import { TelemetryEventDef, TelemetryRegistry, TelemetrySpec } from "./spec.js";
2
+ import { TelemetryAnomalyMonitor } from "./anomaly.js";
3
+
4
+ //#region src/telemetry/tracker.d.ts
5
+ interface TelemetryEventContext {
6
+ tenantId?: string;
7
+ organizationId?: string | null;
8
+ userId?: string | null;
9
+ sessionId?: string | null;
10
+ actor?: 'anonymous' | 'user' | 'admin';
11
+ channel?: 'web' | 'mobile' | 'job' | 'agent';
12
+ metadata?: Record<string, unknown>;
13
+ }
14
+ interface TelemetryDispatch {
15
+ id: string;
16
+ name: string;
17
+ version: number;
18
+ occurredAt: string;
19
+ properties: Record<string, unknown>;
20
+ privacy: TelemetryEventDef['privacy'];
21
+ context: TelemetryEventContext;
22
+ tags?: string[];
23
+ spec: TelemetrySpec;
24
+ definition: TelemetryEventDef;
25
+ }
26
+ interface RuntimeTelemetryProvider {
27
+ id: string;
28
+ send(event: TelemetryDispatch): Promise<void>;
29
+ }
30
+ interface TelemetryTrackerOptions {
31
+ registry: TelemetryRegistry;
32
+ providers?: RuntimeTelemetryProvider[];
33
+ anomalyMonitor?: TelemetryAnomalyMonitor;
34
+ random?: () => number;
35
+ clock?: () => Date;
36
+ }
37
+ declare class TelemetryTracker {
38
+ private readonly providers;
39
+ private readonly registry;
40
+ private readonly anomalyMonitor?;
41
+ private readonly random;
42
+ private readonly clock;
43
+ constructor(options: TelemetryTrackerOptions);
44
+ registerProvider(provider: RuntimeTelemetryProvider): void;
45
+ unregisterProvider(providerId: string): void;
46
+ track(name: string, version: number, properties: Record<string, unknown>, context?: TelemetryEventContext): Promise<boolean>;
47
+ private shouldSample;
48
+ private redactProperties;
49
+ }
50
+ //#endregion
51
+ export { RuntimeTelemetryProvider, TelemetryDispatch, TelemetryEventContext, TelemetryTracker, TelemetryTrackerOptions };
@@ -1 +1,76 @@
1
- import{randomUUID as e}from"crypto";const t=e=>e==null?e:typeof e==`string`?`REDACTED`:typeof e==`number`?0:typeof e==`boolean`?!1:Array.isArray(e)?e.map(()=>`REDACTED`):typeof e==`object`?Object.fromEntries(Object.keys(e).map(e=>[e,`REDACTED`])):`REDACTED`;var n=class{providers=new Map;registry;anomalyMonitor;random;clock;constructor(e){this.registry=e.registry,this.anomalyMonitor=e.anomalyMonitor,this.random=e.random??Math.random,this.clock=e.clock??(()=>new Date);for(let t of e.providers??[])this.providers.set(t.id,t)}registerProvider(e){this.providers.set(e.id,e)}unregisterProvider(e){this.providers.delete(e)}async track(t,n,r,i={}){let a=this.registry.findEventDef(t,n);if(!a)return!1;let o=this.registry.getSpecForEvent(a.name,a.version);if(!o||!this.shouldSample(a.sampling??o.config?.defaultSamplingRate))return!1;let s=this.redactProperties(a,r),c={id:e(),name:a.name,version:a.version,occurredAt:this.clock().toISOString(),properties:s,privacy:a.privacy,context:i,tags:a.tags,spec:o,definition:a};return await Promise.all([...this.providers.values()].map(e=>e.send(c))),this.anomalyMonitor?.observe(c),!0}shouldSample(e){return typeof e==`number`?this.random()<e:e?this.random()<e.rate:!0}redactProperties(e,n){let r={};for(let[i,a]of Object.entries(n)){let n=e.properties[i];if(!n){r[i]=a;continue}n.redact||n.pii||e.privacy===`sensitive`?r[i]=t(a):r[i]=a}return r}};export{n as TelemetryTracker};
1
+ import { randomUUID } from "crypto";
2
+
3
+ //#region src/telemetry/tracker.ts
4
+ const maskValue = (value) => {
5
+ if (value == null) return value;
6
+ if (typeof value === "string") return "REDACTED";
7
+ if (typeof value === "number") return 0;
8
+ if (typeof value === "boolean") return false;
9
+ if (Array.isArray(value)) return value.map(() => "REDACTED");
10
+ if (typeof value === "object") return Object.fromEntries(Object.keys(value).map((key) => [key, "REDACTED"]));
11
+ return "REDACTED";
12
+ };
13
+ var TelemetryTracker = class {
14
+ providers = /* @__PURE__ */ new Map();
15
+ registry;
16
+ anomalyMonitor;
17
+ random;
18
+ clock;
19
+ constructor(options) {
20
+ this.registry = options.registry;
21
+ this.anomalyMonitor = options.anomalyMonitor;
22
+ this.random = options.random ?? Math.random;
23
+ this.clock = options.clock ?? (() => /* @__PURE__ */ new Date());
24
+ for (const provider of options.providers ?? []) this.providers.set(provider.id, provider);
25
+ }
26
+ registerProvider(provider) {
27
+ this.providers.set(provider.id, provider);
28
+ }
29
+ unregisterProvider(providerId) {
30
+ this.providers.delete(providerId);
31
+ }
32
+ async track(name, version, properties, context = {}) {
33
+ const definition = this.registry.findEventDef(name, version);
34
+ if (!definition) return false;
35
+ const spec = this.registry.getSpecForEvent(definition.key, definition.version);
36
+ if (!spec) return false;
37
+ if (!this.shouldSample(definition.sampling ?? spec.config?.defaultSamplingRate)) return false;
38
+ const redactedProperties = this.redactProperties(definition, properties);
39
+ const dispatch = {
40
+ id: randomUUID(),
41
+ name: definition.key,
42
+ version: definition.version,
43
+ occurredAt: this.clock().toISOString(),
44
+ properties: redactedProperties,
45
+ privacy: definition.privacy,
46
+ context,
47
+ tags: definition.tags,
48
+ spec,
49
+ definition
50
+ };
51
+ await Promise.all([...this.providers.values()].map((provider) => provider.send(dispatch)));
52
+ this.anomalyMonitor?.observe(dispatch);
53
+ return true;
54
+ }
55
+ shouldSample(sampling) {
56
+ if (typeof sampling === "number") return this.random() < sampling;
57
+ if (!sampling) return true;
58
+ return this.random() < sampling.rate;
59
+ }
60
+ redactProperties(definition, properties) {
61
+ const result = {};
62
+ for (const [key, value] of Object.entries(properties)) {
63
+ const def = definition.properties[key];
64
+ if (!def) {
65
+ result[key] = value;
66
+ continue;
67
+ }
68
+ if (def.redact || def.pii || definition.privacy === "sensitive") result[key] = maskValue(value);
69
+ else result[key] = value;
70
+ }
71
+ return result;
72
+ }
73
+ };
74
+
75
+ //#endregion
76
+ export { TelemetryTracker };
@@ -0,0 +1,3 @@
1
+ import { Action, Assertion, CoverageRequirement, ExpectErrorAssertion, ExpectEventsAssertion, ExpectOutputAssertion, ExpectedEvent, Fixture, OperationTargetRef, TestRegistry, TestScenario, TestSpec, TestSpecMeta, TestSpecRef, TestTarget, WorkflowTargetRef, makeTestKey } from "./spec.js";
2
+ import { AssertionResult, ScenarioRunResult, TestRunResult, TestRunner, TestRunnerConfig } from "./runner.js";
3
+ export { Action, Assertion, AssertionResult, CoverageRequirement, ExpectErrorAssertion, ExpectEventsAssertion, ExpectOutputAssertion, ExpectedEvent, Fixture, OperationTargetRef, ScenarioRunResult, TestRegistry, TestRunResult, TestRunner, TestRunnerConfig, TestScenario, TestSpec, TestSpecMeta, TestSpecRef, TestTarget, WorkflowTargetRef, makeTestKey };
@@ -1 +1,4 @@
1
- import{TestRegistry as e,makeTestKey as t}from"./spec.js";import{TestRunner as n}from"./runner.js";export{e as TestRegistry,n as TestRunner,t as makeTestKey};
1
+ import { TestRegistry, makeTestKey } from "./spec.js";
2
+ import { TestRunner } from "./runner.js";
3
+
4
+ export { TestRegistry, TestRunner, makeTestKey };