@lssm/lib.contracts 0.0.0-canary-20251120170226

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 (623) hide show
  1. package/README.md +98 -0
  2. package/dist/app-config/branding.d.ts +56 -0
  3. package/dist/app-config/branding.d.ts.map +1 -0
  4. package/dist/app-config/branding.js +0 -0
  5. package/dist/app-config/contracts.d.ts +245 -0
  6. package/dist/app-config/contracts.d.ts.map +1 -0
  7. package/dist/app-config/contracts.js +2 -0
  8. package/dist/app-config/contracts.js.map +1 -0
  9. package/dist/app-config/events.d.ts +123 -0
  10. package/dist/app-config/events.d.ts.map +1 -0
  11. package/dist/app-config/events.js +2 -0
  12. package/dist/app-config/events.js.map +1 -0
  13. package/dist/app-config/index.d.ts +8 -0
  14. package/dist/app-config/index.js +1 -0
  15. package/dist/app-config/lifecycle-contracts.d.ts +383 -0
  16. package/dist/app-config/lifecycle-contracts.d.ts.map +1 -0
  17. package/dist/app-config/lifecycle-contracts.js +2 -0
  18. package/dist/app-config/lifecycle-contracts.js.map +1 -0
  19. package/dist/app-config/lifecycle.d.ts +28 -0
  20. package/dist/app-config/lifecycle.d.ts.map +1 -0
  21. package/dist/app-config/lifecycle.js +0 -0
  22. package/dist/app-config/runtime.d.ts +115 -0
  23. package/dist/app-config/runtime.d.ts.map +1 -0
  24. package/dist/app-config/runtime.js +2 -0
  25. package/dist/app-config/runtime.js.map +1 -0
  26. package/dist/app-config/spec.d.ts +176 -0
  27. package/dist/app-config/spec.d.ts.map +1 -0
  28. package/dist/app-config/spec.js +2 -0
  29. package/dist/app-config/spec.js.map +1 -0
  30. package/dist/app-config/validation.d.ts +48 -0
  31. package/dist/app-config/validation.d.ts.map +1 -0
  32. package/dist/app-config/validation.js +2 -0
  33. package/dist/app-config/validation.js.map +1 -0
  34. package/dist/capabilities/openbanking.d.ts +10 -0
  35. package/dist/capabilities/openbanking.d.ts.map +1 -0
  36. package/dist/capabilities/openbanking.js +2 -0
  37. package/dist/capabilities/openbanking.js.map +1 -0
  38. package/dist/capabilities.d.ts +45 -0
  39. package/dist/capabilities.d.ts.map +1 -0
  40. package/dist/capabilities.js +2 -0
  41. package/dist/capabilities.js.map +1 -0
  42. package/dist/client/index.d.ts +6 -0
  43. package/dist/client/index.js +1 -0
  44. package/dist/client/react/drivers/rn-reusables.d.ts +23 -0
  45. package/dist/client/react/drivers/rn-reusables.d.ts.map +1 -0
  46. package/dist/client/react/drivers/rn-reusables.js +2 -0
  47. package/dist/client/react/drivers/rn-reusables.js.map +1 -0
  48. package/dist/client/react/drivers/shadcn.d.ts +13 -0
  49. package/dist/client/react/drivers/shadcn.d.ts.map +1 -0
  50. package/dist/client/react/drivers/shadcn.js +2 -0
  51. package/dist/client/react/drivers/shadcn.js.map +1 -0
  52. package/dist/client/react/feature-render.d.ts +21 -0
  53. package/dist/client/react/feature-render.d.ts.map +1 -0
  54. package/dist/client/react/feature-render.js +2 -0
  55. package/dist/client/react/feature-render.js.map +1 -0
  56. package/dist/client/react/form-render.d.ts +92 -0
  57. package/dist/client/react/form-render.d.ts.map +1 -0
  58. package/dist/client/react/form-render.js +2 -0
  59. package/dist/client/react/form-render.js.map +1 -0
  60. package/dist/client/react/index.d.ts +5 -0
  61. package/dist/client/react/index.js +1 -0
  62. package/dist/contracts-adapter-hydration.d.ts +16 -0
  63. package/dist/contracts-adapter-hydration.d.ts.map +1 -0
  64. package/dist/contracts-adapter-hydration.js +2 -0
  65. package/dist/contracts-adapter-hydration.js.map +1 -0
  66. package/dist/contracts-adapter-input.d.ts +11 -0
  67. package/dist/contracts-adapter-input.d.ts.map +1 -0
  68. package/dist/contracts-adapter-input.js +2 -0
  69. package/dist/contracts-adapter-input.js.map +1 -0
  70. package/dist/data-views/query-generator.d.ts +40 -0
  71. package/dist/data-views/query-generator.d.ts.map +1 -0
  72. package/dist/data-views/query-generator.js +2 -0
  73. package/dist/data-views/query-generator.js.map +1 -0
  74. package/dist/data-views/runtime.d.ts +27 -0
  75. package/dist/data-views/runtime.d.ts.map +1 -0
  76. package/dist/data-views/runtime.js +2 -0
  77. package/dist/data-views/runtime.js.map +1 -0
  78. package/dist/data-views.d.ts +132 -0
  79. package/dist/data-views.d.ts.map +1 -0
  80. package/dist/data-views.js +2 -0
  81. package/dist/data-views.js.map +1 -0
  82. package/dist/events.d.ts +45 -0
  83. package/dist/events.d.ts.map +1 -0
  84. package/dist/events.js +2 -0
  85. package/dist/events.js.map +1 -0
  86. package/dist/experiments/evaluator.d.ts +38 -0
  87. package/dist/experiments/evaluator.d.ts.map +1 -0
  88. package/dist/experiments/evaluator.js +2 -0
  89. package/dist/experiments/evaluator.js.map +1 -0
  90. package/dist/experiments/spec.d.ts +90 -0
  91. package/dist/experiments/spec.d.ts.map +1 -0
  92. package/dist/experiments/spec.js +2 -0
  93. package/dist/experiments/spec.js.map +1 -0
  94. package/dist/features.d.ts +88 -0
  95. package/dist/features.d.ts.map +1 -0
  96. package/dist/features.js +2 -0
  97. package/dist/features.js.map +1 -0
  98. package/dist/forms.d.ts +259 -0
  99. package/dist/forms.d.ts.map +1 -0
  100. package/dist/forms.js +2 -0
  101. package/dist/forms.js.map +1 -0
  102. package/dist/graphql-federation/dist/index.js +2 -0
  103. package/dist/graphql-federation/dist/index.js.map +1 -0
  104. package/dist/index.d.ts +129 -0
  105. package/dist/index.js +1 -0
  106. package/dist/install.d.ts +77 -0
  107. package/dist/install.d.ts.map +1 -0
  108. package/dist/install.js +2 -0
  109. package/dist/install.js.map +1 -0
  110. package/dist/integrations/binding.d.ts +18 -0
  111. package/dist/integrations/binding.d.ts.map +1 -0
  112. package/dist/integrations/binding.js +0 -0
  113. package/dist/integrations/connection.d.ts +52 -0
  114. package/dist/integrations/connection.d.ts.map +1 -0
  115. package/dist/integrations/connection.js +0 -0
  116. package/dist/integrations/contracts.d.ts +436 -0
  117. package/dist/integrations/contracts.d.ts.map +1 -0
  118. package/dist/integrations/contracts.js +2 -0
  119. package/dist/integrations/contracts.js.map +1 -0
  120. package/dist/integrations/health.d.ts +22 -0
  121. package/dist/integrations/health.d.ts.map +1 -0
  122. package/dist/integrations/health.js +2 -0
  123. package/dist/integrations/health.js.map +1 -0
  124. package/dist/integrations/index.d.ts +53 -0
  125. package/dist/integrations/index.js +1 -0
  126. package/dist/integrations/openbanking/contracts/accounts.d.ts +288 -0
  127. package/dist/integrations/openbanking/contracts/accounts.d.ts.map +1 -0
  128. package/dist/integrations/openbanking/contracts/accounts.js +2 -0
  129. package/dist/integrations/openbanking/contracts/accounts.js.map +1 -0
  130. package/dist/integrations/openbanking/contracts/balances.d.ts +164 -0
  131. package/dist/integrations/openbanking/contracts/balances.d.ts.map +1 -0
  132. package/dist/integrations/openbanking/contracts/balances.js +2 -0
  133. package/dist/integrations/openbanking/contracts/balances.js.map +1 -0
  134. package/dist/integrations/openbanking/contracts/index.d.ts +10 -0
  135. package/dist/integrations/openbanking/contracts/index.d.ts.map +1 -0
  136. package/dist/integrations/openbanking/contracts/index.js +2 -0
  137. package/dist/integrations/openbanking/contracts/index.js.map +1 -0
  138. package/dist/integrations/openbanking/contracts/transactions.d.ts +212 -0
  139. package/dist/integrations/openbanking/contracts/transactions.d.ts.map +1 -0
  140. package/dist/integrations/openbanking/contracts/transactions.js +2 -0
  141. package/dist/integrations/openbanking/contracts/transactions.js.map +1 -0
  142. package/dist/integrations/openbanking/guards.d.ts +13 -0
  143. package/dist/integrations/openbanking/guards.d.ts.map +1 -0
  144. package/dist/integrations/openbanking/guards.js +2 -0
  145. package/dist/integrations/openbanking/guards.js.map +1 -0
  146. package/dist/integrations/openbanking/models.d.ts +229 -0
  147. package/dist/integrations/openbanking/models.d.ts.map +1 -0
  148. package/dist/integrations/openbanking/models.js +2 -0
  149. package/dist/integrations/openbanking/models.js.map +1 -0
  150. package/dist/integrations/openbanking/telemetry.d.ts +16 -0
  151. package/dist/integrations/openbanking/telemetry.d.ts.map +1 -0
  152. package/dist/integrations/openbanking/telemetry.js +2 -0
  153. package/dist/integrations/openbanking/telemetry.js.map +1 -0
  154. package/dist/integrations/providers/calendar.d.ts +79 -0
  155. package/dist/integrations/providers/calendar.d.ts.map +1 -0
  156. package/dist/integrations/providers/calendar.js +0 -0
  157. package/dist/integrations/providers/elevenlabs.d.ts +8 -0
  158. package/dist/integrations/providers/elevenlabs.d.ts.map +1 -0
  159. package/dist/integrations/providers/elevenlabs.js +2 -0
  160. package/dist/integrations/providers/elevenlabs.js.map +1 -0
  161. package/dist/integrations/providers/email.d.ts +87 -0
  162. package/dist/integrations/providers/email.d.ts.map +1 -0
  163. package/dist/integrations/providers/email.js +0 -0
  164. package/dist/integrations/providers/embedding.d.ts +25 -0
  165. package/dist/integrations/providers/embedding.d.ts.map +1 -0
  166. package/dist/integrations/providers/embedding.js +0 -0
  167. package/dist/integrations/providers/gcs-storage.d.ts +8 -0
  168. package/dist/integrations/providers/gcs-storage.d.ts.map +1 -0
  169. package/dist/integrations/providers/gcs-storage.js +2 -0
  170. package/dist/integrations/providers/gcs-storage.js.map +1 -0
  171. package/dist/integrations/providers/gmail.d.ts +8 -0
  172. package/dist/integrations/providers/gmail.d.ts.map +1 -0
  173. package/dist/integrations/providers/gmail.js +2 -0
  174. package/dist/integrations/providers/gmail.js.map +1 -0
  175. package/dist/integrations/providers/google-calendar.d.ts +8 -0
  176. package/dist/integrations/providers/google-calendar.d.ts.map +1 -0
  177. package/dist/integrations/providers/google-calendar.js +2 -0
  178. package/dist/integrations/providers/google-calendar.js.map +1 -0
  179. package/dist/integrations/providers/impls/elevenlabs-voice.d.ts +21 -0
  180. package/dist/integrations/providers/impls/elevenlabs-voice.d.ts.map +1 -0
  181. package/dist/integrations/providers/impls/elevenlabs-voice.js +2 -0
  182. package/dist/integrations/providers/impls/elevenlabs-voice.js.map +1 -0
  183. package/dist/integrations/providers/impls/gcs-storage.d.ts +25 -0
  184. package/dist/integrations/providers/impls/gcs-storage.d.ts.map +1 -0
  185. package/dist/integrations/providers/impls/gcs-storage.js +2 -0
  186. package/dist/integrations/providers/impls/gcs-storage.js.map +1 -0
  187. package/dist/integrations/providers/impls/gmail-inbound.d.ts +27 -0
  188. package/dist/integrations/providers/impls/gmail-inbound.d.ts.map +1 -0
  189. package/dist/integrations/providers/impls/gmail-inbound.js +2 -0
  190. package/dist/integrations/providers/impls/gmail-inbound.js.map +1 -0
  191. package/dist/integrations/providers/impls/gmail-outbound.d.ts +19 -0
  192. package/dist/integrations/providers/impls/gmail-outbound.d.ts.map +1 -0
  193. package/dist/integrations/providers/impls/gmail-outbound.js +7 -0
  194. package/dist/integrations/providers/impls/gmail-outbound.js.map +1 -0
  195. package/dist/integrations/providers/impls/google-calendar.d.ts +24 -0
  196. package/dist/integrations/providers/impls/google-calendar.d.ts.map +1 -0
  197. package/dist/integrations/providers/impls/google-calendar.js +2 -0
  198. package/dist/integrations/providers/impls/google-calendar.js.map +1 -0
  199. package/dist/integrations/providers/impls/index.d.ts +15 -0
  200. package/dist/integrations/providers/impls/index.js +1 -0
  201. package/dist/integrations/providers/impls/mistral-embedding.d.ts +24 -0
  202. package/dist/integrations/providers/impls/mistral-embedding.d.ts.map +1 -0
  203. package/dist/integrations/providers/impls/mistral-embedding.js +2 -0
  204. package/dist/integrations/providers/impls/mistral-embedding.js.map +1 -0
  205. package/dist/integrations/providers/impls/mistral-llm.d.ts +32 -0
  206. package/dist/integrations/providers/impls/mistral-llm.d.ts.map +1 -0
  207. package/dist/integrations/providers/impls/mistral-llm.js +2 -0
  208. package/dist/integrations/providers/impls/mistral-llm.js.map +1 -0
  209. package/dist/integrations/providers/impls/postmark-email.d.ts +20 -0
  210. package/dist/integrations/providers/impls/postmark-email.d.ts.map +1 -0
  211. package/dist/integrations/providers/impls/postmark-email.js +2 -0
  212. package/dist/integrations/providers/impls/postmark-email.js.map +1 -0
  213. package/dist/integrations/providers/impls/powens-client.d.ts +125 -0
  214. package/dist/integrations/providers/impls/powens-client.d.ts.map +1 -0
  215. package/dist/integrations/providers/impls/powens-client.js +2 -0
  216. package/dist/integrations/providers/impls/powens-client.js.map +1 -0
  217. package/dist/integrations/providers/impls/powens-openbanking.d.ts +28 -0
  218. package/dist/integrations/providers/impls/powens-openbanking.d.ts.map +1 -0
  219. package/dist/integrations/providers/impls/powens-openbanking.js +2 -0
  220. package/dist/integrations/providers/impls/powens-openbanking.js.map +1 -0
  221. package/dist/integrations/providers/impls/provider-factory.d.ts +27 -0
  222. package/dist/integrations/providers/impls/provider-factory.d.ts.map +1 -0
  223. package/dist/integrations/providers/impls/provider-factory.js +2 -0
  224. package/dist/integrations/providers/impls/provider-factory.js.map +1 -0
  225. package/dist/integrations/providers/impls/qdrant-vector.d.ts +25 -0
  226. package/dist/integrations/providers/impls/qdrant-vector.d.ts.map +1 -0
  227. package/dist/integrations/providers/impls/qdrant-vector.js +2 -0
  228. package/dist/integrations/providers/impls/qdrant-vector.js.map +1 -0
  229. package/dist/integrations/providers/impls/stripe-payments.d.ts +29 -0
  230. package/dist/integrations/providers/impls/stripe-payments.d.ts.map +1 -0
  231. package/dist/integrations/providers/impls/stripe-payments.js +2 -0
  232. package/dist/integrations/providers/impls/stripe-payments.js.map +1 -0
  233. package/dist/integrations/providers/impls/twilio-sms.d.ts +21 -0
  234. package/dist/integrations/providers/impls/twilio-sms.d.ts.map +1 -0
  235. package/dist/integrations/providers/impls/twilio-sms.js +2 -0
  236. package/dist/integrations/providers/impls/twilio-sms.js.map +1 -0
  237. package/dist/integrations/providers/index.d.ts +36 -0
  238. package/dist/integrations/providers/index.js +1 -0
  239. package/dist/integrations/providers/llm.d.ts +83 -0
  240. package/dist/integrations/providers/llm.d.ts.map +1 -0
  241. package/dist/integrations/providers/llm.js +0 -0
  242. package/dist/integrations/providers/mistral.d.ts +8 -0
  243. package/dist/integrations/providers/mistral.d.ts.map +1 -0
  244. package/dist/integrations/providers/mistral.js +2 -0
  245. package/dist/integrations/providers/mistral.js.map +1 -0
  246. package/dist/integrations/providers/openbanking.d.ts +129 -0
  247. package/dist/integrations/providers/openbanking.d.ts.map +1 -0
  248. package/dist/integrations/providers/openbanking.js +0 -0
  249. package/dist/integrations/providers/payments.d.ts +110 -0
  250. package/dist/integrations/providers/payments.d.ts.map +1 -0
  251. package/dist/integrations/providers/payments.js +0 -0
  252. package/dist/integrations/providers/postmark.d.ts +8 -0
  253. package/dist/integrations/providers/postmark.d.ts.map +1 -0
  254. package/dist/integrations/providers/postmark.js +2 -0
  255. package/dist/integrations/providers/postmark.js.map +1 -0
  256. package/dist/integrations/providers/powens.d.ts +8 -0
  257. package/dist/integrations/providers/powens.d.ts.map +1 -0
  258. package/dist/integrations/providers/powens.js +2 -0
  259. package/dist/integrations/providers/powens.js.map +1 -0
  260. package/dist/integrations/providers/qdrant.d.ts +8 -0
  261. package/dist/integrations/providers/qdrant.d.ts.map +1 -0
  262. package/dist/integrations/providers/qdrant.js +2 -0
  263. package/dist/integrations/providers/qdrant.js.map +1 -0
  264. package/dist/integrations/providers/sms.d.ts +35 -0
  265. package/dist/integrations/providers/sms.d.ts.map +1 -0
  266. package/dist/integrations/providers/sms.js +0 -0
  267. package/dist/integrations/providers/storage.d.ts +61 -0
  268. package/dist/integrations/providers/storage.d.ts.map +1 -0
  269. package/dist/integrations/providers/storage.js +0 -0
  270. package/dist/integrations/providers/stripe.d.ts +8 -0
  271. package/dist/integrations/providers/stripe.d.ts.map +1 -0
  272. package/dist/integrations/providers/stripe.js +2 -0
  273. package/dist/integrations/providers/stripe.js.map +1 -0
  274. package/dist/integrations/providers/twilio-sms.d.ts +8 -0
  275. package/dist/integrations/providers/twilio-sms.d.ts.map +1 -0
  276. package/dist/integrations/providers/twilio-sms.js +2 -0
  277. package/dist/integrations/providers/twilio-sms.js.map +1 -0
  278. package/dist/integrations/providers/vector-store.d.ts +44 -0
  279. package/dist/integrations/providers/vector-store.d.ts.map +1 -0
  280. package/dist/integrations/providers/vector-store.js +0 -0
  281. package/dist/integrations/providers/voice.d.ts +35 -0
  282. package/dist/integrations/providers/voice.d.ts.map +1 -0
  283. package/dist/integrations/providers/voice.js +0 -0
  284. package/dist/integrations/runtime.d.ts +100 -0
  285. package/dist/integrations/runtime.d.ts.map +1 -0
  286. package/dist/integrations/runtime.js +2 -0
  287. package/dist/integrations/runtime.js.map +1 -0
  288. package/dist/integrations/secrets/env-secret-provider.d.ts +32 -0
  289. package/dist/integrations/secrets/env-secret-provider.d.ts.map +1 -0
  290. package/dist/integrations/secrets/env-secret-provider.js +2 -0
  291. package/dist/integrations/secrets/env-secret-provider.js.map +1 -0
  292. package/dist/integrations/secrets/gcp-secret-manager.d.ts +33 -0
  293. package/dist/integrations/secrets/gcp-secret-manager.d.ts.map +1 -0
  294. package/dist/integrations/secrets/gcp-secret-manager.js +2 -0
  295. package/dist/integrations/secrets/gcp-secret-manager.js.map +1 -0
  296. package/dist/integrations/secrets/index.d.ts +5 -0
  297. package/dist/integrations/secrets/index.js +1 -0
  298. package/dist/integrations/secrets/manager.d.ts +48 -0
  299. package/dist/integrations/secrets/manager.d.ts.map +1 -0
  300. package/dist/integrations/secrets/manager.js +2 -0
  301. package/dist/integrations/secrets/manager.js.map +1 -0
  302. package/dist/integrations/secrets/provider.d.ts +53 -0
  303. package/dist/integrations/secrets/provider.d.ts.map +1 -0
  304. package/dist/integrations/secrets/provider.js +2 -0
  305. package/dist/integrations/secrets/provider.js.map +1 -0
  306. package/dist/integrations/spec.d.ts +80 -0
  307. package/dist/integrations/spec.d.ts.map +1 -0
  308. package/dist/integrations/spec.js +2 -0
  309. package/dist/integrations/spec.js.map +1 -0
  310. package/dist/jobs/gcp-cloud-tasks.d.ts +42 -0
  311. package/dist/jobs/gcp-cloud-tasks.d.ts.map +1 -0
  312. package/dist/jobs/gcp-cloud-tasks.js +2 -0
  313. package/dist/jobs/gcp-cloud-tasks.js.map +1 -0
  314. package/dist/jobs/gcp-pubsub.d.ts +26 -0
  315. package/dist/jobs/gcp-pubsub.d.ts.map +1 -0
  316. package/dist/jobs/gcp-pubsub.js +2 -0
  317. package/dist/jobs/gcp-pubsub.js.map +1 -0
  318. package/dist/jobs/handlers/gmail-sync-handler.d.ts +10 -0
  319. package/dist/jobs/handlers/gmail-sync-handler.d.ts.map +1 -0
  320. package/dist/jobs/handlers/gmail-sync-handler.js +2 -0
  321. package/dist/jobs/handlers/gmail-sync-handler.js.map +1 -0
  322. package/dist/jobs/handlers/index.d.ts +3 -0
  323. package/dist/jobs/handlers/index.js +1 -0
  324. package/dist/jobs/handlers/storage-document-handler.d.ts +13 -0
  325. package/dist/jobs/handlers/storage-document-handler.d.ts.map +1 -0
  326. package/dist/jobs/handlers/storage-document-handler.js +2 -0
  327. package/dist/jobs/handlers/storage-document-handler.js.map +1 -0
  328. package/dist/jobs/index.d.ts +7 -0
  329. package/dist/jobs/index.js +1 -0
  330. package/dist/jobs/memory-queue.d.ts +19 -0
  331. package/dist/jobs/memory-queue.d.ts.map +1 -0
  332. package/dist/jobs/memory-queue.js +2 -0
  333. package/dist/jobs/memory-queue.js.map +1 -0
  334. package/dist/jobs/queue.d.ts +27 -0
  335. package/dist/jobs/queue.d.ts.map +1 -0
  336. package/dist/jobs/queue.js +0 -0
  337. package/dist/jsonschema.d.ts +27 -0
  338. package/dist/jsonschema.d.ts.map +1 -0
  339. package/dist/jsonschema.js +2 -0
  340. package/dist/jsonschema.js.map +1 -0
  341. package/dist/knowledge/binding.d.ts +26 -0
  342. package/dist/knowledge/binding.d.ts.map +1 -0
  343. package/dist/knowledge/binding.js +0 -0
  344. package/dist/knowledge/contracts.d.ts +317 -0
  345. package/dist/knowledge/contracts.d.ts.map +1 -0
  346. package/dist/knowledge/contracts.js +2 -0
  347. package/dist/knowledge/contracts.js.map +1 -0
  348. package/dist/knowledge/index.d.ts +10 -0
  349. package/dist/knowledge/index.js +1 -0
  350. package/dist/knowledge/ingestion/document-processor.d.ts +25 -0
  351. package/dist/knowledge/ingestion/document-processor.d.ts.map +1 -0
  352. package/dist/knowledge/ingestion/document-processor.js +2 -0
  353. package/dist/knowledge/ingestion/document-processor.js.map +1 -0
  354. package/dist/knowledge/ingestion/embedding-service.d.ts +13 -0
  355. package/dist/knowledge/ingestion/embedding-service.d.ts.map +1 -0
  356. package/dist/knowledge/ingestion/embedding-service.js +2 -0
  357. package/dist/knowledge/ingestion/embedding-service.js.map +1 -0
  358. package/dist/knowledge/ingestion/gmail-adapter.d.ts +19 -0
  359. package/dist/knowledge/ingestion/gmail-adapter.d.ts.map +1 -0
  360. package/dist/knowledge/ingestion/gmail-adapter.js +7 -0
  361. package/dist/knowledge/ingestion/gmail-adapter.js.map +1 -0
  362. package/dist/knowledge/ingestion/index.d.ts +6 -0
  363. package/dist/knowledge/ingestion/index.js +1 -0
  364. package/dist/knowledge/ingestion/storage-adapter.d.ts +16 -0
  365. package/dist/knowledge/ingestion/storage-adapter.d.ts.map +1 -0
  366. package/dist/knowledge/ingestion/storage-adapter.js +2 -0
  367. package/dist/knowledge/ingestion/storage-adapter.js.map +1 -0
  368. package/dist/knowledge/ingestion/vector-indexer.d.ts +19 -0
  369. package/dist/knowledge/ingestion/vector-indexer.d.ts.map +1 -0
  370. package/dist/knowledge/ingestion/vector-indexer.js +2 -0
  371. package/dist/knowledge/ingestion/vector-indexer.js.map +1 -0
  372. package/dist/knowledge/query/index.d.ts +2 -0
  373. package/dist/knowledge/query/index.js +1 -0
  374. package/dist/knowledge/query/service.d.ts +30 -0
  375. package/dist/knowledge/query/service.d.ts.map +1 -0
  376. package/dist/knowledge/query/service.js +4 -0
  377. package/dist/knowledge/query/service.js.map +1 -0
  378. package/dist/knowledge/runtime.d.ts +33 -0
  379. package/dist/knowledge/runtime.d.ts.map +1 -0
  380. package/dist/knowledge/runtime.js +2 -0
  381. package/dist/knowledge/runtime.js.map +1 -0
  382. package/dist/knowledge/source.d.ts +33 -0
  383. package/dist/knowledge/source.d.ts.map +1 -0
  384. package/dist/knowledge/source.js +0 -0
  385. package/dist/knowledge/spaces/email-threads.d.ts +8 -0
  386. package/dist/knowledge/spaces/email-threads.d.ts.map +1 -0
  387. package/dist/knowledge/spaces/email-threads.js +2 -0
  388. package/dist/knowledge/spaces/email-threads.js.map +1 -0
  389. package/dist/knowledge/spaces/financial-docs.d.ts +8 -0
  390. package/dist/knowledge/spaces/financial-docs.d.ts.map +1 -0
  391. package/dist/knowledge/spaces/financial-docs.js +2 -0
  392. package/dist/knowledge/spaces/financial-docs.js.map +1 -0
  393. package/dist/knowledge/spaces/financial-overview.d.ts +8 -0
  394. package/dist/knowledge/spaces/financial-overview.d.ts.map +1 -0
  395. package/dist/knowledge/spaces/financial-overview.js +2 -0
  396. package/dist/knowledge/spaces/financial-overview.js.map +1 -0
  397. package/dist/knowledge/spaces/index.d.ts +7 -0
  398. package/dist/knowledge/spaces/index.js +1 -0
  399. package/dist/knowledge/spaces/product-canon.d.ts +8 -0
  400. package/dist/knowledge/spaces/product-canon.d.ts.map +1 -0
  401. package/dist/knowledge/spaces/product-canon.js +2 -0
  402. package/dist/knowledge/spaces/product-canon.js.map +1 -0
  403. package/dist/knowledge/spaces/support-faq.d.ts +8 -0
  404. package/dist/knowledge/spaces/support-faq.d.ts.map +1 -0
  405. package/dist/knowledge/spaces/support-faq.js +2 -0
  406. package/dist/knowledge/spaces/support-faq.js.map +1 -0
  407. package/dist/knowledge/spaces/uploaded-docs.d.ts +8 -0
  408. package/dist/knowledge/spaces/uploaded-docs.d.ts.map +1 -0
  409. package/dist/knowledge/spaces/uploaded-docs.js +2 -0
  410. package/dist/knowledge/spaces/uploaded-docs.js.map +1 -0
  411. package/dist/knowledge/spec.d.ts +53 -0
  412. package/dist/knowledge/spec.d.ts.map +1 -0
  413. package/dist/knowledge/spec.js +2 -0
  414. package/dist/knowledge/spec.js.map +1 -0
  415. package/dist/markdown.d.ts +22 -0
  416. package/dist/markdown.d.ts.map +1 -0
  417. package/dist/markdown.js +4 -0
  418. package/dist/markdown.js.map +1 -0
  419. package/dist/migrations.d.ts +53 -0
  420. package/dist/migrations.d.ts.map +1 -0
  421. package/dist/migrations.js +2 -0
  422. package/dist/migrations.js.map +1 -0
  423. package/dist/onboarding-base.d.ts +138 -0
  424. package/dist/onboarding-base.d.ts.map +1 -0
  425. package/dist/onboarding-base.js +2 -0
  426. package/dist/onboarding-base.js.map +1 -0
  427. package/dist/ownership.d.ts +76 -0
  428. package/dist/ownership.d.ts.map +1 -0
  429. package/dist/ownership.js +2 -0
  430. package/dist/ownership.js.map +1 -0
  431. package/dist/policy/engine.d.ts +40 -0
  432. package/dist/policy/engine.d.ts.map +1 -0
  433. package/dist/policy/engine.js +2 -0
  434. package/dist/policy/engine.js.map +1 -0
  435. package/dist/policy/opa-adapter.d.ts +46 -0
  436. package/dist/policy/opa-adapter.d.ts.map +1 -0
  437. package/dist/policy/opa-adapter.js +2 -0
  438. package/dist/policy/opa-adapter.js.map +1 -0
  439. package/dist/policy/spec.d.ts +115 -0
  440. package/dist/policy/spec.d.ts.map +1 -0
  441. package/dist/policy/spec.js +2 -0
  442. package/dist/policy/spec.js.map +1 -0
  443. package/dist/presentations.backcompat.d.ts +8 -0
  444. package/dist/presentations.backcompat.d.ts.map +1 -0
  445. package/dist/presentations.backcompat.js +2 -0
  446. package/dist/presentations.backcompat.js.map +1 -0
  447. package/dist/presentations.d.ts +97 -0
  448. package/dist/presentations.d.ts.map +1 -0
  449. package/dist/presentations.js +2 -0
  450. package/dist/presentations.js.map +1 -0
  451. package/dist/presentations.v2.d.ts +96 -0
  452. package/dist/presentations.v2.d.ts.map +1 -0
  453. package/dist/presentations.v2.js +2 -0
  454. package/dist/presentations.v2.js.map +1 -0
  455. package/dist/prompt.d.ts +61 -0
  456. package/dist/prompt.d.ts.map +1 -0
  457. package/dist/prompt.js +2 -0
  458. package/dist/prompt.js.map +1 -0
  459. package/dist/promptRegistry.d.ts +16 -0
  460. package/dist/promptRegistry.d.ts.map +1 -0
  461. package/dist/promptRegistry.js +2 -0
  462. package/dist/promptRegistry.js.map +1 -0
  463. package/dist/regenerator/adapters.d.ts +20 -0
  464. package/dist/regenerator/adapters.d.ts.map +1 -0
  465. package/dist/regenerator/adapters.js +0 -0
  466. package/dist/regenerator/executor.d.ts +71 -0
  467. package/dist/regenerator/executor.d.ts.map +1 -0
  468. package/dist/regenerator/executor.js +2 -0
  469. package/dist/regenerator/executor.js.map +1 -0
  470. package/dist/regenerator/index.d.ts +7 -0
  471. package/dist/regenerator/index.js +1 -0
  472. package/dist/regenerator/service.d.ts +34 -0
  473. package/dist/regenerator/service.d.ts.map +1 -0
  474. package/dist/regenerator/service.js +2 -0
  475. package/dist/regenerator/service.js.map +1 -0
  476. package/dist/regenerator/sinks.d.ts +27 -0
  477. package/dist/regenerator/sinks.d.ts.map +1 -0
  478. package/dist/regenerator/sinks.js +2 -0
  479. package/dist/regenerator/sinks.js.map +1 -0
  480. package/dist/regenerator/types.d.ts +108 -0
  481. package/dist/regenerator/types.d.ts.map +1 -0
  482. package/dist/regenerator/types.js +0 -0
  483. package/dist/regenerator/utils.d.ts +10 -0
  484. package/dist/regenerator/utils.d.ts.map +1 -0
  485. package/dist/regenerator/utils.js +2 -0
  486. package/dist/regenerator/utils.js.map +1 -0
  487. package/dist/registry.d.ts +73 -0
  488. package/dist/registry.d.ts.map +1 -0
  489. package/dist/registry.js +2 -0
  490. package/dist/registry.js.map +1 -0
  491. package/dist/resources.d.ts +65 -0
  492. package/dist/resources.d.ts.map +1 -0
  493. package/dist/resources.js +2 -0
  494. package/dist/resources.js.map +1 -0
  495. package/dist/schema/dist/EnumType.js +1 -0
  496. package/dist/schema/dist/FieldType.js +2 -0
  497. package/dist/schema/dist/FieldType.js.map +1 -0
  498. package/dist/schema/dist/ScalarTypeEnum.js +2 -0
  499. package/dist/schema/dist/ScalarTypeEnum.js.map +1 -0
  500. package/dist/schema/dist/SchemaModel.js +2 -0
  501. package/dist/schema/dist/SchemaModel.js.map +1 -0
  502. package/dist/schema/dist/index.js +1 -0
  503. package/dist/server/graphql-pothos.d.ts +32 -0
  504. package/dist/server/graphql-pothos.d.ts.map +1 -0
  505. package/dist/server/graphql-pothos.js +2 -0
  506. package/dist/server/graphql-pothos.js.map +1 -0
  507. package/dist/server/graphql-schema-export.d.ts +7 -0
  508. package/dist/server/graphql-schema-export.d.ts.map +1 -0
  509. package/dist/server/graphql-schema-export.js +2 -0
  510. package/dist/server/graphql-schema-export.js.map +1 -0
  511. package/dist/server/index.d.ts +9 -0
  512. package/dist/server/index.js +1 -0
  513. package/dist/server/provider-mcp.d.ts +52 -0
  514. package/dist/server/provider-mcp.d.ts.map +1 -0
  515. package/dist/server/provider-mcp.js +2 -0
  516. package/dist/server/provider-mcp.js.map +1 -0
  517. package/dist/server/rest-elysia.d.ts +41 -0
  518. package/dist/server/rest-elysia.d.ts.map +1 -0
  519. package/dist/server/rest-elysia.js +2 -0
  520. package/dist/server/rest-elysia.js.map +1 -0
  521. package/dist/server/rest-express.d.ts +17 -0
  522. package/dist/server/rest-express.d.ts.map +1 -0
  523. package/dist/server/rest-express.js +2 -0
  524. package/dist/server/rest-express.js.map +1 -0
  525. package/dist/server/rest-generic.d.ts +33 -0
  526. package/dist/server/rest-generic.d.ts.map +1 -0
  527. package/dist/server/rest-generic.js +2 -0
  528. package/dist/server/rest-generic.js.map +1 -0
  529. package/dist/server/rest-next-app.d.ts +36 -0
  530. package/dist/server/rest-next-app.d.ts.map +1 -0
  531. package/dist/server/rest-next-app.js +2 -0
  532. package/dist/server/rest-next-app.js.map +1 -0
  533. package/dist/server/rest-next-mcp.d.ts +12 -0
  534. package/dist/server/rest-next-mcp.d.ts.map +1 -0
  535. package/dist/server/rest-next-mcp.js +2 -0
  536. package/dist/server/rest-next-mcp.js.map +1 -0
  537. package/dist/server/rest-next-pages.d.ts +10 -0
  538. package/dist/server/rest-next-pages.d.ts.map +1 -0
  539. package/dist/server/rest-next-pages.js +2 -0
  540. package/dist/server/rest-next-pages.js.map +1 -0
  541. package/dist/spec.d.ts +172 -0
  542. package/dist/spec.d.ts.map +1 -0
  543. package/dist/spec.js +2 -0
  544. package/dist/spec.js.map +1 -0
  545. package/dist/telemetry/anomaly.d.ts +28 -0
  546. package/dist/telemetry/anomaly.d.ts.map +1 -0
  547. package/dist/telemetry/anomaly.js +2 -0
  548. package/dist/telemetry/anomaly.js.map +1 -0
  549. package/dist/telemetry/index.d.ts +4 -0
  550. package/dist/telemetry/index.js +1 -0
  551. package/dist/telemetry/spec.d.ts +99 -0
  552. package/dist/telemetry/spec.d.ts.map +1 -0
  553. package/dist/telemetry/spec.js +2 -0
  554. package/dist/telemetry/spec.js.map +1 -0
  555. package/dist/telemetry/tracker.d.ts +52 -0
  556. package/dist/telemetry/tracker.d.ts.map +1 -0
  557. package/dist/telemetry/tracker.js +2 -0
  558. package/dist/telemetry/tracker.js.map +1 -0
  559. package/dist/tests/index.d.ts +3 -0
  560. package/dist/tests/index.js +1 -0
  561. package/dist/tests/runner.d.ts +44 -0
  562. package/dist/tests/runner.d.ts.map +1 -0
  563. package/dist/tests/runner.js +2 -0
  564. package/dist/tests/runner.js.map +1 -0
  565. package/dist/tests/spec.d.ts +90 -0
  566. package/dist/tests/spec.d.ts.map +1 -0
  567. package/dist/tests/spec.js +2 -0
  568. package/dist/tests/spec.js.map +1 -0
  569. package/dist/themes.d.ts +56 -0
  570. package/dist/themes.d.ts.map +1 -0
  571. package/dist/themes.js +2 -0
  572. package/dist/themes.js.map +1 -0
  573. package/dist/translations/catalog.d.ts +29 -0
  574. package/dist/translations/catalog.d.ts.map +1 -0
  575. package/dist/translations/catalog.js +0 -0
  576. package/dist/translations/tenant.d.ts +16 -0
  577. package/dist/translations/tenant.d.ts.map +1 -0
  578. package/dist/translations/tenant.js +0 -0
  579. package/dist/types/all.d.ts +60 -0
  580. package/dist/types/all.js +0 -0
  581. package/dist/types.d.ts +86 -0
  582. package/dist/types.d.ts.map +1 -0
  583. package/dist/types.js +0 -0
  584. package/dist/workflow/adapters/db-adapter.d.ts +35 -0
  585. package/dist/workflow/adapters/db-adapter.d.ts.map +1 -0
  586. package/dist/workflow/adapters/db-adapter.js +2 -0
  587. package/dist/workflow/adapters/db-adapter.js.map +1 -0
  588. package/dist/workflow/adapters/file-adapter.d.ts +15 -0
  589. package/dist/workflow/adapters/file-adapter.d.ts.map +1 -0
  590. package/dist/workflow/adapters/file-adapter.js +2 -0
  591. package/dist/workflow/adapters/file-adapter.js.map +1 -0
  592. package/dist/workflow/adapters/index.d.ts +4 -0
  593. package/dist/workflow/adapters/index.js +1 -0
  594. package/dist/workflow/adapters/memory-store.d.ts +19 -0
  595. package/dist/workflow/adapters/memory-store.d.ts.map +1 -0
  596. package/dist/workflow/adapters/memory-store.js +2 -0
  597. package/dist/workflow/adapters/memory-store.js.map +1 -0
  598. package/dist/workflow/expression.d.ts +10 -0
  599. package/dist/workflow/expression.d.ts.map +1 -0
  600. package/dist/workflow/expression.js +2 -0
  601. package/dist/workflow/expression.js.map +1 -0
  602. package/dist/workflow/index.d.ts +10 -0
  603. package/dist/workflow/index.js +1 -0
  604. package/dist/workflow/runner.d.ts +75 -0
  605. package/dist/workflow/runner.d.ts.map +1 -0
  606. package/dist/workflow/runner.js +2 -0
  607. package/dist/workflow/runner.js.map +1 -0
  608. package/dist/workflow/sla-monitor.d.ts +21 -0
  609. package/dist/workflow/sla-monitor.d.ts.map +1 -0
  610. package/dist/workflow/sla-monitor.js +2 -0
  611. package/dist/workflow/sla-monitor.js.map +1 -0
  612. package/dist/workflow/spec.d.ts +100 -0
  613. package/dist/workflow/spec.d.ts.map +1 -0
  614. package/dist/workflow/spec.js +2 -0
  615. package/dist/workflow/spec.js.map +1 -0
  616. package/dist/workflow/state.d.ts +36 -0
  617. package/dist/workflow/state.d.ts.map +1 -0
  618. package/dist/workflow/state.js +0 -0
  619. package/dist/workflow/validation.d.ts +29 -0
  620. package/dist/workflow/validation.d.ts.map +1 -0
  621. package/dist/workflow/validation.js +2 -0
  622. package/dist/workflow/validation.js.map +1 -0
  623. package/package.json +403 -0
@@ -0,0 +1,97 @@
1
+ import { Stability } from "./ownership.js";
2
+ import z$1 from "zod";
3
+ import { AnySchemaModel } from "@lssm/lib.schema";
4
+
5
+ //#region src/presentations.d.ts
6
+ /** V1 presentation kinds (back-compat). Prefer V2 descriptors for new work. */
7
+ type PresentationKind = 'web_component' | 'markdown' | 'data';
8
+ /** Minimal metadata for presentations (V1). */
9
+ interface PresentationMeta {
10
+ name: string;
11
+ version: number;
12
+ stability?: Stability;
13
+ owners?: string[];
14
+ tags?: string[];
15
+ description?: string;
16
+ }
17
+ /** Policy for presentations (flags, pii). */
18
+ interface PresentationPolicy {
19
+ flags?: string[];
20
+ pii?: string[];
21
+ }
22
+ /** Web component presentation (V1). */
23
+ interface WebComponentPresentation {
24
+ kind: 'web_component';
25
+ framework: 'react';
26
+ /** Symbolic key resolved by host via component map */
27
+ componentKey: string;
28
+ /** Props schema (validated at runtime) */
29
+ props: AnySchemaModel;
30
+ analytics?: string[];
31
+ }
32
+ /** Markdown presentation (V1). */
33
+ interface MarkdownPresentation {
34
+ kind: 'markdown';
35
+ /** Inline markdown/MDX content */
36
+ content?: string;
37
+ /** Or a resolvable resource URI handled by ResourceRegistry */
38
+ resourceUri?: string;
39
+ }
40
+ /** Data presentation (V1): structured export description. */
41
+ interface DataPresentation {
42
+ kind: 'data';
43
+ mimeType: string;
44
+ /** Structured data schema */
45
+ model: AnySchemaModel;
46
+ }
47
+ type PresentationContent = WebComponentPresentation | MarkdownPresentation | DataPresentation;
48
+ interface PresentationSpec {
49
+ meta: PresentationMeta;
50
+ policy?: PresentationPolicy;
51
+ content: PresentationContent;
52
+ }
53
+ /** In-memory registry for V1 PresentationSpec. */
54
+ declare class PresentationRegistry {
55
+ private items;
56
+ register(p: PresentationSpec): this;
57
+ list(): PresentationSpec[];
58
+ get(name: string, version?: number): PresentationSpec | undefined;
59
+ }
60
+ declare function jsonSchemaForPresentation(p: PresentationSpec): {
61
+ framework: "react";
62
+ componentKey: string;
63
+ props: z$1.core.JSONSchema.JSONSchema;
64
+ meta: {
65
+ readonly name: string;
66
+ readonly version: number;
67
+ readonly stability: Stability;
68
+ readonly tags: string[];
69
+ readonly description: string;
70
+ };
71
+ kind: PresentationKind;
72
+ } | {
73
+ content: string | undefined;
74
+ resourceUri: string | undefined;
75
+ meta: {
76
+ readonly name: string;
77
+ readonly version: number;
78
+ readonly stability: Stability;
79
+ readonly tags: string[];
80
+ readonly description: string;
81
+ };
82
+ kind: PresentationKind;
83
+ } | {
84
+ mimeType: string;
85
+ model: z$1.core.JSONSchema.JSONSchema;
86
+ meta: {
87
+ readonly name: string;
88
+ readonly version: number;
89
+ readonly stability: Stability;
90
+ readonly tags: string[];
91
+ readonly description: string;
92
+ };
93
+ kind: PresentationKind;
94
+ };
95
+ //#endregion
96
+ export { DataPresentation, MarkdownPresentation, PresentationContent, PresentationKind, PresentationMeta, PresentationPolicy, PresentationRegistry, PresentationSpec, WebComponentPresentation, jsonSchemaForPresentation };
97
+ //# sourceMappingURL=presentations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"presentations.d.ts","names":[],"sources":["../src/presentations.ts"],"sourcesContent":[],"mappings":";;;;;;KAKY,gBAAA;AAAZ;AAGiB,UAAA,gBAAA,CAAgB;EAUhB,IAAA,EAAA,MAAA;EAMA,OAAA,EAAA,MAAA;EAWA,SAAA,CAAA,EAxBH,SAwBG;EASA,MAAA,CAAA,EAAA,MAAA,EAAA;EAOL,IAAA,CAAA,EAAA,MAAA,EAAA;EACR,WAAA,CAAA,EAAA,MAAA;;;AAEgB,UApCH,kBAAA,CAoCG;EAEH,KAAA,CAAA,EAAA,MAAA,EAAA;EACT,GAAA,CAAA,EAAA,MAAA,EAAA;;;AAEsB,UAnCb,wBAAA,CAmCa;EAQjB,IAAA,EAAA,eAAA;EAGC,SAAA,EAAA,OAAA;EAOJ;EAI6B,YAAA,EAAA,MAAA;EAAgB;EAevC,KAAA,EAlEP,cAkEO;EAA6B,SAAA,CAAA,EAAA,MAAA,EAAA;;;AASR,UAtEpB,oBAAA,CAsEoB;;EAAA;;;EAAA,WAAA,CAAA,EAAA,MAAA;;;UA7DpB,gBAAA;;;;SAIR;;KAGG,mBAAA,GACR,2BACA,uBACA;UAEa,gBAAA;QACT;WACG;WACA;;;cAQE,oBAAA;;cAGC;UAOJ;uCAI6B;;iBAevB,yBAAA,IAA6B;;;;;;;;;;;QASR;;;;;;;;;;;QAAA;;;;;;;;;;;QAAA"}
@@ -0,0 +1,2 @@
1
+ import e from"zod";function t(e){return`${e.meta.name}.v${e.meta.version}`}var n=class{items=new Map;register(e){let n=t(e);if(this.items.has(n))throw Error(`Duplicate presentation ${n}`);return this.items.set(n,e),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,i]of this.items.entries())t.startsWith(`${e}.v`)&&i.meta.version>r&&(r=i.meta.version,n=i);return n}};function r(t){let n={meta:{name:t.meta.name,version:t.meta.version,stability:t.meta.stability??`stable`,tags:t.meta.tags??[],description:t.meta.description??``},kind:t.content.kind};return t.content.kind===`web_component`?{...n,framework:t.content.framework,componentKey:t.content.componentKey,props:e.toJSONSchema(t.content.props.getZod())}:t.content.kind===`markdown`?{...n,content:t.content.content,resourceUri:t.content.resourceUri}:{...n,mimeType:t.content.mimeType,model:e.toJSONSchema(t.content.model.getZod())}}export{n as PresentationRegistry,r as jsonSchemaForPresentation};
2
+ //# sourceMappingURL=presentations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"presentations.js","names":["candidate: PresentationSpec | undefined","z"],"sources":["../src/presentations.ts"],"sourcesContent":["import type { AnySchemaModel } from '@lssm/lib.schema';\nimport type { Stability } from './ownership';\nimport z from 'zod';\n\n/** V1 presentation kinds (back-compat). Prefer V2 descriptors for new work. */\nexport type PresentationKind = 'web_component' | 'markdown' | 'data';\n\n/** Minimal metadata for presentations (V1). */\nexport interface PresentationMeta {\n name: string;\n version: number;\n stability?: Stability;\n owners?: string[];\n tags?: string[];\n description?: string;\n}\n\n/** Policy for presentations (flags, pii). */\nexport interface PresentationPolicy {\n flags?: string[];\n pii?: string[];\n}\n\n/** Web component presentation (V1). */\nexport interface WebComponentPresentation {\n kind: 'web_component';\n framework: 'react'; // future: 'vue' | 'angular'\n /** Symbolic key resolved by host via component map */\n componentKey: string;\n /** Props schema (validated at runtime) */\n props: AnySchemaModel;\n analytics?: string[];\n}\n\n/** Markdown presentation (V1). */\nexport interface MarkdownPresentation {\n kind: 'markdown';\n /** Inline markdown/MDX content */\n content?: string;\n /** Or a resolvable resource URI handled by ResourceRegistry */\n resourceUri?: string;\n}\n\n/** Data presentation (V1): structured export description. */\nexport interface DataPresentation {\n kind: 'data';\n mimeType: string; // e.g., application/json, application/xml\n /** Structured data schema */\n model: AnySchemaModel;\n}\n\nexport type PresentationContent =\n | WebComponentPresentation\n | MarkdownPresentation\n | DataPresentation;\n\nexport interface PresentationSpec {\n meta: PresentationMeta;\n policy?: PresentationPolicy;\n content: PresentationContent;\n}\n\nfunction keyOf(p: PresentationSpec) {\n return `${p.meta.name}.v${p.meta.version}`;\n}\n\n/** In-memory registry for V1 PresentationSpec. */\nexport class PresentationRegistry {\n private items = new Map<string, PresentationSpec>();\n\n register(p: PresentationSpec): this {\n const key = keyOf(p);\n if (this.items.has(key)) throw new Error(`Duplicate presentation ${key}`);\n this.items.set(key, p);\n return this;\n }\n\n list(): PresentationSpec[] {\n return [...this.items.values()];\n }\n\n get(name: string, version?: number): PresentationSpec | undefined {\n if (version != null) return this.items.get(`${name}.v${version}`);\n let candidate: PresentationSpec | undefined;\n let max = -Infinity;\n for (const [k, p] of this.items.entries()) {\n if (!k.startsWith(`${name}.v`)) continue;\n if (p.meta.version > max) {\n max = p.meta.version;\n candidate = p;\n }\n }\n return candidate;\n }\n}\n\nexport function jsonSchemaForPresentation(p: PresentationSpec) {\n const base = {\n meta: {\n name: p.meta.name,\n version: p.meta.version,\n stability: p.meta.stability ?? 'stable',\n tags: p.meta.tags ?? [],\n description: p.meta.description ?? '',\n },\n kind: (p.content as any).kind as PresentationKind,\n } as const;\n\n if (p.content.kind === 'web_component') {\n return {\n ...base,\n framework: p.content.framework,\n componentKey: p.content.componentKey,\n props: z.toJSONSchema(p.content.props.getZod()),\n };\n }\n if (p.content.kind === 'markdown') {\n return {\n ...base,\n content: p.content.content,\n resourceUri: p.content.resourceUri,\n };\n }\n return {\n ...base,\n mimeType: p.content.mimeType,\n model: z.toJSONSchema(p.content.model.getZod()),\n };\n}\n"],"mappings":"mBA8DA,SAAS,EAAM,EAAqB,CAClC,MAAO,GAAG,EAAE,KAAK,KAAK,IAAI,EAAE,KAAK,UAInC,IAAa,EAAb,KAAkC,CAChC,MAAgB,IAAI,IAEpB,SAAS,EAA2B,CAClC,IAAM,EAAM,EAAM,EAAE,CACpB,GAAI,KAAK,MAAM,IAAI,EAAI,CAAE,MAAU,MAAM,0BAA0B,IAAM,CAEzE,OADA,KAAK,MAAM,IAAI,EAAK,EAAE,CACf,KAGT,MAA2B,CACzB,MAAO,CAAC,GAAG,KAAK,MAAM,QAAQ,CAAC,CAGjC,IAAI,EAAc,EAAgD,CAChE,GAAI,GAAW,KAAM,OAAO,KAAK,MAAM,IAAI,GAAG,EAAK,IAAI,IAAU,CACjE,IAAIA,EACA,EAAM,KACV,IAAK,GAAM,CAAC,EAAG,KAAM,KAAK,MAAM,SAAS,CAClC,EAAE,WAAW,GAAG,EAAK,IAAI,EAC1B,EAAE,KAAK,QAAU,IACnB,EAAM,EAAE,KAAK,QACb,EAAY,GAGhB,OAAO,IAIX,SAAgB,EAA0B,EAAqB,CAC7D,IAAM,EAAO,CACX,KAAM,CACJ,KAAM,EAAE,KAAK,KACb,QAAS,EAAE,KAAK,QAChB,UAAW,EAAE,KAAK,WAAa,SAC/B,KAAM,EAAE,KAAK,MAAQ,EAAE,CACvB,YAAa,EAAE,KAAK,aAAe,GACpC,CACD,KAAO,EAAE,QAAgB,KAC1B,CAiBD,OAfI,EAAE,QAAQ,OAAS,gBACd,CACL,GAAG,EACH,UAAW,EAAE,QAAQ,UACrB,aAAc,EAAE,QAAQ,aACxB,MAAOC,EAAE,aAAa,EAAE,QAAQ,MAAM,QAAQ,CAAC,CAChD,CAEC,EAAE,QAAQ,OAAS,WACd,CACL,GAAG,EACH,QAAS,EAAE,QAAQ,QACnB,YAAa,EAAE,QAAQ,YACxB,CAEI,CACL,GAAG,EACH,SAAU,EAAE,QAAQ,SACpB,MAAOA,EAAE,aAAa,EAAE,QAAQ,MAAM,QAAQ,CAAC,CAChD"}
@@ -0,0 +1,96 @@
1
+ import { OwnerShipMeta } from "./ownership.js";
2
+ import { AnySchemaModel } from "@lssm/lib.schema";
3
+ import { BlockConfig } from "@blocknote/core";
4
+
5
+ //#region src/presentations.v2.d.ts
6
+ /** Supported render targets for the transform engine and descriptors. */
7
+ type PresentationTarget = 'react' | 'markdown' | 'application/json' | 'application/xml';
8
+ interface PresentationV2Meta extends Partial<OwnerShipMeta> {
9
+ /** Fully-qualified presentation name (e.g., "sigil.auth.webauth_tabs_v2"). */
10
+ name: string;
11
+ /** Version of this descriptor. Increment on breaking changes. */
12
+ version: number;
13
+ /** Human-readable description for docs/a11y. Required by validators. */
14
+ description?: string;
15
+ }
16
+ /** React component presentation source. */
17
+ interface PresentationSourceComponentReact {
18
+ /** Source marker for React component presentations. */
19
+ type: 'component';
20
+ /** Framework for the component source (currently only 'react'). */
21
+ framework: 'react';
22
+ /** Component key resolved by host `componentMap`. */
23
+ componentKey: string;
24
+ /** Optional props schema to validate against. */
25
+ props?: AnySchemaModel;
26
+ }
27
+ /** BlockNoteJS document presentation source. */
28
+ interface PresentationSourceBlocknotejs {
29
+ /** Source marker for BlockNoteJS document presentations. */
30
+ type: 'blocknotejs';
31
+ /** BlockNoteJS JSON document. */
32
+ docJson: unknown;
33
+ /** Optional BlockNote config to guide rendering. */
34
+ blockConfig?: BlockConfig;
35
+ }
36
+ type PresentationSource = PresentationSourceComponentReact | PresentationSourceBlocknotejs;
37
+ /**
38
+ * Normalized presentation descriptor decoupled from framework/adapters.
39
+ * Renderers and validators are provided via TransformEngine.
40
+ */
41
+ interface PresentationDescriptorV2 {
42
+ meta: PresentationV2Meta;
43
+ policy?: {
44
+ flags?: string[];
45
+ pii?: string[];
46
+ };
47
+ source: PresentationSource;
48
+ targets: PresentationTarget[];
49
+ }
50
+ interface RenderContext {
51
+ /** Optional locale hint (i18n). */
52
+ locale?: string;
53
+ /** Enabled feature flags to drive conditional rendering. */
54
+ featureFlags?: string[];
55
+ /** Redaction hook for custom PII handling. */
56
+ redact?: (path: string, value: unknown) => unknown;
57
+ }
58
+ interface PresentationRenderer<TOut> {
59
+ target: PresentationTarget;
60
+ render: (desc: PresentationDescriptorV2, ctx?: RenderContext) => Promise<TOut>;
61
+ }
62
+ interface PresentationValidator {
63
+ validate: (desc: PresentationDescriptorV2, target: PresentationTarget, ctx?: RenderContext) => Promise<void> | void;
64
+ }
65
+ /**
66
+ * Pluggable transform engine that renders descriptors to various targets
67
+ * and runs validators (e.g., basic metadata checks, PII redaction policies).
68
+ */
69
+ declare class TransformEngine {
70
+ private renderers;
71
+ private validators;
72
+ register<TOut>(renderer: PresentationRenderer<TOut>): this;
73
+ addValidator(v: PresentationValidator): this;
74
+ render<TOut = unknown>(target: PresentationTarget, desc: PresentationDescriptorV2, ctx?: RenderContext): Promise<TOut>;
75
+ }
76
+ /** Create a TransformEngine instance with default markdown/json/xml renderers. */
77
+ declare function createDefaultTransformEngine(): TransformEngine;
78
+ /** Serializable render descriptor for React hosts. */
79
+ type ReactRenderDescriptor = {
80
+ kind: 'react_component';
81
+ componentKey: string;
82
+ props?: Record<string, unknown>;
83
+ } | {
84
+ kind: 'blocknotejs';
85
+ docJson: unknown;
86
+ blockConfig?: BlockConfig;
87
+ };
88
+ /** Register a default React target renderer that returns a serializable descriptor. */
89
+ declare function registerDefaultReactRenderer(engine: TransformEngine): TransformEngine;
90
+ /**
91
+ * Add basic validators (e.g., meta.description presence) to the engine.
92
+ */
93
+ declare function registerBasicValidation(engine: TransformEngine): TransformEngine;
94
+ //#endregion
95
+ export { PresentationDescriptorV2, PresentationRenderer, PresentationSource, PresentationSourceBlocknotejs, PresentationSourceComponentReact, PresentationTarget, PresentationV2Meta, PresentationValidator, ReactRenderDescriptor, RenderContext, TransformEngine, createDefaultTransformEngine, registerBasicValidation, registerDefaultReactRenderer };
96
+ //# sourceMappingURL=presentations.v2.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"presentations.v2.d.ts","names":[],"sources":["../src/presentations.v2.ts"],"sourcesContent":[],"mappings":";;;;;;KAKY,kBAAA;AAAA,UAMK,kBAAA,SAA2B,OANd,CAMsB,aANtB,CAAA,CAAA;EAMb;EAUA,IAAA,EAAA,MAAA;EAYA;EASL,OAAA,EAAA,MAAA;EAQK;EACT,WAAA,CAAA,EAAA,MAAA;;;AAGqB,UAjCZ,gCAAA,CAiCY;EAGZ;EASA,IAAA,EAAA,WAAA;EACP;EAEA,SAAA,EAAA,OAAA;EACA;EACK,YAAA,EAAA,MAAA;EAAR;EAAO,KAAA,CAAA,EA1CJ,cA0CI;AAGd;;AAGY,UA5CK,6BAAA,CA4CL;EACF;EACH,IAAA,EAAA,aAAA;EAAO;EAOD,OAAA,EAAA,OAAA;EAOmC;EAArB,WAAA,CAAA,EAtDX,WAsDW;;AAaf,KAhEA,kBAAA,GACR,gCA+DQ,GA9DR,6BA8DQ;;;;;AAGA,UA3DK,wBAAA,CA2DL;EAsBI,IAAA,EAhFR,kBAgFQ;EA4FJ,MAAA,CAAA,EAAA;IASI,KAAA,CAAA,EAAA,MAAA,EAAA;IA8BA,GAAA,CAAA,EAAA,MAAA,EAAA;;UAjNN;WACC;;UAGM,aAAA;;;;;;;;UASA;UACP;iBAEA,gCACA,kBACH,QAAQ;;UAGE,qBAAA;mBAEP,kCACE,0BACF,kBACH;;;;;;cAOM,eAAA;;;2BAOc,qBAAqB;kBAO9B;iCAMN,0BACF,gCACA,gBACL,QAAQ;;;iBAsBG,4BAAA,CAAA,GAA4B;;KA4FhC,qBAAA;;;UAIE;;;;gBAE6C;;;iBAG3C,4BAAA,SAAqC,kBAAe;;;;iBA8BpD,uBAAA,SAAgC,kBAAe"}
@@ -0,0 +1,2 @@
1
+ var e=class{renderers=new Map;validators=[];register(e){let t=this.renderers.get(e.target)??[];return t.push(e),this.renderers.set(e.target,t),this}addValidator(e){return this.validators.push(e),this}async render(e,t,n){if(!t.targets.includes(e))throw Error(`Target ${e} not declared for ${t.meta.name}.v${t.meta.version}`);for(let r of this.validators)await r.validate(t,e,n);let r=this.renderers.get(e)??[];for(let e of r)try{return await e.render(t,n)}catch{}throw Error(`No renderer available for ${e}`)}};function t(){let t=new e,n=(e,t)=>{let n=JSON.parse(JSON.stringify(t)),r=e.policy?.pii??[],i=(e,t)=>{let n=t.replace(/^\//,``).replace(/\[(\d+)\]/g,`.$1`).split(`.`).filter(Boolean),r=e;for(let e=0;e<n.length-1;e++){let t=n[e];if(r&&typeof r==`object`&&t in r)r=r[t];else return}let i=n[n.length-1];r&&typeof r==`object`&&i&&i in r&&(r[i]=`[REDACTED]`)};for(let e of r)i(n,e);return n};return t.register({target:`markdown`,async render(e){if(e.source.type===`blocknotejs`){let t=n(e,{text:typeof e.source.docJson==`string`?e.source.docJson:JSON.stringify(e.source.docJson)});return{mimeType:`text/markdown`,body:String(t.text)}}if(e.source.type===`component`)return{mimeType:`text/markdown`,body:`${`# ${e.meta.name} v${e.meta.version}`}${e.meta.description?`\n\n${e.meta.description}`:``}${e.meta.tags&&e.meta.tags.length?`\n\nTags: ${e.meta.tags.join(`, `)}`:``}${e.meta.owners&&e.meta.owners.length?`\n\nOwners: ${e.meta.owners.join(`, `)}`:``}${`\n\nComponent: \`${e.source.componentKey}\``}${e.policy?.pii?.length?`\n\nRedacted paths: ${e.policy.pii.map(e=>`\`${e}\``).join(`, `)}`:``}`};throw Error(`unsupported`)}}),t.register({target:`application/json`,async render(e){let t=n(e,{meta:e.meta,source:e.source});return{mimeType:`application/json`,body:JSON.stringify(t,null,2)}}}),t.register({target:`application/xml`,async render(e){let t=n(e,{meta:e.meta,source:e.source});return{mimeType:`application/xml`,body:`<presentation name="${e.meta.name}" version="${e.meta.version}"><json>${encodeURIComponent(JSON.stringify(t))}</json></presentation>`}}}),t}function n(e){return e.register({target:`react`,async render(e){if(e.source.type===`component`){let t=e.source.props&&e.source.props.getZod().safeParse({}).success?{}:void 0;return{kind:`react_component`,componentKey:e.source.componentKey,props:t}}return{kind:`blocknotejs`,docJson:e.source.docJson,blockConfig:e.source.blockConfig}}}),e}function r(e){return e.addValidator({validate(e){if(!e.meta.description||e.meta.description.length<3)throw Error(`Presentation ${e.meta.name}.v${e.meta.version} missing meta.description`)}}),e}export{e as TransformEngine,t as createDefaultTransformEngine,r as registerBasicValidation,n as registerDefaultReactRenderer};
2
+ //# sourceMappingURL=presentations.v2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"presentations.v2.js","names":[],"sources":["../src/presentations.v2.ts"],"sourcesContent":["import type { AnySchemaModel } from '@lssm/lib.schema';\nimport type { OwnerShipMeta } from './ownership';\nimport type { BlockConfig } from '@blocknote/core';\n\n/** Supported render targets for the transform engine and descriptors. */\nexport type PresentationTarget =\n | 'react'\n | 'markdown'\n | 'application/json'\n | 'application/xml';\n\nexport interface PresentationV2Meta extends Partial<OwnerShipMeta> {\n /** Fully-qualified presentation name (e.g., \"sigil.auth.webauth_tabs_v2\"). */\n name: string;\n /** Version of this descriptor. Increment on breaking changes. */\n version: number;\n /** Human-readable description for docs/a11y. Required by validators. */\n description?: string;\n}\n\n/** React component presentation source. */\nexport interface PresentationSourceComponentReact {\n /** Source marker for React component presentations. */\n type: 'component';\n /** Framework for the component source (currently only 'react'). */\n framework: 'react';\n /** Component key resolved by host `componentMap`. */\n componentKey: string;\n /** Optional props schema to validate against. */\n props?: AnySchemaModel;\n}\n\n/** BlockNoteJS document presentation source. */\nexport interface PresentationSourceBlocknotejs {\n /** Source marker for BlockNoteJS document presentations. */\n type: 'blocknotejs';\n /** BlockNoteJS JSON document. */\n docJson: unknown;\n /** Optional BlockNote config to guide rendering. */\n blockConfig?: BlockConfig;\n}\n\nexport type PresentationSource =\n | PresentationSourceComponentReact\n | PresentationSourceBlocknotejs;\n\n/**\n * Normalized presentation descriptor decoupled from framework/adapters.\n * Renderers and validators are provided via TransformEngine.\n */\nexport interface PresentationDescriptorV2 {\n meta: PresentationV2Meta;\n policy?: { flags?: string[]; pii?: string[] };\n source: PresentationSource;\n targets: PresentationTarget[]; // which outputs are supported by transforms\n}\n\nexport interface RenderContext {\n /** Optional locale hint (i18n). */\n locale?: string;\n /** Enabled feature flags to drive conditional rendering. */\n featureFlags?: string[];\n /** Redaction hook for custom PII handling. */\n redact?: (path: string, value: unknown) => unknown;\n}\n\nexport interface PresentationRenderer<TOut> {\n target: PresentationTarget;\n render: (\n desc: PresentationDescriptorV2,\n ctx?: RenderContext\n ) => Promise<TOut>;\n}\n\nexport interface PresentationValidator {\n validate: (\n desc: PresentationDescriptorV2,\n target: PresentationTarget,\n ctx?: RenderContext\n ) => Promise<void> | void;\n}\n\n/**\n * Pluggable transform engine that renders descriptors to various targets\n * and runs validators (e.g., basic metadata checks, PII redaction policies).\n */\nexport class TransformEngine {\n private renderers = new Map<\n PresentationTarget,\n PresentationRenderer<any>[]\n >();\n private validators: PresentationValidator[] = [];\n\n register<TOut>(renderer: PresentationRenderer<TOut>): this {\n const arr = this.renderers.get(renderer.target) ?? [];\n arr.push(renderer);\n this.renderers.set(renderer.target, arr);\n return this;\n }\n\n addValidator(v: PresentationValidator): this {\n this.validators.push(v);\n return this;\n }\n\n async render<TOut = unknown>(\n target: PresentationTarget,\n desc: PresentationDescriptorV2,\n ctx?: RenderContext\n ): Promise<TOut> {\n if (!desc.targets.includes(target))\n throw new Error(\n `Target ${target} not declared for ${desc.meta.name}.v${desc.meta.version}`\n );\n for (const v of this.validators) await v.validate(desc, target, ctx);\n const arr = this.renderers.get(target) ?? [];\n for (const r of arr) {\n try {\n const out = await r.render(desc, ctx);\n // first successful renderer wins\n return out as TOut;\n } catch (_e) {\n // try next\n }\n }\n throw new Error(`No renderer available for ${target}`);\n }\n}\n\n// Minimal built-ins (stubs). Host apps can register concrete adapters.\n/** Create a TransformEngine instance with default markdown/json/xml renderers. */\nexport function createDefaultTransformEngine() {\n const engine = new TransformEngine();\n\n const applyPii = (desc: PresentationDescriptorV2, obj: any) => {\n const clone = JSON.parse(JSON.stringify(obj));\n const paths = desc.policy?.pii ?? [];\n const setAtPath = (root: any, path: string) => {\n const segs = path\n .replace(/^\\//, '')\n .replace(/\\[(\\d+)\\]/g, '.$1')\n .split('.')\n .filter(Boolean);\n let cur = root;\n for (let i = 0; i < segs.length - 1; i++) {\n const k = segs[i]!;\n if (cur && typeof cur === 'object' && k in cur) cur = cur[k];\n else return;\n }\n const last = segs[segs.length - 1];\n if (cur && typeof cur === 'object' && last && last in cur)\n cur[last] = '[REDACTED]';\n };\n for (const p of paths) setAtPath(clone, p);\n return clone;\n };\n\n // markdown output for both blocknote and component\n engine.register<{ mimeType: 'text/markdown'; body: string }>({\n target: 'markdown',\n async render(desc) {\n if (desc.source.type === 'blocknotejs') {\n // TODO: convert BlockNote doc JSON → markdown (placeholder for now)\n const raw =\n typeof desc.source.docJson === 'string'\n ? desc.source.docJson\n : JSON.stringify(desc.source.docJson);\n const redacted = applyPii(desc, { text: raw });\n return { mimeType: 'text/markdown', body: String(redacted.text) };\n }\n if (desc.source.type === 'component') {\n const header = `# ${desc.meta.name} v${desc.meta.version}`;\n const about = desc.meta.description\n ? `\\n\\n${desc.meta.description}`\n : '';\n const tags =\n desc.meta.tags && desc.meta.tags.length\n ? `\\n\\nTags: ${desc.meta.tags.join(', ')}`\n : '';\n const owners =\n desc.meta.owners && desc.meta.owners.length\n ? `\\n\\nOwners: ${desc.meta.owners.join(', ')}`\n : '';\n const comp = `\\n\\nComponent: \\`${desc.source.componentKey}\\``;\n const policy = desc.policy?.pii?.length\n ? `\\n\\nRedacted paths: ${desc.policy.pii.map((p) => `\\`${p}\\``).join(', ')}`\n : '';\n const body = `${header}${about}${tags}${owners}${comp}${policy}`;\n return { mimeType: 'text/markdown', body };\n }\n throw new Error('unsupported');\n },\n });\n\n // json snapshot of source\n engine.register<{ mimeType: 'application/json'; body: string }>({\n target: 'application/json',\n async render(desc) {\n const payload = applyPii(desc, { meta: desc.meta, source: desc.source });\n return {\n mimeType: 'application/json',\n body: JSON.stringify(payload, null, 2),\n };\n },\n });\n\n // xml (simple wrapper around json for now)\n engine.register<{ mimeType: 'application/xml'; body: string }>({\n target: 'application/xml',\n async render(desc) {\n const json = applyPii(desc, { meta: desc.meta, source: desc.source });\n const body = `<presentation name=\"${desc.meta.name}\" version=\"${desc.meta.version}\"><json>${encodeURIComponent(\n JSON.stringify(json)\n )}</json></presentation>`;\n return { mimeType: 'application/xml', body };\n },\n });\n\n return engine;\n}\n\n// React target returns a serializable descriptor the host can render.\n/** Serializable render descriptor for React hosts. */\nexport type ReactRenderDescriptor =\n | {\n kind: 'react_component';\n componentKey: string;\n props?: Record<string, unknown>;\n }\n | { kind: 'blocknotejs'; docJson: unknown; blockConfig?: BlockConfig };\n\n/** Register a default React target renderer that returns a serializable descriptor. */\nexport function registerDefaultReactRenderer(engine: TransformEngine) {\n engine.register<ReactRenderDescriptor>({\n target: 'react',\n async render(desc) {\n if (desc.source.type === 'component') {\n const props = desc.source.props\n ? desc.source.props.getZod().safeParse({}).success\n ? {}\n : undefined\n : undefined;\n return {\n kind: 'react_component',\n componentKey: desc.source.componentKey,\n props,\n } as ReactRenderDescriptor;\n }\n // blocknote\n return {\n kind: 'blocknotejs',\n docJson: desc.source.docJson,\n blockConfig: desc.source.blockConfig,\n } as ReactRenderDescriptor;\n },\n });\n return engine;\n}\n\n/**\n * Add basic validators (e.g., meta.description presence) to the engine.\n */\nexport function registerBasicValidation(engine: TransformEngine) {\n // Ensure description is provided for a11y/i18n/docs\n engine.addValidator({\n validate(desc) {\n if (!desc.meta.description || desc.meta.description.length < 3)\n throw new Error(\n `Presentation ${desc.meta.name}.v${desc.meta.version} missing meta.description`\n );\n },\n });\n return engine;\n}\n"],"mappings":"AAsFA,IAAa,EAAb,KAA6B,CAC3B,UAAoB,IAAI,IAIxB,WAA8C,EAAE,CAEhD,SAAe,EAA4C,CACzD,IAAM,EAAM,KAAK,UAAU,IAAI,EAAS,OAAO,EAAI,EAAE,CAGrD,OAFA,EAAI,KAAK,EAAS,CAClB,KAAK,UAAU,IAAI,EAAS,OAAQ,EAAI,CACjC,KAGT,aAAa,EAAgC,CAE3C,OADA,KAAK,WAAW,KAAK,EAAE,CAChB,KAGT,MAAM,OACJ,EACA,EACA,EACe,CACf,GAAI,CAAC,EAAK,QAAQ,SAAS,EAAO,CAChC,MAAU,MACR,UAAU,EAAO,oBAAoB,EAAK,KAAK,KAAK,IAAI,EAAK,KAAK,UACnE,CACH,IAAK,IAAM,KAAK,KAAK,WAAY,MAAM,EAAE,SAAS,EAAM,EAAQ,EAAI,CACpE,IAAM,EAAM,KAAK,UAAU,IAAI,EAAO,EAAI,EAAE,CAC5C,IAAK,IAAM,KAAK,EACd,GAAI,CAGF,OAFY,MAAM,EAAE,OAAO,EAAM,EAAI,MAG1B,EAIf,MAAU,MAAM,6BAA6B,IAAS,GAM1D,SAAgB,GAA+B,CAC7C,IAAM,EAAS,IAAI,EAEb,GAAY,EAAgC,IAAa,CAC7D,IAAM,EAAQ,KAAK,MAAM,KAAK,UAAU,EAAI,CAAC,CACvC,EAAQ,EAAK,QAAQ,KAAO,EAAE,CAC9B,GAAa,EAAW,IAAiB,CAC7C,IAAM,EAAO,EACV,QAAQ,MAAO,GAAG,CAClB,QAAQ,aAAc,MAAM,CAC5B,MAAM,IAAI,CACV,OAAO,QAAQ,CACd,EAAM,EACV,IAAK,IAAI,EAAI,EAAG,EAAI,EAAK,OAAS,EAAG,IAAK,CACxC,IAAM,EAAI,EAAK,GACf,GAAI,GAAO,OAAO,GAAQ,UAAY,KAAK,EAAK,EAAM,EAAI,QACrD,OAEP,IAAM,EAAO,EAAK,EAAK,OAAS,GAC5B,GAAO,OAAO,GAAQ,UAAY,GAAQ,KAAQ,IACpD,EAAI,GAAQ,eAEhB,IAAK,IAAM,KAAK,EAAO,EAAU,EAAO,EAAE,CAC1C,OAAO,GAgET,OA5DA,EAAO,SAAsD,CAC3D,OAAQ,WACR,MAAM,OAAO,EAAM,CACjB,GAAI,EAAK,OAAO,OAAS,cAAe,CAMtC,IAAM,EAAW,EAAS,EAAM,CAAE,KAHhC,OAAO,EAAK,OAAO,SAAY,SAC3B,EAAK,OAAO,QACZ,KAAK,UAAU,EAAK,OAAO,QAAQ,CACI,CAAC,CAC9C,MAAO,CAAE,SAAU,gBAAiB,KAAM,OAAO,EAAS,KAAK,CAAE,CAEnE,GAAI,EAAK,OAAO,OAAS,YAkBvB,MAAO,CAAE,SAAU,gBAAiB,KADvB,GAhBE,KAAK,EAAK,KAAK,KAAK,IAAI,EAAK,KAAK,YACnC,EAAK,KAAK,YACpB,OAAO,EAAK,KAAK,cACjB,KAEF,EAAK,KAAK,MAAQ,EAAK,KAAK,KAAK,OAC7B,aAAa,EAAK,KAAK,KAAK,KAAK,KAAK,GACtC,KAEJ,EAAK,KAAK,QAAU,EAAK,KAAK,OAAO,OACjC,eAAe,EAAK,KAAK,OAAO,KAAK,KAAK,GAC1C,KACO,oBAAoB,EAAK,OAAO,aAAa,MAC3C,EAAK,QAAQ,KAAK,OAC7B,uBAAuB,EAAK,OAAO,IAAI,IAAK,GAAM,KAAK,EAAE,IAAI,CAAC,KAAK,KAAK,GACxE,KAEsC,CAE5C,MAAU,MAAM,cAAc,EAEjC,CAAC,CAGF,EAAO,SAAyD,CAC9D,OAAQ,mBACR,MAAM,OAAO,EAAM,CACjB,IAAM,EAAU,EAAS,EAAM,CAAE,KAAM,EAAK,KAAM,OAAQ,EAAK,OAAQ,CAAC,CACxE,MAAO,CACL,SAAU,mBACV,KAAM,KAAK,UAAU,EAAS,KAAM,EAAE,CACvC,EAEJ,CAAC,CAGF,EAAO,SAAwD,CAC7D,OAAQ,kBACR,MAAM,OAAO,EAAM,CACjB,IAAM,EAAO,EAAS,EAAM,CAAE,KAAM,EAAK,KAAM,OAAQ,EAAK,OAAQ,CAAC,CAIrE,MAAO,CAAE,SAAU,kBAAmB,KAHzB,uBAAuB,EAAK,KAAK,KAAK,aAAa,EAAK,KAAK,QAAQ,UAAU,mBAC1F,KAAK,UAAU,EAAK,CACrB,CAAC,wBAC0C,EAE/C,CAAC,CAEK,EAcT,SAAgB,EAA6B,EAAyB,CAwBpE,OAvBA,EAAO,SAAgC,CACrC,OAAQ,QACR,MAAM,OAAO,EAAM,CACjB,GAAI,EAAK,OAAO,OAAS,YAAa,CACpC,IAAM,EAAQ,EAAK,OAAO,OACtB,EAAK,OAAO,MAAM,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC,QACvC,EAAE,CACF,IAAA,GAEN,MAAO,CACL,KAAM,kBACN,aAAc,EAAK,OAAO,aAC1B,QACD,CAGH,MAAO,CACL,KAAM,cACN,QAAS,EAAK,OAAO,QACrB,YAAa,EAAK,OAAO,YAC1B,EAEJ,CAAC,CACK,EAMT,SAAgB,EAAwB,EAAyB,CAU/D,OARA,EAAO,aAAa,CAClB,SAAS,EAAM,CACb,GAAI,CAAC,EAAK,KAAK,aAAe,EAAK,KAAK,YAAY,OAAS,EAC3D,MAAU,MACR,gBAAgB,EAAK,KAAK,KAAK,IAAI,EAAK,KAAK,QAAQ,2BACtD,EAEN,CAAC,CACK"}
@@ -0,0 +1,61 @@
1
+ import { z } from "zod";
2
+
3
+ //#region src/prompt.d.ts
4
+ type PromptStability = 'experimental' | 'beta' | 'stable' | 'deprecated';
5
+ /** Parameter definition for a prompt argument. */
6
+ interface PromptArg {
7
+ name: string;
8
+ description?: string;
9
+ required?: boolean;
10
+ schema: z.ZodType;
11
+ completeWith?: string;
12
+ }
13
+ /**
14
+ * Rendered content part for a prompt. Clients (MCP) can fetch referenced resources.
15
+ */
16
+ type PromptContentPart = {
17
+ type: 'text';
18
+ text: string;
19
+ } | {
20
+ type: 'resource';
21
+ uri: string;
22
+ title?: string;
23
+ };
24
+ /** Prompt metadata for discoverability and governance. */
25
+ interface PromptMeta {
26
+ name: string;
27
+ version: number;
28
+ title: string;
29
+ description: string;
30
+ tags?: string[];
31
+ stability?: PromptStability;
32
+ owners?: string[];
33
+ }
34
+ /** Policy constraints for prompts (flags, PII paths, rate limits). */
35
+ interface PromptPolicy {
36
+ flags?: string[];
37
+ pii?: string[];
38
+ rateLimit?: {
39
+ rpm: number;
40
+ key: 'user' | 'org' | 'global';
41
+ };
42
+ }
43
+ /** Full prompt specification including args schema and render function. */
44
+ interface PromptSpec<I extends z.ZodType> {
45
+ meta: PromptMeta;
46
+ args: PromptArg[];
47
+ input: I;
48
+ policy?: PromptPolicy;
49
+ /** Render MCP-friendly content parts. DO NOT perform side effects here. */
50
+ render: (args: z.infer<I>, ctx: {
51
+ userId?: string | null;
52
+ orgId?: string | null;
53
+ locale?: string;
54
+ link: (template: string, vars: Record<string, string | number>) => string;
55
+ }) => Promise<PromptContentPart[]>;
56
+ }
57
+ /** Identity helper that preserves generic inference when declaring prompts. */
58
+ declare function definePrompt<I extends z.ZodType>(spec: PromptSpec<I>): PromptSpec<I>;
59
+ //#endregion
60
+ export { PromptArg, PromptContentPart, PromptMeta, PromptPolicy, PromptSpec, PromptStability, definePrompt };
61
+ //# sourceMappingURL=prompt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt.d.ts","names":[],"sources":["../src/prompt.ts"],"sourcesContent":[],"mappings":";;;KAEY,eAAA;;AAAA,UAGK,SAAA,CAHU;EAGV,IAAA,EAAA,MAAS;EAWd,WAAA,CAAA,EAAA,MAAiB;EAKZ,QAAA,CAAA,EAAA,OAAU;EAWV,MAAA,EAvBP,CAAA,CAAE,OAuBiB;EAOZ,YAAA,CAAU,EAAA,MAAA;;;;;AAIhB,KA3BC,iBAAA,GA2BD;EAIO,IAAA,EAAA,MAAA;EAAN,IAAA,EAAA,MAAA;CAKyB,GAAA;EAEtB,IAAA,EAAA,UAAA;EAAR,GAAA,EAAA,MAAA;EAAO,KAAA,CAAA,EAAA,MAAA;AAId,CAAA;;AACmB,UAtCF,UAAA,CAsCE;EAAX,IAAA,EAAA,MAAA;EACM,OAAA,EAAA,MAAA;EAAX,KAAA,EAAA,MAAA;EAAU,WAAA,EAAA,MAAA;;cAjCC;;;;UAKG,YAAA;;;;;;;;;UAOA,qBAAqB,CAAA,CAAE;QAChC;QACA;SACC;WACE;;iBAID,CAAA,CAAE,MAAM;;;;mCAKmB;QAE9B,QAAQ;;;iBAIC,uBAAuB,CAAA,CAAE,eACjC,WAAW,KAChB,WAAW"}
package/dist/prompt.js ADDED
@@ -0,0 +1,2 @@
1
+ import{z as e}from"zod";function t(e){return e}export{t as definePrompt};
2
+ //# sourceMappingURL=prompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt.js","names":[],"sources":["../src/prompt.ts"],"sourcesContent":["import { z } from 'zod';\n\nexport type PromptStability = 'experimental' | 'beta' | 'stable' | 'deprecated';\n\n/** Parameter definition for a prompt argument. */\nexport interface PromptArg {\n name: string;\n description?: string;\n required?: boolean;\n schema: z.ZodType; // zod schema for this argument\n completeWith?: string; // optional completion source name\n}\n\n/**\n * Rendered content part for a prompt. Clients (MCP) can fetch referenced resources.\n */\nexport type PromptContentPart =\n | { type: 'text'; text: string }\n | { type: 'resource'; uri: string; title?: string };\n\n/** Prompt metadata for discoverability and governance. */\nexport interface PromptMeta {\n name: string; // e.g. \"sigil.signup-help\"\n version: number; // bump on breaking change\n title: string;\n description: string;\n tags?: string[];\n stability?: PromptStability;\n owners?: string[];\n}\n\n/** Policy constraints for prompts (flags, PII paths, rate limits). */\nexport interface PromptPolicy {\n flags?: string[];\n pii?: string[]; // JSON-like paths within args to redact in logs/prompts\n rateLimit?: { rpm: number; key: 'user' | 'org' | 'global' };\n}\n\n/** Full prompt specification including args schema and render function. */\nexport interface PromptSpec<I extends z.ZodType> {\n meta: PromptMeta;\n args: PromptArg[];\n input: I; // full args object schema (zod)\n policy?: PromptPolicy;\n\n /** Render MCP-friendly content parts. DO NOT perform side effects here. */\n render: (\n args: z.infer<I>,\n ctx: {\n userId?: string | null;\n orgId?: string | null;\n locale?: string;\n link: (template: string, vars: Record<string, string | number>) => string;\n }\n ) => Promise<PromptContentPart[]>;\n}\n\n/** Identity helper that preserves generic inference when declaring prompts. */\nexport function definePrompt<I extends z.ZodType>(\n spec: PromptSpec<I>\n): PromptSpec<I> {\n return spec;\n}\n"],"mappings":"wBA0DA,SAAgB,EACd,EACe,CACf,OAAO"}
@@ -0,0 +1,16 @@
1
+ import { PromptSpec } from "./prompt.js";
2
+ import { z } from "zod";
3
+
4
+ //#region src/promptRegistry.d.ts
5
+ declare class PromptRegistry {
6
+ private prompts;
7
+ /** Register a prompt. Throws on duplicate name+version. */
8
+ register<I extends z.ZodType>(p: PromptSpec<I>): this;
9
+ /** List all registered prompts. */
10
+ list(): PromptSpec<any>[];
11
+ /** Get prompt by name; when version omitted, returns highest version. */
12
+ get(name: string, version?: number): PromptSpec<any> | undefined;
13
+ }
14
+ //#endregion
15
+ export { PromptRegistry };
16
+ //# sourceMappingURL=promptRegistry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"promptRegistry.d.ts","names":[],"sources":["../src/promptRegistry.ts"],"sourcesContent":[],"mappings":";;;;cAGa,cAAA;;EAAA;EAIU,QAAA,CAAA,UAAF,CAAA,CAAE,OAAA,CAAA,CAAA,CAAA,EAAY,UAAZ,CAAuB,CAAvB,CAAA,CAAA,EAAA,IAAA;EAAuB;EAAX,IAAA,CAAA,CAAA,EAQ7B,UAR6B,CAAA,GAAA,CAAA,EAAA;EAQ7B;EAK8B,GAAA,CAAA,IAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAAA,MAAA,CAAA,EAAA,UAAA,CAAA,GAAA,CAAA,GAAA,SAAA"}
@@ -0,0 +1,2 @@
1
+ import{z as e}from"zod";var t=class{prompts=new Map;register(e){let t=`${e.meta.name}.v${e.meta.version}`;if(this.prompts.has(t))throw Error(`Duplicate prompt ${t}`);return this.prompts.set(t,e),this}list(){return[...this.prompts.values()]}get(e,t){if(t!=null)return this.prompts.get(`${e}.v${t}`);let n,r=-1/0;for(let[t,i]of this.prompts.entries())t.startsWith(`${e}.v`)&&i.meta.version>r&&(r=i.meta.version,n=i);return n}};export{t as PromptRegistry};
2
+ //# sourceMappingURL=promptRegistry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"promptRegistry.js","names":["candidate: PromptSpec<any> | undefined"],"sources":["../src/promptRegistry.ts"],"sourcesContent":["import type { PromptSpec } from './prompt';\nimport { z } from 'zod';\n\nexport class PromptRegistry {\n private prompts = new Map<string, PromptSpec<any>>(); // key = name.vX\n\n /** Register a prompt. Throws on duplicate name+version. */\n register<I extends z.ZodType>(p: PromptSpec<I>): this {\n const key = `${p.meta.name}.v${p.meta.version}`;\n if (this.prompts.has(key)) throw new Error(`Duplicate prompt ${key}`);\n this.prompts.set(key, p);\n return this;\n }\n\n /** List all registered prompts. */\n list() {\n return [...this.prompts.values()];\n }\n\n /** Get prompt by name; when version omitted, returns highest version. */\n get(name: string, version?: number) {\n if (version != null) return this.prompts.get(`${name}.v${version}`);\n // latest by highest version\n let candidate: PromptSpec<any> | undefined;\n let max = -Infinity;\n for (const [k, p] of this.prompts.entries()) {\n if (!k.startsWith(`${name}.v`)) continue;\n if (p.meta.version > max) {\n max = p.meta.version;\n candidate = p;\n }\n }\n return candidate;\n }\n}\n"],"mappings":"wBAGA,IAAa,EAAb,KAA4B,CAC1B,QAAkB,IAAI,IAGtB,SAA8B,EAAwB,CACpD,IAAM,EAAM,GAAG,EAAE,KAAK,KAAK,IAAI,EAAE,KAAK,UACtC,GAAI,KAAK,QAAQ,IAAI,EAAI,CAAE,MAAU,MAAM,oBAAoB,IAAM,CAErE,OADA,KAAK,QAAQ,IAAI,EAAK,EAAE,CACjB,KAIT,MAAO,CACL,MAAO,CAAC,GAAG,KAAK,QAAQ,QAAQ,CAAC,CAInC,IAAI,EAAc,EAAkB,CAClC,GAAI,GAAW,KAAM,OAAO,KAAK,QAAQ,IAAI,GAAG,EAAK,IAAI,IAAU,CAEnE,IAAIA,EACA,EAAM,KACV,IAAK,GAAM,CAAC,EAAG,KAAM,KAAK,QAAQ,SAAS,CACpC,EAAE,WAAW,GAAG,EAAK,IAAI,EAC1B,EAAE,KAAK,QAAU,IACnB,EAAM,EAAE,KAAK,QACb,EAAY,GAGhB,OAAO"}
@@ -0,0 +1,20 @@
1
+ import { BehaviorSignal, ErrorSignal, RegenerationContext, TelemetrySignal } from "./types.js";
2
+
3
+ //#region src/regenerator/adapters.d.ts
4
+ interface TelemetrySignalProvider {
5
+ pollTelemetry(context: RegenerationContext, since: Date, until: Date): Promise<TelemetrySignal[]>;
6
+ }
7
+ interface ErrorSignalProvider {
8
+ pollErrors(context: RegenerationContext, since: Date, until: Date): Promise<ErrorSignal[]>;
9
+ }
10
+ interface BehaviorSignalProvider {
11
+ pollBehavior(context: RegenerationContext, since: Date, until: Date): Promise<BehaviorSignal[]>;
12
+ }
13
+ interface SignalAdapters {
14
+ telemetry?: TelemetrySignalProvider;
15
+ errors?: ErrorSignalProvider;
16
+ behavior?: BehaviorSignalProvider;
17
+ }
18
+ //#endregion
19
+ export { BehaviorSignalProvider, ErrorSignalProvider, SignalAdapters, TelemetrySignalProvider };
20
+ //# sourceMappingURL=adapters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapters.d.ts","names":[],"sources":["../../src/regenerator/adapters.ts"],"sourcesContent":[],"mappings":";;;UAOiB,uBAAA;yBAEJ,4BACF,aACA,OACN,QAAQ;AALb;AAEa,UAMI,mBAAA,CANJ;EACF,UAAA,CAAA,OAAA,EAOE,mBAPF,EAAA,KAAA,EAQA,IARA,EAAA,KAAA,EASA,IATA,CAAA,EAUN,OAVM,CAUE,WAVF,EAAA,CAAA;;AAEE,UAWI,sBAAA,CAXJ;EAAR,YAAA,CAAA,OAAA,EAaQ,mBAbR,EAAA,KAAA,EAcM,IAdN,EAAA,KAAA,EAeM,IAfN,CAAA,EAgBA,OAhBA,CAgBQ,cAhBR,EAAA,CAAA;;AAGY,UAgBA,cAAA,CAhBmB;EAEvB,SAAA,CAAA,EAeC,uBAfD;EACF,MAAA,CAAA,EAeA,mBAfA;EACA,QAAA,CAAA,EAeE,sBAfF"}
File without changes
@@ -0,0 +1,71 @@
1
+ import { ProposalAction, RegenerationContext, SpecChangeProposal } from "./types.js";
2
+
3
+ //#region src/regenerator/executor.d.ts
4
+ type ExecutionStatus = 'success' | 'skipped' | 'failed';
5
+ interface ActionExecutionResult {
6
+ index: number;
7
+ action: ProposalAction;
8
+ status: ExecutionStatus;
9
+ startedAt: Date;
10
+ finishedAt: Date;
11
+ reason?: string;
12
+ error?: Error;
13
+ output?: unknown;
14
+ }
15
+ interface ProposalExecutionResult {
16
+ proposalId: string;
17
+ contextId: string;
18
+ startedAt: Date;
19
+ finishedAt: Date;
20
+ status: 'success' | 'partial' | 'failed';
21
+ actions: ActionExecutionResult[];
22
+ }
23
+ type UpdateBlueprintAction = Extract<ProposalAction, {
24
+ kind: 'update_blueprint';
25
+ }>;
26
+ type UpdateTenantConfigAction = Extract<ProposalAction, {
27
+ kind: 'update_tenant_config';
28
+ }>;
29
+ type RunTestsAction = Extract<ProposalAction, {
30
+ kind: 'run_tests';
31
+ }>;
32
+ type RunMigrationsAction = Extract<ProposalAction, {
33
+ kind: 'run_migrations';
34
+ }>;
35
+ type TriggerRegenerationAction = Extract<ProposalAction, {
36
+ kind: 'trigger_regeneration';
37
+ }>;
38
+ interface BlueprintUpdater {
39
+ applyBlueprintUpdate(context: RegenerationContext, proposal: SpecChangeProposal, action: UpdateBlueprintAction): Promise<unknown>;
40
+ }
41
+ interface TenantConfigUpdater {
42
+ applyTenantConfigUpdate(context: RegenerationContext, proposal: SpecChangeProposal, action: UpdateTenantConfigAction): Promise<unknown>;
43
+ }
44
+ interface TestExecutor {
45
+ runTests(context: RegenerationContext, proposal: SpecChangeProposal, action: RunTestsAction): Promise<unknown>;
46
+ }
47
+ interface MigrationExecutor {
48
+ runMigrations(context: RegenerationContext, proposal: SpecChangeProposal, action: RunMigrationsAction): Promise<unknown>;
49
+ }
50
+ interface RegenerationTrigger {
51
+ triggerRegeneration(context: RegenerationContext, proposal: SpecChangeProposal, action: TriggerRegenerationAction): Promise<unknown>;
52
+ }
53
+ interface ProposalExecutorOptions {
54
+ dryRun?: boolean;
55
+ }
56
+ interface ProposalExecutorDeps {
57
+ blueprintUpdater?: BlueprintUpdater;
58
+ tenantConfigUpdater?: TenantConfigUpdater;
59
+ testExecutor?: TestExecutor;
60
+ migrationExecutor?: MigrationExecutor;
61
+ regenerationTrigger?: RegenerationTrigger;
62
+ }
63
+ declare class ProposalExecutor {
64
+ private readonly deps;
65
+ constructor(deps?: ProposalExecutorDeps);
66
+ execute(context: RegenerationContext, proposal: SpecChangeProposal, options?: ProposalExecutorOptions): Promise<ProposalExecutionResult>;
67
+ private executeAction;
68
+ }
69
+ //#endregion
70
+ export { ActionExecutionResult, BlueprintUpdater, ExecutionStatus, MigrationExecutor, ProposalExecutionResult, ProposalExecutor, ProposalExecutorDeps, ProposalExecutorOptions, RegenerationTrigger, RunMigrationsAction, RunTestsAction, TenantConfigUpdater, TestExecutor, TriggerRegenerationAction, UpdateBlueprintAction, UpdateTenantConfigAction };
71
+ //# sourceMappingURL=executor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executor.d.ts","names":[],"sources":["../../src/regenerator/executor.ts"],"sourcesContent":[],"mappings":";;;KAEY,eAAA;UAEK,qBAAA;EAFL,KAAA,EAAA,MAAA;EAEK,MAAA,EAEP,cAFO;EAEP,MAAA,EACA,eADA;EACA,SAAA,EACG,IADH;EACG,UAAA,EACC,IADD;EACC,MAAA,CAAA,EAAA,MAAA;EAEJ,KAAA,CAAA,EAAA,KAAA;EAAK,MAAA,CAAA,EAAA,OAAA;AAIf;AAGa,UAHI,uBAAA,CAGJ;EACC,UAAA,EAAA,MAAA;EAEH,SAAA,EAAA,MAAA;EAAqB,SAAA,EAHnB,IAGmB;EAGpB,UAAA,EALE,IAKF;EACA,MAAA,EAAA,SAAA,GAAA,SAAwB,GAAA,QAAW;EACnC,OAAA,EALD,qBAK0B,EAAA;AACrC;AACY,KAJA,qBAAA,GAAwB,OAIC,CAJO,cAII,EAAA;EAE/B,IAAA,EAAA,kBAAgB;CAEpB,CAAA;AACC,KARF,wBAAA,GAA2B,OAQzB,CARiC,cAQjC,EAAA;EACF,IAAA,EAAA,sBAAA;CACP,CAAA;AAAO,KATA,cAAA,GAAiB,OASjB,CATyB,cASzB,EAAA;EAGK,IAAA,EAAA,WAAA;CAEJ,CAAA;AACC,KAdF,mBAAA,GAAsB,OAcpB,CAd4B,cAc5B,EAAA;EACF,IAAA,EAAA,gBAAA;CACP,CAAA;AAAO,KAfA,yBAAA,GAA4B,OAe5B,CAfoC,cAepC,EAAA;EAGK,IAAA,EAAA,sBAAY;CAEhB,CAAA;AACC,UAnBG,gBAAA,CAmBH;EACF,oBAAA,CAAA,OAAA,EAlBC,mBAkBD,EAAA,QAAA,EAjBE,kBAiBF,EAAA,MAAA,EAhBA,qBAgBA,CAAA,EAfP,OAeO,CAAA,OAAA,CAAA;;AACA,UAbK,mBAAA,CAaL;EAGK,uBAAiB,CAAA,OAAA,EAdrB,mBAcqB,EAAA,QAAA,EAbpB,kBAaoB,EAAA,MAAA,EAZtB,wBAYsB,CAAA,EAX7B,OAW6B,CAAA,OAAA,CAAA;;AAGpB,UAXG,YAAA,CAWH;EACF,QAAA,CAAA,OAAA,EAVC,mBAUD,EAAA,QAAA,EATE,kBASF,EAAA,MAAA,EARA,cAQA,CAAA,EAPP,OAOO,CAAA,OAAA,CAAA;;AACA,UALK,iBAAA,CAKL;EAGK,aAAA,CAAA,OAAA,EANJ,mBAMuB,EAAA,QAAA,EALtB,kBAKsB,EAAA,MAAA,EAJxB,mBAIwB,CAAA,EAH/B,OAG+B,CAAA,OAAA,CAAA;;AAGtB,UAHG,mBAAA,CAGH;EACF,mBAAA,CAAA,OAAA,EAFC,mBAED,EAAA,QAAA,EADE,kBACF,EAAA,MAAA,EAAA,yBAAA,CAAA,EACP,OADO,CAAA,OAAA,CAAA;;AACA,UAGK,uBAAA,CAHL;EAGK,MAAA,CAAA,EAAA,OAAA;AAIjB;AACqB,UADJ,oBAAA,CACI;EACG,gBAAA,CAAA,EADH,gBACG;EACP,mBAAA,CAAA,EADO,mBACP;EACK,YAAA,CAAA,EADL,YACK;EACE,iBAAA,CAAA,EADF,iBACE;EAAmB,mBAAA,CAAA,EAAnB,mBAAmB;AAG3C;AACqC,cADxB,gBAAA,CACwB;EAGxB,iBAAA,IAAA;EACC,WAAA,CAAA,IAAA,CAAA,EAJuB,oBAIvB;EACD,OAAA,CAAA,OAAA,EAFA,mBAEA,EAAA,QAAA,EADC,kBACD,EAAA,OAAA,CAAA,EAAA,uBAAA,CAAA,EACR,OADQ,CACA,uBADA,CAAA;EACA,QAAA,aAAA"}
@@ -0,0 +1,2 @@
1
+ var e=class{constructor(e={}){this.deps=e}async execute(e,n,r={}){let i=new Date,a=[];for(let[t,i]of n.actions.entries()){let o=await this.executeAction({index:t,action:i,context:e,proposal:n,options:r});a.push(o)}let o=new Date,s=t(a);return{proposalId:n.id,contextId:e.id,startedAt:i,finishedAt:o,status:s,actions:a}}async executeAction({index:e,action:t,context:n,proposal:r,options:i}){let a=new Date,o=i.dryRun??!1,s=(n,r={})=>({index:e,action:t,status:n,startedAt:a,finishedAt:new Date,reason:r.reason,output:r.output,error:r.error});if(o)return s(`skipped`,{reason:`dry_run`});try{switch(t.kind){case`update_blueprint`:{let e=this.deps.blueprintUpdater;return e?s(`success`,{output:await e.applyBlueprintUpdate(n,r,t)}):s(`skipped`,{reason:`missing_blueprint_updater`})}case`update_tenant_config`:{let e=this.deps.tenantConfigUpdater;return e?s(`success`,{output:await e.applyTenantConfigUpdate(n,r,t)}):s(`skipped`,{reason:`missing_tenant_config_updater`})}case`run_tests`:{let e=this.deps.testExecutor;return e?s(`success`,{output:await e.runTests(n,r,t)}):s(`skipped`,{reason:`missing_test_executor`})}case`run_migrations`:{let e=this.deps.migrationExecutor;return e?s(`success`,{output:await e.runMigrations(n,r,t)}):s(`skipped`,{reason:`missing_migration_executor`})}case`trigger_regeneration`:{let e=this.deps.regenerationTrigger;return e?s(`success`,{output:await e.triggerRegeneration(n,r,t)}):s(`skipped`,{reason:`missing_regeneration_trigger`})}default:return s(`skipped`,{reason:`unknown_action`})}}catch(e){return s(`failed`,{error:e instanceof Error?e:Error(String(e))})}}};function t(e){return e.some(e=>e.status===`failed`)?`failed`:e.some(e=>e.status===`success`)&&e.some(e=>e.status===`skipped`)||e.every(e=>e.status===`skipped`)?`partial`:`success`}export{e as ProposalExecutor};
2
+ //# sourceMappingURL=executor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executor.js","names":["deps: ProposalExecutorDeps","actionResults: ActionExecutionResult[]"],"sources":["../../src/regenerator/executor.ts"],"sourcesContent":["import type { SpecChangeProposal, ProposalAction, RegenerationContext } from './types';\n\nexport type ExecutionStatus = 'success' | 'skipped' | 'failed';\n\nexport interface ActionExecutionResult {\n index: number;\n action: ProposalAction;\n status: ExecutionStatus;\n startedAt: Date;\n finishedAt: Date;\n reason?: string;\n error?: Error;\n output?: unknown;\n}\n\nexport interface ProposalExecutionResult {\n proposalId: string;\n contextId: string;\n startedAt: Date;\n finishedAt: Date;\n status: 'success' | 'partial' | 'failed';\n actions: ActionExecutionResult[];\n}\n\nexport type UpdateBlueprintAction = Extract<ProposalAction, { kind: 'update_blueprint' }>;\nexport type UpdateTenantConfigAction = Extract<ProposalAction, { kind: 'update_tenant_config' }>;\nexport type RunTestsAction = Extract<ProposalAction, { kind: 'run_tests' }>;\nexport type RunMigrationsAction = Extract<ProposalAction, { kind: 'run_migrations' }>;\nexport type TriggerRegenerationAction = Extract<ProposalAction, { kind: 'trigger_regeneration' }>;\n\nexport interface BlueprintUpdater {\n applyBlueprintUpdate(\n context: RegenerationContext,\n proposal: SpecChangeProposal,\n action: UpdateBlueprintAction\n ): Promise<unknown>;\n}\n\nexport interface TenantConfigUpdater {\n applyTenantConfigUpdate(\n context: RegenerationContext,\n proposal: SpecChangeProposal,\n action: UpdateTenantConfigAction\n ): Promise<unknown>;\n}\n\nexport interface TestExecutor {\n runTests(\n context: RegenerationContext,\n proposal: SpecChangeProposal,\n action: RunTestsAction\n ): Promise<unknown>;\n}\n\nexport interface MigrationExecutor {\n runMigrations(\n context: RegenerationContext,\n proposal: SpecChangeProposal,\n action: RunMigrationsAction\n ): Promise<unknown>;\n}\n\nexport interface RegenerationTrigger {\n triggerRegeneration(\n context: RegenerationContext,\n proposal: SpecChangeProposal,\n action: TriggerRegenerationAction\n ): Promise<unknown>;\n}\n\nexport interface ProposalExecutorOptions {\n dryRun?: boolean;\n}\n\nexport interface ProposalExecutorDeps {\n blueprintUpdater?: BlueprintUpdater;\n tenantConfigUpdater?: TenantConfigUpdater;\n testExecutor?: TestExecutor;\n migrationExecutor?: MigrationExecutor;\n regenerationTrigger?: RegenerationTrigger;\n}\n\nexport class ProposalExecutor {\n constructor(private readonly deps: ProposalExecutorDeps = {}) {}\n\n async execute(\n context: RegenerationContext,\n proposal: SpecChangeProposal,\n options: ProposalExecutorOptions = {}\n ): Promise<ProposalExecutionResult> {\n const startedAt = new Date();\n const actionResults: ActionExecutionResult[] = [];\n\n for (const [index, action] of proposal.actions.entries()) {\n // eslint-disable-next-line no-await-in-loop\n const result = await this.executeAction({\n index,\n action,\n context,\n proposal,\n options,\n });\n actionResults.push(result);\n }\n\n const finishedAt = new Date();\n const summaryStatus = summarizeStatus(actionResults);\n\n return {\n proposalId: proposal.id,\n contextId: context.id,\n startedAt,\n finishedAt,\n status: summaryStatus,\n actions: actionResults,\n };\n }\n\n private async executeAction({\n index,\n action,\n context,\n proposal,\n options,\n }: {\n index: number;\n action: ProposalAction;\n context: RegenerationContext;\n proposal: SpecChangeProposal;\n options: ProposalExecutorOptions;\n }): Promise<ActionExecutionResult> {\n const startedAt = new Date();\n const dryRun = options.dryRun ?? false;\n\n const complete = (\n status: ExecutionStatus,\n params: {\n reason?: string;\n output?: unknown;\n error?: Error;\n } = {}\n ): ActionExecutionResult => ({\n index,\n action,\n status,\n startedAt,\n finishedAt: new Date(),\n reason: params.reason,\n output: params.output,\n error: params.error,\n });\n\n if (dryRun) {\n return complete('skipped', { reason: 'dry_run' });\n }\n\n try {\n switch (action.kind) {\n case 'update_blueprint': {\n const updater = this.deps.blueprintUpdater;\n if (!updater) {\n return complete('skipped', { reason: 'missing_blueprint_updater' });\n }\n const output = await updater.applyBlueprintUpdate(context, proposal, action);\n return complete('success', { output });\n }\n case 'update_tenant_config': {\n const updater = this.deps.tenantConfigUpdater;\n if (!updater) {\n return complete('skipped', { reason: 'missing_tenant_config_updater' });\n }\n const output = await updater.applyTenantConfigUpdate(context, proposal, action);\n return complete('success', { output });\n }\n case 'run_tests': {\n const executor = this.deps.testExecutor;\n if (!executor) {\n return complete('skipped', { reason: 'missing_test_executor' });\n }\n const output = await executor.runTests(context, proposal, action);\n return complete('success', { output });\n }\n case 'run_migrations': {\n const executor = this.deps.migrationExecutor;\n if (!executor) {\n return complete('skipped', { reason: 'missing_migration_executor' });\n }\n const output = await executor.runMigrations(context, proposal, action);\n return complete('success', { output });\n }\n case 'trigger_regeneration': {\n const trigger = this.deps.regenerationTrigger;\n if (!trigger) {\n return complete('skipped', { reason: 'missing_regeneration_trigger' });\n }\n const output = await trigger.triggerRegeneration(context, proposal, action);\n return complete('success', { output });\n }\n default: {\n return complete('skipped', { reason: 'unknown_action' });\n }\n }\n } catch (error) {\n return complete('failed', {\n error: error instanceof Error ? error : new Error(String(error)),\n });\n }\n }\n}\n\nfunction summarizeStatus(actionResults: ActionExecutionResult[]): ProposalExecutionResult['status'] {\n if (actionResults.some((result) => result.status === 'failed')) {\n return 'failed';\n }\n if (actionResults.some((result) => result.status === 'success') &&\n actionResults.some((result) => result.status === 'skipped')) {\n return 'partial';\n }\n if (actionResults.every((result) => result.status === 'skipped')) {\n return 'partial';\n }\n return 'success';\n}\n\n\n\n\n\n\n\n"],"mappings":"AAkFA,IAAa,EAAb,KAA8B,CAC5B,YAAY,EAA8C,EAAE,CAAE,CAAjC,KAAA,KAAA,EAE7B,MAAM,QACJ,EACA,EACA,EAAmC,EAAE,CACH,CAClC,IAAM,EAAY,IAAI,KAChBC,EAAyC,EAAE,CAEjD,IAAK,GAAM,CAAC,EAAO,KAAW,EAAS,QAAQ,SAAS,CAAE,CAExD,IAAM,EAAS,MAAM,KAAK,cAAc,CACtC,QACA,SACA,UACA,WACA,UACD,CAAC,CACF,EAAc,KAAK,EAAO,CAG5B,IAAM,EAAa,IAAI,KACjB,EAAgB,EAAgB,EAAc,CAEpD,MAAO,CACL,WAAY,EAAS,GACrB,UAAW,EAAQ,GACnB,YACA,aACA,OAAQ,EACR,QAAS,EACV,CAGH,MAAc,cAAc,CAC1B,QACA,SACA,UACA,WACA,WAOiC,CACjC,IAAM,EAAY,IAAI,KAChB,EAAS,EAAQ,QAAU,GAE3B,GACJ,EACA,EAII,EAAE,IACqB,CAC3B,QACA,SACA,SACA,YACA,WAAY,IAAI,KAChB,OAAQ,EAAO,OACf,OAAQ,EAAO,OACf,MAAO,EAAO,MACf,EAED,GAAI,EACF,OAAO,EAAS,UAAW,CAAE,OAAQ,UAAW,CAAC,CAGnD,GAAI,CACF,OAAQ,EAAO,KAAf,CACE,IAAK,mBAAoB,CACvB,IAAM,EAAU,KAAK,KAAK,iBAK1B,OAJK,EAIE,EAAS,UAAW,CAAE,OADd,MAAM,EAAQ,qBAAqB,EAAS,EAAU,EAAO,CACvC,CAAC,CAH7B,EAAS,UAAW,CAAE,OAAQ,4BAA6B,CAAC,CAKvE,IAAK,uBAAwB,CAC3B,IAAM,EAAU,KAAK,KAAK,oBAK1B,OAJK,EAIE,EAAS,UAAW,CAAE,OADd,MAAM,EAAQ,wBAAwB,EAAS,EAAU,EAAO,CAC1C,CAAC,CAH7B,EAAS,UAAW,CAAE,OAAQ,gCAAiC,CAAC,CAK3E,IAAK,YAAa,CAChB,IAAM,EAAW,KAAK,KAAK,aAK3B,OAJK,EAIE,EAAS,UAAW,CAAE,OADd,MAAM,EAAS,SAAS,EAAS,EAAU,EAAO,CAC5B,CAAC,CAH7B,EAAS,UAAW,CAAE,OAAQ,wBAAyB,CAAC,CAKnE,IAAK,iBAAkB,CACrB,IAAM,EAAW,KAAK,KAAK,kBAK3B,OAJK,EAIE,EAAS,UAAW,CAAE,OADd,MAAM,EAAS,cAAc,EAAS,EAAU,EAAO,CACjC,CAAC,CAH7B,EAAS,UAAW,CAAE,OAAQ,6BAA8B,CAAC,CAKxE,IAAK,uBAAwB,CAC3B,IAAM,EAAU,KAAK,KAAK,oBAK1B,OAJK,EAIE,EAAS,UAAW,CAAE,OADd,MAAM,EAAQ,oBAAoB,EAAS,EAAU,EAAO,CACtC,CAAC,CAH7B,EAAS,UAAW,CAAE,OAAQ,+BAAgC,CAAC,CAK1E,QACE,OAAO,EAAS,UAAW,CAAE,OAAQ,iBAAkB,CAAC,QAGrD,EAAO,CACd,OAAO,EAAS,SAAU,CACxB,MAAO,aAAiB,MAAQ,EAAY,MAAM,OAAO,EAAM,CAAC,CACjE,CAAC,IAKR,SAAS,EAAgB,EAA2E,CAWlG,OAVI,EAAc,KAAM,GAAW,EAAO,SAAW,SAAS,CACrD,SAEL,EAAc,KAAM,GAAW,EAAO,SAAW,UAAU,EAC3D,EAAc,KAAM,GAAW,EAAO,SAAW,UAAU,EAG3D,EAAc,MAAO,GAAW,EAAO,SAAW,UAAU,CACvD,UAEF"}
@@ -0,0 +1,7 @@
1
+ import { BehaviorSignal, BehaviorSignalEnvelope, ErrorSignal, ErrorSignalEnvelope, ProposalAction, ProposalBlocker, ProposalConfidence, ProposalSink, ProposalTarget, RegenerationContext, RegenerationRule, RegeneratorSignal, SpecChangeProposal, TelemetrySignal, TelemetrySignalEnvelope } from "./types.js";
2
+ import { BehaviorSignalProvider, ErrorSignalProvider, SignalAdapters, TelemetrySignalProvider } from "./adapters.js";
3
+ import { RegeneratorOptions, RegeneratorService } from "./service.js";
4
+ import { ActionExecutionResult, BlueprintUpdater, ExecutionStatus, MigrationExecutor, ProposalExecutionResult, ProposalExecutor, ProposalExecutorDeps, ProposalExecutorOptions, RegenerationTrigger, RunMigrationsAction, RunTestsAction, TenantConfigUpdater, TestExecutor, TriggerRegenerationAction, UpdateBlueprintAction, UpdateTenantConfigAction } from "./executor.js";
5
+ import { behaviorToEnvelope, errorToEnvelope, telemetryToEnvelope } from "./utils.js";
6
+ import { ExecutorProposalSink, ExecutorResultPayload, ExecutorSinkLogger, ExecutorSinkOptions } from "./sinks.js";
7
+ export { ActionExecutionResult, BehaviorSignal, BehaviorSignalEnvelope, BehaviorSignalProvider, BlueprintUpdater, ErrorSignal, ErrorSignalEnvelope, ErrorSignalProvider, ExecutionStatus, ExecutorProposalSink, ExecutorResultPayload, ExecutorSinkLogger, ExecutorSinkOptions, MigrationExecutor, ProposalAction, ProposalBlocker, ProposalConfidence, ProposalExecutionResult, ProposalExecutor, ProposalExecutorDeps, ProposalExecutorOptions, ProposalSink, ProposalTarget, RegenerationContext, RegenerationRule, RegenerationTrigger, RegeneratorOptions, RegeneratorService, RegeneratorSignal, RunMigrationsAction, RunTestsAction, SignalAdapters, SpecChangeProposal, TelemetrySignal, TelemetrySignalEnvelope, TelemetrySignalProvider, TenantConfigUpdater, TestExecutor, TriggerRegenerationAction, UpdateBlueprintAction, UpdateTenantConfigAction, behaviorToEnvelope, errorToEnvelope, telemetryToEnvelope };
@@ -0,0 +1 @@
1
+ import{behaviorToEnvelope as e,errorToEnvelope as t,telemetryToEnvelope as n}from"./utils.js";import{RegeneratorService as r}from"./service.js";import{ProposalExecutor as i}from"./executor.js";import{ExecutorProposalSink as a}from"./sinks.js";export{a as ExecutorProposalSink,i as ProposalExecutor,r as RegeneratorService,e as behaviorToEnvelope,t as errorToEnvelope,n as telemetryToEnvelope};
@@ -0,0 +1,34 @@
1
+ import { ProposalSink, RegenerationContext, RegenerationRule } from "./types.js";
2
+ import { SignalAdapters } from "./adapters.js";
3
+
4
+ //#region src/regenerator/service.d.ts
5
+ interface RegeneratorOptions {
6
+ contexts: RegenerationContext[];
7
+ adapters: SignalAdapters;
8
+ rules: RegenerationRule[];
9
+ sink: ProposalSink;
10
+ pollIntervalMs?: number;
11
+ batchDurationMs?: number;
12
+ clock?: () => Date;
13
+ }
14
+ declare class RegeneratorService {
15
+ private readonly options;
16
+ private readonly contexts;
17
+ private readonly lastPoll;
18
+ private timer?;
19
+ private running;
20
+ private readonly pollInterval;
21
+ private readonly batchDuration;
22
+ private readonly clock;
23
+ constructor(options: RegeneratorOptions);
24
+ start(): void;
25
+ stop(): void;
26
+ runOnce(): Promise<void>;
27
+ private tick;
28
+ private evaluateContext;
29
+ private collectSignals;
30
+ private flushProposals;
31
+ }
32
+ //#endregion
33
+ export { RegeneratorOptions, RegeneratorService };
34
+ //# sourceMappingURL=service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.d.ts","names":[],"sources":["../../src/regenerator/service.ts"],"sourcesContent":[],"mappings":";;;;UAWiB,kBAAA;YACL;EADK,QAAA,EAEL,cAFuB;EACvB,KAAA,EAEH,gBAFG,EAAA;EACA,IAAA,EAEJ,YAFI;EACH,cAAA,CAAA,EAAA,MAAA;EACD,eAAA,CAAA,EAAA,MAAA;EAGQ,KAAA,CAAA,EAAA,GAAA,GAAA,IAAA;;AAMH,cAAA,kBAAA,CAS2B;;;;;;;;;uBAAA;;;aA8BrB"}
@@ -0,0 +1,2 @@
1
+ import{behaviorToEnvelope as e,errorToEnvelope as t,telemetryToEnvelope as n}from"./utils.js";import{setTimeout as r}from"node:timers/promises";var i=class{contexts;lastPoll=new Map;timer;running=!1;pollInterval;batchDuration;clock;constructor(e){if(this.options=e,this.contexts=new Map(e.contexts.map(e=>[e.id,e])),this.pollInterval=e.pollIntervalMs??6e4,this.batchDuration=e.batchDurationMs??3e5,this.clock=e.clock??(()=>new Date),this.options.rules.length===0)throw Error(`RegeneratorService requires at least one rule`)}start(){this.running||(this.running=!0,this.tick(),this.timer=setInterval(()=>{this.tick()},this.pollInterval))}stop(){this.running&&(this.running=!1,this.timer&&=(clearInterval(this.timer),void 0))}async runOnce(){await this.tick()}async tick(){let e=this.clock(),t=new Date(e.getTime()-this.batchDuration);for(let n of this.contexts.values()){let r=this.lastPoll.get(n.id)??t;await this.evaluateContext(n,r,e),this.lastPoll.set(n.id,e)}}async evaluateContext(e,t,n){let r=await this.collectSignals(e,t,n);if(r.length!==0)for(let t of this.options.rules){let n=[];try{n=await t.evaluate(e,r)}catch(e){console.error(`[regenerator] rule ${t.id} failed`,e instanceof Error?e:Error(String(e)));continue}await this.flushProposals(e,n)}}async collectSignals(r,i,a){let o=[],{adapters:s}=this.options;if(s.telemetry){let e=await s.telemetry.pollTelemetry(r,i,a);o.push(...e.map(e=>n(r.id,e,this.clock)))}if(s.errors){let e=await s.errors.pollErrors(r,i,a);o.push(...e.map(e=>t(r.id,e,this.clock)))}if(s.behavior){let t=await s.behavior.pollBehavior(r,i,a);o.push(...t.map(t=>e(r.id,t,this.clock)))}return o}async flushProposals(e,t){for(let n of t)n.signalIds.length!==0&&(await this.options.sink.submit(e,n),t.length>10&&await r(0))}};export{i as RegeneratorService};
2
+ //# sourceMappingURL=service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.js","names":["options: RegeneratorOptions","proposals: SpecChangeProposal[]","envelopes: RegeneratorSignal[]","delay"],"sources":["../../src/regenerator/service.ts"],"sourcesContent":["import { setTimeout as delay } from 'node:timers/promises';\nimport type {\n ProposalSink,\n RegeneratorSignal,\n RegenerationRule,\n RegenerationContext,\n SpecChangeProposal,\n} from './types';\nimport type { SignalAdapters } from './adapters';\nimport { telemetryToEnvelope, errorToEnvelope, behaviorToEnvelope } from './utils';\n\nexport interface RegeneratorOptions {\n contexts: RegenerationContext[];\n adapters: SignalAdapters;\n rules: RegenerationRule[];\n sink: ProposalSink;\n pollIntervalMs?: number;\n batchDurationMs?: number;\n clock?: () => Date;\n}\n\nconst DEFAULT_POLL_INTERVAL = 60_000;\nconst DEFAULT_BATCH_DURATION = 5 * 60_000;\n\nexport class RegeneratorService {\n private readonly contexts: Map<string, RegenerationContext>;\n private readonly lastPoll = new Map<string, Date>();\n private timer?: NodeJS.Timeout;\n private running = false;\n private readonly pollInterval: number;\n private readonly batchDuration: number;\n private readonly clock: () => Date;\n\n constructor(private readonly options: RegeneratorOptions) {\n this.contexts = new Map(\n options.contexts.map((ctx) => [ctx.id, ctx])\n );\n this.pollInterval = options.pollIntervalMs ?? DEFAULT_POLL_INTERVAL;\n this.batchDuration = options.batchDurationMs ?? DEFAULT_BATCH_DURATION;\n this.clock = options.clock ?? (() => new Date());\n if (this.options.rules.length === 0) {\n throw new Error('RegeneratorService requires at least one rule');\n }\n }\n\n start() {\n if (this.running) return;\n this.running = true;\n void this.tick();\n this.timer = setInterval(() => {\n void this.tick();\n }, this.pollInterval);\n }\n\n stop() {\n if (!this.running) return;\n this.running = false;\n if (this.timer) {\n clearInterval(this.timer);\n this.timer = undefined;\n }\n }\n\n async runOnce(): Promise<void> {\n await this.tick();\n }\n\n private async tick(): Promise<void> {\n const now = this.clock();\n const sinceDefault = new Date(now.getTime() - this.batchDuration);\n for (const context of this.contexts.values()) {\n const last = this.lastPoll.get(context.id) ?? sinceDefault;\n await this.evaluateContext(context, last, now);\n this.lastPoll.set(context.id, now);\n }\n }\n\n private async evaluateContext(\n context: RegenerationContext,\n since: Date,\n until: Date\n ): Promise<void> {\n const signals = await this.collectSignals(context, since, until);\n if (signals.length === 0) return;\n\n for (const rule of this.options.rules) {\n let proposals: SpecChangeProposal[] = [];\n try {\n proposals = await rule.evaluate(context, signals);\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(\n `[regenerator] rule ${rule.id} failed`,\n error instanceof Error ? error : new Error(String(error))\n );\n continue;\n }\n await this.flushProposals(context, proposals);\n }\n }\n\n private async collectSignals(\n context: RegenerationContext,\n since: Date,\n until: Date\n ): Promise<RegeneratorSignal[]> {\n const envelopes: RegeneratorSignal[] = [];\n const { adapters } = this.options;\n if (adapters.telemetry) {\n const telemetrySignals = await adapters.telemetry.pollTelemetry(\n context,\n since,\n until\n );\n envelopes.push(\n ...telemetrySignals.map((signal) =>\n telemetryToEnvelope(context.id, signal, this.clock)\n )\n );\n }\n if (adapters.errors) {\n const errorSignals = await adapters.errors.pollErrors(\n context,\n since,\n until\n );\n envelopes.push(\n ...errorSignals.map((signal) =>\n errorToEnvelope(context.id, signal, this.clock)\n )\n );\n }\n if (adapters.behavior) {\n const behaviorSignals = await adapters.behavior.pollBehavior(\n context,\n since,\n until\n );\n envelopes.push(\n ...behaviorSignals.map((signal) =>\n behaviorToEnvelope(context.id, signal, this.clock)\n )\n );\n }\n return envelopes;\n }\n\n private async flushProposals(\n context: RegenerationContext,\n proposals: SpecChangeProposal[]\n ): Promise<void> {\n for (const proposal of proposals) {\n if (proposal.signalIds.length === 0) continue;\n await this.options.sink.submit(context, proposal);\n // allow event loop to breathe when large volumes\n if (proposals.length > 10) {\n await delay(0);\n }\n }\n }\n}\n\n\n\n\n\n\n\n"],"mappings":"gJAwBA,IAAa,EAAb,KAAgC,CAC9B,SACA,SAA4B,IAAI,IAChC,MACA,QAAkB,GAClB,aACA,cACA,MAEA,YAAY,EAA8C,CAOxD,GAP2B,KAAA,QAAA,EAC3B,KAAK,SAAW,IAAI,IAClB,EAAQ,SAAS,IAAK,GAAQ,CAAC,EAAI,GAAI,EAAI,CAAC,CAC7C,CACD,KAAK,aAAe,EAAQ,gBAAkB,IAC9C,KAAK,cAAgB,EAAQ,iBAAmB,IAChD,KAAK,MAAQ,EAAQ,YAAgB,IAAI,MACrC,KAAK,QAAQ,MAAM,SAAW,EAChC,MAAU,MAAM,gDAAgD,CAIpE,OAAQ,CACF,KAAK,UACT,KAAK,QAAU,GACV,KAAK,MAAM,CAChB,KAAK,MAAQ,gBAAkB,CACxB,KAAK,MAAM,EACf,KAAK,aAAa,EAGvB,MAAO,CACA,KAAK,UACV,KAAK,QAAU,GACf,AAEE,KAAK,SADL,cAAc,KAAK,MAAM,CACZ,IAAA,KAIjB,MAAM,SAAyB,CAC7B,MAAM,KAAK,MAAM,CAGnB,MAAc,MAAsB,CAClC,IAAM,EAAM,KAAK,OAAO,CAClB,EAAe,IAAI,KAAK,EAAI,SAAS,CAAG,KAAK,cAAc,CACjE,IAAK,IAAM,KAAW,KAAK,SAAS,QAAQ,CAAE,CAC5C,IAAM,EAAO,KAAK,SAAS,IAAI,EAAQ,GAAG,EAAI,EAC9C,MAAM,KAAK,gBAAgB,EAAS,EAAM,EAAI,CAC9C,KAAK,SAAS,IAAI,EAAQ,GAAI,EAAI,EAItC,MAAc,gBACZ,EACA,EACA,EACe,CACf,IAAM,EAAU,MAAM,KAAK,eAAe,EAAS,EAAO,EAAM,CAC5D,KAAQ,SAAW,EAEvB,IAAK,IAAM,KAAQ,KAAK,QAAQ,MAAO,CACrC,IAAIC,EAAkC,EAAE,CACxC,GAAI,CACF,EAAY,MAAM,EAAK,SAAS,EAAS,EAAQ,OAC1C,EAAO,CAEd,QAAQ,MACN,sBAAsB,EAAK,GAAG,SAC9B,aAAiB,MAAQ,EAAY,MAAM,OAAO,EAAM,CAAC,CAC1D,CACD,SAEF,MAAM,KAAK,eAAe,EAAS,EAAU,EAIjD,MAAc,eACZ,EACA,EACA,EAC8B,CAC9B,IAAMC,EAAiC,EAAE,CACnC,CAAE,YAAa,KAAK,QAC1B,GAAI,EAAS,UAAW,CACtB,IAAM,EAAmB,MAAM,EAAS,UAAU,cAChD,EACA,EACA,EACD,CACD,EAAU,KACR,GAAG,EAAiB,IAAK,GACvB,EAAoB,EAAQ,GAAI,EAAQ,KAAK,MAAM,CACpD,CACF,CAEH,GAAI,EAAS,OAAQ,CACnB,IAAM,EAAe,MAAM,EAAS,OAAO,WACzC,EACA,EACA,EACD,CACD,EAAU,KACR,GAAG,EAAa,IAAK,GACnB,EAAgB,EAAQ,GAAI,EAAQ,KAAK,MAAM,CAChD,CACF,CAEH,GAAI,EAAS,SAAU,CACrB,IAAM,EAAkB,MAAM,EAAS,SAAS,aAC9C,EACA,EACA,EACD,CACD,EAAU,KACR,GAAG,EAAgB,IAAK,GACtB,EAAmB,EAAQ,GAAI,EAAQ,KAAK,MAAM,CACnD,CACF,CAEH,OAAO,EAGT,MAAc,eACZ,EACA,EACe,CACf,IAAK,IAAM,KAAY,EACjB,EAAS,UAAU,SAAW,IAClC,MAAM,KAAK,QAAQ,KAAK,OAAO,EAAS,EAAS,CAE7C,EAAU,OAAS,IACrB,MAAMC,EAAM,EAAE"}
@@ -0,0 +1,27 @@
1
+ import { ProposalSink, RegenerationContext, SpecChangeProposal } from "./types.js";
2
+ import { ProposalExecutionResult, ProposalExecutor } from "./executor.js";
3
+
4
+ //#region src/regenerator/sinks.d.ts
5
+ interface ExecutorResultPayload {
6
+ context: RegenerationContext;
7
+ proposal: SpecChangeProposal;
8
+ result: ProposalExecutionResult;
9
+ }
10
+ interface ExecutorSinkLogger {
11
+ info?: (message: string, meta?: Record<string, unknown>) => void;
12
+ error?: (message: string, error: Error, meta?: Record<string, unknown>) => void;
13
+ }
14
+ interface ExecutorSinkOptions {
15
+ dryRun?: boolean;
16
+ onResult?: (payload: ExecutorResultPayload) => void | Promise<void>;
17
+ logger?: ExecutorSinkLogger;
18
+ }
19
+ declare class ExecutorProposalSink implements ProposalSink {
20
+ private readonly executor;
21
+ private readonly options;
22
+ constructor(executor: ProposalExecutor, options?: ExecutorSinkOptions);
23
+ submit(context: RegenerationContext, proposal: SpecChangeProposal): Promise<void>;
24
+ }
25
+ //#endregion
26
+ export { ExecutorProposalSink, ExecutorResultPayload, ExecutorSinkLogger, ExecutorSinkOptions };
27
+ //# sourceMappingURL=sinks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sinks.d.ts","names":[],"sources":["../../src/regenerator/sinks.ts"],"sourcesContent":[],"mappings":";;;;UAIiB,qBAAA;EAAA,OAAA,EACN,mBAD2B;EAC3B,QAAA,EACC,kBADD;EACC,MAAA,EACF,uBADE;;AACqB,UAGhB,kBAAA,CAHgB;EAGhB,IAAA,CAAA,EAAA,CAAA,OAAA,EAAA,MAAkB,EAAA,IAAA,CAAA,EACD,MADC,CAAA,MAAA,EAAA,OAAA,CAAA,EAAA,GAAA,IAAA;EACD,KAAA,CAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,KAAA,EACC,KADD,EAAA,IAAA,CAAA,EACe,MADf,CAAA,MAAA,EAAA,OAAA,CAAA,EAAA,GAAA,IAAA;;AACe,UAGhC,mBAAA,CAHgC;EAAM,MAAA,CAAA,EAAA,OAAA;EAGtC,QAAA,CAAA,EAAA,CAAA,OAAA,EAEM,qBAFa,EAAA,GAAA,IAAA,GAEoB,OAFpB,CAAA,IAAA,CAAA;EAEb,MAAA,CAAA,EACZ,kBADY;;AACZ,cAGE,oBAAA,YAAgC,YAHlC,CAAA;EAAkB,iBAAA,QAAA;EAGhB,iBAAA,OAAqB;EAEH,WAAA,CAAA,QAAA,EAAA,gBAAA,EAAA,OAAA,CAAA,EACD,mBADC;EACD,MAAA,CAAA,OAAA,EAIjB,mBAJiB,EAAA,QAAA,EAKhB,kBALgB,CAAA,EAMzB,OANyB,CAAA,IAAA,CAAA"}
@@ -0,0 +1,2 @@
1
+ var e=class{constructor(e,t={}){this.executor=e,this.options=t}async submit(e,t){let n=this.options.dryRun??!1;try{let r=await this.executor.execute(e,t,{dryRun:n});this.options.logger?.info&&this.options.logger.info(`[regenerator] proposal executed`,{proposalId:t.id,contextId:e.id,status:r.status}),this.options.onResult&&await this.options.onResult({context:e,proposal:t,result:r})}catch(n){throw this.options.logger?.error&&this.options.logger.error(`[regenerator] proposal execution failed`,n instanceof Error?n:Error(String(n)),{proposalId:t.id,contextId:e.id}),n instanceof Error?n:Error(String(n))}}};export{e as ExecutorProposalSink};
2
+ //# sourceMappingURL=sinks.js.map