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

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 (813) hide show
  1. package/dist/app-config/app-config.feature.d.ts +1 -2
  2. package/dist/app-config/app-config.feature.js +1 -2
  3. package/dist/app-config/branding.d.ts +1 -2
  4. package/dist/app-config/contracts.d.ts +51 -52
  5. package/dist/app-config/contracts.js +1 -2
  6. package/dist/app-config/docs/app-config.docblock.d.ts +1 -2
  7. package/dist/app-config/docs/app-config.docblock.js +1 -2
  8. package/dist/app-config/events.d.ts +28 -29
  9. package/dist/app-config/events.js +1 -2
  10. package/dist/app-config/lifecycle-contracts.d.ts +81 -82
  11. package/dist/app-config/lifecycle-contracts.js +1 -2
  12. package/dist/app-config/lifecycle.d.ts +1 -2
  13. package/dist/app-config/runtime.d.ts +1 -2
  14. package/dist/app-config/runtime.js +1 -2
  15. package/dist/app-config/spec.d.ts +1 -2
  16. package/dist/app-config/spec.js +1 -2
  17. package/dist/app-config/validation.d.ts +1 -2
  18. package/dist/app-config/validation.js +1 -2
  19. package/dist/capabilities/docs/capabilities.docblock.d.ts +1 -2
  20. package/dist/capabilities/docs/capabilities.docblock.js +1 -2
  21. package/dist/capabilities/openbanking.d.ts +1 -2
  22. package/dist/capabilities/openbanking.js +1 -2
  23. package/dist/capabilities.d.ts +1 -2
  24. package/dist/capabilities.js +1 -2
  25. package/dist/client/react/drivers/rn-reusables.d.ts +1 -2
  26. package/dist/client/react/drivers/rn-reusables.js +1 -2
  27. package/dist/client/react/drivers/shadcn.d.ts +1 -2
  28. package/dist/client/react/drivers/shadcn.js +1 -2
  29. package/dist/client/react/feature-render.d.ts +1 -2
  30. package/dist/client/react/feature-render.js +1 -2
  31. package/dist/client/react/form-render.d.ts +1 -2
  32. package/dist/client/react/form-render.js +1 -2
  33. package/dist/contract-registry/schemas.d.ts +1 -2
  34. package/dist/contract-registry/schemas.js +1 -2
  35. package/dist/contract-registry/types.d.ts +1 -2
  36. package/dist/contracts-adapter-hydration.d.ts +1 -2
  37. package/dist/contracts-adapter-hydration.js +3 -4
  38. package/dist/contracts-adapter-input.d.ts +1 -2
  39. package/dist/contracts-adapter-input.js +1 -2
  40. package/dist/data-views/docs/data-views.docblock.d.ts +1 -2
  41. package/dist/data-views/docs/data-views.docblock.js +1 -2
  42. package/dist/data-views/query-generator.d.ts +3 -4
  43. package/dist/data-views/query-generator.js +2 -3
  44. package/dist/data-views/runtime.d.ts +3 -4
  45. package/dist/data-views/runtime.js +3 -4
  46. package/dist/data-views.d.ts +1 -2
  47. package/dist/data-views.js +1 -2
  48. package/dist/docs/accessibility_wcag_compliance_specs.docblock.d.ts +1 -2
  49. package/dist/docs/accessibility_wcag_compliance_specs.docblock.js +1 -2
  50. package/dist/docs/meta.docs.d.ts +1 -2
  51. package/dist/docs/meta.docs.js +1 -2
  52. package/dist/docs/presentations.d.ts +1 -2
  53. package/dist/docs/presentations.js +1 -2
  54. package/dist/docs/registry.d.ts +1 -2
  55. package/dist/docs/registry.js +1 -2
  56. package/dist/docs/tech/auth/better-auth-nextjs.docblock.d.ts +1 -2
  57. package/dist/docs/tech/auth/better-auth-nextjs.docblock.js +1 -2
  58. package/dist/docs/tech/contracts/README.docblock.d.ts +1 -2
  59. package/dist/docs/tech/contracts/README.docblock.js +1 -2
  60. package/dist/docs/tech/contracts/create-subscription.docblock.d.ts +1 -2
  61. package/dist/docs/tech/contracts/create-subscription.docblock.js +1 -2
  62. package/dist/docs/tech/contracts/graphql-typed-outputs.docblock.d.ts +1 -2
  63. package/dist/docs/tech/contracts/graphql-typed-outputs.docblock.js +1 -2
  64. package/dist/docs/tech/contracts/migrations.docblock.d.ts +1 -2
  65. package/dist/docs/tech/contracts/migrations.docblock.js +1 -2
  66. package/dist/docs/tech/contracts/openapi-export.docblock.d.ts +1 -2
  67. package/dist/docs/tech/contracts/openapi-export.docblock.js +1 -2
  68. package/dist/docs/tech/contracts/ops-to-presentation-linking.docblock.d.ts +1 -2
  69. package/dist/docs/tech/contracts/ops-to-presentation-linking.docblock.js +1 -2
  70. package/dist/docs/tech/contracts/overlays.docblock.d.ts +1 -2
  71. package/dist/docs/tech/contracts/overlays.docblock.js +1 -2
  72. package/dist/docs/tech/contracts/tests.docblock.d.ts +1 -2
  73. package/dist/docs/tech/contracts/tests.docblock.js +1 -2
  74. package/dist/docs/tech/contracts/themes.docblock.d.ts +1 -2
  75. package/dist/docs/tech/contracts/themes.docblock.js +1 -2
  76. package/dist/docs/tech/contracts/vertical-pocket-family-office.docblock.d.ts +1 -2
  77. package/dist/docs/tech/contracts/vertical-pocket-family-office.docblock.js +1 -2
  78. package/dist/docs/tech/lifecycle-stage-system.docblock.d.ts +1 -2
  79. package/dist/docs/tech/lifecycle-stage-system.docblock.js +1 -2
  80. package/dist/docs/tech/llm/llm-integration.docblock.d.ts +1 -2
  81. package/dist/docs/tech/llm/llm-integration.docblock.js +1 -2
  82. package/dist/docs/tech/mcp-endpoints.docblock.d.ts +1 -2
  83. package/dist/docs/tech/mcp-endpoints.docblock.js +1 -2
  84. package/dist/docs/tech/presentation-runtime.docblock.d.ts +1 -2
  85. package/dist/docs/tech/presentation-runtime.docblock.js +1 -2
  86. package/dist/docs/tech/schema/README.docblock.d.ts +1 -2
  87. package/dist/docs/tech/schema/README.docblock.js +1 -2
  88. package/dist/docs/tech/studio/learning-events.docblock.d.ts +1 -2
  89. package/dist/docs/tech/studio/learning-events.docblock.js +1 -2
  90. package/dist/docs/tech/studio/learning-journeys.docblock.d.ts +1 -2
  91. package/dist/docs/tech/studio/learning-journeys.docblock.js +1 -2
  92. package/dist/docs/tech/studio/platform-admin-panel.docblock.d.ts +1 -2
  93. package/dist/docs/tech/studio/platform-admin-panel.docblock.js +1 -2
  94. package/dist/docs/tech/studio/project-access-teams.docblock.d.ts +1 -2
  95. package/dist/docs/tech/studio/project-access-teams.docblock.js +1 -2
  96. package/dist/docs/tech/studio/project-routing.docblock.d.ts +1 -2
  97. package/dist/docs/tech/studio/project-routing.docblock.js +1 -2
  98. package/dist/docs/tech/studio/sandbox-unlogged.docblock.d.ts +1 -2
  99. package/dist/docs/tech/studio/sandbox-unlogged.docblock.js +1 -2
  100. package/dist/docs/tech/studio/team-invitations.docblock.d.ts +1 -2
  101. package/dist/docs/tech/studio/team-invitations.docblock.js +1 -2
  102. package/dist/docs/tech/studio/workspace-ops.docblock.d.ts +1 -2
  103. package/dist/docs/tech/studio/workspace-ops.docblock.js +1 -2
  104. package/dist/docs/tech/studio/workspaces.docblock.d.ts +1 -2
  105. package/dist/docs/tech/studio/workspaces.docblock.js +1 -2
  106. package/dist/docs/tech/telemetry-ingest.docblock.d.ts +1 -2
  107. package/dist/docs/tech/telemetry-ingest.docblock.js +1 -2
  108. package/dist/docs/tech/templates/runtime.docblock.d.ts +1 -2
  109. package/dist/docs/tech/templates/runtime.docblock.js +1 -2
  110. package/dist/docs/tech/vscode-extension.docblock.d.ts +1 -2
  111. package/dist/docs/tech/vscode-extension.docblock.js +1 -2
  112. package/dist/docs/tech/workflows/overview.docblock.d.ts +1 -2
  113. package/dist/docs/tech/workflows/overview.docblock.js +1 -2
  114. package/dist/docs/tech-contracts.docs.d.ts +1 -2
  115. package/dist/docs/tech-contracts.docs.js +1 -2
  116. package/dist/docs/types.d.ts +1 -2
  117. package/dist/events.d.ts +1 -2
  118. package/dist/events.js +1 -2
  119. package/dist/experiments/docs/experiments.docblock.d.ts +1 -2
  120. package/dist/experiments/docs/experiments.docblock.js +1 -2
  121. package/dist/experiments/evaluator.d.ts +1 -2
  122. package/dist/experiments/evaluator.js +1 -2
  123. package/dist/experiments/spec-resolver.d.ts +1 -2
  124. package/dist/experiments/spec.d.ts +1 -2
  125. package/dist/experiments/spec.js +1 -2
  126. package/dist/features.d.ts +1 -2
  127. package/dist/features.js +1 -2
  128. package/dist/forms/docs/forms.docblock.d.ts +1 -2
  129. package/dist/forms/docs/forms.docblock.js +1 -2
  130. package/dist/forms.d.ts +5 -6
  131. package/dist/forms.js +4 -4
  132. package/dist/install.d.ts +1 -2
  133. package/dist/install.js +1 -2
  134. package/dist/integrations/binding.d.ts +1 -2
  135. package/dist/integrations/connection.d.ts +1 -2
  136. package/dist/integrations/contracts.d.ts +106 -106
  137. package/dist/integrations/contracts.js +1 -2
  138. package/dist/integrations/docs/integrations.docblock.d.ts +1 -2
  139. package/dist/integrations/docs/integrations.docblock.js +1 -2
  140. package/dist/integrations/health.d.ts +1 -2
  141. package/dist/integrations/health.js +1 -2
  142. package/dist/integrations/openbanking/contracts/accounts.d.ts +70 -70
  143. package/dist/integrations/openbanking/contracts/accounts.js +1 -2
  144. package/dist/integrations/openbanking/contracts/balances.d.ts +38 -38
  145. package/dist/integrations/openbanking/contracts/balances.js +1 -2
  146. package/dist/integrations/openbanking/contracts/index.d.ts +1 -2
  147. package/dist/integrations/openbanking/contracts/index.js +1 -2
  148. package/dist/integrations/openbanking/contracts/transactions.d.ts +52 -52
  149. package/dist/integrations/openbanking/contracts/transactions.js +1 -2
  150. package/dist/integrations/openbanking/guards.d.ts +1 -2
  151. package/dist/integrations/openbanking/guards.js +2 -2
  152. package/dist/integrations/openbanking/models.d.ts +56 -57
  153. package/dist/integrations/openbanking/models.js +1 -2
  154. package/dist/integrations/openbanking/openbanking.feature.d.ts +1 -2
  155. package/dist/integrations/openbanking/openbanking.feature.js +1 -2
  156. package/dist/integrations/openbanking/telemetry.d.ts +1 -2
  157. package/dist/integrations/openbanking/telemetry.js +1 -2
  158. package/dist/integrations/providers/calendar.d.ts +1 -2
  159. package/dist/integrations/providers/elevenlabs.d.ts +1 -2
  160. package/dist/integrations/providers/elevenlabs.js +1 -2
  161. package/dist/integrations/providers/email.d.ts +1 -2
  162. package/dist/integrations/providers/embedding.d.ts +1 -2
  163. package/dist/integrations/providers/gcs-storage.d.ts +1 -2
  164. package/dist/integrations/providers/gcs-storage.js +1 -2
  165. package/dist/integrations/providers/gmail.d.ts +1 -2
  166. package/dist/integrations/providers/gmail.js +1 -2
  167. package/dist/integrations/providers/google-calendar.d.ts +1 -2
  168. package/dist/integrations/providers/google-calendar.js +1 -2
  169. package/dist/integrations/providers/impls/elevenlabs-voice.d.ts +1 -2
  170. package/dist/integrations/providers/impls/elevenlabs-voice.js +1 -2
  171. package/dist/integrations/providers/impls/gcs-storage.d.ts +1 -2
  172. package/dist/integrations/providers/impls/gcs-storage.js +1 -2
  173. package/dist/integrations/providers/impls/gmail-inbound.d.ts +1 -2
  174. package/dist/integrations/providers/impls/gmail-inbound.js +2 -3
  175. package/dist/integrations/providers/impls/gmail-outbound.d.ts +1 -2
  176. package/dist/integrations/providers/impls/gmail-outbound.js +5 -6
  177. package/dist/integrations/providers/impls/google-calendar.d.ts +1 -2
  178. package/dist/integrations/providers/impls/google-calendar.js +1 -2
  179. package/dist/integrations/providers/impls/mistral-embedding.d.ts +1 -2
  180. package/dist/integrations/providers/impls/mistral-embedding.js +1 -2
  181. package/dist/integrations/providers/impls/mistral-llm.d.ts +2 -3
  182. package/dist/integrations/providers/impls/mistral-llm.js +2 -3
  183. package/dist/integrations/providers/impls/postmark-email.d.ts +1 -2
  184. package/dist/integrations/providers/impls/postmark-email.js +1 -2
  185. package/dist/integrations/providers/impls/powens-client.d.ts +1 -2
  186. package/dist/integrations/providers/impls/powens-client.js +1 -2
  187. package/dist/integrations/providers/impls/powens-openbanking.d.ts +2 -3
  188. package/dist/integrations/providers/impls/powens-openbanking.js +1 -2
  189. package/dist/integrations/providers/impls/provider-factory.d.ts +1 -2
  190. package/dist/integrations/providers/impls/provider-factory.js +5 -3
  191. package/dist/integrations/providers/impls/qdrant-vector.d.ts +1 -2
  192. package/dist/integrations/providers/impls/qdrant-vector.js +3 -4
  193. package/dist/integrations/providers/impls/stripe-payments.d.ts +1 -2
  194. package/dist/integrations/providers/impls/stripe-payments.js +1 -2
  195. package/dist/integrations/providers/impls/twilio-sms.d.ts +1 -2
  196. package/dist/integrations/providers/impls/twilio-sms.js +1 -2
  197. package/dist/integrations/providers/llm.d.ts +1 -2
  198. package/dist/integrations/providers/mistral.d.ts +1 -2
  199. package/dist/integrations/providers/mistral.js +1 -2
  200. package/dist/integrations/providers/openbanking.d.ts +1 -2
  201. package/dist/integrations/providers/payments.d.ts +1 -2
  202. package/dist/integrations/providers/postmark.d.ts +1 -2
  203. package/dist/integrations/providers/postmark.js +1 -2
  204. package/dist/integrations/providers/powens.d.ts +1 -2
  205. package/dist/integrations/providers/powens.js +1 -2
  206. package/dist/integrations/providers/qdrant.d.ts +1 -2
  207. package/dist/integrations/providers/qdrant.js +1 -2
  208. package/dist/integrations/providers/registry.d.ts +1 -2
  209. package/dist/integrations/providers/registry.js +1 -2
  210. package/dist/integrations/providers/sms.d.ts +1 -2
  211. package/dist/integrations/providers/storage.d.ts +1 -2
  212. package/dist/integrations/providers/stripe.d.ts +1 -2
  213. package/dist/integrations/providers/stripe.js +1 -2
  214. package/dist/integrations/providers/twilio-sms.d.ts +1 -2
  215. package/dist/integrations/providers/twilio-sms.js +1 -2
  216. package/dist/integrations/providers/vector-store.d.ts +1 -2
  217. package/dist/integrations/providers/voice.d.ts +1 -2
  218. package/dist/integrations/runtime.d.ts +2 -3
  219. package/dist/integrations/runtime.js +2 -3
  220. package/dist/integrations/secrets/aws-secret-manager.d.ts +1 -2
  221. package/dist/integrations/secrets/aws-secret-manager.js +1 -2
  222. package/dist/integrations/secrets/env-secret-provider.d.ts +1 -2
  223. package/dist/integrations/secrets/env-secret-provider.js +1 -2
  224. package/dist/integrations/secrets/gcp-secret-manager.d.ts +1 -2
  225. package/dist/integrations/secrets/gcp-secret-manager.js +1 -2
  226. package/dist/integrations/secrets/manager.d.ts +1 -2
  227. package/dist/integrations/secrets/manager.js +2 -3
  228. package/dist/integrations/secrets/provider.d.ts +1 -2
  229. package/dist/integrations/secrets/provider.js +1 -2
  230. package/dist/integrations/secrets/scaleway-secret-manager.d.ts +1 -2
  231. package/dist/integrations/secrets/scaleway-secret-manager.js +1 -2
  232. package/dist/integrations/spec.d.ts +1 -2
  233. package/dist/integrations/spec.js +1 -2
  234. package/dist/jobs/define-job.d.ts +1 -2
  235. package/dist/jobs/define-job.js +1 -2
  236. package/dist/jobs/gcp-cloud-tasks.d.ts +1 -2
  237. package/dist/jobs/gcp-cloud-tasks.js +1 -2
  238. package/dist/jobs/gcp-pubsub.d.ts +1 -2
  239. package/dist/jobs/gcp-pubsub.js +1 -2
  240. package/dist/jobs/handlers/gmail-sync-handler.d.ts +2 -3
  241. package/dist/jobs/handlers/gmail-sync-handler.js +1 -2
  242. package/dist/jobs/handlers/index.d.ts +1 -2
  243. package/dist/jobs/handlers/index.js +1 -2
  244. package/dist/jobs/handlers/ping-handler.d.ts +1 -2
  245. package/dist/jobs/handlers/ping-handler.js +1 -2
  246. package/dist/jobs/handlers/storage-document-handler.d.ts +1 -2
  247. package/dist/jobs/handlers/storage-document-handler.js +1 -2
  248. package/dist/jobs/memory-queue.d.ts +1 -2
  249. package/dist/jobs/memory-queue.js +1 -2
  250. package/dist/jobs/queue.d.ts +1 -2
  251. package/dist/jobs/queue.js +1 -2
  252. package/dist/jobs/scaleway-sqs-queue.d.ts +1 -2
  253. package/dist/jobs/scaleway-sqs-queue.js +1 -2
  254. package/dist/jsonschema.d.ts +4 -5
  255. package/dist/jsonschema.js +2 -3
  256. package/dist/knowledge/binding.d.ts +1 -2
  257. package/dist/knowledge/contracts.d.ts +70 -70
  258. package/dist/knowledge/contracts.js +1 -2
  259. package/dist/knowledge/docs/knowledge.docblock.d.ts +1 -2
  260. package/dist/knowledge/docs/knowledge.docblock.js +1 -2
  261. package/dist/knowledge/ingestion/document-processor.d.ts +1 -2
  262. package/dist/knowledge/ingestion/document-processor.js +1 -2
  263. package/dist/knowledge/ingestion/embedding-service.d.ts +1 -2
  264. package/dist/knowledge/ingestion/embedding-service.js +1 -2
  265. package/dist/knowledge/ingestion/gmail-adapter.d.ts +1 -2
  266. package/dist/knowledge/ingestion/gmail-adapter.js +1 -2
  267. package/dist/knowledge/ingestion/storage-adapter.d.ts +1 -2
  268. package/dist/knowledge/ingestion/storage-adapter.js +1 -2
  269. package/dist/knowledge/ingestion/vector-indexer.d.ts +1 -2
  270. package/dist/knowledge/ingestion/vector-indexer.js +1 -2
  271. package/dist/knowledge/query/service.d.ts +1 -2
  272. package/dist/knowledge/query/service.js +1 -2
  273. package/dist/knowledge/runtime.d.ts +1 -2
  274. package/dist/knowledge/runtime.js +1 -2
  275. package/dist/knowledge/source.d.ts +1 -2
  276. package/dist/knowledge/spaces/email-threads.d.ts +1 -2
  277. package/dist/knowledge/spaces/email-threads.js +1 -2
  278. package/dist/knowledge/spaces/financial-docs.d.ts +1 -2
  279. package/dist/knowledge/spaces/financial-docs.js +1 -2
  280. package/dist/knowledge/spaces/financial-overview.d.ts +1 -2
  281. package/dist/knowledge/spaces/financial-overview.js +1 -2
  282. package/dist/knowledge/spaces/product-canon.d.ts +1 -2
  283. package/dist/knowledge/spaces/product-canon.js +1 -2
  284. package/dist/knowledge/spaces/support-faq.d.ts +1 -2
  285. package/dist/knowledge/spaces/support-faq.js +1 -2
  286. package/dist/knowledge/spaces/uploaded-docs.d.ts +1 -2
  287. package/dist/knowledge/spaces/uploaded-docs.js +1 -2
  288. package/dist/knowledge/spec.d.ts +1 -2
  289. package/dist/knowledge/spec.js +1 -2
  290. package/dist/llm/exporters.d.ts +1 -2
  291. package/dist/llm/exporters.js +1 -2
  292. package/dist/llm/prompts.d.ts +1 -2
  293. package/dist/llm/prompts.js +1 -2
  294. package/dist/llm/types.d.ts +1 -2
  295. package/dist/markdown.d.ts +2 -3
  296. package/dist/markdown.js +2 -3
  297. package/dist/migrations.d.ts +1 -2
  298. package/dist/migrations.js +1 -2
  299. package/dist/onboarding-base.d.ts +30 -31
  300. package/dist/onboarding-base.js +1 -2
  301. package/dist/openapi.d.ts +1 -2
  302. package/dist/openapi.js +1 -2
  303. package/dist/openbanking/docs/openbanking.docblock.d.ts +1 -2
  304. package/dist/openbanking/docs/openbanking.docblock.js +1 -2
  305. package/dist/ownership.d.ts +3 -2
  306. package/dist/ownership.js +2 -2
  307. package/dist/policy/docs/policy.docblock.d.ts +1 -2
  308. package/dist/policy/docs/policy.docblock.js +1 -2
  309. package/dist/policy/engine.d.ts +1 -2
  310. package/dist/policy/engine.js +1 -2
  311. package/dist/policy/opa-adapter.d.ts +1 -2
  312. package/dist/policy/opa-adapter.js +1 -2
  313. package/dist/policy/spec.d.ts +1 -2
  314. package/dist/policy/spec.js +1 -2
  315. package/dist/presentations/docs/presentations-conventions.docblock.d.ts +1 -2
  316. package/dist/presentations/docs/presentations-conventions.docblock.js +1 -2
  317. package/dist/presentations.backcompat.d.ts +1 -2
  318. package/dist/presentations.backcompat.js +1 -2
  319. package/dist/presentations.d.ts +4 -5
  320. package/dist/presentations.js +1 -2
  321. package/dist/presentations.v2.d.ts +1 -2
  322. package/dist/presentations.v2.js +6 -4
  323. package/dist/prompt.d.ts +1 -2
  324. package/dist/prompt.js +1 -2
  325. package/dist/promptRegistry.d.ts +3 -4
  326. package/dist/promptRegistry.js +3 -4
  327. package/dist/regenerator/adapters.d.ts +1 -2
  328. package/dist/regenerator/docs/regenerator.docblock.d.ts +1 -2
  329. package/dist/regenerator/docs/regenerator.docblock.js +1 -2
  330. package/dist/regenerator/executor.d.ts +1 -2
  331. package/dist/regenerator/executor.js +1 -2
  332. package/dist/regenerator/service.d.ts +1 -2
  333. package/dist/regenerator/service.js +1 -2
  334. package/dist/regenerator/sinks.d.ts +1 -2
  335. package/dist/regenerator/sinks.js +1 -2
  336. package/dist/regenerator/types.d.ts +1 -2
  337. package/dist/regenerator/utils.d.ts +1 -2
  338. package/dist/regenerator/utils.js +1 -2
  339. package/dist/registry.d.ts +2 -3
  340. package/dist/registry.js +2 -2
  341. package/dist/resources.d.ts +1 -2
  342. package/dist/resources.js +5 -3
  343. package/dist/schema/dist/index.js +1 -2
  344. package/dist/schema-to-markdown.d.ts +2 -3
  345. package/dist/schema-to-markdown.js +2 -3
  346. package/dist/server/graphql-pothos.d.ts +1 -2
  347. package/dist/server/graphql-pothos.js +1 -3
  348. package/dist/server/mcp/createMcpServer.d.ts +1 -2
  349. package/dist/server/mcp/createMcpServer.js +1 -2
  350. package/dist/server/mcp/mcpTypes.d.ts +1 -2
  351. package/dist/server/mcp/registerPresentations.d.ts +1 -2
  352. package/dist/server/mcp/registerPresentations.js +1 -2
  353. package/dist/server/mcp/registerPrompts.d.ts +1 -2
  354. package/dist/server/mcp/registerPrompts.js +1 -2
  355. package/dist/server/mcp/registerResources.d.ts +1 -2
  356. package/dist/server/mcp/registerResources.js +1 -2
  357. package/dist/server/mcp/registerTools.d.ts +1 -2
  358. package/dist/server/mcp/registerTools.js +1 -2
  359. package/dist/server/rest-elysia.d.ts +2 -3
  360. package/dist/server/rest-elysia.js +1 -2
  361. package/dist/server/rest-express.d.ts +1 -2
  362. package/dist/server/rest-express.js +1 -5
  363. package/dist/server/rest-generic.d.ts +2 -3
  364. package/dist/server/rest-generic.js +1 -3
  365. package/dist/server/rest-next-app.d.ts +1 -2
  366. package/dist/server/rest-next-app.js +1 -2
  367. package/dist/server/rest-next-mcp.d.ts +1 -2
  368. package/dist/server/rest-next-mcp.js +2 -3
  369. package/dist/server/rest-next-pages.d.ts +1 -2
  370. package/dist/server/rest-next-pages.js +1 -5
  371. package/dist/spec.d.ts +1 -2
  372. package/dist/spec.js +1 -2
  373. package/dist/telemetry/anomaly.d.ts +1 -2
  374. package/dist/telemetry/anomaly.js +1 -2
  375. package/dist/telemetry/docs/telemetry.docblock.d.ts +1 -2
  376. package/dist/telemetry/docs/telemetry.docblock.js +1 -2
  377. package/dist/telemetry/spec.d.ts +1 -2
  378. package/dist/telemetry/spec.js +1 -2
  379. package/dist/telemetry/tracker.d.ts +1 -2
  380. package/dist/telemetry/tracker.js +1 -2
  381. package/dist/tests/runner.d.ts +1 -2
  382. package/dist/tests/runner.js +1 -2
  383. package/dist/tests/spec.d.ts +1 -2
  384. package/dist/tests/spec.js +1 -2
  385. package/dist/themes.d.ts +1 -2
  386. package/dist/themes.js +1 -2
  387. package/dist/translations/catalog.d.ts +1 -2
  388. package/dist/translations/tenant.d.ts +1 -2
  389. package/dist/types.d.ts +1 -2
  390. package/dist/workflow/adapters/db-adapter.d.ts +1 -2
  391. package/dist/workflow/adapters/db-adapter.js +1 -2
  392. package/dist/workflow/adapters/file-adapter.d.ts +1 -2
  393. package/dist/workflow/adapters/file-adapter.js +1 -2
  394. package/dist/workflow/adapters/memory-store.d.ts +1 -2
  395. package/dist/workflow/adapters/memory-store.js +1 -2
  396. package/dist/workflow/expression.d.ts +1 -2
  397. package/dist/workflow/expression.js +4 -4
  398. package/dist/workflow/runner.d.ts +1 -2
  399. package/dist/workflow/runner.js +1 -2
  400. package/dist/workflow/sla-monitor.d.ts +1 -2
  401. package/dist/workflow/sla-monitor.js +1 -2
  402. package/dist/workflow/spec.d.ts +1 -2
  403. package/dist/workflow/spec.js +1 -2
  404. package/dist/workflow/state.d.ts +1 -2
  405. package/dist/workflow/validation.d.ts +1 -2
  406. package/dist/workflow/validation.js +2 -2
  407. package/package.json +14 -8
  408. package/dist/app-config/app-config.feature.d.ts.map +0 -1
  409. package/dist/app-config/app-config.feature.js.map +0 -1
  410. package/dist/app-config/branding.d.ts.map +0 -1
  411. package/dist/app-config/contracts.d.ts.map +0 -1
  412. package/dist/app-config/contracts.js.map +0 -1
  413. package/dist/app-config/docs/app-config.docblock.d.ts.map +0 -1
  414. package/dist/app-config/docs/app-config.docblock.js.map +0 -1
  415. package/dist/app-config/events.d.ts.map +0 -1
  416. package/dist/app-config/events.js.map +0 -1
  417. package/dist/app-config/lifecycle-contracts.d.ts.map +0 -1
  418. package/dist/app-config/lifecycle-contracts.js.map +0 -1
  419. package/dist/app-config/lifecycle.d.ts.map +0 -1
  420. package/dist/app-config/runtime.d.ts.map +0 -1
  421. package/dist/app-config/runtime.js.map +0 -1
  422. package/dist/app-config/spec.d.ts.map +0 -1
  423. package/dist/app-config/spec.js.map +0 -1
  424. package/dist/app-config/validation.d.ts.map +0 -1
  425. package/dist/app-config/validation.js.map +0 -1
  426. package/dist/capabilities/docs/capabilities.docblock.d.ts.map +0 -1
  427. package/dist/capabilities/docs/capabilities.docblock.js.map +0 -1
  428. package/dist/capabilities/openbanking.d.ts.map +0 -1
  429. package/dist/capabilities/openbanking.js.map +0 -1
  430. package/dist/capabilities.d.ts.map +0 -1
  431. package/dist/capabilities.js.map +0 -1
  432. package/dist/client/react/drivers/rn-reusables.d.ts.map +0 -1
  433. package/dist/client/react/drivers/rn-reusables.js.map +0 -1
  434. package/dist/client/react/drivers/shadcn.d.ts.map +0 -1
  435. package/dist/client/react/drivers/shadcn.js.map +0 -1
  436. package/dist/client/react/feature-render.d.ts.map +0 -1
  437. package/dist/client/react/feature-render.js.map +0 -1
  438. package/dist/client/react/form-render.d.ts.map +0 -1
  439. package/dist/client/react/form-render.js.map +0 -1
  440. package/dist/contract-registry/schemas.d.ts.map +0 -1
  441. package/dist/contract-registry/schemas.js.map +0 -1
  442. package/dist/contract-registry/types.d.ts.map +0 -1
  443. package/dist/contracts-adapter-hydration.d.ts.map +0 -1
  444. package/dist/contracts-adapter-hydration.js.map +0 -1
  445. package/dist/contracts-adapter-input.d.ts.map +0 -1
  446. package/dist/contracts-adapter-input.js.map +0 -1
  447. package/dist/data-views/docs/data-views.docblock.d.ts.map +0 -1
  448. package/dist/data-views/docs/data-views.docblock.js.map +0 -1
  449. package/dist/data-views/query-generator.d.ts.map +0 -1
  450. package/dist/data-views/query-generator.js.map +0 -1
  451. package/dist/data-views/runtime.d.ts.map +0 -1
  452. package/dist/data-views/runtime.js.map +0 -1
  453. package/dist/data-views.d.ts.map +0 -1
  454. package/dist/data-views.js.map +0 -1
  455. package/dist/docs/accessibility_wcag_compliance_specs.docblock.d.ts.map +0 -1
  456. package/dist/docs/accessibility_wcag_compliance_specs.docblock.js.map +0 -1
  457. package/dist/docs/meta.docs.d.ts.map +0 -1
  458. package/dist/docs/meta.docs.js.map +0 -1
  459. package/dist/docs/presentations.d.ts.map +0 -1
  460. package/dist/docs/presentations.js.map +0 -1
  461. package/dist/docs/registry.d.ts.map +0 -1
  462. package/dist/docs/registry.js.map +0 -1
  463. package/dist/docs/tech/auth/better-auth-nextjs.docblock.d.ts.map +0 -1
  464. package/dist/docs/tech/auth/better-auth-nextjs.docblock.js.map +0 -1
  465. package/dist/docs/tech/contracts/README.docblock.d.ts.map +0 -1
  466. package/dist/docs/tech/contracts/README.docblock.js.map +0 -1
  467. package/dist/docs/tech/contracts/create-subscription.docblock.d.ts.map +0 -1
  468. package/dist/docs/tech/contracts/create-subscription.docblock.js.map +0 -1
  469. package/dist/docs/tech/contracts/graphql-typed-outputs.docblock.d.ts.map +0 -1
  470. package/dist/docs/tech/contracts/graphql-typed-outputs.docblock.js.map +0 -1
  471. package/dist/docs/tech/contracts/migrations.docblock.d.ts.map +0 -1
  472. package/dist/docs/tech/contracts/migrations.docblock.js.map +0 -1
  473. package/dist/docs/tech/contracts/openapi-export.docblock.d.ts.map +0 -1
  474. package/dist/docs/tech/contracts/openapi-export.docblock.js.map +0 -1
  475. package/dist/docs/tech/contracts/ops-to-presentation-linking.docblock.d.ts.map +0 -1
  476. package/dist/docs/tech/contracts/ops-to-presentation-linking.docblock.js.map +0 -1
  477. package/dist/docs/tech/contracts/overlays.docblock.d.ts.map +0 -1
  478. package/dist/docs/tech/contracts/overlays.docblock.js.map +0 -1
  479. package/dist/docs/tech/contracts/tests.docblock.d.ts.map +0 -1
  480. package/dist/docs/tech/contracts/tests.docblock.js.map +0 -1
  481. package/dist/docs/tech/contracts/themes.docblock.d.ts.map +0 -1
  482. package/dist/docs/tech/contracts/themes.docblock.js.map +0 -1
  483. package/dist/docs/tech/contracts/vertical-pocket-family-office.docblock.d.ts.map +0 -1
  484. package/dist/docs/tech/contracts/vertical-pocket-family-office.docblock.js.map +0 -1
  485. package/dist/docs/tech/lifecycle-stage-system.docblock.d.ts.map +0 -1
  486. package/dist/docs/tech/lifecycle-stage-system.docblock.js.map +0 -1
  487. package/dist/docs/tech/llm/llm-integration.docblock.d.ts.map +0 -1
  488. package/dist/docs/tech/llm/llm-integration.docblock.js.map +0 -1
  489. package/dist/docs/tech/mcp-endpoints.docblock.d.ts.map +0 -1
  490. package/dist/docs/tech/mcp-endpoints.docblock.js.map +0 -1
  491. package/dist/docs/tech/presentation-runtime.docblock.d.ts.map +0 -1
  492. package/dist/docs/tech/presentation-runtime.docblock.js.map +0 -1
  493. package/dist/docs/tech/schema/README.docblock.d.ts.map +0 -1
  494. package/dist/docs/tech/schema/README.docblock.js.map +0 -1
  495. package/dist/docs/tech/studio/learning-events.docblock.d.ts.map +0 -1
  496. package/dist/docs/tech/studio/learning-events.docblock.js.map +0 -1
  497. package/dist/docs/tech/studio/learning-journeys.docblock.d.ts.map +0 -1
  498. package/dist/docs/tech/studio/learning-journeys.docblock.js.map +0 -1
  499. package/dist/docs/tech/studio/platform-admin-panel.docblock.d.ts.map +0 -1
  500. package/dist/docs/tech/studio/platform-admin-panel.docblock.js.map +0 -1
  501. package/dist/docs/tech/studio/project-access-teams.docblock.d.ts.map +0 -1
  502. package/dist/docs/tech/studio/project-access-teams.docblock.js.map +0 -1
  503. package/dist/docs/tech/studio/project-routing.docblock.d.ts.map +0 -1
  504. package/dist/docs/tech/studio/project-routing.docblock.js.map +0 -1
  505. package/dist/docs/tech/studio/sandbox-unlogged.docblock.d.ts.map +0 -1
  506. package/dist/docs/tech/studio/sandbox-unlogged.docblock.js.map +0 -1
  507. package/dist/docs/tech/studio/team-invitations.docblock.d.ts.map +0 -1
  508. package/dist/docs/tech/studio/team-invitations.docblock.js.map +0 -1
  509. package/dist/docs/tech/studio/workspace-ops.docblock.d.ts.map +0 -1
  510. package/dist/docs/tech/studio/workspace-ops.docblock.js.map +0 -1
  511. package/dist/docs/tech/studio/workspaces.docblock.d.ts.map +0 -1
  512. package/dist/docs/tech/studio/workspaces.docblock.js.map +0 -1
  513. package/dist/docs/tech/telemetry-ingest.docblock.d.ts.map +0 -1
  514. package/dist/docs/tech/telemetry-ingest.docblock.js.map +0 -1
  515. package/dist/docs/tech/templates/runtime.docblock.d.ts.map +0 -1
  516. package/dist/docs/tech/templates/runtime.docblock.js.map +0 -1
  517. package/dist/docs/tech/vscode-extension.docblock.d.ts.map +0 -1
  518. package/dist/docs/tech/vscode-extension.docblock.js.map +0 -1
  519. package/dist/docs/tech/workflows/overview.docblock.d.ts.map +0 -1
  520. package/dist/docs/tech/workflows/overview.docblock.js.map +0 -1
  521. package/dist/docs/tech-contracts.docs.d.ts.map +0 -1
  522. package/dist/docs/tech-contracts.docs.js.map +0 -1
  523. package/dist/docs/types.d.ts.map +0 -1
  524. package/dist/events.d.ts.map +0 -1
  525. package/dist/events.js.map +0 -1
  526. package/dist/experiments/docs/experiments.docblock.d.ts.map +0 -1
  527. package/dist/experiments/docs/experiments.docblock.js.map +0 -1
  528. package/dist/experiments/evaluator.d.ts.map +0 -1
  529. package/dist/experiments/evaluator.js.map +0 -1
  530. package/dist/experiments/spec-resolver.d.ts.map +0 -1
  531. package/dist/experiments/spec.d.ts.map +0 -1
  532. package/dist/experiments/spec.js.map +0 -1
  533. package/dist/features.d.ts.map +0 -1
  534. package/dist/features.js.map +0 -1
  535. package/dist/forms/docs/forms.docblock.d.ts.map +0 -1
  536. package/dist/forms/docs/forms.docblock.js.map +0 -1
  537. package/dist/forms.d.ts.map +0 -1
  538. package/dist/forms.js.map +0 -1
  539. package/dist/install.d.ts.map +0 -1
  540. package/dist/install.js.map +0 -1
  541. package/dist/integrations/binding.d.ts.map +0 -1
  542. package/dist/integrations/connection.d.ts.map +0 -1
  543. package/dist/integrations/contracts.d.ts.map +0 -1
  544. package/dist/integrations/contracts.js.map +0 -1
  545. package/dist/integrations/docs/integrations.docblock.d.ts.map +0 -1
  546. package/dist/integrations/docs/integrations.docblock.js.map +0 -1
  547. package/dist/integrations/health.d.ts.map +0 -1
  548. package/dist/integrations/health.js.map +0 -1
  549. package/dist/integrations/openbanking/contracts/accounts.d.ts.map +0 -1
  550. package/dist/integrations/openbanking/contracts/accounts.js.map +0 -1
  551. package/dist/integrations/openbanking/contracts/balances.d.ts.map +0 -1
  552. package/dist/integrations/openbanking/contracts/balances.js.map +0 -1
  553. package/dist/integrations/openbanking/contracts/index.d.ts.map +0 -1
  554. package/dist/integrations/openbanking/contracts/index.js.map +0 -1
  555. package/dist/integrations/openbanking/contracts/transactions.d.ts.map +0 -1
  556. package/dist/integrations/openbanking/contracts/transactions.js.map +0 -1
  557. package/dist/integrations/openbanking/guards.d.ts.map +0 -1
  558. package/dist/integrations/openbanking/guards.js.map +0 -1
  559. package/dist/integrations/openbanking/models.d.ts.map +0 -1
  560. package/dist/integrations/openbanking/models.js.map +0 -1
  561. package/dist/integrations/openbanking/openbanking.feature.d.ts.map +0 -1
  562. package/dist/integrations/openbanking/openbanking.feature.js.map +0 -1
  563. package/dist/integrations/openbanking/telemetry.d.ts.map +0 -1
  564. package/dist/integrations/openbanking/telemetry.js.map +0 -1
  565. package/dist/integrations/providers/calendar.d.ts.map +0 -1
  566. package/dist/integrations/providers/elevenlabs.d.ts.map +0 -1
  567. package/dist/integrations/providers/elevenlabs.js.map +0 -1
  568. package/dist/integrations/providers/email.d.ts.map +0 -1
  569. package/dist/integrations/providers/embedding.d.ts.map +0 -1
  570. package/dist/integrations/providers/gcs-storage.d.ts.map +0 -1
  571. package/dist/integrations/providers/gcs-storage.js.map +0 -1
  572. package/dist/integrations/providers/gmail.d.ts.map +0 -1
  573. package/dist/integrations/providers/gmail.js.map +0 -1
  574. package/dist/integrations/providers/google-calendar.d.ts.map +0 -1
  575. package/dist/integrations/providers/google-calendar.js.map +0 -1
  576. package/dist/integrations/providers/impls/elevenlabs-voice.d.ts.map +0 -1
  577. package/dist/integrations/providers/impls/elevenlabs-voice.js.map +0 -1
  578. package/dist/integrations/providers/impls/gcs-storage.d.ts.map +0 -1
  579. package/dist/integrations/providers/impls/gcs-storage.js.map +0 -1
  580. package/dist/integrations/providers/impls/gmail-inbound.d.ts.map +0 -1
  581. package/dist/integrations/providers/impls/gmail-inbound.js.map +0 -1
  582. package/dist/integrations/providers/impls/gmail-outbound.d.ts.map +0 -1
  583. package/dist/integrations/providers/impls/gmail-outbound.js.map +0 -1
  584. package/dist/integrations/providers/impls/google-calendar.d.ts.map +0 -1
  585. package/dist/integrations/providers/impls/google-calendar.js.map +0 -1
  586. package/dist/integrations/providers/impls/mistral-embedding.d.ts.map +0 -1
  587. package/dist/integrations/providers/impls/mistral-embedding.js.map +0 -1
  588. package/dist/integrations/providers/impls/mistral-llm.d.ts.map +0 -1
  589. package/dist/integrations/providers/impls/mistral-llm.js.map +0 -1
  590. package/dist/integrations/providers/impls/postmark-email.d.ts.map +0 -1
  591. package/dist/integrations/providers/impls/postmark-email.js.map +0 -1
  592. package/dist/integrations/providers/impls/powens-client.d.ts.map +0 -1
  593. package/dist/integrations/providers/impls/powens-client.js.map +0 -1
  594. package/dist/integrations/providers/impls/powens-openbanking.d.ts.map +0 -1
  595. package/dist/integrations/providers/impls/powens-openbanking.js.map +0 -1
  596. package/dist/integrations/providers/impls/provider-factory.d.ts.map +0 -1
  597. package/dist/integrations/providers/impls/provider-factory.js.map +0 -1
  598. package/dist/integrations/providers/impls/qdrant-vector.d.ts.map +0 -1
  599. package/dist/integrations/providers/impls/qdrant-vector.js.map +0 -1
  600. package/dist/integrations/providers/impls/stripe-payments.d.ts.map +0 -1
  601. package/dist/integrations/providers/impls/stripe-payments.js.map +0 -1
  602. package/dist/integrations/providers/impls/twilio-sms.d.ts.map +0 -1
  603. package/dist/integrations/providers/impls/twilio-sms.js.map +0 -1
  604. package/dist/integrations/providers/llm.d.ts.map +0 -1
  605. package/dist/integrations/providers/mistral.d.ts.map +0 -1
  606. package/dist/integrations/providers/mistral.js.map +0 -1
  607. package/dist/integrations/providers/openbanking.d.ts.map +0 -1
  608. package/dist/integrations/providers/payments.d.ts.map +0 -1
  609. package/dist/integrations/providers/postmark.d.ts.map +0 -1
  610. package/dist/integrations/providers/postmark.js.map +0 -1
  611. package/dist/integrations/providers/powens.d.ts.map +0 -1
  612. package/dist/integrations/providers/powens.js.map +0 -1
  613. package/dist/integrations/providers/qdrant.d.ts.map +0 -1
  614. package/dist/integrations/providers/qdrant.js.map +0 -1
  615. package/dist/integrations/providers/registry.d.ts.map +0 -1
  616. package/dist/integrations/providers/registry.js.map +0 -1
  617. package/dist/integrations/providers/sms.d.ts.map +0 -1
  618. package/dist/integrations/providers/storage.d.ts.map +0 -1
  619. package/dist/integrations/providers/stripe.d.ts.map +0 -1
  620. package/dist/integrations/providers/stripe.js.map +0 -1
  621. package/dist/integrations/providers/twilio-sms.d.ts.map +0 -1
  622. package/dist/integrations/providers/twilio-sms.js.map +0 -1
  623. package/dist/integrations/providers/vector-store.d.ts.map +0 -1
  624. package/dist/integrations/providers/voice.d.ts.map +0 -1
  625. package/dist/integrations/runtime.d.ts.map +0 -1
  626. package/dist/integrations/runtime.js.map +0 -1
  627. package/dist/integrations/secrets/aws-secret-manager.d.ts.map +0 -1
  628. package/dist/integrations/secrets/aws-secret-manager.js.map +0 -1
  629. package/dist/integrations/secrets/env-secret-provider.d.ts.map +0 -1
  630. package/dist/integrations/secrets/env-secret-provider.js.map +0 -1
  631. package/dist/integrations/secrets/gcp-secret-manager.d.ts.map +0 -1
  632. package/dist/integrations/secrets/gcp-secret-manager.js.map +0 -1
  633. package/dist/integrations/secrets/manager.d.ts.map +0 -1
  634. package/dist/integrations/secrets/manager.js.map +0 -1
  635. package/dist/integrations/secrets/provider.d.ts.map +0 -1
  636. package/dist/integrations/secrets/provider.js.map +0 -1
  637. package/dist/integrations/secrets/scaleway-secret-manager.d.ts.map +0 -1
  638. package/dist/integrations/secrets/scaleway-secret-manager.js.map +0 -1
  639. package/dist/integrations/spec.d.ts.map +0 -1
  640. package/dist/integrations/spec.js.map +0 -1
  641. package/dist/jobs/define-job.d.ts.map +0 -1
  642. package/dist/jobs/define-job.js.map +0 -1
  643. package/dist/jobs/gcp-cloud-tasks.d.ts.map +0 -1
  644. package/dist/jobs/gcp-cloud-tasks.js.map +0 -1
  645. package/dist/jobs/gcp-pubsub.d.ts.map +0 -1
  646. package/dist/jobs/gcp-pubsub.js.map +0 -1
  647. package/dist/jobs/handlers/gmail-sync-handler.d.ts.map +0 -1
  648. package/dist/jobs/handlers/gmail-sync-handler.js.map +0 -1
  649. package/dist/jobs/handlers/index.d.ts.map +0 -1
  650. package/dist/jobs/handlers/index.js.map +0 -1
  651. package/dist/jobs/handlers/ping-handler.d.ts.map +0 -1
  652. package/dist/jobs/handlers/ping-handler.js.map +0 -1
  653. package/dist/jobs/handlers/storage-document-handler.d.ts.map +0 -1
  654. package/dist/jobs/handlers/storage-document-handler.js.map +0 -1
  655. package/dist/jobs/memory-queue.d.ts.map +0 -1
  656. package/dist/jobs/memory-queue.js.map +0 -1
  657. package/dist/jobs/queue.d.ts.map +0 -1
  658. package/dist/jobs/queue.js.map +0 -1
  659. package/dist/jobs/scaleway-sqs-queue.d.ts.map +0 -1
  660. package/dist/jobs/scaleway-sqs-queue.js.map +0 -1
  661. package/dist/jsonschema.d.ts.map +0 -1
  662. package/dist/jsonschema.js.map +0 -1
  663. package/dist/knowledge/binding.d.ts.map +0 -1
  664. package/dist/knowledge/contracts.d.ts.map +0 -1
  665. package/dist/knowledge/contracts.js.map +0 -1
  666. package/dist/knowledge/docs/knowledge.docblock.d.ts.map +0 -1
  667. package/dist/knowledge/docs/knowledge.docblock.js.map +0 -1
  668. package/dist/knowledge/ingestion/document-processor.d.ts.map +0 -1
  669. package/dist/knowledge/ingestion/document-processor.js.map +0 -1
  670. package/dist/knowledge/ingestion/embedding-service.d.ts.map +0 -1
  671. package/dist/knowledge/ingestion/embedding-service.js.map +0 -1
  672. package/dist/knowledge/ingestion/gmail-adapter.d.ts.map +0 -1
  673. package/dist/knowledge/ingestion/gmail-adapter.js.map +0 -1
  674. package/dist/knowledge/ingestion/storage-adapter.d.ts.map +0 -1
  675. package/dist/knowledge/ingestion/storage-adapter.js.map +0 -1
  676. package/dist/knowledge/ingestion/vector-indexer.d.ts.map +0 -1
  677. package/dist/knowledge/ingestion/vector-indexer.js.map +0 -1
  678. package/dist/knowledge/query/service.d.ts.map +0 -1
  679. package/dist/knowledge/query/service.js.map +0 -1
  680. package/dist/knowledge/runtime.d.ts.map +0 -1
  681. package/dist/knowledge/runtime.js.map +0 -1
  682. package/dist/knowledge/source.d.ts.map +0 -1
  683. package/dist/knowledge/spaces/email-threads.d.ts.map +0 -1
  684. package/dist/knowledge/spaces/email-threads.js.map +0 -1
  685. package/dist/knowledge/spaces/financial-docs.d.ts.map +0 -1
  686. package/dist/knowledge/spaces/financial-docs.js.map +0 -1
  687. package/dist/knowledge/spaces/financial-overview.d.ts.map +0 -1
  688. package/dist/knowledge/spaces/financial-overview.js.map +0 -1
  689. package/dist/knowledge/spaces/product-canon.d.ts.map +0 -1
  690. package/dist/knowledge/spaces/product-canon.js.map +0 -1
  691. package/dist/knowledge/spaces/support-faq.d.ts.map +0 -1
  692. package/dist/knowledge/spaces/support-faq.js.map +0 -1
  693. package/dist/knowledge/spaces/uploaded-docs.d.ts.map +0 -1
  694. package/dist/knowledge/spaces/uploaded-docs.js.map +0 -1
  695. package/dist/knowledge/spec.d.ts.map +0 -1
  696. package/dist/knowledge/spec.js.map +0 -1
  697. package/dist/llm/exporters.d.ts.map +0 -1
  698. package/dist/llm/exporters.js.map +0 -1
  699. package/dist/llm/prompts.d.ts.map +0 -1
  700. package/dist/llm/prompts.js.map +0 -1
  701. package/dist/llm/types.d.ts.map +0 -1
  702. package/dist/markdown.d.ts.map +0 -1
  703. package/dist/markdown.js.map +0 -1
  704. package/dist/migrations.d.ts.map +0 -1
  705. package/dist/migrations.js.map +0 -1
  706. package/dist/onboarding-base.d.ts.map +0 -1
  707. package/dist/onboarding-base.js.map +0 -1
  708. package/dist/openapi.d.ts.map +0 -1
  709. package/dist/openapi.js.map +0 -1
  710. package/dist/openbanking/docs/openbanking.docblock.d.ts.map +0 -1
  711. package/dist/openbanking/docs/openbanking.docblock.js.map +0 -1
  712. package/dist/ownership.d.ts.map +0 -1
  713. package/dist/ownership.js.map +0 -1
  714. package/dist/policy/docs/policy.docblock.d.ts.map +0 -1
  715. package/dist/policy/docs/policy.docblock.js.map +0 -1
  716. package/dist/policy/engine.d.ts.map +0 -1
  717. package/dist/policy/engine.js.map +0 -1
  718. package/dist/policy/opa-adapter.d.ts.map +0 -1
  719. package/dist/policy/opa-adapter.js.map +0 -1
  720. package/dist/policy/spec.d.ts.map +0 -1
  721. package/dist/policy/spec.js.map +0 -1
  722. package/dist/presentations/docs/presentations-conventions.docblock.d.ts.map +0 -1
  723. package/dist/presentations/docs/presentations-conventions.docblock.js.map +0 -1
  724. package/dist/presentations.backcompat.d.ts.map +0 -1
  725. package/dist/presentations.backcompat.js.map +0 -1
  726. package/dist/presentations.d.ts.map +0 -1
  727. package/dist/presentations.js.map +0 -1
  728. package/dist/presentations.v2.d.ts.map +0 -1
  729. package/dist/presentations.v2.js.map +0 -1
  730. package/dist/prompt.d.ts.map +0 -1
  731. package/dist/prompt.js.map +0 -1
  732. package/dist/promptRegistry.d.ts.map +0 -1
  733. package/dist/promptRegistry.js.map +0 -1
  734. package/dist/regenerator/adapters.d.ts.map +0 -1
  735. package/dist/regenerator/docs/regenerator.docblock.d.ts.map +0 -1
  736. package/dist/regenerator/docs/regenerator.docblock.js.map +0 -1
  737. package/dist/regenerator/executor.d.ts.map +0 -1
  738. package/dist/regenerator/executor.js.map +0 -1
  739. package/dist/regenerator/service.d.ts.map +0 -1
  740. package/dist/regenerator/service.js.map +0 -1
  741. package/dist/regenerator/sinks.d.ts.map +0 -1
  742. package/dist/regenerator/sinks.js.map +0 -1
  743. package/dist/regenerator/types.d.ts.map +0 -1
  744. package/dist/regenerator/utils.d.ts.map +0 -1
  745. package/dist/regenerator/utils.js.map +0 -1
  746. package/dist/registry.d.ts.map +0 -1
  747. package/dist/registry.js.map +0 -1
  748. package/dist/resources.d.ts.map +0 -1
  749. package/dist/resources.js.map +0 -1
  750. package/dist/schema/dist/index.js.map +0 -1
  751. package/dist/schema-to-markdown.d.ts.map +0 -1
  752. package/dist/schema-to-markdown.js.map +0 -1
  753. package/dist/server/graphql-pothos.d.ts.map +0 -1
  754. package/dist/server/graphql-pothos.js.map +0 -1
  755. package/dist/server/mcp/createMcpServer.d.ts.map +0 -1
  756. package/dist/server/mcp/createMcpServer.js.map +0 -1
  757. package/dist/server/mcp/mcpTypes.d.ts.map +0 -1
  758. package/dist/server/mcp/registerPresentations.d.ts.map +0 -1
  759. package/dist/server/mcp/registerPresentations.js.map +0 -1
  760. package/dist/server/mcp/registerPrompts.d.ts.map +0 -1
  761. package/dist/server/mcp/registerPrompts.js.map +0 -1
  762. package/dist/server/mcp/registerResources.d.ts.map +0 -1
  763. package/dist/server/mcp/registerResources.js.map +0 -1
  764. package/dist/server/mcp/registerTools.d.ts.map +0 -1
  765. package/dist/server/mcp/registerTools.js.map +0 -1
  766. package/dist/server/rest-elysia.d.ts.map +0 -1
  767. package/dist/server/rest-elysia.js.map +0 -1
  768. package/dist/server/rest-express.d.ts.map +0 -1
  769. package/dist/server/rest-express.js.map +0 -1
  770. package/dist/server/rest-generic.d.ts.map +0 -1
  771. package/dist/server/rest-generic.js.map +0 -1
  772. package/dist/server/rest-next-app.d.ts.map +0 -1
  773. package/dist/server/rest-next-app.js.map +0 -1
  774. package/dist/server/rest-next-mcp.d.ts.map +0 -1
  775. package/dist/server/rest-next-mcp.js.map +0 -1
  776. package/dist/server/rest-next-pages.d.ts.map +0 -1
  777. package/dist/server/rest-next-pages.js.map +0 -1
  778. package/dist/spec.d.ts.map +0 -1
  779. package/dist/spec.js.map +0 -1
  780. package/dist/telemetry/anomaly.d.ts.map +0 -1
  781. package/dist/telemetry/anomaly.js.map +0 -1
  782. package/dist/telemetry/docs/telemetry.docblock.d.ts.map +0 -1
  783. package/dist/telemetry/docs/telemetry.docblock.js.map +0 -1
  784. package/dist/telemetry/spec.d.ts.map +0 -1
  785. package/dist/telemetry/spec.js.map +0 -1
  786. package/dist/telemetry/tracker.d.ts.map +0 -1
  787. package/dist/telemetry/tracker.js.map +0 -1
  788. package/dist/tests/runner.d.ts.map +0 -1
  789. package/dist/tests/runner.js.map +0 -1
  790. package/dist/tests/spec.d.ts.map +0 -1
  791. package/dist/tests/spec.js.map +0 -1
  792. package/dist/themes.d.ts.map +0 -1
  793. package/dist/themes.js.map +0 -1
  794. package/dist/translations/catalog.d.ts.map +0 -1
  795. package/dist/translations/tenant.d.ts.map +0 -1
  796. package/dist/types.d.ts.map +0 -1
  797. package/dist/workflow/adapters/db-adapter.d.ts.map +0 -1
  798. package/dist/workflow/adapters/db-adapter.js.map +0 -1
  799. package/dist/workflow/adapters/file-adapter.d.ts.map +0 -1
  800. package/dist/workflow/adapters/file-adapter.js.map +0 -1
  801. package/dist/workflow/adapters/memory-store.d.ts.map +0 -1
  802. package/dist/workflow/adapters/memory-store.js.map +0 -1
  803. package/dist/workflow/expression.d.ts.map +0 -1
  804. package/dist/workflow/expression.js.map +0 -1
  805. package/dist/workflow/runner.d.ts.map +0 -1
  806. package/dist/workflow/runner.js.map +0 -1
  807. package/dist/workflow/sla-monitor.d.ts.map +0 -1
  808. package/dist/workflow/sla-monitor.js.map +0 -1
  809. package/dist/workflow/spec.d.ts.map +0 -1
  810. package/dist/workflow/spec.js.map +0 -1
  811. package/dist/workflow/state.d.ts.map +0 -1
  812. package/dist/workflow/validation.d.ts.map +0 -1
  813. package/dist/workflow/validation.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"email-threads.d.ts","names":[],"sources":["../../../src/knowledge/spaces/email-threads.ts"],"sourcesContent":[],"mappings":";;;cAGa,4BAA4B;iBA+BzB,kCAAA,WACJ,yBACT"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"email-threads.js","names":["emailThreadsKnowledgeSpace: KnowledgeSpaceSpec"],"sources":["../../../src/knowledge/spaces/email-threads.ts"],"sourcesContent":["import { StabilityEnum } from '../../ownership';\nimport type { KnowledgeSpaceRegistry, KnowledgeSpaceSpec } from '../spec';\n\nexport const emailThreadsKnowledgeSpace: KnowledgeSpaceSpec = {\n meta: {\n key: 'knowledge.email-threads',\n version: 1,\n category: 'operational',\n displayName: 'Email Threads',\n title: 'Operational Email Threads',\n description:\n 'Indexed copies of operational email threads used for support, onboarding, and workflows.',\n domain: 'operations',\n owners: ['platform.operations'],\n tags: ['email', 'operations'],\n stability: StabilityEnum.Beta,\n },\n retention: {\n ttlDays: 365,\n },\n access: {\n policy: { name: 'knowledge.access.email-threads', version: 1 },\n trustLevel: 'medium',\n automationWritable: true,\n },\n indexing: {\n embeddingModel: 'mistral-embed',\n chunkSize: 600,\n vectorDbIntegration: 'vectordb.qdrant',\n },\n description:\n 'Operational email threads synchronized from Gmail to support automations and contextual assistance.',\n};\n\nexport function registerEmailThreadsKnowledgeSpace(\n registry: KnowledgeSpaceRegistry\n): KnowledgeSpaceRegistry {\n return registry.register(emailThreadsKnowledgeSpace);\n}\n"],"mappings":";;;AAGA,MAAaA,6BAAiD;CAC5D,MAAM;EACJ,KAAK;EACL,SAAS;EACT,UAAU;EACV,aAAa;EACb,OAAO;EACP,aACE;EACF,QAAQ;EACR,QAAQ,CAAC,sBAAsB;EAC/B,MAAM,CAAC,SAAS,aAAa;EAC7B,WAAW,cAAc;EAC1B;CACD,WAAW,EACT,SAAS,KACV;CACD,QAAQ;EACN,QAAQ;GAAE,MAAM;GAAkC,SAAS;GAAG;EAC9D,YAAY;EACZ,oBAAoB;EACrB;CACD,UAAU;EACR,gBAAgB;EAChB,WAAW;EACX,qBAAqB;EACtB;CACD,aACE;CACH;AAED,SAAgB,mCACd,UACwB;AACxB,QAAO,SAAS,SAAS,2BAA2B"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"financial-docs.d.ts","names":[],"sources":["../../../src/knowledge/spaces/financial-docs.ts"],"sourcesContent":[],"mappings":";;;cAGa,6BAA6B;iBA+B1B,mCAAA,WACJ,yBACT"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"financial-docs.js","names":["financialDocsKnowledgeSpace: KnowledgeSpaceSpec"],"sources":["../../../src/knowledge/spaces/financial-docs.ts"],"sourcesContent":["import { StabilityEnum } from '../../ownership';\nimport type { KnowledgeSpaceRegistry, KnowledgeSpaceSpec } from '../spec';\n\nexport const financialDocsKnowledgeSpace: KnowledgeSpaceSpec = {\n meta: {\n key: 'knowledge.financial-docs',\n version: 1,\n category: 'canonical',\n displayName: 'Financial Documents',\n title: 'Household Financial Documents',\n description:\n 'Invoices, bills, and contracts powering Pocket Family Office financial automation.',\n domain: 'finance',\n owners: ['platform.finance'],\n tags: ['finance', 'documents'],\n stability: StabilityEnum.Beta,\n },\n retention: {\n ttlDays: null,\n },\n access: {\n policy: { name: 'knowledge.access.financial-docs', version: 1 },\n trustLevel: 'high',\n automationWritable: true,\n },\n indexing: {\n embeddingModel: 'mistral-embed',\n chunkSize: 700,\n vectorDbIntegration: 'vectordb.qdrant',\n },\n description:\n 'Normalized financial documents enabling bill pay automation, reminders, and summaries.',\n};\n\nexport function registerFinancialDocsKnowledgeSpace(\n registry: KnowledgeSpaceRegistry\n): KnowledgeSpaceRegistry {\n return registry.register(financialDocsKnowledgeSpace);\n}\n"],"mappings":";;;AAGA,MAAaA,8BAAkD;CAC7D,MAAM;EACJ,KAAK;EACL,SAAS;EACT,UAAU;EACV,aAAa;EACb,OAAO;EACP,aACE;EACF,QAAQ;EACR,QAAQ,CAAC,mBAAmB;EAC5B,MAAM,CAAC,WAAW,YAAY;EAC9B,WAAW,cAAc;EAC1B;CACD,WAAW,EACT,SAAS,MACV;CACD,QAAQ;EACN,QAAQ;GAAE,MAAM;GAAmC,SAAS;GAAG;EAC/D,YAAY;EACZ,oBAAoB;EACrB;CACD,UAAU;EACR,gBAAgB;EAChB,WAAW;EACX,qBAAqB;EACtB;CACD,aACE;CACH;AAED,SAAgB,oCACd,UACwB;AACxB,QAAO,SAAS,SAAS,4BAA4B"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"financial-overview.d.ts","names":[],"sources":["../../../src/knowledge/spaces/financial-overview.ts"],"sourcesContent":[],"mappings":";;;cAGa,iCAAiC;iBA+B9B,uCAAA,WACJ,yBACT"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"financial-overview.js","names":["financialOverviewKnowledgeSpace: KnowledgeSpaceSpec"],"sources":["../../../src/knowledge/spaces/financial-overview.ts"],"sourcesContent":["import { StabilityEnum } from '../../ownership';\nimport type { KnowledgeSpaceRegistry, KnowledgeSpaceSpec } from '../spec';\n\nexport const financialOverviewKnowledgeSpace: KnowledgeSpaceSpec = {\n meta: {\n key: 'knowledge.financial-overview',\n version: 1,\n category: 'operational',\n displayName: 'Financial Overview Summaries',\n title: 'Derived Financial Summaries',\n description:\n 'Aggregated cashflow summaries, category breakdowns, and balance trends derived from open banking data.',\n domain: 'finance',\n owners: ['platform.finance'],\n tags: ['open-banking', 'summaries', 'cashflow'],\n stability: StabilityEnum.Experimental,\n },\n retention: {\n ttlDays: 180,\n },\n access: {\n policy: { name: 'knowledge.access.financial-overview', version: 1 },\n trustLevel: 'medium',\n automationWritable: true,\n },\n indexing: {\n embeddingModel: 'mistral-embed',\n chunkSize: 600,\n vectorDbIntegration: 'vectordb.qdrant',\n },\n description:\n 'Derived knowledge space containing weekly/monthly cashflow rollups and account health summaries. Raw transactions are excluded to respect privacy guardrails.',\n};\n\nexport function registerFinancialOverviewKnowledgeSpace(\n registry: KnowledgeSpaceRegistry\n): KnowledgeSpaceRegistry {\n return registry.register(financialOverviewKnowledgeSpace);\n}\n"],"mappings":";;;AAGA,MAAaA,kCAAsD;CACjE,MAAM;EACJ,KAAK;EACL,SAAS;EACT,UAAU;EACV,aAAa;EACb,OAAO;EACP,aACE;EACF,QAAQ;EACR,QAAQ,CAAC,mBAAmB;EAC5B,MAAM;GAAC;GAAgB;GAAa;GAAW;EAC/C,WAAW,cAAc;EAC1B;CACD,WAAW,EACT,SAAS,KACV;CACD,QAAQ;EACN,QAAQ;GAAE,MAAM;GAAuC,SAAS;GAAG;EACnE,YAAY;EACZ,oBAAoB;EACrB;CACD,UAAU;EACR,gBAAgB;EAChB,WAAW;EACX,qBAAqB;EACtB;CACD,aACE;CACH;AAED,SAAgB,wCACd,UACwB;AACxB,QAAO,SAAS,SAAS,gCAAgC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"product-canon.d.ts","names":[],"sources":["../../../src/knowledge/spaces/product-canon.ts"],"sourcesContent":[],"mappings":";;;cAGa,4BAA4B;iBA+BzB,kCAAA,WACJ,yBACT"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"product-canon.js","names":["productCanonKnowledgeSpace: KnowledgeSpaceSpec"],"sources":["../../../src/knowledge/spaces/product-canon.ts"],"sourcesContent":["import { StabilityEnum } from '../../ownership';\nimport type { KnowledgeSpaceRegistry, KnowledgeSpaceSpec } from '../spec';\n\nexport const productCanonKnowledgeSpace: KnowledgeSpaceSpec = {\n meta: {\n key: 'knowledge.product-canon',\n version: 1,\n category: 'canonical',\n displayName: 'Product Canon',\n title: 'Product Canon Knowledge Space',\n description:\n 'Authoritative product knowledge covering strategy, roadmap, and delivery canon.',\n domain: 'product',\n owners: ['platform.product'],\n tags: ['knowledge', 'product'],\n stability: StabilityEnum.Stable,\n },\n retention: {\n ttlDays: null,\n },\n access: {\n policy: { name: 'knowledge.access.product-canon', version: 1 },\n trustLevel: 'high',\n automationWritable: false,\n },\n indexing: {\n embeddingModel: 'text-embedding-3-large',\n chunkSize: 800,\n vectorDbIntegration: 'vectordb.qdrant',\n },\n description:\n 'Single source of truth for product canon, principles, and strategic narratives.',\n};\n\nexport function registerProductCanonKnowledgeSpace(\n registry: KnowledgeSpaceRegistry\n): KnowledgeSpaceRegistry {\n return registry.register(productCanonKnowledgeSpace);\n}\n"],"mappings":";;;AAGA,MAAaA,6BAAiD;CAC5D,MAAM;EACJ,KAAK;EACL,SAAS;EACT,UAAU;EACV,aAAa;EACb,OAAO;EACP,aACE;EACF,QAAQ;EACR,QAAQ,CAAC,mBAAmB;EAC5B,MAAM,CAAC,aAAa,UAAU;EAC9B,WAAW,cAAc;EAC1B;CACD,WAAW,EACT,SAAS,MACV;CACD,QAAQ;EACN,QAAQ;GAAE,MAAM;GAAkC,SAAS;GAAG;EAC9D,YAAY;EACZ,oBAAoB;EACrB;CACD,UAAU;EACR,gBAAgB;EAChB,WAAW;EACX,qBAAqB;EACtB;CACD,aACE;CACH;AAED,SAAgB,mCACd,UACwB;AACxB,QAAO,SAAS,SAAS,2BAA2B"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"support-faq.d.ts","names":[],"sources":["../../../src/knowledge/spaces/support-faq.ts"],"sourcesContent":[],"mappings":";;;cAGa,0BAA0B;iBA+BvB,gCAAA,WACJ,yBACT"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"support-faq.js","names":["supportFaqKnowledgeSpace: KnowledgeSpaceSpec"],"sources":["../../../src/knowledge/spaces/support-faq.ts"],"sourcesContent":["import { StabilityEnum } from '../../ownership';\nimport type { KnowledgeSpaceRegistry, KnowledgeSpaceSpec } from '../spec';\n\nexport const supportFaqKnowledgeSpace: KnowledgeSpaceSpec = {\n meta: {\n key: 'knowledge.support-faq',\n version: 1,\n category: 'operational',\n displayName: 'Support FAQ',\n title: 'Support & Success FAQ',\n description: 'Operational knowledge base for customer support and success.',\n domain: 'support',\n owners: ['platform.support'],\n tags: ['knowledge', 'support'],\n stability: StabilityEnum.Beta,\n },\n retention: {\n ttlDays: 365,\n archiveAfterDays: 180,\n },\n access: {\n policy: { name: 'knowledge.access.support', version: 1 },\n trustLevel: 'medium',\n automationWritable: true,\n },\n indexing: {\n embeddingModel: 'text-embedding-3-small',\n chunkSize: 700,\n vectorDbIntegration: 'vectordb.qdrant',\n },\n description:\n 'Operational FAQs, runbooks, and customer success playbooks augmented with automation updates.',\n};\n\nexport function registerSupportFaqKnowledgeSpace(\n registry: KnowledgeSpaceRegistry\n): KnowledgeSpaceRegistry {\n return registry.register(supportFaqKnowledgeSpace);\n}\n"],"mappings":";;;AAGA,MAAaA,2BAA+C;CAC1D,MAAM;EACJ,KAAK;EACL,SAAS;EACT,UAAU;EACV,aAAa;EACb,OAAO;EACP,aAAa;EACb,QAAQ;EACR,QAAQ,CAAC,mBAAmB;EAC5B,MAAM,CAAC,aAAa,UAAU;EAC9B,WAAW,cAAc;EAC1B;CACD,WAAW;EACT,SAAS;EACT,kBAAkB;EACnB;CACD,QAAQ;EACN,QAAQ;GAAE,MAAM;GAA4B,SAAS;GAAG;EACxD,YAAY;EACZ,oBAAoB;EACrB;CACD,UAAU;EACR,gBAAgB;EAChB,WAAW;EACX,qBAAqB;EACtB;CACD,aACE;CACH;AAED,SAAgB,iCACd,UACwB;AACxB,QAAO,SAAS,SAAS,yBAAyB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"uploaded-docs.d.ts","names":[],"sources":["../../../src/knowledge/spaces/uploaded-docs.ts"],"sourcesContent":[],"mappings":";;;cAGa,4BAA4B;iBA+BzB,kCAAA,WACJ,yBACT"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"uploaded-docs.js","names":["uploadedDocsKnowledgeSpace: KnowledgeSpaceSpec"],"sources":["../../../src/knowledge/spaces/uploaded-docs.ts"],"sourcesContent":["import { StabilityEnum } from '../../ownership';\nimport type { KnowledgeSpaceRegistry, KnowledgeSpaceSpec } from '../spec';\n\nexport const uploadedDocsKnowledgeSpace: KnowledgeSpaceSpec = {\n meta: {\n key: 'knowledge.uploaded-docs',\n version: 1,\n category: 'external',\n displayName: 'Uploaded Documents',\n title: 'Uploaded Knowledge Assets',\n description:\n 'Documents uploaded by households, including invoices, contracts, and reference files.',\n domain: 'operations',\n owners: ['platform.operations'],\n tags: ['documents', 'storage'],\n stability: StabilityEnum.Beta,\n },\n retention: {\n ttlDays: null,\n },\n access: {\n policy: { name: 'knowledge.access.uploaded-docs', version: 1 },\n trustLevel: 'medium',\n automationWritable: true,\n },\n indexing: {\n embeddingModel: 'mistral-embed',\n chunkSize: 900,\n vectorDbIntegration: 'vectordb.qdrant',\n },\n description:\n 'User-provided documents normalized and embedded for retrieval augmented workflows.',\n};\n\nexport function registerUploadedDocsKnowledgeSpace(\n registry: KnowledgeSpaceRegistry\n): KnowledgeSpaceRegistry {\n return registry.register(uploadedDocsKnowledgeSpace);\n}\n"],"mappings":";;;AAGA,MAAaA,6BAAiD;CAC5D,MAAM;EACJ,KAAK;EACL,SAAS;EACT,UAAU;EACV,aAAa;EACb,OAAO;EACP,aACE;EACF,QAAQ;EACR,QAAQ,CAAC,sBAAsB;EAC/B,MAAM,CAAC,aAAa,UAAU;EAC9B,WAAW,cAAc;EAC1B;CACD,WAAW,EACT,SAAS,MACV;CACD,QAAQ;EACN,QAAQ;GAAE,MAAM;GAAkC,SAAS;GAAG;EAC9D,YAAY;EACZ,oBAAoB;EACrB;CACD,UAAU;EACR,gBAAgB;EAChB,WAAW;EACX,qBAAqB;EACtB;CACD,aACE;CACH;AAED,SAAgB,mCACd,UACwB;AACxB,QAAO,SAAS,SAAS,2BAA2B"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"spec.d.ts","names":[],"sources":["../../src/knowledge/spec.ts"],"sourcesContent":[],"mappings":";;;;KAGY,iBAAA;UAMK,kBAAA,SAA2B;EANhC;EAMK,GAAA,EAAA,MAAA;EAQA,OAAA,EAAA,MAAA;EAOA,QAAA,EAXL,iBAW0B;EASrB,WAAA,EAAA,MAAA;AAMjB;AACQ,UAvBS,wBAAA,CAuBT;EAEK;EAEH,OAAA,CAAA,EAAA,MAAA,GAAA,IAAA;EAEG;EAAuB,gBAAA,CAAA,EAAA,MAAA;AAQpC;AAGiB,UAjCA,qBAAA,CAiCA;EASP;EAI4B,MAAA,CAAA,EA5C3B,SA4C2B;EAgBZ;EAAoB,UAAA,EAAA,MAAA,GAAA,QAAA,GAAA,KAAA;EAAkB;EAKhD,kBAAA,EAAA,OAAqB;;UA1DpB,uBAAA;;;;;UAMA,kBAAA;QACT;;aAEK;;UAEH;;aAEG;;;;cAQA,sBAAA;;iBAGI;UASP;sCAI4B;0BAgBZ,oBAAoB;;iBAK9B,qBAAA,OAA4B"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"spec.js","names":["latest: KnowledgeSpaceSpec | undefined"],"sources":["../../src/knowledge/spec.ts"],"sourcesContent":["import type { OwnerShipMeta } from '../ownership';\nimport type { PolicyRef } from '../policy/spec';\n\nexport type KnowledgeCategory =\n | 'canonical' // Ground truth - product specs, schemas, official policies\n | 'operational' // Internal docs - support tickets, runbooks, sales materials\n | 'external' // Third-party - PSP docs, regulations, integration guides\n | 'ephemeral'; // Temporary - agent scratchpads, session context, drafts\n\nexport interface KnowledgeSpaceMeta extends OwnerShipMeta {\n /** Stable space identifier (e.g., \"product-canon\", \"support-faq\"). */\n key: string;\n version: number;\n category: KnowledgeCategory;\n displayName: string;\n}\n\nexport interface KnowledgeRetentionPolicy {\n /** TTL in days (null = indefinite). */\n ttlDays?: number | null;\n /** Auto-archive after inactivity. */\n archiveAfterDays?: number;\n}\n\nexport interface KnowledgeAccessPolicy {\n /** Which PolicySpec governs access. */\n policy?: PolicyRef;\n /** Trust level for agent/workflow consumption. */\n trustLevel: 'high' | 'medium' | 'low';\n /** Can this space be mutated by automation? */\n automationWritable: boolean;\n}\n\nexport interface KnowledgeIndexingConfig {\n embeddingModel?: string;\n chunkSize?: number;\n vectorDbIntegration?: string;\n}\n\nexport interface KnowledgeSpaceSpec {\n meta: KnowledgeSpaceMeta;\n /** Retention and cleanup rules. */\n retention: KnowledgeRetentionPolicy;\n /** Access control and trust. */\n access: KnowledgeAccessPolicy;\n /** Optional embedding/indexing config. */\n indexing?: KnowledgeIndexingConfig;\n /** Documentation. */\n description?: string;\n}\n\nconst knowledgeKey = (meta: Pick<KnowledgeSpaceMeta, 'key' | 'version'>) =>\n `${meta.key}.v${meta.version}`;\n\nexport class KnowledgeSpaceRegistry {\n private readonly items = new Map<string, KnowledgeSpaceSpec>();\n\n register(spec: KnowledgeSpaceSpec): this {\n const key = knowledgeKey(spec.meta);\n if (this.items.has(key)) {\n throw new Error(`Duplicate KnowledgeSpaceSpec ${key}`);\n }\n this.items.set(key, spec);\n return this;\n }\n\n list(): KnowledgeSpaceSpec[] {\n return [...this.items.values()];\n }\n\n get(key: string, version?: number): KnowledgeSpaceSpec | undefined {\n if (version != null) {\n return this.items.get(knowledgeKey({ key, version }));\n }\n let latest: KnowledgeSpaceSpec | undefined;\n let maxVersion = -Infinity;\n for (const spec of this.items.values()) {\n if (spec.meta.key !== key) continue;\n if (spec.meta.version > maxVersion) {\n maxVersion = spec.meta.version;\n latest = spec;\n }\n }\n return latest;\n }\n\n getByCategory(category: KnowledgeCategory): KnowledgeSpaceSpec[] {\n return this.list().filter((spec) => spec.meta.category === category);\n }\n}\n\nexport function makeKnowledgeSpaceKey(meta: KnowledgeSpaceMeta) {\n return knowledgeKey(meta);\n}\n"],"mappings":";AAmDA,MAAM,gBAAgB,SACpB,GAAG,KAAK,IAAI,IAAI,KAAK;AAEvB,IAAa,yBAAb,MAAoC;CAClC,AAAiB,wBAAQ,IAAI,KAAiC;CAE9D,SAAS,MAAgC;EACvC,MAAM,MAAM,aAAa,KAAK,KAAK;AACnC,MAAI,KAAK,MAAM,IAAI,IAAI,CACrB,OAAM,IAAI,MAAM,gCAAgC,MAAM;AAExD,OAAK,MAAM,IAAI,KAAK,KAAK;AACzB,SAAO;;CAGT,OAA6B;AAC3B,SAAO,CAAC,GAAG,KAAK,MAAM,QAAQ,CAAC;;CAGjC,IAAI,KAAa,SAAkD;AACjE,MAAI,WAAW,KACb,QAAO,KAAK,MAAM,IAAI,aAAa;GAAE;GAAK;GAAS,CAAC,CAAC;EAEvD,IAAIA;EACJ,IAAI,aAAa;AACjB,OAAK,MAAM,QAAQ,KAAK,MAAM,QAAQ,EAAE;AACtC,OAAI,KAAK,KAAK,QAAQ,IAAK;AAC3B,OAAI,KAAK,KAAK,UAAU,YAAY;AAClC,iBAAa,KAAK,KAAK;AACvB,aAAS;;;AAGb,SAAO;;CAGT,cAAc,UAAmD;AAC/D,SAAO,KAAK,MAAM,CAAC,QAAQ,SAAS,KAAK,KAAK,aAAa,SAAS;;;AAIxE,SAAgB,sBAAsB,MAA0B;AAC9D,QAAO,aAAa,KAAK"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"exporters.d.ts","names":[],"sources":["../../src/llm/exporters.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;;;;;AAkSA;AA8IA;;AAGY,iBAtYI,qBAAA,CAsYJ,IAAA,EAtYgC,eAsYhC,CAAA,EAAA,MAAA;;;;;AA+HZ;AA2DgB,iBAjhBA,kBAAA,CAihBiC,IAAA,EAhhBzC,eAghBwC,EAAA,OAAA,CAAA,EA/gBrC,OA+gBqC,CA/gB7B,iBA+gB6B,CAAA,CAAA,EAAA,MAAA;AAsChD;AA0CA;;;;AAGG,iBA9Za,iBAAA,CA8Zb,IAAA,EA7ZK,eA6ZL,EAAA,OAkCQ,CAlCR,EAAA;EAAgB,QAAA,CAAA,EAAA,WAAA,GAAA,MAAA,GAAA,UAAA,GAAA,QAAA;EAiCH,YAAA,CAAA,EAAA,MAAa;CAClB,CAAA,EAAA,MAAA;;;;;AAMR,iBAxTa,iBAAA,CAwTb,OAAA,EAvTQ,iBAuTR,EAAA,KAAA,EAAA;EAAmB,KAAA,CAAA,EArTV,YAqTU;kBApTF;aAET,QAAQ;;;;iBA4HH,sBAAA,eACA;;;;iBA0DA,eAAA,QAAuB,UAAU;;;;iBAsCjC,kBAAA,MAAwB;;;;;iBA0CxB,UAAA,OACR,2BACG,QAAQ,qBAChB;;;;iBAiCa,aAAA,UACL;UAEC;kBACQ;aAET,QAAQ,wBAChB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"exporters.js","names":["DEFAULT_SPEC_OPTIONS: SpecExportOptions","DEFAULT_FEATURE_OPTIONS: FeatureExportOptions","lines: string[]","markdown: string"],"sources":["../../src/llm/exporters.ts"],"sourcesContent":["/**\n * LLM Export Functions\n *\n * Provides multi-format markdown export for specs, features, presentations,\n * and other ContractSpec artifacts for LLM consumption.\n */\n\nimport type { AnyContractSpec } from '../spec';\nimport { isEmitDeclRef } from '../spec';\nimport type { FeatureModuleSpec } from '../features';\nimport type { PresentationDescriptorV2 } from '../presentations.v2';\nimport type { EventSpec } from '../events';\nimport type { AnySchemaModel } from '@lssm/lib.schema';\nimport type { DocBlock } from '../docs/types';\nimport type { SpecRegistry } from '../registry';\nimport type { PresentationRegistry } from '../presentations';\nimport { jsonSchemaForSpec } from '../jsonschema';\nimport type {\n SpecExportOptions,\n FeatureExportOptions,\n SpecExportResult,\n FeatureExportResult,\n} from './types';\n\nconst DEFAULT_SPEC_OPTIONS: SpecExportOptions = {\n format: 'full',\n includeSchemas: true,\n includeScenarios: true,\n includeExamples: true,\n includePolicy: true,\n includeSideEffects: true,\n};\n\nconst DEFAULT_FEATURE_OPTIONS: FeatureExportOptions = {\n ...DEFAULT_SPEC_OPTIONS,\n includeRelatedSpecs: true,\n includeRelatedEvents: true,\n includeRelatedPresentations: true,\n};\n\n/**\n * Export a single spec to context-focused markdown.\n * Includes: goal, context, description, acceptance scenarios.\n * Best for: Understanding what the spec does, providing context to LLMs.\n */\nexport function specToContextMarkdown(spec: AnyContractSpec): string {\n const m = spec.meta;\n const lines: string[] = [];\n\n lines.push(`# ${m.name} (v${m.version})`);\n lines.push('');\n lines.push(`> ${m.description}`);\n lines.push('');\n lines.push(`**Type:** ${m.kind} | **Stability:** ${m.stability}`);\n lines.push('');\n\n lines.push('## Goal');\n lines.push('');\n lines.push(m.goal);\n lines.push('');\n\n lines.push('## Context');\n lines.push('');\n lines.push(m.context);\n lines.push('');\n\n if (spec.acceptance?.scenarios?.length) {\n lines.push('## Acceptance Criteria');\n lines.push('');\n for (const s of spec.acceptance.scenarios) {\n lines.push(`### ${s.name}`);\n lines.push('');\n lines.push('**Given:**');\n for (const g of s.given) lines.push(`- ${g}`);\n lines.push('');\n lines.push('**When:**');\n for (const w of s.when) lines.push(`- ${w}`);\n lines.push('');\n lines.push('**Then:**');\n for (const t of s.then) lines.push(`- ${t}`);\n lines.push('');\n }\n }\n\n return lines.join('\\n');\n}\n\n/**\n * Export a single spec to full markdown with all details.\n * Includes: all fields, I/O schemas, policy, events, examples.\n * Best for: Complete documentation, implementation reference.\n */\nexport function specToFullMarkdown(\n spec: AnyContractSpec,\n options: Partial<SpecExportOptions> = {}\n): string {\n const opts = { ...DEFAULT_SPEC_OPTIONS, ...options };\n const m = spec.meta;\n const lines: string[] = [];\n\n // Header\n lines.push(`# ${m.name}.v${m.version}`);\n lines.push('');\n lines.push(`> ${m.description}`);\n lines.push('');\n\n // Metadata table\n lines.push('## Metadata');\n lines.push('');\n lines.push('| Field | Value |');\n lines.push('|-------|-------|');\n lines.push(`| Kind | ${m.kind} |`);\n lines.push(`| Stability | ${m.stability} |`);\n lines.push(`| Owners | ${m.owners.join(', ')} |`);\n lines.push(`| Tags | ${m.tags.join(', ')} |`);\n lines.push('');\n\n // Goal & Context\n lines.push('## Goal');\n lines.push('');\n lines.push(m.goal);\n lines.push('');\n\n lines.push('## Context');\n lines.push('');\n lines.push(m.context);\n lines.push('');\n\n // I/O Schemas\n if (opts.includeSchemas) {\n lines.push('## Input/Output');\n lines.push('');\n\n if (spec.io.input) {\n lines.push('### Input Schema');\n lines.push('');\n lines.push('```json');\n try {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const schema = jsonSchemaForSpec(spec as any) as any;\n lines.push(JSON.stringify(schema.input ?? {}, null, 2));\n } catch {\n lines.push('// Schema generation not available');\n }\n lines.push('```');\n lines.push('');\n }\n\n lines.push('### Output Schema');\n lines.push('');\n lines.push('```json');\n try {\n const schema = jsonSchemaForSpec(spec as any) as any;\n lines.push(JSON.stringify(schema.output ?? {}, null, 2));\n } catch {\n lines.push('// Schema generation not available');\n }\n lines.push('```');\n lines.push('');\n\n // Errors\n if (spec.io.errors && Object.keys(spec.io.errors).length) {\n lines.push('### Error Codes');\n lines.push('');\n lines.push('| Code | HTTP | Description | When |');\n lines.push('|------|------|-------------|------|');\n for (const [code, err] of Object.entries(spec.io.errors)) {\n lines.push(\n `| \\`${code}\\` | ${err.http ?? 400} | ${err.description} | ${err.when} |`\n );\n }\n lines.push('');\n }\n }\n\n // Policy\n if (opts.includePolicy) {\n lines.push('## Policy');\n lines.push('');\n lines.push(`- **Auth Required:** ${spec.policy.auth}`);\n lines.push(\n `- **Idempotent:** ${spec.policy.idempotent ?? m.kind === 'query'}`\n );\n if (spec.policy.rateLimit) {\n lines.push(\n `- **Rate Limit:** ${spec.policy.rateLimit.rpm} rpm per ${spec.policy.rateLimit.key}`\n );\n }\n if (spec.policy.flags?.length) {\n lines.push(`- **Feature Flags:** ${spec.policy.flags.join(', ')}`);\n }\n if (spec.policy.pii?.length) {\n lines.push(`- **PII Fields:** ${spec.policy.pii.join(', ')}`);\n }\n if (spec.policy.escalate) {\n lines.push(`- **Escalation:** ${spec.policy.escalate}`);\n }\n lines.push('');\n }\n\n // Side Effects\n if (opts.includeSideEffects && spec.sideEffects) {\n if (spec.sideEffects.emits?.length) {\n lines.push('## Events Emitted');\n lines.push('');\n for (const e of spec.sideEffects.emits) {\n if (isEmitDeclRef(e)) {\n lines.push(`- \\`${e.ref.name}.v${e.ref.version}\\` — ${e.when}`);\n } else {\n lines.push(`- \\`${e.name}.v${e.version}\\` — ${e.when}`);\n }\n }\n lines.push('');\n }\n\n if (spec.sideEffects.analytics?.length) {\n lines.push('## Analytics Events');\n lines.push('');\n for (const a of spec.sideEffects.analytics) {\n lines.push(`- ${a}`);\n }\n lines.push('');\n }\n }\n\n // Acceptance Scenarios\n if (opts.includeScenarios && spec.acceptance?.scenarios?.length) {\n lines.push('## Acceptance Scenarios');\n lines.push('');\n for (const s of spec.acceptance.scenarios) {\n lines.push(`### ${s.name}`);\n lines.push('');\n lines.push('**Given:**');\n for (const g of s.given) lines.push(`- ${g}`);\n lines.push('');\n lines.push('**When:**');\n for (const w of s.when) lines.push(`- ${w}`);\n lines.push('');\n lines.push('**Then:**');\n for (const t of s.then) lines.push(`- ${t}`);\n lines.push('');\n }\n }\n\n // Examples\n if (opts.includeExamples && spec.acceptance?.examples?.length) {\n lines.push('## Examples');\n lines.push('');\n for (const ex of spec.acceptance.examples) {\n lines.push(`### ${ex.name}`);\n lines.push('');\n lines.push('**Input:**');\n lines.push('```json');\n lines.push(JSON.stringify(ex.input, null, 2));\n lines.push('```');\n lines.push('');\n lines.push('**Output:**');\n lines.push('```json');\n lines.push(JSON.stringify(ex.output, null, 2));\n lines.push('```');\n lines.push('');\n }\n }\n\n // Transport hints\n if (spec.transport) {\n lines.push('## Transport Configuration');\n lines.push('');\n if (spec.transport.rest) {\n lines.push(\n `- **REST:** ${spec.transport.rest.method ?? 'POST'} ${spec.transport.rest.path ?? 'auto'}`\n );\n }\n if (spec.transport.gql) {\n lines.push(`- **GraphQL:** ${spec.transport.gql.field ?? 'auto'}`);\n }\n if (spec.transport.mcp) {\n lines.push(`- **MCP Tool:** ${spec.transport.mcp.toolName ?? 'auto'}`);\n }\n lines.push('');\n }\n\n return lines.join('\\n');\n}\n\n/**\n * Export a single spec as an actionable agent prompt.\n * Includes: instructions, full spec, expected output format.\n * Best for: Directly feeding to coding agents for implementation.\n */\nexport function specToAgentPrompt(\n spec: AnyContractSpec,\n options?: {\n taskType?: 'implement' | 'test' | 'refactor' | 'review';\n existingCode?: string;\n }\n): string {\n const taskType = options?.taskType ?? 'implement';\n const m = spec.meta;\n const lines: string[] = [];\n\n // Task header\n const taskVerb = {\n implement: 'Implement',\n test: 'Write tests for',\n refactor: 'Refactor',\n review: 'Review',\n }[taskType];\n\n lines.push(`# Task: ${taskVerb} ${m.name}.v${m.version}`);\n lines.push('');\n\n // Context\n lines.push('## Context');\n lines.push('');\n lines.push(\n `You are working on a ContractSpec-driven codebase. This spec defines a ${m.kind} operation.`\n );\n lines.push('');\n lines.push(`**Goal:** ${m.goal}`);\n lines.push('');\n lines.push(`**Background:** ${m.context}`);\n lines.push('');\n\n // Full spec\n lines.push('## Specification');\n lines.push('');\n lines.push(specToFullMarkdown(spec));\n lines.push('');\n\n // Task-specific instructions\n lines.push('## Instructions');\n lines.push('');\n\n if (taskType === 'implement') {\n lines.push('Implement this specification following these requirements:');\n lines.push('');\n lines.push(\n '1. **Type Safety**: Use TypeScript with strict typing. No `any` types.'\n );\n lines.push(\n '2. **Input Validation**: Validate input against the schema before processing.'\n );\n lines.push(\n '3. **Error Handling**: Implement all error cases defined in the spec.'\n );\n lines.push('4. **Events**: Emit events as specified in sideEffects.emits.');\n lines.push('5. **Policy**: Respect auth, rate limits, and feature flags.');\n lines.push(\n '6. **Idempotency**: ' +\n (spec.policy.idempotent\n ? 'This operation MUST be idempotent.'\n : 'This operation may have side effects.')\n );\n lines.push('');\n\n if (spec.policy.pii?.length) {\n lines.push(\n '**PII Handling**: The following fields contain PII and must be handled carefully:'\n );\n for (const field of spec.policy.pii) {\n lines.push(`- ${field}`);\n }\n lines.push('');\n }\n } else if (taskType === 'test') {\n lines.push('Write comprehensive tests for this specification:');\n lines.push('');\n lines.push('1. Test all acceptance scenarios defined in the spec.');\n lines.push('2. Test all error cases with appropriate assertions.');\n lines.push('3. Test edge cases and boundary conditions.');\n lines.push('4. Verify events are emitted correctly.');\n lines.push(\n '5. Use descriptive test names following the pattern: \"should [behavior] when [condition]\"'\n );\n lines.push('');\n } else if (taskType === 'refactor') {\n lines.push('Refactor this implementation while preserving all behavior:');\n lines.push('');\n lines.push('1. Maintain compliance with the specification.');\n lines.push('2. Improve code clarity and maintainability.');\n lines.push('3. Reduce complexity where possible.');\n lines.push('4. Ensure all existing tests still pass.');\n lines.push('');\n } else if (taskType === 'review') {\n lines.push('Review this implementation against the specification:');\n lines.push('');\n lines.push('1. Verify input/output types match the schema.');\n lines.push('2. Check all error cases are handled.');\n lines.push('3. Verify events are emitted as specified.');\n lines.push('4. Check policy compliance (auth, rate limits).');\n lines.push('5. Report any deviations from the spec.');\n lines.push('');\n }\n\n // Existing code if provided\n if (options?.existingCode) {\n lines.push('## Existing Code');\n lines.push('');\n lines.push('```typescript');\n lines.push(options.existingCode);\n lines.push('```');\n lines.push('');\n }\n\n // Expected output format\n lines.push('## Expected Output');\n lines.push('');\n if (taskType === 'implement' || taskType === 'refactor') {\n lines.push('Provide a complete TypeScript implementation. Include:');\n lines.push('- Type definitions for input/output');\n lines.push('- Handler function with proper error handling');\n lines.push('- JSDoc comments explaining the implementation');\n } else if (taskType === 'test') {\n lines.push(\n 'Provide a complete test file using the testing framework available (prefer Vitest).'\n );\n } else if (taskType === 'review') {\n lines.push('Provide a structured review with:');\n lines.push('- Compliance status (pass/fail for each requirement)');\n lines.push('- Issues found with severity (error/warning/info)');\n lines.push('- Suggestions for improvement');\n }\n lines.push('');\n\n return lines.join('\\n');\n}\n\n/**\n * Export a feature module to markdown.\n * Includes all related specs, events, and presentations.\n */\nexport function featureToMarkdown(\n feature: FeatureModuleSpec,\n deps?: {\n specs?: SpecRegistry;\n presentations?: PresentationRegistry;\n },\n options: Partial<FeatureExportOptions> = {}\n): string {\n const opts = { ...DEFAULT_FEATURE_OPTIONS, ...options };\n const m = feature.meta;\n const lines: string[] = [];\n\n // Header\n lines.push(`# Feature: ${m.title ?? m.key}`);\n lines.push('');\n if (m.description) {\n lines.push(`> ${m.description}`);\n lines.push('');\n }\n\n // Metadata\n lines.push('## Overview');\n lines.push('');\n lines.push(`- **Key:** \\`${m.key}\\``);\n lines.push(`- **Stability:** ${m.stability}`);\n lines.push(`- **Owners:** ${m.owners.join(', ')}`);\n if (m.tags?.length) {\n lines.push(`- **Tags:** ${m.tags.join(', ')}`);\n }\n lines.push('');\n\n // Operations summary\n if (feature.operations?.length) {\n lines.push('## Operations');\n lines.push('');\n lines.push('| Name | Version | Type |');\n lines.push('|------|---------|------|');\n for (const op of feature.operations) {\n const spec = deps?.specs?.getSpec(op.name, op.version);\n const kind = spec?.meta.kind ?? 'unknown';\n lines.push(`| ${op.name} | v${op.version} | ${kind} |`);\n }\n lines.push('');\n\n // Include full specs if requested\n if (opts.includeRelatedSpecs && deps?.specs) {\n lines.push('### Operation Details');\n lines.push('');\n for (const op of feature.operations) {\n const spec = deps.specs.getSpec(op.name, op.version);\n if (spec) {\n lines.push(`---`);\n lines.push('');\n lines.push(specToFullMarkdown(spec, opts));\n }\n }\n }\n }\n\n // Events summary\n if (feature.events?.length) {\n lines.push('## Events');\n lines.push('');\n lines.push('| Name | Version |');\n lines.push('|------|---------|');\n for (const evt of feature.events) {\n lines.push(`| ${evt.name} | v${evt.version} |`);\n }\n lines.push('');\n }\n\n // Presentations summary\n if (feature.presentations?.length) {\n lines.push('## Presentations');\n lines.push('');\n lines.push('| Name | Version |');\n lines.push('|------|---------|');\n for (const pres of feature.presentations) {\n lines.push(`| ${pres.name} | v${pres.version} |`);\n }\n lines.push('');\n\n // Include full presentations if requested\n if (opts.includeRelatedPresentations && deps?.presentations) {\n lines.push('### Presentation Details');\n lines.push('');\n for (const pres of feature.presentations) {\n const p = deps.presentations.get(pres.name, pres.version);\n if (p) {\n lines.push(`#### ${pres.name}.v${pres.version}`);\n lines.push('');\n lines.push(`- **Kind:** ${(p.content as any).kind ?? 'unknown'}`);\n if ('componentKey' in p.content) {\n lines.push(`- **Component:** ${(p.content as any).componentKey}`);\n }\n lines.push('');\n }\n }\n }\n }\n\n // Capabilities\n if (feature.capabilities) {\n if (feature.capabilities.provides?.length) {\n lines.push('## Capabilities Provided');\n lines.push('');\n for (const cap of feature.capabilities.provides) {\n lines.push(`- \\`${cap.key}.v${cap.version}\\``);\n }\n lines.push('');\n }\n\n if (feature.capabilities.requires?.length) {\n lines.push('## Capabilities Required');\n lines.push('');\n for (const cap of feature.capabilities.requires) {\n lines.push(\n `- \\`${cap.key}\\`${cap.version ? `.v${cap.version}` : ''} (${cap.optional ? 'optional' : 'required'})`\n );\n }\n lines.push('');\n }\n }\n\n return lines.join('\\n');\n}\n\n/**\n * Export a presentation descriptor to markdown.\n */\nexport function presentationToMarkdown(\n presentation: PresentationDescriptorV2\n): string {\n const m = presentation.meta;\n const lines: string[] = [];\n\n lines.push(`# Presentation: ${m.name}.v${m.version}`);\n lines.push('');\n\n if (m.description) {\n lines.push(`> ${m.description}`);\n lines.push('');\n }\n\n lines.push('## Metadata');\n lines.push('');\n lines.push(`- **Name:** ${m.name}`);\n lines.push(`- **Version:** ${m.version}`);\n if (m.stability) lines.push(`- **Stability:** ${m.stability}`);\n if (m.owners?.length) lines.push(`- **Owners:** ${m.owners.join(', ')}`);\n if (m.tags?.length) lines.push(`- **Tags:** ${m.tags.join(', ')}`);\n lines.push('');\n\n lines.push('## Source');\n lines.push('');\n lines.push(`- **Type:** ${presentation.source.type}`);\n if (presentation.source.type === 'component') {\n lines.push(`- **Framework:** ${presentation.source.framework}`);\n lines.push(`- **Component Key:** ${presentation.source.componentKey}`);\n }\n lines.push('');\n\n lines.push('## Supported Targets');\n lines.push('');\n for (const target of presentation.targets) {\n lines.push(`- ${target}`);\n }\n lines.push('');\n\n if (presentation.policy) {\n lines.push('## Policy');\n lines.push('');\n if (presentation.policy.flags?.length) {\n lines.push(\n `- **Feature Flags:** ${presentation.policy.flags.join(', ')}`\n );\n }\n if (presentation.policy.pii?.length) {\n lines.push(`- **PII Fields:** ${presentation.policy.pii.join(', ')}`);\n }\n lines.push('');\n }\n\n return lines.join('\\n');\n}\n\n/**\n * Export an event spec to markdown.\n */\nexport function eventToMarkdown(event: EventSpec<AnySchemaModel>): string {\n const lines: string[] = [];\n\n lines.push(`# Event: ${event.name}.v${event.version}`);\n lines.push('');\n\n lines.push('## Metadata');\n lines.push('');\n lines.push(`- **Name:** ${event.name}`);\n lines.push(`- **Version:** ${event.version}`);\n if (event.description) lines.push(`- **Description:** ${event.description}`);\n lines.push('');\n\n lines.push('## Payload Schema');\n lines.push('');\n lines.push('```json');\n try {\n const zodSchema = event.payload.getZod();\n // Try to get shape if available\n if ('shape' in zodSchema && zodSchema.shape) {\n const shape = zodSchema.shape as Record<string, unknown>;\n const fields = Object.keys(shape);\n lines.push(JSON.stringify({ fields }, null, 2));\n } else {\n lines.push('// Payload schema available at runtime');\n }\n } catch {\n lines.push('// Schema details available at runtime');\n }\n lines.push('```');\n lines.push('');\n\n return lines.join('\\n');\n}\n\n/**\n * Export a DocBlock to markdown (already markdown, but formatted consistently).\n */\nexport function docBlockToMarkdown(doc: DocBlock): string {\n const lines: string[] = [];\n\n lines.push(`# ${doc.title}`);\n lines.push('');\n\n if (doc.summary) {\n lines.push(`> ${doc.summary}`);\n lines.push('');\n }\n\n lines.push('## Metadata');\n lines.push('');\n lines.push(`- **ID:** ${doc.id}`);\n lines.push(`- **Kind:** ${doc.kind ?? 'reference'}`);\n lines.push(`- **Visibility:** ${doc.visibility ?? 'public'}`);\n if (doc.tags?.length) lines.push(`- **Tags:** ${doc.tags.join(', ')}`);\n if (doc.owners?.length) lines.push(`- **Owners:** ${doc.owners.join(', ')}`);\n if (doc.domain) lines.push(`- **Domain:** ${doc.domain}`);\n lines.push('');\n\n lines.push('## Content');\n lines.push('');\n lines.push(doc.body);\n lines.push('');\n\n if (doc.links?.length) {\n lines.push('## Related Links');\n lines.push('');\n for (const link of doc.links) {\n lines.push(`- [${link.label}](${link.href})`);\n }\n lines.push('');\n }\n\n return lines.join('\\n');\n}\n\n/**\n * Export a spec with a specific format.\n * Convenience function that wraps the format-specific functions.\n */\nexport function exportSpec(\n spec: AnyContractSpec,\n options: Partial<SpecExportOptions> = {}\n): SpecExportResult {\n const format = options.format ?? 'full';\n\n let markdown: string;\n switch (format) {\n case 'context':\n markdown = specToContextMarkdown(spec);\n break;\n case 'prompt':\n markdown = specToAgentPrompt(spec);\n break;\n case 'full':\n default:\n markdown = specToFullMarkdown(spec, options);\n break;\n }\n\n return {\n spec,\n markdown,\n format,\n meta: {\n specName: spec.meta.name,\n specVersion: spec.meta.version,\n exportedAt: new Date().toISOString(),\n wordCount: markdown.split(/\\s+/).length,\n },\n };\n}\n\n/**\n * Export a feature with a specific format.\n */\nexport function exportFeature(\n feature: FeatureModuleSpec,\n deps?: {\n specs?: SpecRegistry;\n presentations?: PresentationRegistry;\n },\n options: Partial<FeatureExportOptions> = {}\n): FeatureExportResult {\n const format = options.format ?? 'full';\n const markdown = featureToMarkdown(feature, deps, options);\n\n return {\n feature,\n markdown,\n format,\n includedSpecs:\n feature.operations?.map((o) => `${o.name}.v${o.version}`) ?? [],\n includedEvents: feature.events?.map((e) => `${e.name}.v${e.version}`) ?? [],\n includedPresentations:\n feature.presentations?.map((p) => `${p.name}.v${p.version}`) ?? [],\n };\n}\n"],"mappings":";;;;AAwBA,MAAMA,uBAA0C;CAC9C,QAAQ;CACR,gBAAgB;CAChB,kBAAkB;CAClB,iBAAiB;CACjB,eAAe;CACf,oBAAoB;CACrB;AAED,MAAMC,0BAAgD;CACpD,GAAG;CACH,qBAAqB;CACrB,sBAAsB;CACtB,6BAA6B;CAC9B;;;;;;AAOD,SAAgB,sBAAsB,MAA+B;CACnE,MAAM,IAAI,KAAK;CACf,MAAMC,QAAkB,EAAE;AAE1B,OAAM,KAAK,KAAK,EAAE,KAAK,KAAK,EAAE,QAAQ,GAAG;AACzC,OAAM,KAAK,GAAG;AACd,OAAM,KAAK,KAAK,EAAE,cAAc;AAChC,OAAM,KAAK,GAAG;AACd,OAAM,KAAK,aAAa,EAAE,KAAK,oBAAoB,EAAE,YAAY;AACjE,OAAM,KAAK,GAAG;AAEd,OAAM,KAAK,UAAU;AACrB,OAAM,KAAK,GAAG;AACd,OAAM,KAAK,EAAE,KAAK;AAClB,OAAM,KAAK,GAAG;AAEd,OAAM,KAAK,aAAa;AACxB,OAAM,KAAK,GAAG;AACd,OAAM,KAAK,EAAE,QAAQ;AACrB,OAAM,KAAK,GAAG;AAEd,KAAI,KAAK,YAAY,WAAW,QAAQ;AACtC,QAAM,KAAK,yBAAyB;AACpC,QAAM,KAAK,GAAG;AACd,OAAK,MAAM,KAAK,KAAK,WAAW,WAAW;AACzC,SAAM,KAAK,OAAO,EAAE,OAAO;AAC3B,SAAM,KAAK,GAAG;AACd,SAAM,KAAK,aAAa;AACxB,QAAK,MAAM,KAAK,EAAE,MAAO,OAAM,KAAK,KAAK,IAAI;AAC7C,SAAM,KAAK,GAAG;AACd,SAAM,KAAK,YAAY;AACvB,QAAK,MAAM,KAAK,EAAE,KAAM,OAAM,KAAK,KAAK,IAAI;AAC5C,SAAM,KAAK,GAAG;AACd,SAAM,KAAK,YAAY;AACvB,QAAK,MAAM,KAAK,EAAE,KAAM,OAAM,KAAK,KAAK,IAAI;AAC5C,SAAM,KAAK,GAAG;;;AAIlB,QAAO,MAAM,KAAK,KAAK;;;;;;;AAQzB,SAAgB,mBACd,MACA,UAAsC,EAAE,EAChC;CACR,MAAM,OAAO;EAAE,GAAG;EAAsB,GAAG;EAAS;CACpD,MAAM,IAAI,KAAK;CACf,MAAMA,QAAkB,EAAE;AAG1B,OAAM,KAAK,KAAK,EAAE,KAAK,IAAI,EAAE,UAAU;AACvC,OAAM,KAAK,GAAG;AACd,OAAM,KAAK,KAAK,EAAE,cAAc;AAChC,OAAM,KAAK,GAAG;AAGd,OAAM,KAAK,cAAc;AACzB,OAAM,KAAK,GAAG;AACd,OAAM,KAAK,oBAAoB;AAC/B,OAAM,KAAK,oBAAoB;AAC/B,OAAM,KAAK,YAAY,EAAE,KAAK,IAAI;AAClC,OAAM,KAAK,iBAAiB,EAAE,UAAU,IAAI;AAC5C,OAAM,KAAK,cAAc,EAAE,OAAO,KAAK,KAAK,CAAC,IAAI;AACjD,OAAM,KAAK,YAAY,EAAE,KAAK,KAAK,KAAK,CAAC,IAAI;AAC7C,OAAM,KAAK,GAAG;AAGd,OAAM,KAAK,UAAU;AACrB,OAAM,KAAK,GAAG;AACd,OAAM,KAAK,EAAE,KAAK;AAClB,OAAM,KAAK,GAAG;AAEd,OAAM,KAAK,aAAa;AACxB,OAAM,KAAK,GAAG;AACd,OAAM,KAAK,EAAE,QAAQ;AACrB,OAAM,KAAK,GAAG;AAGd,KAAI,KAAK,gBAAgB;AACvB,QAAM,KAAK,kBAAkB;AAC7B,QAAM,KAAK,GAAG;AAEd,MAAI,KAAK,GAAG,OAAO;AACjB,SAAM,KAAK,mBAAmB;AAC9B,SAAM,KAAK,GAAG;AACd,SAAM,KAAK,UAAU;AACrB,OAAI;IAEF,MAAM,SAAS,kBAAkB,KAAY;AAC7C,UAAM,KAAK,KAAK,UAAU,OAAO,SAAS,EAAE,EAAE,MAAM,EAAE,CAAC;WACjD;AACN,UAAM,KAAK,qCAAqC;;AAElD,SAAM,KAAK,MAAM;AACjB,SAAM,KAAK,GAAG;;AAGhB,QAAM,KAAK,oBAAoB;AAC/B,QAAM,KAAK,GAAG;AACd,QAAM,KAAK,UAAU;AACrB,MAAI;GACF,MAAM,SAAS,kBAAkB,KAAY;AAC7C,SAAM,KAAK,KAAK,UAAU,OAAO,UAAU,EAAE,EAAE,MAAM,EAAE,CAAC;UAClD;AACN,SAAM,KAAK,qCAAqC;;AAElD,QAAM,KAAK,MAAM;AACjB,QAAM,KAAK,GAAG;AAGd,MAAI,KAAK,GAAG,UAAU,OAAO,KAAK,KAAK,GAAG,OAAO,CAAC,QAAQ;AACxD,SAAM,KAAK,kBAAkB;AAC7B,SAAM,KAAK,GAAG;AACd,SAAM,KAAK,uCAAuC;AAClD,SAAM,KAAK,uCAAuC;AAClD,QAAK,MAAM,CAAC,MAAM,QAAQ,OAAO,QAAQ,KAAK,GAAG,OAAO,CACtD,OAAM,KACJ,OAAO,KAAK,OAAO,IAAI,QAAQ,IAAI,KAAK,IAAI,YAAY,KAAK,IAAI,KAAK,IACvE;AAEH,SAAM,KAAK,GAAG;;;AAKlB,KAAI,KAAK,eAAe;AACtB,QAAM,KAAK,YAAY;AACvB,QAAM,KAAK,GAAG;AACd,QAAM,KAAK,wBAAwB,KAAK,OAAO,OAAO;AACtD,QAAM,KACJ,qBAAqB,KAAK,OAAO,cAAc,EAAE,SAAS,UAC3D;AACD,MAAI,KAAK,OAAO,UACd,OAAM,KACJ,qBAAqB,KAAK,OAAO,UAAU,IAAI,WAAW,KAAK,OAAO,UAAU,MACjF;AAEH,MAAI,KAAK,OAAO,OAAO,OACrB,OAAM,KAAK,wBAAwB,KAAK,OAAO,MAAM,KAAK,KAAK,GAAG;AAEpE,MAAI,KAAK,OAAO,KAAK,OACnB,OAAM,KAAK,qBAAqB,KAAK,OAAO,IAAI,KAAK,KAAK,GAAG;AAE/D,MAAI,KAAK,OAAO,SACd,OAAM,KAAK,qBAAqB,KAAK,OAAO,WAAW;AAEzD,QAAM,KAAK,GAAG;;AAIhB,KAAI,KAAK,sBAAsB,KAAK,aAAa;AAC/C,MAAI,KAAK,YAAY,OAAO,QAAQ;AAClC,SAAM,KAAK,oBAAoB;AAC/B,SAAM,KAAK,GAAG;AACd,QAAK,MAAM,KAAK,KAAK,YAAY,MAC/B,KAAI,cAAc,EAAE,CAClB,OAAM,KAAK,OAAO,EAAE,IAAI,KAAK,IAAI,EAAE,IAAI,QAAQ,OAAO,EAAE,OAAO;OAE/D,OAAM,KAAK,OAAO,EAAE,KAAK,IAAI,EAAE,QAAQ,OAAO,EAAE,OAAO;AAG3D,SAAM,KAAK,GAAG;;AAGhB,MAAI,KAAK,YAAY,WAAW,QAAQ;AACtC,SAAM,KAAK,sBAAsB;AACjC,SAAM,KAAK,GAAG;AACd,QAAK,MAAM,KAAK,KAAK,YAAY,UAC/B,OAAM,KAAK,KAAK,IAAI;AAEtB,SAAM,KAAK,GAAG;;;AAKlB,KAAI,KAAK,oBAAoB,KAAK,YAAY,WAAW,QAAQ;AAC/D,QAAM,KAAK,0BAA0B;AACrC,QAAM,KAAK,GAAG;AACd,OAAK,MAAM,KAAK,KAAK,WAAW,WAAW;AACzC,SAAM,KAAK,OAAO,EAAE,OAAO;AAC3B,SAAM,KAAK,GAAG;AACd,SAAM,KAAK,aAAa;AACxB,QAAK,MAAM,KAAK,EAAE,MAAO,OAAM,KAAK,KAAK,IAAI;AAC7C,SAAM,KAAK,GAAG;AACd,SAAM,KAAK,YAAY;AACvB,QAAK,MAAM,KAAK,EAAE,KAAM,OAAM,KAAK,KAAK,IAAI;AAC5C,SAAM,KAAK,GAAG;AACd,SAAM,KAAK,YAAY;AACvB,QAAK,MAAM,KAAK,EAAE,KAAM,OAAM,KAAK,KAAK,IAAI;AAC5C,SAAM,KAAK,GAAG;;;AAKlB,KAAI,KAAK,mBAAmB,KAAK,YAAY,UAAU,QAAQ;AAC7D,QAAM,KAAK,cAAc;AACzB,QAAM,KAAK,GAAG;AACd,OAAK,MAAM,MAAM,KAAK,WAAW,UAAU;AACzC,SAAM,KAAK,OAAO,GAAG,OAAO;AAC5B,SAAM,KAAK,GAAG;AACd,SAAM,KAAK,aAAa;AACxB,SAAM,KAAK,UAAU;AACrB,SAAM,KAAK,KAAK,UAAU,GAAG,OAAO,MAAM,EAAE,CAAC;AAC7C,SAAM,KAAK,MAAM;AACjB,SAAM,KAAK,GAAG;AACd,SAAM,KAAK,cAAc;AACzB,SAAM,KAAK,UAAU;AACrB,SAAM,KAAK,KAAK,UAAU,GAAG,QAAQ,MAAM,EAAE,CAAC;AAC9C,SAAM,KAAK,MAAM;AACjB,SAAM,KAAK,GAAG;;;AAKlB,KAAI,KAAK,WAAW;AAClB,QAAM,KAAK,6BAA6B;AACxC,QAAM,KAAK,GAAG;AACd,MAAI,KAAK,UAAU,KACjB,OAAM,KACJ,eAAe,KAAK,UAAU,KAAK,UAAU,OAAO,GAAG,KAAK,UAAU,KAAK,QAAQ,SACpF;AAEH,MAAI,KAAK,UAAU,IACjB,OAAM,KAAK,kBAAkB,KAAK,UAAU,IAAI,SAAS,SAAS;AAEpE,MAAI,KAAK,UAAU,IACjB,OAAM,KAAK,mBAAmB,KAAK,UAAU,IAAI,YAAY,SAAS;AAExE,QAAM,KAAK,GAAG;;AAGhB,QAAO,MAAM,KAAK,KAAK;;;;;;;AAQzB,SAAgB,kBACd,MACA,SAIQ;CACR,MAAM,WAAW,SAAS,YAAY;CACtC,MAAM,IAAI,KAAK;CACf,MAAMA,QAAkB,EAAE;CAG1B,MAAM,WAAW;EACf,WAAW;EACX,MAAM;EACN,UAAU;EACV,QAAQ;EACT,CAAC;AAEF,OAAM,KAAK,WAAW,SAAS,GAAG,EAAE,KAAK,IAAI,EAAE,UAAU;AACzD,OAAM,KAAK,GAAG;AAGd,OAAM,KAAK,aAAa;AACxB,OAAM,KAAK,GAAG;AACd,OAAM,KACJ,0EAA0E,EAAE,KAAK,aAClF;AACD,OAAM,KAAK,GAAG;AACd,OAAM,KAAK,aAAa,EAAE,OAAO;AACjC,OAAM,KAAK,GAAG;AACd,OAAM,KAAK,mBAAmB,EAAE,UAAU;AAC1C,OAAM,KAAK,GAAG;AAGd,OAAM,KAAK,mBAAmB;AAC9B,OAAM,KAAK,GAAG;AACd,OAAM,KAAK,mBAAmB,KAAK,CAAC;AACpC,OAAM,KAAK,GAAG;AAGd,OAAM,KAAK,kBAAkB;AAC7B,OAAM,KAAK,GAAG;AAEd,KAAI,aAAa,aAAa;AAC5B,QAAM,KAAK,6DAA6D;AACxE,QAAM,KAAK,GAAG;AACd,QAAM,KACJ,yEACD;AACD,QAAM,KACJ,gFACD;AACD,QAAM,KACJ,wEACD;AACD,QAAM,KAAK,gEAAgE;AAC3E,QAAM,KAAK,+DAA+D;AAC1E,QAAM,KACJ,0BACG,KAAK,OAAO,aACT,uCACA,yCACP;AACD,QAAM,KAAK,GAAG;AAEd,MAAI,KAAK,OAAO,KAAK,QAAQ;AAC3B,SAAM,KACJ,oFACD;AACD,QAAK,MAAM,SAAS,KAAK,OAAO,IAC9B,OAAM,KAAK,KAAK,QAAQ;AAE1B,SAAM,KAAK,GAAG;;YAEP,aAAa,QAAQ;AAC9B,QAAM,KAAK,oDAAoD;AAC/D,QAAM,KAAK,GAAG;AACd,QAAM,KAAK,wDAAwD;AACnE,QAAM,KAAK,uDAAuD;AAClE,QAAM,KAAK,8CAA8C;AACzD,QAAM,KAAK,0CAA0C;AACrD,QAAM,KACJ,8FACD;AACD,QAAM,KAAK,GAAG;YACL,aAAa,YAAY;AAClC,QAAM,KAAK,8DAA8D;AACzE,QAAM,KAAK,GAAG;AACd,QAAM,KAAK,iDAAiD;AAC5D,QAAM,KAAK,+CAA+C;AAC1D,QAAM,KAAK,uCAAuC;AAClD,QAAM,KAAK,2CAA2C;AACtD,QAAM,KAAK,GAAG;YACL,aAAa,UAAU;AAChC,QAAM,KAAK,wDAAwD;AACnE,QAAM,KAAK,GAAG;AACd,QAAM,KAAK,iDAAiD;AAC5D,QAAM,KAAK,wCAAwC;AACnD,QAAM,KAAK,6CAA6C;AACxD,QAAM,KAAK,kDAAkD;AAC7D,QAAM,KAAK,0CAA0C;AACrD,QAAM,KAAK,GAAG;;AAIhB,KAAI,SAAS,cAAc;AACzB,QAAM,KAAK,mBAAmB;AAC9B,QAAM,KAAK,GAAG;AACd,QAAM,KAAK,gBAAgB;AAC3B,QAAM,KAAK,QAAQ,aAAa;AAChC,QAAM,KAAK,MAAM;AACjB,QAAM,KAAK,GAAG;;AAIhB,OAAM,KAAK,qBAAqB;AAChC,OAAM,KAAK,GAAG;AACd,KAAI,aAAa,eAAe,aAAa,YAAY;AACvD,QAAM,KAAK,yDAAyD;AACpE,QAAM,KAAK,sCAAsC;AACjD,QAAM,KAAK,gDAAgD;AAC3D,QAAM,KAAK,iDAAiD;YACnD,aAAa,OACtB,OAAM,KACJ,sFACD;UACQ,aAAa,UAAU;AAChC,QAAM,KAAK,oCAAoC;AAC/C,QAAM,KAAK,uDAAuD;AAClE,QAAM,KAAK,oDAAoD;AAC/D,QAAM,KAAK,gCAAgC;;AAE7C,OAAM,KAAK,GAAG;AAEd,QAAO,MAAM,KAAK,KAAK;;;;;;AAOzB,SAAgB,kBACd,SACA,MAIA,UAAyC,EAAE,EACnC;CACR,MAAM,OAAO;EAAE,GAAG;EAAyB,GAAG;EAAS;CACvD,MAAM,IAAI,QAAQ;CAClB,MAAMA,QAAkB,EAAE;AAG1B,OAAM,KAAK,cAAc,EAAE,SAAS,EAAE,MAAM;AAC5C,OAAM,KAAK,GAAG;AACd,KAAI,EAAE,aAAa;AACjB,QAAM,KAAK,KAAK,EAAE,cAAc;AAChC,QAAM,KAAK,GAAG;;AAIhB,OAAM,KAAK,cAAc;AACzB,OAAM,KAAK,GAAG;AACd,OAAM,KAAK,gBAAgB,EAAE,IAAI,IAAI;AACrC,OAAM,KAAK,oBAAoB,EAAE,YAAY;AAC7C,OAAM,KAAK,iBAAiB,EAAE,OAAO,KAAK,KAAK,GAAG;AAClD,KAAI,EAAE,MAAM,OACV,OAAM,KAAK,eAAe,EAAE,KAAK,KAAK,KAAK,GAAG;AAEhD,OAAM,KAAK,GAAG;AAGd,KAAI,QAAQ,YAAY,QAAQ;AAC9B,QAAM,KAAK,gBAAgB;AAC3B,QAAM,KAAK,GAAG;AACd,QAAM,KAAK,4BAA4B;AACvC,QAAM,KAAK,4BAA4B;AACvC,OAAK,MAAM,MAAM,QAAQ,YAAY;GAEnC,MAAM,QADO,MAAM,OAAO,QAAQ,GAAG,MAAM,GAAG,QAAQ,GACnC,KAAK,QAAQ;AAChC,SAAM,KAAK,KAAK,GAAG,KAAK,MAAM,GAAG,QAAQ,KAAK,KAAK,IAAI;;AAEzD,QAAM,KAAK,GAAG;AAGd,MAAI,KAAK,uBAAuB,MAAM,OAAO;AAC3C,SAAM,KAAK,wBAAwB;AACnC,SAAM,KAAK,GAAG;AACd,QAAK,MAAM,MAAM,QAAQ,YAAY;IACnC,MAAM,OAAO,KAAK,MAAM,QAAQ,GAAG,MAAM,GAAG,QAAQ;AACpD,QAAI,MAAM;AACR,WAAM,KAAK,MAAM;AACjB,WAAM,KAAK,GAAG;AACd,WAAM,KAAK,mBAAmB,MAAM,KAAK,CAAC;;;;;AAOlD,KAAI,QAAQ,QAAQ,QAAQ;AAC1B,QAAM,KAAK,YAAY;AACvB,QAAM,KAAK,GAAG;AACd,QAAM,KAAK,qBAAqB;AAChC,QAAM,KAAK,qBAAqB;AAChC,OAAK,MAAM,OAAO,QAAQ,OACxB,OAAM,KAAK,KAAK,IAAI,KAAK,MAAM,IAAI,QAAQ,IAAI;AAEjD,QAAM,KAAK,GAAG;;AAIhB,KAAI,QAAQ,eAAe,QAAQ;AACjC,QAAM,KAAK,mBAAmB;AAC9B,QAAM,KAAK,GAAG;AACd,QAAM,KAAK,qBAAqB;AAChC,QAAM,KAAK,qBAAqB;AAChC,OAAK,MAAM,QAAQ,QAAQ,cACzB,OAAM,KAAK,KAAK,KAAK,KAAK,MAAM,KAAK,QAAQ,IAAI;AAEnD,QAAM,KAAK,GAAG;AAGd,MAAI,KAAK,+BAA+B,MAAM,eAAe;AAC3D,SAAM,KAAK,2BAA2B;AACtC,SAAM,KAAK,GAAG;AACd,QAAK,MAAM,QAAQ,QAAQ,eAAe;IACxC,MAAM,IAAI,KAAK,cAAc,IAAI,KAAK,MAAM,KAAK,QAAQ;AACzD,QAAI,GAAG;AACL,WAAM,KAAK,QAAQ,KAAK,KAAK,IAAI,KAAK,UAAU;AAChD,WAAM,KAAK,GAAG;AACd,WAAM,KAAK,eAAgB,EAAE,QAAgB,QAAQ,YAAY;AACjE,SAAI,kBAAkB,EAAE,QACtB,OAAM,KAAK,oBAAqB,EAAE,QAAgB,eAAe;AAEnE,WAAM,KAAK,GAAG;;;;;AAOtB,KAAI,QAAQ,cAAc;AACxB,MAAI,QAAQ,aAAa,UAAU,QAAQ;AACzC,SAAM,KAAK,2BAA2B;AACtC,SAAM,KAAK,GAAG;AACd,QAAK,MAAM,OAAO,QAAQ,aAAa,SACrC,OAAM,KAAK,OAAO,IAAI,IAAI,IAAI,IAAI,QAAQ,IAAI;AAEhD,SAAM,KAAK,GAAG;;AAGhB,MAAI,QAAQ,aAAa,UAAU,QAAQ;AACzC,SAAM,KAAK,2BAA2B;AACtC,SAAM,KAAK,GAAG;AACd,QAAK,MAAM,OAAO,QAAQ,aAAa,SACrC,OAAM,KACJ,OAAO,IAAI,IAAI,IAAI,IAAI,UAAU,KAAK,IAAI,YAAY,GAAG,IAAI,IAAI,WAAW,aAAa,WAAW,GACrG;AAEH,SAAM,KAAK,GAAG;;;AAIlB,QAAO,MAAM,KAAK,KAAK;;;;;AAMzB,SAAgB,uBACd,cACQ;CACR,MAAM,IAAI,aAAa;CACvB,MAAMA,QAAkB,EAAE;AAE1B,OAAM,KAAK,mBAAmB,EAAE,KAAK,IAAI,EAAE,UAAU;AACrD,OAAM,KAAK,GAAG;AAEd,KAAI,EAAE,aAAa;AACjB,QAAM,KAAK,KAAK,EAAE,cAAc;AAChC,QAAM,KAAK,GAAG;;AAGhB,OAAM,KAAK,cAAc;AACzB,OAAM,KAAK,GAAG;AACd,OAAM,KAAK,eAAe,EAAE,OAAO;AACnC,OAAM,KAAK,kBAAkB,EAAE,UAAU;AACzC,KAAI,EAAE,UAAW,OAAM,KAAK,oBAAoB,EAAE,YAAY;AAC9D,KAAI,EAAE,QAAQ,OAAQ,OAAM,KAAK,iBAAiB,EAAE,OAAO,KAAK,KAAK,GAAG;AACxE,KAAI,EAAE,MAAM,OAAQ,OAAM,KAAK,eAAe,EAAE,KAAK,KAAK,KAAK,GAAG;AAClE,OAAM,KAAK,GAAG;AAEd,OAAM,KAAK,YAAY;AACvB,OAAM,KAAK,GAAG;AACd,OAAM,KAAK,eAAe,aAAa,OAAO,OAAO;AACrD,KAAI,aAAa,OAAO,SAAS,aAAa;AAC5C,QAAM,KAAK,oBAAoB,aAAa,OAAO,YAAY;AAC/D,QAAM,KAAK,wBAAwB,aAAa,OAAO,eAAe;;AAExE,OAAM,KAAK,GAAG;AAEd,OAAM,KAAK,uBAAuB;AAClC,OAAM,KAAK,GAAG;AACd,MAAK,MAAM,UAAU,aAAa,QAChC,OAAM,KAAK,KAAK,SAAS;AAE3B,OAAM,KAAK,GAAG;AAEd,KAAI,aAAa,QAAQ;AACvB,QAAM,KAAK,YAAY;AACvB,QAAM,KAAK,GAAG;AACd,MAAI,aAAa,OAAO,OAAO,OAC7B,OAAM,KACJ,wBAAwB,aAAa,OAAO,MAAM,KAAK,KAAK,GAC7D;AAEH,MAAI,aAAa,OAAO,KAAK,OAC3B,OAAM,KAAK,qBAAqB,aAAa,OAAO,IAAI,KAAK,KAAK,GAAG;AAEvE,QAAM,KAAK,GAAG;;AAGhB,QAAO,MAAM,KAAK,KAAK;;;;;AAMzB,SAAgB,gBAAgB,OAA0C;CACxE,MAAMA,QAAkB,EAAE;AAE1B,OAAM,KAAK,YAAY,MAAM,KAAK,IAAI,MAAM,UAAU;AACtD,OAAM,KAAK,GAAG;AAEd,OAAM,KAAK,cAAc;AACzB,OAAM,KAAK,GAAG;AACd,OAAM,KAAK,eAAe,MAAM,OAAO;AACvC,OAAM,KAAK,kBAAkB,MAAM,UAAU;AAC7C,KAAI,MAAM,YAAa,OAAM,KAAK,sBAAsB,MAAM,cAAc;AAC5E,OAAM,KAAK,GAAG;AAEd,OAAM,KAAK,oBAAoB;AAC/B,OAAM,KAAK,GAAG;AACd,OAAM,KAAK,UAAU;AACrB,KAAI;EACF,MAAM,YAAY,MAAM,QAAQ,QAAQ;AAExC,MAAI,WAAW,aAAa,UAAU,OAAO;GAC3C,MAAM,QAAQ,UAAU;GACxB,MAAM,SAAS,OAAO,KAAK,MAAM;AACjC,SAAM,KAAK,KAAK,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;QAE/C,OAAM,KAAK,yCAAyC;SAEhD;AACN,QAAM,KAAK,yCAAyC;;AAEtD,OAAM,KAAK,MAAM;AACjB,OAAM,KAAK,GAAG;AAEd,QAAO,MAAM,KAAK,KAAK;;;;;AAMzB,SAAgB,mBAAmB,KAAuB;CACxD,MAAMA,QAAkB,EAAE;AAE1B,OAAM,KAAK,KAAK,IAAI,QAAQ;AAC5B,OAAM,KAAK,GAAG;AAEd,KAAI,IAAI,SAAS;AACf,QAAM,KAAK,KAAK,IAAI,UAAU;AAC9B,QAAM,KAAK,GAAG;;AAGhB,OAAM,KAAK,cAAc;AACzB,OAAM,KAAK,GAAG;AACd,OAAM,KAAK,aAAa,IAAI,KAAK;AACjC,OAAM,KAAK,eAAe,IAAI,QAAQ,cAAc;AACpD,OAAM,KAAK,qBAAqB,IAAI,cAAc,WAAW;AAC7D,KAAI,IAAI,MAAM,OAAQ,OAAM,KAAK,eAAe,IAAI,KAAK,KAAK,KAAK,GAAG;AACtE,KAAI,IAAI,QAAQ,OAAQ,OAAM,KAAK,iBAAiB,IAAI,OAAO,KAAK,KAAK,GAAG;AAC5E,KAAI,IAAI,OAAQ,OAAM,KAAK,iBAAiB,IAAI,SAAS;AACzD,OAAM,KAAK,GAAG;AAEd,OAAM,KAAK,aAAa;AACxB,OAAM,KAAK,GAAG;AACd,OAAM,KAAK,IAAI,KAAK;AACpB,OAAM,KAAK,GAAG;AAEd,KAAI,IAAI,OAAO,QAAQ;AACrB,QAAM,KAAK,mBAAmB;AAC9B,QAAM,KAAK,GAAG;AACd,OAAK,MAAM,QAAQ,IAAI,MACrB,OAAM,KAAK,MAAM,KAAK,MAAM,IAAI,KAAK,KAAK,GAAG;AAE/C,QAAM,KAAK,GAAG;;AAGhB,QAAO,MAAM,KAAK,KAAK;;;;;;AAOzB,SAAgB,WACd,MACA,UAAsC,EAAE,EACtB;CAClB,MAAM,SAAS,QAAQ,UAAU;CAEjC,IAAIC;AACJ,SAAQ,QAAR;EACE,KAAK;AACH,cAAW,sBAAsB,KAAK;AACtC;EACF,KAAK;AACH,cAAW,kBAAkB,KAAK;AAClC;EACF,KAAK;EACL;AACE,cAAW,mBAAmB,MAAM,QAAQ;AAC5C;;AAGJ,QAAO;EACL;EACA;EACA;EACA,MAAM;GACJ,UAAU,KAAK,KAAK;GACpB,aAAa,KAAK,KAAK;GACvB,6BAAY,IAAI,MAAM,EAAC,aAAa;GACpC,WAAW,SAAS,MAAM,MAAM,CAAC;GAClC;EACF;;;;;AAMH,SAAgB,cACd,SACA,MAIA,UAAyC,EAAE,EACtB;CACrB,MAAM,SAAS,QAAQ,UAAU;AAGjC,QAAO;EACL;EACA,UAJe,kBAAkB,SAAS,MAAM,QAAQ;EAKxD;EACA,eACE,QAAQ,YAAY,KAAK,MAAM,GAAG,EAAE,KAAK,IAAI,EAAE,UAAU,IAAI,EAAE;EACjE,gBAAgB,QAAQ,QAAQ,KAAK,MAAM,GAAG,EAAE,KAAK,IAAI,EAAE,UAAU,IAAI,EAAE;EAC3E,uBACE,QAAQ,eAAe,KAAK,MAAM,GAAG,EAAE,KAAK,IAAI,EAAE,UAAU,IAAI,EAAE;EACrE"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"prompts.d.ts","names":[],"sources":["../../src/llm/prompts.ts"],"sourcesContent":[],"mappings":";;;;;;AAoIA;;AAES,cAlHI,oBAkHJ,EAlH0B,MAkH1B,CAlHiC,SAkHjC,EAAA,MAAA,CAAA;;;AAwCT;AACQ,iBAvGQ,4BAAA,CAuGR,IAAA,EAtGA,eAsGA,EAAA,KAAA,EArGC,SAqGD,EAAA,OAGM,CAHN,EAAA;EACC,YAAA,CAAA,EAAA,MAAA;EAEN,UAAA,CAAA,EAAA,MAAA;CAAW,CAAA,EAnGX,WAmGW;AA0Cd;AAkDA;AAgLA;AACQ,iBA3TQ,kBAAA,CA2TR,IAAA,EA1TA,eA0TA,EAAA,KAAA,EAzTC,SAyTD,EAAA,OAEM,CAFN,EAAA;EACC,kBAAA,CAAA,EAAA,MAAA;EACN,aAAA,CAAA,EAAA,QAAA,GAAA,MAAA,GAAA,KAAA;CAAW,CAAA,EAtTX,WAsTW;AAuEd;;;iBA1VgB,oBAAA,OACR,wBACC,wCAEN;;;;iBA0Ca,0BAAA,OACR,8CAEL;;;;iBA+Ca,0BAAA,OACR;;;IAKL;;;;iBA0Ka,kBAAA,OACR,2BACC,YACN;;;;iBAuEa,2BAAA,OACR;;;MAGL"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"prompts.js","names":["AGENT_SYSTEM_PROMPTS: Record<AgentType, string>","taskPrompt: string","fileStructure: ImplementationPlan['fileStructure']","steps: ImplementationPlan['steps']","constraints: ImplementationPlan['constraints']"],"sources":["../../src/llm/prompts.ts"],"sourcesContent":["/**\n * LLM Prompt Templates\n *\n * Pre-built prompt templates for different agent types and tasks.\n * These prompts are designed to guide AI coding agents in implementing,\n * testing, and verifying ContractSpec-based code.\n */\n\nimport type { AnyContractSpec } from '../spec';\nimport type { FeatureModuleSpec } from '../features';\nimport type { AgentType, AgentPrompt, ImplementationPlan } from './types';\nimport {\n specToFullMarkdown,\n specToAgentPrompt,\n featureToMarkdown,\n} from './exporters';\n\n/**\n * System prompts for different agent types.\n */\nexport const AGENT_SYSTEM_PROMPTS: Record<AgentType, string> = {\n 'claude-code': `You are an expert TypeScript developer working with ContractSpec, a spec-first development framework.\n\nYour code follows these principles:\n- Type-safe with comprehensive TypeScript types (no \\`any\\`)\n- Well-documented with JSDoc comments\n- Production-ready with proper error handling\n- Following SOLID principles and clean code practices\n- Modular and testable\n\nWhen implementing specs:\n1. Validate input against the schema before processing\n2. Handle all error cases defined in the spec\n3. Emit events as specified in sideEffects\n4. Respect policy constraints (auth, rate limits, PII handling)\n5. Follow the acceptance scenarios as your implementation guide\n\nGenerate clean, idiomatic TypeScript that exactly matches the specification.`,\n\n 'cursor-cli': `You are implementing features for a ContractSpec-driven codebase.\n\nContractSpec is a spec-first framework where specifications define:\n- Operations (commands and queries) with typed I/O\n- Events that operations emit\n- Presentations for UI components\n- Features that group related specs\n\nWhen working with specs:\n- Read the spec carefully before implementing\n- Match the input/output types exactly\n- Implement all error cases\n- Follow the acceptance scenarios\n- Respect policy constraints\n\nUse the project's existing patterns and conventions.`,\n\n 'generic-mcp': `You are a code generation assistant working with ContractSpec specifications.\n\nContractSpec specs define:\n- meta: name, version, kind (command/query), description, goal, context\n- io: input schema, output schema, error definitions\n- policy: auth level, rate limits, feature flags, PII handling\n- sideEffects: events to emit, analytics, audit\n- acceptance: scenarios and examples\n\nYour task is to generate or modify code that complies with the given specification.\nFollow the spec exactly and handle all defined cases.`,\n};\n\n/**\n * Generate an implementation prompt for a specific agent type.\n */\nexport function generateImplementationPrompt(\n spec: AnyContractSpec,\n agent: AgentType,\n options?: {\n existingCode?: string;\n targetPath?: string;\n }\n): AgentPrompt {\n const systemPrompt = AGENT_SYSTEM_PROMPTS[agent];\n const specMarkdown = specToFullMarkdown(spec);\n\n let taskPrompt: string;\n\n if (agent === 'claude-code') {\n taskPrompt = `## Implementation Task\n\nImplement the following ContractSpec operation:\n\n${specMarkdown}\n\n${options?.targetPath ? `**Target file:** \\`${options.targetPath}\\`\\n` : ''}\n${options?.existingCode ? `**Existing code to modify:**\\n\\`\\`\\`typescript\\n${options.existingCode}\\n\\`\\`\\`\\n` : ''}\n\nGenerate a complete, production-ready TypeScript implementation that:\n1. Exports a handler function matching the spec signature\n2. Validates input using the schema\n3. Handles all defined error cases\n4. Emits events as specified\n5. Includes JSDoc documentation\n\nProvide ONLY the TypeScript code.`;\n } else if (agent === 'cursor-cli') {\n taskPrompt = `Implement this ContractSpec operation.\n\n${specMarkdown}\n\n${options?.targetPath ? `Target: ${options.targetPath}\\n` : ''}\n\nRequirements:\n- TypeScript with strict types\n- Handle all error cases\n- Emit specified events\n- Follow acceptance scenarios`;\n } else {\n taskPrompt = specToAgentPrompt(spec, {\n taskType: 'implement',\n existingCode: options?.existingCode,\n });\n }\n\n return {\n agent,\n systemPrompt,\n taskPrompt,\n };\n}\n\n/**\n * Generate a test generation prompt.\n */\nexport function generateTestPrompt(\n spec: AnyContractSpec,\n agent: AgentType,\n options?: {\n implementationCode?: string;\n testFramework?: 'vitest' | 'jest' | 'bun';\n }\n): AgentPrompt {\n const framework = options?.testFramework ?? 'vitest';\n const specMarkdown = specToFullMarkdown(spec);\n\n const taskPrompt = `## Test Generation Task\n\nGenerate comprehensive tests for this specification:\n\n${specMarkdown}\n\n${options?.implementationCode ? `**Implementation:**\\n\\`\\`\\`typescript\\n${options.implementationCode}\\n\\`\\`\\`\\n` : ''}\n\n**Test Framework:** ${framework}\n\nGenerate tests that:\n1. Cover all acceptance scenarios from the spec\n2. Test all defined error cases\n3. Verify input validation\n4. Check event emissions\n5. Test edge cases\n\nUse descriptive test names: \"should [behavior] when [condition]\"\n\nProvide a complete test file.`;\n\n return {\n agent,\n systemPrompt: AGENT_SYSTEM_PROMPTS[agent],\n taskPrompt,\n };\n}\n\n/**\n * Generate a code review prompt.\n */\nexport function generateReviewPrompt(\n spec: AnyContractSpec,\n agent: AgentType,\n implementationCode: string\n): AgentPrompt {\n const specMarkdown = specToFullMarkdown(spec);\n\n const taskPrompt = `## Code Review Task\n\nReview this implementation against its specification:\n\n**Specification:**\n${specMarkdown}\n\n**Implementation:**\n\\`\\`\\`typescript\n${implementationCode}\n\\`\\`\\`\n\nProvide a structured review:\n\n### Compliance Check\n- [ ] Input types match spec\n- [ ] Output types match spec\n- [ ] All error cases handled\n- [ ] Events emitted correctly\n- [ ] Policy constraints respected\n\n### Issues Found\nList any issues with severity (error/warning/info)\n\n### Suggestions\nList improvements and recommendations\n\nBe thorough and precise. Focus on spec compliance first, then code quality.`;\n\n return {\n agent,\n systemPrompt: AGENT_SYSTEM_PROMPTS[agent],\n taskPrompt,\n };\n}\n\n/**\n * Generate a verification prompt for AI-powered semantic review.\n */\nexport function generateVerificationPrompt(\n spec: AnyContractSpec,\n implementationCode: string\n): AgentPrompt {\n const specMarkdown = specToFullMarkdown(spec);\n\n const taskPrompt = `## Semantic Verification Task\n\nVerify that this implementation fulfills the specification's intent.\n\n**Specification:**\n${specMarkdown}\n\n**Implementation:**\n\\`\\`\\`typescript\n${implementationCode}\n\\`\\`\\`\n\nAnalyze and respond with JSON:\n\n\\`\\`\\`json\n{\n \"passed\": true/false,\n \"score\": 0-100,\n \"compliance\": {\n \"inputTypes\": { \"match\": true/false, \"issues\": [] },\n \"outputTypes\": { \"match\": true/false, \"issues\": [] },\n \"errorHandling\": { \"coverage\": \"full/partial/none\", \"missing\": [] },\n \"eventEmission\": { \"correct\": true/false, \"issues\": [] },\n \"policyCompliance\": { \"auth\": true/false, \"rateLimit\": true/false, \"pii\": true/false }\n },\n \"scenarios\": [\n { \"name\": \"scenario name\", \"covered\": true/false, \"notes\": \"\" }\n ],\n \"issues\": [\n { \"severity\": \"error/warning/info\", \"category\": \"type/export/import/scenario/error_handling/semantic\", \"message\": \"\", \"suggestion\": \"\" }\n ],\n \"summary\": \"Brief summary of verification results\"\n}\n\\`\\`\\``;\n\n return {\n agent: 'generic-mcp',\n taskPrompt,\n };\n}\n\n/**\n * Generate a feature implementation plan.\n */\nexport function generateImplementationPlan(\n spec: AnyContractSpec,\n options?: {\n projectRoot?: string;\n existingFiles?: string[];\n }\n): ImplementationPlan {\n const m = spec.meta;\n\n // Suggest file structure based on spec type\n const fileStructure: ImplementationPlan['fileStructure'] = [];\n const basePath = options?.projectRoot ?? 'src';\n const specPath = m.name.replace(/\\./g, '/');\n\n if (m.kind === 'command' || m.kind === 'query') {\n fileStructure.push(\n {\n path: `${basePath}/${specPath}/handler.ts`,\n purpose: 'Main handler implementation',\n type: 'create',\n },\n {\n path: `${basePath}/${specPath}/types.ts`,\n purpose: 'Type definitions',\n type: 'create',\n },\n {\n path: `${basePath}/${specPath}/handler.test.ts`,\n purpose: 'Handler tests',\n type: 'create',\n }\n );\n }\n\n // Generate implementation steps from acceptance scenarios\n const steps: ImplementationPlan['steps'] = [];\n let order = 1;\n\n // Step 1: Types\n steps.push({\n order: order++,\n title: 'Define Types',\n description:\n 'Create TypeScript types for input, output, and internal data structures',\n acceptanceCriteria: [\n 'Input type matches spec schema exactly',\n 'Output type matches spec schema exactly',\n 'Error types defined for all error cases',\n ],\n });\n\n // Step 2: Validation\n steps.push({\n order: order++,\n title: 'Implement Input Validation',\n description: 'Add validation logic for the input payload',\n acceptanceCriteria: [\n 'All required fields are validated',\n 'Type constraints are enforced',\n 'Validation errors return appropriate error codes',\n ],\n });\n\n // Step 3: Core logic\n steps.push({\n order: order++,\n title: 'Implement Core Logic',\n description: 'Implement the main business logic of the operation',\n acceptanceCriteria: spec.acceptance?.scenarios?.map((s) => s.name) ?? [\n 'Operation completes successfully for valid input',\n ],\n });\n\n // Step 4: Error handling\n if (spec.io.errors && Object.keys(spec.io.errors).length > 0) {\n steps.push({\n order: order++,\n title: 'Implement Error Handling',\n description: 'Handle all defined error cases',\n acceptanceCriteria: Object.entries(spec.io.errors).map(\n ([code, err]) => `Handle ${code}: ${err.when}`\n ),\n });\n }\n\n // Step 5: Events\n if (spec.sideEffects?.emits?.length) {\n steps.push({\n order: order++,\n title: 'Implement Event Emission',\n description: 'Emit events as specified',\n acceptanceCriteria: spec.sideEffects.emits.map((e) => {\n if ('ref' in e) {\n return `Emit ${e.ref.name}.v${e.ref.version} when ${e.when}`;\n }\n return `Emit ${e.name}.v${e.version} when ${e.when}`;\n }),\n });\n }\n\n // Step 6: Tests\n steps.push({\n order: order++,\n title: 'Write Tests',\n description: 'Create comprehensive test suite',\n acceptanceCriteria: [\n 'All acceptance scenarios covered',\n 'All error cases tested',\n 'Edge cases handled',\n 'Events verified',\n ],\n });\n\n // Extract constraints\n const constraints: ImplementationPlan['constraints'] = {\n policy: [],\n security: [],\n pii: [],\n };\n\n constraints.policy.push(`Auth level: ${spec.policy.auth}`);\n if (spec.policy.idempotent !== undefined) {\n constraints.policy.push(`Idempotent: ${spec.policy.idempotent}`);\n }\n if (spec.policy.rateLimit) {\n constraints.policy.push(\n `Rate limit: ${spec.policy.rateLimit.rpm} rpm per ${spec.policy.rateLimit.key}`\n );\n }\n if (spec.policy.flags?.length) {\n constraints.policy.push(\n `Feature flags required: ${spec.policy.flags.join(', ')}`\n );\n }\n if (spec.policy.escalate) {\n constraints.security.push(`Escalation required: ${spec.policy.escalate}`);\n }\n if (spec.policy.pii?.length) {\n constraints.pii = spec.policy.pii;\n }\n\n // Verification checklist\n const verificationChecklist = [\n 'Input validation works for all cases',\n 'Output matches expected schema',\n 'All error cases return correct codes',\n 'Events are emitted with correct payloads',\n 'Auth requirements are enforced',\n 'Rate limiting is applied (if applicable)',\n 'PII fields are handled correctly',\n 'All acceptance scenarios pass',\n 'Tests provide adequate coverage',\n ];\n\n return {\n target: {\n type: 'spec',\n name: m.name,\n version: m.version,\n },\n context: {\n goal: m.goal,\n description: m.description,\n background: m.context,\n },\n specMarkdown: specToFullMarkdown(spec),\n fileStructure,\n steps,\n constraints,\n verificationChecklist,\n };\n}\n\n/**\n * Format an implementation plan for a specific agent.\n */\nexport function formatPlanForAgent(\n plan: ImplementationPlan,\n agent: AgentType\n): AgentPrompt {\n let taskPrompt: string;\n\n if (agent === 'claude-code') {\n taskPrompt = `## Implementation Plan: ${plan.target.name}.v${plan.target.version}\n\n### Context\n**Goal:** ${plan.context.goal}\n\n**Background:** ${plan.context.background}\n\n### Specification\n${plan.specMarkdown}\n\n### File Structure\n${plan.fileStructure.map((f) => `- \\`${f.path}\\` (${f.type}): ${f.purpose}`).join('\\n')}\n\n### Implementation Steps\n${plan.steps\n .map(\n (s) => `\n#### Step ${s.order}: ${s.title}\n${s.description}\n\n**Acceptance Criteria:**\n${s.acceptanceCriteria.map((c) => `- [ ] ${c}`).join('\\n')}\n`\n )\n .join('\\n')}\n\n### Constraints\n${plan.constraints.policy.length ? `**Policy:**\\n${plan.constraints.policy.map((p) => `- ${p}`).join('\\n')}\\n` : ''}\n${plan.constraints.security.length ? `**Security:**\\n${plan.constraints.security.map((s) => `- ${s}`).join('\\n')}\\n` : ''}\n${plan.constraints.pii.length ? `**PII Handling:**\\n${plan.constraints.pii.map((p) => `- ${p}`).join('\\n')}\\n` : ''}\n\n### Verification Checklist\n${plan.verificationChecklist.map((c) => `- [ ] ${c}`).join('\\n')}\n\nImplement this plan step by step.`;\n } else if (agent === 'cursor-cli') {\n taskPrompt = `# ${plan.target.name}.v${plan.target.version}\n\n${plan.context.goal}\n\n## Spec\n${plan.specMarkdown}\n\n## Files to create\n${plan.fileStructure.map((f) => `${f.type}: ${f.path}`).join('\\n')}\n\n## Steps\n${plan.steps.map((s) => `${s.order}. ${s.title}`).join('\\n')}`;\n } else {\n taskPrompt = `Implementation plan for ${plan.target.name}.v${plan.target.version}\n\n${plan.specMarkdown}\n\nSteps:\n${plan.steps.map((s) => `${s.order}. ${s.title}: ${s.description}`).join('\\n')}`;\n }\n\n return {\n agent,\n systemPrompt: AGENT_SYSTEM_PROMPTS[agent],\n taskPrompt,\n };\n}\n\n/**\n * Generate a fix violations prompt after verification.\n */\nexport function generateFixViolationsPrompt(\n spec: AnyContractSpec,\n implementationCode: string,\n violations: { message: string; suggestion?: string }[]\n): AgentPrompt {\n const specMarkdown = specToFullMarkdown(spec);\n\n const violationsList = violations\n .map(\n (v, i) =>\n `${i + 1}. ${v.message}${v.suggestion ? `\\n Suggestion: ${v.suggestion}` : ''}`\n )\n .join('\\n');\n\n const taskPrompt = `## Fix Specification Violations\n\nThe following implementation has violations against its specification:\n\n**Specification:**\n${specMarkdown}\n\n**Current Implementation:**\n\\`\\`\\`typescript\n${implementationCode}\n\\`\\`\\`\n\n**Violations Found:**\n${violationsList}\n\nFix ALL violations while maintaining existing functionality.\nProvide the corrected implementation.`;\n\n return {\n agent: 'generic-mcp',\n taskPrompt,\n };\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","names":[],"sources":["../../src/llm/types.ts"],"sourcesContent":[],"mappings":";;;;;;;;;AAmBA;AAGiB,KATL,eAAA,GASsB,SAExB,GAAA,MAAA,GAAA,QAAe;AAczB;AAUiB,KAhCL,SAAA,GAgCqB,aAEzB,GAAA,YAAA,GAIE,aAAA;AAWV;AAgBiB,KA9DL,gBAAA,GA8DuB,WAAA,GAAA,UAAA,GAAA,WAAA;AAuCnC;AAyBiB,UA3HA,iBAAA,CA2HkB;EA4BlB;EAgBA,MAAA,EArKP,eAqKiB;EAMV;EAKA,cAAA,CAAA,EAAA,OAAmB;EAUxB;EACc,gBAAA,CAAA,EAAA,OAAA;EACG;EACK,eAAA,CAAA,EAAA,OAAA;EACG;EAAV,aAAA,CAAA,EAAA,OAAA;EACF;EAAQ,kBAAA,CAAA,EAAA,OAAA;;;UAjLhB,oBAAA,SAA6B;;;;;;;;;UAU7B,gBAAA;;QAET;;;;UAIE;;;;;;;;;;UAWO,mBAAA;;WAEN;;;;UAID;;;;;;;;;UAUO,kBAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAuCA,iBAAA;;;;;;;;;;;;;;;;;UAyBA,kBAAA;;QAET;;;;;;UAME;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAoBO,WAAA;;SAER;;;;;;;;;;;;;UAcQ,UAAA;;;;;UAMA,aAAA;;;;UAKA,kBAAA,SAA2B;;;;;;;;;KAUhC,cAAA;;QACc;;;QACG;;;QACK;;;QACP,UAAU;;;QACZ"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"markdown.d.ts","names":[],"sources":["../src/markdown.ts"],"sourcesContent":[],"mappings":";;;;;;;;AASA;;AAE6B,iBAFb,eAAA,CAEa,GAAA,EADtB,YACsB,EAAA,MA2F7B,CA3F6B,EAAA;EAAiC,aAAA,CAAA,EAAjC,oBAAiC;EAAe,QAAA,CAAA,EAAf,eAAe;AA2F7E,CAAA,CAAA,EAAgB,MAAA;;AAEY,iBAFZ,cAAA,CAEY,GAAA,EADrB,YACqB,EAAA,MAAA,EAAA;EAAiC,aAAA,CAAA,EAAjC,oBAAiC;EAAe,QAAA,CAAA,EAAf,eAAe"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"markdown.js","names":["lines: string[]","parts: string[]"],"sources":["../src/markdown.ts"],"sourcesContent":["import type { SpecRegistry } from './registry';\nimport { isEmitDeclRef } from './spec';\nimport type { PresentationRegistry } from './presentations';\nimport type { FeatureRegistry } from './features';\n\n/**\n * Render simple Markdown docs for each spec.\n * Useful for dev portals and repo docs generation.\n */\nexport function specsToMarkdown(\n reg: SpecRegistry,\n extras?: { presentations?: PresentationRegistry; features?: FeatureRegistry }\n): string {\n const lines: string[] = [];\n\n for (const spec of reg.listSpecs()) {\n const m = spec.meta;\n lines.push(`# ${m.name}.v${m.version}`);\n lines.push('');\n lines.push(\n `**Kind:** ${m.kind} | **Stability:** ${m.stability} | **Owners:** ${m.owners.join(', ')}`\n );\n lines.push('');\n lines.push(`**Description:** ${m.description}`);\n lines.push('');\n lines.push(`## Goal`);\n lines.push(m.goal);\n lines.push('');\n lines.push(`## Context`);\n lines.push(m.context);\n lines.push('');\n\n lines.push(`## Policy`);\n lines.push(`- Auth: ${spec.policy.auth}`);\n lines.push(`- Idempotent: ${!!spec.policy.idempotent}`);\n if (spec.policy.rateLimit)\n lines.push(\n `- Rate Limit: ${spec.policy.rateLimit.rpm}/min by ${spec.policy.rateLimit.key}`\n );\n if (spec.policy.flags?.length)\n lines.push(`- Flags: ${spec.policy.flags.join(', ')}`);\n if (spec.policy.pii?.length)\n lines.push(`- PII: ${spec.policy.pii.join(', ')}`);\n lines.push('');\n\n if (spec.sideEffects?.emits?.length) {\n lines.push(`## Emits Events`);\n for (const e of spec.sideEffects.emits) {\n if (isEmitDeclRef(e)) {\n lines.push(`- \\`${e.ref.name}.v${e.ref.version}\\` — ${e.when}`);\n } else {\n lines.push(`- \\`${e.name}.v${e.version}\\` — ${e.when}`);\n }\n }\n lines.push('');\n }\n\n if (spec.io.errors && Object.keys(spec.io.errors).length) {\n lines.push(`## Errors`);\n for (const [code, err] of Object.entries(spec.io.errors)) {\n lines.push(\n `- \\`${code}\\` (${err.http ?? 400}) — ${err.description} (when: ${err.when})`\n );\n }\n lines.push('');\n }\n\n if (spec.acceptance?.scenarios?.length) {\n lines.push(`## Acceptance Scenarios`);\n for (const s of spec.acceptance.scenarios) {\n lines.push(`### ${s.name}`);\n lines.push(`- **Given:** ${s.given.join('; ')}`);\n lines.push(`- **When:** ${s.when.join('; ')}`);\n lines.push(`- **Then:** ${s.then.join('; ')}`);\n lines.push('');\n }\n }\n\n if (spec.acceptance?.examples?.length) {\n lines.push(`## Examples`);\n for (const ex of spec.acceptance.examples) {\n lines.push(`- **${ex.name}**`);\n lines.push(' - Input:');\n lines.push(' ```json');\n lines.push(JSON.stringify(ex.input, null, 2));\n lines.push(' ```');\n lines.push(' - Output:');\n lines.push(' ```json');\n lines.push(JSON.stringify(ex.output, null, 2));\n lines.push(' ```');\n lines.push('');\n }\n }\n\n lines.push('---');\n lines.push('');\n }\n\n return lines.join('\\n');\n}\n\n/** Render presentations and features as additional sections. */\nexport function docsToMarkdown(\n reg: SpecRegistry,\n extras: { presentations?: PresentationRegistry; features?: FeatureRegistry }\n): string {\n const parts: string[] = [];\n parts.push(specsToMarkdown(reg, extras));\n\n if (extras.presentations) {\n parts.push('# Presentations');\n parts.push('');\n for (const p of extras.presentations.list()) {\n parts.push(`## ${p.meta.name}.v${p.meta.version}`);\n parts.push('');\n parts.push(`- Kind: ${(p.content as any).kind}`);\n if ('framework' in p.content)\n parts.push(`- Framework: ${p.content.framework}`);\n if ('componentKey' in p.content)\n parts.push(`- Component Key: ${(p.content as any).componentKey}`);\n if ('mimeType' in p.content)\n parts.push(`- MIME Type: ${(p.content as any).mimeType}`);\n parts.push('');\n }\n parts.push('');\n }\n\n if (extras.features) {\n parts.push('# Features');\n parts.push('');\n for (const f of extras.features.list()) {\n parts.push(`## ${f.meta.title} (${f.meta.key})`);\n if (f.meta.description) parts.push(f.meta.description);\n parts.push('');\n if (f.operations?.length) {\n parts.push('- Operations:');\n for (const o of f.operations) parts.push(` - ${o.name}.v${o.version}`);\n }\n if (f.events?.length) {\n parts.push('- Events:');\n for (const e of f.events) parts.push(` - ${e.name}.v${e.version}`);\n }\n if (f.presentations?.length) {\n parts.push('- Presentations:');\n for (const p of f.presentations)\n parts.push(` - ${p.name}.v${p.version}`);\n }\n parts.push('');\n }\n }\n\n return parts.join('\\n');\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"migrations.d.ts","names":[],"sources":["../src/migrations.ts"],"sourcesContent":[],"mappings":";;;KAEY,iBAAA;UAEK,cAAA;EAFL,WAAA,EAAA,MAAA;EAEK,UAAA,EAAA,MAAc;AAK/B;AACQ,UADS,iBAAA,CACT;EAIM,IAAA,EAJN,iBAIM;EACC,WAAA,CAAA,EAAA,MAAA;EAAc,SAAA,CAAA,EAAA,MAAA;EAGZ,OAAA,CAAA,EAAA,MAAA;EAKA,SAAA,CAAA,EATH,cASqB,EAAA;EAKlB,UAAA,CAAA,EAbF,cAa0B,EAAA;AAKzC;AACI,UAhBa,mBAAA,SAA4B,iBAgBzC,CAAA;EACA,IAAA,EAAA,QAAA;EACA,GAAA,EAAA,MAAA;;AAEa,UAfA,iBAAA,SAA0B,iBAeS,CAAA;EAOnC,IAAA,EAAA,MAAA;EAKA,MAAA,EAAA,MAAA;AAQjB;AAGiB,UAjCA,uBAAA,SAAgC,iBAiChC,CAAA;EAOP,IAAA,EAAA,YAAA;EAS6B,SAAA,EAAA,MAAA;;KA5C3B,aAAA,GACR,sBACA,oBACA;UAEa,aAAA,SAAsB;;;;;;UAOtB,aAAA;MACX;SACG;;UAGQ,aAAA;QACT;QACA;;;cAMK,iBAAA;;iBAGI;UAOP;uCAS6B"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"migrations.js","names":["candidate: MigrationSpec | undefined"],"sources":["../src/migrations.ts"],"sourcesContent":["import type { OwnerShipMeta } from './ownership';\n\nexport type MigrationStepKind = 'schema' | 'data' | 'validation';\n\nexport interface MigrationCheck {\n description: string;\n expression: string;\n}\n\nexport interface MigrationStepBase {\n kind: MigrationStepKind;\n description?: string;\n timeoutMs?: number;\n retries?: number;\n preChecks?: MigrationCheck[];\n postChecks?: MigrationCheck[];\n}\n\nexport interface SchemaMigrationStep extends MigrationStepBase {\n kind: 'schema';\n sql: string;\n}\n\nexport interface DataMigrationStep extends MigrationStepBase {\n kind: 'data';\n script: string;\n}\n\nexport interface ValidationMigrationStep extends MigrationStepBase {\n kind: 'validation';\n assertion: string;\n}\n\nexport type MigrationStep =\n | SchemaMigrationStep\n | DataMigrationStep\n | ValidationMigrationStep;\n\nexport interface MigrationMeta extends OwnerShipMeta {\n /** Fully qualified migration name (e.g., \"sigil.db.2025_01_add_users\"). */\n name: string;\n /** Increment when the migration changes. */\n version: number;\n}\n\nexport interface MigrationPlan {\n up: MigrationStep[];\n down?: MigrationStep[];\n}\n\nexport interface MigrationSpec {\n meta: MigrationMeta;\n plan: MigrationPlan;\n dependencies?: string[];\n}\n\nconst migrationKey = (name: string, version: number) => `${name}.v${version}`;\n\nexport class MigrationRegistry {\n private readonly items = new Map<string, MigrationSpec>();\n\n register(spec: MigrationSpec): this {\n const key = migrationKey(spec.meta.name, spec.meta.version);\n if (this.items.has(key)) throw new Error(`Duplicate migration ${key}`);\n this.items.set(key, spec);\n return this;\n }\n\n list(): MigrationSpec[] {\n return [...this.items.values()].sort((a, b) =>\n compareKey(\n migrationKey(a.meta.name, a.meta.version),\n migrationKey(b.meta.name, b.meta.version)\n )\n );\n }\n\n get(name: string, version?: number): MigrationSpec | undefined {\n if (version != null) return this.items.get(migrationKey(name, version));\n let candidate: MigrationSpec | undefined;\n let max = -Infinity;\n for (const spec of this.items.values()) {\n if (spec.meta.name !== name) continue;\n if (spec.meta.version > max) {\n max = spec.meta.version;\n candidate = spec;\n }\n }\n return candidate;\n }\n}\n\nfunction compareKey(a: string, b: string) {\n return a < b ? -1 : a > b ? 1 : 0;\n}\n"],"mappings":";AAwDA,MAAM,gBAAgB,MAAc,YAAoB,GAAG,KAAK,IAAI;AAEpE,IAAa,oBAAb,MAA+B;CAC7B,AAAiB,wBAAQ,IAAI,KAA4B;CAEzD,SAAS,MAA2B;EAClC,MAAM,MAAM,aAAa,KAAK,KAAK,MAAM,KAAK,KAAK,QAAQ;AAC3D,MAAI,KAAK,MAAM,IAAI,IAAI,CAAE,OAAM,IAAI,MAAM,uBAAuB,MAAM;AACtE,OAAK,MAAM,IAAI,KAAK,KAAK;AACzB,SAAO;;CAGT,OAAwB;AACtB,SAAO,CAAC,GAAG,KAAK,MAAM,QAAQ,CAAC,CAAC,MAAM,GAAG,MACvC,WACE,aAAa,EAAE,KAAK,MAAM,EAAE,KAAK,QAAQ,EACzC,aAAa,EAAE,KAAK,MAAM,EAAE,KAAK,QAAQ,CAC1C,CACF;;CAGH,IAAI,MAAc,SAA6C;AAC7D,MAAI,WAAW,KAAM,QAAO,KAAK,MAAM,IAAI,aAAa,MAAM,QAAQ,CAAC;EACvE,IAAIA;EACJ,IAAI,MAAM;AACV,OAAK,MAAM,QAAQ,KAAK,MAAM,QAAQ,EAAE;AACtC,OAAI,KAAK,KAAK,SAAS,KAAM;AAC7B,OAAI,KAAK,KAAK,UAAU,KAAK;AAC3B,UAAM,KAAK,KAAK;AAChB,gBAAY;;;AAGhB,SAAO;;;AAIX,SAAS,WAAW,GAAW,GAAW;AACxC,QAAO,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"onboarding-base.d.ts","names":[],"sources":["../src/onboarding-base.ts"],"sourcesContent":[],"mappings":";;;;;;cASa,0BAAwB;;UAMnC,iBAAA,CAAA;IANW,UAAA,EAAA,KAAA;EAQA,CAAA;CAOX,CAAA;cAPW,2BAAyB;EAAA,EAAA,EAAA;IAAA,IAAA,EAOpC,iBAAA,CAAA,SAPoC,CAAA,MAAA,EAAA,MAAA,CAAA;IASzB,UAAA,EAAA,KAAA;EAwBX,CAAA;EAxBsC,cAAA,EAAA;IAAA,IAAA,6BAAA,CAAA,MAAA,EAAA,MAAA,CAAA;;;;AAAA,cAA3B,2BAA2B,cAAA,CAAA,WAAA,CAAA;EA2B3B,IAAA,EAAA;IAUX,IAAA,EAbA,iBAAA,CAAA,SAaA,CAAA,OAAA,EAAA,OAAA,CAAA;;;;;UArCsC,iBAAA,CAAA;;EA2BH,CAAA;EAAA,cAAA,EAAA;IAYxB,IAAA,6BAuBX,CAAA,MAAA,EAAA,MAAA,CAAA;IAAA,UAAA,EAvBqC,KAAA;EAAA,CAAA;;;cAZ1B,0BAAwB;;UAUnC,iBAAA,CAAA;;EAEqC,CAAA;EAAA,cAAA,EAAA;IAAA,IAAA,6BAAA,CAAA,MAAA,EAAA,MAAA,CAAA;IA0B1B,UAAA,EAAA,IAAA;EAQA,CAAA;EAuBX,IAAA,EAAA;IAvBwC,IAAA,6BAAA,CAAA,OAAA,EAAA,OAAA,CAAA;IAAA,UAAA,EAAA,IAAA;EAAA,CAAA;EAAA,SAAA,EAAA;IA0B7B,IAAA,6BAMX,KAAA,EAAA,MAAA,CAAA;IAEW,UAAA,EAAA,IAAA;EAQX,CAAA;;;IARuC,UAAA,EAAA,IAAA;EAAA,CAAA;AAUzC,CAAA,CAAA;AAwBE,cAtGW,0BAsGX,EAtGqC,YAsGrC,CA/EA,iBAAA,CAvBqC,cAAA,EAAA,WAsGrC,CAAA;EAxBqC,EAAA,EAAA;IAAA,IAAA,EA9EA,iBAAA,CAAA,SA8EA,CAAA,MAAA,EAAA,MAAA,CAAA;;;;;IAAA,UAAA,EAAA,IAAA;;;;;;;;;;;;;;;;cApD1B,6BAA2B;;UAMtC,iBAAA,CAAA;;;;cAEW,+BAA6B,aAuBxC,iBAAA,CAvBwC,cAAA,EAAA;;UAAA,iBAAA,CAAA;;;;;cA0B7B,6BAA2B;;UAMtC,iBAAA,CAAA;;;;cAEW,8BAA4B;;UAQvC,iBAAA,CAAA;;;;;;;;;;;;cAEW,yCAA0B;;UAwBrC,iBAAA,CAAA;;;;;UAxBqC,iBAAA,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"onboarding-base.js","names":["SchemaModel","ScalarTypeEnum"],"sources":["../src/onboarding-base.ts"],"sourcesContent":["/**\n * Shared base contracts for onboarding flows across verticals.\n * These operations are reusable for any app that needs multi-step onboarding with draft persistence.\n */\nimport { defineCommand, defineQuery } from './spec';\nimport { ScalarTypeEnum, SchemaModel } from '@lssm/lib.schema';\nimport { OwnersEnum, StabilityEnum } from './ownership';\n\n/** Save/update onboarding draft (auto-save during flow) */\nexport const SaveOnboardingDraftInput = new SchemaModel({\n name: 'SaveOnboardingDraftInput',\n description: 'Input for saving onboarding draft',\n fields: {\n data: { type: ScalarTypeEnum.JSON(), isOptional: false },\n },\n});\n\nexport const SaveOnboardingDraftOutput = new SchemaModel({\n name: 'SaveOnboardingDraftOutput',\n description: 'Output for saving onboarding draft',\n fields: {\n id: { type: ScalarTypeEnum.ID(), isOptional: false },\n organizationId: { type: ScalarTypeEnum.ID(), isOptional: false },\n },\n});\n\nexport const SaveOnboardingDraftBaseSpec = defineCommand({\n meta: {\n name: 'base.onboarding.saveDraft',\n version: 1,\n stability: StabilityEnum.Beta,\n owners: [OwnersEnum.PlatformSigil],\n tags: ['onboarding', 'draft'],\n description: 'Save or update onboarding draft for active organization',\n goal: 'Persist onboarding progress incrementally for resumption and safety',\n context:\n 'Auto-saves every few seconds during onboarding; enables users to leave and resume',\n },\n io: {\n input: SaveOnboardingDraftInput,\n output: SaveOnboardingDraftOutput,\n },\n policy: {\n auth: 'user',\n escalate: null,\n },\n transport: {\n gql: { field: 'saveOnboardingDraft' },\n rest: { method: 'POST' },\n },\n});\n\n/** Get current onboarding draft (on mount/restore) */\nexport const GetOnboardingDraftOutput = new SchemaModel({\n name: 'GetOnboardingDraftOutput',\n description: 'Onboarding draft payload',\n fields: {\n id: { type: ScalarTypeEnum.ID(), isOptional: true },\n organizationId: { type: ScalarTypeEnum.ID(), isOptional: true },\n data: { type: ScalarTypeEnum.JSON(), isOptional: true },\n createdAt: { type: ScalarTypeEnum.DateTime(), isOptional: true },\n updatedAt: { type: ScalarTypeEnum.DateTime(), isOptional: true },\n },\n});\n\nexport const GetOnboardingDraftBaseSpec = defineQuery({\n meta: {\n name: 'base.onboarding.getDraft',\n version: 1,\n stability: StabilityEnum.Beta,\n owners: [OwnersEnum.PlatformSigil],\n tags: ['onboarding', 'draft'],\n description: 'Get onboarding draft for active organization',\n goal: 'Retrieve saved onboarding progress',\n context: 'Called on mount to restore in-progress onboarding',\n },\n io: {\n input: null,\n output: GetOnboardingDraftOutput,\n },\n policy: {\n auth: 'user',\n escalate: null,\n },\n transport: {\n gql: { field: 'getOnboardingDraft' },\n rest: { method: 'GET' },\n },\n});\n\n/** Delete onboarding draft (cleanup after completion or cancel) */\nexport const DeleteOnboardingDraftOutput = new SchemaModel({\n name: 'DeleteOnboardingDraftOutput',\n description: 'Result of delete operation',\n fields: {\n ok: { type: ScalarTypeEnum.Boolean(), isOptional: false },\n },\n});\n\nexport const DeleteOnboardingDraftBaseSpec = defineCommand({\n meta: {\n name: 'base.onboarding.deleteDraft',\n version: 1,\n stability: StabilityEnum.Beta,\n owners: [OwnersEnum.PlatformSigil],\n tags: ['onboarding', 'draft'],\n description: 'Delete onboarding draft for active organization',\n goal: 'Clear draft after completion or if user wants to restart',\n context: 'Called after successful onboarding or explicit user reset',\n },\n io: {\n input: null,\n output: DeleteOnboardingDraftOutput,\n },\n policy: {\n auth: 'user',\n escalate: null,\n },\n transport: {\n gql: { field: 'deleteOnboardingDraft' },\n rest: { method: 'POST' },\n },\n});\n\n/** Complete onboarding (final submit, creates entities) */\nexport const CompleteOnboardingBaseInput = new SchemaModel({\n name: 'CompleteOnboardingBaseInput',\n description: 'Input for completing onboarding',\n fields: {\n data: { type: ScalarTypeEnum.JSON(), isOptional: false },\n },\n});\n\nexport const CompleteOnboardingBaseOutput = new SchemaModel({\n name: 'CompleteOnboardingBaseOutput',\n description: 'Result of onboarding completion',\n fields: {\n success: { type: ScalarTypeEnum.Boolean(), isOptional: false },\n userId: { type: ScalarTypeEnum.ID(), isOptional: true },\n organizationId: { type: ScalarTypeEnum.ID(), isOptional: true },\n },\n});\n\nexport const CompleteOnboardingBaseSpec = defineCommand({\n meta: {\n name: 'base.onboarding.complete',\n version: 1,\n stability: StabilityEnum.Beta,\n owners: [OwnersEnum.PlatformSigil],\n tags: ['onboarding'],\n description: 'Complete onboarding and finalize user/organization setup',\n goal: 'Transition from draft to active profile',\n context:\n 'Validates all required fields, creates/updates entities, marks onboarding complete',\n },\n io: {\n input: CompleteOnboardingBaseInput,\n output: CompleteOnboardingBaseOutput,\n },\n policy: {\n auth: 'user',\n escalate: null,\n },\n transport: {\n gql: { field: 'completeOnboarding' },\n rest: { method: 'POST' },\n },\n});\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"openapi.d.ts","names":[],"sources":["../src/openapi.ts"],"sourcesContent":[],"mappings":";;;;AAiCY,UArBK,aAAA,CAqBL;EACY,GAAA,EAAA,MAAA;EAAf,WAAA,CAAA,EAAA,MAAA;;AAEI,UAnBI,oBAAA,CAmBJ;EAAM,KAAA,CAAA,EAAA,MAAA;EA4BH,OAAA,CAAA,EAAA,MAAA;EACJ,WAAA,CAAA,EAAA,MAAA;EACD,OAAA,CAAA,EA7CC,aA6CD,EAAA;;KA1CN,mBAAA,GAAsB,MA2CT,CAAA,MAAA,EAAA,OAAA,CAAA;UAzCD,eAAA;;;;;;;YAOL;SACH,eAAe;;aAEX,eAAe;;;iBA4BZ,kBAAA,WACJ,wBACD,uBACR"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"openapi.js","names":["doc: OpenApiDocument","op: Record<string, unknown>","responses: Record<string, unknown>"],"sources":["../src/openapi.ts"],"sourcesContent":["/**\n * OpenAPI export utilities.\n *\n * @deprecated Import from @lssm/lib.contracts-transformers/openapi instead.\n * This file is kept for backwards compatibility.\n */\n\nimport type { SpecRegistry } from './registry';\nimport type { AnyContractSpec, ContractSpec } from './spec';\nimport { defaultRestPath, jsonSchemaForSpec } from './jsonschema';\nimport type { AnySchemaModel } from '@lssm/lib.schema';\n\nexport interface OpenApiServer {\n url: string;\n description?: string;\n}\n\nexport interface OpenApiExportOptions {\n title?: string;\n version?: string;\n description?: string;\n servers?: OpenApiServer[];\n}\n\ntype OpenApiSchemaObject = Record<string, unknown>;\n\nexport interface OpenApiDocument {\n openapi: '3.1.0';\n info: {\n title: string;\n version: string;\n description?: string;\n };\n servers?: OpenApiServer[];\n paths: Record<string, Record<string, unknown>>;\n components: {\n schemas: Record<string, OpenApiSchemaObject>;\n };\n}\n\nfunction toOperationId(name: string, version: number) {\n return `${name.replace(/\\./g, '_')}_v${version}`;\n}\n\nfunction toSchemaName(\n prefix: 'Input' | 'Output',\n name: string,\n version: number\n) {\n return `${prefix}_${toOperationId(name, version)}`;\n}\n\nfunction toHttpMethod(kind: 'command' | 'query', override?: 'GET' | 'POST') {\n const method = override ?? (kind === 'query' ? 'GET' : 'POST');\n return method.toLowerCase();\n}\n\nfunction toRestPath(spec: AnyContractSpec): string {\n const path =\n spec.transport?.rest?.path ??\n defaultRestPath(spec.meta.name, spec.meta.version);\n return path.startsWith('/') ? path : `/${path}`;\n}\n\nexport function openApiForRegistry(\n registry: SpecRegistry,\n options: OpenApiExportOptions = {}\n): OpenApiDocument {\n const specs = registry\n .listSpecs()\n .filter(\n (s): s is AnyContractSpec =>\n s.meta.kind === 'command' || s.meta.kind === 'query'\n )\n .slice()\n .sort((a, b) => {\n const byName = a.meta.name.localeCompare(b.meta.name);\n return byName !== 0 ? byName : a.meta.version - b.meta.version;\n });\n\n const doc: OpenApiDocument = {\n openapi: '3.1.0',\n info: {\n title: options.title ?? 'ContractSpec API',\n version: options.version ?? '0.0.0',\n ...(options.description ? { description: options.description } : {}),\n },\n ...(options.servers ? { servers: options.servers } : {}),\n paths: {},\n components: { schemas: {} },\n };\n\n for (const spec of specs) {\n const schema = jsonSchemaForSpec(\n spec as unknown as ContractSpec<AnySchemaModel, AnySchemaModel>\n );\n const method = toHttpMethod(spec.meta.kind, spec.transport?.rest?.method);\n const path = toRestPath(spec);\n\n const operationId = toOperationId(spec.meta.name, spec.meta.version);\n\n const pathItem = (doc.paths[path] ??= {});\n const op: Record<string, unknown> = {\n operationId,\n summary: spec.meta.description ?? spec.meta.name,\n description: spec.meta.description,\n tags: spec.meta.tags ?? [],\n 'x-contractspec': {\n name: spec.meta.name,\n version: spec.meta.version,\n kind: spec.meta.kind,\n },\n responses: {},\n };\n\n if (schema.input) {\n const inputName = toSchemaName(\n 'Input',\n spec.meta.name,\n spec.meta.version\n );\n doc.components.schemas[inputName] = schema.input as OpenApiSchemaObject;\n op['requestBody'] = {\n required: true,\n content: {\n 'application/json': {\n schema: { $ref: `#/components/schemas/${inputName}` },\n },\n },\n };\n }\n\n const responses: Record<string, unknown> = {};\n if (schema.output) {\n const outputName = toSchemaName(\n 'Output',\n spec.meta.name,\n spec.meta.version\n );\n doc.components.schemas[outputName] = schema.output as OpenApiSchemaObject;\n responses['200'] = {\n description: 'OK',\n content: {\n 'application/json': {\n schema: { $ref: `#/components/schemas/${outputName}` },\n },\n },\n };\n } else {\n responses['200'] = { description: 'OK' };\n }\n op['responses'] = responses;\n\n pathItem[method] = op;\n }\n\n return doc;\n}\n"],"mappings":";;;AAwCA,SAAS,cAAc,MAAc,SAAiB;AACpD,QAAO,GAAG,KAAK,QAAQ,OAAO,IAAI,CAAC,IAAI;;AAGzC,SAAS,aACP,QACA,MACA,SACA;AACA,QAAO,GAAG,OAAO,GAAG,cAAc,MAAM,QAAQ;;AAGlD,SAAS,aAAa,MAA2B,UAA2B;AAE1E,SADe,aAAa,SAAS,UAAU,QAAQ,SACzC,aAAa;;AAG7B,SAAS,WAAW,MAA+B;CACjD,MAAM,OACJ,KAAK,WAAW,MAAM,QACtB,gBAAgB,KAAK,KAAK,MAAM,KAAK,KAAK,QAAQ;AACpD,QAAO,KAAK,WAAW,IAAI,GAAG,OAAO,IAAI;;AAG3C,SAAgB,mBACd,UACA,UAAgC,EAAE,EACjB;CACjB,MAAM,QAAQ,SACX,WAAW,CACX,QACE,MACC,EAAE,KAAK,SAAS,aAAa,EAAE,KAAK,SAAS,QAChD,CACA,OAAO,CACP,MAAM,GAAG,MAAM;EACd,MAAM,SAAS,EAAE,KAAK,KAAK,cAAc,EAAE,KAAK,KAAK;AACrD,SAAO,WAAW,IAAI,SAAS,EAAE,KAAK,UAAU,EAAE,KAAK;GACvD;CAEJ,MAAMA,MAAuB;EAC3B,SAAS;EACT,MAAM;GACJ,OAAO,QAAQ,SAAS;GACxB,SAAS,QAAQ,WAAW;GAC5B,GAAI,QAAQ,cAAc,EAAE,aAAa,QAAQ,aAAa,GAAG,EAAE;GACpE;EACD,GAAI,QAAQ,UAAU,EAAE,SAAS,QAAQ,SAAS,GAAG,EAAE;EACvD,OAAO,EAAE;EACT,YAAY,EAAE,SAAS,EAAE,EAAE;EAC5B;AAED,MAAK,MAAM,QAAQ,OAAO;EACxB,MAAM,SAAS,kBACb,KACD;EACD,MAAM,SAAS,aAAa,KAAK,KAAK,MAAM,KAAK,WAAW,MAAM,OAAO;EACzE,MAAM,OAAO,WAAW,KAAK;EAE7B,MAAM,cAAc,cAAc,KAAK,KAAK,MAAM,KAAK,KAAK,QAAQ;EAEpE,MAAM,WAAY,IAAI,MAAM,UAAU,EAAE;EACxC,MAAMC,KAA8B;GAClC;GACA,SAAS,KAAK,KAAK,eAAe,KAAK,KAAK;GAC5C,aAAa,KAAK,KAAK;GACvB,MAAM,KAAK,KAAK,QAAQ,EAAE;GAC1B,kBAAkB;IAChB,MAAM,KAAK,KAAK;IAChB,SAAS,KAAK,KAAK;IACnB,MAAM,KAAK,KAAK;IACjB;GACD,WAAW,EAAE;GACd;AAED,MAAI,OAAO,OAAO;GAChB,MAAM,YAAY,aAChB,SACA,KAAK,KAAK,MACV,KAAK,KAAK,QACX;AACD,OAAI,WAAW,QAAQ,aAAa,OAAO;AAC3C,MAAG,iBAAiB;IAClB,UAAU;IACV,SAAS,EACP,oBAAoB,EAClB,QAAQ,EAAE,MAAM,wBAAwB,aAAa,EACtD,EACF;IACF;;EAGH,MAAMC,YAAqC,EAAE;AAC7C,MAAI,OAAO,QAAQ;GACjB,MAAM,aAAa,aACjB,UACA,KAAK,KAAK,MACV,KAAK,KAAK,QACX;AACD,OAAI,WAAW,QAAQ,cAAc,OAAO;AAC5C,aAAU,SAAS;IACjB,aAAa;IACb,SAAS,EACP,oBAAoB,EAClB,QAAQ,EAAE,MAAM,wBAAwB,cAAc,EACvD,EACF;IACF;QAED,WAAU,SAAS,EAAE,aAAa,MAAM;AAE1C,KAAG,eAAe;AAElB,WAAS,UAAU;;AAGrB,QAAO"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"openbanking.docblock.d.ts","names":[],"sources":["../../../src/openbanking/docs/openbanking.docblock.ts"],"sourcesContent":[],"mappings":";;;cAGa,sCAAsC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"openbanking.docblock.js","names":["tech_contracts_openbanking_DocBlocks: DocBlock[]"],"sources":["../../../src/openbanking/docs/openbanking.docblock.ts"],"sourcesContent":["import type { DocBlock } from '@lssm/lib.contracts/docs';\nimport { registerDocBlocks } from '../../registry';\n\nexport const tech_contracts_openbanking_DocBlocks: DocBlock[] = [\n {\n id: 'docs.tech.contracts.openbanking',\n title: 'Open Banking (Powens) Overview',\n summary:\n 'The Pocket Family Office vertical now supports read-only open banking capabilities powered by Powens. This doc summarises the contract surfaces, canonical data models, workflows, telemetry, and guardrails introduced to make Powens a first-class integration.',\n kind: 'reference',\n visibility: 'public',\n route: '/docs/tech/contracts/openbanking',\n tags: ['tech', 'contracts', 'openbanking'],\n body: '# Open Banking (Powens) Overview\\n\\nThe Pocket Family Office vertical now supports read-only open banking capabilities powered by Powens. This doc summarises the contract surfaces, canonical data models, workflows, telemetry, and guardrails introduced to make Powens a first-class integration.\\n\\n## Integration Spec\\n\\nPowens is registered under `openbanking.powens` with category `open-banking` and currently supports the BYOK ownership mode. The spec exposes three read-only capabilities:\\n\\n- `openbanking.accounts.read`\\n- `openbanking.transactions.read`\\n- `openbanking.balances.read`\\n\\nConfiguration and secrets are separated:\\n\\n| Config Field | Description |\\n| --- | --- |\\n| `environment` | Powens environment (`sandbox` \\\\| `production`) |\\n| `baseUrl?` | Optional API base URL override |\\n| `region?` | Optional Powens region identifier |\\n| `pollingIntervalMs?` | Optional custom sync cadence |\\n\\n| Secret Field | Description |\\n| --- | --- |\\n| `clientId` | Powens OAuth client identifier |\\n| `clientSecret` | Powens OAuth client secret |\\n| `apiKey?` | Optional supplemental Powens API key |\\n| `webhookSecret?` | Optional webhook signing secret |\\n\\n## Canonical Data Models\\n\\nCanonical schemas live in `@lssm/lib.contracts/integrations/openbanking/models`:\\n\\n- `BankAccountRecord` \\u2013 account metadata (institution, IBAN/BIC, masked numbers, balances, sync timestamps)\\n- `BankTransactionRecord` \\u2013 transaction ledger (amounts, categories, counterparty, status)\\n- `AccountBalanceRecord` \\u2013 balance snapshots per account and balance type\\n\\nThese schemas power the vertical contracts and workflows, ensuring downstream features never use raw Powens payloads directly.\\n\\n## Provider Implementation\\n\\n`PowensOpenBankingProvider` wraps `PowensClient` which handles OAuth token management, request retries, and error mapping. The provider maps Powens payloads to the canonical interfaces exported from `integrations/providers/openbanking`.\\n\\nFactory support lives in `IntegrationProviderFactory.createOpenBankingProvider`, which validates configuration, loads BYOK secrets, and instantiates the provider.\\n\\n## Contracts\\n\\nCommand/query contracts exist under `integrations/openbanking/contracts`:\\n\\n- `openbanking.accounts.sync` & `openbanking.accounts.list`\\n- `openbanking.transactions.sync` & `openbanking.transactions.list`\\n- `openbanking.balances.refresh` & `openbanking.balances.get`\\n\\nThe Pocket Family Office bundle also exposes `pfo.openbanking.generate-overview`, which aggregates balances and transactions into a derived knowledge document.\\n\\n## Workflows\\n\\nNew workflow specs (all requiring the `primaryOpenBanking` slot) orchestrate the sync flows:\\n\\n- `pfo.workflow.sync-openbanking-accounts`\\n- `pfo.workflow.sync-openbanking-transactions`\\n- `pfo.workflow.refresh-openbanking-balances`\\n- `pfo.workflow.generate-openbanking-overview`\\n\\nEach workflow runs against the Powens provider, persists canonical records, and emits telemetry.\\n\\n## Knowledge & LLM Exposure\\n\\nRaw Powens payloads are never stored in knowledge spaces. Instead, `knowledge.financial-overview` captures derived summaries (cashflow, category breakdowns, balance trends) produced by `pfo.openbanking.generate-overview`. The space is `operational` category with 180-day retention and automation write access.\\n\\nWhen exposing data to LLMs or analytics:\\n\\n- Use derived summaries only.\\n- Redact PII fields using `redactOpenBankingTelemetryPayload`.\\n- Never emit IBANs, unmasked account numbers, or counterparty detail in telemetry/logs.\\n\\n## Telemetry\\n\\nTelemetry constants live in `integrations/openbanking/telemetry`. Key events:\\n\\n- `openbanking.accounts.synced`\\n- `openbanking.transactions.synced`\\n- `openbanking.balances.refreshed`\\n- `openbanking.overview.generated`\\n\\nAll events require tenant/app/blueprint/config metadata, and sensitive properties are flagged to avoid accidental leakage.\\n\\n## Guardrails\\n\\n`ensurePrimaryOpenBankingIntegration` verifies `primaryOpenBanking` is bound and healthy before workflows proceed. Runtime pre-flight checks already block workflows when the connection is disconnected or in error status.\\n\\n## Blueprint & Tenant Defaults\\n\\n`pocketFamilyOfficeBlueprint` now includes:\\n\\n- `primaryOpenBanking` slot (required, BYOK)\\n- `openbanking.*.read` capabilities enabled by default\\n- Workflow bindings for the new sync flows\\n\\nSample tenant bindings (`tenant.sample.ts`) reference `conn-powens-primary` and bind the new knowledge space.\\n\\n---\\n\\nFollow this doc when extending open banking support (e.g., adding payment initiation, additional providers, or expanded analytics) to keep the integration consistent and audited.\\n\\n\\n\\n\\n\\n',\n },\n];\nregisterDocBlocks(tech_contracts_openbanking_DocBlocks);\n"],"mappings":";;;;AAGA,MAAaA,uCAAmD,CAC9D;CACE,IAAI;CACJ,OAAO;CACP,SACE;CACF,MAAM;CACN,YAAY;CACZ,OAAO;CACP,MAAM;EAAC;EAAQ;EAAa;EAAc;CAC1C,MAAM;CACP,CACF;AACD,kBAAkB,qCAAqC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ownership.d.ts","names":[],"sources":["../src/ownership.ts"],"sourcesContent":[],"mappings":";cAEa;EAAA,SAAA,IAAA,EAAA,MAOH;EACE,SAAA,UAAS,EAAA,aAAW;EAGnB,SAAA,YASH,EAAA,cAAA;EACE,SAAK,IAAA,EAAA,MACL;EAGC,SAAmB,MAAA,EAAA,QAAA;EAGnB,SAAA,UAcH,EAAA,YAAA;AACV,CAAA;AAEa,KArCD,SAAA,GAqCgB,CAAA,OArCI,aAqCJ,CAAA,CAAA,MAAA,OArCgC,aAqChC,CAAA;AAEX,cApCJ,UAoCiB,EAAA;EAKpB,SAAA,eAAA,EAAA,kBAAA;EACF,SAAA,YAAA,EAAA,eAAA;EACK,SAAA,gBAAA,EAAA,mBAAA;EAAS,SAAA,aAAA,EAAA,gBAAA;;;;;;KAjCV,KAAA,WACA,yBAAyB;cAGxB;;;;;;;;;;cAGA;;;;;;;;;;;;;;;KAeD,GAAA,WAAc,uBAAuB;cAEpC;;;;;;;;;;;;;;;UAEI,aAAA;;;;;UAKP;QACF;aACK"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ownership.js","names":[],"sources":["../src/ownership.ts"],"sourcesContent":["// Canonical ownership/stability/tags enums and shared meta\n\nexport const StabilityEnum = {\n Idea: 'idea',\n InCreation: 'in_creation',\n Experimental: 'experimental',\n Beta: 'beta',\n Stable: 'stable',\n Deprecated: 'deprecated',\n} as const;\nexport type Stability = (typeof StabilityEnum)[keyof typeof StabilityEnum];\n\n// Provide curated owner identifiers (business/product oriented), allow extension by string\nexport const OwnersEnum = {\n ProductColiving: 'product.coliving',\n ProductStrit: 'product.strit',\n ProductArtisanos: 'product.artisanos',\n PlatformSigil: 'platform.sigil',\n PlatformMarketplace: 'platform.marketplace',\n PlatformContent: 'platform.content',\n PlatformFeatureFlags: 'platform.featureflags',\n PlatformFinance: 'platform.finance',\n} as const;\nexport type Owner =\n | (typeof OwnersEnum)[keyof typeof OwnersEnum]\n | (string & {});\n// Back-compat alias\nexport const Owners = OwnersEnum;\n\n// Provide common tags, allow extension by string\nexport const TagsEnum = {\n Spots: 'spots',\n Collectivity: 'collectivity',\n Marketplace: 'marketplace',\n Sellers: 'sellers',\n Auth: 'auth',\n Login: 'login',\n Signup: 'signup',\n Guide: 'guide',\n Docs: 'docs',\n I18n: 'i18n',\n Incident: 'incident',\n Automation: 'automation',\n Hygiene: 'hygiene',\n} as const;\nexport type Tag = (typeof TagsEnum)[keyof typeof TagsEnum] | (string & {});\n// Back-compat alias\nexport const Tags = TagsEnum;\n\nexport interface OwnerShipMeta {\n version?: number;\n title: string;\n description: string;\n domain: string;\n owners: Owner[];\n tags: Tag[];\n stability: Stability;\n}\n"],"mappings":";AAEA,MAAa,gBAAgB;CAC3B,MAAM;CACN,YAAY;CACZ,cAAc;CACd,MAAM;CACN,QAAQ;CACR,YAAY;CACb;AAID,MAAa,aAAa;CACxB,iBAAiB;CACjB,cAAc;CACd,kBAAkB;CAClB,eAAe;CACf,qBAAqB;CACrB,iBAAiB;CACjB,sBAAsB;CACtB,iBAAiB;CAClB;AAKD,MAAa,SAAS;AAGtB,MAAa,WAAW;CACtB,OAAO;CACP,cAAc;CACd,aAAa;CACb,SAAS;CACT,MAAM;CACN,OAAO;CACP,QAAQ;CACR,OAAO;CACP,MAAM;CACN,MAAM;CACN,UAAU;CACV,YAAY;CACZ,SAAS;CACV;AAGD,MAAa,OAAO"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"policy.docblock.d.ts","names":[],"sources":["../../../src/policy/docs/policy.docblock.ts"],"sourcesContent":[],"mappings":";;;cAGa,iCAAiC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"policy.docblock.js","names":["tech_contracts_policy_DocBlocks: DocBlock[]"],"sources":["../../../src/policy/docs/policy.docblock.ts"],"sourcesContent":["import type { DocBlock } from '@lssm/lib.contracts/docs';\nimport { registerDocBlocks } from '../../registry';\n\nexport const tech_contracts_policy_DocBlocks: DocBlock[] = [\n {\n id: 'docs.tech.contracts.policy',\n title: 'PolicySpec & PolicyEngine',\n summary:\n '`PolicySpec` gives a declarative, typed home for access-control logic covering:',\n kind: 'reference',\n visibility: 'public',\n route: '/docs/tech/contracts/policy',\n tags: ['tech', 'contracts', 'policy'],\n body: \"# PolicySpec & PolicyEngine\\n\\n## Purpose\\n\\n`PolicySpec` gives a declarative, typed home for access-control logic covering:\\n- **Who** can perform an action (ABAC/ReBAC style rules)\\n- **What** they can access (resources + optional field-level overrides)\\n- **When** special conditions apply (contextual expressions)\\n- **How** PII should be handled (consent/retention hints)\\n\\n`PolicyEngine` evaluates one or more policies and returns an `allow`/`deny` decision, field-level outcomes, and PII metadata suitable for downstream enforcement (`SpecRegistry` \\u2192 `ctx.decide`).\\n\\n## Location\\n\\n- Types & registry: `packages/libs/contracts/src/policy/spec.ts`\\n- Runtime evaluation: `packages/libs/contracts/src/policy/engine.ts`\\n- Tests: `packages/.../policy/engine.test.ts`\\n\\n## `PolicySpec`\\n\\n```ts\\nexport interface PolicySpec {\\n meta: PolicyMeta; // ownership metadata + { name, version, scope? }\\n rules: PolicyRule[]; // allow/deny rules for actions\\n fieldPolicies?: FieldPolicyRule[];\\n pii?: { fields: string[]; consentRequired?: boolean; retentionDays?: number };\\n relationships?: RelationshipDefinition[];\\n consents?: ConsentDefinition[];\\n rateLimits?: RateLimitDefinition[];\\n opa?: { package: string; decision?: string };\\n}\\n```\\n\\n- `PolicyRule`\\n - `effect`: `'allow' | 'deny'`\\n - `actions`: e.g., `['read', 'write', 'delete']` (string namespace is flexible)\\n - `subject`: `{ roles?: string[]; attributes?: { attr: matcher } }`\\n - `resource`: `{ type: string; fields?: string[]; attributes?: {...} }`\\n - `relationships`: `{ relation, objectId?, objectType? }[]` \\u2192 ReBAC checks (use `objectId: '$resource'` to target the current resource)\\n - `requiresConsent`: `['consent_id']` \\u2192 references spec-level consent definitions\\n - `flags`: feature flags that must be enabled (`DecisionContext.flags`)\\n - `rateLimit`: string reference to `rateLimits` entry or inline object `{ rpm, key?, windowSeconds?, burst? }`\\n - `escalate`: `'human_review' | null` to indicate manual approval\\n - `conditions`: optional expression snippets evaluated against `{ subject, resource, context }`\\n- `FieldPolicyRule`\\n - `field`: dot-path string (e.g., `contact.email`)\\n - `actions`: subset of `['read', 'write']`\\n - Same `subject` / `resource` / `conditions` shape\\n - Useful for redacting specific fields, even when the global action is allowed\\n- `RelationshipDefinition`\\n - Canonical tuples for relationship graph (`subjectType`, `relation`, `objectType`, `transitive?`)\\n- `ConsentDefinition`\\n - `{ id, scope, purpose, lawfulBasis?, expiresInDays?, required? }`\\n- `RateLimitDefinition`\\n - `{ id, rpm, key?, windowSeconds?, burst? }`\\n- `PolicyRef`\\n - `{ name: string; version: number }` \\u2192 attach to contract specs / workflows\\n\\n## Registry\\n\\n```ts\\nconst registry = new PolicyRegistry();\\nregistry.register(CorePolicySpec);\\nconst spec = registry.get('core.default', 1);\\n```\\n\\nGuarantees uniqueness per `(name, version)` and exposes helpers to resolve highest versions.\\n\\n## Engine\\n\\n```ts\\nconst engine = new PolicyEngine(policyRegistry);\\n\\nconst decision = engine.decide({\\n action: 'read',\\n subject: { roles: ['admin'] },\\n resource: { type: 'resident', fields: ['contact.email'] },\\n policies: [{ name: 'core.default', version: 1 }],\\n});\\n/*\\n{\\n effect: 'allow',\\n reason: 'core.default',\\n fieldDecisions: [{ field: 'contact.email', effect: 'allow' }],\\n pii: { fields: ['contact.email'], consentRequired: true }\\n}\\n*/\\n```\\n\\n- First matching **deny** wins; otherwise the first **allow** is returned.\\n- Field policies are aggregated across referenced policies:\\n - Later denies override earlier allows for a given field.\\n - Returned as `fieldDecisions` to simplify downstream masking.\\n- PII metadata is surfaced when defined to help adapt logging/telemetry.\\n\\n### Expression Support\\n\\nConditions accept small JS snippets (e.g., `subject.attributes.orgId === context.orgId`). The engine runs them in a constrained scope (`subject`, `resource`, `context`) without access to global state.\\n\\n### ReBAC & Relationships\\n\\n- Provide relationship tuples via `PolicySpec.relationships` for documentation/validation.\\n- Reference them inside rules with `relationships: [{ relation: 'manager_of', objectType: 'resident', objectId: '$resource' }]`.\\n- The execution context must populate `subject.relationships` (`[{ relation, object, objectType }]`) for the engine to evaluate ReBAC guards.\\n\\n### Consent & Rate Limits\\n\\n- Declare reusable consent definitions under `consents`. Rules list the IDs they require; if a user session lacks the consent (`DecisionContext.consents`), the engine returns `effect: 'deny'` with `reason: 'consent_required'` and enumerates missing consents.\\n- Attach rate limits either inline or via `rateLimits` references. When a rule matches, the engine surfaces `{ rpm, key, windowSeconds?, burst? }` so callers can feed it to shared limiters.\\n\\n### OPA Adapter\\n\\n- `OPAPolicyAdapter` bridges engine decisions to Open Policy Agent (OPA). It forwards the evaluation context + policies to OPA and merges any override result (`effect`, `reason`, `fieldDecisions`, `requiredConsents`).\\n- Use when migrating to OPA policies or running defense-in-depth: call `engine.decide()`, then pass the preliminary decision to `adapter.evaluate(...)`. The adapter marks merged decisions with `evaluatedBy: 'opa'`.\\n- OPA inputs include meta, rules, relationships, rate limits, and consent catalogs to simplify policy authoring on the OPA side.\\n\\n## Contract Integration\\n\\n`ContractSpec.policy` now supports:\\n\\n```ts\\npolicy: {\\n auth: 'anonymous' | 'user' | 'admin';\\n ...\\n policies?: PolicyRef[]; // policies evaluated before execution\\n fieldPolicies?: { // field hints (read/write) per policy\\n field: string;\\n actions: ('read' | 'write')[];\\n policy?: PolicyRef;\\n }[];\\n}\\n```\\n\\nAdapters can resolve refs through a shared `PolicyEngine` and populate `ctx.decide` so `SpecRegistry.execute` benefits from centralized enforcement.\\n\\n## Authoring Guidelines\\n\\n1. Prefer **allow-by-default** policies but explicitly deny sensitive flows (defense-in-depth).\\n2. Keep rule scopes narrow (per feature/operation) and compose multiple `PolicyRef`s when necessary.\\n3. Store PII field lists here to avoid duplication across logs/telemetry.\\n4. Use explicit rule reasons for auditability and better developer feedback.\\n5. Treat versioning seriously; bump `meta.version` whenever behavior changes.\\n\\n## Future Enhancements\\n\\n- Richer expression language (composable predicates, time-based conditions).\\n- Multi-tenant relationship graph services (store/resolve relationships at scale).\\n- Tooling that auto-generates docs/tests for policies referenced in specs.\\n\\n\",\n },\n];\nregisterDocBlocks(tech_contracts_policy_DocBlocks);\n"],"mappings":";;;;AAGA,MAAaA,kCAA8C,CACzD;CACE,IAAI;CACJ,OAAO;CACP,SACE;CACF,MAAM;CACN,YAAY;CACZ,OAAO;CACP,MAAM;EAAC;EAAQ;EAAa;EAAS;CACrC,MAAM;CACP,CACF;AACD,kBAAkB,gCAAgC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"engine.d.ts","names":[],"sources":["../../src/policy/engine.ts"],"sourcesContent":[],"mappings":";;;;UAaiB,mBAAA;;EAAA,MAAA,EAAA,MAAA;EAMA,UAAA,CAAA,EAAA,MAAc;AAM/B;AAOiB,UAbA,cAAA,CAae;EACrB,KAAA,CAAA,EAAA,MAAA,EAAA;EACC,UAAA,CAAA,EAbG,MAaH,CAAA,MAAA,EAAA,OAAA,CAAA;EACA,aAAA,CAAA,EAbM,mBAaN,EAAA;;AAES,UAZJ,eAAA,CAYI;EAWR,IAAA,EAAA,MAAA;EAC4B,EAAA,CAAA,EAAA,MAAA;EAEzB,MAAA,CAAA,EAAA,MAAA,EAAA;EAAkB,UAAA,CAAA,EAtBnB,MAsBmB,CAAA,MAAA,EAAA,OAAA,CAAA;;UAnBjB,eAAA;WACN;YACC;YACA;;YAEA;;;;cAWC,YAAA;;wBAC4B;gBAEzB,kBAAkB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"engine.js","names":["registry: PolicyRegistry","allowReason: string | undefined","appliedRateLimit: PolicyDecision['rateLimit']","escalate: 'human_review' | null | undefined","specs: PolicySpec[]","allowMatch: RuleEvaluation | undefined","evaluation: RuleEvaluation","definition: RateLimitDefinition | undefined"],"sources":["../../src/policy/engine.ts"],"sourcesContent":["import {\n PolicyRegistry,\n type PolicyRef,\n type PolicySpec,\n type PolicyRule,\n type FieldPolicyRule,\n type PolicyCondition,\n type ConsentDefinition,\n type RateLimitDefinition,\n type RelationshipMatcher,\n} from './spec';\nimport type { PolicyDecision, FieldLevelDecision } from '../types';\n\nexport interface SubjectRelationship {\n relation: string;\n object: string;\n objectType?: string;\n}\n\nexport interface SubjectContext {\n roles?: string[];\n attributes?: Record<string, unknown>;\n relationships?: SubjectRelationship[];\n}\n\nexport interface ResourceContext {\n type: string;\n id?: string;\n fields?: string[];\n attributes?: Record<string, unknown>;\n}\n\nexport interface DecisionContext {\n subject: SubjectContext;\n resource: ResourceContext;\n context?: Record<string, unknown>;\n action: string;\n policies: PolicyRef[];\n consents?: string[];\n flags?: string[];\n}\n\ninterface RuleEvaluation {\n rule: PolicyRule;\n missingConsents: ConsentDefinition[];\n rateLimit?: PolicyDecision['rateLimit'];\n}\n\nexport class PolicyEngine {\n constructor(private readonly registry: PolicyRegistry) {}\n\n decide(input: DecisionContext): PolicyDecision {\n const policies = this.resolvePolicies(input.policies);\n let allowReason: string | undefined;\n let appliedRateLimit: PolicyDecision['rateLimit'];\n let escalate: 'human_review' | null | undefined;\n\n for (const policy of policies) {\n const match = this.matchRuleSet(policy, input);\n if (!match) continue;\n if (match.rule.effect === 'deny') {\n return {\n effect: 'deny',\n reason: match.rule.reason ?? policy.meta.name,\n requiredConsents: match.missingConsents.length\n ? match.missingConsents\n : undefined,\n evaluatedBy: 'engine',\n };\n }\n if (match.rule.effect === 'allow') {\n if (match.missingConsents.length) {\n return {\n effect: 'deny',\n reason: 'consent_required',\n requiredConsents: match.missingConsents,\n evaluatedBy: 'engine',\n };\n }\n if (!allowReason) {\n allowReason = match.rule.reason ?? policy.meta.name;\n }\n if (!appliedRateLimit && match.rateLimit) {\n appliedRateLimit = match.rateLimit;\n }\n if (!escalate && match.rule.escalate) {\n escalate = match.rule.escalate;\n }\n }\n }\n\n const fieldDecisions = this.evaluateFields(policies, input);\n const pii = policies.find((p) => p.pii)?.pii;\n const escalateValue =\n typeof escalate === 'undefined' ? undefined : escalate;\n\n return {\n effect: allowReason ? 'allow' : 'deny',\n reason: allowReason,\n rateLimit: appliedRateLimit,\n escalate: escalateValue,\n fieldDecisions: fieldDecisions.length ? fieldDecisions : undefined,\n pii,\n evaluatedBy: 'engine',\n };\n }\n\n private resolvePolicies(refs: PolicyRef[]): PolicySpec[] {\n const specs: PolicySpec[] = [];\n for (const ref of refs) {\n const spec = this.registry.get(ref.name, ref.version);\n if (!spec)\n throw new Error(\n `PolicyEngine: policy not found ${ref.name}.v${ref.version}`\n );\n specs.push(spec);\n }\n return specs;\n }\n\n private matchRuleSet(\n policy: PolicySpec,\n input: DecisionContext\n ): RuleEvaluation | undefined {\n let allowMatch: RuleEvaluation | undefined;\n for (const rule of policy.rules) {\n if (!rule.actions.includes(input.action)) continue;\n if (!matchesSubject(rule, input.subject)) continue;\n if (!matchesResource(rule, input.resource)) continue;\n if (!matchesFlags(rule, input)) continue;\n if (!matchesRelationships(rule.relationships, input)) continue;\n if (!matchesConditions(rule, input)) continue;\n const missingConsents = collectMissingConsents(rule, policy, input);\n const rateLimit = resolveRateLimit(rule, policy, input);\n const evaluation: RuleEvaluation = {\n rule,\n missingConsents,\n rateLimit,\n };\n if (rule.effect === 'deny') return evaluation;\n if (rule.effect === 'allow' && !allowMatch) allowMatch = evaluation;\n }\n return allowMatch;\n }\n\n private evaluateFields(\n policies: PolicySpec[],\n input: DecisionContext\n ): FieldLevelDecision[] {\n const out = new Map<string, FieldLevelDecision>();\n for (const policy of policies) {\n if (!policy.fieldPolicies) continue;\n for (const rule of policy.fieldPolicies) {\n if (!rule.actions.includes(mapActionToFieldAction(input.action)))\n continue;\n if (!matchesSubject(rule, input.subject)) continue;\n if (!matchesResource(rule, input.resource)) continue;\n if (!matchesConditions(rule, input)) continue;\n const existing = out.get(rule.field);\n if (rule.effect === 'deny') {\n out.set(rule.field, {\n field: rule.field,\n effect: 'deny',\n reason: rule.reason ?? policy.meta.name,\n });\n } else if (!existing) {\n out.set(rule.field, {\n field: rule.field,\n effect: 'allow',\n reason: rule.reason ?? policy.meta.name,\n });\n }\n }\n }\n return [...out.values()];\n }\n}\n\nfunction mapActionToFieldAction(action: string): 'read' | 'write' {\n if (action.startsWith('write')) return 'write';\n return 'read';\n}\n\nfunction matchesSubject(\n rule: { subject?: PolicyRule['subject'] | FieldPolicyRule['subject'] },\n subject: SubjectContext\n): boolean {\n const matcher = rule.subject;\n if (!matcher) return true;\n if (matcher.roles?.length) {\n const roles = subject.roles ?? [];\n const hasRole = matcher.roles.some((role) => roles.includes(role));\n if (!hasRole) return false;\n }\n if (matcher.attributes) {\n const attributes = subject.attributes ?? {};\n if (!matchAttributes(matcher.attributes, attributes)) return false;\n }\n return true;\n}\n\nfunction matchesResource(\n rule: { resource?: PolicyRule['resource'] | FieldPolicyRule['resource'] },\n resource: ResourceContext\n): boolean {\n const matcher = rule.resource;\n if (!matcher) return true;\n if (matcher.type && matcher.type !== resource.type) return false;\n if (matcher.fields?.length) {\n const targetFields = resource.fields ?? [];\n if (!matcher.fields.some((field) => targetFields.includes(field)))\n return false;\n }\n if (matcher.attributes) {\n const attributes = resource.attributes ?? {};\n if (!matchAttributes(matcher.attributes, attributes)) return false;\n }\n return true;\n}\n\nfunction matchesFlags(rule: PolicyRule, input: DecisionContext): boolean {\n if (!rule.flags?.length) return true;\n const available = new Set<string>();\n if (input.flags) {\n for (const flag of input.flags) available.add(flag);\n }\n const attributeFlags = input.subject.attributes?.featureFlags;\n if (Array.isArray(attributeFlags)) {\n for (const flag of attributeFlags) available.add(flag);\n }\n return rule.flags.every((flag) => available.has(flag));\n}\n\nfunction matchesRelationships(\n matchers: RelationshipMatcher[] | undefined,\n input: DecisionContext\n): boolean {\n if (!matchers || matchers.length === 0) return true;\n const relationships = input.subject.relationships ?? [];\n const resourceId = getResourceId(input.resource);\n const resourceType = input.resource.type;\n\n return matchers.every((matcher) =>\n relationships.some((relation) => {\n if (relation.relation !== matcher.relation) return false;\n\n const typeMatches =\n !matcher.objectType ||\n relation.objectType === matcher.objectType ||\n matcher.objectType === resourceType;\n\n if (!typeMatches) return false;\n\n if (!matcher.objectId) return true;\n\n if (matcher.objectId === '$resource') {\n if (resourceId) {\n return relation.object === resourceId;\n }\n return (\n relation.object === resourceType ||\n relation.objectType === resourceType\n );\n }\n\n return relation.object === matcher.objectId;\n })\n );\n}\n\nfunction matchesConditions(\n rule: { conditions?: PolicyCondition[] },\n input: DecisionContext\n): boolean {\n if (!rule.conditions || rule.conditions.length === 0) return true;\n return rule.conditions.every((condition) =>\n evaluateCondition(condition.expression, input)\n );\n}\n\nfunction matchAttributes(\n matcher: Record<string, import('./spec').AttributeMatcher>,\n actual: Record<string, unknown>\n): boolean {\n for (const [key, attrMatcher] of Object.entries(matcher)) {\n const value = actual[key];\n if (attrMatcher.exists && typeof value === 'undefined') return false;\n if (typeof attrMatcher.equals !== 'undefined') {\n if (value !== attrMatcher.equals) return false;\n }\n if (attrMatcher.oneOf && !attrMatcher.oneOf.includes(value)) return false;\n }\n return true;\n}\n\nfunction collectMissingConsents(\n rule: PolicyRule,\n policy: PolicySpec,\n input: DecisionContext\n): ConsentDefinition[] {\n if (!rule.requiresConsent?.length) return [];\n const granted = new Set(input.consents ?? []);\n const missingIds = rule.requiresConsent.filter((id) => !granted.has(id));\n if (missingIds.length === 0) return [];\n return resolveConsentDefinitions(policy, missingIds);\n}\n\nfunction resolveConsentDefinitions(\n policy: PolicySpec,\n ids: string[]\n): ConsentDefinition[] {\n const catalog = policy.consents ?? [];\n return ids.map((id) => {\n const found = catalog.find((consent) => consent.id === id);\n return (\n found ?? {\n id,\n scope: 'unspecified',\n purpose: 'unspecified',\n description: `Consent \"${id}\" required by ${policy.meta.name}`,\n required: true,\n }\n );\n });\n}\n\nfunction resolveRateLimit(\n rule: PolicyRule,\n policy: PolicySpec,\n input: DecisionContext\n): PolicyDecision['rateLimit'] | undefined {\n if (!rule.rateLimit) return undefined;\n const definition: RateLimitDefinition | undefined =\n typeof rule.rateLimit === 'string'\n ? (policy.rateLimits ?? []).find((item) => item.id === rule.rateLimit)\n : rule.rateLimit;\n\n if (!definition) {\n throw new Error(\n `PolicyEngine: rate limit \"${String(\n rule.rateLimit\n )}\" not declared in ${policy.meta.name}`\n );\n }\n\n return {\n rpm: definition.rpm,\n key: definition.key ?? input.resource.type,\n windowSeconds: definition.windowSeconds,\n burst: definition.burst,\n };\n}\n\nfunction evaluateCondition(\n expression: string,\n input: DecisionContext\n): boolean {\n const trimmed = expression.trim();\n if (!trimmed) return true;\n\n const context = {\n subject: input.subject,\n resource: input.resource,\n context: input.context ?? {},\n };\n\n try {\n // very small whitelist of expressions\n // Supports subject/resource/context dot paths, comparisons, and logical operators.\n const fn = new Function(\n 'subject',\n 'resource',\n 'context',\n `return (${transformExpression(trimmed)});`\n );\n const result = fn(context.subject, context.resource, context.context);\n return Boolean(result);\n } catch (_error) {\n return false;\n }\n}\n\nfunction transformExpression(expression: string): string {\n return expression.replace(/&&/g, '&&').replace(/\\|\\|/g, '||');\n}\n\nfunction getResourceId(resource: ResourceContext): string | undefined {\n if (resource.id) return resource.id;\n const candidate = resource.attributes?.id;\n if (typeof candidate === 'string') return candidate;\n if (typeof candidate === 'number') return String(candidate);\n return undefined;\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"opa-adapter.d.ts","names":[],"sources":["../../src/policy/opa-adapter.ts"],"sourcesContent":[],"mappings":";;;;;UAIiB,SAAA;qDACoC,QAAQ;AAD7D;AAIiB,UAAA,mBAAA,CAAmB;EAOnB,MAAA,CAAA,EAAA,OAAA,GAAA,MAAiB;EAWrB,MAAA,CAAA,EAAA,MAAA;EAA0B,cAAA,CAAA,EAfpB,cAeoB,CAAA,gBAAA,CAAA;EAEV,gBAAA,CAAA,EAAA,MAAA,EAAA;;AACC,UAdb,iBAca,CAAA,SAdc,mBAcd,GAAA,IAAA,CAAA,CAAA;EAIjB;;;EAGA,YAAA,EAAA,MAAA;EAAR;;AAqCL;EACW,SAAA,CAAA,EAAA,CAAA,KAAA,EAAA,OAAA,EAAA,GAnDuB,MAmDvB;;AAEO,cAlDL,gBAkDK,CAAA,SAlDqB,mBAkDrB,GAAA,IAAA,CAAA,CAAA;;;sBAhDW,oBACC,kBAAkB;oBAInC,2BACC,8BACM,iBACf,QAAQ;;iBAqCG,aAAA,UACL,2BACC,8BACM"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"opa-adapter.js","names":["client: OPAClient","options: OPAAdapterOptions<Result>"],"sources":["../../src/policy/opa-adapter.ts"],"sourcesContent":["import type { PolicyDecision } from '../types';\nimport type { PolicySpec, ConsentDefinition } from './spec';\nimport type { DecisionContext } from './engine';\n\nexport interface OPAClient {\n evaluate<T>(decisionPath: string, input: unknown): Promise<T>;\n}\n\nexport interface OPAEvaluationResult {\n effect?: 'allow' | 'deny';\n reason?: string;\n fieldDecisions?: PolicyDecision['fieldDecisions'];\n requiredConsents?: string[];\n}\n\nexport interface OPAAdapterOptions<Result = OPAEvaluationResult | null> {\n /**\n * Path fed to the OPA client (e.g., \"sigil/authz/allow\").\n */\n decisionPath: string;\n /**\n * Optional mapper when the OPA client returns a non-standard payload.\n */\n mapResult?: (value: unknown) => Result;\n}\n\nexport class OPAPolicyAdapter<Result = OPAEvaluationResult | null> {\n constructor(\n private readonly client: OPAClient,\n private readonly options: OPAAdapterOptions<Result>\n ) {}\n\n async evaluate(\n context: DecisionContext,\n policies: PolicySpec[],\n engineDecision: PolicyDecision\n ): Promise<PolicyDecision> {\n const input = buildOPAInput(context, policies, engineDecision);\n const raw = await this.client.evaluate<unknown>(\n this.options.decisionPath,\n input\n );\n const resolved = this.options.mapResult\n ? this.options.mapResult(raw)\n : (raw as OPAEvaluationResult | null);\n\n if (!resolved) {\n return {\n ...engineDecision,\n evaluatedBy: engineDecision.evaluatedBy ?? 'engine',\n };\n }\n\n const opaResult = resolved as OPAEvaluationResult;\n const mergedRequiredConsents = mergeRequiredConsents(\n policies,\n engineDecision.requiredConsents ?? [],\n opaResult.requiredConsents ?? []\n );\n\n return {\n ...engineDecision,\n effect: opaResult.effect ?? engineDecision.effect,\n reason: opaResult.reason ?? engineDecision.reason,\n fieldDecisions: opaResult.fieldDecisions ?? engineDecision.fieldDecisions,\n requiredConsents: mergedRequiredConsents.length\n ? mergedRequiredConsents\n : undefined,\n evaluatedBy: 'opa',\n };\n }\n}\n\nexport function buildOPAInput(\n context: DecisionContext,\n policies: PolicySpec[],\n engineDecision: PolicyDecision\n) {\n return {\n context,\n decision: engineDecision,\n policies: policies.map((policy) => ({\n meta: policy.meta,\n rules: policy.rules,\n fieldPolicies: policy.fieldPolicies,\n pii: policy.pii,\n relationships: policy.relationships,\n consents: policy.consents,\n rateLimits: policy.rateLimits,\n })),\n };\n}\n\nfunction mergeRequiredConsents(\n policies: PolicySpec[],\n existing: ConsentDefinition[],\n incomingIds: string[]\n): ConsentDefinition[] {\n if (incomingIds.length === 0) return existing;\n const existingIds = new Set(existing.map((consent) => consent.id));\n const merged = [...existing];\n\n for (const id of incomingIds) {\n if (existingIds.has(id)) continue;\n const resolved = resolveConsentAcrossPolicies(policies, id);\n if (resolved) {\n merged.push(resolved);\n existingIds.add(resolved.id);\n }\n }\n\n return merged;\n}\n\nfunction resolveConsentAcrossPolicies(\n policies: PolicySpec[],\n id: string\n): ConsentDefinition | null {\n for (const policy of policies) {\n const match = policy.consents?.find((consent) => consent.id === id);\n if (match) return match;\n }\n\n return {\n id,\n scope: 'unspecified',\n purpose: 'unspecified',\n description: `Consent \"${id}\" returned by OPA`,\n required: true,\n };\n}\n"],"mappings":";AA0BA,IAAa,mBAAb,MAAmE;CACjE,YACE,AAAiBA,QACjB,AAAiBC,SACjB;EAFiB;EACA;;CAGnB,MAAM,SACJ,SACA,UACA,gBACyB;EACzB,MAAM,QAAQ,cAAc,SAAS,UAAU,eAAe;EAC9D,MAAM,MAAM,MAAM,KAAK,OAAO,SAC5B,KAAK,QAAQ,cACb,MACD;EACD,MAAM,WAAW,KAAK,QAAQ,YAC1B,KAAK,QAAQ,UAAU,IAAI,GAC1B;AAEL,MAAI,CAAC,SACH,QAAO;GACL,GAAG;GACH,aAAa,eAAe,eAAe;GAC5C;EAGH,MAAM,YAAY;EAClB,MAAM,yBAAyB,sBAC7B,UACA,eAAe,oBAAoB,EAAE,EACrC,UAAU,oBAAoB,EAAE,CACjC;AAED,SAAO;GACL,GAAG;GACH,QAAQ,UAAU,UAAU,eAAe;GAC3C,QAAQ,UAAU,UAAU,eAAe;GAC3C,gBAAgB,UAAU,kBAAkB,eAAe;GAC3D,kBAAkB,uBAAuB,SACrC,yBACA;GACJ,aAAa;GACd;;;AAIL,SAAgB,cACd,SACA,UACA,gBACA;AACA,QAAO;EACL;EACA,UAAU;EACV,UAAU,SAAS,KAAK,YAAY;GAClC,MAAM,OAAO;GACb,OAAO,OAAO;GACd,eAAe,OAAO;GACtB,KAAK,OAAO;GACZ,eAAe,OAAO;GACtB,UAAU,OAAO;GACjB,YAAY,OAAO;GACpB,EAAE;EACJ;;AAGH,SAAS,sBACP,UACA,UACA,aACqB;AACrB,KAAI,YAAY,WAAW,EAAG,QAAO;CACrC,MAAM,cAAc,IAAI,IAAI,SAAS,KAAK,YAAY,QAAQ,GAAG,CAAC;CAClE,MAAM,SAAS,CAAC,GAAG,SAAS;AAE5B,MAAK,MAAM,MAAM,aAAa;AAC5B,MAAI,YAAY,IAAI,GAAG,CAAE;EACzB,MAAM,WAAW,6BAA6B,UAAU,GAAG;AAC3D,MAAI,UAAU;AACZ,UAAO,KAAK,SAAS;AACrB,eAAY,IAAI,SAAS,GAAG;;;AAIhC,QAAO;;AAGT,SAAS,6BACP,UACA,IAC0B;AAC1B,MAAK,MAAM,UAAU,UAAU;EAC7B,MAAM,QAAQ,OAAO,UAAU,MAAM,YAAY,QAAQ,OAAO,GAAG;AACnE,MAAI,MAAO,QAAO;;AAGpB,QAAO;EACL;EACA,OAAO;EACP,SAAS;EACT,aAAa,YAAY,GAAG;EAC5B,UAAU;EACX"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"spec.d.ts","names":[],"sources":["../../src/policy/spec.ts"],"sourcesContent":[],"mappings":";;;KAEY,YAAA;UAEK,sBAAA;EAFL,WAAA,EAAA,MAAY;EAEP,QAAA,EAAA,MAAA;EAQA,UAAA,EAAA,MAAA;EAMA,WAAA,CAAA,EAAA,MAAiB;EAcjB,UAAA,CAAA,EAAA,OAAA;AAQjB;AAOiB,UAnCA,mBAAA,CAmCmB;EASnB,QAAA,EAAA,MAAA;EAMA,UAAA,CAAA,EAAA,MAAc;EAKd,QAAA,CAAA,EAAA,MAAA;AAMjB;AAKiB,UA5DA,iBAAA,CA4DU;EACjB,EAAA,EAAA,MAAA;EAEE,KAAA,EAAA,MAAA;EACC,OAAA,EAAA,MAAA;EACK,WAAA,CAAA,EAAA,MAAA;EAGK,WAAA,CAAA,EAAA,SAAA,GAAA,UAAA,GAAA,kBAAA,GAAA,qBAAA;EAER,aAAA,CAAA,EAAA,MAAA;EAAe,QAAA,CAAA,EAAA,OAAA;AAI9B;AACU,UA7DO,mBAAA,CA6DP;EAGE,EAAA,EAAA,MAAA;EACC,GAAA,EAAA,MAAA;EACE,GAAA,CAAA,EAAA,MAAA;EAAe,aAAA,CAAA,EAAA,MAAA;EAIb,KAAA,CAAA,EAAA,MAAS;AAM1B;AACQ,UArES,eAAA,CAqET;EACC;EACS,OAAA,EAAA,MAAA;EACV;EACU,QAAA,CAAA,EAAA,MAAA;;AAEH,UApEE,UAAA,SAAmB,aAoErB,CAAA;EACP;EAAe,IAAA,EAAA,MAAA;EAGN;EAOJ,OAAA,EAAA,MAAA;EAGI;EAOP,KAAA,CAAA,EAAA,QAAA,GAAA,SAAA,GAAA,WAAA;;AAIuC,UApFhC,gBAAA,CAoFgC;EAejC,MAAA,CAAA,EAAA,OAAa;;;;UA7FZ,cAAA;;eAEF,eAAe;;UAGb,eAAA;;;eAGF,eAAe;;UAGb,eAAA;;;;UAKA,UAAA;UACP;;YAEE;aACC;kBACK;;;uBAGK;;eAER;;;UAIE,eAAA;UACP;;;YAGE;aACC;eACE;;;UAIE,SAAA;;;;;UAMA,UAAA;QACT;SACC;kBACS;QACV;kBACU;aACL;eACE;QACP;;UAGS,SAAA;;;;cAOJ,cAAA;;iBAGI;UAOP;uCAI6B;;iBAevB,aAAA,MAAmB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"spec.js","names":["candidate: PolicySpec | undefined"],"sources":["../../src/policy/spec.ts"],"sourcesContent":["import type { OwnerShipMeta } from '../ownership';\n\nexport type PolicyEffect = 'allow' | 'deny';\n\nexport interface RelationshipDefinition {\n subjectType: string;\n relation: string;\n objectType: string;\n description?: string;\n transitive?: boolean;\n}\n\nexport interface RelationshipMatcher {\n relation: string;\n objectType?: string;\n objectId?: string;\n}\n\nexport interface ConsentDefinition {\n id: string;\n scope: string;\n purpose: string;\n description?: string;\n lawfulBasis?:\n | 'consent'\n | 'contract'\n | 'legal_obligation'\n | 'legitimate_interest';\n expiresInDays?: number;\n required?: boolean;\n}\n\nexport interface RateLimitDefinition {\n id: string;\n rpm: number;\n key?: string;\n windowSeconds?: number;\n burst?: number;\n}\n\nexport interface PolicyOPAConfig {\n /** Fully-qualified package, e.g. \"sigil.authz\" */\n package: string;\n /** Optional rule within package (defaults to \"allow\") */\n decision?: string;\n}\n\nexport interface PolicyMeta extends OwnerShipMeta {\n /** Fully-qualified policy name (e.g., \"sigil.core.default\"). */\n name: string;\n /** Version of the policy; bump on breaking changes. */\n version: number;\n /** Optional scope hint used for discovery. */\n scope?: 'global' | 'feature' | 'operation';\n}\n\nexport interface AttributeMatcher {\n equals?: unknown;\n oneOf?: unknown[];\n exists?: boolean;\n}\n\nexport interface SubjectMatcher {\n roles?: string[];\n attributes?: Record<string, AttributeMatcher>;\n}\n\nexport interface ResourceMatcher {\n type: string;\n fields?: string[];\n attributes?: Record<string, AttributeMatcher>;\n}\n\nexport interface PolicyCondition {\n /** Simple expression evaluated against { subject, resource, context }. */\n expression: string;\n}\n\nexport interface PolicyRule {\n effect: PolicyEffect;\n actions: string[];\n subject?: SubjectMatcher;\n resource?: ResourceMatcher;\n relationships?: RelationshipMatcher[];\n requiresConsent?: string[];\n flags?: string[];\n rateLimit?: string | RateLimitDefinition;\n escalate?: 'human_review' | null;\n conditions?: PolicyCondition[];\n reason?: string;\n}\n\nexport interface FieldPolicyRule {\n effect: PolicyEffect;\n field: string;\n actions: ('read' | 'write')[];\n subject?: SubjectMatcher;\n resource?: ResourceMatcher;\n conditions?: PolicyCondition[];\n reason?: string;\n}\n\nexport interface PIIPolicy {\n fields: string[];\n consentRequired?: boolean;\n retentionDays?: number;\n}\n\nexport interface PolicySpec {\n meta: PolicyMeta;\n rules: PolicyRule[];\n fieldPolicies?: FieldPolicyRule[];\n pii?: PIIPolicy;\n relationships?: RelationshipDefinition[];\n consents?: ConsentDefinition[];\n rateLimits?: RateLimitDefinition[];\n opa?: PolicyOPAConfig;\n}\n\nexport interface PolicyRef {\n name: string;\n version: number;\n}\n\nconst policyKey = (name: string, version: number) => `${name}.v${version}`;\n\nexport class PolicyRegistry {\n private readonly items = new Map<string, PolicySpec>();\n\n register(spec: PolicySpec): this {\n const key = policyKey(spec.meta.name, spec.meta.version);\n if (this.items.has(key)) throw new Error(`Duplicate policy ${key}`);\n this.items.set(key, spec);\n return this;\n }\n\n list(): PolicySpec[] {\n return [...this.items.values()];\n }\n\n get(name: string, version?: number): PolicySpec | undefined {\n if (version != null) return this.items.get(policyKey(name, version));\n let candidate: PolicySpec | undefined;\n let max = -Infinity;\n for (const spec of this.items.values()) {\n if (spec.meta.name !== name) continue;\n if (spec.meta.version > max) {\n max = spec.meta.version;\n candidate = spec;\n }\n }\n return candidate;\n }\n}\n\nexport function makePolicyKey(ref: PolicyRef) {\n return policyKey(ref.name, ref.version);\n}\n"],"mappings":";AA4HA,MAAM,aAAa,MAAc,YAAoB,GAAG,KAAK,IAAI;AAEjE,IAAa,iBAAb,MAA4B;CAC1B,AAAiB,wBAAQ,IAAI,KAAyB;CAEtD,SAAS,MAAwB;EAC/B,MAAM,MAAM,UAAU,KAAK,KAAK,MAAM,KAAK,KAAK,QAAQ;AACxD,MAAI,KAAK,MAAM,IAAI,IAAI,CAAE,OAAM,IAAI,MAAM,oBAAoB,MAAM;AACnE,OAAK,MAAM,IAAI,KAAK,KAAK;AACzB,SAAO;;CAGT,OAAqB;AACnB,SAAO,CAAC,GAAG,KAAK,MAAM,QAAQ,CAAC;;CAGjC,IAAI,MAAc,SAA0C;AAC1D,MAAI,WAAW,KAAM,QAAO,KAAK,MAAM,IAAI,UAAU,MAAM,QAAQ,CAAC;EACpE,IAAIA;EACJ,IAAI,MAAM;AACV,OAAK,MAAM,QAAQ,KAAK,MAAM,QAAQ,EAAE;AACtC,OAAI,KAAK,KAAK,SAAS,KAAM;AAC7B,OAAI,KAAK,KAAK,UAAU,KAAK;AAC3B,UAAM,KAAK,KAAK;AAChB,gBAAY;;;AAGhB,SAAO;;;AAIX,SAAgB,cAAc,KAAgB;AAC5C,QAAO,UAAU,IAAI,MAAM,IAAI,QAAQ"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"presentations-conventions.docblock.d.ts","names":[],"sources":["../../../src/presentations/docs/presentations-conventions.docblock.ts"],"sourcesContent":[],"mappings":";;;cAGa,oDAAoD"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"presentations-conventions.docblock.js","names":["tech_contracts_presentations_conventions_DocBlocks: DocBlock[]"],"sources":["../../../src/presentations/docs/presentations-conventions.docblock.ts"],"sourcesContent":["import type { DocBlock } from '@lssm/lib.contracts/docs';\nimport { registerDocBlocks } from '../../registry';\n\nexport const tech_contracts_presentations_conventions_DocBlocks: DocBlock[] = [\n {\n id: 'docs.tech.contracts.presentations-conventions',\n title: 'Presentations Conventions (A11y & i18n)',\n summary:\n '- Always provide `meta.description` (\\u2265 3 chars) \\u2014 used by a11y/docs/agents.',\n kind: 'reference',\n visibility: 'public',\n route: '/docs/tech/contracts/presentations-conventions',\n tags: ['tech', 'contracts', 'presentations-conventions'],\n body: '## Presentations Conventions (A11y & i18n)\\n\\n- Always provide `meta.description` (\\u2265 3 chars) \\u2014 used by a11y/docs/agents.\\n- Prefer source = BlockNote for rich guides; use component key for interactive flows.\\n- i18n strings belong in host apps; descriptors carry keys/defaults only.\\n- Target selection: include only what you intend to support to avoid drift.\\n- PII: declare JSON-like paths under `policy.pii`; engine redacts in outputs.\\n',\n },\n];\nregisterDocBlocks(tech_contracts_presentations_conventions_DocBlocks);\n"],"mappings":";;;;AAGA,MAAaA,qDAAiE,CAC5E;CACE,IAAI;CACJ,OAAO;CACP,SACE;CACF,MAAM;CACN,YAAY;CACZ,OAAO;CACP,MAAM;EAAC;EAAQ;EAAa;EAA4B;CACxD,MAAM;CACP,CACF;AACD,kBAAkB,mDAAmD"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"presentations.backcompat.d.ts","names":[],"sources":["../src/presentations.backcompat.ts"],"sourcesContent":[],"mappings":";;;;iBAGgB,UAAA,KAAe,mBAAmB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"presentations.backcompat.js","names":[],"sources":["../src/presentations.backcompat.ts"],"sourcesContent":["import type { PresentationSpec } from './presentations';\nimport type { PresentationDescriptorV2 } from './presentations.v2';\n\nexport function toV2FromV1(v1: PresentationSpec): PresentationDescriptorV2 {\n if (v1.content.kind === 'web_component') {\n return {\n meta: { ...v1.meta },\n policy: v1.policy,\n source: {\n type: 'component',\n framework: v1.content.framework,\n componentKey: v1.content.componentKey,\n props: v1.content.props,\n },\n targets: ['react', 'application/json', 'application/xml'],\n };\n }\n if (v1.content.kind === 'markdown') {\n return {\n meta: { ...v1.meta },\n policy: v1.policy,\n source: {\n type: 'blocknotejs',\n docJson: v1.content.content ?? v1.content.resourceUri ?? '',\n },\n targets: ['markdown', 'application/json', 'application/xml'],\n };\n }\n return {\n meta: { ...v1.meta },\n policy: v1.policy,\n source: {\n type: 'blocknotejs',\n docJson: { kind: 'data', mimeType: v1.content.mimeType, model: 'schema' },\n },\n targets: ['application/json', 'application/xml'],\n };\n}\n"],"mappings":";AAGA,SAAgB,WAAW,IAAgD;AACzE,KAAI,GAAG,QAAQ,SAAS,gBACtB,QAAO;EACL,MAAM,EAAE,GAAG,GAAG,MAAM;EACpB,QAAQ,GAAG;EACX,QAAQ;GACN,MAAM;GACN,WAAW,GAAG,QAAQ;GACtB,cAAc,GAAG,QAAQ;GACzB,OAAO,GAAG,QAAQ;GACnB;EACD,SAAS;GAAC;GAAS;GAAoB;GAAkB;EAC1D;AAEH,KAAI,GAAG,QAAQ,SAAS,WACtB,QAAO;EACL,MAAM,EAAE,GAAG,GAAG,MAAM;EACpB,QAAQ,GAAG;EACX,QAAQ;GACN,MAAM;GACN,SAAS,GAAG,QAAQ,WAAW,GAAG,QAAQ,eAAe;GAC1D;EACD,SAAS;GAAC;GAAY;GAAoB;GAAkB;EAC7D;AAEH,QAAO;EACL,MAAM,EAAE,GAAG,GAAG,MAAM;EACpB,QAAQ,GAAG;EACX,QAAQ;GACN,MAAM;GACN,SAAS;IAAE,MAAM;IAAQ,UAAU,GAAG,QAAQ;IAAU,OAAO;IAAU;GAC1E;EACD,SAAS,CAAC,oBAAoB,kBAAkB;EACjD"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"presentations.d.ts","names":[],"sources":["../src/presentations.ts"],"sourcesContent":[],"mappings":";;;;;;;KAKY,gBAAA;;AAAA,UAGK,gBAAA,CAHW;EAGX,IAAA,EAAA,MAAA;EAUA,OAAA,EAAA,MAAA;EAMA,SAAA,CAAA,EAbH,SAaG;EAWA,MAAA,CAAA,EAAA,MAAA,EAAA;EASA,IAAA,CAAA,EAAA,MAAA,EAAA;EAOL,WAAA,CAAA,EAAA,MAAA;;;AAGR,UApCa,kBAAA,CAoCb;EAAgB,KAAA,CAAA,EAAA,MAAA,EAAA;EAEH,GAAA,CAAA,EAAA,MAAA,EAAA;;;AAGN,UAnCM,wBAAA,CAmCN;EAAmB,IAAA,EAAA,eAAA;EAQjB,SAAA,EAAA,OAAA;EAGS;EAMR,YAAA,EAAA,MAAA;EAOJ;EAI6B,KAAA,EAzD9B,cAyD8B;EAAgB,SAAA,CAAA,EAAA,MAAA,EAAA;AAevD;;UAnEiB,oBAAA;;;;;;;;UASA,gBAAA;EAmEW,IAAA,EAAA,MAAA;;;SA/DnB;;KAGG,mBAAA,GACR,2BACA,uBACA;UAEa,gBAAA;QACT;EAsDoB,MAAA,CAAA,EArDjB,kBAqDiB;EAAgB,OAAA,EApDjC,mBAoDiC;;;cA5C/B,oBAAA;;sBAGS;cAMR;UAOJ;uCAI6B;;iBAevB,yBAAA,IAA6B;;;;;;;;;;;QASjB;;;;;;;;;;;QAAA;;;;;;;;;;;QAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"presentations.js","names":["candidate: PresentationSpec | undefined"],"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 constructor(items?: PresentationSpec[]) {\n if (items) {\n items.forEach((p) => this.register(p));\n }\n }\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.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":";;;AA8DA,SAAS,MAAM,GAAqB;AAClC,QAAO,GAAG,EAAE,KAAK,KAAK,IAAI,EAAE,KAAK;;;AAInC,IAAa,uBAAb,MAAkC;CAChC,AAAQ,wBAAQ,IAAI,KAA+B;CAEnD,YAAY,OAA4B;AACtC,MAAI,MACF,OAAM,SAAS,MAAM,KAAK,SAAS,EAAE,CAAC;;CAI1C,SAAS,GAA2B;EAClC,MAAM,MAAM,MAAM,EAAE;AACpB,MAAI,KAAK,MAAM,IAAI,IAAI,CAAE,OAAM,IAAI,MAAM,0BAA0B,MAAM;AACzE,OAAK,MAAM,IAAI,KAAK,EAAE;AACtB,SAAO;;CAGT,OAA2B;AACzB,SAAO,CAAC,GAAG,KAAK,MAAM,QAAQ,CAAC;;CAGjC,IAAI,MAAc,SAAgD;AAChE,MAAI,WAAW,KAAM,QAAO,KAAK,MAAM,IAAI,GAAG,KAAK,IAAI,UAAU;EACjE,IAAIA;EACJ,IAAI,MAAM;AACV,OAAK,MAAM,CAAC,GAAG,MAAM,KAAK,MAAM,SAAS,EAAE;AACzC,OAAI,CAAC,EAAE,WAAW,GAAG,KAAK,IAAI,CAAE;AAChC,OAAI,EAAE,KAAK,UAAU,KAAK;AACxB,UAAM,EAAE,KAAK;AACb,gBAAY;;;AAGhB,SAAO;;;AAIX,SAAgB,0BAA0B,GAAqB;CAC7D,MAAM,OAAO;EACX,MAAM;GACJ,MAAM,EAAE,KAAK;GACb,SAAS,EAAE,KAAK;GAChB,WAAW,EAAE,KAAK,aAAa;GAC/B,MAAM,EAAE,KAAK,QAAQ,EAAE;GACvB,aAAa,EAAE,KAAK,eAAe;GACpC;EACD,MAAM,EAAE,QAAQ;EACjB;AAED,KAAI,EAAE,QAAQ,SAAS,gBACrB,QAAO;EACL,GAAG;EACH,WAAW,EAAE,QAAQ;EACrB,cAAc,EAAE,QAAQ;EACxB,OAAO,EAAE,aAAa,EAAE,QAAQ,MAAM,QAAQ,CAAC;EAChD;AAEH,KAAI,EAAE,QAAQ,SAAS,WACrB,QAAO;EACL,GAAG;EACH,SAAS,EAAE,QAAQ;EACnB,aAAa,EAAE,QAAQ;EACxB;AAEH,QAAO;EACL,GAAG;EACH,UAAU,EAAE,QAAQ;EACpB,OAAO,EAAE,aAAa,EAAE,QAAQ,MAAM,QAAQ,CAAC;EAChD"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"presentations.v2.d.ts","names":[],"sources":["../src/presentations.v2.ts"],"sourcesContent":[],"mappings":";;;;;;;;KASY,kBAAA;AAAA,UAMK,kBAAA,SAA2B,OANd,CAMsB,aANtB,CAAA,CAAA;EAMb;EAAmC,IAAA,EAAA,MAAA;EAQ1C;EARkC,OAAA,EAAA,MAAA;EAAO;EAYlC,WAAA,CAAA,EAAA,MAAA;EAYA;EASL,KAAA,CAAA,EAzBF,KAyBE;AAQZ;;AAGU,UAhCO,gCAAA,CAgCP;EACC;EAAkB,IAAA,EAAA,WAAA;EAGZ;EAaA,SAAA,EAAA,OAAA;EACP;EAEA,YAAA,EAAA,MAAA;EACA;EACK,KAAA,CAAA,EA9CL,cA8CK;;;AAGE,UA7CA,6BAAA,CA6CqB;EAE5B;EACE,IAAA,EAAA,aAAA;EACF;EACH,OAAA,EAAA,OAAA;EAAO;EAmID,WAAA,CAAA,EA/KG,WA+KY;;AAOD,KAnLf,kBAAA,GACR,gCAkLuB,GAjLvB,6BAiLuB;;;;;AAyBjB,UApMO,wBAAA,CAoMP;EACA,IAAA,EApMF,kBAoME;EACG,MAAA,CAAA,EAAA;IAAR,KAAA,CAAA,EAAA,MAAA,EAAA;IAAO,GAAA,CAAA,EAAA,MAAA,EAAA;EAsBI,CAAA;EAiJJ,MAAA,EA1WF,kBA0WuB;EASjB,OAAA,EAlXL,kBAkXK,EAAA;AA8BhB;AAgBY,UA7ZK,aAAA,CA6ZO;EAOR;EACN,MAAA,CAAA,EAAA,MAAA;EACM;EACb,YAAA,CAAA,EAAA,MAAA,EAAA;EAAe;;;;;oBA7ZE;;UAGH;UACP;iBAEA,gCACA,kBACH,QAAQ;;UAGE,qBAAA;mBAEP,kCACE,0BACF,kBACH;;cAmIM,eAAA;;;2BAOc,qBAAqB;;;;;kCAWd,qBAAqB;kBAOrC;iCAMN,0BACF,gCACA,gBACL,QAAQ;;;iBAsBG,4BAAA,CAAA,GAA4B;;KAiJhC,qBAAA;;;UAIE;;;;gBAE6C;;;iBAG3C,4BAAA,SAAqC,kBAAe;;;;iBA8BpD,uBAAA,SAAgC,kBAAe;;;;KAgBnD,YAAA,GAAe,eAAe,KAAA,CAAM;;;;;;iBAOhC,+BAAA,SACN,+BACM,eACb"}