@contractspec/bundle.library 3.8.12 → 3.9.2

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 (683) hide show
  1. package/.turbo/turbo-build.log +614 -602
  2. package/CHANGELOG.md +97 -0
  3. package/dist/application/context-storage/index.js +1 -1
  4. package/dist/application/index.js +11 -11
  5. package/dist/application/mcp/cliMcp.js +6 -6
  6. package/dist/application/mcp/cliMcp.onboarding.d.ts +4 -0
  7. package/dist/application/mcp/cliMcp.onboarding.js +2 -0
  8. package/dist/application/mcp/cliMcp.test.d.ts +1 -0
  9. package/dist/application/mcp/common.js +1 -1
  10. package/dist/application/mcp/contractsMcp.js +2 -2
  11. package/dist/application/mcp/contractsMcp.test.d.ts +1 -0
  12. package/dist/application/mcp/contractsMcpAdoptionTools.d.ts +3 -0
  13. package/dist/application/mcp/contractsMcpAdoptionTools.js +2 -0
  14. package/dist/application/mcp/contractsMcpResources.js +2 -2
  15. package/dist/application/mcp/contractsMcpTools.js +1 -1
  16. package/dist/application/mcp/contractsMcpTypes.d.ts +16 -0
  17. package/dist/application/mcp/docsMcp.catalog.js +2 -2
  18. package/dist/application/mcp/docsMcp.data.js +1 -1
  19. package/dist/application/mcp/docsMcp.js +3 -3
  20. package/dist/application/mcp/docsMcp.prompts.js +3 -3
  21. package/dist/application/mcp/docsMcp.reference.js +2 -2
  22. package/dist/application/mcp/docsMcp.resources.js +2 -2
  23. package/dist/application/mcp/docsMcp.tools.js +2 -2
  24. package/dist/application/mcp/index.js +11 -11
  25. package/dist/application/mcp/internalMcp.js +2 -2
  26. package/dist/application/mcp/normalizeMcpRequest.js +1 -1
  27. package/dist/application/mcp/providerRankingMcp.js +1 -1
  28. package/dist/bundles/LibraryBundle.d.ts +19 -111
  29. package/dist/bundles/LibraryBundle.js +1 -1
  30. package/dist/bundles/index.js +1 -1
  31. package/dist/components/docs/DocsIndexPage.js +2 -2
  32. package/dist/components/docs/advanced/AdvancedMCPPage.js +3 -3
  33. package/dist/components/docs/advanced/AdvancedOverlayEditorPage.js +1 -1
  34. package/dist/components/docs/advanced/AdvancedRenderersPage.js +2 -2
  35. package/dist/components/docs/advanced/AdvancedSpecExperimentsPage.js +4 -4
  36. package/dist/components/docs/advanced/AdvancedTelemetryPage.js +2 -2
  37. package/dist/components/docs/advanced/AdvancedWorkflowMonitoringPage.js +2 -2
  38. package/dist/components/docs/advanced/index.js +9 -9
  39. package/dist/components/docs/architecture/ArchitectureAppConfigPage.js +6 -6
  40. package/dist/components/docs/architecture/ArchitectureControlPlanePage.js +3 -3
  41. package/dist/components/docs/architecture/ArchitectureIntegrationBindingPage.js +7 -7
  42. package/dist/components/docs/architecture/ArchitectureKnowledgeBindingPage.js +6 -6
  43. package/dist/components/docs/architecture/ArchitectureMultiTenancyPage.js +2 -2
  44. package/dist/components/docs/architecture/ArchitectureOverviewPage.js +1 -1
  45. package/dist/components/docs/architecture/index.js +20 -20
  46. package/dist/components/docs/comparison/ComparisonAutomationPlatformsPage.js +1 -1
  47. package/dist/components/docs/comparison/ComparisonEnterprisePlatformsPage.js +1 -1
  48. package/dist/components/docs/comparison/ComparisonInternalToolBuildersPage.js +1 -1
  49. package/dist/components/docs/comparison/ComparisonOverviewPage.js +1 -1
  50. package/dist/components/docs/comparison/ComparisonWindmillPage.js +1 -1
  51. package/dist/components/docs/comparison/ComparisonWorkflowEnginesPage.js +1 -1
  52. package/dist/components/docs/comparison/index.js +1 -1
  53. package/dist/components/docs/docsManifest.js +1 -1
  54. package/dist/components/docs/ecosystem/IntegrationsPage.js +2 -2
  55. package/dist/components/docs/ecosystem/PluginsPage.js +4 -4
  56. package/dist/components/docs/ecosystem/RegistryPage.js +4 -4
  57. package/dist/components/docs/ecosystem/TemplatesPage.js +3 -3
  58. package/dist/components/docs/ecosystem/index.js +11 -11
  59. package/dist/components/docs/examples/DocsExamplesPage.js +1 -17
  60. package/dist/components/docs/examples/ExampleShowcasePage.d.ts +1 -1
  61. package/dist/components/docs/examples/ExampleShowcasePage.js +2 -17
  62. package/dist/components/docs/examples/exampleShowcaseData.d.ts +2 -2
  63. package/dist/components/docs/examples/exampleShowcaseData.js +2 -17
  64. package/dist/components/docs/examples/exampleShowcaseData.test.d.ts +1 -0
  65. package/dist/components/docs/examples/index.js +2 -17
  66. package/dist/components/docs/generated/docs-index.generated.js +1 -1
  67. package/dist/components/docs/generated/index.d.ts +7 -1
  68. package/dist/components/docs/generated/index.js +1 -1
  69. package/dist/components/docs/generated/loader.js +1 -1
  70. package/dist/components/docs/getting-started/CLIPage.js +6 -5
  71. package/dist/components/docs/getting-started/CompatibilityPage.js +1 -1
  72. package/dist/components/docs/getting-started/DataViewTutorialPage.js +44 -67
  73. package/dist/components/docs/getting-started/DeveloperToolsPage.js +1 -1
  74. package/dist/components/docs/getting-started/HelloWorldPage.js +5 -5
  75. package/dist/components/docs/getting-started/InstallationPage.js +3 -3
  76. package/dist/components/docs/getting-started/StartHerePage.js +4 -2
  77. package/dist/components/docs/getting-started/TroubleshootingPage.js +2 -2
  78. package/dist/components/docs/getting-started/VSCodeExtensionPage.js +1 -1
  79. package/dist/components/docs/getting-started/getting-started.docblocks.js +2 -2
  80. package/dist/components/docs/getting-started/index.js +60 -80
  81. package/dist/components/docs/guides/GuideCIDiffGatingPage.js +2 -2
  82. package/dist/components/docs/guides/GuideConnectInRepoPage.js +30 -5
  83. package/dist/components/docs/guides/GuideContractTypesPage.js +6 -6
  84. package/dist/components/docs/guides/GuideDocsPipelinePage.js +3 -3
  85. package/dist/components/docs/guides/GuideFirstModuleBundlePage.js +4 -4
  86. package/dist/components/docs/guides/GuideGenerateDocsClientsSchemasPage.js +2 -2
  87. package/dist/components/docs/guides/GuideHostBuilderWorkbenchPage.js +21 -6
  88. package/dist/components/docs/guides/GuideImportExistingCodebasesPage.js +8 -8
  89. package/dist/components/docs/guides/GuideNextjsOneEndpointPage.js +6 -6
  90. package/dist/components/docs/guides/GuideReleaseCapsulesPage.d.ts +1 -0
  91. package/dist/components/docs/guides/GuideReleaseCapsulesPage.js +16 -0
  92. package/dist/components/docs/guides/GuideSpecValidationTypingPage.js +4 -4
  93. package/dist/components/docs/guides/GuidesIndexPage.js +2 -2
  94. package/dist/components/docs/guides/index.d.ts +1 -0
  95. package/dist/components/docs/guides/index.js +93 -39
  96. package/dist/components/docs/index.js +690 -419
  97. package/dist/components/docs/integrations/IntegrationsCircuitBreakersPage.js +2 -2
  98. package/dist/components/docs/integrations/IntegrationsElevenLabsPage.js +3 -3
  99. package/dist/components/docs/integrations/IntegrationsGithubPage.js +2 -2
  100. package/dist/components/docs/integrations/IntegrationsGmailPage.js +3 -3
  101. package/dist/components/docs/integrations/IntegrationsGoogleCalendarPage.js +3 -3
  102. package/dist/components/docs/integrations/IntegrationsHealthRoutingPage.js +2 -2
  103. package/dist/components/docs/integrations/IntegrationsMistralPage.js +2 -2
  104. package/dist/components/docs/integrations/IntegrationsOpenAIPage.js +2 -2
  105. package/dist/components/docs/integrations/IntegrationsOverviewPage.js +1 -1
  106. package/dist/components/docs/integrations/IntegrationsPostmarkPage.js +2 -2
  107. package/dist/components/docs/integrations/IntegrationsPowensPage.js +2 -2
  108. package/dist/components/docs/integrations/IntegrationsQdrantPage.js +5 -5
  109. package/dist/components/docs/integrations/IntegrationsResendPage.js +3 -3
  110. package/dist/components/docs/integrations/IntegrationsS3Page.js +4 -4
  111. package/dist/components/docs/integrations/IntegrationsSlackPage.js +2 -2
  112. package/dist/components/docs/integrations/IntegrationsSpecModelPage.js +2 -2
  113. package/dist/components/docs/integrations/IntegrationsStripePage.js +2 -2
  114. package/dist/components/docs/integrations/IntegrationsTwilioPage.js +3 -3
  115. package/dist/components/docs/integrations/IntegrationsWhatsappMetaPage.js +2 -2
  116. package/dist/components/docs/integrations/IntegrationsWhatsappTwilioPage.js +2 -2
  117. package/dist/components/docs/integrations/index.js +39 -39
  118. package/dist/components/docs/intent/ContractFirstApiPage.js +2 -2
  119. package/dist/components/docs/intent/DeterministicCodegenPage.js +2 -2
  120. package/dist/components/docs/intent/GenerateClientFromSchemaPage.js +7 -7
  121. package/dist/components/docs/intent/OpenapiAlternativePage.js +3 -3
  122. package/dist/components/docs/intent/SchemaValidationTypescriptPage.js +4 -4
  123. package/dist/components/docs/intent/SpecDrivenDevelopmentPage.js +2 -2
  124. package/dist/components/docs/intent/index.js +15 -15
  125. package/dist/components/docs/intent/intent-pages.docblocks.js +1 -1
  126. package/dist/components/docs/knowledge/KnowledgeCategoriesPage.js +2 -2
  127. package/dist/components/docs/knowledge/KnowledgeExamplesPage.js +2 -2
  128. package/dist/components/docs/knowledge/KnowledgeOverviewPage.js +1 -1
  129. package/dist/components/docs/knowledge/KnowledgeSourcesPage.js +2 -2
  130. package/dist/components/docs/knowledge/KnowledgeSpacesPage.js +2 -2
  131. package/dist/components/docs/knowledge/index.js +5 -5
  132. package/dist/components/docs/libraries/LibrariesAccessibilityPage.js +3 -3
  133. package/dist/components/docs/libraries/LibrariesAiAgentPage.js +3 -3
  134. package/dist/components/docs/libraries/LibrariesAnalyticsPage.js +4 -4
  135. package/dist/components/docs/libraries/LibrariesContentGenPage.js +2 -2
  136. package/dist/components/docs/libraries/LibrariesContractsPage.js +43 -18
  137. package/dist/components/docs/libraries/LibrariesCostTrackingPage.js +3 -3
  138. package/dist/components/docs/libraries/LibrariesCrossPlatformUIPage.content.d.ts +67 -0
  139. package/dist/components/docs/libraries/LibrariesCrossPlatformUIPage.content.js +86 -0
  140. package/dist/components/docs/libraries/LibrariesCrossPlatformUIPage.d.ts +1 -0
  141. package/dist/components/docs/libraries/LibrariesCrossPlatformUIPage.js +86 -0
  142. package/dist/components/docs/libraries/LibrariesDataBackendPage.js +2 -2
  143. package/dist/components/docs/libraries/LibrariesDataViewsPage.js +3 -3
  144. package/dist/components/docs/libraries/LibrariesDesignSystemPage.js +77 -29
  145. package/dist/components/docs/libraries/LibrariesEvolutionPage.js +4 -4
  146. package/dist/components/docs/libraries/LibrariesGraphQLPage.js +2 -2
  147. package/dist/components/docs/libraries/LibrariesGrowthPage.js +3 -3
  148. package/dist/components/docs/libraries/LibrariesMultiTenancyPage.js +3 -3
  149. package/dist/components/docs/libraries/LibrariesObservabilityPage.js +5 -5
  150. package/dist/components/docs/libraries/LibrariesOverlayEnginePage.js +4 -4
  151. package/dist/components/docs/libraries/LibrariesOverviewPage.js +1 -1
  152. package/dist/components/docs/libraries/LibrariesPersonalizationPage.js +4 -4
  153. package/dist/components/docs/libraries/LibrariesProgressiveDeliveryPage.js +3 -3
  154. package/dist/components/docs/libraries/LibrariesResiliencePage.js +4 -4
  155. package/dist/components/docs/libraries/LibrariesRuntimePage.js +2 -2
  156. package/dist/components/docs/libraries/LibrariesSLOPage.js +3 -3
  157. package/dist/components/docs/libraries/LibrariesSchemaPage.js +3 -3
  158. package/dist/components/docs/libraries/LibrariesSupportBotPage.js +3 -3
  159. package/dist/components/docs/libraries/LibrariesTestingPage.js +3 -3
  160. package/dist/components/docs/libraries/LibrariesUIKitPage.js +42 -16
  161. package/dist/components/docs/libraries/LibrariesUIKitWebPage.d.ts +1 -0
  162. package/dist/components/docs/libraries/LibrariesUIKitWebPage.js +47 -0
  163. package/dist/components/docs/libraries/LibrariesWorkflowComposerPage.js +3 -3
  164. package/dist/components/docs/libraries/LibrariesWorkflowsPage.js +2 -2
  165. package/dist/components/docs/libraries/index.d.ts +2 -0
  166. package/dist/components/docs/libraries/index.js +338 -110
  167. package/dist/components/docs/manifesto/ManifestoPage.js +1 -1
  168. package/dist/components/docs/ops/AutoEvolutionOpsPage.js +2 -2
  169. package/dist/components/docs/ops/DistributedTracingOpsPage.js +2 -2
  170. package/dist/components/docs/ops/index.js +3 -3
  171. package/dist/components/docs/ops/ops-lifecycle.docblocks.js +2 -2
  172. package/dist/components/docs/ops/ops-runbooks-a.docblocks.js +2 -2
  173. package/dist/components/docs/ops/ops-runbooks-b.docblocks.js +2 -2
  174. package/dist/components/docs/ops/ops-slo-tenant.docblocks.js +2 -2
  175. package/dist/components/docs/ops/ops-top.docs.js +2 -2
  176. package/dist/components/docs/ops/ops.docs.js +6 -6
  177. package/dist/components/docs/product/product.docblocks.js +2 -2
  178. package/dist/components/docs/reference/DocsMarkdownContent.js +2 -2
  179. package/dist/components/docs/reference/DocsReferenceContent.js +3 -3
  180. package/dist/components/docs/reference/DocsReferenceIndexClient.js +2 -2
  181. package/dist/components/docs/reference/DocsReferenceIndexPage.js +2 -2
  182. package/dist/components/docs/reference/DocsReferencePage.js +3 -3
  183. package/dist/components/docs/reference/docsMarkdownParser.js +2 -2
  184. package/dist/components/docs/reference/index.js +4 -4
  185. package/dist/components/docs/safety/SafetyAuditingPage.js +2 -2
  186. package/dist/components/docs/safety/SafetyMigrationsPage.js +2 -2
  187. package/dist/components/docs/safety/SafetyOverviewPage.js +1 -1
  188. package/dist/components/docs/safety/SafetyPDPPage.js +2 -2
  189. package/dist/components/docs/safety/SafetySecurityTrustPage.js +1 -1
  190. package/dist/components/docs/safety/SafetySigningPage.js +3 -3
  191. package/dist/components/docs/safety/SafetyTenantIsolationPage.js +2 -2
  192. package/dist/components/docs/safety/index.js +7 -7
  193. package/dist/components/docs/shared/StudioPrompt.js +1 -1
  194. package/dist/components/docs/specs/SpecsBuilderControlPlanePage.js +18 -3
  195. package/dist/components/docs/specs/SpecsCapabilitiesPage.js +2 -2
  196. package/dist/components/docs/specs/SpecsConnectPage.js +4 -2
  197. package/dist/components/docs/specs/SpecsDataViewsPage.js +39 -32
  198. package/dist/components/docs/specs/SpecsModuleBundlesPage.js +3 -3
  199. package/dist/components/docs/specs/SpecsOverlaysPage.js +2 -2
  200. package/dist/components/docs/specs/SpecsOverviewPage.js +1 -1
  201. package/dist/components/docs/specs/SpecsPolicyPage.js +3 -3
  202. package/dist/components/docs/specs/SpecsWorkflowsPage.js +2 -2
  203. package/dist/components/docs/specs/index.js +66 -42
  204. package/dist/components/docs/studio/StudioBYOKPage.js +1 -1
  205. package/dist/components/docs/studio/StudioDeploymentsPage.js +1 -1
  206. package/dist/components/docs/studio/StudioGettingStartedPage.js +1 -1
  207. package/dist/components/docs/studio/StudioIntegrationsPage.js +1 -1
  208. package/dist/components/docs/studio/StudioOverviewPage.js +1 -1
  209. package/dist/components/docs/studio/StudioVisualBuilderPage.js +1 -1
  210. package/dist/components/docs/studio/index.js +1 -1
  211. package/dist/components/docs/tech/contracts/tech-docs.docblocks.js +2 -2
  212. package/dist/components/integrations/index.js +2 -2
  213. package/dist/components/integrations/molecules/IntegrationCard.js +1 -1
  214. package/dist/components/integrations/organisms/IntegrationMarketplace.js +1 -1
  215. package/dist/components/integrations/organisms/IntegrationSettings.js +2 -2
  216. package/dist/components/integrations/organisms/KnowledgeSourceList.js +1 -1
  217. package/dist/components/legal/PrivacyTemplate.js +1 -1
  218. package/dist/components/legal/TermsTemplate.js +1 -1
  219. package/dist/components/legal/index.js +1 -1
  220. package/dist/components/shared/FeatureGateNotice.js +1 -1
  221. package/dist/components/shared/index.js +1 -1
  222. package/dist/components/shell/WorkspaceHeader.js +1 -1
  223. package/dist/components/shell/WorkspaceProjectShellLayout.js +1 -1
  224. package/dist/components/shell/WorkspaceShellRenderer.js +1 -1
  225. package/dist/components/shell/WorkspaceSidebar.js +1 -1
  226. package/dist/components/shell/index.js +1 -1
  227. package/dist/components/templates/engine/index.js +1 -1
  228. package/dist/components/templates/index.js +11 -11
  229. package/dist/components/templates/messaging/ConversationList.js +2 -2
  230. package/dist/components/templates/messaging/MessageComposer.js +4 -4
  231. package/dist/components/templates/messaging/MessageThread.js +3 -3
  232. package/dist/components/templates/messaging/MessagingWorkspace.js +5 -5
  233. package/dist/components/templates/messaging/index.js +5 -5
  234. package/dist/components/templates/recipes/LanguageSwitcher.js +1 -1
  235. package/dist/components/templates/recipes/RecipeCard.js +1 -1
  236. package/dist/components/templates/recipes/RecipeDetail.js +1 -1
  237. package/dist/components/templates/recipes/RecipeList.js +3 -3
  238. package/dist/components/templates/recipes/index.js +3 -3
  239. package/dist/components/templates/todos/FilterBar.js +1 -1
  240. package/dist/components/templates/todos/TaskForm.js +2 -2
  241. package/dist/components/templates/todos/TaskItem.js +1 -1
  242. package/dist/components/templates/todos/TaskList.js +5 -5
  243. package/dist/components/templates/todos/index.js +5 -5
  244. package/dist/config/contractspec-blueprint.js +1 -1
  245. package/dist/config/contractspec-branding.js +1 -1
  246. package/dist/config/contractspec-routes.js +1 -1
  247. package/dist/config/index.js +1 -1
  248. package/dist/features/contracts-registry.js +1 -1
  249. package/dist/features/docs/docs.contracts.js +1 -1
  250. package/dist/features/docs/index.js +1 -1
  251. package/dist/features/docs.feature.js +1 -1
  252. package/dist/features/index.js +1 -1
  253. package/dist/features/mcp.feature.js +1 -1
  254. package/dist/features/presentations.feature.js +1 -1
  255. package/dist/features/registry.js +1 -1
  256. package/dist/index.d.ts +1 -0
  257. package/dist/index.js +701 -430
  258. package/dist/infrastructure/elysia/index.js +1 -1
  259. package/dist/infrastructure/elysia/logger.js +1 -1
  260. package/dist/infrastructure/index.js +1 -1
  261. package/dist/libs/email/client.js +1 -1
  262. package/dist/libs/email/contact.js +3 -3
  263. package/dist/libs/email/newsletter.js +3 -3
  264. package/dist/libs/email/utils.js +2 -2
  265. package/dist/libs/email/waitlist-application.js +3 -3
  266. package/dist/libs/email/waitlist.js +3 -3
  267. package/dist/libs/email.js +6 -6
  268. package/dist/libs/posthog/client.js +1 -1
  269. package/dist/libs/posthog/native.js +1 -1
  270. package/dist/libs/posthog/server.js +1 -1
  271. package/dist/libs/pricing-examples.js +1 -1
  272. package/dist/node/application/context-storage/index.js +1 -1
  273. package/dist/node/application/index.js +11 -11
  274. package/dist/node/application/mcp/cliMcp.js +6 -6
  275. package/dist/node/application/mcp/cliMcp.onboarding.js +1 -0
  276. package/dist/node/application/mcp/common.js +1 -1
  277. package/dist/node/application/mcp/contractsMcp.js +2 -2
  278. package/dist/node/application/mcp/contractsMcpAdoptionTools.js +1 -0
  279. package/dist/node/application/mcp/contractsMcpResources.js +2 -2
  280. package/dist/node/application/mcp/contractsMcpTools.js +1 -1
  281. package/dist/node/application/mcp/docsMcp.catalog.js +2 -2
  282. package/dist/node/application/mcp/docsMcp.data.js +1 -1
  283. package/dist/node/application/mcp/docsMcp.js +3 -3
  284. package/dist/node/application/mcp/docsMcp.prompts.js +3 -3
  285. package/dist/node/application/mcp/docsMcp.reference.js +2 -2
  286. package/dist/node/application/mcp/docsMcp.resources.js +2 -2
  287. package/dist/node/application/mcp/docsMcp.tools.js +2 -2
  288. package/dist/node/application/mcp/index.js +11 -11
  289. package/dist/node/application/mcp/internalMcp.js +2 -2
  290. package/dist/node/application/mcp/normalizeMcpRequest.js +1 -1
  291. package/dist/node/application/mcp/providerRankingMcp.js +1 -1
  292. package/dist/node/bundles/LibraryBundle.js +1 -1
  293. package/dist/node/bundles/index.js +1 -1
  294. package/dist/node/components/docs/DocsIndexPage.js +2 -2
  295. package/dist/node/components/docs/advanced/AdvancedMCPPage.js +3 -3
  296. package/dist/node/components/docs/advanced/AdvancedOverlayEditorPage.js +1 -1
  297. package/dist/node/components/docs/advanced/AdvancedRenderersPage.js +2 -2
  298. package/dist/node/components/docs/advanced/AdvancedSpecExperimentsPage.js +4 -4
  299. package/dist/node/components/docs/advanced/AdvancedTelemetryPage.js +2 -2
  300. package/dist/node/components/docs/advanced/AdvancedWorkflowMonitoringPage.js +2 -2
  301. package/dist/node/components/docs/advanced/index.js +9 -9
  302. package/dist/node/components/docs/architecture/ArchitectureAppConfigPage.js +6 -6
  303. package/dist/node/components/docs/architecture/ArchitectureControlPlanePage.js +3 -3
  304. package/dist/node/components/docs/architecture/ArchitectureIntegrationBindingPage.js +7 -7
  305. package/dist/node/components/docs/architecture/ArchitectureKnowledgeBindingPage.js +6 -6
  306. package/dist/node/components/docs/architecture/ArchitectureMultiTenancyPage.js +2 -2
  307. package/dist/node/components/docs/architecture/ArchitectureOverviewPage.js +1 -1
  308. package/dist/node/components/docs/architecture/index.js +20 -20
  309. package/dist/node/components/docs/comparison/ComparisonAutomationPlatformsPage.js +1 -1
  310. package/dist/node/components/docs/comparison/ComparisonEnterprisePlatformsPage.js +1 -1
  311. package/dist/node/components/docs/comparison/ComparisonInternalToolBuildersPage.js +1 -1
  312. package/dist/node/components/docs/comparison/ComparisonOverviewPage.js +1 -1
  313. package/dist/node/components/docs/comparison/ComparisonWindmillPage.js +1 -1
  314. package/dist/node/components/docs/comparison/ComparisonWorkflowEnginesPage.js +1 -1
  315. package/dist/node/components/docs/comparison/index.js +1 -1
  316. package/dist/node/components/docs/docsManifest.js +1 -1
  317. package/dist/node/components/docs/ecosystem/IntegrationsPage.js +2 -2
  318. package/dist/node/components/docs/ecosystem/PluginsPage.js +4 -4
  319. package/dist/node/components/docs/ecosystem/RegistryPage.js +4 -4
  320. package/dist/node/components/docs/ecosystem/TemplatesPage.js +3 -3
  321. package/dist/node/components/docs/ecosystem/index.js +11 -11
  322. package/dist/node/components/docs/examples/DocsExamplesPage.js +1 -17
  323. package/dist/node/components/docs/examples/ExampleShowcasePage.js +2 -17
  324. package/dist/node/components/docs/examples/exampleShowcaseData.js +2 -17
  325. package/dist/node/components/docs/examples/index.js +2 -17
  326. package/dist/node/components/docs/generated/docs-index.generated.js +1 -1
  327. package/dist/node/components/docs/generated/index.js +1 -1
  328. package/dist/node/components/docs/generated/loader.js +1 -1
  329. package/dist/node/components/docs/getting-started/CLIPage.js +6 -5
  330. package/dist/node/components/docs/getting-started/CompatibilityPage.js +1 -1
  331. package/dist/node/components/docs/getting-started/DataViewTutorialPage.js +44 -67
  332. package/dist/node/components/docs/getting-started/DeveloperToolsPage.js +1 -1
  333. package/dist/node/components/docs/getting-started/HelloWorldPage.js +5 -5
  334. package/dist/node/components/docs/getting-started/InstallationPage.js +3 -3
  335. package/dist/node/components/docs/getting-started/StartHerePage.js +4 -2
  336. package/dist/node/components/docs/getting-started/TroubleshootingPage.js +2 -2
  337. package/dist/node/components/docs/getting-started/VSCodeExtensionPage.js +1 -1
  338. package/dist/node/components/docs/getting-started/getting-started.docblocks.js +2 -2
  339. package/dist/node/components/docs/getting-started/index.js +60 -80
  340. package/dist/node/components/docs/guides/GuideCIDiffGatingPage.js +2 -2
  341. package/dist/node/components/docs/guides/GuideConnectInRepoPage.js +30 -5
  342. package/dist/node/components/docs/guides/GuideContractTypesPage.js +6 -6
  343. package/dist/node/components/docs/guides/GuideDocsPipelinePage.js +3 -3
  344. package/dist/node/components/docs/guides/GuideFirstModuleBundlePage.js +4 -4
  345. package/dist/node/components/docs/guides/GuideGenerateDocsClientsSchemasPage.js +2 -2
  346. package/dist/node/components/docs/guides/GuideHostBuilderWorkbenchPage.js +21 -6
  347. package/dist/node/components/docs/guides/GuideImportExistingCodebasesPage.js +8 -8
  348. package/dist/node/components/docs/guides/GuideNextjsOneEndpointPage.js +6 -6
  349. package/dist/node/components/docs/guides/GuideReleaseCapsulesPage.js +15 -0
  350. package/dist/node/components/docs/guides/GuideSpecValidationTypingPage.js +4 -4
  351. package/dist/node/components/docs/guides/GuidesIndexPage.js +2 -2
  352. package/dist/node/components/docs/guides/index.js +93 -39
  353. package/dist/node/components/docs/index.js +690 -419
  354. package/dist/node/components/docs/integrations/IntegrationsCircuitBreakersPage.js +2 -2
  355. package/dist/node/components/docs/integrations/IntegrationsElevenLabsPage.js +3 -3
  356. package/dist/node/components/docs/integrations/IntegrationsGithubPage.js +2 -2
  357. package/dist/node/components/docs/integrations/IntegrationsGmailPage.js +3 -3
  358. package/dist/node/components/docs/integrations/IntegrationsGoogleCalendarPage.js +3 -3
  359. package/dist/node/components/docs/integrations/IntegrationsHealthRoutingPage.js +2 -2
  360. package/dist/node/components/docs/integrations/IntegrationsMistralPage.js +2 -2
  361. package/dist/node/components/docs/integrations/IntegrationsOpenAIPage.js +2 -2
  362. package/dist/node/components/docs/integrations/IntegrationsOverviewPage.js +1 -1
  363. package/dist/node/components/docs/integrations/IntegrationsPostmarkPage.js +2 -2
  364. package/dist/node/components/docs/integrations/IntegrationsPowensPage.js +2 -2
  365. package/dist/node/components/docs/integrations/IntegrationsQdrantPage.js +5 -5
  366. package/dist/node/components/docs/integrations/IntegrationsResendPage.js +3 -3
  367. package/dist/node/components/docs/integrations/IntegrationsS3Page.js +4 -4
  368. package/dist/node/components/docs/integrations/IntegrationsSlackPage.js +2 -2
  369. package/dist/node/components/docs/integrations/IntegrationsSpecModelPage.js +2 -2
  370. package/dist/node/components/docs/integrations/IntegrationsStripePage.js +2 -2
  371. package/dist/node/components/docs/integrations/IntegrationsTwilioPage.js +3 -3
  372. package/dist/node/components/docs/integrations/IntegrationsWhatsappMetaPage.js +2 -2
  373. package/dist/node/components/docs/integrations/IntegrationsWhatsappTwilioPage.js +2 -2
  374. package/dist/node/components/docs/integrations/index.js +39 -39
  375. package/dist/node/components/docs/intent/ContractFirstApiPage.js +2 -2
  376. package/dist/node/components/docs/intent/DeterministicCodegenPage.js +2 -2
  377. package/dist/node/components/docs/intent/GenerateClientFromSchemaPage.js +7 -7
  378. package/dist/node/components/docs/intent/OpenapiAlternativePage.js +3 -3
  379. package/dist/node/components/docs/intent/SchemaValidationTypescriptPage.js +4 -4
  380. package/dist/node/components/docs/intent/SpecDrivenDevelopmentPage.js +2 -2
  381. package/dist/node/components/docs/intent/index.js +15 -15
  382. package/dist/node/components/docs/intent/intent-pages.docblocks.js +1 -1
  383. package/dist/node/components/docs/knowledge/KnowledgeCategoriesPage.js +2 -2
  384. package/dist/node/components/docs/knowledge/KnowledgeExamplesPage.js +2 -2
  385. package/dist/node/components/docs/knowledge/KnowledgeOverviewPage.js +1 -1
  386. package/dist/node/components/docs/knowledge/KnowledgeSourcesPage.js +2 -2
  387. package/dist/node/components/docs/knowledge/KnowledgeSpacesPage.js +2 -2
  388. package/dist/node/components/docs/knowledge/index.js +5 -5
  389. package/dist/node/components/docs/libraries/LibrariesAccessibilityPage.js +3 -3
  390. package/dist/node/components/docs/libraries/LibrariesAiAgentPage.js +3 -3
  391. package/dist/node/components/docs/libraries/LibrariesAnalyticsPage.js +4 -4
  392. package/dist/node/components/docs/libraries/LibrariesContentGenPage.js +2 -2
  393. package/dist/node/components/docs/libraries/LibrariesContractsPage.js +43 -18
  394. package/dist/node/components/docs/libraries/LibrariesCostTrackingPage.js +3 -3
  395. package/dist/node/components/docs/libraries/LibrariesCrossPlatformUIPage.content.js +85 -0
  396. package/dist/node/components/docs/libraries/LibrariesCrossPlatformUIPage.js +85 -0
  397. package/dist/node/components/docs/libraries/LibrariesDataBackendPage.js +2 -2
  398. package/dist/node/components/docs/libraries/LibrariesDataViewsPage.js +3 -3
  399. package/dist/node/components/docs/libraries/LibrariesDesignSystemPage.js +77 -29
  400. package/dist/node/components/docs/libraries/LibrariesEvolutionPage.js +4 -4
  401. package/dist/node/components/docs/libraries/LibrariesGraphQLPage.js +2 -2
  402. package/dist/node/components/docs/libraries/LibrariesGrowthPage.js +3 -3
  403. package/dist/node/components/docs/libraries/LibrariesMultiTenancyPage.js +3 -3
  404. package/dist/node/components/docs/libraries/LibrariesObservabilityPage.js +5 -5
  405. package/dist/node/components/docs/libraries/LibrariesOverlayEnginePage.js +4 -4
  406. package/dist/node/components/docs/libraries/LibrariesOverviewPage.js +1 -1
  407. package/dist/node/components/docs/libraries/LibrariesPersonalizationPage.js +4 -4
  408. package/dist/node/components/docs/libraries/LibrariesProgressiveDeliveryPage.js +3 -3
  409. package/dist/node/components/docs/libraries/LibrariesResiliencePage.js +4 -4
  410. package/dist/node/components/docs/libraries/LibrariesRuntimePage.js +2 -2
  411. package/dist/node/components/docs/libraries/LibrariesSLOPage.js +3 -3
  412. package/dist/node/components/docs/libraries/LibrariesSchemaPage.js +3 -3
  413. package/dist/node/components/docs/libraries/LibrariesSupportBotPage.js +3 -3
  414. package/dist/node/components/docs/libraries/LibrariesTestingPage.js +3 -3
  415. package/dist/node/components/docs/libraries/LibrariesUIKitPage.js +42 -16
  416. package/dist/node/components/docs/libraries/LibrariesUIKitWebPage.js +46 -0
  417. package/dist/node/components/docs/libraries/LibrariesWorkflowComposerPage.js +3 -3
  418. package/dist/node/components/docs/libraries/LibrariesWorkflowsPage.js +2 -2
  419. package/dist/node/components/docs/libraries/index.js +338 -110
  420. package/dist/node/components/docs/manifesto/ManifestoPage.js +1 -1
  421. package/dist/node/components/docs/ops/AutoEvolutionOpsPage.js +2 -2
  422. package/dist/node/components/docs/ops/DistributedTracingOpsPage.js +2 -2
  423. package/dist/node/components/docs/ops/index.js +3 -3
  424. package/dist/node/components/docs/ops/ops-lifecycle.docblocks.js +2 -2
  425. package/dist/node/components/docs/ops/ops-runbooks-a.docblocks.js +2 -2
  426. package/dist/node/components/docs/ops/ops-runbooks-b.docblocks.js +2 -2
  427. package/dist/node/components/docs/ops/ops-slo-tenant.docblocks.js +2 -2
  428. package/dist/node/components/docs/ops/ops-top.docs.js +2 -2
  429. package/dist/node/components/docs/ops/ops.docs.js +6 -6
  430. package/dist/node/components/docs/product/product.docblocks.js +2 -2
  431. package/dist/node/components/docs/reference/DocsMarkdownContent.js +2 -2
  432. package/dist/node/components/docs/reference/DocsReferenceContent.js +3 -3
  433. package/dist/node/components/docs/reference/DocsReferenceIndexClient.js +2 -2
  434. package/dist/node/components/docs/reference/DocsReferenceIndexPage.js +2 -2
  435. package/dist/node/components/docs/reference/DocsReferencePage.js +3 -3
  436. package/dist/node/components/docs/reference/docsMarkdownParser.js +2 -2
  437. package/dist/node/components/docs/reference/index.js +4 -4
  438. package/dist/node/components/docs/safety/SafetyAuditingPage.js +2 -2
  439. package/dist/node/components/docs/safety/SafetyMigrationsPage.js +2 -2
  440. package/dist/node/components/docs/safety/SafetyOverviewPage.js +1 -1
  441. package/dist/node/components/docs/safety/SafetyPDPPage.js +2 -2
  442. package/dist/node/components/docs/safety/SafetySecurityTrustPage.js +1 -1
  443. package/dist/node/components/docs/safety/SafetySigningPage.js +3 -3
  444. package/dist/node/components/docs/safety/SafetyTenantIsolationPage.js +2 -2
  445. package/dist/node/components/docs/safety/index.js +7 -7
  446. package/dist/node/components/docs/shared/StudioPrompt.js +1 -1
  447. package/dist/node/components/docs/specs/SpecsBuilderControlPlanePage.js +18 -3
  448. package/dist/node/components/docs/specs/SpecsCapabilitiesPage.js +2 -2
  449. package/dist/node/components/docs/specs/SpecsConnectPage.js +4 -2
  450. package/dist/node/components/docs/specs/SpecsDataViewsPage.js +39 -32
  451. package/dist/node/components/docs/specs/SpecsModuleBundlesPage.js +3 -3
  452. package/dist/node/components/docs/specs/SpecsOverlaysPage.js +2 -2
  453. package/dist/node/components/docs/specs/SpecsOverviewPage.js +1 -1
  454. package/dist/node/components/docs/specs/SpecsPolicyPage.js +3 -3
  455. package/dist/node/components/docs/specs/SpecsWorkflowsPage.js +2 -2
  456. package/dist/node/components/docs/specs/index.js +66 -42
  457. package/dist/node/components/docs/studio/StudioBYOKPage.js +1 -1
  458. package/dist/node/components/docs/studio/StudioDeploymentsPage.js +1 -1
  459. package/dist/node/components/docs/studio/StudioGettingStartedPage.js +1 -1
  460. package/dist/node/components/docs/studio/StudioIntegrationsPage.js +1 -1
  461. package/dist/node/components/docs/studio/StudioOverviewPage.js +1 -1
  462. package/dist/node/components/docs/studio/StudioVisualBuilderPage.js +1 -1
  463. package/dist/node/components/docs/studio/index.js +1 -1
  464. package/dist/node/components/docs/tech/contracts/tech-docs.docblocks.js +2 -2
  465. package/dist/node/components/integrations/index.js +2 -2
  466. package/dist/node/components/integrations/molecules/IntegrationCard.js +1 -1
  467. package/dist/node/components/integrations/organisms/IntegrationMarketplace.js +1 -1
  468. package/dist/node/components/integrations/organisms/IntegrationSettings.js +2 -2
  469. package/dist/node/components/integrations/organisms/KnowledgeSourceList.js +1 -1
  470. package/dist/node/components/legal/PrivacyTemplate.js +1 -1
  471. package/dist/node/components/legal/TermsTemplate.js +1 -1
  472. package/dist/node/components/legal/index.js +1 -1
  473. package/dist/node/components/shared/FeatureGateNotice.js +1 -1
  474. package/dist/node/components/shared/index.js +1 -1
  475. package/dist/node/components/shell/WorkspaceHeader.js +1 -1
  476. package/dist/node/components/shell/WorkspaceProjectShellLayout.js +1 -1
  477. package/dist/node/components/shell/WorkspaceShellRenderer.js +1 -1
  478. package/dist/node/components/shell/WorkspaceSidebar.js +1 -1
  479. package/dist/node/components/shell/index.js +1 -1
  480. package/dist/node/components/templates/engine/index.js +1 -1
  481. package/dist/node/components/templates/index.js +11 -11
  482. package/dist/node/components/templates/messaging/ConversationList.js +2 -2
  483. package/dist/node/components/templates/messaging/MessageComposer.js +4 -4
  484. package/dist/node/components/templates/messaging/MessageThread.js +3 -3
  485. package/dist/node/components/templates/messaging/MessagingWorkspace.js +5 -5
  486. package/dist/node/components/templates/messaging/index.js +5 -5
  487. package/dist/node/components/templates/recipes/LanguageSwitcher.js +1 -1
  488. package/dist/node/components/templates/recipes/RecipeCard.js +1 -1
  489. package/dist/node/components/templates/recipes/RecipeDetail.js +1 -1
  490. package/dist/node/components/templates/recipes/RecipeList.js +3 -3
  491. package/dist/node/components/templates/recipes/index.js +3 -3
  492. package/dist/node/components/templates/todos/FilterBar.js +1 -1
  493. package/dist/node/components/templates/todos/TaskForm.js +2 -2
  494. package/dist/node/components/templates/todos/TaskItem.js +1 -1
  495. package/dist/node/components/templates/todos/TaskList.js +5 -5
  496. package/dist/node/components/templates/todos/index.js +5 -5
  497. package/dist/node/config/contractspec-blueprint.js +1 -1
  498. package/dist/node/config/contractspec-branding.js +1 -1
  499. package/dist/node/config/contractspec-routes.js +1 -1
  500. package/dist/node/config/index.js +1 -1
  501. package/dist/node/features/contracts-registry.js +1 -1
  502. package/dist/node/features/docs/docs.contracts.js +1 -1
  503. package/dist/node/features/docs/index.js +1 -1
  504. package/dist/node/features/docs.feature.js +1 -1
  505. package/dist/node/features/index.js +1 -1
  506. package/dist/node/features/mcp.feature.js +1 -1
  507. package/dist/node/features/presentations.feature.js +1 -1
  508. package/dist/node/features/registry.js +1 -1
  509. package/dist/node/index.js +701 -430
  510. package/dist/node/infrastructure/elysia/index.js +1 -1
  511. package/dist/node/infrastructure/elysia/logger.js +1 -1
  512. package/dist/node/infrastructure/index.js +1 -1
  513. package/dist/node/libs/email/client.js +1 -1
  514. package/dist/node/libs/email/contact.js +3 -3
  515. package/dist/node/libs/email/newsletter.js +3 -3
  516. package/dist/node/libs/email/utils.js +2 -2
  517. package/dist/node/libs/email/waitlist-application.js +3 -3
  518. package/dist/node/libs/email/waitlist.js +3 -3
  519. package/dist/node/libs/email.js +6 -6
  520. package/dist/node/libs/posthog/client.js +1 -1
  521. package/dist/node/libs/posthog/native.js +1 -1
  522. package/dist/node/libs/posthog/server.js +1 -1
  523. package/dist/node/libs/pricing-examples.js +1 -1
  524. package/dist/node/presentation/features/atoms/FeatureIcon/FeatureIcon.js +1 -1
  525. package/dist/node/presentation/features/atoms/FeatureIcon/index.js +1 -1
  526. package/dist/node/presentation/features/atoms/index.js +1 -1
  527. package/dist/node/presentation/features/hooks/index.js +1 -1
  528. package/dist/node/presentation/features/hooks/useContractsRegistry.js +1 -1
  529. package/dist/node/presentation/features/hooks/useFeatureFilters.js +1 -1
  530. package/dist/node/presentation/features/hooks/useFeatureRegistry.js +1 -1
  531. package/dist/node/presentation/features/hooks/useRelatedDocs.js +1 -1
  532. package/dist/node/presentation/features/index.js +1 -1
  533. package/dist/node/presentation/features/molecules/FeatureCard/FeatureCard.js +1 -1
  534. package/dist/node/presentation/features/molecules/FeatureCard/index.js +1 -1
  535. package/dist/node/presentation/features/molecules/FeatureCategoryHeader/FeatureCategoryHeader.js +1 -1
  536. package/dist/node/presentation/features/molecules/FeatureCategoryHeader/index.js +1 -1
  537. package/dist/node/presentation/features/molecules/FeatureFilters/FeatureFilters.js +1 -1
  538. package/dist/node/presentation/features/molecules/FeatureFilters/index.js +1 -1
  539. package/dist/node/presentation/features/molecules/FeatureHoverPreview/FeatureHoverPreview.js +1 -1
  540. package/dist/node/presentation/features/molecules/FeatureHoverPreview/index.js +1 -1
  541. package/dist/node/presentation/features/molecules/index.js +1 -1
  542. package/dist/node/presentation/features/organisms/FeatureDataViewsList.js +1 -1
  543. package/dist/node/presentation/features/organisms/FeatureDetail/FeatureDetail.js +1 -1
  544. package/dist/node/presentation/features/organisms/FeatureDetail/index.js +1 -1
  545. package/dist/node/presentation/features/organisms/FeatureDiscovery/FeatureDiscovery.js +1 -1
  546. package/dist/node/presentation/features/organisms/FeatureDiscovery/index.js +1 -1
  547. package/dist/node/presentation/features/organisms/FeatureEventsList.js +1 -1
  548. package/dist/node/presentation/features/organisms/FeatureFormsList.js +1 -1
  549. package/dist/node/presentation/features/organisms/FeatureOperationsList.js +1 -1
  550. package/dist/node/presentation/features/organisms/FeaturePresentationsList.js +1 -1
  551. package/dist/node/presentation/features/organisms/index.js +1 -1
  552. package/dist/node/presentation/features/templates/FeatureDataViewDetailTemplate/FeatureDataViewDetailTemplate.js +1 -1
  553. package/dist/node/presentation/features/templates/FeatureDataViewDetailTemplate/index.js +1 -1
  554. package/dist/node/presentation/features/templates/FeatureDataViewsTemplate/FeatureDataViewsTemplate.js +1 -1
  555. package/dist/node/presentation/features/templates/FeatureDataViewsTemplate/index.js +1 -1
  556. package/dist/node/presentation/features/templates/FeatureEventDetailTemplate/FeatureEventDetailTemplate.js +1 -1
  557. package/dist/node/presentation/features/templates/FeatureEventDetailTemplate/index.js +1 -1
  558. package/dist/node/presentation/features/templates/FeatureEventsTemplate/FeatureEventsTemplate.js +1 -1
  559. package/dist/node/presentation/features/templates/FeatureEventsTemplate/index.js +1 -1
  560. package/dist/node/presentation/features/templates/FeatureFormDetailTemplate/FeatureFormDetailTemplate.js +1 -1
  561. package/dist/node/presentation/features/templates/FeatureFormDetailTemplate/index.js +1 -1
  562. package/dist/node/presentation/features/templates/FeatureFormsTemplate/FeatureFormsTemplate.js +1 -1
  563. package/dist/node/presentation/features/templates/FeatureFormsTemplate/index.js +1 -1
  564. package/dist/node/presentation/features/templates/FeatureOperationDetailTemplate/FeatureOperationDetailTemplate.js +1 -1
  565. package/dist/node/presentation/features/templates/FeatureOperationDetailTemplate/index.js +1 -1
  566. package/dist/node/presentation/features/templates/FeatureOperationsTemplate/FeatureOperationsTemplate.js +1 -1
  567. package/dist/node/presentation/features/templates/FeatureOperationsTemplate/index.js +1 -1
  568. package/dist/node/presentation/features/templates/FeatureOverviewTemplate/FeatureOverviewTemplate.js +1 -1
  569. package/dist/node/presentation/features/templates/FeatureOverviewTemplate/index.js +1 -1
  570. package/dist/node/presentation/features/templates/FeaturePresentationDetailTemplate/FeaturePresentationDetailTemplate.js +1 -1
  571. package/dist/node/presentation/features/templates/FeaturePresentationDetailTemplate/index.js +1 -1
  572. package/dist/node/presentation/features/templates/FeaturePresentationsTemplate/FeaturePresentationsTemplate.js +1 -1
  573. package/dist/node/presentation/features/templates/FeaturePresentationsTemplate/index.js +1 -1
  574. package/dist/presentation/features/atoms/FeatureIcon/FeatureIcon.js +1 -1
  575. package/dist/presentation/features/atoms/FeatureIcon/index.js +1 -1
  576. package/dist/presentation/features/atoms/index.js +1 -1
  577. package/dist/presentation/features/hooks/index.js +1 -1
  578. package/dist/presentation/features/hooks/useContractsRegistry.js +1 -1
  579. package/dist/presentation/features/hooks/useFeatureFilters.js +1 -1
  580. package/dist/presentation/features/hooks/useFeatureRegistry.js +1 -1
  581. package/dist/presentation/features/hooks/useRelatedDocs.js +1 -1
  582. package/dist/presentation/features/index.js +1 -1
  583. package/dist/presentation/features/molecules/FeatureCard/FeatureCard.js +1 -1
  584. package/dist/presentation/features/molecules/FeatureCard/index.js +1 -1
  585. package/dist/presentation/features/molecules/FeatureCategoryHeader/FeatureCategoryHeader.js +1 -1
  586. package/dist/presentation/features/molecules/FeatureCategoryHeader/index.js +1 -1
  587. package/dist/presentation/features/molecules/FeatureFilters/FeatureFilters.js +1 -1
  588. package/dist/presentation/features/molecules/FeatureFilters/index.js +1 -1
  589. package/dist/presentation/features/molecules/FeatureHoverPreview/FeatureHoverPreview.js +1 -1
  590. package/dist/presentation/features/molecules/FeatureHoverPreview/index.js +1 -1
  591. package/dist/presentation/features/molecules/index.js +1 -1
  592. package/dist/presentation/features/organisms/FeatureDataViewsList.js +1 -1
  593. package/dist/presentation/features/organisms/FeatureDetail/FeatureDetail.js +1 -1
  594. package/dist/presentation/features/organisms/FeatureDetail/index.js +1 -1
  595. package/dist/presentation/features/organisms/FeatureDiscovery/FeatureDiscovery.js +1 -1
  596. package/dist/presentation/features/organisms/FeatureDiscovery/index.js +1 -1
  597. package/dist/presentation/features/organisms/FeatureEventsList.js +1 -1
  598. package/dist/presentation/features/organisms/FeatureFormsList.js +1 -1
  599. package/dist/presentation/features/organisms/FeatureOperationsList.js +1 -1
  600. package/dist/presentation/features/organisms/FeaturePresentationsList.js +1 -1
  601. package/dist/presentation/features/organisms/index.js +1 -1
  602. package/dist/presentation/features/templates/FeatureDataViewDetailTemplate/FeatureDataViewDetailTemplate.js +1 -1
  603. package/dist/presentation/features/templates/FeatureDataViewDetailTemplate/index.js +1 -1
  604. package/dist/presentation/features/templates/FeatureDataViewsTemplate/FeatureDataViewsTemplate.js +1 -1
  605. package/dist/presentation/features/templates/FeatureDataViewsTemplate/index.js +1 -1
  606. package/dist/presentation/features/templates/FeatureEventDetailTemplate/FeatureEventDetailTemplate.js +1 -1
  607. package/dist/presentation/features/templates/FeatureEventDetailTemplate/index.js +1 -1
  608. package/dist/presentation/features/templates/FeatureEventsTemplate/FeatureEventsTemplate.js +1 -1
  609. package/dist/presentation/features/templates/FeatureEventsTemplate/index.js +1 -1
  610. package/dist/presentation/features/templates/FeatureFormDetailTemplate/FeatureFormDetailTemplate.js +1 -1
  611. package/dist/presentation/features/templates/FeatureFormDetailTemplate/index.js +1 -1
  612. package/dist/presentation/features/templates/FeatureFormsTemplate/FeatureFormsTemplate.js +1 -1
  613. package/dist/presentation/features/templates/FeatureFormsTemplate/index.js +1 -1
  614. package/dist/presentation/features/templates/FeatureOperationDetailTemplate/FeatureOperationDetailTemplate.js +1 -1
  615. package/dist/presentation/features/templates/FeatureOperationDetailTemplate/index.js +1 -1
  616. package/dist/presentation/features/templates/FeatureOperationsTemplate/FeatureOperationsTemplate.js +1 -1
  617. package/dist/presentation/features/templates/FeatureOperationsTemplate/index.js +1 -1
  618. package/dist/presentation/features/templates/FeatureOverviewTemplate/FeatureOverviewTemplate.js +1 -1
  619. package/dist/presentation/features/templates/FeatureOverviewTemplate/index.js +1 -1
  620. package/dist/presentation/features/templates/FeaturePresentationDetailTemplate/FeaturePresentationDetailTemplate.js +1 -1
  621. package/dist/presentation/features/templates/FeaturePresentationDetailTemplate/index.js +1 -1
  622. package/dist/presentation/features/templates/FeaturePresentationsTemplate/FeaturePresentationsTemplate.js +1 -1
  623. package/dist/presentation/features/templates/FeaturePresentationsTemplate/index.js +1 -1
  624. package/package.json +96 -23
  625. package/src/application/mcp/cliMcp.onboarding.ts +297 -0
  626. package/src/application/mcp/cliMcp.test.ts +99 -0
  627. package/src/application/mcp/cliMcp.ts +30 -3
  628. package/src/application/mcp/contractsMcp.test.ts +65 -0
  629. package/src/application/mcp/contractsMcpAdoptionTools.ts +131 -0
  630. package/src/application/mcp/contractsMcpResources.ts +49 -0
  631. package/src/application/mcp/contractsMcpTools.ts +2 -0
  632. package/src/application/mcp/contractsMcpTypes.ts +16 -0
  633. package/src/bundles/LibraryBundle.ts +19 -130
  634. package/src/components/docs/docsManifest.test.ts +14 -0
  635. package/src/components/docs/docsManifest.ts +22 -0
  636. package/src/components/docs/examples/DocsExamplesPage.tsx +6 -14
  637. package/src/components/docs/examples/ExampleShowcasePage.tsx +22 -18
  638. package/src/components/docs/examples/exampleShowcaseData.test.ts +22 -0
  639. package/src/components/docs/examples/exampleShowcaseData.ts +75 -50
  640. package/src/components/docs/generated/docs-index._common.json +9 -1
  641. package/src/components/docs/generated/docs-index.ai-chat.json +1 -1
  642. package/src/components/docs/generated/docs-index.app-config.json +4 -4
  643. package/src/components/docs/generated/docs-index.data-grid-showcase.json +9 -1
  644. package/src/components/docs/generated/docs-index.jobs.json +1 -1
  645. package/src/components/docs/generated/docs-index.kb-update-pipeline.json +5 -5
  646. package/src/components/docs/generated/docs-index.learning-journey-crm-onboarding.json +1 -1
  647. package/src/components/docs/generated/docs-index.learning-journey-platform-tour.json +1 -1
  648. package/src/components/docs/generated/docs-index.learning-journey-registry.json +1 -1
  649. package/src/components/docs/generated/docs-index.learning-journey.json +27 -3
  650. package/src/components/docs/generated/docs-index.locale-jurisdiction-gate.json +8 -0
  651. package/src/components/docs/generated/docs-index.manifest.json +13 -13
  652. package/src/components/docs/generated/docs-index.mobile-demo-landing.json +42 -0
  653. package/src/components/docs/generated/docs-index.platform-agent.json +18 -2
  654. package/src/components/docs/generated/docs-index.platform-context.json +16 -0
  655. package/src/components/docs/generated/docs-index.platform-docs.json +9 -1
  656. package/src/components/docs/generated/docs-index.platform-provider-ranking.json +32 -0
  657. package/src/components/docs/generated/docs-index.wealth-snapshot.json +4 -4
  658. package/src/components/docs/generated/index.ts +20 -5
  659. package/src/components/docs/generated/loader.ts +15 -8
  660. package/src/components/docs/getting-started/CLIPage.tsx +10 -2
  661. package/src/components/docs/getting-started/CompatibilityPage.tsx +14 -0
  662. package/src/components/docs/getting-started/DataViewTutorialPage.tsx +63 -70
  663. package/src/components/docs/getting-started/StartHerePage.tsx +10 -9
  664. package/src/components/docs/guides/GuideConnectInRepoPage.tsx +52 -3
  665. package/src/components/docs/guides/GuideHostBuilderWorkbenchPage.tsx +55 -6
  666. package/src/components/docs/guides/GuideReleaseCapsulesPage.tsx +147 -0
  667. package/src/components/docs/guides/GuidesIndexPage.tsx +7 -0
  668. package/src/components/docs/guides/index.ts +1 -0
  669. package/src/components/docs/libraries/LibrariesContractsPage.tsx +72 -27
  670. package/src/components/docs/libraries/LibrariesCrossPlatformUIPage.content.ts +252 -0
  671. package/src/components/docs/libraries/LibrariesCrossPlatformUIPage.tsx +232 -0
  672. package/src/components/docs/libraries/LibrariesDesignSystemPage.tsx +140 -55
  673. package/src/components/docs/libraries/LibrariesOverviewPage.tsx +13 -1
  674. package/src/components/docs/libraries/LibrariesRuntimePage.tsx +15 -0
  675. package/src/components/docs/libraries/LibrariesUIKitPage.tsx +78 -25
  676. package/src/components/docs/libraries/LibrariesUIKitWebPage.tsx +129 -0
  677. package/src/components/docs/libraries/index.ts +2 -0
  678. package/src/components/docs/reference/DocsReferenceIndexPage.tsx +1 -1
  679. package/src/components/docs/specs/SpecsBuilderControlPlanePage.tsx +58 -3
  680. package/src/components/docs/specs/SpecsConnectPage.tsx +30 -0
  681. package/src/components/docs/specs/SpecsDataViewsPage.tsx +63 -42
  682. package/src/index.ts +1 -1
  683. package/src/components/docs/generated/docs-index.mobile-demo-tasks.json +0 -34
@@ -1,17 +1,17 @@
1
1
  // @bun
2
- import{Logger as Wj,LogLevel as xj}from"@contractspec/lib.logger";function Pj(){return"production"}var sj=()=>new Wj({level:xj.INFO,environment:Pj(),enableTracing:!0,enableTiming:!0,enableContext:!0,enableColors:!1}),b=sj(),HJ=new Wj({level:xj.WARN,environment:Pj(),enableTracing:!0,enableTiming:!0,enableContext:!0,enableColors:!1}),KJ=new Wj({level:xj.INFO,environment:Pj(),enableTracing:!0,enableTiming:!0,enableContext:!0,enableColors:!1});var Ij=["application/json","text/event-stream"];function rj(j){return!j||j.includes("*/*")||j.includes("application/*")||Ij.some((Y)=>j.includes(Y))}function qj(j){if(j.method!=="POST")return j;let Y=j.headers.get("accept");if(!rj(Y))return j;let J=Ij.filter(($)=>!Y?.includes($));if(J.length===0)return j;let Q=new Headers(j.headers);return Q.set("accept",[Y,...J].filter(Boolean).join(", ")),new Request(j,{headers:Q})}import{createMcpServer as ej}from"@contractspec/lib.contracts-runtime-server-mcp/provider-mcp";import{PresentationRegistry as jY}from"@contractspec/lib.contracts-spec/presentations";import{McpServer as YY}from"@modelcontextprotocol/sdk/server/mcp.js";import{WebStandardStreamableHTTPServerTransport as JY}from"@modelcontextprotocol/sdk/server/webStandardStreamableHttp.js";import{randomUUID as QY}from"crypto";import{Elysia as ZY}from"elysia";var $Y={actor:"anonymous",decide:async()=>({effect:"allow"})};function Lj(j,Y,J,Q){return new Response(JSON.stringify({jsonrpc:"2.0",error:{code:Y,message:J,...Q?{data:Q}:{}},id:null}),{status:j,headers:{"content-type":"application/json"}})}function Ej({logger:j,serverName:Y,ops:J,resources:Q,prompts:$,presentations:Z,stateful:X}){let U=new YY({name:Y,version:"1.0.0"},{capabilities:{tools:{},resources:{},prompts:{},logging:{}}});j.info("Setting up MCP server..."),ej(U,J,Q,$,{logger:j,toolCtx:()=>$Y,promptCtx:()=>({locale:"en"}),resourceCtx:()=>({locale:"en"}),presentations:new jY(Z)});let K=new JY({sessionIdGenerator:X?()=>QY():void 0,enableJsonResponse:!0});return U.connect(K).then(()=>({server:U,transport:K}))}async function t(j){await Promise.allSettled([j.transport.close(),j.server.close()])}function XY(j){return j instanceof Error?j.stack??j.message:String(j)}function M({logger:j,path:Y,serverName:J,ops:Q,resources:$,prompts:Z,presentations:X,validateAuth:U,requiredAuthMethods:K}){j.info("Setting up MCP handler...",{requiredAuthMethods:K??[]});let P=process.env.CONTRACTSPEC_MCP_STATEFUL==="1",V=new Map;async function H(F){let W=await Ej({logger:j,path:Y,serverName:J,ops:Q,resources:$,prompts:Z,presentations:X,stateful:!1});try{return await W.transport.handleRequest(qj(F))}finally{await t(W)}}async function G(F){let W=V.get(F);if(!W)return;V.delete(F),await t(W)}async function Fj(F){let W=F.headers.get("mcp-session-id"),D,d=!1;if(W){let N=V.get(W);if(!N)return Lj(404,-32001,"Session not found");D=N}else D=await Ej({logger:j,path:Y,serverName:J,ops:Q,resources:$,prompts:Z,presentations:X,stateful:!0}),d=!0;try{let N=await D.transport.handleRequest(qj(F)),O=D.transport.sessionId;if(O&&!V.has(O))V.set(O,D);if(F.method==="DELETE"&&O)await G(O);else if(!O&&d)await t(D);return N}catch(N){if(d)await t(D);throw N}}return new ZY({name:`mcp-${J}`}).all(Y,async({request:F})=>{try{if(U){let W=await U(F);if(!W.valid)return Lj(401,-32002,"Authentication failed",W.reason)}if(P)return await Fj(F);return await H(F)}catch(W){return j.error("Error handling MCP request",{path:Y,method:F.method,error:XY(W)}),Lj(500,-32000,"Internal error")}})}import UY from"fs/promises";import{defineCommand as VY,definePrompt as HY,defineResourceTemplate as zj,installOp as KY,OperationSpecRegistry as BY,PromptRegistry as wY,ResourceRegistry as FY}from"@contractspec/lib.contracts-spec";import{defineSchemaModel as Oj,ScalarTypeEnum as u}from"@contractspec/lib.schema";import p from"path";import k from"zod";var __dirname="/home/runner/work/contractspec/contractspec/packages/bundles/library/src/application/mcp",WY={quickstart:"packages/apps/cli-contractspec/QUICK_START.md",reference:"packages/apps/cli-contractspec/QUICK_REFERENCE.md",readme:"packages/apps/cli-contractspec/README.md"},xY={quickstart:`# ContractSpec CLI quickstart
2
+ var LY=Object.defineProperty;var qY=(j)=>j;function _Y(j,Y){this[j]=qY.bind(null,Y)}var hJ=(j,Y)=>{for(var J in Y)LY(j,J,{get:Y[J],enumerable:!0,configurable:!0,set:_Y.bind(Y,J)})};var TJ=(j,Y)=>()=>(j&&(Y=j(j=0)),Y);import{Logger as Dj,LogLevel as Cj}from"@contractspec/lib.logger";function Aj(){return"production"}var MY=()=>new Dj({level:Cj.INFO,environment:Aj(),enableTracing:!0,enableTiming:!0,enableContext:!0,enableColors:!1}),D=MY(),yJ=new Dj({level:Cj.WARN,environment:Aj(),enableTracing:!0,enableTiming:!0,enableContext:!0,enableColors:!1}),mJ=new Dj({level:Cj.INFO,environment:Aj(),enableTracing:!0,enableTiming:!0,enableContext:!0,enableColors:!1});import{createNodeAdapters as bY,onboarding as Ej}from"@contractspec/bundle.workspace";import{defineCommand as Ij,definePrompt as GY,defineResourceTemplate as Nj,installOp as zj}from"@contractspec/lib.contracts-spec";import{defineSchemaModel as o,ScalarTypeEnum as q}from"@contractspec/lib.schema";import C from"zod";var E=["cli","mcp","onboarding"],Zj=["@contractspec"];function DY(j){return j?.split(",").map((Y)=>Y.trim()).filter(Boolean)}async function $j(j={}){let Y=bY({cwd:process.cwd(),silent:!0});return Ej.buildOnboardingPlan(Y,{forcedExampleKey:j.example,selectedTracks:DY(j.tracks)})}function pj(j){j.register(Nj({meta:{uriTemplate:"onboarding://tracks",title:"Onboarding tracks",description:"Primary ContractSpec onboarding tracks exposed by the CLI.",mimeType:"application/json",tags:E},input:C.object({}),resolve:async()=>({uri:"onboarding://tracks",mimeType:"application/json",data:JSON.stringify(Ej.listOnboardingTracks(),null,2)})})),j.register(Nj({meta:{uriTemplate:"onboarding://track/{id}",title:"Onboarding track",description:"Track-specific onboarding metadata and recommended commands.",mimeType:"application/json",tags:E},input:C.object({id:C.string()}),resolve:async({id:Y})=>({uri:`onboarding://track/${Y}`,mimeType:"application/json",data:JSON.stringify(Ej.getOnboardingTrack(Y)??null,null,2)})})),j.register(Nj({meta:{uriTemplate:"onboarding://artifacts/{id}{?tracks,example}",title:"Rendered onboarding artifact",description:"Render AGENTS.md or USAGE.md content for the current repo.",mimeType:"text/markdown",tags:E},input:C.object({example:C.string().optional(),id:C.enum(["agent-guide","human-guide"]),tracks:C.string().optional()}),resolve:async({example:Y,id:J,tracks:Q})=>{let $=await $j({example:Y,tracks:Q});return{uri:`onboarding://artifacts/${J}`,mimeType:"text/markdown",data:J==="agent-guide"?$.guides.agentGuide:$.guides.humanGuide}}}))}function lj(j){j.register(GY({meta:{key:"cli.onboarding",version:"1.0.0",title:"Plan a ContractSpec onboarding flow",description:"Suggest the right onboarding track and artifacts for a repo.",tags:E,stability:"beta",owners:Zj},args:[{name:"goal",description:"Repository onboarding goal or focus area.",required:!1,schema:C.string().optional()}],input:C.object({goal:C.string().optional()}),render:async({goal:Y})=>[{type:"text",text:`Use onboarding://tracks and onboarding_suggestTracks-v1_0_0 before recommending repo-local ContractSpec adoption steps.${Y?` Goal: ${Y}.`:""}`},{type:"resource",uri:"onboarding://tracks",title:"Tracks"}]}))}function nj(j){let Y=o({name:"OnboardingSuggestTracksInput",fields:{example:{type:q.String_unsecure(),isOptional:!0},tracks:{type:q.String_unsecure(),isOptional:!0}}}),J=o({name:"OnboardingSuggestTracksOutput",fields:{nextCommands:{type:q.String_unsecure(),isArray:!0,isOptional:!1},primaryTrack:{type:q.String_unsecure(),isOptional:!1},reason:{type:q.String_unsecure(),isOptional:!1},tracks:{type:q.String_unsecure(),isArray:!0,isOptional:!1}}}),Q=o({name:"OnboardingRenderArtifactOutput",fields:{content:{type:q.String_unsecure(),isOptional:!1},primaryTrack:{type:q.String_unsecure(),isOptional:!1}}}),$=o({name:"OnboardingNextCommandOutput",fields:{nextCommand:{type:q.String_unsecure(),isOptional:!1},primaryTrack:{type:q.String_unsecure(),isOptional:!1}}});zj(j,Ij({meta:{key:"onboarding.suggestTracks",version:"1.0.0",stability:"stable",owners:Zj,tags:E,description:"Suggest the recommended ContractSpec onboarding tracks.",goal:"Help agents choose the right onboarding track before editing repo-local guides.",context:"Used inside the CLI MCP server."},io:{input:Y,output:J},policy:{auth:"anonymous"}}),async({example:Z,tracks:X})=>{let U=await $j({example:Z,tracks:X});return{nextCommands:U.nextCommands,primaryTrack:U.primaryTrack.id,reason:U.recommendations[0]?.reason??U.primaryTrack.summary,tracks:U.recommendations.map((V)=>V.track.id)}}),zj(j,Ij({meta:{key:"onboarding.renderArtifacts",version:"1.0.0",stability:"stable",owners:Zj,tags:E,description:"Render onboarding artifacts for the current repo.",goal:"Provide AGENTS.md or USAGE.md content without mutating the repo.",context:"Used inside the CLI MCP server."},io:{input:o({name:"OnboardingRenderArtifactInput",fields:{artifact:{type:q.String_unsecure(),isOptional:!1},example:{type:q.String_unsecure(),isOptional:!0},tracks:{type:q.String_unsecure(),isOptional:!0}}}),output:Q},policy:{auth:"anonymous"}}),async({artifact:Z,example:X,tracks:U})=>{let V=await $j({example:X,tracks:U});return{content:Z==="agent-guide"?V.guides.agentGuide:V.guides.humanGuide,primaryTrack:V.primaryTrack.id}}),zj(j,Ij({meta:{key:"onboarding.nextCommand",version:"1.0.0",stability:"stable",owners:Zj,tags:E,description:"Return the next recommended CLI command for onboarding.",goal:"Help agents choose the next onboarding command without mutating the repo.",context:"Used inside the CLI MCP server."},io:{input:Y,output:$},policy:{auth:"anonymous"}}),async({example:Z,tracks:X})=>{let U=await $j({example:Z,tracks:X});return{nextCommand:U.nextCommands[0]??"contractspec onboard",primaryTrack:U.primaryTrack.id}})}var cj=["application/json","text/event-stream"];function CY(j){return!j||j.includes("*/*")||j.includes("application/*")||cj.some((Y)=>j.includes(Y))}function kj(j){if(j.method!=="POST")return j;let Y=j.headers.get("accept");if(!CY(Y))return j;let J=cj.filter(($)=>!Y?.includes($));if(J.length===0)return j;let Q=new Headers(j.headers);return Q.set("accept",[Y,...J].filter(Boolean).join(", ")),new Request(j,{headers:Q})}import{createMcpServer as AY}from"@contractspec/lib.contracts-runtime-server-mcp/provider-mcp";import{PresentationRegistry as IY}from"@contractspec/lib.contracts-spec/presentations";import{McpServer as NY}from"@modelcontextprotocol/sdk/server/mcp.js";import{WebStandardStreamableHTTPServerTransport as zY}from"@modelcontextprotocol/sdk/server/webStandardStreamableHttp.js";import{randomUUID as EY}from"crypto";import{Elysia as kY}from"elysia";var vY={actor:"anonymous",decide:async()=>({effect:"allow"})};function vj(j,Y,J,Q){return new Response(JSON.stringify({jsonrpc:"2.0",error:{code:Y,message:J,...Q?{data:Q}:{}},id:null}),{status:j,headers:{"content-type":"application/json"}})}function ij({logger:j,serverName:Y,ops:J,resources:Q,prompts:$,presentations:Z,stateful:X}){let U=new NY({name:Y,version:"1.0.0"},{capabilities:{tools:{},resources:{},prompts:{},logging:{}}});j.info("Setting up MCP server..."),AY(U,J,Q,$,{logger:j,toolCtx:()=>vY,promptCtx:()=>({locale:"en"}),resourceCtx:()=>({locale:"en"}),presentations:new IY(Z)});let V=new zY({sessionIdGenerator:X?()=>EY():void 0,enableJsonResponse:!0});return U.connect(V).then(()=>({server:U,transport:V}))}async function Xj(j){await Promise.allSettled([j.transport.close(),j.server.close()])}function OY(j){return j instanceof Error?j.stack??j.message:String(j)}function A({logger:j,path:Y,serverName:J,ops:Q,resources:$,prompts:Z,presentations:X,validateAuth:U,requiredAuthMethods:V}){j.info("Setting up MCP handler...",{requiredAuthMethods:V??[]});let B=process.env.CONTRACTSPEC_MCP_STATEFUL==="1",H=new Map;async function K(W){let x=await ij({logger:j,path:Y,serverName:J,ops:Q,resources:$,prompts:Z,presentations:X,stateful:!1});try{return await x.transport.handleRequest(kj(W))}finally{await Xj(x)}}async function P(W){let x=H.get(W);if(!x)return;H.delete(W),await Xj(x)}async function Gj(W){let x=W.headers.get("mcp-session-id"),N,i=!1;if(x){let z=H.get(x);if(!z)return vj(404,-32001,"Session not found");N=z}else N=await ij({logger:j,path:Y,serverName:J,ops:Q,resources:$,prompts:Z,presentations:X,stateful:!0}),i=!0;try{let z=await N.transport.handleRequest(kj(W)),h=N.transport.sessionId;if(h&&!H.has(h))H.set(h,N);if(W.method==="DELETE"&&h)await P(h);else if(!h&&i)await Xj(N);return z}catch(z){if(i)await Xj(N);throw z}}return new kY({name:`mcp-${J}`}).all(Y,async({request:W})=>{try{if(U){let x=await U(W);if(!x.valid)return vj(401,-32002,"Authentication failed",x.reason)}if(B)return await Gj(W);return await K(W)}catch(x){return j.error("Error handling MCP request",{path:Y,method:W.method,error:OY(x)}),vj(500,-32000,"Internal error")}})}import RY from"fs/promises";import{defineCommand as hY,definePrompt as TY,defineResourceTemplate as oj,installOp as fY,OperationSpecRegistry as SY,PromptRegistry as yY,ResourceRegistry as mY}from"@contractspec/lib.contracts-spec";import{defineSchemaModel as aj,ScalarTypeEnum as a}from"@contractspec/lib.schema";import t from"path";import T from"zod";var __dirname="/home/runner/work/contractspec/contractspec/packages/bundles/library/src/application/mcp",gY={quickstart:"packages/apps/cli-contractspec/QUICK_START.md",reference:"packages/apps/cli-contractspec/QUICK_REFERENCE.md",readme:"packages/apps/cli-contractspec/README.md"},dY={quickstart:`# ContractSpec CLI quickstart
3
3
 
4
- contractspec create
5
- contractspec build <spec>
6
- contractspec validate <spec>`,reference:`# ContractSpec CLI reference
4
+ contractspec quickstart
5
+ contractspec onboard
6
+ contractspec validate`,reference:`# ContractSpec CLI reference
7
7
 
8
- Key commands: create, build, validate. See README for full options.`,readme:`# ContractSpec CLI
8
+ Key commands: onboard, create, generate, validate. See README for full options.`,readme:`# ContractSpec CLI
9
9
 
10
- Stabilize AI-generated code across API, DB, UI, events. Use create/build/validate commands.`},r=["cli","mcp"],kj=["@contractspec"],PY=(()=>{let j=new Set([process.cwd(),p.resolve(process.cwd(),".."),p.resolve(process.cwd(),"../.."),p.resolve(process.cwd(),"../../..")]);if(typeof __dirname==="string")j.add(p.resolve(__dirname,"../../../../.."));return[...j]})(),s=new Map;async function qY(j){if(s.has(j))return s.get(j);let Y=WY[j];for(let Q of PY){let $=p.resolve(Q,Y);try{let Z=await UY.readFile($,"utf8");return s.set(j,Z),Z}catch{}}let J=xY[j];return s.set(j,J),J}function LY(){let j=new FY;return j.register(zj({meta:{uriTemplate:"cli://doc/{slug}",title:"CLI documentation",description:"Quickstart, reference, and README for the CLI.",mimeType:"text/markdown",tags:r},input:k.object({slug:k.enum(["quickstart","reference","readme"])}),resolve:async({slug:Y})=>{let J=await qY(Y);return{uri:`cli://doc/${Y}`,mimeType:"text/markdown",data:J}}})),j.register(zj({meta:{uriTemplate:"cli://commands",title:"CLI commands summary",description:"Key ContractSpec CLI commands and when to use them.",mimeType:"application/json",tags:r},input:k.object({}),resolve:async()=>{return{uri:"cli://commands",mimeType:"application/json",data:JSON.stringify([{command:"contractspec create",summary:"Interactive wizard to author specs (with optional AI).",doc:"cli://doc/quickstart"},{command:"contractspec build <specPath>",summary:"Generate implementation code from a ContractSpec (agents + templates).",doc:"cli://doc/reference"},{command:"contractspec validate <specPath>",summary:"Validate specs and optionally check implementations against them.",doc:"cli://doc/reference"}],null,2)}}})),j}function GY(){let j=new wY;return j.register(HY({meta:{key:"cli.usage",version:"1.0.0",title:"Use ContractSpec CLI safely",description:"Remind agents to read CLI docs and pick commands from the canonical list.",tags:r,stability:"beta",owners:kj},args:[{name:"goal",description:"Task the user wants to achieve.",required:!1,schema:k.string().optional()}],input:k.object({goal:k.string().optional()}),render:async({goal:Y})=>[{type:"text",text:`Use CLI commands only from cli://commands. Prefer quickstart for newcomers and reference for options.${Y?` Goal: ${Y}.`:""}`},{type:"resource",uri:"cli://commands",title:"Commands"},{type:"resource",uri:"cli://doc/quickstart",title:"Quickstart"}]})),j}function _Y(){let j=new BY,Y=Oj({name:"CliSuggestInput",fields:{goal:{type:u.String_unsecure(),isOptional:!1},prefersAi:{type:u.Boolean(),isOptional:!0}}}),J=Oj({name:"CliSuggestOutput",fields:{command:{type:u.String_unsecure(),isOptional:!1},docUri:{type:u.String_unsecure(),isOptional:!1},reason:{type:u.String_unsecure(),isOptional:!1}}}),Q=VY({meta:{key:"cli_suggestCommand",version:"1.0.0",stability:"stable",owners:kj,tags:r,description:"Recommend a CLI command for the requested goal.",goal:"Help AI agents choose the correct CLI entrypoint quickly.",context:"Used inside the CLI MCP server."},io:{input:Y,output:J},policy:{auth:"anonymous"}});return KY(j,Q,async({goal:$,prefersAi:Z})=>{let X=$.toLowerCase();if(X.includes("create")||X.includes("new"))return{command:Z?"contractspec create --ai":"contractspec create",docUri:"cli://doc/quickstart",reason:"Creates a new ContractSpec interactively (optionally with AI)."};if(X.includes("build")||X.includes("generate"))return{command:"contractspec build <path-to-spec>",docUri:"cli://doc/reference",reason:"Builds implementation code from a spec using agents + templates."};if(X.includes("validate")||X.includes("check"))return{command:"contractspec validate <path-to-spec>",docUri:"cli://doc/reference",reason:"Validates a spec and optionally checks its implementation for drift."};return{command:"contractspec --help",docUri:"cli://doc/readme",reason:"Fallback when the goal is unclear; read README for options."}}),j}function EJ(j="/api/mcp/cli"){return M({logger:b,path:j,serverName:"contractspec-cli-mcp",ops:_Y(),resources:LY(),prompts:GY()})}import{definePrompt as bY,defineResourceTemplate as Gj,PromptRegistry as MY,ResourceRegistry as DY}from"@contractspec/lib.contracts-spec";import A from"zod";var NY=["@contractspec"],e=["contracts","mcp"];function Rj(j){let Y=new DY;return Y.register(Gj({meta:{uriTemplate:"contracts://list",title:"Contract specs list",description:"JSON list of all contract specs in the workspace.",mimeType:"application/json",tags:e},input:A.object({}),resolve:async()=>{let J=await j.listSpecs();return{uri:"contracts://list",mimeType:"application/json",data:JSON.stringify(J,null,2)}}})),Y.register(Gj({meta:{uriTemplate:"contracts://spec/{path}",title:"Contract spec content",description:"Read a single contract spec file by path.",mimeType:"text/plain",tags:e},input:A.object({path:A.string()}),resolve:async({path:J})=>{let Q=await j.getSpec(J);if(!Q)return{uri:`contracts://spec/${encodeURIComponent(J)}`,mimeType:"text/plain",data:`Spec not found: ${J}`};return{uri:`contracts://spec/${encodeURIComponent(J)}`,mimeType:"text/plain",data:Q.content}}})),Y.register(Gj({meta:{uriTemplate:"contracts://registry/manifest",title:"Remote registry manifest",description:"Contract registry manifest from the remote server.",mimeType:"application/json",tags:e},input:A.object({}),resolve:async()=>{let J=await j.fetchRegistryManifest();return{uri:"contracts://registry/manifest",mimeType:"application/json",data:JSON.stringify(J,null,2)}}})),Y}function vj(){let j=new MY;return j.register(bY({meta:{key:"contracts.editor",version:"1.0.0",title:"Contract editing guide",description:"Guide AI agents through reading, editing, and validating contracts.",tags:e,stability:"beta",owners:NY},args:[{name:"goal",description:"What the agent wants to achieve with the contract.",required:!1,schema:A.string().optional()}],input:A.object({goal:A.string().optional()}),render:async({goal:Y})=>[{type:"text",text:["Contract editing workflow:","1. Use contracts.list to discover specs","2. Use contracts.get to read a spec","3. Edit content and call contracts.update","4. Run contracts.validate to verify changes","5. Run contracts.build to regenerate artifacts",Y?`Agent goal: ${Y}`:""].filter(Boolean).join(`
11
- `)},{type:"resource",uri:"contracts://list",title:"Available contracts"}]})),j}import{defineCommand as R,installOp as v,OperationSpecRegistry as AY}from"@contractspec/lib.contracts-spec";import{defineSchemaModel as _,ScalarTypeEnum as B}from"@contractspec/lib.schema";var T=["@contractspec"],f=["contracts","mcp"];function Tj(j){let Y=new AY,J=_({name:"ContractsListInput",fields:{pattern:{type:B.String_unsecure(),isOptional:!0},type:{type:B.String_unsecure(),isOptional:!0}}}),Q=_({name:"ContractsListOutput",fields:{specs:{type:B.JSON(),isOptional:!1},total:{type:B.Int_unsecure(),isOptional:!1}}});v(Y,R({meta:{key:"contracts.list",version:"1.0.0",stability:"beta",owners:T,tags:f,description:"List contract specs in the workspace.",goal:"Discover available contracts by type, pattern, or owner.",context:"Contracts MCP server."},io:{input:J,output:Q},policy:{auth:"anonymous"}}),async({pattern:V,type:H})=>{let G=await j.listSpecs({pattern:V,type:H});return{specs:G,total:G.length}});let $=_({name:"ContractsGetInput",fields:{path:{type:B.String_unsecure(),isOptional:!1}}}),Z=_({name:"ContractsGetOutput",fields:{content:{type:B.String_unsecure(),isOptional:!1},info:{type:B.JSON(),isOptional:!1}}});v(Y,R({meta:{key:"contracts.get",version:"1.0.0",stability:"beta",owners:T,tags:f,description:"Read a single contract spec file.",goal:"Fetch spec content and parsed metadata.",context:"Contracts MCP server."},io:{input:$,output:Z},policy:{auth:"anonymous"}}),async({path:V})=>{let H=await j.getSpec(V);if(!H)throw Error(`Spec not found: ${V}`);return H});let X=_({name:"ContractsValidateInput",fields:{path:{type:B.String_unsecure(),isOptional:!1}}}),U=_({name:"ContractsValidateOutput",fields:{valid:{type:B.Boolean(),isOptional:!1},errors:{type:B.JSON(),isOptional:!1},warnings:{type:B.JSON(),isOptional:!1}}});v(Y,R({meta:{key:"contracts.validate",version:"1.0.0",stability:"beta",owners:T,tags:f,description:"Validate a contract spec structure.",goal:"Check spec for structural or policy issues.",context:"Contracts MCP server."},io:{input:X,output:U},policy:{auth:"anonymous"}}),async({path:V})=>j.validateSpec(V));let K=_({name:"ContractsBuildInput",fields:{path:{type:B.String_unsecure(),isOptional:!1},dryRun:{type:B.Boolean(),isOptional:!0}}}),P=_({name:"ContractsBuildOutput",fields:{results:{type:B.JSON(),isOptional:!1}}});return v(Y,R({meta:{key:"contracts.build",version:"1.0.0",stability:"beta",owners:T,tags:f,description:"Generate implementation code from a contract spec.",goal:"Produce handler, component, or test skeletons.",context:"Contracts MCP server."},io:{input:K,output:P},policy:{auth:"user"}}),async({path:V,dryRun:H})=>j.buildSpec(V,{dryRun:H})),CY(Y,j),Y}function CY(j,Y){let J=_({name:"ContractsUpdateInput",fields:{path:{type:B.String_unsecure(),isOptional:!1},content:{type:B.String_unsecure(),isOptional:!0},fields:{type:B.JSON(),isOptional:!0}}}),Q=_({name:"ContractsUpdateOutput",fields:{updated:{type:B.Boolean(),isOptional:!1},errors:{type:B.JSON(),isOptional:!1},warnings:{type:B.JSON(),isOptional:!1}}});v(j,R({meta:{key:"contracts.update",version:"1.0.0",stability:"beta",owners:T,tags:f,description:"Update an existing contract spec.",goal:"Modify spec content or individual fields with validation.",context:"Contracts MCP server."},io:{input:J,output:Q},policy:{auth:"user"}}),async({path:X,content:U,fields:K})=>Y.updateSpec(X,{content:U,fields:Array.isArray(K)?K:void 0}));let $=_({name:"ContractsDeleteInput",fields:{path:{type:B.String_unsecure(),isOptional:!1},clean:{type:B.Boolean(),isOptional:!0}}}),Z=_({name:"ContractsDeleteOutput",fields:{deleted:{type:B.Boolean(),isOptional:!1},cleanedFiles:{type:B.JSON(),isOptional:!1},errors:{type:B.JSON(),isOptional:!1}}});v(j,R({meta:{key:"contracts.delete",version:"1.0.0",stability:"beta",owners:T,tags:f,description:"Delete a contract spec and optionally its artifacts.",goal:"Remove a spec file and clean generated handlers/tests.",context:"Contracts MCP server."},io:{input:$,output:Z},policy:{auth:"user"}}),async({path:X,clean:U})=>Y.deleteSpec(X,{clean:U}))}function gJ(j="/api/mcp/contracts",Y){return M({logger:b,path:j,serverName:"contractspec-contracts-mcp",ops:Tj(Y),resources:Rj(Y),prompts:vj()})}import{defaultDocRegistry as IY}from"@contractspec/lib.contracts-spec/docs";var EY=20,zY=100;function q(j){return j?.trim().toLowerCase()??""}function fj(j){let Y=decodeURIComponent(j).trim();if(!Y)return"/";return Y.startsWith("/")?Y:`/${Y}`}function OY(j){return(Array.isArray(j)?j:j?[j]:[]).map((J)=>q(J)).filter(Boolean)}function kY(j){if(!j||Number.isNaN(j))return EY;return Math.min(Math.max(j,1),zY)}function RY(j){if(!j||Number.isNaN(j))return 0;return Math.max(j,0)}function _j({block:j,route:Y}){return{id:j.id,title:j.title,summary:j.summary??"",route:Y,visibility:j.visibility??"public",kind:j.kind??"reference",version:j.version??"1.0.0",tags:j.tags??[]}}function vY(j,Y){if(!Y)return 1;let J=Y.split(/\s+/).filter(Boolean),Q=q(j.block.title),$=q(j.block.id),Z=q(j.block.summary),X=q(j.block.body),U=q(j.route),K=(j.block.tags??[]).map((H)=>q(H)),P=[Q,$,Z,X,U,...K].join(" ");if(J.some((H)=>!P.includes(H)))return 0;let V=0;for(let H of J){if($.includes(H))V+=8;if(Q.includes(H))V+=7;if(K.some((G)=>G.includes(H)))V+=5;if(Z.includes(H))V+=4;if(U.includes(H))V+=3;if(X.includes(H))V+=2}return V}function h(j,Y){let J=q(typeof Y.query==="string"?Y.query:void 0),Q=OY(Y.tag),$=q(typeof Y.visibility==="string"?Y.visibility:void 0),Z=q(typeof Y.kind==="string"?Y.kind:void 0),X=kY(typeof Y.limit==="number"?Y.limit:void 0),U=RY(typeof Y.offset==="number"?Y.offset:void 0),K=j.map((H)=>({doc:_j(H),score:vY(H,J)})).filter(({doc:H,score:G})=>{let Fj=J?G>0:!0,F=Q.length?Q.every((d)=>H.tags.some((N)=>q(N).includes(d))):!0,W=$?q(H.visibility)===$:!0,D=Z?q(H.kind)===Z:!0;return Fj&&F&&W&&D}).sort((H,G)=>{if(G.score!==H.score)return G.score-H.score;return H.doc.title.localeCompare(G.doc.title)}),P=K.slice(U,U+X).map(({doc:H})=>H),V=U+P.length<K.length?U+P.length:void 0;return{docs:P,items:P,total:K.length,...V!=null?{nextOffset:V}:{}}}function jj(j){let Y=decodeURIComponent(j),J=IY.get(Y);if(!J)return;return{doc:_j(J),content:String(J.block.body??"")}}function Yj(j,Y){let J=fj(Y),Q=j.find(($)=>fj($.route)===J);if(!Q)return;return{doc:_j(Q),content:String(Q.block.body??"")}}function Jj(j){let Y=new Map,J=new Map,Q=new Map;for(let Z of j){let X=Z.block.kind??"reference",U=Z.block.visibility??"public";J.set(X,(J.get(X)??0)+1),Q.set(U,(Q.get(U)??0)+1);for(let K of Z.block.tags??[])Y.set(K,(Y.get(K)??0)+1)}let $=(Z,X)=>[...Z.entries()].sort((U,K)=>K[1]-U[1]||U[0].localeCompare(K[0])).map(([U,K])=>({[X]:U,count:K}));return{totalDocs:j.length,tags:$(Y,"tag"),kinds:$(J,"kind"),visibilities:$(Q,"visibility")}}import{EventRegistry as TY,OperationSpecRegistry as fY}from"@contractspec/lib.contracts-spec";import{DataViewRegistry as hY}from"@contractspec/lib.contracts-spec/data-views";import{ContractReferenceDataView as SY,ContractReferenceQuery as yY,DocsGenerateCommand as mY,DocsGeneratedEvent as gY,DocsIndexDataView as dY,DocsIndexQuery as uY,DocsLayoutPresentation as pY,DocsPublishCommand as lY,DocsPublishedEvent as nY,DocsReferencePagePresentation as cY,DocsSearchForm as iY,ExampleCatalogDataView as oY}from"@contractspec/lib.contracts-spec/docs";import{FormRegistry as aY}from"@contractspec/lib.contracts-spec/forms";import{PresentationRegistry as tY}from"@contractspec/lib.contracts-spec/presentations";import{serializeDataViewSpec as sY,serializeEventSpec as rY,serializeFormSpec as eY,serializeOperationSpec as j0,serializePresentationSpec as Y0}from"@contractspec/lib.contracts-spec/serialization";var Qj=null;function J0(){let j=new fY;return j.register(uY).register(yY).register(mY).register(lY),j}function Q0(){if(!Qj)Qj=J0();return Qj}function bj(j,Y){return Q0().get(j,Y)}var Zj=null;function Z0(){let j=new TY;return j.register(gY).register(nY),j}function $0(){if(!Zj)Zj=Z0();return Zj}function Mj(j,Y){return $0().get(j,Y)}var $j=null;function X0(){let j=new tY;return j.register(pY).register(cY),j}function U0(){if(!$j)$j=X0();return $j}function Dj(j,Y){return U0().get(j,Y)}var Xj=null;function V0(){let j=new hY;return j.register(dY).register(SY).register(oY),j}function H0(){if(!Xj)Xj=V0();return Xj}function Nj(j,Y){return H0().get(j,Y)}var Uj=null;function K0(){let j=new aY;return j.register(iY),j}function B0(){if(!Uj)Uj=K0();return Uj}function Aj(j,Y){return B0().get(j)}function hj(j,Y){let J=bj(j,Y);return j0(J)??void 0}function Sj(j,Y){let J=Mj(j,Y);return rY(J)??void 0}function yj(j,Y){let J=Dj(j,Y);return Y0(J)??void 0}function mj(j,Y){let J=Nj(j,Y);return sY(J)??void 0}function gj(j,Y){let J=Aj(j,Y);return eY(J)??void 0}function w0(){Qj=null}function F0(){Zj=null}function W0(){$j=null}function x0(){Xj=null}function P0(){Uj=null}function tJ(){w0(),F0(),W0(),x0(),P0()}import{defaultDocRegistry as q0}from"@contractspec/lib.contracts-spec/docs";function L0(j){return j?.trim().toLowerCase()??""}function G0(j){for(let Y of j??[]){let J=q0.get(Y);if(J)return J.route}return}function dj(j,Y,J,Q){let $=j.meta.title??j.meta.key,Z=G0(j.meta.docId),X=j.meta.description;return{key:j.meta.key,version:j.meta.version,type:Y,title:$,description:X,markdown:[`# ${$}`,`- Key: ${j.meta.key}`,`- Type: ${Y}`,`- Version: ${j.meta.version}`,Z?`- Docs route: ${Z}`:"",X?`
10
+ Stabilize AI-generated code across API, DB, UI, events. Use onboard/create/generate/validate commands.`},Vj=["cli","mcp"],tj=["@contractspec"],uY=(()=>{let j=new Set([process.cwd(),t.resolve(process.cwd(),".."),t.resolve(process.cwd(),"../.."),t.resolve(process.cwd(),"../../..")]);if(typeof __dirname==="string")j.add(t.resolve(__dirname,"../../../../.."));return[...j]})(),Uj=new Map;async function pY(j){if(Uj.has(j))return Uj.get(j);let Y=gY[j];for(let Q of uY){let $=t.resolve(Q,Y);try{let Z=await RY.readFile($,"utf8");return Uj.set(j,Z),Z}catch{}}let J=dY[j];return Uj.set(j,J),J}function lY(){let j=new mY;return j.register(oj({meta:{uriTemplate:"cli://doc/{slug}",title:"CLI documentation",description:"Quickstart, reference, and README for the CLI.",mimeType:"text/markdown",tags:Vj},input:T.object({slug:T.enum(["quickstart","reference","readme"])}),resolve:async({slug:Y})=>{let J=await pY(Y);return{uri:`cli://doc/${Y}`,mimeType:"text/markdown",data:J}}})),j.register(oj({meta:{uriTemplate:"cli://commands",title:"CLI commands summary",description:"Key ContractSpec CLI commands and when to use them.",mimeType:"application/json",tags:Vj},input:T.object({}),resolve:async()=>{return{uri:"cli://commands",mimeType:"application/json",data:JSON.stringify([{command:"contractspec onboard",summary:"Generate repo-local AGENTS.md and USAGE.md guidance plus recommended tracks.",doc:"cli://doc/quickstart"},{command:"contractspec create",summary:"Interactive wizard to author specs (with optional AI).",doc:"cli://doc/quickstart"},{command:"contractspec build <specPath>",summary:"Generate implementation code from a ContractSpec (agents + templates).",doc:"cli://doc/reference"},{command:"contractspec validate <specPath>",summary:"Validate specs and optionally check implementations against them.",doc:"cli://doc/reference"}],null,2)}}})),pj(j),j}function nY(){let j=new yY;return j.register(TY({meta:{key:"cli.usage",version:"1.0.0",title:"Use ContractSpec CLI safely",description:"Remind agents to read CLI docs and pick commands from the canonical list.",tags:Vj,stability:"beta",owners:tj},args:[{name:"goal",description:"Task the user wants to achieve.",required:!1,schema:T.string().optional()}],input:T.object({goal:T.string().optional()}),render:async({goal:Y})=>[{type:"text",text:`Use CLI commands only from cli://commands. Prefer quickstart for newcomers and reference for options.${Y?` Goal: ${Y}.`:""}`},{type:"resource",uri:"cli://commands",title:"Commands"},{type:"resource",uri:"cli://doc/quickstart",title:"Quickstart"}]})),lj(j),j}function cY(){let j=new SY,Y=aj({name:"CliSuggestInput",fields:{goal:{type:a.String_unsecure(),isOptional:!1},prefersAi:{type:a.Boolean(),isOptional:!0}}}),J=aj({name:"CliSuggestOutput",fields:{command:{type:a.String_unsecure(),isOptional:!1},docUri:{type:a.String_unsecure(),isOptional:!1},reason:{type:a.String_unsecure(),isOptional:!1}}}),Q=hY({meta:{key:"cli_suggestCommand",version:"1.0.0",stability:"stable",owners:tj,tags:Vj,description:"Recommend a CLI command for the requested goal.",goal:"Help AI agents choose the correct CLI entrypoint quickly.",context:"Used inside the CLI MCP server."},io:{input:Y,output:J},policy:{auth:"anonymous"}});return fY(j,Q,async({goal:$,prefersAi:Z})=>{let X=$.toLowerCase();if(X.includes("onboard")||X.includes("start")||X.includes("guide")||X.includes("install"))return{command:"contractspec onboard",docUri:"cli://doc/quickstart",reason:"Starts the CLI-first onboarding flow for the current repo."};if(X.includes("create")||X.includes("new"))return{command:Z?"contractspec create --ai":"contractspec create",docUri:"cli://doc/quickstart",reason:"Creates a new ContractSpec interactively (optionally with AI)."};if(X.includes("build")||X.includes("generate"))return{command:"contractspec build <path-to-spec>",docUri:"cli://doc/reference",reason:"Builds implementation code from a spec using agents + templates."};if(X.includes("validate")||X.includes("check"))return{command:"contractspec validate <path-to-spec>",docUri:"cli://doc/reference",reason:"Validates a spec and optionally checks its implementation for drift."};return{command:"contractspec --help",docUri:"cli://doc/readme",reason:"Fallback when the goal is unclear; read README for options."}}),nj(j),j}function HQ(j="/api/mcp/cli"){return A({logger:D,path:j,serverName:"contractspec-cli-mcp",ops:cY(),resources:lY(),prompts:nY()})}import{definePrompt as iY,defineResourceTemplate as s,PromptRegistry as oY,ResourceRegistry as aY}from"@contractspec/lib.contracts-spec";import I from"zod";var tY=["@contractspec"],f=["contracts","mcp"];function sj(j){let Y=new aY;return Y.register(s({meta:{uriTemplate:"contracts://list",title:"Contract specs list",description:"JSON list of all contract specs in the workspace.",mimeType:"application/json",tags:f},input:I.object({}),resolve:async()=>{let J=await j.listSpecs();return{uri:"contracts://list",mimeType:"application/json",data:JSON.stringify(J,null,2)}}})),Y.register(s({meta:{uriTemplate:"contracts://spec/{path}",title:"Contract spec content",description:"Read a single contract spec file by path.",mimeType:"text/plain",tags:f},input:I.object({path:I.string()}),resolve:async({path:J})=>{let Q=await j.getSpec(J);if(!Q)return{uri:`contracts://spec/${encodeURIComponent(J)}`,mimeType:"text/plain",data:`Spec not found: ${J}`};return{uri:`contracts://spec/${encodeURIComponent(J)}`,mimeType:"text/plain",data:Q.content}}})),Y.register(s({meta:{uriTemplate:"contracts://registry/manifest",title:"Remote registry manifest",description:"Contract registry manifest from the remote server.",mimeType:"application/json",tags:f},input:I.object({}),resolve:async()=>{let J=await j.fetchRegistryManifest();return{uri:"contracts://registry/manifest",mimeType:"application/json",data:JSON.stringify(J,null,2)}}})),Y.register(s({meta:{uriTemplate:"adoption://catalog",title:"ContractSpec adoption catalog",description:"Bundled ContractSpec adoption catalog used by Connect and MCP.",mimeType:"application/json",tags:f},input:I.object({}),resolve:async()=>{let J=await j.searchAdoptionCatalog({query:"contractspec"});return{uri:"adoption://catalog",mimeType:"application/json",data:JSON.stringify(J,null,2)}}})),Y.register(s({meta:{uriTemplate:"adoption://policy/{family}",title:"ContractSpec adoption policy",description:"Family-aware adoption recommendation and verdict policy.",mimeType:"application/json",tags:f},input:I.object({family:I.string()}),resolve:async({family:J})=>{let Q=await j.resolveAdoption({family:J,query:J});return{uri:`adoption://policy/${encodeURIComponent(J)}`,mimeType:"application/json",data:JSON.stringify(Q,null,2)}}})),Y}function rj(){let j=new oY;return j.register(iY({meta:{key:"contracts.editor",version:"1.0.0",title:"Contract editing guide",description:"Guide AI agents through reading, editing, and validating contracts.",tags:f,stability:"beta",owners:tY},args:[{name:"goal",description:"What the agent wants to achieve with the contract.",required:!1,schema:I.string().optional()}],input:I.object({goal:I.string().optional()}),render:async({goal:Y})=>[{type:"text",text:["Contract editing workflow:","1. Use contracts.list to discover specs","2. Use contracts.get to read a spec","3. Edit content and call contracts.update","4. Run contracts.validate to verify changes","5. Run contracts.build to regenerate artifacts","6. Use adoption.resolve to prefer existing workspace or ContractSpec surfaces before inventing new ones",Y?`Agent goal: ${Y}`:""].filter(Boolean).join(`
11
+ `)},{type:"resource",uri:"contracts://list",title:"Available contracts"}]})),j}import{defineCommand as Oj,installOp as Rj}from"@contractspec/lib.contracts-spec";import{defineSchemaModel as S,ScalarTypeEnum as b}from"@contractspec/lib.schema";var hj=["@contractspec"],Tj=["contracts","mcp","adoption"];function ej(j,Y){let J=S({name:"AdoptionCatalogSearchInput",fields:{query:{type:b.String_unsecure(),isOptional:!1},family:{type:b.String_unsecure(),isOptional:!0},platform:{type:b.String_unsecure(),isOptional:!0}}}),Q=S({name:"AdoptionCatalogSearchOutput",fields:{results:{type:b.JSON(),isOptional:!1}}});Rj(j,Oj({meta:{key:"adoption.catalog_search",version:"1.0.0",stability:"beta",owners:hj,tags:Tj,description:"Search the local ContractSpec adoption catalog.",goal:"Find relevant ContractSpec reuse candidates for a query.",context:"Contracts MCP server."},io:{input:J,output:Q},policy:{auth:"anonymous"}}),async({family:V,platform:B,query:H})=>({results:await Y.searchAdoptionCatalog({family:V,platform:B,query:H})}));let $=S({name:"AdoptionResolveInput",fields:{family:{type:b.String_unsecure(),isOptional:!1},query:{type:b.String_unsecure(),isOptional:!1},paths:{type:b.JSON(),isOptional:!0},platform:{type:b.String_unsecure(),isOptional:!0},runtime:{type:b.String_unsecure(),isOptional:!0}}}),Z=S({name:"AdoptionResolveOutput",fields:{resolution:{type:b.JSON(),isOptional:!1}}});Rj(j,Oj({meta:{key:"adoption.resolve",version:"1.0.0",stability:"beta",owners:hj,tags:Tj,description:"Resolve the best adoption candidate for one family.",goal:"Provide one ordered recommendation that matches Connect.",context:"Contracts MCP server."},io:{input:$,output:Z},policy:{auth:"anonymous"}}),async({family:V,paths:B,platform:H,query:K,runtime:P})=>({resolution:await Y.resolveAdoption({family:V,paths:Array.isArray(B)?B:void 0,platform:H,query:K,runtime:P})}));let X=S({name:"AdoptionSyncInput",fields:{}}),U=S({name:"AdoptionSyncOutput",fields:{catalogPath:{type:b.String_unsecure(),isOptional:!1},total:{type:b.Int_unsecure(),isOptional:!1}}});Rj(j,Oj({meta:{key:"adoption.sync",version:"1.0.0",stability:"beta",owners:hj,tags:Tj,description:"Mirror the bundled ContractSpec adoption catalog locally.",goal:"Refresh the local adoption catalog used by Connect and MCP.",context:"Contracts MCP server."},io:{input:X,output:U},policy:{auth:"user"}}),async()=>Y.syncAdoptionCatalog())}import{defineCommand as y,installOp as m,OperationSpecRegistry as sY}from"@contractspec/lib.contracts-spec";import{defineSchemaModel as G,ScalarTypeEnum as w}from"@contractspec/lib.schema";var g=["@contractspec"],d=["contracts","mcp"];function jY(j){let Y=new sY,J=G({name:"ContractsListInput",fields:{pattern:{type:w.String_unsecure(),isOptional:!0},type:{type:w.String_unsecure(),isOptional:!0}}}),Q=G({name:"ContractsListOutput",fields:{specs:{type:w.JSON(),isOptional:!1},total:{type:w.Int_unsecure(),isOptional:!1}}});m(Y,y({meta:{key:"contracts.list",version:"1.0.0",stability:"beta",owners:g,tags:d,description:"List contract specs in the workspace.",goal:"Discover available contracts by type, pattern, or owner.",context:"Contracts MCP server."},io:{input:J,output:Q},policy:{auth:"anonymous"}}),async({pattern:H,type:K})=>{let P=await j.listSpecs({pattern:H,type:K});return{specs:P,total:P.length}});let $=G({name:"ContractsGetInput",fields:{path:{type:w.String_unsecure(),isOptional:!1}}}),Z=G({name:"ContractsGetOutput",fields:{content:{type:w.String_unsecure(),isOptional:!1},info:{type:w.JSON(),isOptional:!1}}});m(Y,y({meta:{key:"contracts.get",version:"1.0.0",stability:"beta",owners:g,tags:d,description:"Read a single contract spec file.",goal:"Fetch spec content and parsed metadata.",context:"Contracts MCP server."},io:{input:$,output:Z},policy:{auth:"anonymous"}}),async({path:H})=>{let K=await j.getSpec(H);if(!K)throw Error(`Spec not found: ${H}`);return K});let X=G({name:"ContractsValidateInput",fields:{path:{type:w.String_unsecure(),isOptional:!1}}}),U=G({name:"ContractsValidateOutput",fields:{valid:{type:w.Boolean(),isOptional:!1},errors:{type:w.JSON(),isOptional:!1},warnings:{type:w.JSON(),isOptional:!1}}});m(Y,y({meta:{key:"contracts.validate",version:"1.0.0",stability:"beta",owners:g,tags:d,description:"Validate a contract spec structure.",goal:"Check spec for structural or policy issues.",context:"Contracts MCP server."},io:{input:X,output:U},policy:{auth:"anonymous"}}),async({path:H})=>j.validateSpec(H));let V=G({name:"ContractsBuildInput",fields:{path:{type:w.String_unsecure(),isOptional:!1},dryRun:{type:w.Boolean(),isOptional:!0}}}),B=G({name:"ContractsBuildOutput",fields:{results:{type:w.JSON(),isOptional:!1}}});return m(Y,y({meta:{key:"contracts.build",version:"1.0.0",stability:"beta",owners:g,tags:d,description:"Generate implementation code from a contract spec.",goal:"Produce handler, component, or test skeletons.",context:"Contracts MCP server."},io:{input:V,output:B},policy:{auth:"user"}}),async({path:H,dryRun:K})=>j.buildSpec(H,{dryRun:K})),rY(Y,j),ej(Y,j),Y}function rY(j,Y){let J=G({name:"ContractsUpdateInput",fields:{path:{type:w.String_unsecure(),isOptional:!1},content:{type:w.String_unsecure(),isOptional:!0},fields:{type:w.JSON(),isOptional:!0}}}),Q=G({name:"ContractsUpdateOutput",fields:{updated:{type:w.Boolean(),isOptional:!1},errors:{type:w.JSON(),isOptional:!1},warnings:{type:w.JSON(),isOptional:!1}}});m(j,y({meta:{key:"contracts.update",version:"1.0.0",stability:"beta",owners:g,tags:d,description:"Update an existing contract spec.",goal:"Modify spec content or individual fields with validation.",context:"Contracts MCP server."},io:{input:J,output:Q},policy:{auth:"user"}}),async({path:X,content:U,fields:V})=>Y.updateSpec(X,{content:U,fields:Array.isArray(V)?V:void 0}));let $=G({name:"ContractsDeleteInput",fields:{path:{type:w.String_unsecure(),isOptional:!1},clean:{type:w.Boolean(),isOptional:!0}}}),Z=G({name:"ContractsDeleteOutput",fields:{deleted:{type:w.Boolean(),isOptional:!1},cleanedFiles:{type:w.JSON(),isOptional:!1},errors:{type:w.JSON(),isOptional:!1}}});m(j,y({meta:{key:"contracts.delete",version:"1.0.0",stability:"beta",owners:g,tags:d,description:"Delete a contract spec and optionally its artifacts.",goal:"Remove a spec file and clean generated handlers/tests.",context:"Contracts MCP server."},io:{input:$,output:Z},policy:{auth:"user"}}),async({path:X,clean:U})=>Y.deleteSpec(X,{clean:U}))}function AQ(j="/api/mcp/contracts",Y){return A({logger:D,path:j,serverName:"contractspec-contracts-mcp",ops:jY(Y),resources:sj(Y),prompts:rj()})}import{defaultDocRegistry as eY}from"@contractspec/lib.contracts-spec/docs";var j0=20,Y0=100;function _(j){return j?.trim().toLowerCase()??""}function YY(j){let Y=decodeURIComponent(j).trim();if(!Y)return"/";return Y.startsWith("/")?Y:`/${Y}`}function J0(j){return(Array.isArray(j)?j:j?[j]:[]).map((J)=>_(J)).filter(Boolean)}function Q0(j){if(!j||Number.isNaN(j))return j0;return Math.min(Math.max(j,1),Y0)}function Z0(j){if(!j||Number.isNaN(j))return 0;return Math.max(j,0)}function fj({block:j,route:Y}){return{id:j.id,title:j.title,summary:j.summary??"",route:Y,visibility:j.visibility??"public",kind:j.kind??"reference",version:j.version??"1.0.0",tags:j.tags??[]}}function $0(j,Y){if(!Y)return 1;let J=Y.split(/\s+/).filter(Boolean),Q=_(j.block.title),$=_(j.block.id),Z=_(j.block.summary),X=_(j.block.body),U=_(j.route),V=(j.block.tags??[]).map((K)=>_(K)),B=[Q,$,Z,X,U,...V].join(" ");if(J.some((K)=>!B.includes(K)))return 0;let H=0;for(let K of J){if($.includes(K))H+=8;if(Q.includes(K))H+=7;if(V.some((P)=>P.includes(K)))H+=5;if(Z.includes(K))H+=4;if(U.includes(K))H+=3;if(X.includes(K))H+=2}return H}function u(j,Y){let J=_(typeof Y.query==="string"?Y.query:void 0),Q=J0(Y.tag),$=_(typeof Y.visibility==="string"?Y.visibility:void 0),Z=_(typeof Y.kind==="string"?Y.kind:void 0),X=Q0(typeof Y.limit==="number"?Y.limit:void 0),U=Z0(typeof Y.offset==="number"?Y.offset:void 0),V=j.map((K)=>({doc:fj(K),score:$0(K,J)})).filter(({doc:K,score:P})=>{let Gj=J?P>0:!0,W=Q.length?Q.every((i)=>K.tags.some((z)=>_(z).includes(i))):!0,x=$?_(K.visibility)===$:!0,N=Z?_(K.kind)===Z:!0;return Gj&&W&&x&&N}).sort((K,P)=>{if(P.score!==K.score)return P.score-K.score;return K.doc.title.localeCompare(P.doc.title)}),B=V.slice(U,U+X).map(({doc:K})=>K),H=U+B.length<V.length?U+B.length:void 0;return{docs:B,items:B,total:V.length,...H!=null?{nextOffset:H}:{}}}function Hj(j){let Y=decodeURIComponent(j),J=eY.get(Y);if(!J)return;return{doc:fj(J),content:String(J.block.body??"")}}function Kj(j,Y){let J=YY(Y),Q=j.find(($)=>YY($.route)===J);if(!Q)return;return{doc:fj(Q),content:String(Q.block.body??"")}}function wj(j){let Y=new Map,J=new Map,Q=new Map;for(let Z of j){let X=Z.block.kind??"reference",U=Z.block.visibility??"public";J.set(X,(J.get(X)??0)+1),Q.set(U,(Q.get(U)??0)+1);for(let V of Z.block.tags??[])Y.set(V,(Y.get(V)??0)+1)}let $=(Z,X)=>[...Z.entries()].sort((U,V)=>V[1]-U[1]||U[0].localeCompare(V[0])).map(([U,V])=>({[X]:U,count:V}));return{totalDocs:j.length,tags:$(Y,"tag"),kinds:$(J,"kind"),visibilities:$(Q,"visibility")}}import{EventRegistry as X0,OperationSpecRegistry as U0}from"@contractspec/lib.contracts-spec";import{DataViewRegistry as V0}from"@contractspec/lib.contracts-spec/data-views";import{ContractReferenceDataView as H0,ContractReferenceQuery as K0,DocsGenerateCommand as w0,DocsGeneratedEvent as F0,DocsIndexDataView as B0,DocsIndexQuery as W0,DocsLayoutPresentation as x0,DocsPublishCommand as P0,DocsPublishedEvent as L0,DocsReferencePagePresentation as q0,DocsSearchForm as _0,ExampleCatalogDataView as M0}from"@contractspec/lib.contracts-spec/docs";import{FormRegistry as b0}from"@contractspec/lib.contracts-spec/forms";import{PresentationRegistry as G0}from"@contractspec/lib.contracts-spec/presentations";import{serializeDataViewSpec as D0,serializeEventSpec as C0,serializeFormSpec as A0,serializeOperationSpec as I0,serializePresentationSpec as N0}from"@contractspec/lib.contracts-spec/serialization";var Fj=null;function z0(){let j=new U0;return j.register(W0).register(K0).register(w0).register(P0),j}function E0(){if(!Fj)Fj=z0();return Fj}function Sj(j,Y){return E0().get(j,Y)}var Bj=null;function k0(){let j=new X0;return j.register(F0).register(L0),j}function v0(){if(!Bj)Bj=k0();return Bj}function yj(j,Y){return v0().get(j,Y)}var Wj=null;function O0(){let j=new G0;return j.register(x0).register(q0),j}function R0(){if(!Wj)Wj=O0();return Wj}function mj(j,Y){return R0().get(j,Y)}var xj=null;function h0(){let j=new V0;return j.register(B0).register(H0).register(M0),j}function T0(){if(!xj)xj=h0();return xj}function gj(j,Y){return T0().get(j,Y)}var Pj=null;function f0(){let j=new b0;return j.register(_0),j}function S0(){if(!Pj)Pj=f0();return Pj}function dj(j,Y){return S0().get(j)}function JY(j,Y){let J=Sj(j,Y);return I0(J)??void 0}function QY(j,Y){let J=yj(j,Y);return C0(J)??void 0}function ZY(j,Y){let J=mj(j,Y);return N0(J)??void 0}function $Y(j,Y){let J=gj(j,Y);return D0(J)??void 0}function XY(j,Y){let J=dj(j,Y);return A0(J)??void 0}function y0(){Fj=null}function m0(){Bj=null}function g0(){Wj=null}function d0(){xj=null}function u0(){Pj=null}function TQ(){y0(),m0(),g0(),d0(),u0()}import{defaultDocRegistry as p0}from"@contractspec/lib.contracts-spec/docs";function l0(j){return j?.trim().toLowerCase()??""}function n0(j){for(let Y of j??[]){let J=p0.get(Y);if(J)return J.route}return}function UY(j,Y,J,Q){let $=j.meta.title??j.meta.key,Z=n0(j.meta.docId),X=j.meta.description;return{key:j.meta.key,version:j.meta.version,type:Y,title:$,description:X,markdown:[`# ${$}`,`- Key: ${j.meta.key}`,`- Type: ${Y}`,`- Version: ${j.meta.version}`,Z?`- Docs route: ${Z}`:"",X?`
12
12
  ${X}`:""].filter(Boolean).join(`
13
- `),...Z?{route:Z}:{},...J?{schema:J}:{},...Q?{policy:Q}:{},tags:j.meta.tags??[],owners:j.meta.owners??[],stability:j.meta.stability}}function S(j){let Y=j.includeSchema??!1,J=L0(j.type),Q=bj(j.key,j.version);if(Q&&(!J||J==="operation"||J===Q.meta.kind))return{reference:dj(Q,Q.meta.kind,Y?hj(j.key,j.version):void 0,Q.policy)};let $=[{type:"data-view",spec:Nj(j.key,j.version),schema:Y?mj(j.key,j.version):void 0},{type:"form",spec:Aj(j.key,j.version),schema:Y?gj(j.key,j.version):void 0},{type:"presentation",spec:Dj(j.key,j.version),schema:Y?yj(j.key,j.version):void 0},{type:"event",spec:Mj(j.key,j.version),schema:Y?Sj(j.key,j.version):void 0}];for(let Z of $)if(Z.spec&&(!J||J===Z.type))return{reference:dj(Z.spec,Z.type,Z.schema)};throw Error(`Contract reference not found: ${j.key}`)}import{definePrompt as uj,PromptRegistry as _0}from"@contractspec/lib.contracts-spec";import x from"zod";var pj=["@contractspec"],lj=["docs","mcp"];function nj(j){let Y=new _0;return Y.register(uj({meta:{key:"docs.navigator",version:"1.0.0",title:"Find relevant ContractSpec docs",description:"Guide agents to search, filter, and open the right ContractSpec docs.",tags:lj,stability:"beta",owners:pj},args:[{name:"topic",description:"Goal or subject to search for.",required:!1,schema:x.string().optional()},{name:"kind",description:"Optional doc kind filter.",required:!1,schema:x.string().optional()},{name:"tag",description:"Optional tag filter.",required:!1,schema:x.string().optional()}],input:x.object({topic:x.string().optional(),kind:x.string().optional(),tag:x.string().optional()}),render:async({topic:J,kind:Q,tag:$})=>{let Z=h(j,{query:J,kind:Q,tag:$,limit:3}),X=Z.docs.length?Z.docs.map((U)=>`- ${U.title} (${U.id}) -> ${U.route}`).join(`
13
+ `),...Z?{route:Z}:{},...J?{schema:J}:{},...Q?{policy:Q}:{},tags:j.meta.tags??[],owners:j.meta.owners??[],stability:j.meta.stability}}function p(j){let Y=j.includeSchema??!1,J=l0(j.type),Q=Sj(j.key,j.version);if(Q&&(!J||J==="operation"||J===Q.meta.kind))return{reference:UY(Q,Q.meta.kind,Y?JY(j.key,j.version):void 0,Q.policy)};let $=[{type:"data-view",spec:gj(j.key,j.version),schema:Y?$Y(j.key,j.version):void 0},{type:"form",spec:dj(j.key,j.version),schema:Y?XY(j.key,j.version):void 0},{type:"presentation",spec:mj(j.key,j.version),schema:Y?ZY(j.key,j.version):void 0},{type:"event",spec:yj(j.key,j.version),schema:Y?QY(j.key,j.version):void 0}];for(let Z of $)if(Z.spec&&(!J||J===Z.type))return{reference:UY(Z.spec,Z.type,Z.schema)};throw Error(`Contract reference not found: ${j.key}`)}import{definePrompt as VY,PromptRegistry as c0}from"@contractspec/lib.contracts-spec";import L from"zod";var HY=["@contractspec"],KY=["docs","mcp"];function wY(j){let Y=new c0;return Y.register(VY({meta:{key:"docs.navigator",version:"1.0.0",title:"Find relevant ContractSpec docs",description:"Guide agents to search, filter, and open the right ContractSpec docs.",tags:KY,stability:"beta",owners:HY},args:[{name:"topic",description:"Goal or subject to search for.",required:!1,schema:L.string().optional()},{name:"kind",description:"Optional doc kind filter.",required:!1,schema:L.string().optional()},{name:"tag",description:"Optional tag filter.",required:!1,schema:L.string().optional()}],input:L.object({topic:L.string().optional(),kind:L.string().optional(),tag:L.string().optional()}),render:async({topic:J,kind:Q,tag:$})=>{let Z=u(j,{query:J,kind:Q,tag:$,limit:3}),X=Z.docs.length?Z.docs.map((U)=>`- ${U.title} (${U.id}) -> ${U.route}`).join(`
14
14
  `):"- No direct pre-match. Use docs_list_facets-v1_0_0 to browse tags and kinds.";return[{type:"text",text:["Use docs_search-v1_0_0 first, then read docs://doc/{id} for the strongest matches.","Use docs_resolve_route-v1_0_0 when the user already gives you a docs URL or route.","Use docs_list_facets-v1_0_0 or docs://facets to browse the docs taxonomy before guessing.",J?`Topic: ${J}`:"",Q?`Kind: ${Q}`:"",$?`Tag: ${$}`:"","Suggested starting docs:",X].filter(Boolean).join(`
15
- `)},{type:"resource",uri:"docs://index",title:"DocBlocks index"},{type:"resource",uri:"docs://facets",title:"Docs facets"}]}})),Y.register(uj({meta:{key:"docs.reference.guide",version:"1.0.0",title:"Resolve a ContractSpec reference",description:"Guide agents to fetch the canonical reference payload for a ContractSpec surface.",tags:lj,stability:"beta",owners:pj},args:[{name:"key",description:"ContractSpec key to resolve.",required:!0,schema:x.string()},{name:"version",description:"Optional version override.",required:!1,schema:x.string().optional()},{name:"type",description:"Optional surface type: command, query, form, data-view, presentation, event.",required:!1,schema:x.string().optional()}],input:x.object({key:x.string(),version:x.string().optional(),type:x.string().optional()}),render:async({key:J,version:Q,type:$})=>{let Z=S({key:J,version:Q,type:$,includeSchema:!0}).reference;return[{type:"text",text:["Use docs_contract_reference-v1_0_0 when you need the canonical docs payload for a ContractSpec surface.","Use docs_get-v1_0_0 only when you already know the exact DocBlock id and need raw markdown.",`Resolved key: ${Z.key}`,`Resolved type: ${Z.type}`,Z.route?`Docs route: ${Z.route}`:"",`Resource URI: docs://contract-reference/${encodeURIComponent(J)}`].filter(Boolean).join(`
16
- `)},{type:"resource",uri:`docs://contract-reference/${encodeURIComponent(J)}`,title:"Contract reference"}]}})),Y}import{defineResourceTemplate as C,ResourceRegistry as b0}from"@contractspec/lib.contracts-spec";import w from"zod";var I=["docs","mcp"];function cj(j){let Y=new b0,J=(Q)=>h(j,Q);return Y.register(C({meta:{uriTemplate:"docs://index",title:"DocBlocks index",description:"Default ContractSpec docs index resource.",mimeType:"application/json",tags:I},input:w.object({}),resolve:async()=>({uri:"docs://index",mimeType:"application/json",data:JSON.stringify(J({}),null,2)})})),Y.register(C({meta:{uriTemplate:"docs://index{?query,tag,kind,visibility,limit,offset}",title:"DocBlocks index",description:"Search and paginate ContractSpec docs by query, tag, kind, or visibility.",mimeType:"application/json",tags:I},input:w.object({query:w.string().optional(),tag:w.string().optional(),kind:w.string().optional(),visibility:w.string().optional(),limit:w.coerce.number().optional(),offset:w.coerce.number().optional()}),resolve:async(Q)=>({uri:"docs://index",mimeType:"application/json",data:JSON.stringify(J(Q),null,2)})})),Y.register(C({meta:{uriTemplate:"docs://list",title:"DocBlocks index (legacy alias)",description:"Compatibility alias for the docs index resource.",mimeType:"application/json",tags:I},input:w.object({}),resolve:async()=>({uri:"docs://list",mimeType:"application/json",data:JSON.stringify(J({}),null,2)})})),Y.register(C({meta:{uriTemplate:"docs://doc/{id}",title:"Doc markdown",description:"Fetch a single DocBlock body by id as markdown.",mimeType:"text/markdown",tags:I},input:w.object({id:w.string()}),resolve:async({id:Q})=>{let $=jj(Q);if(!$)return{uri:`docs://doc/${encodeURIComponent(Q)}`,mimeType:"text/plain",data:`DocBlock not found: ${Q}`};return{uri:`docs://doc/${encodeURIComponent(Q)}`,mimeType:"text/markdown",data:$.content}}})),Y.register(C({meta:{uriTemplate:"docs://route/{routePath}",title:"Doc by route",description:"Resolve a docs route to the matching DocBlock summary and body.",mimeType:"application/json",tags:I},input:w.object({routePath:w.string()}),resolve:async({routePath:Q})=>({uri:`docs://route/${encodeURIComponent(Q)}`,mimeType:"application/json",data:JSON.stringify(Yj(j,Q)??{error:"not_found",route:Q},null,2)})})),Y.register(C({meta:{uriTemplate:"docs://facets",title:"Docs facets",description:"Counts of available tags, kinds, and visibilities across docs.",mimeType:"application/json",tags:I},input:w.object({}),resolve:async()=>({uri:"docs://facets",mimeType:"application/json",data:JSON.stringify(Jj(j),null,2)})})),Y.register(C({meta:{uriTemplate:"docs://contract-reference/{key}{?version,type,includeSchema}",title:"Contract reference",description:"Resolve a ContractSpec surface into a docs-ready reference payload.",mimeType:"application/json",tags:I},input:w.object({key:w.string(),version:w.string().optional(),type:w.string().optional(),includeSchema:w.coerce.boolean().optional()}),resolve:async({key:Q,version:$,type:Z,includeSchema:X})=>({uri:`docs://contract-reference/${encodeURIComponent(Q)}`,mimeType:"application/json",data:JSON.stringify(S({key:Q,version:$,type:Z,includeSchema:X}),null,2)})})),Y}import{defineCommand as l,defineSchemaModel as y,installOp as n,OperationSpecRegistry as M0}from"@contractspec/lib.contracts-spec";import{ContractReferenceInput as D0,ContractReferenceOutput as N0,DocsIndexInput as A0,DocsIndexOutput as C0}from"@contractspec/lib.contracts-spec/docs";import{ScalarTypeEnum as E}from"@contractspec/lib.schema";var c=["@contractspec"],i=["docs","mcp"],I0=y({name:"DocsGetInput",fields:{id:{type:E.String_unsecure(),isOptional:!1}}}),E0=y({name:"DocsGetOutput",fields:{doc:{type:E.JSON(),isOptional:!1},content:{type:E.String_unsecure(),isOptional:!1}}}),z0=y({name:"DocsResolveRouteInput",fields:{route:{type:E.String_unsecure(),isOptional:!1}}}),O0=y({name:"DocsResolveRouteOutput",fields:{doc:{type:E.JSON(),isOptional:!1},content:{type:E.String_unsecure(),isOptional:!1}}}),k0=y({name:"DocsFacetsInput",fields:{}}),R0=y({name:"DocsFacetsOutput",fields:{facets:{type:E.JSON(),isOptional:!1}}});function ij(j){let Y=new M0;return n(Y,l({meta:{key:"docs.search",version:"1.0.0",stability:"beta",owners:c,tags:i,description:"Search ContractSpec docs by query, tag, kind, or visibility.",goal:"Find the most relevant DocBlocks without browsing the full corpus.",context:"Read-only docs MCP search surface."},io:{input:A0,output:C0},policy:{auth:"anonymous"},transport:{mcp:{toolName:"docs_search-v1_0_0"}}}),async(J)=>h(j,J)),n(Y,l({meta:{key:"docs.get",version:"1.0.0",stability:"beta",owners:c,tags:i,description:"Read a single DocBlock by id.",goal:"Fetch the exact markdown content and metadata for a known doc id.",context:"Read-only docs MCP surface."},io:{input:I0,output:E0},policy:{auth:"anonymous"},transport:{mcp:{toolName:"docs_get-v1_0_0"}}}),async({id:J})=>{let Q=jj(J);if(!Q)throw Error(`DocBlock not found: ${J}`);return Q}),n(Y,l({meta:{key:"docs.resolveRoute",version:"1.0.0",stability:"beta",owners:c,tags:i,description:"Resolve a docs route to the matching DocBlock.",goal:"Turn a route or URL path into a canonical doc id and markdown body.",context:"Read-only docs MCP surface."},io:{input:z0,output:O0},policy:{auth:"anonymous"},transport:{mcp:{toolName:"docs_resolve_route-v1_0_0"}}}),async({route:J})=>{let Q=Yj(j,J);if(!Q)throw Error(`Doc route not found: ${J}`);return Q}),n(Y,l({meta:{key:"docs.contract.lookup",version:"1.0.0",stability:"beta",owners:c,tags:i,description:"Resolve a ContractSpec surface into a docs-ready reference payload.",goal:"Get canonical docs metadata, route, and optional schema for a spec key.",context:"Read-only docs MCP surface."},io:{input:D0,output:N0},policy:{auth:"anonymous"},transport:{mcp:{toolName:"docs_contract_reference-v1_0_0"}}}),async(J)=>S(J)),n(Y,l({meta:{key:"docs.list.facets",version:"1.0.0",stability:"beta",owners:c,tags:i,description:"List docs taxonomy facets such as tags, kinds, and visibilities.",goal:"Help agents browse the docs corpus before making targeted reads.",context:"Read-only docs MCP surface."},io:{input:k0,output:R0},policy:{auth:"anonymous"},transport:{mcp:{toolName:"docs_list_facets-v1_0_0"}}}),async()=>({facets:Jj(j)})),Y}import{defaultDocRegistry as v0}from"@contractspec/lib.contracts-spec/docs";function DQ(j="/api/mcp/docs",Y={}){let J=v0.list();return M({logger:b,path:j,serverName:"contractspec-docs-mcp",ops:ij(J),resources:cj(J),prompts:nj(J),presentations:Y.includePresentations?J.map(({descriptor:Q})=>Q):void 0})}import{defineCommand as T0,definePrompt as f0,defineResourceTemplate as Vj,installOp as h0,OperationSpecRegistry as S0,PromptRegistry as y0,ResourceRegistry as m0}from"@contractspec/lib.contracts-spec";import{defineSchemaModel as oj,ScalarTypeEnum as aj}from"@contractspec/lib.schema";import{getExample as g0,listExamples as d0,searchExamples as u0}from"@contractspec/module.examples";import z from"zod";var m=["internal","mcp"],tj=["@contractspec"],o={docs:"/api/mcp/docs",cli:"/api/mcp/cli",internal:"/api/mcp/internal",graphql:"/graphql",health:"/health"};function p0(){let j=new m0;return j.register(Vj({meta:{uriTemplate:"examples://list{?q}",title:"ContractSpec examples registry",description:"List available examples (templates, integrations, knowledge, scripts). Optional query `q` filters results.",mimeType:"application/json",tags:["examples",...m]},input:z.object({q:z.string().optional()}),resolve:async({q:Y})=>{let J=Y?u0(Y):[...d0()];return{uri:Y?`examples://list?q=${encodeURIComponent(Y)}`:"examples://list",mimeType:"application/json",data:JSON.stringify(J,null,2)}}})),j.register(Vj({meta:{uriTemplate:"examples://example/{id}",title:"ContractSpec example (by id)",description:"Fetch a single example manifest by id.",mimeType:"application/json",tags:["examples",...m]},input:z.object({id:z.string().min(1)}),resolve:async({id:Y})=>{let J=g0(Y);if(!J)return{uri:`examples://example/${encodeURIComponent(Y)}`,mimeType:"application/json",data:JSON.stringify({error:"not_found",id:Y,message:`Unknown example id: ${Y}`},null,2)};return{uri:`examples://example/${encodeURIComponent(Y)}`,mimeType:"application/json",data:JSON.stringify(J,null,2)}}})),j.register(Vj({meta:{uriTemplate:"internal://endpoints",title:"ContractSpec MCP endpoints",description:"Endpoints for docs, CLI, internal MCP servers.",mimeType:"application/json",tags:m},input:z.object({}),resolve:async()=>({uri:"internal://endpoints",mimeType:"application/json",data:JSON.stringify(o,null,2)})})),j.register(Vj({meta:{uriTemplate:"internal://playbook",title:"Internal MCP usage playbook",description:"How internal agents should discover docs, CLI usage, and endpoints.",mimeType:"text/markdown",tags:m},input:z.object({}),resolve:async()=>({uri:"internal://playbook",mimeType:"text/markdown",data:["# Internal MCP playbook","- Connect to docs MCP first for canonical specs.","- Use CLI MCP to surface quickstart/reference before running commands.","- Keep calls read-only unless explicitly approved.",`- Endpoints: ${o.docs}, ${o.cli}, ${o.internal}.`,"- For API work, GraphQL at /graphql; health at /health."].join(`
17
- `)})})),j}function l0(){let j=new y0;return j.register(f0({meta:{key:"internal_bootstrap",version:"1.0.0",title:"Bootstrap internal ContractSpec agent",description:"Points agents to the correct MCP endpoints and guardrails.",tags:m,owners:tj,stability:"beta"},args:[],input:z.object({}),render:async()=>[{type:"text",text:"Start with internal://endpoints to pick the right MCP. Use docs MCP for specifications and CLI MCP for commands. Keep actions read-only unless explicitly approved."},{type:"resource",uri:"internal://endpoints",title:"Endpoints"}]})),j}function n0(){let j=new S0,Y=oj({name:"InternalDescribeOutput",fields:{endpoints:{type:aj.JSONObject(),isOptional:!1},notes:{type:aj.String_unsecure(),isOptional:!1}}}),J=T0({meta:{key:"internal_describe",version:"1.0.0",stability:"stable",owners:tj,tags:m,description:"Return MCP endpoints and guidance for internal ContractSpec agents.",goal:"Speed up internal development with the correct MCP entrypoints.",context:"Used by internal MCP surface; read-only."},io:{input:oj({name:"InternalDescribeInput",fields:{}}),output:Y},policy:{auth:"anonymous"}});return h0(j,J,async()=>({endpoints:o,notes:"Use docs MCP for canonical specs, CLI MCP for contractspec commands, and keep side-effecting actions gated behind human review."})),j}function kQ(j="/api/mcp/internal"){return M({logger:b,path:j,serverName:"contractspec-internal-mcp",ops:n0(),resources:p0(),prompts:l0()})}import{getModelInfo as c0}from"@contractspec/lib.ai-providers/models";import{definePrompt as i0,defineResourceTemplate as Hj,installOp as Cj,OperationSpecRegistry as o0,PromptRegistry as a0,ResourceRegistry as t0}from"@contractspec/lib.contracts-spec";import{BenchmarkIngestCommand as s0,BenchmarkRunCustomCommand as r0,RankingRefreshCommand as e0}from"@contractspec/lib.contracts-spec/provider-ranking";import{InMemoryProviderRankingStore as jJ}from"@contractspec/lib.provider-ranking/in-memory-store";import{createDefaultIngesterRegistry as YJ}from"@contractspec/lib.provider-ranking/ingesters";import{computeModelRankings as JJ,normalizeBenchmarkResults as QJ}from"@contractspec/lib.provider-ranking/scoring";import L from"zod";var Bj=L.enum(["rest","mcp","webhook","sdk"]).optional(),wj=L.enum(["api-key","oauth2","bearer","header","basic","webhook-signing","service-account"]).optional(),a=["ranking","mcp","ai"],ZJ=["platform.ai"],Kj=null;function g(){if(!Kj)Kj=new jJ;return Kj}function $J(){let j=new t0;return j.register(Hj({meta:{uriTemplate:"ranking://leaderboard",title:"AI Model Leaderboard",description:"Current ranked list of AI models by composite score. Supports optional transport and authMethod query filters.",mimeType:"application/json",tags:a},input:L.object({transport:Bj,authMethod:wj}),resolve:async({transport:Y,authMethod:J})=>{let $=await g().listModelRankings({limit:100,requiredTransport:Y,requiredAuthMethod:J});return{uri:"ranking://leaderboard",mimeType:"application/json",data:JSON.stringify($,null,2)}}})),j.register(Hj({meta:{uriTemplate:"ranking://leaderboard/{dimension}",title:"AI Model Leaderboard by Dimension",description:"Ranked list of AI models filtered by a specific dimension. Supports optional transport and authMethod query filters.",mimeType:"application/json",tags:a},input:L.object({dimension:L.string(),transport:Bj,authMethod:wj}),resolve:async({dimension:Y,transport:J,authMethod:Q})=>{let Z=await g().listModelRankings({dimension:Y,limit:100,requiredTransport:J,requiredAuthMethod:Q});return{uri:`ranking://leaderboard/${encodeURIComponent(Y)}`,mimeType:"application/json",data:JSON.stringify(Z,null,2)}}})),j.register(Hj({meta:{uriTemplate:"ranking://model/{modelId}",title:"AI Model Profile",description:"Detailed profile for a specific AI model including scores and benchmarks.",mimeType:"application/json",tags:a},input:L.object({modelId:L.string()}),resolve:async({modelId:Y})=>{let Q=await g().getModelProfile(Y);if(!Q)return{uri:`ranking://model/${encodeURIComponent(Y)}`,mimeType:"application/json",data:JSON.stringify({error:"not_found",modelId:Y})};let $=Q.costPerMillion==null?(()=>{let Z=c0(Q.modelId);return Z?.costPerMillion?{...Q,costPerMillion:Z.costPerMillion,displayName:Z.name,contextWindow:Z.contextWindow,capabilities:[...Z.capabilities.vision?["vision"]:[],...Z.capabilities.tools?["tools"]:[],...Z.capabilities.reasoning?["reasoning"]:[],...Z.capabilities.streaming?["streaming"]:[]]}:Q})():Q;return{uri:`ranking://model/${encodeURIComponent(Y)}`,mimeType:"application/json",data:JSON.stringify($,null,2)}}})),j.register(Hj({meta:{uriTemplate:"ranking://results",title:"Benchmark Results",description:"List of raw benchmark results from all ingested sources.",mimeType:"application/json",tags:a},input:L.object({}),resolve:async()=>{let J=await g().listBenchmarkResults({limit:200});return{uri:"ranking://results",mimeType:"application/json",data:JSON.stringify(J,null,2)}}})),j}function XJ(){let j=new a0;return j.register(i0({meta:{key:"ranking.advisor",version:"1.0.0",title:"AI Model Advisor",description:"Which AI model is best for a given task? Uses the leaderboard to recommend.",tags:a,stability:"beta",owners:ZJ},args:[{name:"task",description:"The task or use case to recommend a model for.",required:!0,schema:L.string()},{name:"priority",description:"Priority dimension (coding, reasoning, cost, latency, etc.).",required:!1,schema:L.string().optional()},{name:"transport",description:"Required transport type (rest, mcp, webhook, sdk).",required:!1,schema:Bj},{name:"authMethod",description:"Required auth method (api-key, oauth2, bearer, etc.).",required:!1,schema:wj}],input:L.object({task:L.string(),priority:L.string().optional(),transport:Bj,authMethod:wj}),render:async({task:Y,priority:J,transport:Q,authMethod:$})=>{let Z=[];if(J)Z.push(`Prioritize: ${J}.`);if(Q)Z.push(`Required transport: ${Q}.`);if($)Z.push(`Required auth: ${$}.`);return[{type:"text",text:`Recommend the best AI model for: "${Y}".${Z.length?` ${Z.join(" ")}`:""} Use the leaderboard data to justify your recommendation.`},{type:"resource",uri:J?`ranking://leaderboard/${J}`:"ranking://leaderboard",title:"Leaderboard"}]}})),j}function UJ(){let j=new o0,Y=YJ();return Cj(j,s0,async(J)=>{let Q=g(),$=J.source,Z=Y.get($);if(!Z)throw Error(`No ingester registered for source: ${$}`);let X=await Z.ingest({sourceUrl:J.sourceUrl,dimensions:J.dimensions}),U=QJ(X);for(let K of U)await Q.upsertBenchmarkResult(K);return{ingestionId:`ingest-${$}-${Date.now()}`,source:$,resultsCount:U.length,status:"completed",ingestedAt:new Date}}),Cj(j,r0,async(J)=>{return{runId:`custom-${Date.now()}`,evalSuiteKey:J.evalSuiteKey,modelId:J.modelId,status:"started",startedAt:new Date}}),Cj(j,e0,async(J)=>{let Q=g(),$=[],Z=0,X=500;while(!0){let V=await Q.listBenchmarkResults({limit:X,offset:Z});if($.push(...V.results),$.length>=V.total||V.results.length<X)break;Z+=X}let U=new Map((await Q.listModelRankings({limit:1e4})).rankings.map((V)=>[V.modelId,V])),K=J.weightOverrides?Array.isArray(J.weightOverrides)?J.weightOverrides:[J.weightOverrides]:void 0,P=JJ($,K?{weightOverrides:K}:void 0,U);for(let V of P)await Q.upsertModelRanking(V);return{modelsRanked:P.length,updatedAt:new Date,status:"completed"}}),j}function uQ(j="/api/mcp/ranking"){return M({logger:b,path:j,serverName:"contractspec-ranking-mcp",ops:UJ(),resources:$J(),prompts:XJ()})}function pQ(j){Kj=j}export{pQ as setProviderRankingStore,uQ as createProviderRankingMcpHandler,kQ as createInternalMcpHandler,DQ as createDocsMcpHandler,gJ as createContractsMcpHandler,EJ as createCliMcpHandler};
15
+ `)},{type:"resource",uri:"docs://index",title:"DocBlocks index"},{type:"resource",uri:"docs://facets",title:"Docs facets"}]}})),Y.register(VY({meta:{key:"docs.reference.guide",version:"1.0.0",title:"Resolve a ContractSpec reference",description:"Guide agents to fetch the canonical reference payload for a ContractSpec surface.",tags:KY,stability:"beta",owners:HY},args:[{name:"key",description:"ContractSpec key to resolve.",required:!0,schema:L.string()},{name:"version",description:"Optional version override.",required:!1,schema:L.string().optional()},{name:"type",description:"Optional surface type: command, query, form, data-view, presentation, event.",required:!1,schema:L.string().optional()}],input:L.object({key:L.string(),version:L.string().optional(),type:L.string().optional()}),render:async({key:J,version:Q,type:$})=>{let Z=p({key:J,version:Q,type:$,includeSchema:!0}).reference;return[{type:"text",text:["Use docs_contract_reference-v1_0_0 when you need the canonical docs payload for a ContractSpec surface.","Use docs_get-v1_0_0 only when you already know the exact DocBlock id and need raw markdown.",`Resolved key: ${Z.key}`,`Resolved type: ${Z.type}`,Z.route?`Docs route: ${Z.route}`:"",`Resource URI: docs://contract-reference/${encodeURIComponent(J)}`].filter(Boolean).join(`
16
+ `)},{type:"resource",uri:`docs://contract-reference/${encodeURIComponent(J)}`,title:"Contract reference"}]}})),Y}import{defineResourceTemplate as k,ResourceRegistry as i0}from"@contractspec/lib.contracts-spec";import F from"zod";var v=["docs","mcp"];function FY(j){let Y=new i0,J=(Q)=>u(j,Q);return Y.register(k({meta:{uriTemplate:"docs://index",title:"DocBlocks index",description:"Default ContractSpec docs index resource.",mimeType:"application/json",tags:v},input:F.object({}),resolve:async()=>({uri:"docs://index",mimeType:"application/json",data:JSON.stringify(J({}),null,2)})})),Y.register(k({meta:{uriTemplate:"docs://index{?query,tag,kind,visibility,limit,offset}",title:"DocBlocks index",description:"Search and paginate ContractSpec docs by query, tag, kind, or visibility.",mimeType:"application/json",tags:v},input:F.object({query:F.string().optional(),tag:F.string().optional(),kind:F.string().optional(),visibility:F.string().optional(),limit:F.coerce.number().optional(),offset:F.coerce.number().optional()}),resolve:async(Q)=>({uri:"docs://index",mimeType:"application/json",data:JSON.stringify(J(Q),null,2)})})),Y.register(k({meta:{uriTemplate:"docs://list",title:"DocBlocks index (legacy alias)",description:"Compatibility alias for the docs index resource.",mimeType:"application/json",tags:v},input:F.object({}),resolve:async()=>({uri:"docs://list",mimeType:"application/json",data:JSON.stringify(J({}),null,2)})})),Y.register(k({meta:{uriTemplate:"docs://doc/{id}",title:"Doc markdown",description:"Fetch a single DocBlock body by id as markdown.",mimeType:"text/markdown",tags:v},input:F.object({id:F.string()}),resolve:async({id:Q})=>{let $=Hj(Q);if(!$)return{uri:`docs://doc/${encodeURIComponent(Q)}`,mimeType:"text/plain",data:`DocBlock not found: ${Q}`};return{uri:`docs://doc/${encodeURIComponent(Q)}`,mimeType:"text/markdown",data:$.content}}})),Y.register(k({meta:{uriTemplate:"docs://route/{routePath}",title:"Doc by route",description:"Resolve a docs route to the matching DocBlock summary and body.",mimeType:"application/json",tags:v},input:F.object({routePath:F.string()}),resolve:async({routePath:Q})=>({uri:`docs://route/${encodeURIComponent(Q)}`,mimeType:"application/json",data:JSON.stringify(Kj(j,Q)??{error:"not_found",route:Q},null,2)})})),Y.register(k({meta:{uriTemplate:"docs://facets",title:"Docs facets",description:"Counts of available tags, kinds, and visibilities across docs.",mimeType:"application/json",tags:v},input:F.object({}),resolve:async()=>({uri:"docs://facets",mimeType:"application/json",data:JSON.stringify(wj(j),null,2)})})),Y.register(k({meta:{uriTemplate:"docs://contract-reference/{key}{?version,type,includeSchema}",title:"Contract reference",description:"Resolve a ContractSpec surface into a docs-ready reference payload.",mimeType:"application/json",tags:v},input:F.object({key:F.string(),version:F.string().optional(),type:F.string().optional(),includeSchema:F.coerce.boolean().optional()}),resolve:async({key:Q,version:$,type:Z,includeSchema:X})=>({uri:`docs://contract-reference/${encodeURIComponent(Q)}`,mimeType:"application/json",data:JSON.stringify(p({key:Q,version:$,type:Z,includeSchema:X}),null,2)})})),Y}import{defineCommand as r,defineSchemaModel as l,installOp as e,OperationSpecRegistry as o0}from"@contractspec/lib.contracts-spec";import{ContractReferenceInput as a0,ContractReferenceOutput as t0,DocsIndexInput as s0,DocsIndexOutput as r0}from"@contractspec/lib.contracts-spec/docs";import{ScalarTypeEnum as O}from"@contractspec/lib.schema";var jj=["@contractspec"],Yj=["docs","mcp"],e0=l({name:"DocsGetInput",fields:{id:{type:O.String_unsecure(),isOptional:!1}}}),jJ=l({name:"DocsGetOutput",fields:{doc:{type:O.JSON(),isOptional:!1},content:{type:O.String_unsecure(),isOptional:!1}}}),YJ=l({name:"DocsResolveRouteInput",fields:{route:{type:O.String_unsecure(),isOptional:!1}}}),JJ=l({name:"DocsResolveRouteOutput",fields:{doc:{type:O.JSON(),isOptional:!1},content:{type:O.String_unsecure(),isOptional:!1}}}),QJ=l({name:"DocsFacetsInput",fields:{}}),ZJ=l({name:"DocsFacetsOutput",fields:{facets:{type:O.JSON(),isOptional:!1}}});function BY(j){let Y=new o0;return e(Y,r({meta:{key:"docs.search",version:"1.0.0",stability:"beta",owners:jj,tags:Yj,description:"Search ContractSpec docs by query, tag, kind, or visibility.",goal:"Find the most relevant DocBlocks without browsing the full corpus.",context:"Read-only docs MCP search surface."},io:{input:s0,output:r0},policy:{auth:"anonymous"},transport:{mcp:{toolName:"docs_search-v1_0_0"}}}),async(J)=>u(j,J)),e(Y,r({meta:{key:"docs.get",version:"1.0.0",stability:"beta",owners:jj,tags:Yj,description:"Read a single DocBlock by id.",goal:"Fetch the exact markdown content and metadata for a known doc id.",context:"Read-only docs MCP surface."},io:{input:e0,output:jJ},policy:{auth:"anonymous"},transport:{mcp:{toolName:"docs_get-v1_0_0"}}}),async({id:J})=>{let Q=Hj(J);if(!Q)throw Error(`DocBlock not found: ${J}`);return Q}),e(Y,r({meta:{key:"docs.resolveRoute",version:"1.0.0",stability:"beta",owners:jj,tags:Yj,description:"Resolve a docs route to the matching DocBlock.",goal:"Turn a route or URL path into a canonical doc id and markdown body.",context:"Read-only docs MCP surface."},io:{input:YJ,output:JJ},policy:{auth:"anonymous"},transport:{mcp:{toolName:"docs_resolve_route-v1_0_0"}}}),async({route:J})=>{let Q=Kj(j,J);if(!Q)throw Error(`Doc route not found: ${J}`);return Q}),e(Y,r({meta:{key:"docs.contract.lookup",version:"1.0.0",stability:"beta",owners:jj,tags:Yj,description:"Resolve a ContractSpec surface into a docs-ready reference payload.",goal:"Get canonical docs metadata, route, and optional schema for a spec key.",context:"Read-only docs MCP surface."},io:{input:a0,output:t0},policy:{auth:"anonymous"},transport:{mcp:{toolName:"docs_contract_reference-v1_0_0"}}}),async(J)=>p(J)),e(Y,r({meta:{key:"docs.list.facets",version:"1.0.0",stability:"beta",owners:jj,tags:Yj,description:"List docs taxonomy facets such as tags, kinds, and visibilities.",goal:"Help agents browse the docs corpus before making targeted reads.",context:"Read-only docs MCP surface."},io:{input:QJ,output:ZJ},policy:{auth:"anonymous"},transport:{mcp:{toolName:"docs_list_facets-v1_0_0"}}}),async()=>({facets:wj(j)})),Y}import{defaultDocRegistry as $J}from"@contractspec/lib.contracts-spec/docs";function VZ(j="/api/mcp/docs",Y={}){let J=$J.list();return A({logger:D,path:j,serverName:"contractspec-docs-mcp",ops:BY(J),resources:FY(J),prompts:wY(J),presentations:Y.includePresentations?J.map(({descriptor:Q})=>Q):void 0})}import{defineCommand as XJ,definePrompt as UJ,defineResourceTemplate as Lj,installOp as VJ,OperationSpecRegistry as HJ,PromptRegistry as KJ,ResourceRegistry as wJ}from"@contractspec/lib.contracts-spec";import{defineSchemaModel as WY,ScalarTypeEnum as xY}from"@contractspec/lib.schema";import{getExample as FJ,listExamples as BJ,searchExamples as WJ}from"@contractspec/module.examples";import R from"zod";var n=["internal","mcp"],PY=["@contractspec"],Jj={docs:"/api/mcp/docs",cli:"/api/mcp/cli",internal:"/api/mcp/internal",graphql:"/graphql",health:"/health"};function xJ(){let j=new wJ;return j.register(Lj({meta:{uriTemplate:"examples://list{?q}",title:"ContractSpec examples registry",description:"List available examples (templates, integrations, knowledge, scripts). Optional query `q` filters results.",mimeType:"application/json",tags:["examples",...n]},input:R.object({q:R.string().optional()}),resolve:async({q:Y})=>{let J=Y?WJ(Y):[...BJ()];return{uri:Y?`examples://list?q=${encodeURIComponent(Y)}`:"examples://list",mimeType:"application/json",data:JSON.stringify(J,null,2)}}})),j.register(Lj({meta:{uriTemplate:"examples://example/{id}",title:"ContractSpec example (by id)",description:"Fetch a single example manifest by id.",mimeType:"application/json",tags:["examples",...n]},input:R.object({id:R.string().min(1)}),resolve:async({id:Y})=>{let J=FJ(Y);if(!J)return{uri:`examples://example/${encodeURIComponent(Y)}`,mimeType:"application/json",data:JSON.stringify({error:"not_found",id:Y,message:`Unknown example id: ${Y}`},null,2)};return{uri:`examples://example/${encodeURIComponent(Y)}`,mimeType:"application/json",data:JSON.stringify(J,null,2)}}})),j.register(Lj({meta:{uriTemplate:"internal://endpoints",title:"ContractSpec MCP endpoints",description:"Endpoints for docs, CLI, internal MCP servers.",mimeType:"application/json",tags:n},input:R.object({}),resolve:async()=>({uri:"internal://endpoints",mimeType:"application/json",data:JSON.stringify(Jj,null,2)})})),j.register(Lj({meta:{uriTemplate:"internal://playbook",title:"Internal MCP usage playbook",description:"How internal agents should discover docs, CLI usage, and endpoints.",mimeType:"text/markdown",tags:n},input:R.object({}),resolve:async()=>({uri:"internal://playbook",mimeType:"text/markdown",data:["# Internal MCP playbook","- Connect to docs MCP first for canonical specs.","- Use CLI MCP to surface quickstart/reference before running commands.","- Keep calls read-only unless explicitly approved.",`- Endpoints: ${Jj.docs}, ${Jj.cli}, ${Jj.internal}.`,"- For API work, GraphQL at /graphql; health at /health."].join(`
17
+ `)})})),j}function PJ(){let j=new KJ;return j.register(UJ({meta:{key:"internal_bootstrap",version:"1.0.0",title:"Bootstrap internal ContractSpec agent",description:"Points agents to the correct MCP endpoints and guardrails.",tags:n,owners:PY,stability:"beta"},args:[],input:R.object({}),render:async()=>[{type:"text",text:"Start with internal://endpoints to pick the right MCP. Use docs MCP for specifications and CLI MCP for commands. Keep actions read-only unless explicitly approved."},{type:"resource",uri:"internal://endpoints",title:"Endpoints"}]})),j}function LJ(){let j=new HJ,Y=WY({name:"InternalDescribeOutput",fields:{endpoints:{type:xY.JSONObject(),isOptional:!1},notes:{type:xY.String_unsecure(),isOptional:!1}}}),J=XJ({meta:{key:"internal_describe",version:"1.0.0",stability:"stable",owners:PY,tags:n,description:"Return MCP endpoints and guidance for internal ContractSpec agents.",goal:"Speed up internal development with the correct MCP entrypoints.",context:"Used by internal MCP surface; read-only."},io:{input:WY({name:"InternalDescribeInput",fields:{}}),output:Y},policy:{auth:"anonymous"}});return VJ(j,J,async()=>({endpoints:Jj,notes:"Use docs MCP for canonical specs, CLI MCP for contractspec commands, and keep side-effecting actions gated behind human review."})),j}function PZ(j="/api/mcp/internal"){return A({logger:D,path:j,serverName:"contractspec-internal-mcp",ops:LJ(),resources:xJ(),prompts:PJ()})}import{getModelInfo as qJ}from"@contractspec/lib.ai-providers/models";import{definePrompt as _J,defineResourceTemplate as qj,installOp as uj,OperationSpecRegistry as MJ,PromptRegistry as bJ,ResourceRegistry as GJ}from"@contractspec/lib.contracts-spec";import{BenchmarkIngestCommand as DJ,BenchmarkRunCustomCommand as CJ,RankingRefreshCommand as AJ}from"@contractspec/lib.contracts-spec/provider-ranking";import{InMemoryProviderRankingStore as IJ}from"@contractspec/lib.provider-ranking/in-memory-store";import{createDefaultIngesterRegistry as NJ}from"@contractspec/lib.provider-ranking/ingesters";import{computeModelRankings as zJ,normalizeBenchmarkResults as EJ}from"@contractspec/lib.provider-ranking/scoring";import M from"zod";var Mj=M.enum(["rest","mcp","webhook","sdk"]).optional(),bj=M.enum(["api-key","oauth2","bearer","header","basic","webhook-signing","service-account"]).optional(),Qj=["ranking","mcp","ai"],kJ=["platform.ai"],_j=null;function c(){if(!_j)_j=new IJ;return _j}function vJ(){let j=new GJ;return j.register(qj({meta:{uriTemplate:"ranking://leaderboard",title:"AI Model Leaderboard",description:"Current ranked list of AI models by composite score. Supports optional transport and authMethod query filters.",mimeType:"application/json",tags:Qj},input:M.object({transport:Mj,authMethod:bj}),resolve:async({transport:Y,authMethod:J})=>{let $=await c().listModelRankings({limit:100,requiredTransport:Y,requiredAuthMethod:J});return{uri:"ranking://leaderboard",mimeType:"application/json",data:JSON.stringify($,null,2)}}})),j.register(qj({meta:{uriTemplate:"ranking://leaderboard/{dimension}",title:"AI Model Leaderboard by Dimension",description:"Ranked list of AI models filtered by a specific dimension. Supports optional transport and authMethod query filters.",mimeType:"application/json",tags:Qj},input:M.object({dimension:M.string(),transport:Mj,authMethod:bj}),resolve:async({dimension:Y,transport:J,authMethod:Q})=>{let Z=await c().listModelRankings({dimension:Y,limit:100,requiredTransport:J,requiredAuthMethod:Q});return{uri:`ranking://leaderboard/${encodeURIComponent(Y)}`,mimeType:"application/json",data:JSON.stringify(Z,null,2)}}})),j.register(qj({meta:{uriTemplate:"ranking://model/{modelId}",title:"AI Model Profile",description:"Detailed profile for a specific AI model including scores and benchmarks.",mimeType:"application/json",tags:Qj},input:M.object({modelId:M.string()}),resolve:async({modelId:Y})=>{let Q=await c().getModelProfile(Y);if(!Q)return{uri:`ranking://model/${encodeURIComponent(Y)}`,mimeType:"application/json",data:JSON.stringify({error:"not_found",modelId:Y})};let $=Q.costPerMillion==null?(()=>{let Z=qJ(Q.modelId);return Z?.costPerMillion?{...Q,costPerMillion:Z.costPerMillion,displayName:Z.name,contextWindow:Z.contextWindow,capabilities:[...Z.capabilities.vision?["vision"]:[],...Z.capabilities.tools?["tools"]:[],...Z.capabilities.reasoning?["reasoning"]:[],...Z.capabilities.streaming?["streaming"]:[]]}:Q})():Q;return{uri:`ranking://model/${encodeURIComponent(Y)}`,mimeType:"application/json",data:JSON.stringify($,null,2)}}})),j.register(qj({meta:{uriTemplate:"ranking://results",title:"Benchmark Results",description:"List of raw benchmark results from all ingested sources.",mimeType:"application/json",tags:Qj},input:M.object({}),resolve:async()=>{let J=await c().listBenchmarkResults({limit:200});return{uri:"ranking://results",mimeType:"application/json",data:JSON.stringify(J,null,2)}}})),j}function OJ(){let j=new bJ;return j.register(_J({meta:{key:"ranking.advisor",version:"1.0.0",title:"AI Model Advisor",description:"Which AI model is best for a given task? Uses the leaderboard to recommend.",tags:Qj,stability:"beta",owners:kJ},args:[{name:"task",description:"The task or use case to recommend a model for.",required:!0,schema:M.string()},{name:"priority",description:"Priority dimension (coding, reasoning, cost, latency, etc.).",required:!1,schema:M.string().optional()},{name:"transport",description:"Required transport type (rest, mcp, webhook, sdk).",required:!1,schema:Mj},{name:"authMethod",description:"Required auth method (api-key, oauth2, bearer, etc.).",required:!1,schema:bj}],input:M.object({task:M.string(),priority:M.string().optional(),transport:Mj,authMethod:bj}),render:async({task:Y,priority:J,transport:Q,authMethod:$})=>{let Z=[];if(J)Z.push(`Prioritize: ${J}.`);if(Q)Z.push(`Required transport: ${Q}.`);if($)Z.push(`Required auth: ${$}.`);return[{type:"text",text:`Recommend the best AI model for: "${Y}".${Z.length?` ${Z.join(" ")}`:""} Use the leaderboard data to justify your recommendation.`},{type:"resource",uri:J?`ranking://leaderboard/${J}`:"ranking://leaderboard",title:"Leaderboard"}]}})),j}function RJ(){let j=new MJ,Y=NJ();return uj(j,DJ,async(J)=>{let Q=c(),$=J.source,Z=Y.get($);if(!Z)throw Error(`No ingester registered for source: ${$}`);let X=await Z.ingest({sourceUrl:J.sourceUrl,dimensions:J.dimensions}),U=EJ(X);for(let V of U)await Q.upsertBenchmarkResult(V);return{ingestionId:`ingest-${$}-${Date.now()}`,source:$,resultsCount:U.length,status:"completed",ingestedAt:new Date}}),uj(j,CJ,async(J)=>{return{runId:`custom-${Date.now()}`,evalSuiteKey:J.evalSuiteKey,modelId:J.modelId,status:"started",startedAt:new Date}}),uj(j,AJ,async(J)=>{let Q=c(),$=[],Z=0,X=500;while(!0){let H=await Q.listBenchmarkResults({limit:X,offset:Z});if($.push(...H.results),$.length>=H.total||H.results.length<X)break;Z+=X}let U=new Map((await Q.listModelRankings({limit:1e4})).rankings.map((H)=>[H.modelId,H])),V=J.weightOverrides?Array.isArray(J.weightOverrides)?J.weightOverrides:[J.weightOverrides]:void 0,B=zJ($,V?{weightOverrides:V}:void 0,U);for(let H of B)await Q.upsertModelRanking(H);return{modelsRanked:B.length,updatedAt:new Date,status:"completed"}}),j}function NZ(j="/api/mcp/ranking"){return A({logger:D,path:j,serverName:"contractspec-ranking-mcp",ops:RJ(),resources:vJ(),prompts:OJ()})}function zZ(j){_j=j}export{zZ as setProviderRankingStore,NZ as createProviderRankingMcpHandler,PZ as createInternalMcpHandler,VZ as createDocsMcpHandler,AQ as createContractsMcpHandler,HQ as createCliMcpHandler};
@@ -1,3 +1,3 @@
1
1
  // @bun
2
- import{Logger as G,LogLevel as P}from"@contractspec/lib.logger";function _(){return"production"}var v=()=>new G({level:P.INFO,environment:_(),enableTracing:!0,enableTiming:!0,enableContext:!0,enableColors:!1}),y=v(),kj=new G({level:P.WARN,environment:_(),enableTracing:!0,enableTiming:!0,enableContext:!0,enableColors:!1}),Cj=new G({level:P.INFO,environment:_(),enableTracing:!0,enableTiming:!0,enableContext:!0,enableColors:!1});var O=["application/json","text/event-stream"];function S(j){return!j||j.includes("*/*")||j.includes("application/*")||O.some((w)=>j.includes(w))}function f(j){if(j.method!=="POST")return j;let w=j.headers.get("accept");if(!S(w))return j;let B=O.filter((F)=>!w?.includes(F));if(B.length===0)return j;let Y=new Headers(j.headers);return Y.set("accept",[w,...B].filter(Boolean).join(", ")),new Request(j,{headers:Y})}import{createMcpServer as m}from"@contractspec/lib.contracts-runtime-server-mcp/provider-mcp";import{PresentationRegistry as N}from"@contractspec/lib.contracts-spec/presentations";import{McpServer as n}from"@modelcontextprotocol/sdk/server/mcp.js";import{WebStandardStreamableHTTPServerTransport as l}from"@modelcontextprotocol/sdk/server/webStandardStreamableHttp.js";import{randomUUID as g}from"crypto";import{Elysia as u}from"elysia";var d={actor:"anonymous",decide:async()=>({effect:"allow"})};function b(j,w,B,Y){return new Response(JSON.stringify({jsonrpc:"2.0",error:{code:w,message:B,...Y?{data:Y}:{}},id:null}),{status:j,headers:{"content-type":"application/json"}})}function R({logger:j,serverName:w,ops:B,resources:Y,prompts:F,presentations:H,stateful:W}){let J=new n({name:w,version:"1.0.0"},{capabilities:{tools:{},resources:{},prompts:{},logging:{}}});j.info("Setting up MCP server..."),m(J,B,Y,F,{logger:j,toolCtx:()=>d,promptCtx:()=>({locale:"en"}),resourceCtx:()=>({locale:"en"}),presentations:new N(H)});let z=new l({sessionIdGenerator:W?()=>g():void 0,enableJsonResponse:!0});return J.connect(z).then(()=>({server:J,transport:z}))}async function D(j){await Promise.allSettled([j.transport.close(),j.server.close()])}function p(j){return j instanceof Error?j.stack??j.message:String(j)}function A({logger:j,path:w,serverName:B,ops:Y,resources:F,prompts:H,presentations:W,validateAuth:J,requiredAuthMethods:z}){j.info("Setting up MCP handler...",{requiredAuthMethods:z??[]});let T=process.env.CONTRACTSPEC_MCP_STATEFUL==="1",Z=new Map;async function I(Q){let U=await R({logger:j,path:w,serverName:B,ops:Y,resources:F,prompts:H,presentations:W,stateful:!1});try{return await U.transport.handleRequest(f(Q))}finally{await D(U)}}async function c(Q){let U=Z.get(Q);if(!U)return;Z.delete(Q),await D(U)}async function q(Q){let U=Q.headers.get("mcp-session-id"),k,x=!1;if(U){let K=Z.get(U);if(!K)return b(404,-32001,"Session not found");k=K}else k=await R({logger:j,path:w,serverName:B,ops:Y,resources:F,prompts:H,presentations:W,stateful:!0}),x=!0;try{let K=await k.transport.handleRequest(f(Q)),V=k.transport.sessionId;if(V&&!Z.has(V))Z.set(V,k);if(Q.method==="DELETE"&&V)await c(V);else if(!V&&x)await D(k);return K}catch(K){if(x)await D(k);throw K}}return new u({name:`mcp-${B}`}).all(w,async({request:Q})=>{try{if(J){let U=await J(Q);if(!U.valid)return b(401,-32002,"Authentication failed",U.reason)}if(T)return await q(Q);return await I(Q)}catch(U){return j.error("Error handling MCP request",{path:w,method:Q.method,error:p(U)}),b(500,-32000,"Internal error")}})}import{defineCommand as i,definePrompt as o,defineResourceTemplate as M,installOp as a,OperationSpecRegistry as t,PromptRegistry as r,ResourceRegistry as s}from"@contractspec/lib.contracts-spec";import{defineSchemaModel as E,ScalarTypeEnum as h}from"@contractspec/lib.schema";import{getExample as e,listExamples as jj,searchExamples as wj}from"@contractspec/module.examples";import C from"zod";var X=["internal","mcp"],L=["@contractspec"],$={docs:"/api/mcp/docs",cli:"/api/mcp/cli",internal:"/api/mcp/internal",graphql:"/graphql",health:"/health"};function Bj(){let j=new s;return j.register(M({meta:{uriTemplate:"examples://list{?q}",title:"ContractSpec examples registry",description:"List available examples (templates, integrations, knowledge, scripts). Optional query `q` filters results.",mimeType:"application/json",tags:["examples",...X]},input:C.object({q:C.string().optional()}),resolve:async({q:w})=>{let B=w?wj(w):[...jj()];return{uri:w?`examples://list?q=${encodeURIComponent(w)}`:"examples://list",mimeType:"application/json",data:JSON.stringify(B,null,2)}}})),j.register(M({meta:{uriTemplate:"examples://example/{id}",title:"ContractSpec example (by id)",description:"Fetch a single example manifest by id.",mimeType:"application/json",tags:["examples",...X]},input:C.object({id:C.string().min(1)}),resolve:async({id:w})=>{let B=e(w);if(!B)return{uri:`examples://example/${encodeURIComponent(w)}`,mimeType:"application/json",data:JSON.stringify({error:"not_found",id:w,message:`Unknown example id: ${w}`},null,2)};return{uri:`examples://example/${encodeURIComponent(w)}`,mimeType:"application/json",data:JSON.stringify(B,null,2)}}})),j.register(M({meta:{uriTemplate:"internal://endpoints",title:"ContractSpec MCP endpoints",description:"Endpoints for docs, CLI, internal MCP servers.",mimeType:"application/json",tags:X},input:C.object({}),resolve:async()=>({uri:"internal://endpoints",mimeType:"application/json",data:JSON.stringify($,null,2)})})),j.register(M({meta:{uriTemplate:"internal://playbook",title:"Internal MCP usage playbook",description:"How internal agents should discover docs, CLI usage, and endpoints.",mimeType:"text/markdown",tags:X},input:C.object({}),resolve:async()=>({uri:"internal://playbook",mimeType:"text/markdown",data:["# Internal MCP playbook","- Connect to docs MCP first for canonical specs.","- Use CLI MCP to surface quickstart/reference before running commands.","- Keep calls read-only unless explicitly approved.",`- Endpoints: ${$.docs}, ${$.cli}, ${$.internal}.`,"- For API work, GraphQL at /graphql; health at /health."].join(`
3
- `)})})),j}function Qj(){let j=new r;return j.register(o({meta:{key:"internal_bootstrap",version:"1.0.0",title:"Bootstrap internal ContractSpec agent",description:"Points agents to the correct MCP endpoints and guardrails.",tags:X,owners:L,stability:"beta"},args:[],input:C.object({}),render:async()=>[{type:"text",text:"Start with internal://endpoints to pick the right MCP. Use docs MCP for specifications and CLI MCP for commands. Keep actions read-only unless explicitly approved."},{type:"resource",uri:"internal://endpoints",title:"Endpoints"}]})),j}function Uj(){let j=new t,w=E({name:"InternalDescribeOutput",fields:{endpoints:{type:h.JSONObject(),isOptional:!1},notes:{type:h.String_unsecure(),isOptional:!1}}}),B=i({meta:{key:"internal_describe",version:"1.0.0",stability:"stable",owners:L,tags:X,description:"Return MCP endpoints and guidance for internal ContractSpec agents.",goal:"Speed up internal development with the correct MCP entrypoints.",context:"Used by internal MCP surface; read-only."},io:{input:E({name:"InternalDescribeInput",fields:{}}),output:w},policy:{auth:"anonymous"}});return a(j,B,async()=>({endpoints:$,notes:"Use docs MCP for canonical specs, CLI MCP for contractspec commands, and keep side-effecting actions gated behind human review."})),j}function fj(j="/api/mcp/internal"){return A({logger:y,path:j,serverName:"contractspec-internal-mcp",ops:Uj(),resources:Bj(),prompts:Qj()})}export{fj as createInternalMcpHandler};
2
+ var v=Object.defineProperty;var S=(j)=>j;function m(j,w){this[j]=S.bind(null,w)}var Fj=(j,w)=>{for(var B in w)v(j,B,{get:w[B],enumerable:!0,configurable:!0,set:m.bind(w,B)})};var Jj=(j,w)=>()=>(j&&(w=j(j=0)),w);import{Logger as G,LogLevel as P}from"@contractspec/lib.logger";function _(){return"production"}var N=()=>new G({level:P.INFO,environment:_(),enableTracing:!0,enableTiming:!0,enableContext:!0,enableColors:!1}),y=N(),Xj=new G({level:P.WARN,environment:_(),enableTracing:!0,enableTiming:!0,enableContext:!0,enableColors:!1}),Zj=new G({level:P.INFO,environment:_(),enableTracing:!0,enableTiming:!0,enableContext:!0,enableColors:!1});var O=["application/json","text/event-stream"];function n(j){return!j||j.includes("*/*")||j.includes("application/*")||O.some((w)=>j.includes(w))}function f(j){if(j.method!=="POST")return j;let w=j.headers.get("accept");if(!n(w))return j;let B=O.filter((F)=>!w?.includes(F));if(B.length===0)return j;let Y=new Headers(j.headers);return Y.set("accept",[w,...B].filter(Boolean).join(", ")),new Request(j,{headers:Y})}import{createMcpServer as l}from"@contractspec/lib.contracts-runtime-server-mcp/provider-mcp";import{PresentationRegistry as g}from"@contractspec/lib.contracts-spec/presentations";import{McpServer as u}from"@modelcontextprotocol/sdk/server/mcp.js";import{WebStandardStreamableHTTPServerTransport as d}from"@modelcontextprotocol/sdk/server/webStandardStreamableHttp.js";import{randomUUID as p}from"crypto";import{Elysia as i}from"elysia";var o={actor:"anonymous",decide:async()=>({effect:"allow"})};function b(j,w,B,Y){return new Response(JSON.stringify({jsonrpc:"2.0",error:{code:w,message:B,...Y?{data:Y}:{}},id:null}),{status:j,headers:{"content-type":"application/json"}})}function R({logger:j,serverName:w,ops:B,resources:Y,prompts:F,presentations:H,stateful:W}){let J=new u({name:w,version:"1.0.0"},{capabilities:{tools:{},resources:{},prompts:{},logging:{}}});j.info("Setting up MCP server..."),l(J,B,Y,F,{logger:j,toolCtx:()=>o,promptCtx:()=>({locale:"en"}),resourceCtx:()=>({locale:"en"}),presentations:new g(H)});let z=new d({sessionIdGenerator:W?()=>p():void 0,enableJsonResponse:!0});return J.connect(z).then(()=>({server:J,transport:z}))}async function D(j){await Promise.allSettled([j.transport.close(),j.server.close()])}function a(j){return j instanceof Error?j.stack??j.message:String(j)}function A({logger:j,path:w,serverName:B,ops:Y,resources:F,prompts:H,presentations:W,validateAuth:J,requiredAuthMethods:z}){j.info("Setting up MCP handler...",{requiredAuthMethods:z??[]});let T=process.env.CONTRACTSPEC_MCP_STATEFUL==="1",Z=new Map;async function I(Q){let U=await R({logger:j,path:w,serverName:B,ops:Y,resources:F,prompts:H,presentations:W,stateful:!1});try{return await U.transport.handleRequest(f(Q))}finally{await D(U)}}async function c(Q){let U=Z.get(Q);if(!U)return;Z.delete(Q),await D(U)}async function q(Q){let U=Q.headers.get("mcp-session-id"),k,x=!1;if(U){let K=Z.get(U);if(!K)return b(404,-32001,"Session not found");k=K}else k=await R({logger:j,path:w,serverName:B,ops:Y,resources:F,prompts:H,presentations:W,stateful:!0}),x=!0;try{let K=await k.transport.handleRequest(f(Q)),V=k.transport.sessionId;if(V&&!Z.has(V))Z.set(V,k);if(Q.method==="DELETE"&&V)await c(V);else if(!V&&x)await D(k);return K}catch(K){if(x)await D(k);throw K}}return new i({name:`mcp-${B}`}).all(w,async({request:Q})=>{try{if(J){let U=await J(Q);if(!U.valid)return b(401,-32002,"Authentication failed",U.reason)}if(T)return await q(Q);return await I(Q)}catch(U){return j.error("Error handling MCP request",{path:w,method:Q.method,error:a(U)}),b(500,-32000,"Internal error")}})}import{defineCommand as t,definePrompt as r,defineResourceTemplate as M,installOp as s,OperationSpecRegistry as e,PromptRegistry as jj,ResourceRegistry as wj}from"@contractspec/lib.contracts-spec";import{defineSchemaModel as E,ScalarTypeEnum as h}from"@contractspec/lib.schema";import{getExample as Bj,listExamples as Qj,searchExamples as Uj}from"@contractspec/module.examples";import C from"zod";var X=["internal","mcp"],L=["@contractspec"],$={docs:"/api/mcp/docs",cli:"/api/mcp/cli",internal:"/api/mcp/internal",graphql:"/graphql",health:"/health"};function Yj(){let j=new wj;return j.register(M({meta:{uriTemplate:"examples://list{?q}",title:"ContractSpec examples registry",description:"List available examples (templates, integrations, knowledge, scripts). Optional query `q` filters results.",mimeType:"application/json",tags:["examples",...X]},input:C.object({q:C.string().optional()}),resolve:async({q:w})=>{let B=w?Uj(w):[...Qj()];return{uri:w?`examples://list?q=${encodeURIComponent(w)}`:"examples://list",mimeType:"application/json",data:JSON.stringify(B,null,2)}}})),j.register(M({meta:{uriTemplate:"examples://example/{id}",title:"ContractSpec example (by id)",description:"Fetch a single example manifest by id.",mimeType:"application/json",tags:["examples",...X]},input:C.object({id:C.string().min(1)}),resolve:async({id:w})=>{let B=Bj(w);if(!B)return{uri:`examples://example/${encodeURIComponent(w)}`,mimeType:"application/json",data:JSON.stringify({error:"not_found",id:w,message:`Unknown example id: ${w}`},null,2)};return{uri:`examples://example/${encodeURIComponent(w)}`,mimeType:"application/json",data:JSON.stringify(B,null,2)}}})),j.register(M({meta:{uriTemplate:"internal://endpoints",title:"ContractSpec MCP endpoints",description:"Endpoints for docs, CLI, internal MCP servers.",mimeType:"application/json",tags:X},input:C.object({}),resolve:async()=>({uri:"internal://endpoints",mimeType:"application/json",data:JSON.stringify($,null,2)})})),j.register(M({meta:{uriTemplate:"internal://playbook",title:"Internal MCP usage playbook",description:"How internal agents should discover docs, CLI usage, and endpoints.",mimeType:"text/markdown",tags:X},input:C.object({}),resolve:async()=>({uri:"internal://playbook",mimeType:"text/markdown",data:["# Internal MCP playbook","- Connect to docs MCP first for canonical specs.","- Use CLI MCP to surface quickstart/reference before running commands.","- Keep calls read-only unless explicitly approved.",`- Endpoints: ${$.docs}, ${$.cli}, ${$.internal}.`,"- For API work, GraphQL at /graphql; health at /health."].join(`
3
+ `)})})),j}function kj(){let j=new jj;return j.register(r({meta:{key:"internal_bootstrap",version:"1.0.0",title:"Bootstrap internal ContractSpec agent",description:"Points agents to the correct MCP endpoints and guardrails.",tags:X,owners:L,stability:"beta"},args:[],input:C.object({}),render:async()=>[{type:"text",text:"Start with internal://endpoints to pick the right MCP. Use docs MCP for specifications and CLI MCP for commands. Keep actions read-only unless explicitly approved."},{type:"resource",uri:"internal://endpoints",title:"Endpoints"}]})),j}function Cj(){let j=new e,w=E({name:"InternalDescribeOutput",fields:{endpoints:{type:h.JSONObject(),isOptional:!1},notes:{type:h.String_unsecure(),isOptional:!1}}}),B=t({meta:{key:"internal_describe",version:"1.0.0",stability:"stable",owners:L,tags:X,description:"Return MCP endpoints and guidance for internal ContractSpec agents.",goal:"Speed up internal development with the correct MCP entrypoints.",context:"Used by internal MCP surface; read-only."},io:{input:E({name:"InternalDescribeInput",fields:{}}),output:w},policy:{auth:"anonymous"}});return s(j,B,async()=>({endpoints:$,notes:"Use docs MCP for canonical specs, CLI MCP for contractspec commands, and keep side-effecting actions gated behind human review."})),j}function Ej(j="/api/mcp/internal"){return A({logger:y,path:j,serverName:"contractspec-internal-mcp",ops:Cj(),resources:Yj(),prompts:kj()})}export{Ej as createInternalMcpHandler};
@@ -1,2 +1,2 @@
1
1
  // @bun
2
- var o=["application/json","text/event-stream"];function c(n){return!n||n.includes("*/*")||n.includes("application/*")||o.some((e)=>n.includes(e))}function l(n){if(n.method!=="POST")return n;let e=n.headers.get("accept");if(!c(e))return n;let t=o.filter((s)=>!e?.includes(s));if(t.length===0)return n;let i=new Headers(n.headers);return i.set("accept",[e,...t].filter(Boolean).join(", ")),new Request(n,{headers:i})}export{l as normalizeMcpRequest};
2
+ var c=Object.defineProperty;var l=(n)=>n;function r(n,e){this[n]=l.bind(null,e)}var u=(n,e)=>{for(var t in e)c(n,t,{get:e[t],enumerable:!0,configurable:!0,set:r.bind(e,t)})};var d=(n,e)=>()=>(n&&(e=n(n=0)),e);var o=["application/json","text/event-stream"];function a(n){return!n||n.includes("*/*")||n.includes("application/*")||o.some((e)=>n.includes(e))}function f(n){if(n.method!=="POST")return n;let e=n.headers.get("accept");if(!a(e))return n;let t=o.filter((s)=>!e?.includes(s));if(t.length===0)return n;let i=new Headers(n.headers);return i.set("accept",[e,...t].filter(Boolean).join(", ")),new Request(n,{headers:i})}export{f as normalizeMcpRequest};
@@ -1,2 +1,2 @@
1
1
  // @bun
2
- import{Logger as M,LogLevel as k}from"@contractspec/lib.logger";function L(){return"production"}var c=()=>new M({level:k.INFO,environment:L(),enableTracing:!0,enableTiming:!0,enableContext:!0,enableColors:!1}),q=c(),Bj=new M({level:k.WARN,environment:L(),enableTracing:!0,enableTiming:!0,enableContext:!0,enableColors:!1}),Ej=new M({level:k.INFO,environment:L(),enableTracing:!0,enableTiming:!0,enableContext:!0,enableColors:!1});var N=["application/json","text/event-stream"];function h(j){return!j||j.includes("*/*")||j.includes("application/*")||N.some((U)=>j.includes(U))}function z(j){if(j.method!=="POST")return j;let U=j.headers.get("accept");if(!h(U))return j;let Q=N.filter((J)=>!U?.includes(J));if(Q.length===0)return j;let Y=new Headers(j.headers);return Y.set("accept",[U,...Q].filter(Boolean).join(", ")),new Request(j,{headers:Y})}import{createMcpServer as m}from"@contractspec/lib.contracts-runtime-server-mcp/provider-mcp";import{PresentationRegistry as u}from"@contractspec/lib.contracts-spec/presentations";import{McpServer as d}from"@modelcontextprotocol/sdk/server/mcp.js";import{WebStandardStreamableHTTPServerTransport as l}from"@modelcontextprotocol/sdk/server/webStandardStreamableHttp.js";import{randomUUID as p}from"crypto";import{Elysia as g}from"elysia";var n={actor:"anonymous",decide:async()=>({effect:"allow"})};function y(j,U,Q,Y){return new Response(JSON.stringify({jsonrpc:"2.0",error:{code:U,message:Q,...Y?{data:Y}:{}},id:null}),{status:j,headers:{"content-type":"application/json"}})}function f({logger:j,serverName:U,ops:Q,resources:Y,prompts:J,presentations:D,stateful:B}){let x=new d({name:U,version:"1.0.0"},{capabilities:{tools:{},resources:{},prompts:{},logging:{}}});j.info("Setting up MCP server..."),m(x,Q,Y,J,{logger:j,toolCtx:()=>n,promptCtx:()=>({locale:"en"}),resourceCtx:()=>({locale:"en"}),presentations:new u(D)});let E=new l({sessionIdGenerator:B?()=>p():void 0,enableJsonResponse:!0});return x.connect(E).then(()=>({server:x,transport:E}))}async function K(j){await Promise.allSettled([j.transport.close(),j.server.close()])}function i(j){return j instanceof Error?j.stack??j.message:String(j)}function I({logger:j,path:U,serverName:Q,ops:Y,resources:J,prompts:D,presentations:B,validateAuth:x,requiredAuthMethods:E}){j.info("Setting up MCP handler...",{requiredAuthMethods:E??[]});let _=process.env.CONTRACTSPEC_MCP_STATEFUL==="1",V=new Map;async function R(X){let Z=await f({logger:j,path:U,serverName:Q,ops:Y,resources:J,prompts:D,presentations:B,stateful:!1});try{return await Z.transport.handleRequest(z(X))}finally{await K(Z)}}async function v(X){let Z=V.get(X);if(!Z)return;V.delete(X),await K(Z)}async function S(X){let Z=X.headers.get("mcp-session-id"),H,T=!1;if(Z){let P=V.get(Z);if(!P)return y(404,-32001,"Session not found");H=P}else H=await f({logger:j,path:U,serverName:Q,ops:Y,resources:J,prompts:D,presentations:B,stateful:!0}),T=!0;try{let P=await H.transport.handleRequest(z(X)),W=H.transport.sessionId;if(W&&!V.has(W))V.set(W,H);if(X.method==="DELETE"&&W)await v(W);else if(!W&&T)await K(H);return P}catch(P){if(T)await K(H);throw P}}return new g({name:`mcp-${Q}`}).all(U,async({request:X})=>{try{if(x){let Z=await x(X);if(!Z.valid)return y(401,-32002,"Authentication failed",Z.reason)}if(_)return await S(X);return await R(X)}catch(Z){return j.error("Error handling MCP request",{path:U,method:X.method,error:i(Z)}),y(500,-32000,"Internal error")}})}import{getModelInfo as a}from"@contractspec/lib.ai-providers/models";import{definePrompt as o,defineResourceTemplate as b,installOp as A,OperationSpecRegistry as t,PromptRegistry as s,ResourceRegistry as r}from"@contractspec/lib.contracts-spec";import{BenchmarkIngestCommand as e,BenchmarkRunCustomCommand as jj,RankingRefreshCommand as Qj}from"@contractspec/lib.contracts-spec/provider-ranking";import{InMemoryProviderRankingStore as Uj}from"@contractspec/lib.provider-ranking/in-memory-store";import{createDefaultIngesterRegistry as Yj}from"@contractspec/lib.provider-ranking/ingesters";import{computeModelRankings as Dj,normalizeBenchmarkResults as Jj}from"@contractspec/lib.provider-ranking/scoring";import $ from"zod";var F=$.enum(["rest","mcp","webhook","sdk"]).optional(),G=$.enum(["api-key","oauth2","bearer","header","basic","webhook-signing","service-account"]).optional(),w=["ranking","mcp","ai"],Vj=["platform.ai"],O=null;function C(){if(!O)O=new Uj;return O}function Xj(){let j=new r;return j.register(b({meta:{uriTemplate:"ranking://leaderboard",title:"AI Model Leaderboard",description:"Current ranked list of AI models by composite score. Supports optional transport and authMethod query filters.",mimeType:"application/json",tags:w},input:$.object({transport:F,authMethod:G}),resolve:async({transport:U,authMethod:Q})=>{let J=await C().listModelRankings({limit:100,requiredTransport:U,requiredAuthMethod:Q});return{uri:"ranking://leaderboard",mimeType:"application/json",data:JSON.stringify(J,null,2)}}})),j.register(b({meta:{uriTemplate:"ranking://leaderboard/{dimension}",title:"AI Model Leaderboard by Dimension",description:"Ranked list of AI models filtered by a specific dimension. Supports optional transport and authMethod query filters.",mimeType:"application/json",tags:w},input:$.object({dimension:$.string(),transport:F,authMethod:G}),resolve:async({dimension:U,transport:Q,authMethod:Y})=>{let D=await C().listModelRankings({dimension:U,limit:100,requiredTransport:Q,requiredAuthMethod:Y});return{uri:`ranking://leaderboard/${encodeURIComponent(U)}`,mimeType:"application/json",data:JSON.stringify(D,null,2)}}})),j.register(b({meta:{uriTemplate:"ranking://model/{modelId}",title:"AI Model Profile",description:"Detailed profile for a specific AI model including scores and benchmarks.",mimeType:"application/json",tags:w},input:$.object({modelId:$.string()}),resolve:async({modelId:U})=>{let Y=await C().getModelProfile(U);if(!Y)return{uri:`ranking://model/${encodeURIComponent(U)}`,mimeType:"application/json",data:JSON.stringify({error:"not_found",modelId:U})};let J=Y.costPerMillion==null?(()=>{let D=a(Y.modelId);return D?.costPerMillion?{...Y,costPerMillion:D.costPerMillion,displayName:D.name,contextWindow:D.contextWindow,capabilities:[...D.capabilities.vision?["vision"]:[],...D.capabilities.tools?["tools"]:[],...D.capabilities.reasoning?["reasoning"]:[],...D.capabilities.streaming?["streaming"]:[]]}:Y})():Y;return{uri:`ranking://model/${encodeURIComponent(U)}`,mimeType:"application/json",data:JSON.stringify(J,null,2)}}})),j.register(b({meta:{uriTemplate:"ranking://results",title:"Benchmark Results",description:"List of raw benchmark results from all ingested sources.",mimeType:"application/json",tags:w},input:$.object({}),resolve:async()=>{let Q=await C().listBenchmarkResults({limit:200});return{uri:"ranking://results",mimeType:"application/json",data:JSON.stringify(Q,null,2)}}})),j}function Zj(){let j=new s;return j.register(o({meta:{key:"ranking.advisor",version:"1.0.0",title:"AI Model Advisor",description:"Which AI model is best for a given task? Uses the leaderboard to recommend.",tags:w,stability:"beta",owners:Vj},args:[{name:"task",description:"The task or use case to recommend a model for.",required:!0,schema:$.string()},{name:"priority",description:"Priority dimension (coding, reasoning, cost, latency, etc.).",required:!1,schema:$.string().optional()},{name:"transport",description:"Required transport type (rest, mcp, webhook, sdk).",required:!1,schema:F},{name:"authMethod",description:"Required auth method (api-key, oauth2, bearer, etc.).",required:!1,schema:G}],input:$.object({task:$.string(),priority:$.string().optional(),transport:F,authMethod:G}),render:async({task:U,priority:Q,transport:Y,authMethod:J})=>{let D=[];if(Q)D.push(`Prioritize: ${Q}.`);if(Y)D.push(`Required transport: ${Y}.`);if(J)D.push(`Required auth: ${J}.`);return[{type:"text",text:`Recommend the best AI model for: "${U}".${D.length?` ${D.join(" ")}`:""} Use the leaderboard data to justify your recommendation.`},{type:"resource",uri:Q?`ranking://leaderboard/${Q}`:"ranking://leaderboard",title:"Leaderboard"}]}})),j}function $j(){let j=new t,U=Yj();return A(j,e,async(Q)=>{let Y=C(),J=Q.source,D=U.get(J);if(!D)throw Error(`No ingester registered for source: ${J}`);let B=await D.ingest({sourceUrl:Q.sourceUrl,dimensions:Q.dimensions}),x=Jj(B);for(let E of x)await Y.upsertBenchmarkResult(E);return{ingestionId:`ingest-${J}-${Date.now()}`,source:J,resultsCount:x.length,status:"completed",ingestedAt:new Date}}),A(j,jj,async(Q)=>{return{runId:`custom-${Date.now()}`,evalSuiteKey:Q.evalSuiteKey,modelId:Q.modelId,status:"started",startedAt:new Date}}),A(j,Qj,async(Q)=>{let Y=C(),J=[],D=0,B=500;while(!0){let V=await Y.listBenchmarkResults({limit:B,offset:D});if(J.push(...V.results),J.length>=V.total||V.results.length<B)break;D+=B}let x=new Map((await Y.listModelRankings({limit:1e4})).rankings.map((V)=>[V.modelId,V])),E=Q.weightOverrides?Array.isArray(Q.weightOverrides)?Q.weightOverrides:[Q.weightOverrides]:void 0,_=Dj(J,E?{weightOverrides:E}:void 0,x);for(let V of _)await Y.upsertModelRanking(V);return{modelsRanked:_.length,updatedAt:new Date,status:"completed"}}),j}function Nj(j="/api/mcp/ranking"){return I({logger:q,path:j,serverName:"contractspec-ranking-mcp",ops:$j(),resources:Xj(),prompts:Zj()})}function fj(j){O=j}export{fj as setProviderRankingStore,Nj as createProviderRankingMcpHandler};
2
+ var c=Object.defineProperty;var h=(j)=>j;function m(j,Q){this[j]=h.bind(null,Q)}var Hj=(j,Q)=>{for(var U in Q)c(j,U,{get:Q[U],enumerable:!0,configurable:!0,set:m.bind(Q,U)})};var Pj=(j,Q)=>()=>(j&&(Q=j(j=0)),Q);import{Logger as M,LogLevel as k}from"@contractspec/lib.logger";function L(){return"production"}var u=()=>new M({level:k.INFO,environment:L(),enableTracing:!0,enableTiming:!0,enableContext:!0,enableColors:!1}),q=u(),wj=new M({level:k.WARN,environment:L(),enableTracing:!0,enableTiming:!0,enableContext:!0,enableColors:!1}),_j=new M({level:k.INFO,environment:L(),enableTracing:!0,enableTiming:!0,enableContext:!0,enableColors:!1});var N=["application/json","text/event-stream"];function d(j){return!j||j.includes("*/*")||j.includes("application/*")||N.some((Q)=>j.includes(Q))}function z(j){if(j.method!=="POST")return j;let Q=j.headers.get("accept");if(!d(Q))return j;let U=N.filter((J)=>!Q?.includes(J));if(U.length===0)return j;let Y=new Headers(j.headers);return Y.set("accept",[Q,...U].filter(Boolean).join(", ")),new Request(j,{headers:Y})}import{createMcpServer as l}from"@contractspec/lib.contracts-runtime-server-mcp/provider-mcp";import{PresentationRegistry as p}from"@contractspec/lib.contracts-spec/presentations";import{McpServer as g}from"@modelcontextprotocol/sdk/server/mcp.js";import{WebStandardStreamableHTTPServerTransport as n}from"@modelcontextprotocol/sdk/server/webStandardStreamableHttp.js";import{randomUUID as i}from"crypto";import{Elysia as a}from"elysia";var o={actor:"anonymous",decide:async()=>({effect:"allow"})};function y(j,Q,U,Y){return new Response(JSON.stringify({jsonrpc:"2.0",error:{code:Q,message:U,...Y?{data:Y}:{}},id:null}),{status:j,headers:{"content-type":"application/json"}})}function f({logger:j,serverName:Q,ops:U,resources:Y,prompts:J,presentations:D,stateful:B}){let x=new g({name:Q,version:"1.0.0"},{capabilities:{tools:{},resources:{},prompts:{},logging:{}}});j.info("Setting up MCP server..."),l(x,U,Y,J,{logger:j,toolCtx:()=>o,promptCtx:()=>({locale:"en"}),resourceCtx:()=>({locale:"en"}),presentations:new p(D)});let E=new n({sessionIdGenerator:B?()=>i():void 0,enableJsonResponse:!0});return x.connect(E).then(()=>({server:x,transport:E}))}async function K(j){await Promise.allSettled([j.transport.close(),j.server.close()])}function t(j){return j instanceof Error?j.stack??j.message:String(j)}function I({logger:j,path:Q,serverName:U,ops:Y,resources:J,prompts:D,presentations:B,validateAuth:x,requiredAuthMethods:E}){j.info("Setting up MCP handler...",{requiredAuthMethods:E??[]});let _=process.env.CONTRACTSPEC_MCP_STATEFUL==="1",V=new Map;async function R(X){let Z=await f({logger:j,path:Q,serverName:U,ops:Y,resources:J,prompts:D,presentations:B,stateful:!1});try{return await Z.transport.handleRequest(z(X))}finally{await K(Z)}}async function v(X){let Z=V.get(X);if(!Z)return;V.delete(X),await K(Z)}async function S(X){let Z=X.headers.get("mcp-session-id"),H,T=!1;if(Z){let P=V.get(Z);if(!P)return y(404,-32001,"Session not found");H=P}else H=await f({logger:j,path:Q,serverName:U,ops:Y,resources:J,prompts:D,presentations:B,stateful:!0}),T=!0;try{let P=await H.transport.handleRequest(z(X)),W=H.transport.sessionId;if(W&&!V.has(W))V.set(W,H);if(X.method==="DELETE"&&W)await v(W);else if(!W&&T)await K(H);return P}catch(P){if(T)await K(H);throw P}}return new a({name:`mcp-${U}`}).all(Q,async({request:X})=>{try{if(x){let Z=await x(X);if(!Z.valid)return y(401,-32002,"Authentication failed",Z.reason)}if(_)return await S(X);return await R(X)}catch(Z){return j.error("Error handling MCP request",{path:Q,method:X.method,error:t(Z)}),y(500,-32000,"Internal error")}})}import{getModelInfo as s}from"@contractspec/lib.ai-providers/models";import{definePrompt as r,defineResourceTemplate as b,installOp as A,OperationSpecRegistry as e,PromptRegistry as jj,ResourceRegistry as Qj}from"@contractspec/lib.contracts-spec";import{BenchmarkIngestCommand as Uj,BenchmarkRunCustomCommand as Yj,RankingRefreshCommand as Dj}from"@contractspec/lib.contracts-spec/provider-ranking";import{InMemoryProviderRankingStore as Jj}from"@contractspec/lib.provider-ranking/in-memory-store";import{createDefaultIngesterRegistry as Vj}from"@contractspec/lib.provider-ranking/ingesters";import{computeModelRankings as Xj,normalizeBenchmarkResults as Zj}from"@contractspec/lib.provider-ranking/scoring";import $ from"zod";var F=$.enum(["rest","mcp","webhook","sdk"]).optional(),G=$.enum(["api-key","oauth2","bearer","header","basic","webhook-signing","service-account"]).optional(),w=["ranking","mcp","ai"],$j=["platform.ai"],O=null;function C(){if(!O)O=new Jj;return O}function xj(){let j=new Qj;return j.register(b({meta:{uriTemplate:"ranking://leaderboard",title:"AI Model Leaderboard",description:"Current ranked list of AI models by composite score. Supports optional transport and authMethod query filters.",mimeType:"application/json",tags:w},input:$.object({transport:F,authMethod:G}),resolve:async({transport:Q,authMethod:U})=>{let J=await C().listModelRankings({limit:100,requiredTransport:Q,requiredAuthMethod:U});return{uri:"ranking://leaderboard",mimeType:"application/json",data:JSON.stringify(J,null,2)}}})),j.register(b({meta:{uriTemplate:"ranking://leaderboard/{dimension}",title:"AI Model Leaderboard by Dimension",description:"Ranked list of AI models filtered by a specific dimension. Supports optional transport and authMethod query filters.",mimeType:"application/json",tags:w},input:$.object({dimension:$.string(),transport:F,authMethod:G}),resolve:async({dimension:Q,transport:U,authMethod:Y})=>{let D=await C().listModelRankings({dimension:Q,limit:100,requiredTransport:U,requiredAuthMethod:Y});return{uri:`ranking://leaderboard/${encodeURIComponent(Q)}`,mimeType:"application/json",data:JSON.stringify(D,null,2)}}})),j.register(b({meta:{uriTemplate:"ranking://model/{modelId}",title:"AI Model Profile",description:"Detailed profile for a specific AI model including scores and benchmarks.",mimeType:"application/json",tags:w},input:$.object({modelId:$.string()}),resolve:async({modelId:Q})=>{let Y=await C().getModelProfile(Q);if(!Y)return{uri:`ranking://model/${encodeURIComponent(Q)}`,mimeType:"application/json",data:JSON.stringify({error:"not_found",modelId:Q})};let J=Y.costPerMillion==null?(()=>{let D=s(Y.modelId);return D?.costPerMillion?{...Y,costPerMillion:D.costPerMillion,displayName:D.name,contextWindow:D.contextWindow,capabilities:[...D.capabilities.vision?["vision"]:[],...D.capabilities.tools?["tools"]:[],...D.capabilities.reasoning?["reasoning"]:[],...D.capabilities.streaming?["streaming"]:[]]}:Y})():Y;return{uri:`ranking://model/${encodeURIComponent(Q)}`,mimeType:"application/json",data:JSON.stringify(J,null,2)}}})),j.register(b({meta:{uriTemplate:"ranking://results",title:"Benchmark Results",description:"List of raw benchmark results from all ingested sources.",mimeType:"application/json",tags:w},input:$.object({}),resolve:async()=>{let U=await C().listBenchmarkResults({limit:200});return{uri:"ranking://results",mimeType:"application/json",data:JSON.stringify(U,null,2)}}})),j}function Bj(){let j=new jj;return j.register(r({meta:{key:"ranking.advisor",version:"1.0.0",title:"AI Model Advisor",description:"Which AI model is best for a given task? Uses the leaderboard to recommend.",tags:w,stability:"beta",owners:$j},args:[{name:"task",description:"The task or use case to recommend a model for.",required:!0,schema:$.string()},{name:"priority",description:"Priority dimension (coding, reasoning, cost, latency, etc.).",required:!1,schema:$.string().optional()},{name:"transport",description:"Required transport type (rest, mcp, webhook, sdk).",required:!1,schema:F},{name:"authMethod",description:"Required auth method (api-key, oauth2, bearer, etc.).",required:!1,schema:G}],input:$.object({task:$.string(),priority:$.string().optional(),transport:F,authMethod:G}),render:async({task:Q,priority:U,transport:Y,authMethod:J})=>{let D=[];if(U)D.push(`Prioritize: ${U}.`);if(Y)D.push(`Required transport: ${Y}.`);if(J)D.push(`Required auth: ${J}.`);return[{type:"text",text:`Recommend the best AI model for: "${Q}".${D.length?` ${D.join(" ")}`:""} Use the leaderboard data to justify your recommendation.`},{type:"resource",uri:U?`ranking://leaderboard/${U}`:"ranking://leaderboard",title:"Leaderboard"}]}})),j}function Ej(){let j=new e,Q=Vj();return A(j,Uj,async(U)=>{let Y=C(),J=U.source,D=Q.get(J);if(!D)throw Error(`No ingester registered for source: ${J}`);let B=await D.ingest({sourceUrl:U.sourceUrl,dimensions:U.dimensions}),x=Zj(B);for(let E of x)await Y.upsertBenchmarkResult(E);return{ingestionId:`ingest-${J}-${Date.now()}`,source:J,resultsCount:x.length,status:"completed",ingestedAt:new Date}}),A(j,Yj,async(U)=>{return{runId:`custom-${Date.now()}`,evalSuiteKey:U.evalSuiteKey,modelId:U.modelId,status:"started",startedAt:new Date}}),A(j,Dj,async(U)=>{let Y=C(),J=[],D=0,B=500;while(!0){let V=await Y.listBenchmarkResults({limit:B,offset:D});if(J.push(...V.results),J.length>=V.total||V.results.length<B)break;D+=B}let x=new Map((await Y.listModelRankings({limit:1e4})).rankings.map((V)=>[V.modelId,V])),E=U.weightOverrides?Array.isArray(U.weightOverrides)?U.weightOverrides:[U.weightOverrides]:void 0,_=Xj(J,E?{weightOverrides:E}:void 0,x);for(let V of _)await Y.upsertModelRanking(V);return{modelsRanked:_.length,updatedAt:new Date,status:"completed"}}),j}function cj(j="/api/mcp/ranking"){return I({logger:q,path:j,serverName:"contractspec-ranking-mcp",ops:Ej(),resources:xj(),prompts:Bj()})}function hj(j){O=j}export{hj as setProviderRankingStore,cj as createProviderRankingMcpHandler};
@@ -1,124 +1,32 @@
1
- /**
2
- * Library bundle spec for workspace shell (sandbox, docs, templates).
3
- * Uses @contractspec/lib.surface-runtime for adaptive, preference-driven layouts.
4
- */
5
1
  export declare const LibraryBundle: {
6
2
  readonly meta: {
7
- readonly key: "library.workspace";
8
- readonly version: "0.1.0";
9
- readonly title: "Library Workspace";
10
- readonly description: "Workspace shell for docs, templates, sandbox, and feature discovery";
11
- readonly owners: ["team-platform"];
12
- readonly tags: ["library", "workspace", "docs", "sandbox", "templates"];
13
- readonly stability: "experimental";
3
+ readonly key: "bundles.library";
4
+ readonly version: "1.0.0";
5
+ readonly title: "Library";
6
+ readonly description: "ContractSpec package declaration for @contractspec/bundle.library.";
14
7
  };
15
8
  readonly routes: [{
16
- readonly routeId: "sandbox";
17
- readonly path: "/sandbox";
18
- readonly defaultSurface: "workspace-shell";
19
- }, {
20
- readonly routeId: "docs";
21
- readonly path: "/docs";
22
- readonly defaultSurface: "workspace-shell";
23
- }, {
24
- readonly routeId: "docs-slug";
25
- readonly path: "/docs/:slug";
26
- readonly defaultSurface: "workspace-shell";
27
- }, {
28
- readonly routeId: "studio";
29
- readonly path: "/studio/:projectSlug";
30
- readonly defaultSurface: "workspace-shell";
9
+ readonly routeId: "default";
10
+ readonly path: "/";
11
+ readonly defaultSurface: "main";
31
12
  }];
32
13
  readonly surfaces: {
33
- readonly 'workspace-shell': {
34
- readonly surfaceId: "workspace-shell";
14
+ readonly main: {
15
+ readonly surfaceId: "main";
35
16
  readonly kind: "workbench";
36
- readonly title: "Workspace Shell";
37
- readonly slots: [{
38
- readonly slotId: "header";
39
- readonly role: "header";
40
- readonly accepts: ["action-bar"];
41
- readonly cardinality: "many";
42
- }, {
43
- readonly slotId: "sidebar";
44
- readonly role: "secondary";
45
- readonly accepts: ["entity-section", "custom-widget"];
46
- readonly cardinality: "one";
47
- }, {
48
- readonly slotId: "primary";
49
- readonly role: "primary";
50
- readonly accepts: ["entity-section", "rich-doc", "data-view", "form", "custom-widget"];
51
- readonly cardinality: "many";
52
- readonly mutableByAi: true;
53
- readonly mutableByUser: true;
54
- }, {
55
- readonly slotId: "assistant";
56
- readonly role: "assistant";
57
- readonly accepts: ["assistant-panel", "chat-thread"];
58
- readonly cardinality: "many";
59
- readonly mutableByAi: true;
60
- readonly mutableByUser: true;
61
- }];
62
- readonly layouts: [{
63
- readonly layoutId: "sidebar-main";
64
- readonly title: "Sidebar + Main";
65
- readonly root: {
66
- readonly type: "panel-group";
67
- readonly direction: "horizontal";
68
- readonly persistKey: "library.workspace.sidebar-main";
69
- readonly children: [{
70
- readonly type: "slot";
71
- readonly slotId: "sidebar";
72
- }, {
73
- readonly type: "panel-group";
74
- readonly direction: "vertical";
75
- readonly persistKey: "library.workspace.content";
76
- readonly children: [{
77
- readonly type: "slot";
78
- readonly slotId: "header";
79
- }, {
80
- readonly type: "slot";
81
- readonly slotId: "primary";
82
- }];
83
- }];
84
- };
85
- }, {
86
- readonly layoutId: "sidebar-main-assistant";
87
- readonly title: "Sidebar + Main + Assistant";
88
- readonly root: {
89
- readonly type: "panel-group";
90
- readonly direction: "horizontal";
91
- readonly persistKey: "library.workspace.sidebar-main-assistant";
92
- readonly children: [{
93
- readonly type: "slot";
94
- readonly slotId: "sidebar";
95
- }, {
96
- readonly type: "panel-group";
97
- readonly direction: "vertical";
98
- readonly persistKey: "library.workspace.content";
99
- readonly children: [{
100
- readonly type: "slot";
101
- readonly slotId: "header";
102
- }, {
103
- readonly type: "slot";
104
- readonly slotId: "primary";
105
- }];
106
- }, {
107
- readonly type: "slot";
108
- readonly slotId: "assistant";
109
- }];
110
- };
111
- }];
17
+ readonly title: "Library";
18
+ readonly slots: [];
19
+ readonly layouts: [];
112
20
  readonly data: [];
113
21
  readonly verification: {
114
22
  readonly dimensions: {
115
- readonly guidance: "Can reveal walkthrough notes, field help, and contextual hints.";
116
- readonly density: "Can select compact, balanced, or dense layouts for docs and templates.";
117
- readonly dataDepth: "Controls content depth, pagination size, and inline expansion.";
118
- readonly control: "Shows advanced commands and raw config only when allowed.";
119
- readonly media: "Supports text-first docs, visual templates, and hybrid modes.";
120
- readonly pace: "Maps to motion tokens and confirmation behavior.";
121
- readonly narrative: "Can order summary before or after detail sections.";
23
+ readonly guidance: "Scaffolded guidance profile for Library.";
24
+ readonly density: "Scaffolded density profile for Library.";
25
+ readonly dataDepth: "Scaffolded data-depth profile for Library.";
26
+ readonly control: "Scaffolded control profile for Library.";
27
+ readonly media: "Scaffolded media profile for Library.";
28
+ readonly pace: "Scaffolded pace profile for Library.";
29
+ readonly narrative: "Scaffolded narrative profile for Library.";
122
30
  };
123
31
  };
124
32
  };
@@ -1,2 +1,2 @@
1
1
  // @bun
2
- import{defineModuleBundle as g}from"@contractspec/lib.surface-runtime/spec";var j=g({meta:{key:"library.workspace",version:"0.1.0",title:"Library Workspace",description:"Workspace shell for docs, templates, sandbox, and feature discovery",owners:["team-platform"],tags:["library","workspace","docs","sandbox","templates"],stability:"experimental"},routes:[{routeId:"sandbox",path:"/sandbox",defaultSurface:"workspace-shell"},{routeId:"docs",path:"/docs",defaultSurface:"workspace-shell"},{routeId:"docs-slug",path:"/docs/:slug",defaultSurface:"workspace-shell"},{routeId:"studio",path:"/studio/:projectSlug",defaultSurface:"workspace-shell"}],surfaces:{"workspace-shell":{surfaceId:"workspace-shell",kind:"workbench",title:"Workspace Shell",slots:[{slotId:"header",role:"header",accepts:["action-bar"],cardinality:"many"},{slotId:"sidebar",role:"secondary",accepts:["entity-section","custom-widget"],cardinality:"one"},{slotId:"primary",role:"primary",accepts:["entity-section","rich-doc","data-view","form","custom-widget"],cardinality:"many",mutableByAi:!0,mutableByUser:!0},{slotId:"assistant",role:"assistant",accepts:["assistant-panel","chat-thread"],cardinality:"many",mutableByAi:!0,mutableByUser:!0}],layouts:[{layoutId:"sidebar-main",title:"Sidebar + Main",root:{type:"panel-group",direction:"horizontal",persistKey:"library.workspace.sidebar-main",children:[{type:"slot",slotId:"sidebar"},{type:"panel-group",direction:"vertical",persistKey:"library.workspace.content",children:[{type:"slot",slotId:"header"},{type:"slot",slotId:"primary"}]}]}},{layoutId:"sidebar-main-assistant",title:"Sidebar + Main + Assistant",root:{type:"panel-group",direction:"horizontal",persistKey:"library.workspace.sidebar-main-assistant",children:[{type:"slot",slotId:"sidebar"},{type:"panel-group",direction:"vertical",persistKey:"library.workspace.content",children:[{type:"slot",slotId:"header"},{type:"slot",slotId:"primary"}]},{type:"slot",slotId:"assistant"}]}}],data:[],verification:{dimensions:{guidance:"Can reveal walkthrough notes, field help, and contextual hints.",density:"Can select compact, balanced, or dense layouts for docs and templates.",dataDepth:"Controls content depth, pagination size, and inline expansion.",control:"Shows advanced commands and raw config only when allowed.",media:"Supports text-first docs, visual templates, and hybrid modes.",pace:"Maps to motion tokens and confirmation behavior.",narrative:"Can order summary before or after detail sections."}}}}});export{j as LibraryBundle};
2
+ var k=Object.defineProperty;var q=(g)=>g;function v(g,h){this[g]=q.bind(null,h)}var x=(g,h)=>{for(var j in h)k(g,j,{get:h[j],enumerable:!0,configurable:!0,set:v.bind(h,j)})};var y=(g,h)=>()=>(g&&(h=g(g=0)),h);import{defineModuleBundle as w}from"@contractspec/lib.surface-runtime/spec";var C=w({meta:{key:"bundles.library",version:"1.0.0",title:"Library",description:"ContractSpec package declaration for @contractspec/bundle.library."},routes:[{routeId:"default",path:"/",defaultSurface:"main"}],surfaces:{main:{surfaceId:"main",kind:"workbench",title:"Library",slots:[],layouts:[],data:[],verification:{dimensions:{guidance:"Scaffolded guidance profile for Library.",density:"Scaffolded density profile for Library.",dataDepth:"Scaffolded data-depth profile for Library.",control:"Scaffolded control profile for Library.",media:"Scaffolded media profile for Library.",pace:"Scaffolded pace profile for Library.",narrative:"Scaffolded narrative profile for Library."}}}}});export{C as LibraryBundle};
@@ -1,2 +1,2 @@
1
1
  // @bun
2
- import{defineModuleBundle as r}from"@contractspec/lib.surface-runtime/spec";var x=r({meta:{key:"library.workspace",version:"0.1.0",title:"Library Workspace",description:"Workspace shell for docs, templates, sandbox, and feature discovery",owners:["team-platform"],tags:["library","workspace","docs","sandbox","templates"],stability:"experimental"},routes:[{routeId:"sandbox",path:"/sandbox",defaultSurface:"workspace-shell"},{routeId:"docs",path:"/docs",defaultSurface:"workspace-shell"},{routeId:"docs-slug",path:"/docs/:slug",defaultSurface:"workspace-shell"},{routeId:"studio",path:"/studio/:projectSlug",defaultSurface:"workspace-shell"}],surfaces:{"workspace-shell":{surfaceId:"workspace-shell",kind:"workbench",title:"Workspace Shell",slots:[{slotId:"header",role:"header",accepts:["action-bar"],cardinality:"many"},{slotId:"sidebar",role:"secondary",accepts:["entity-section","custom-widget"],cardinality:"one"},{slotId:"primary",role:"primary",accepts:["entity-section","rich-doc","data-view","form","custom-widget"],cardinality:"many",mutableByAi:!0,mutableByUser:!0},{slotId:"assistant",role:"assistant",accepts:["assistant-panel","chat-thread"],cardinality:"many",mutableByAi:!0,mutableByUser:!0}],layouts:[{layoutId:"sidebar-main",title:"Sidebar + Main",root:{type:"panel-group",direction:"horizontal",persistKey:"library.workspace.sidebar-main",children:[{type:"slot",slotId:"sidebar"},{type:"panel-group",direction:"vertical",persistKey:"library.workspace.content",children:[{type:"slot",slotId:"header"},{type:"slot",slotId:"primary"}]}]}},{layoutId:"sidebar-main-assistant",title:"Sidebar + Main + Assistant",root:{type:"panel-group",direction:"horizontal",persistKey:"library.workspace.sidebar-main-assistant",children:[{type:"slot",slotId:"sidebar"},{type:"panel-group",direction:"vertical",persistKey:"library.workspace.content",children:[{type:"slot",slotId:"header"},{type:"slot",slotId:"primary"}]},{type:"slot",slotId:"assistant"}]}}],data:[],verification:{dimensions:{guidance:"Can reveal walkthrough notes, field help, and contextual hints.",density:"Can select compact, balanced, or dense layouts for docs and templates.",dataDepth:"Controls content depth, pagination size, and inline expansion.",control:"Shows advanced commands and raw config only when allowed.",media:"Supports text-first docs, visual templates, and hybrid modes.",pace:"Maps to motion tokens and confirmation behavior.",narrative:"Can order summary before or after detail sections."}}}}});export{x as LibraryBundle};
2
+ var L=Object.defineProperty;var b=(r)=>r;function g(r,x){this[r]=b.bind(null,x)}var k=(r,x)=>{for(var y in x)L(r,y,{get:x[y],enumerable:!0,configurable:!0,set:g.bind(x,y)})};var m=(r,x)=>()=>(r&&(x=r(r=0)),x);import{defineModuleBundle as h}from"@contractspec/lib.surface-runtime/spec";var j=h({meta:{key:"bundles.library",version:"1.0.0",title:"Library",description:"ContractSpec package declaration for @contractspec/bundle.library."},routes:[{routeId:"default",path:"/",defaultSurface:"main"}],surfaces:{main:{surfaceId:"main",kind:"workbench",title:"Library",slots:[],layouts:[],data:[],verification:{dimensions:{guidance:"Scaffolded guidance profile for Library.",density:"Scaffolded density profile for Library.",dataDepth:"Scaffolded data-depth profile for Library.",control:"Scaffolded control profile for Library.",media:"Scaffolded media profile for Library.",pace:"Scaffolded pace profile for Library.",narrative:"Scaffolded narrative profile for Library."}}}}});export{j as LibraryBundle};