@contractspec/lib.contracts 0.0.0-canary-20260113162409

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 (550) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +109 -0
  3. package/dist/_virtual/rolldown_runtime.js +37 -0
  4. package/dist/app-config/app-config.capability.d.ts +7 -0
  5. package/dist/app-config/app-config.capability.js +23 -0
  6. package/dist/app-config/app-config.feature.d.ts +11 -0
  7. package/dist/app-config/app-config.feature.js +61 -0
  8. package/dist/app-config/branding.d.ts +55 -0
  9. package/dist/app-config/branding.js +0 -0
  10. package/dist/app-config/contracts.d.ts +245 -0
  11. package/dist/app-config/contracts.js +395 -0
  12. package/dist/app-config/docs/app-config.docblock.d.ts +6 -0
  13. package/dist/app-config/docs/app-config.docblock.js +21 -0
  14. package/dist/app-config/events.d.ts +122 -0
  15. package/dist/app-config/events.js +174 -0
  16. package/dist/app-config/index.d.ts +10 -0
  17. package/dist/app-config/index.js +9 -0
  18. package/dist/app-config/lifecycle-contracts.d.ts +273 -0
  19. package/dist/app-config/lifecycle-contracts.js +440 -0
  20. package/dist/app-config/lifecycle.d.ts +27 -0
  21. package/dist/app-config/lifecycle.js +0 -0
  22. package/dist/app-config/runtime.d.ts +120 -0
  23. package/dist/app-config/runtime.js +617 -0
  24. package/dist/app-config/spec.d.ts +175 -0
  25. package/dist/app-config/spec.js +19 -0
  26. package/dist/app-config/validation.d.ts +49 -0
  27. package/dist/app-config/validation.js +538 -0
  28. package/dist/capabilities/capabilities.d.ts +41 -0
  29. package/dist/capabilities/capabilities.js +48 -0
  30. package/dist/capabilities/docs/capabilities.docblock.d.ts +6 -0
  31. package/dist/capabilities/docs/capabilities.docblock.js +21 -0
  32. package/dist/capabilities/index.d.ts +3 -0
  33. package/dist/capabilities/index.js +4 -0
  34. package/dist/capabilities/openbanking.d.ts +10 -0
  35. package/dist/capabilities/openbanking.js +92 -0
  36. package/dist/client/index.d.ts +6 -0
  37. package/dist/client/index.js +9 -0
  38. package/dist/client/react/drivers/rn-reusables.d.ts +22 -0
  39. package/dist/client/react/drivers/rn-reusables.js +21 -0
  40. package/dist/client/react/drivers/shadcn.d.ts +12 -0
  41. package/dist/client/react/drivers/shadcn.js +11 -0
  42. package/dist/client/react/feature-render.d.ts +23 -0
  43. package/dist/client/react/feature-render.js +44 -0
  44. package/dist/client/react/form-render.d.ts +92 -0
  45. package/dist/client/react/form-render.js +301 -0
  46. package/dist/client/react/index.d.ts +5 -0
  47. package/dist/client/react/index.js +8 -0
  48. package/dist/contract-registry/index.d.ts +3 -0
  49. package/dist/contract-registry/index.js +3 -0
  50. package/dist/contract-registry/schemas.d.ts +124 -0
  51. package/dist/contract-registry/schemas.js +61 -0
  52. package/dist/contract-registry/types.d.ts +46 -0
  53. package/dist/contract-registry/types.js +0 -0
  54. package/dist/data-views/data-views.d.ts +5 -0
  55. package/dist/data-views/data-views.js +5 -0
  56. package/dist/data-views/docs/data-views.docblock.d.ts +6 -0
  57. package/dist/data-views/docs/data-views.docblock.js +21 -0
  58. package/dist/data-views/index.d.ts +4 -0
  59. package/dist/data-views/index.js +4 -0
  60. package/dist/data-views/query-generator.d.ts +40 -0
  61. package/dist/data-views/query-generator.js +48 -0
  62. package/dist/data-views/registry.d.ts +17 -0
  63. package/dist/data-views/registry.js +20 -0
  64. package/dist/data-views/runtime.d.ts +32 -0
  65. package/dist/data-views/runtime.js +68 -0
  66. package/dist/data-views/spec.d.ts +32 -0
  67. package/dist/data-views/spec.js +10 -0
  68. package/dist/data-views/types.d.ts +157 -0
  69. package/dist/data-views/types.js +0 -0
  70. package/dist/docs/accessibility_wcag_compliance_specs.docblock.d.ts +6 -0
  71. package/dist/docs/accessibility_wcag_compliance_specs.docblock.js +17 -0
  72. package/dist/docs/index.d.ts +6 -0
  73. package/dist/docs/index.js +30 -0
  74. package/dist/docs/meta.docs.d.ts +6 -0
  75. package/dist/docs/meta.docs.js +29 -0
  76. package/dist/docs/presentations.d.ts +31 -0
  77. package/dist/docs/presentations.js +57 -0
  78. package/dist/docs/registry.d.ts +23 -0
  79. package/dist/docs/registry.js +51 -0
  80. package/dist/docs/tech/auth/better-auth-nextjs.docblock.d.ts +6 -0
  81. package/dist/docs/tech/auth/better-auth-nextjs.docblock.js +81 -0
  82. package/dist/docs/tech/cli.docblock.d.ts +6 -0
  83. package/dist/docs/tech/cli.docblock.js +138 -0
  84. package/dist/docs/tech/contracts/README.docblock.d.ts +6 -0
  85. package/dist/docs/tech/contracts/README.docblock.js +21 -0
  86. package/dist/docs/tech/contracts/migrations.docblock.d.ts +6 -0
  87. package/dist/docs/tech/contracts/migrations.docblock.js +21 -0
  88. package/dist/docs/tech/contracts/openapi-export.docblock.d.ts +6 -0
  89. package/dist/docs/tech/contracts/openapi-export.docblock.js +58 -0
  90. package/dist/docs/tech/contracts/openapi-import.docblock.d.ts +6 -0
  91. package/dist/docs/tech/contracts/openapi-import.docblock.js +65 -0
  92. package/dist/docs/tech/contracts/ops-to-presentation-linking.docblock.d.ts +6 -0
  93. package/dist/docs/tech/contracts/ops-to-presentation-linking.docblock.js +21 -0
  94. package/dist/docs/tech/contracts/overlays.docblock.d.ts +6 -0
  95. package/dist/docs/tech/contracts/overlays.docblock.js +21 -0
  96. package/dist/docs/tech/contracts/tests.docblock.d.ts +6 -0
  97. package/dist/docs/tech/contracts/tests.docblock.js +21 -0
  98. package/dist/docs/tech/contracts/themes.docblock.d.ts +6 -0
  99. package/dist/docs/tech/contracts/themes.docblock.js +21 -0
  100. package/dist/docs/tech/contracts/vertical-pocket-family-office.docblock.d.ts +6 -0
  101. package/dist/docs/tech/contracts/vertical-pocket-family-office.docblock.js +126 -0
  102. package/dist/docs/tech/lifecycle-stage-system.docblock.d.ts +6 -0
  103. package/dist/docs/tech/lifecycle-stage-system.docblock.js +17 -0
  104. package/dist/docs/tech/llm/llm-integration.docblock.d.ts +7 -0
  105. package/dist/docs/tech/llm/llm-integration.docblock.js +358 -0
  106. package/dist/docs/tech/mcp-endpoints.docblock.d.ts +6 -0
  107. package/dist/docs/tech/mcp-endpoints.docblock.js +38 -0
  108. package/dist/docs/tech/presentation-runtime.docblock.d.ts +6 -0
  109. package/dist/docs/tech/presentation-runtime.docblock.js +17 -0
  110. package/dist/docs/tech/schema/README.docblock.d.ts +6 -0
  111. package/dist/docs/tech/schema/README.docblock.js +21 -0
  112. package/dist/docs/tech/studio/learning-events.docblock.d.ts +6 -0
  113. package/dist/docs/tech/studio/learning-events.docblock.js +49 -0
  114. package/dist/docs/tech/studio/learning-journeys.docblock.d.ts +6 -0
  115. package/dist/docs/tech/studio/learning-journeys.docblock.js +80 -0
  116. package/dist/docs/tech/studio/platform-admin-panel.docblock.d.ts +6 -0
  117. package/dist/docs/tech/studio/platform-admin-panel.docblock.js +85 -0
  118. package/dist/docs/tech/studio/project-access-teams.docblock.d.ts +6 -0
  119. package/dist/docs/tech/studio/project-access-teams.docblock.js +48 -0
  120. package/dist/docs/tech/studio/project-routing.docblock.d.ts +6 -0
  121. package/dist/docs/tech/studio/project-routing.docblock.js +68 -0
  122. package/dist/docs/tech/studio/sandbox-unlogged.docblock.d.ts +6 -0
  123. package/dist/docs/tech/studio/sandbox-unlogged.docblock.js +41 -0
  124. package/dist/docs/tech/studio/team-invitations.docblock.d.ts +6 -0
  125. package/dist/docs/tech/studio/team-invitations.docblock.js +70 -0
  126. package/dist/docs/tech/studio/workspace-ops.docblock.d.ts +6 -0
  127. package/dist/docs/tech/studio/workspace-ops.docblock.js +48 -0
  128. package/dist/docs/tech/studio/workspaces.docblock.d.ts +6 -0
  129. package/dist/docs/tech/studio/workspaces.docblock.js +63 -0
  130. package/dist/docs/tech/telemetry-ingest.docblock.d.ts +6 -0
  131. package/dist/docs/tech/telemetry-ingest.docblock.js +156 -0
  132. package/dist/docs/tech/vscode-extension.docblock.d.ts +6 -0
  133. package/dist/docs/tech/vscode-extension.docblock.js +102 -0
  134. package/dist/docs/tech-contracts.docs.d.ts +6 -0
  135. package/dist/docs/tech-contracts.docs.js +96 -0
  136. package/dist/docs/types.d.ts +41 -0
  137. package/dist/docs/types.js +0 -0
  138. package/dist/events.d.ts +47 -0
  139. package/dist/events.js +19 -0
  140. package/dist/examples/docs/examples.docblock.d.ts +6 -0
  141. package/dist/examples/docs/examples.docblock.js +165 -0
  142. package/dist/examples/index.d.ts +13 -0
  143. package/dist/examples/index.js +13 -0
  144. package/dist/examples/registry.d.ts +43 -0
  145. package/dist/examples/registry.js +88 -0
  146. package/dist/examples/schema.d.ts +282 -0
  147. package/dist/examples/schema.js +125 -0
  148. package/dist/examples/types.d.ts +167 -0
  149. package/dist/examples/types.js +43 -0
  150. package/dist/examples/validation.d.ts +65 -0
  151. package/dist/examples/validation.js +144 -0
  152. package/dist/experiments/docs/experiments.docblock.d.ts +6 -0
  153. package/dist/experiments/docs/experiments.docblock.js +21 -0
  154. package/dist/experiments/evaluator.d.ts +37 -0
  155. package/dist/experiments/evaluator.js +101 -0
  156. package/dist/experiments/spec-resolver.d.ts +17 -0
  157. package/dist/experiments/spec-resolver.js +0 -0
  158. package/dist/experiments/spec.d.ts +80 -0
  159. package/dist/experiments/spec.js +15 -0
  160. package/dist/features/index.d.ts +13 -0
  161. package/dist/features/index.js +12 -0
  162. package/dist/features/install.d.ts +22 -0
  163. package/dist/features/install.js +36 -0
  164. package/dist/features/registry.d.ts +26 -0
  165. package/dist/features/registry.js +49 -0
  166. package/dist/features/types.d.ts +88 -0
  167. package/dist/features/types.js +0 -0
  168. package/dist/features/validation.d.ts +8 -0
  169. package/dist/features/validation.js +14 -0
  170. package/dist/forms/docs/forms.docblock.d.ts +6 -0
  171. package/dist/forms/docs/forms.docblock.js +21 -0
  172. package/dist/forms/forms.d.ts +266 -0
  173. package/dist/forms/forms.js +143 -0
  174. package/dist/forms/index.d.ts +2 -0
  175. package/dist/forms/index.js +3 -0
  176. package/dist/index.d.ts +154 -0
  177. package/dist/index.js +132 -0
  178. package/dist/install.d.ts +77 -0
  179. package/dist/install.js +40 -0
  180. package/dist/integrations/binding.d.ts +17 -0
  181. package/dist/integrations/binding.js +0 -0
  182. package/dist/integrations/connection.d.ts +51 -0
  183. package/dist/integrations/connection.js +0 -0
  184. package/dist/integrations/docs/integrations.docblock.d.ts +6 -0
  185. package/dist/integrations/docs/integrations.docblock.js +94 -0
  186. package/dist/integrations/health.d.ts +21 -0
  187. package/dist/integrations/health.js +69 -0
  188. package/dist/integrations/index.d.ts +34 -0
  189. package/dist/integrations/index.js +23 -0
  190. package/dist/integrations/integrations.capability.d.ts +7 -0
  191. package/dist/integrations/integrations.capability.js +17 -0
  192. package/dist/integrations/integrations.feature.d.ts +11 -0
  193. package/dist/integrations/integrations.feature.js +67 -0
  194. package/dist/integrations/openbanking/contracts/accounts.d.ts +289 -0
  195. package/dist/integrations/openbanking/contracts/accounts.js +236 -0
  196. package/dist/integrations/openbanking/contracts/balances.d.ts +165 -0
  197. package/dist/integrations/openbanking/contracts/balances.js +166 -0
  198. package/dist/integrations/openbanking/contracts/index.d.ts +10 -0
  199. package/dist/integrations/openbanking/contracts/index.js +12 -0
  200. package/dist/integrations/openbanking/contracts/transactions.d.ts +213 -0
  201. package/dist/integrations/openbanking/contracts/transactions.js +217 -0
  202. package/dist/integrations/openbanking/guards.d.ts +12 -0
  203. package/dist/integrations/openbanking/guards.js +33 -0
  204. package/dist/integrations/openbanking/models.d.ts +228 -0
  205. package/dist/integrations/openbanking/models.js +240 -0
  206. package/dist/integrations/openbanking/openbanking.capability.d.ts +7 -0
  207. package/dist/integrations/openbanking/openbanking.capability.js +21 -0
  208. package/dist/integrations/openbanking/openbanking.feature.d.ts +11 -0
  209. package/dist/integrations/openbanking/openbanking.feature.js +76 -0
  210. package/dist/integrations/openbanking/telemetry.d.ts +15 -0
  211. package/dist/integrations/openbanking/telemetry.js +39 -0
  212. package/dist/integrations/operations.d.ts +437 -0
  213. package/dist/integrations/operations.js +392 -0
  214. package/dist/integrations/providers/calendar.d.ts +78 -0
  215. package/dist/integrations/providers/calendar.js +0 -0
  216. package/dist/integrations/providers/elevenlabs.d.ts +8 -0
  217. package/dist/integrations/providers/elevenlabs.js +56 -0
  218. package/dist/integrations/providers/email.d.ts +86 -0
  219. package/dist/integrations/providers/email.js +0 -0
  220. package/dist/integrations/providers/embedding.d.ts +24 -0
  221. package/dist/integrations/providers/embedding.js +0 -0
  222. package/dist/integrations/providers/gcs-storage.d.ts +8 -0
  223. package/dist/integrations/providers/gcs-storage.js +79 -0
  224. package/dist/integrations/providers/gmail.d.ts +8 -0
  225. package/dist/integrations/providers/gmail.js +91 -0
  226. package/dist/integrations/providers/google-calendar.d.ts +8 -0
  227. package/dist/integrations/providers/google-calendar.js +70 -0
  228. package/dist/integrations/providers/impls/elevenlabs-voice.d.ts +20 -0
  229. package/dist/integrations/providers/impls/elevenlabs-voice.js +95 -0
  230. package/dist/integrations/providers/impls/gcs-storage.d.ts +24 -0
  231. package/dist/integrations/providers/impls/gcs-storage.js +88 -0
  232. package/dist/integrations/providers/impls/gmail-inbound.d.ts +26 -0
  233. package/dist/integrations/providers/impls/gmail-inbound.js +200 -0
  234. package/dist/integrations/providers/impls/gmail-outbound.d.ts +18 -0
  235. package/dist/integrations/providers/impls/gmail-outbound.js +105 -0
  236. package/dist/integrations/providers/impls/google-calendar.d.ts +23 -0
  237. package/dist/integrations/providers/impls/google-calendar.js +154 -0
  238. package/dist/integrations/providers/impls/index.d.ts +15 -0
  239. package/dist/integrations/providers/impls/index.js +16 -0
  240. package/dist/integrations/providers/impls/mistral-embedding.d.ts +23 -0
  241. package/dist/integrations/providers/impls/mistral-embedding.js +41 -0
  242. package/dist/integrations/providers/impls/mistral-llm.d.ts +31 -0
  243. package/dist/integrations/providers/impls/mistral-llm.js +247 -0
  244. package/dist/integrations/providers/impls/postmark-email.d.ts +19 -0
  245. package/dist/integrations/providers/impls/postmark-email.js +55 -0
  246. package/dist/integrations/providers/impls/powens-client.d.ts +124 -0
  247. package/dist/integrations/providers/impls/powens-client.js +171 -0
  248. package/dist/integrations/providers/impls/powens-openbanking.d.ts +27 -0
  249. package/dist/integrations/providers/impls/powens-openbanking.js +218 -0
  250. package/dist/integrations/providers/impls/provider-factory.d.ts +26 -0
  251. package/dist/integrations/providers/impls/provider-factory.js +146 -0
  252. package/dist/integrations/providers/impls/qdrant-vector.d.ts +24 -0
  253. package/dist/integrations/providers/impls/qdrant-vector.js +69 -0
  254. package/dist/integrations/providers/impls/stripe-payments.d.ts +28 -0
  255. package/dist/integrations/providers/impls/stripe-payments.js +202 -0
  256. package/dist/integrations/providers/impls/twilio-sms.d.ts +20 -0
  257. package/dist/integrations/providers/impls/twilio-sms.js +58 -0
  258. package/dist/integrations/providers/index.d.ts +22 -0
  259. package/dist/integrations/providers/index.js +13 -0
  260. package/dist/integrations/providers/llm.d.ts +82 -0
  261. package/dist/integrations/providers/llm.js +0 -0
  262. package/dist/integrations/providers/mistral.d.ts +8 -0
  263. package/dist/integrations/providers/mistral.js +72 -0
  264. package/dist/integrations/providers/openbanking.d.ts +128 -0
  265. package/dist/integrations/providers/openbanking.js +0 -0
  266. package/dist/integrations/providers/payments.d.ts +109 -0
  267. package/dist/integrations/providers/payments.js +0 -0
  268. package/dist/integrations/providers/postmark.d.ts +8 -0
  269. package/dist/integrations/providers/postmark.js +72 -0
  270. package/dist/integrations/providers/powens.d.ts +8 -0
  271. package/dist/integrations/providers/powens.js +120 -0
  272. package/dist/integrations/providers/qdrant.d.ts +8 -0
  273. package/dist/integrations/providers/qdrant.js +77 -0
  274. package/dist/integrations/providers/registry.d.ts +11 -0
  275. package/dist/integrations/providers/registry.js +34 -0
  276. package/dist/integrations/providers/sms.d.ts +34 -0
  277. package/dist/integrations/providers/sms.js +0 -0
  278. package/dist/integrations/providers/storage.d.ts +60 -0
  279. package/dist/integrations/providers/storage.js +0 -0
  280. package/dist/integrations/providers/stripe.d.ts +8 -0
  281. package/dist/integrations/providers/stripe.js +87 -0
  282. package/dist/integrations/providers/twilio-sms.d.ts +8 -0
  283. package/dist/integrations/providers/twilio-sms.js +65 -0
  284. package/dist/integrations/providers/vector-store.d.ts +43 -0
  285. package/dist/integrations/providers/vector-store.js +0 -0
  286. package/dist/integrations/providers/voice.d.ts +34 -0
  287. package/dist/integrations/providers/voice.js +0 -0
  288. package/dist/integrations/runtime.d.ts +99 -0
  289. package/dist/integrations/runtime.js +186 -0
  290. package/dist/integrations/secrets/aws-secret-manager.d.ts +31 -0
  291. package/dist/integrations/secrets/aws-secret-manager.js +231 -0
  292. package/dist/integrations/secrets/env-secret-provider.d.ts +31 -0
  293. package/dist/integrations/secrets/env-secret-provider.js +81 -0
  294. package/dist/integrations/secrets/gcp-secret-manager.d.ts +32 -0
  295. package/dist/integrations/secrets/gcp-secret-manager.js +229 -0
  296. package/dist/integrations/secrets/index.d.ts +7 -0
  297. package/dist/integrations/secrets/index.js +8 -0
  298. package/dist/integrations/secrets/manager.d.ts +47 -0
  299. package/dist/integrations/secrets/manager.js +103 -0
  300. package/dist/integrations/secrets/provider.d.ts +52 -0
  301. package/dist/integrations/secrets/provider.js +58 -0
  302. package/dist/integrations/secrets/scaleway-secret-manager.d.ts +38 -0
  303. package/dist/integrations/secrets/scaleway-secret-manager.js +247 -0
  304. package/dist/integrations/secrets-types.d.ts +17 -0
  305. package/dist/integrations/secrets-types.js +0 -0
  306. package/dist/integrations/spec.d.ts +77 -0
  307. package/dist/integrations/spec.js +22 -0
  308. package/dist/jobs/define-job.d.ts +18 -0
  309. package/dist/jobs/define-job.js +16 -0
  310. package/dist/jobs/gcp-cloud-tasks.d.ts +41 -0
  311. package/dist/jobs/gcp-cloud-tasks.js +53 -0
  312. package/dist/jobs/gcp-pubsub.d.ts +25 -0
  313. package/dist/jobs/gcp-pubsub.js +39 -0
  314. package/dist/jobs/handlers/gmail-sync-handler.d.ts +9 -0
  315. package/dist/jobs/handlers/gmail-sync-handler.js +9 -0
  316. package/dist/jobs/handlers/index.d.ts +9 -0
  317. package/dist/jobs/handlers/index.js +12 -0
  318. package/dist/jobs/handlers/ping-handler.d.ts +10 -0
  319. package/dist/jobs/handlers/ping-handler.js +15 -0
  320. package/dist/jobs/handlers/storage-document-handler.d.ts +12 -0
  321. package/dist/jobs/handlers/storage-document-handler.js +14 -0
  322. package/dist/jobs/index.d.ts +3 -0
  323. package/dist/jobs/index.js +4 -0
  324. package/dist/jobs/memory-queue.d.ts +18 -0
  325. package/dist/jobs/memory-queue.js +71 -0
  326. package/dist/jobs/queue.d.ts +131 -0
  327. package/dist/jobs/queue.js +33 -0
  328. package/dist/jobs/scaleway-sqs-queue.d.ts +30 -0
  329. package/dist/jobs/scaleway-sqs-queue.js +153 -0
  330. package/dist/jsonschema.d.ts +42 -0
  331. package/dist/jsonschema.js +51 -0
  332. package/dist/knowledge/binding.d.ts +25 -0
  333. package/dist/knowledge/binding.js +0 -0
  334. package/dist/knowledge/docs/knowledge.docblock.d.ts +6 -0
  335. package/dist/knowledge/docs/knowledge.docblock.js +21 -0
  336. package/dist/knowledge/index.d.ts +11 -0
  337. package/dist/knowledge/index.js +10 -0
  338. package/dist/knowledge/ingestion/document-processor.d.ts +24 -0
  339. package/dist/knowledge/ingestion/document-processor.js +54 -0
  340. package/dist/knowledge/ingestion/embedding-service.d.ts +12 -0
  341. package/dist/knowledge/ingestion/embedding-service.js +25 -0
  342. package/dist/knowledge/ingestion/gmail-adapter.d.ts +18 -0
  343. package/dist/knowledge/ingestion/gmail-adapter.js +51 -0
  344. package/dist/knowledge/ingestion/index.d.ts +6 -0
  345. package/dist/knowledge/ingestion/index.js +7 -0
  346. package/dist/knowledge/ingestion/storage-adapter.d.ts +15 -0
  347. package/dist/knowledge/ingestion/storage-adapter.js +26 -0
  348. package/dist/knowledge/ingestion/vector-indexer.d.ts +18 -0
  349. package/dist/knowledge/ingestion/vector-indexer.js +32 -0
  350. package/dist/knowledge/knowledge.capability.d.ts +7 -0
  351. package/dist/knowledge/knowledge.capability.js +21 -0
  352. package/dist/knowledge/knowledge.feature.d.ts +11 -0
  353. package/dist/knowledge/knowledge.feature.js +68 -0
  354. package/dist/knowledge/operations.d.ts +318 -0
  355. package/dist/knowledge/operations.js +321 -0
  356. package/dist/knowledge/query/index.d.ts +2 -0
  357. package/dist/knowledge/query/index.js +3 -0
  358. package/dist/knowledge/query/service.d.ts +29 -0
  359. package/dist/knowledge/query/service.js +65 -0
  360. package/dist/knowledge/runtime.d.ts +32 -0
  361. package/dist/knowledge/runtime.js +49 -0
  362. package/dist/knowledge/source.d.ts +32 -0
  363. package/dist/knowledge/source.js +0 -0
  364. package/dist/knowledge/spaces/email-threads.d.ts +7 -0
  365. package/dist/knowledge/spaces/email-threads.js +37 -0
  366. package/dist/knowledge/spaces/financial-docs.d.ts +7 -0
  367. package/dist/knowledge/spaces/financial-docs.js +37 -0
  368. package/dist/knowledge/spaces/financial-overview.d.ts +7 -0
  369. package/dist/knowledge/spaces/financial-overview.js +41 -0
  370. package/dist/knowledge/spaces/index.d.ts +7 -0
  371. package/dist/knowledge/spaces/index.js +8 -0
  372. package/dist/knowledge/spaces/product-canon.d.ts +7 -0
  373. package/dist/knowledge/spaces/product-canon.js +37 -0
  374. package/dist/knowledge/spaces/support-faq.d.ts +7 -0
  375. package/dist/knowledge/spaces/support-faq.js +40 -0
  376. package/dist/knowledge/spaces/uploaded-docs.d.ts +7 -0
  377. package/dist/knowledge/spaces/uploaded-docs.js +37 -0
  378. package/dist/knowledge/spec.d.ts +46 -0
  379. package/dist/knowledge/spec.js +17 -0
  380. package/dist/llm/exporters.d.ts +70 -0
  381. package/dist/llm/exporters.js +542 -0
  382. package/dist/llm/index.d.ts +4 -0
  383. package/dist/llm/index.js +4 -0
  384. package/dist/llm/prompts.d.ts +52 -0
  385. package/dist/llm/prompts.js +410 -0
  386. package/dist/llm/types.d.ts +215 -0
  387. package/dist/llm/types.js +0 -0
  388. package/dist/markdown.d.ts +22 -0
  389. package/dist/markdown.js +119 -0
  390. package/dist/migrations.d.ts +52 -0
  391. package/dist/migrations.js +31 -0
  392. package/dist/model-registry.d.ts +13 -0
  393. package/dist/model-registry.js +33 -0
  394. package/dist/onboarding-base.d.ts +138 -0
  395. package/dist/onboarding-base.js +195 -0
  396. package/dist/openapi.d.ts +31 -0
  397. package/dist/openapi.js +82 -0
  398. package/dist/operations/index.d.ts +3 -0
  399. package/dist/operations/index.js +4 -0
  400. package/dist/operations/operation.d.ts +186 -0
  401. package/dist/operations/operation.js +35 -0
  402. package/dist/operations/registry.d.ts +54 -0
  403. package/dist/operations/registry.js +176 -0
  404. package/dist/ownership.d.ts +84 -0
  405. package/dist/ownership.js +38 -0
  406. package/dist/policy/docs/policy.docblock.d.ts +6 -0
  407. package/dist/policy/docs/policy.docblock.js +21 -0
  408. package/dist/policy/engine.d.ts +40 -0
  409. package/dist/policy/engine.js +225 -0
  410. package/dist/policy/index.d.ts +5 -0
  411. package/dist/policy/index.js +5 -0
  412. package/dist/policy/opa-adapter.d.ts +45 -0
  413. package/dist/policy/opa-adapter.js +71 -0
  414. package/dist/policy/registry.d.ts +9 -0
  415. package/dist/policy/registry.js +11 -0
  416. package/dist/policy/spec.d.ts +103 -0
  417. package/dist/policy/spec.js +0 -0
  418. package/dist/presentations/docs/presentations-conventions.docblock.d.ts +6 -0
  419. package/dist/presentations/docs/presentations-conventions.docblock.js +21 -0
  420. package/dist/presentations/index.d.ts +4 -0
  421. package/dist/presentations/index.js +5 -0
  422. package/dist/presentations/presentations.d.ts +50 -0
  423. package/dist/presentations/presentations.js +7 -0
  424. package/dist/presentations/registry.d.ts +10 -0
  425. package/dist/presentations/registry.js +12 -0
  426. package/dist/presentations/transform-engine.d.ts +66 -0
  427. package/dist/presentations/transform-engine.js +282 -0
  428. package/dist/prompt.d.ts +53 -0
  429. package/dist/prompt.js +10 -0
  430. package/dist/promptRegistry.d.ts +15 -0
  431. package/dist/promptRegistry.js +31 -0
  432. package/dist/regenerator/adapters.d.ts +19 -0
  433. package/dist/regenerator/adapters.js +0 -0
  434. package/dist/regenerator/docs/regenerator.docblock.d.ts +6 -0
  435. package/dist/regenerator/docs/regenerator.docblock.js +21 -0
  436. package/dist/regenerator/executor.d.ts +70 -0
  437. package/dist/regenerator/executor.js +86 -0
  438. package/dist/regenerator/index.d.ts +7 -0
  439. package/dist/regenerator/index.js +6 -0
  440. package/dist/regenerator/service.d.ts +33 -0
  441. package/dist/regenerator/service.js +93 -0
  442. package/dist/regenerator/sinks.d.ts +26 -0
  443. package/dist/regenerator/sinks.js +32 -0
  444. package/dist/regenerator/types.d.ts +107 -0
  445. package/dist/regenerator/types.js +0 -0
  446. package/dist/regenerator/utils.d.ts +9 -0
  447. package/dist/regenerator/utils.js +51 -0
  448. package/dist/registry-utils.d.ts +106 -0
  449. package/dist/registry-utils.js +122 -0
  450. package/dist/registry.d.ts +32 -0
  451. package/dist/registry.js +61 -0
  452. package/dist/resources.d.ts +64 -0
  453. package/dist/resources.js +50 -0
  454. package/dist/schema-to-markdown.d.ts +54 -0
  455. package/dist/schema-to-markdown.js +217 -0
  456. package/dist/server/contracts-adapter-hydration.d.ts +15 -0
  457. package/dist/server/contracts-adapter-hydration.js +41 -0
  458. package/dist/server/contracts-adapter-input.d.ts +9 -0
  459. package/dist/server/contracts-adapter-input.js +83 -0
  460. package/dist/server/graphql-pothos.d.ts +31 -0
  461. package/dist/server/graphql-pothos.js +134 -0
  462. package/dist/server/index.d.ts +9 -0
  463. package/dist/server/index.js +10 -0
  464. package/dist/server/mcp/createMcpServer.d.ts +15 -0
  465. package/dist/server/mcp/createMcpServer.js +27 -0
  466. package/dist/server/mcp/mcpTypes.d.ts +27 -0
  467. package/dist/server/mcp/mcpTypes.js +0 -0
  468. package/dist/server/mcp/registerPresentations.d.ts +7 -0
  469. package/dist/server/mcp/registerPresentations.js +54 -0
  470. package/dist/server/mcp/registerPrompts.d.ts +8 -0
  471. package/dist/server/mcp/registerPrompts.js +41 -0
  472. package/dist/server/mcp/registerResources.d.ts +8 -0
  473. package/dist/server/mcp/registerResources.js +35 -0
  474. package/dist/server/mcp/registerTools.d.ts +8 -0
  475. package/dist/server/mcp/registerTools.js +22 -0
  476. package/dist/server/provider-mcp.d.ts +2 -0
  477. package/dist/server/provider-mcp.js +3 -0
  478. package/dist/server/rest-elysia.d.ts +40 -0
  479. package/dist/server/rest-elysia.js +20 -0
  480. package/dist/server/rest-express.d.ts +16 -0
  481. package/dist/server/rest-express.js +36 -0
  482. package/dist/server/rest-generic.d.ts +32 -0
  483. package/dist/server/rest-generic.js +124 -0
  484. package/dist/server/rest-next-app.d.ts +35 -0
  485. package/dist/server/rest-next-app.js +38 -0
  486. package/dist/server/rest-next-mcp.d.ts +11 -0
  487. package/dist/server/rest-next-mcp.js +45 -0
  488. package/dist/server/rest-next-pages.d.ts +9 -0
  489. package/dist/server/rest-next-pages.js +22 -0
  490. package/dist/telemetry/anomaly.d.ts +27 -0
  491. package/dist/telemetry/anomaly.js +48 -0
  492. package/dist/telemetry/docs/telemetry.docblock.d.ts +6 -0
  493. package/dist/telemetry/docs/telemetry.docblock.js +21 -0
  494. package/dist/telemetry/index.d.ts +4 -0
  495. package/dist/telemetry/index.js +5 -0
  496. package/dist/telemetry/spec.d.ts +91 -0
  497. package/dist/telemetry/spec.js +42 -0
  498. package/dist/telemetry/tracker.d.ts +51 -0
  499. package/dist/telemetry/tracker.js +76 -0
  500. package/dist/tests/index.d.ts +3 -0
  501. package/dist/tests/index.js +4 -0
  502. package/dist/tests/runner.d.ts +43 -0
  503. package/dist/tests/runner.js +150 -0
  504. package/dist/tests/spec.d.ts +82 -0
  505. package/dist/tests/spec.js +34 -0
  506. package/dist/themes.d.ts +51 -0
  507. package/dist/themes.js +17 -0
  508. package/dist/translations/catalog.d.ts +28 -0
  509. package/dist/translations/catalog.js +0 -0
  510. package/dist/translations/tenant.d.ts +15 -0
  511. package/dist/translations/tenant.js +0 -0
  512. package/dist/types.d.ts +92 -0
  513. package/dist/types.js +0 -0
  514. package/dist/versioning/index.d.ts +3 -0
  515. package/dist/versioning/index.js +4 -0
  516. package/dist/versioning/types.d.ts +127 -0
  517. package/dist/versioning/types.js +24 -0
  518. package/dist/versioning/utils.d.ts +95 -0
  519. package/dist/versioning/utils.js +180 -0
  520. package/dist/workflow/adapters/db-adapter.d.ts +46 -0
  521. package/dist/workflow/adapters/db-adapter.js +83 -0
  522. package/dist/workflow/adapters/file-adapter.d.ts +14 -0
  523. package/dist/workflow/adapters/file-adapter.js +11 -0
  524. package/dist/workflow/adapters/index.d.ts +4 -0
  525. package/dist/workflow/adapters/index.js +5 -0
  526. package/dist/workflow/adapters/memory-store.d.ts +18 -0
  527. package/dist/workflow/adapters/memory-store.js +58 -0
  528. package/dist/workflow/expression.d.ts +9 -0
  529. package/dist/workflow/expression.js +99 -0
  530. package/dist/workflow/index.d.ts +17 -0
  531. package/dist/workflow/index.js +16 -0
  532. package/dist/workflow/overview.docblock.d.ts +6 -0
  533. package/dist/workflow/overview.docblock.js +21 -0
  534. package/dist/workflow/runner.d.ts +77 -0
  535. package/dist/workflow/runner.js +337 -0
  536. package/dist/workflow/sla-monitor.d.ts +20 -0
  537. package/dist/workflow/sla-monitor.js +47 -0
  538. package/dist/workflow/spec.d.ts +93 -0
  539. package/dist/workflow/spec.js +11 -0
  540. package/dist/workflow/state.d.ts +35 -0
  541. package/dist/workflow/state.js +0 -0
  542. package/dist/workflow/validation.d.ts +29 -0
  543. package/dist/workflow/validation.js +176 -0
  544. package/dist/workspace-config/contractsrc-schema.d.ts +1162 -0
  545. package/dist/workspace-config/contractsrc-schema.js +421 -0
  546. package/dist/workspace-config/index.d.ts +2 -0
  547. package/dist/workspace-config/index.js +3 -0
  548. package/dist/workspace-config/workspace-config.docblock.d.ts +6 -0
  549. package/dist/workspace-config/workspace-config.docblock.js +45 -0
  550. package/package.json +618 -0
@@ -0,0 +1,99 @@
1
+ //#region src/workflow/expression.ts
2
+ function evaluateExpression(expression, ctx) {
3
+ if (!expression) return true;
4
+ const trimmed = expression.trim();
5
+ if (!trimmed) return true;
6
+ const orParts = splitByOperator(trimmed, "||");
7
+ if (orParts.length > 1) return orParts.some((part) => evaluateExpression(part, ctx));
8
+ const andParts = splitByOperator(trimmed, "&&");
9
+ if (andParts.length > 1) return andParts.every((part) => evaluateExpression(part, ctx));
10
+ return evaluateSingle(trimmed, ctx);
11
+ }
12
+ function evaluateSingle(expr, ctx) {
13
+ const trimmed = expr.trim();
14
+ if (!trimmed) return true;
15
+ if (trimmed.startsWith("!")) return !evaluateSingle(trimmed.slice(1), ctx);
16
+ const comparisonMatch = trimmed.match(/^(data|input|output)\.([A-Za-z0-9_.[\]]+)\s*(===|==|!==|!=|>=|<=|>|<)\s*(.+)$/);
17
+ if (comparisonMatch) {
18
+ const [, root, path, operator, rawRight] = comparisonMatch;
19
+ return compare(resolveRoot(root, ctx, path), parseLiteral(rawRight), operator);
20
+ }
21
+ const truthyMatch = trimmed.match(/^(data|input|output)\.([A-Za-z0-9_.[\]]+)$/);
22
+ if (truthyMatch) {
23
+ const [, root, path] = truthyMatch;
24
+ const value = resolveRoot(root, ctx, path);
25
+ return Boolean(value);
26
+ }
27
+ const literal = parseLiteral(trimmed);
28
+ return Boolean(literal);
29
+ }
30
+ function compare(left, right, operator) {
31
+ switch (operator) {
32
+ case "===":
33
+ case "==": return left === right;
34
+ case "!==":
35
+ case "!=": return left !== right;
36
+ case ">": return Number(left) > Number(right);
37
+ case ">=": return Number(left) >= Number(right);
38
+ case "<": return Number(left) < Number(right);
39
+ case "<=": return Number(left) <= Number(right);
40
+ default: return false;
41
+ }
42
+ }
43
+ function parseLiteral(value) {
44
+ const trimmed = (value ?? "").trim();
45
+ if (trimmed.startsWith("\"") && trimmed.endsWith("\"") || trimmed.startsWith("'") && trimmed.endsWith("'")) return trimmed.slice(1, -1);
46
+ if (/^-?\d+(\.\d+)?$/.test(trimmed)) return Number(trimmed);
47
+ if (/^true$/i.test(trimmed)) return true;
48
+ if (/^false$/i.test(trimmed)) return false;
49
+ if (/^null$/i.test(trimmed)) return null;
50
+ if (/^undefined$/i.test(trimmed)) return void 0;
51
+ return trimmed;
52
+ }
53
+ function resolveRoot(root, ctx, path) {
54
+ return resolvePath(root === "data" ? ctx.data : root === "input" ? ctx.input : ctx.output, path);
55
+ }
56
+ function resolvePath(source, path) {
57
+ if (source == null) return void 0;
58
+ if (!path) return source;
59
+ const segments = path.replace(/\[(\d+)\]/g, ".$1").split(".").filter(Boolean);
60
+ let current = source;
61
+ for (const segment of segments) {
62
+ if (current == null) return void 0;
63
+ current = current[segment];
64
+ }
65
+ return current;
66
+ }
67
+ function splitByOperator(expr, operator) {
68
+ const parts = [];
69
+ let buffer = "";
70
+ let inSingleQuote = false;
71
+ let inDoubleQuote = false;
72
+ for (let i = 0; i < expr.length; i++) {
73
+ const char = expr[i];
74
+ if (!char) continue;
75
+ const next = expr.slice(i, i + operator.length);
76
+ if (char === "'" && !inDoubleQuote) {
77
+ inSingleQuote = !inSingleQuote;
78
+ buffer += char;
79
+ continue;
80
+ }
81
+ if (char === "\"" && !inSingleQuote) {
82
+ inDoubleQuote = !inDoubleQuote;
83
+ buffer += char;
84
+ continue;
85
+ }
86
+ if (!inSingleQuote && !inDoubleQuote && next === operator) {
87
+ parts.push(buffer.trim());
88
+ buffer = "";
89
+ i += operator.length - 1;
90
+ continue;
91
+ }
92
+ buffer += char;
93
+ }
94
+ if (buffer.trim().length) parts.push(buffer.trim());
95
+ return parts;
96
+ }
97
+
98
+ //#endregion
99
+ export { evaluateExpression };
@@ -0,0 +1,17 @@
1
+ import { CompensationStep, CompensationStrategy, FormRef, GuardCondition, GuardConditionKind, RetryPolicy, SLA, Step, StepAction, StepType, Transition, WorkflowDefinition, WorkflowMeta, WorkflowRegistry, WorkflowSpec, WorkflowStatus } from "./spec.js";
2
+ import { ValidateWorkflowSpecOptions, WorkflowValidationError, WorkflowValidationIssue, WorkflowValidationLevel, assertWorkflowSpecValid, validateWorkflowSpec } from "./validation.js";
3
+ import { StateStore, StepExecution, WorkflowState, WorkflowStateFilters } from "./state.js";
4
+ import { GuardContext, GuardEvaluator, OperationExecutor, OperationExecutorContext, WorkflowPreFlightError, WorkflowPreFlightIssue, WorkflowPreFlightIssueSeverity, WorkflowPreFlightIssueType, WorkflowPreFlightResult, WorkflowRunner, WorkflowRunnerConfig } from "./runner.js";
5
+ import { ExpressionContext, evaluateExpression } from "./expression.js";
6
+ import { InMemoryStateStore } from "./adapters/memory-store.js";
7
+ import { PrismaStateStore } from "./adapters/db-adapter.js";
8
+ import { FileStateStoreOptions, createFileStateStore } from "./adapters/file-adapter.js";
9
+ import "./adapters/index.js";
10
+
11
+ //#region src/workflow/index.d.ts
12
+ /**
13
+ * Helper to define a Workflow.
14
+ */
15
+ declare const defineWorkflow: (spec: WorkflowSpec) => WorkflowSpec;
16
+ //#endregion
17
+ export { CompensationStep, CompensationStrategy, ExpressionContext, FileStateStoreOptions, FormRef, GuardCondition, GuardConditionKind, GuardContext, GuardEvaluator, InMemoryStateStore, OperationExecutor, OperationExecutorContext, PrismaStateStore, RetryPolicy, SLA, StateStore, Step, StepAction, StepExecution, StepType, Transition, ValidateWorkflowSpecOptions, WorkflowDefinition, WorkflowMeta, WorkflowPreFlightError, WorkflowPreFlightIssue, WorkflowPreFlightIssueSeverity, WorkflowPreFlightIssueType, WorkflowPreFlightResult, WorkflowRegistry, WorkflowRunner, WorkflowRunnerConfig, WorkflowSpec, WorkflowState, WorkflowStateFilters, WorkflowStatus, WorkflowValidationError, WorkflowValidationIssue, WorkflowValidationLevel, assertWorkflowSpecValid, createFileStateStore, defineWorkflow, evaluateExpression, validateWorkflowSpec };
@@ -0,0 +1,16 @@
1
+ import { WorkflowRegistry } from "./spec.js";
2
+ import { WorkflowValidationError, assertWorkflowSpecValid, validateWorkflowSpec } from "./validation.js";
3
+ import { evaluateExpression } from "./expression.js";
4
+ import { WorkflowPreFlightError, WorkflowRunner } from "./runner.js";
5
+ import { InMemoryStateStore } from "./adapters/memory-store.js";
6
+ import { PrismaStateStore } from "./adapters/db-adapter.js";
7
+ import { createFileStateStore } from "./adapters/file-adapter.js";
8
+
9
+ //#region src/workflow/index.ts
10
+ /**
11
+ * Helper to define a Workflow.
12
+ */
13
+ const defineWorkflow = (spec) => spec;
14
+
15
+ //#endregion
16
+ export { InMemoryStateStore, PrismaStateStore, WorkflowPreFlightError, WorkflowRegistry, WorkflowRunner, WorkflowValidationError, assertWorkflowSpecValid, createFileStateStore, defineWorkflow, evaluateExpression, validateWorkflowSpec };
@@ -0,0 +1,6 @@
1
+ import { DocBlock } from "@contractspec/lib.contracts/docs";
2
+
3
+ //#region src/workflow/overview.docblock.d.ts
4
+ declare const tech_workflows_overview_DocBlocks: DocBlock[];
5
+ //#endregion
6
+ export { tech_workflows_overview_DocBlocks };
@@ -0,0 +1,21 @@
1
+ import { registerDocBlocks } from "../docs/registry.js";
2
+
3
+ //#region src/workflow/overview.docblock.ts
4
+ const tech_workflows_overview_DocBlocks = [{
5
+ id: "docs.tech.workflows.overview",
6
+ title: "WorkflowSpec Overview",
7
+ summary: "WorkflowSpec provides a declarative, versioned format for long-running flows that mix automation and human review. Specs stay inside `@contractspec/lib.contracts` (`src/workflow/spec.ts`) so the same definition powers runtime execution, documentation, and future generation.",
8
+ kind: "reference",
9
+ visibility: "public",
10
+ route: "/docs/tech/workflows/overview",
11
+ tags: [
12
+ "tech",
13
+ "workflows",
14
+ "overview"
15
+ ],
16
+ body: "# WorkflowSpec Overview\n\n## Purpose\n\nWorkflowSpec provides a declarative, versioned format for long-running flows that mix automation and human review. Specs stay inside `@contractspec/lib.contracts` (`src/workflow/spec.ts`) so the same definition powers runtime execution, documentation, and future generation.\n\n## Core Types\n\n- `WorkflowMeta`: ownership metadata (`title`, `domain`, `owners`, `tags`, `stability`) plus `name` and `version`.\n- `WorkflowDefinition`:\n - `entryStepId?`: optional explicit entry point (defaults to first step).\n - `steps[]`: ordered list of `Step` descriptors.\n - `transitions[]`: directed edges between steps with optional expressions.\n - `sla?`: aggregated timing hints for the overall flow or per-step budgets.\n - `compensation?`: fallback operations executed when a workflow is rolled back or fails.\n- `Step`:\n - `type`: `human`, `automation`, or `decision`.\n - `action`: references either a `ContractSpec` (`operation`) or `FormSpec` (`form`).\n - Optional `guard`, `timeoutMs`, and retry policy (`maxAttempts`, `backoff`, `delayMs`, `maxDelayMs?`).\n - `requiredIntegrations?`: integration slot ids that must be bound before the step may execute.\n - `requiredCapabilities?`: `CapabilityRef[]` that must be enabled in the resolved app config.\n- `Transition`: `from` → `to` with optional `condition` string (simple data expressions).\n\n## Registry & Validation\n\n- `WorkflowRegistry` (`src/workflow/spec.ts`) stores specs by key `<name>.v<version>` and exposes `register`, `list`, and `get`.\n- `validateWorkflowSpec()` (`src/workflow/validation.ts`) checks:\n - Duplicate step IDs.\n - Unknown `from`/`to` transitions.\n - Empty guards/conditions.\n - Reachability from the entry step.\n - Cycles in the graph.\n - Operation/Form references against provided registries.\n- `assertWorkflowSpecValid()` wraps validation and throws `WorkflowValidationError` when errors remain.\n\n## Runtime\n\n- `WorkflowRunner` (`src/workflow/runner.ts`) executes workflows and coordinates steps.\n - `start(name, version?, initialData?)` returns a `workflowId`.\n - `executeStep(workflowId, input?)` runs the current step (automation or human).\n - `getState(workflowId)` retrieves the latest state snapshot.\n - `cancel(workflowId)` marks the workflow as cancelled.\n - `preFlightCheck(name, version?, resolvedConfig?)` evaluates integration/capability requirements before the workflow starts.\n - Throws `WorkflowPreFlightError` if required integration slots are unbound or required capabilities are disabled.\n- `StateStore` (`src/workflow/state.ts`) abstracts persistence. V1 ships with:\n - `InMemoryStateStore` (`src/workflow/adapters/memory-store.ts`) for tests/dev.\n - Placeholder factories for file/database adapters (`adapters/file-adapter.ts`, `adapters/db-adapter.ts`).\n- Guard evaluation: expression guards run through `evaluateExpression()` (`src/workflow/expression.ts`); custom policy guards can be provided via `guardEvaluator`.\n- Events: the runner emits `workflow.started`, `workflow.step_completed`, `workflow.step_failed`, and `workflow.cancelled` through the optional `eventEmitter`.\n- React bindings (`@contractspec/lib.presentation-runtime-react`):\n - `useWorkflow` hook (polls state, exposes `executeStep`, `cancel`, `refresh`).\n - `WorkflowStepper` progress indicator using design-system Stepper.\n - `WorkflowStepRenderer` helper to render human/automation/decision steps with sensible fallbacks.\n\n## Authoring Checklist\n\n1. Reuse existing operations/forms; create new specs when missing.\n2. Prefer explicit `entryStepId` for clarity (especially with decision branches).\n3. Give automation steps an `operation` and human steps a `form` (warnings surface otherwise).\n4. Use short, meaningful step IDs (`submit`, `review`, `finalize`) to simplify analytics.\n5. Keep guard expressions deterministic; complex policy logic should move to PolicySpec (Phase 2).\n\n## Testing\n\n- Add unit tests for new workflows via `assertWorkflowSpecValid`.\n- Use the new Vitest suites (`validation.test.ts`, `expression.test.ts`, `runner.test.ts`) as examples.\n- CLI support will arrive in Phase 1 PR 3 (`contractspec create --type workflow`).\n\n## Tooling\n\n- `contractspec create --type workflow` scaffolds a WorkflowSpec with interactive prompts.\n- `contractspec build <spec.workflow.ts>` generates a runner scaffold (`.runner.ts`) wired to `WorkflowRunner` and the in-memory store.\n- `contractspec validate` understands `.workflow.ts` files and checks core structure (meta, steps, transitions).\n\n## Next Steps (Non-MVP)\n\n- Persistence adapters (database/file) for workflow state (Phase 2).\n- React bindings (`useWorkflow`, `WorkflowStepper`) and presentation-runtime integration (PR 3).\n- Policy engine integration (`guard.type === 'policy'` validated against PolicySpec).\n- Telemetry hooks for step execution metrics.\n\n"
17
+ }];
18
+ registerDocBlocks(tech_workflows_overview_DocBlocks);
19
+
20
+ //#endregion
21
+ export { tech_workflows_overview_DocBlocks };
@@ -0,0 +1,77 @@
1
+ import { OpRef } from "../features/types.js";
2
+ import "../features/index.js";
3
+ import { GuardCondition, Step, WorkflowRegistry } from "./spec.js";
4
+ import { ResolvedBranding } from "../app-config/branding.js";
5
+ import { ResolvedAppConfig, ResolvedIntegration, ResolvedKnowledge, ResolvedTranslation } from "../app-config/runtime.js";
6
+ import { SecretProvider } from "../integrations/secrets/provider.js";
7
+ import { TranslationResolver } from "../types.js";
8
+ import { StateStore, WorkflowState } from "./state.js";
9
+
10
+ //#region src/workflow/runner.d.ts
11
+ interface OperationExecutorContext {
12
+ workflow: WorkflowState;
13
+ step: Step;
14
+ resolvedAppConfig?: ResolvedAppConfig;
15
+ integrations?: ResolvedIntegration[];
16
+ knowledge?: ResolvedKnowledge[];
17
+ branding?: ResolvedBranding;
18
+ translation?: ResolvedTranslation;
19
+ translationResolver?: TranslationResolver;
20
+ secretProvider?: SecretProvider;
21
+ }
22
+ type OperationExecutor = (op: OpRef, input: unknown, context: OperationExecutorContext) => Promise<unknown>;
23
+ type WorkflowPreFlightIssueType = 'integration' | 'capability';
24
+ type WorkflowPreFlightIssueSeverity = 'error' | 'warning';
25
+ interface WorkflowPreFlightIssue {
26
+ stepId: string;
27
+ type: WorkflowPreFlightIssueType;
28
+ identifier: string;
29
+ severity: WorkflowPreFlightIssueSeverity;
30
+ reason: string;
31
+ }
32
+ interface WorkflowPreFlightResult {
33
+ canStart: boolean;
34
+ issues: WorkflowPreFlightIssue[];
35
+ }
36
+ interface GuardContext {
37
+ workflow: WorkflowState;
38
+ step: Step;
39
+ input?: unknown;
40
+ }
41
+ type GuardEvaluator = (guard: GuardCondition, context: GuardContext) => Promise<boolean> | boolean;
42
+ interface WorkflowRunnerConfig {
43
+ registry: WorkflowRegistry;
44
+ stateStore: StateStore;
45
+ opExecutor: OperationExecutor;
46
+ guardEvaluator?: GuardEvaluator;
47
+ eventEmitter?: (event: string, payload: Record<string, unknown>) => void;
48
+ appConfigProvider?: (state: WorkflowState) => ResolvedAppConfig | undefined | Promise<ResolvedAppConfig | undefined>;
49
+ enforceCapabilities?: (operation: OpRef, context: OperationExecutorContext) => void | Promise<void>;
50
+ secretProvider?: SecretProvider;
51
+ translationResolver?: TranslationResolver;
52
+ }
53
+ declare class WorkflowRunner {
54
+ private readonly config;
55
+ constructor(config: WorkflowRunnerConfig);
56
+ preFlightCheck(workflowName: string, version?: string,
57
+ // Update to string
58
+ resolvedConfig?: ResolvedAppConfig): Promise<WorkflowPreFlightResult>;
59
+ start(workflowName: string, version?: string, initialData?: Record<string, unknown>): Promise<string>;
60
+ executeStep(workflowId: string, input?: unknown): Promise<void>;
61
+ rollback(workflowId: string): Promise<void>;
62
+ getState(workflowId: string): Promise<WorkflowState>;
63
+ cancel(workflowId: string): Promise<void>;
64
+ private performPreFlight;
65
+ private evaluateGuard;
66
+ private runStepAction;
67
+ private pickNextStepId;
68
+ private getSpec;
69
+ private getStateOrThrow;
70
+ private emit;
71
+ }
72
+ declare class WorkflowPreFlightError extends Error {
73
+ readonly issues: WorkflowPreFlightIssue[];
74
+ constructor(issues: WorkflowPreFlightIssue[]);
75
+ }
76
+ //#endregion
77
+ export { GuardContext, GuardEvaluator, OperationExecutor, OperationExecutorContext, WorkflowPreFlightError, WorkflowPreFlightIssue, WorkflowPreFlightIssueSeverity, WorkflowPreFlightIssueType, WorkflowPreFlightResult, WorkflowRunner, WorkflowRunnerConfig };
@@ -0,0 +1,337 @@
1
+ import { evaluateExpression } from "./expression.js";
2
+ import { randomUUID } from "node:crypto";
3
+
4
+ //#region src/workflow/runner.ts
5
+ var WorkflowRunner = class {
6
+ constructor(config) {
7
+ this.config = config;
8
+ }
9
+ async preFlightCheck(workflowName, version, resolvedConfig) {
10
+ const spec = this.getSpec(workflowName, version);
11
+ return this.performPreFlight(spec, resolvedConfig);
12
+ }
13
+ async start(workflowName, version, initialData) {
14
+ const spec = this.getSpec(workflowName, version);
15
+ const entryStepId = resolveEntryStepId(spec);
16
+ const now = /* @__PURE__ */ new Date();
17
+ const workflowId = randomUUID();
18
+ const state = {
19
+ workflowId,
20
+ workflowName: spec.meta.key,
21
+ workflowVersion: spec.meta.version,
22
+ currentStep: entryStepId,
23
+ data: { ...initialData ?? {} },
24
+ retryCounts: {},
25
+ history: [],
26
+ status: "running",
27
+ createdAt: now,
28
+ updatedAt: now
29
+ };
30
+ const resolvedAppConfig = this.config.appConfigProvider ? await this.config.appConfigProvider(state) : void 0;
31
+ const preFlightResult = await this.performPreFlight(spec, resolvedAppConfig);
32
+ if (!preFlightResult.canStart) throw new WorkflowPreFlightError(preFlightResult.issues);
33
+ await this.config.stateStore.create(state);
34
+ this.emit("workflow.started", {
35
+ workflowId,
36
+ workflowName: spec.meta.key,
37
+ workflowVersion: spec.meta.version,
38
+ currentStep: entryStepId
39
+ });
40
+ return workflowId;
41
+ }
42
+ async executeStep(workflowId, input) {
43
+ const state = await this.getStateOrThrow(workflowId);
44
+ if (isTerminalStatus(state.status)) throw new Error(`Workflow ${workflowId} is in terminal status "${state.status}".`);
45
+ const spec = this.getSpec(state.workflowName, state.workflowVersion);
46
+ const step = getCurrentStep(spec, state.currentStep);
47
+ if (!await this.evaluateGuard(step, state, input)) throw new Error(`GuardRejected: ${state.workflowName} -> ${step.id}`);
48
+ const execution = {
49
+ stepId: step.id,
50
+ startedAt: /* @__PURE__ */ new Date(),
51
+ status: "running",
52
+ input
53
+ };
54
+ const workingState = {
55
+ ...state,
56
+ data: { ...state.data },
57
+ history: [...state.history]
58
+ };
59
+ try {
60
+ const output = await this.runStepAction(step, workingState, input);
61
+ execution.output = output;
62
+ execution.status = "completed";
63
+ execution.completedAt = /* @__PURE__ */ new Date();
64
+ workingState.history.push(execution);
65
+ workingState.updatedAt = /* @__PURE__ */ new Date();
66
+ if (isRecord(input)) workingState.data = {
67
+ ...workingState.data,
68
+ ...input
69
+ };
70
+ if (isRecord(output)) workingState.data = {
71
+ ...workingState.data,
72
+ ...output
73
+ };
74
+ const nextStepId = this.pickNextStepId(spec, workingState, step, input, output);
75
+ if (nextStepId) {
76
+ workingState.currentStep = nextStepId;
77
+ workingState.status = "running";
78
+ } else if (!hasOutgoing(spec, step.id)) workingState.status = "completed";
79
+ else throw new Error(`No transition matched after executing step "${step.id}".`);
80
+ await this.config.stateStore.update(workflowId, () => workingState);
81
+ this.emit("workflow.step_completed", {
82
+ workflowId,
83
+ workflowName: state.workflowName,
84
+ stepId: step.id,
85
+ status: workingState.status
86
+ });
87
+ } catch (error) {
88
+ execution.status = "failed";
89
+ execution.completedAt = /* @__PURE__ */ new Date();
90
+ execution.error = error instanceof Error ? error.message : String(error);
91
+ workingState.history.push(execution);
92
+ workingState.updatedAt = /* @__PURE__ */ new Date();
93
+ if (step.retry) {
94
+ const retries = state.retryCounts?.[step.id] ?? 0;
95
+ if (retries < step.retry.maxAttempts) {
96
+ const backoff = step.retry.backoff ?? "exponential";
97
+ const baseDelay = step.retry.delayMs ?? 1e3;
98
+ const delay = backoff === "exponential" ? baseDelay * Math.pow(2, retries) : baseDelay;
99
+ const cappedDelay = Math.min(delay, step.retry.maxDelayMs ?? Infinity);
100
+ workingState.retryCounts = {
101
+ ...state.retryCounts ?? {},
102
+ [step.id]: retries + 1
103
+ };
104
+ workingState.status = "running";
105
+ await this.config.stateStore.update(workflowId, () => workingState);
106
+ this.emit("workflow.step_retrying", {
107
+ workflowId,
108
+ workflowName: state.workflowName,
109
+ stepId: step.id,
110
+ attempt: retries + 1,
111
+ delay: cappedDelay,
112
+ error: execution.error
113
+ });
114
+ await new Promise((resolve) => setTimeout(resolve, cappedDelay));
115
+ return this.executeStep(workflowId, input);
116
+ }
117
+ }
118
+ workingState.status = "failed";
119
+ await this.config.stateStore.update(workflowId, () => workingState);
120
+ this.emit("workflow.step_failed", {
121
+ workflowId,
122
+ workflowName: state.workflowName,
123
+ stepId: step.id,
124
+ error: execution.error ?? "unknown"
125
+ });
126
+ if (spec.definition.compensation?.trigger === "on_failure") await this.rollback(workflowId);
127
+ throw error;
128
+ }
129
+ }
130
+ async rollback(workflowId) {
131
+ const state = await this.getStateOrThrow(workflowId);
132
+ const spec = this.getSpec(state.workflowName, state.workflowVersion);
133
+ if (!spec.definition.compensation) return;
134
+ this.emit("workflow.rollback_started", { workflowId });
135
+ const completedSteps = state.history.filter((h) => h.status === "completed").reverse();
136
+ for (const execution of completedSteps) {
137
+ const compStep = spec.definition.compensation.steps.find((s) => s.stepId === execution.stepId);
138
+ if (compStep) {
139
+ const input = {
140
+ stepId: execution.stepId,
141
+ originalInput: execution.input,
142
+ originalOutput: execution.output,
143
+ workflowData: state.data
144
+ };
145
+ try {
146
+ const step = getCurrentStep(spec, execution.stepId);
147
+ const resolvedAppConfig = this.config.appConfigProvider ? await this.config.appConfigProvider(state) : void 0;
148
+ const executorContext = {
149
+ workflow: state,
150
+ step,
151
+ resolvedAppConfig,
152
+ integrations: resolvedAppConfig?.integrations ?? [],
153
+ knowledge: resolvedAppConfig?.knowledge ?? [],
154
+ branding: resolvedAppConfig?.branding,
155
+ translation: resolvedAppConfig?.translation,
156
+ translationResolver: this.config.translationResolver,
157
+ secretProvider: this.config.secretProvider
158
+ };
159
+ await this.config.opExecutor(compStep.operation, input, executorContext);
160
+ this.emit("workflow.compensation_step_completed", {
161
+ workflowId,
162
+ stepId: execution.stepId,
163
+ compensationOp: compStep.operation.key
164
+ });
165
+ } catch (error) {
166
+ const errorMessage = error instanceof Error ? error.message : String(error);
167
+ this.emit("workflow.compensation_step_failed", {
168
+ workflowId,
169
+ stepId: execution.stepId,
170
+ compensationOp: compStep.operation.key,
171
+ error: errorMessage
172
+ });
173
+ }
174
+ }
175
+ }
176
+ this.emit("workflow.rollback_completed", { workflowId });
177
+ }
178
+ async getState(workflowId) {
179
+ return this.getStateOrThrow(workflowId);
180
+ }
181
+ async cancel(workflowId) {
182
+ const state = await this.getStateOrThrow(workflowId);
183
+ if (state.status === "cancelled") return;
184
+ const nextState = {
185
+ ...state,
186
+ status: "cancelled",
187
+ updatedAt: /* @__PURE__ */ new Date()
188
+ };
189
+ await this.config.stateStore.update(workflowId, () => nextState);
190
+ this.emit("workflow.cancelled", {
191
+ workflowId,
192
+ workflowName: state.workflowName
193
+ });
194
+ }
195
+ async performPreFlight(spec, resolvedConfig) {
196
+ if (!resolvedConfig) return {
197
+ canStart: true,
198
+ issues: []
199
+ };
200
+ const issues = [];
201
+ const integrationBySlot = /* @__PURE__ */ new Map();
202
+ for (const integration of resolvedConfig.integrations) integrationBySlot.set(integration.slot.slotId, integration);
203
+ for (const step of spec.definition.steps) for (const slotId of step.requiredIntegrations ?? []) {
204
+ const integration = integrationBySlot.get(slotId);
205
+ if (!integration) {
206
+ issues.push({
207
+ stepId: step.id,
208
+ type: "integration",
209
+ identifier: slotId,
210
+ severity: "error",
211
+ reason: `Integration slot "${slotId}" is not bound in the resolved app config.`
212
+ });
213
+ continue;
214
+ }
215
+ const status = integration.connection.status;
216
+ if (status === "disconnected" || status === "error") issues.push({
217
+ stepId: step.id,
218
+ type: "integration",
219
+ identifier: slotId,
220
+ severity: "error",
221
+ reason: `Integration slot "${slotId}" is in status "${status}".`
222
+ });
223
+ else if (status === "unknown") issues.push({
224
+ stepId: step.id,
225
+ type: "integration",
226
+ identifier: slotId,
227
+ severity: "warning",
228
+ reason: `Integration slot "${slotId}" reports unknown health status.`
229
+ });
230
+ }
231
+ const enabledCapabilities = new Set(resolvedConfig.capabilities.enabled.map(capabilityKey));
232
+ for (const step of spec.definition.steps) for (const required of step.requiredCapabilities ?? []) if (!enabledCapabilities.has(capabilityKey(required))) issues.push({
233
+ stepId: step.id,
234
+ type: "capability",
235
+ identifier: capabilityKey(required),
236
+ severity: "error",
237
+ reason: `Capability "${required.key}@${required.version}" is not enabled.`
238
+ });
239
+ return {
240
+ canStart: issues.every((issue) => issue.severity !== "error"),
241
+ issues
242
+ };
243
+ }
244
+ async evaluateGuard(step, state, input) {
245
+ if (!step.guard) return true;
246
+ if (this.config.guardEvaluator) return this.config.guardEvaluator(step.guard, {
247
+ workflow: state,
248
+ step,
249
+ input
250
+ });
251
+ if (step.guard.type === "expression") return evaluateExpression(step.guard.value, {
252
+ data: state.data,
253
+ input
254
+ });
255
+ return true;
256
+ }
257
+ async runStepAction(step, state, input) {
258
+ if (step.type === "automation") {
259
+ const op = step.action?.operation;
260
+ if (!op) throw new Error(`Automation step "${step.id}" requires an operation.`);
261
+ const resolvedAppConfig = this.config.appConfigProvider ? await this.config.appConfigProvider(state) : void 0;
262
+ const executorContext = {
263
+ workflow: state,
264
+ step,
265
+ resolvedAppConfig,
266
+ integrations: resolvedAppConfig?.integrations ?? [],
267
+ knowledge: resolvedAppConfig?.knowledge ?? [],
268
+ branding: resolvedAppConfig?.branding,
269
+ translation: resolvedAppConfig?.translation,
270
+ translationResolver: this.config.translationResolver,
271
+ secretProvider: this.config.secretProvider
272
+ };
273
+ if (this.config.enforceCapabilities) await this.config.enforceCapabilities(op, executorContext);
274
+ return this.config.opExecutor(op, input, executorContext);
275
+ }
276
+ if (step.type === "human") return input;
277
+ return input;
278
+ }
279
+ pickNextStepId(spec, state, step, input, output) {
280
+ const transitions = spec.definition.transitions.filter((t) => t.from === step.id);
281
+ for (const transition of transitions) if (evaluateExpression(transition.condition, {
282
+ data: state.data,
283
+ input,
284
+ output
285
+ })) {
286
+ const target = spec.definition.steps.find((s) => s.id === transition.to);
287
+ if (!target) throw new Error(`Transition ${transition.from} -> ${transition.to} points to missing step.`);
288
+ return target.id;
289
+ }
290
+ return null;
291
+ }
292
+ getSpec(name, version) {
293
+ const spec = this.config.registry.get(name, version);
294
+ if (!spec) throw new Error(`Workflow spec not found for ${name}${version ? `.v${version}` : ""}`);
295
+ return spec;
296
+ }
297
+ async getStateOrThrow(workflowId) {
298
+ const state = await this.config.stateStore.get(workflowId);
299
+ if (!state) throw new Error(`Workflow state not found for ${workflowId}`);
300
+ return state;
301
+ }
302
+ emit(event, payload) {
303
+ this.config.eventEmitter?.(event, payload);
304
+ }
305
+ };
306
+ function resolveEntryStepId(spec) {
307
+ const entry = spec.definition.entryStepId ?? spec.definition.steps[0]?.id ?? null;
308
+ if (!entry) throw new Error(`Workflow ${spec.meta.key}.v${spec.meta.version} has no entry step.`);
309
+ return entry;
310
+ }
311
+ function getCurrentStep(spec, stepId) {
312
+ const step = spec.definition.steps.find((s) => s.id === stepId);
313
+ if (!step) throw new Error(`Step "${stepId}" not found in workflow ${spec.meta.key}.v${spec.meta.version}.`);
314
+ return step;
315
+ }
316
+ function hasOutgoing(spec, stepId) {
317
+ return spec.definition.transitions.some((t) => t.from === stepId);
318
+ }
319
+ function isRecord(value) {
320
+ return value != null && typeof value === "object" && !Array.isArray(value);
321
+ }
322
+ function isTerminalStatus(status) {
323
+ return status === "completed" || status === "failed" || status === "cancelled";
324
+ }
325
+ var WorkflowPreFlightError = class extends Error {
326
+ constructor(issues) {
327
+ super(`Workflow pre-flight failed: ${issues.filter((issue) => issue.severity === "error").map((issue) => `${issue.type}:${issue.identifier}`).join(", ")}`);
328
+ this.issues = issues;
329
+ this.name = "WorkflowPreFlightError";
330
+ }
331
+ };
332
+ function capabilityKey(ref) {
333
+ return `${ref.key}@${ref.version}`;
334
+ }
335
+
336
+ //#endregion
337
+ export { WorkflowPreFlightError, WorkflowRunner };
@@ -0,0 +1,20 @@
1
+ import { WorkflowSpec } from "./spec.js";
2
+ import { WorkflowState } from "./state.js";
3
+
4
+ //#region src/workflow/sla-monitor.d.ts
5
+ interface SLABreachEvent {
6
+ workflowId: string;
7
+ workflowName: string;
8
+ type: 'workflow_duration' | 'step_duration';
9
+ stepId?: string;
10
+ expectedMs: number;
11
+ actualMs: number;
12
+ breachedAt: Date;
13
+ }
14
+ declare class SLAMonitor {
15
+ private readonly eventEmitter;
16
+ constructor(eventEmitter: (event: string, payload: SLABreachEvent) => void);
17
+ check(state: WorkflowState, spec: WorkflowSpec): void;
18
+ }
19
+ //#endregion
20
+ export { SLABreachEvent, SLAMonitor };
@@ -0,0 +1,47 @@
1
+ //#region src/workflow/sla-monitor.ts
2
+ var SLAMonitor = class {
3
+ constructor(eventEmitter) {
4
+ this.eventEmitter = eventEmitter;
5
+ }
6
+ check(state, spec) {
7
+ const sla = spec.definition.sla;
8
+ if (!sla) return;
9
+ const now = (/* @__PURE__ */ new Date()).getTime();
10
+ if (sla.totalDurationMs) {
11
+ const duration = now - state.createdAt.getTime();
12
+ if (duration > sla.totalDurationMs) {
13
+ if (state.status === "running" || state.status === "paused") this.eventEmitter("workflow.sla_breach", {
14
+ workflowId: state.workflowId,
15
+ workflowName: state.workflowName,
16
+ type: "workflow_duration",
17
+ expectedMs: sla.totalDurationMs,
18
+ actualMs: duration,
19
+ breachedAt: /* @__PURE__ */ new Date()
20
+ });
21
+ }
22
+ }
23
+ if (sla.stepDurationMs) {
24
+ if (state.status === "running" && state.currentStep) {
25
+ const currentExecution = state.history.find((h) => h.stepId === state.currentStep && h.status === "running");
26
+ if (currentExecution) {
27
+ const stepLimit = sla.stepDurationMs[state.currentStep];
28
+ if (stepLimit) {
29
+ const stepDuration = now - currentExecution.startedAt.getTime();
30
+ if (stepDuration > stepLimit) this.eventEmitter("workflow.sla_breach", {
31
+ workflowId: state.workflowId,
32
+ workflowName: state.workflowName,
33
+ type: "step_duration",
34
+ stepId: state.currentStep,
35
+ expectedMs: stepLimit,
36
+ actualMs: stepDuration,
37
+ breachedAt: /* @__PURE__ */ new Date()
38
+ });
39
+ }
40
+ }
41
+ }
42
+ }
43
+ }
44
+ };
45
+
46
+ //#endregion
47
+ export { SLAMonitor };