@contractspec/bundle.library 3.4.2 → 3.5.0
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.
- package/.turbo/turbo-build.log +494 -488
- package/CHANGELOG.md +61 -0
- package/dist/application/index.js +8 -8
- package/dist/application/mcp/cliMcp.js +8 -8
- package/dist/application/mcp/contractsMcp.js +8 -8
- package/dist/application/mcp/docsMcp.js +8 -8
- package/dist/application/mcp/index.js +8 -8
- package/dist/application/mcp/internalMcp.js +8 -8
- package/dist/application/mcp/providerRankingMcp.js +8 -8
- package/dist/bundles/LibraryBundle.d.ts +126 -0
- package/dist/bundles/LibraryBundle.js +139 -0
- package/dist/bundles/index.d.ts +1 -0
- package/dist/bundles/index.js +139 -0
- package/dist/components/docs/DocsIndexPage.js +91 -91
- package/dist/components/docs/advanced/AdvancedMCPPage.js +125 -125
- package/dist/components/docs/advanced/AdvancedOverlayEditorPage.js +49 -49
- package/dist/components/docs/advanced/AdvancedRenderersPage.js +51 -51
- package/dist/components/docs/advanced/AdvancedSpecExperimentsPage.js +35 -35
- package/dist/components/docs/advanced/AdvancedTelemetryPage.js +177 -177
- package/dist/components/docs/advanced/AdvancedWorkflowMonitoringPage.js +45 -45
- package/dist/components/docs/advanced/index.js +482 -482
- package/dist/components/docs/architecture/ArchitectureAppConfigPage.js +107 -107
- package/dist/components/docs/architecture/ArchitectureControlPlanePage.js +73 -73
- package/dist/components/docs/architecture/ArchitectureIntegrationBindingPage.js +117 -117
- package/dist/components/docs/architecture/ArchitectureKnowledgeBindingPage.js +175 -175
- package/dist/components/docs/architecture/ArchitectureMultiTenancyPage.js +71 -71
- package/dist/components/docs/architecture/ArchitectureOverviewPage.js +205 -205
- package/dist/components/docs/architecture/index.js +748 -748
- package/dist/components/docs/comparison/ComparisonAutomationPlatformsPage.js +117 -117
- package/dist/components/docs/comparison/ComparisonEnterprisePlatformsPage.js +111 -111
- package/dist/components/docs/comparison/ComparisonInternalToolBuildersPage.js +117 -117
- package/dist/components/docs/comparison/ComparisonOverviewPage.js +97 -97
- package/dist/components/docs/comparison/ComparisonWindmillPage.js +125 -125
- package/dist/components/docs/comparison/ComparisonWorkflowEnginesPage.js +171 -171
- package/dist/components/docs/comparison/index.js +738 -738
- package/dist/components/docs/ecosystem/IntegrationsPage.js +45 -45
- package/dist/components/docs/ecosystem/PluginsPage.js +73 -73
- package/dist/components/docs/ecosystem/RegistryPage.js +37 -37
- package/dist/components/docs/ecosystem/TemplatesPage.js +56 -56
- package/dist/components/docs/ecosystem/index.js +211 -211
- package/dist/components/docs/examples/DocsExamplesPage.js +21 -21
- package/dist/components/docs/examples/index.js +21 -21
- package/dist/components/docs/getting-started/CLIPage.js +95 -95
- package/dist/components/docs/getting-started/CompatibilityPage.js +81 -81
- package/dist/components/docs/getting-started/DataViewTutorialPage.js +57 -57
- package/dist/components/docs/getting-started/DeveloperToolsPage.js +61 -61
- package/dist/components/docs/getting-started/HelloWorldPage.js +77 -77
- package/dist/components/docs/getting-started/InstallationPage.js +65 -65
- package/dist/components/docs/getting-started/StartHerePage.js +51 -51
- package/dist/components/docs/getting-started/TroubleshootingPage.js +73 -73
- package/dist/components/docs/getting-started/VSCodeExtensionPage.js +171 -171
- package/dist/components/docs/getting-started/index.js +731 -731
- package/dist/components/docs/guides/GuideCIDiffGatingPage.js +80 -80
- package/dist/components/docs/guides/GuideContractTypesPage.js +232 -232
- package/dist/components/docs/guides/GuideDocsPipelinePage.js +82 -82
- package/dist/components/docs/guides/GuideGenerateDocsClientsSchemasPage.js +84 -84
- package/dist/components/docs/guides/GuideImportExistingCodebasesPage.js +324 -324
- package/dist/components/docs/guides/GuideNextjsOneEndpointPage.js +106 -106
- package/dist/components/docs/guides/GuideSpecValidationTypingPage.js +78 -78
- package/dist/components/docs/guides/GuidesIndexPage.js +43 -43
- package/dist/components/docs/guides/index.js +975 -975
- package/dist/components/docs/index.js +10791 -10791
- package/dist/components/docs/integrations/IntegrationsCircuitBreakersPage.js +17 -17
- package/dist/components/docs/integrations/IntegrationsElevenLabsPage.js +47 -47
- package/dist/components/docs/integrations/IntegrationsGithubPage.js +61 -61
- package/dist/components/docs/integrations/IntegrationsGmailPage.js +49 -49
- package/dist/components/docs/integrations/IntegrationsGoogleCalendarPage.js +33 -33
- package/dist/components/docs/integrations/IntegrationsHealthRoutingPage.js +65 -65
- package/dist/components/docs/integrations/IntegrationsMistralPage.js +69 -69
- package/dist/components/docs/integrations/IntegrationsOpenAIPage.js +65 -65
- package/dist/components/docs/integrations/IntegrationsOverviewPage.js +313 -313
- package/dist/components/docs/integrations/IntegrationsPostmarkPage.js +101 -101
- package/dist/components/docs/integrations/IntegrationsPowensPage.js +121 -121
- package/dist/components/docs/integrations/IntegrationsQdrantPage.js +49 -49
- package/dist/components/docs/integrations/IntegrationsResendPage.js +45 -45
- package/dist/components/docs/integrations/IntegrationsS3Page.js +57 -57
- package/dist/components/docs/integrations/IntegrationsSlackPage.js +63 -63
- package/dist/components/docs/integrations/IntegrationsSpecModelPage.js +139 -139
- package/dist/components/docs/integrations/IntegrationsStripePage.js +159 -159
- package/dist/components/docs/integrations/IntegrationsTwilioPage.js +61 -61
- package/dist/components/docs/integrations/IntegrationsWhatsappMetaPage.js +63 -63
- package/dist/components/docs/integrations/IntegrationsWhatsappTwilioPage.js +65 -65
- package/dist/components/docs/integrations/index.js +1642 -1642
- package/dist/components/docs/intent/ContractFirstApiPage.js +51 -51
- package/dist/components/docs/intent/DeterministicCodegenPage.js +59 -59
- package/dist/components/docs/intent/GenerateClientFromSchemaPage.js +85 -85
- package/dist/components/docs/intent/OpenapiAlternativePage.js +91 -91
- package/dist/components/docs/intent/SchemaValidationTypescriptPage.js +59 -59
- package/dist/components/docs/intent/SpecDrivenDevelopmentPage.js +51 -51
- package/dist/components/docs/intent/index.js +396 -396
- package/dist/components/docs/knowledge/KnowledgeCategoriesPage.js +371 -371
- package/dist/components/docs/knowledge/KnowledgeExamplesPage.js +79 -79
- package/dist/components/docs/knowledge/KnowledgeOverviewPage.js +185 -185
- package/dist/components/docs/knowledge/KnowledgeSourcesPage.js +187 -187
- package/dist/components/docs/knowledge/KnowledgeSpacesPage.js +141 -141
- package/dist/components/docs/knowledge/index.js +963 -963
- package/dist/components/docs/libraries/LibrariesAccessibilityPage.js +85 -85
- package/dist/components/docs/libraries/LibrariesAiAgentPage.js +63 -63
- package/dist/components/docs/libraries/LibrariesAnalyticsPage.js +33 -33
- package/dist/components/docs/libraries/LibrariesContentGenPage.js +43 -43
- package/dist/components/docs/libraries/LibrariesContractsPage.js +125 -125
- package/dist/components/docs/libraries/LibrariesCostTrackingPage.js +45 -45
- package/dist/components/docs/libraries/LibrariesDataBackendPage.js +69 -69
- package/dist/components/docs/libraries/LibrariesDataViewsPage.js +79 -79
- package/dist/components/docs/libraries/LibrariesDesignSystemPage.js +129 -129
- package/dist/components/docs/libraries/LibrariesEvolutionPage.js +49 -49
- package/dist/components/docs/libraries/LibrariesGraphQLPage.js +73 -73
- package/dist/components/docs/libraries/LibrariesGrowthPage.js +35 -35
- package/dist/components/docs/libraries/LibrariesMultiTenancyPage.js +43 -43
- package/dist/components/docs/libraries/LibrariesObservabilityPage.js +53 -53
- package/dist/components/docs/libraries/LibrariesOverlayEnginePage.js +45 -45
- package/dist/components/docs/libraries/LibrariesOverviewPage.js +191 -191
- package/dist/components/docs/libraries/LibrariesPersonalizationPage.js +47 -47
- package/dist/components/docs/libraries/LibrariesProgressiveDeliveryPage.js +53 -53
- package/dist/components/docs/libraries/LibrariesResiliencePage.js +49 -49
- package/dist/components/docs/libraries/LibrariesRuntimePage.js +87 -87
- package/dist/components/docs/libraries/LibrariesSLOPage.js +47 -47
- package/dist/components/docs/libraries/LibrariesSchemaPage.js +139 -139
- package/dist/components/docs/libraries/LibrariesSupportBotPage.js +57 -57
- package/dist/components/docs/libraries/LibrariesTestingPage.js +49 -49
- package/dist/components/docs/libraries/LibrariesUIKitPage.js +107 -107
- package/dist/components/docs/libraries/LibrariesWorkflowComposerPage.js +35 -35
- package/dist/components/docs/libraries/LibrariesWorkflowsPage.js +89 -89
- package/dist/components/docs/libraries/index.js +1919 -1919
- package/dist/components/docs/manifesto/ManifestoPage.js +79 -79
- package/dist/components/docs/ops/AutoEvolutionOpsPage.js +59 -59
- package/dist/components/docs/ops/DistributedTracingOpsPage.js +33 -33
- package/dist/components/docs/ops/index.js +92 -92
- package/dist/components/docs/reference/DocsMarkdownContent.js +27 -27
- package/dist/components/docs/reference/DocsReferenceContent.js +34 -34
- package/dist/components/docs/reference/DocsReferenceIndexClient.js +23 -23
- package/dist/components/docs/reference/DocsReferenceIndexPage.js +26 -26
- package/dist/components/docs/reference/DocsReferencePage.js +37 -37
- package/dist/components/docs/reference/index.js +63 -63
- package/dist/components/docs/safety/SafetyAuditingPage.js +161 -161
- package/dist/components/docs/safety/SafetyMigrationsPage.js +169 -169
- package/dist/components/docs/safety/SafetyOverviewPage.js +99 -99
- package/dist/components/docs/safety/SafetyPDPPage.js +137 -137
- package/dist/components/docs/safety/SafetySecurityTrustPage.js +95 -95
- package/dist/components/docs/safety/SafetySigningPage.js +39 -39
- package/dist/components/docs/safety/SafetyTenantIsolationPage.js +33 -33
- package/dist/components/docs/safety/index.js +733 -733
- package/dist/components/docs/shared/StudioPrompt.js +9 -9
- package/dist/components/docs/specs/SpecsCapabilitiesPage.js +61 -61
- package/dist/components/docs/specs/SpecsDataViewsPage.js +119 -119
- package/dist/components/docs/specs/SpecsOverlaysPage.js +171 -171
- package/dist/components/docs/specs/SpecsOverviewPage.js +167 -167
- package/dist/components/docs/specs/SpecsPolicyPage.js +179 -179
- package/dist/components/docs/specs/SpecsWorkflowsPage.js +141 -141
- package/dist/components/docs/specs/index.js +838 -838
- package/dist/components/docs/studio/StudioBYOKPage.js +9 -9
- package/dist/components/docs/studio/StudioDeploymentsPage.js +9 -9
- package/dist/components/docs/studio/StudioGettingStartedPage.js +9 -9
- package/dist/components/docs/studio/StudioIntegrationsPage.js +9 -9
- package/dist/components/docs/studio/StudioOverviewPage.js +33 -33
- package/dist/components/docs/studio/StudioVisualBuilderPage.js +9 -9
- package/dist/components/docs/studio/index.js +78 -78
- package/dist/components/integrations/index.js +209 -209
- package/dist/components/integrations/molecules/IntegrationCard.js +33 -33
- package/dist/components/integrations/organisms/IntegrationMarketplace.js +71 -71
- package/dist/components/integrations/organisms/IntegrationSettings.js +98 -98
- package/dist/components/integrations/organisms/KnowledgeSourceList.js +40 -40
- package/dist/components/legal/PrivacyTemplate.js +477 -477
- package/dist/components/legal/TermsTemplate.js +421 -421
- package/dist/components/legal/index.js +898 -898
- package/dist/components/shared/FeatureGateNotice.js +13 -13
- package/dist/components/shared/index.js +13 -13
- package/dist/components/shell/WorkspaceHeader.js +37 -37
- package/dist/components/shell/WorkspaceProjectShellLayout.js +77 -77
- package/dist/components/shell/WorkspaceShellRenderer.d.ts +17 -0
- package/dist/components/shell/WorkspaceShellRenderer.js +229 -0
- package/dist/components/shell/WorkspaceSidebar.js +27 -27
- package/dist/components/shell/index.d.ts +1 -0
- package/dist/components/shell/index.js +140 -77
- package/dist/components/templates/index.js +272 -272
- package/dist/components/templates/messaging/ConversationList.js +27 -27
- package/dist/components/templates/messaging/MessageComposer.js +27 -27
- package/dist/components/templates/messaging/MessageThread.js +18 -18
- package/dist/components/templates/messaging/MessagingWorkspace.js +65 -65
- package/dist/components/templates/messaging/index.js +65 -65
- package/dist/components/templates/recipes/LanguageSwitcher.js +5 -5
- package/dist/components/templates/recipes/RecipeCard.js +26 -26
- package/dist/components/templates/recipes/RecipeDetail.js +33 -33
- package/dist/components/templates/recipes/RecipeList.js +80 -80
- package/dist/components/templates/recipes/index.js +80 -80
- package/dist/components/templates/todos/FilterBar.js +39 -39
- package/dist/components/templates/todos/TaskForm.js +43 -43
- package/dist/components/templates/todos/TaskItem.js +30 -30
- package/dist/components/templates/todos/TaskList.js +127 -127
- package/dist/components/templates/todos/index.js +127 -127
- package/dist/index.js +12323 -12260
- package/dist/infrastructure/elysia/index.js +8 -8
- package/dist/infrastructure/elysia/logger.js +8 -8
- package/dist/infrastructure/index.js +8 -8
- package/dist/libs/posthog/client.js +2 -2
- package/dist/node/application/index.js +8 -8
- package/dist/node/application/mcp/cliMcp.js +8 -8
- package/dist/node/application/mcp/contractsMcp.js +8 -8
- package/dist/node/application/mcp/docsMcp.js +8 -8
- package/dist/node/application/mcp/index.js +8 -8
- package/dist/node/application/mcp/internalMcp.js +8 -8
- package/dist/node/application/mcp/providerRankingMcp.js +8 -8
- package/dist/node/bundles/LibraryBundle.js +138 -0
- package/dist/node/bundles/index.js +138 -0
- package/dist/node/components/docs/DocsIndexPage.js +91 -91
- package/dist/node/components/docs/advanced/AdvancedMCPPage.js +125 -125
- package/dist/node/components/docs/advanced/AdvancedOverlayEditorPage.js +49 -49
- package/dist/node/components/docs/advanced/AdvancedRenderersPage.js +51 -51
- package/dist/node/components/docs/advanced/AdvancedSpecExperimentsPage.js +35 -35
- package/dist/node/components/docs/advanced/AdvancedTelemetryPage.js +177 -177
- package/dist/node/components/docs/advanced/AdvancedWorkflowMonitoringPage.js +45 -45
- package/dist/node/components/docs/advanced/index.js +482 -482
- package/dist/node/components/docs/architecture/ArchitectureAppConfigPage.js +107 -107
- package/dist/node/components/docs/architecture/ArchitectureControlPlanePage.js +73 -73
- package/dist/node/components/docs/architecture/ArchitectureIntegrationBindingPage.js +117 -117
- package/dist/node/components/docs/architecture/ArchitectureKnowledgeBindingPage.js +175 -175
- package/dist/node/components/docs/architecture/ArchitectureMultiTenancyPage.js +71 -71
- package/dist/node/components/docs/architecture/ArchitectureOverviewPage.js +205 -205
- package/dist/node/components/docs/architecture/index.js +748 -748
- package/dist/node/components/docs/comparison/ComparisonAutomationPlatformsPage.js +117 -117
- package/dist/node/components/docs/comparison/ComparisonEnterprisePlatformsPage.js +111 -111
- package/dist/node/components/docs/comparison/ComparisonInternalToolBuildersPage.js +117 -117
- package/dist/node/components/docs/comparison/ComparisonOverviewPage.js +97 -97
- package/dist/node/components/docs/comparison/ComparisonWindmillPage.js +125 -125
- package/dist/node/components/docs/comparison/ComparisonWorkflowEnginesPage.js +171 -171
- package/dist/node/components/docs/comparison/index.js +738 -738
- package/dist/node/components/docs/ecosystem/IntegrationsPage.js +45 -45
- package/dist/node/components/docs/ecosystem/PluginsPage.js +73 -73
- package/dist/node/components/docs/ecosystem/RegistryPage.js +37 -37
- package/dist/node/components/docs/ecosystem/TemplatesPage.js +56 -56
- package/dist/node/components/docs/ecosystem/index.js +211 -211
- package/dist/node/components/docs/examples/DocsExamplesPage.js +21 -21
- package/dist/node/components/docs/examples/index.js +21 -21
- package/dist/node/components/docs/getting-started/CLIPage.js +95 -95
- package/dist/node/components/docs/getting-started/CompatibilityPage.js +81 -81
- package/dist/node/components/docs/getting-started/DataViewTutorialPage.js +57 -57
- package/dist/node/components/docs/getting-started/DeveloperToolsPage.js +61 -61
- package/dist/node/components/docs/getting-started/HelloWorldPage.js +77 -77
- package/dist/node/components/docs/getting-started/InstallationPage.js +65 -65
- package/dist/node/components/docs/getting-started/StartHerePage.js +51 -51
- package/dist/node/components/docs/getting-started/TroubleshootingPage.js +73 -73
- package/dist/node/components/docs/getting-started/VSCodeExtensionPage.js +171 -171
- package/dist/node/components/docs/getting-started/index.js +731 -731
- package/dist/node/components/docs/guides/GuideCIDiffGatingPage.js +80 -80
- package/dist/node/components/docs/guides/GuideContractTypesPage.js +232 -232
- package/dist/node/components/docs/guides/GuideDocsPipelinePage.js +82 -82
- package/dist/node/components/docs/guides/GuideGenerateDocsClientsSchemasPage.js +84 -84
- package/dist/node/components/docs/guides/GuideImportExistingCodebasesPage.js +324 -324
- package/dist/node/components/docs/guides/GuideNextjsOneEndpointPage.js +106 -106
- package/dist/node/components/docs/guides/GuideSpecValidationTypingPage.js +78 -78
- package/dist/node/components/docs/guides/GuidesIndexPage.js +43 -43
- package/dist/node/components/docs/guides/index.js +975 -975
- package/dist/node/components/docs/index.js +10791 -10791
- package/dist/node/components/docs/integrations/IntegrationsCircuitBreakersPage.js +17 -17
- package/dist/node/components/docs/integrations/IntegrationsElevenLabsPage.js +47 -47
- package/dist/node/components/docs/integrations/IntegrationsGithubPage.js +61 -61
- package/dist/node/components/docs/integrations/IntegrationsGmailPage.js +49 -49
- package/dist/node/components/docs/integrations/IntegrationsGoogleCalendarPage.js +33 -33
- package/dist/node/components/docs/integrations/IntegrationsHealthRoutingPage.js +65 -65
- package/dist/node/components/docs/integrations/IntegrationsMistralPage.js +69 -69
- package/dist/node/components/docs/integrations/IntegrationsOpenAIPage.js +65 -65
- package/dist/node/components/docs/integrations/IntegrationsOverviewPage.js +313 -313
- package/dist/node/components/docs/integrations/IntegrationsPostmarkPage.js +101 -101
- package/dist/node/components/docs/integrations/IntegrationsPowensPage.js +121 -121
- package/dist/node/components/docs/integrations/IntegrationsQdrantPage.js +49 -49
- package/dist/node/components/docs/integrations/IntegrationsResendPage.js +45 -45
- package/dist/node/components/docs/integrations/IntegrationsS3Page.js +57 -57
- package/dist/node/components/docs/integrations/IntegrationsSlackPage.js +63 -63
- package/dist/node/components/docs/integrations/IntegrationsSpecModelPage.js +139 -139
- package/dist/node/components/docs/integrations/IntegrationsStripePage.js +159 -159
- package/dist/node/components/docs/integrations/IntegrationsTwilioPage.js +61 -61
- package/dist/node/components/docs/integrations/IntegrationsWhatsappMetaPage.js +63 -63
- package/dist/node/components/docs/integrations/IntegrationsWhatsappTwilioPage.js +65 -65
- package/dist/node/components/docs/integrations/index.js +1642 -1642
- package/dist/node/components/docs/intent/ContractFirstApiPage.js +51 -51
- package/dist/node/components/docs/intent/DeterministicCodegenPage.js +59 -59
- package/dist/node/components/docs/intent/GenerateClientFromSchemaPage.js +85 -85
- package/dist/node/components/docs/intent/OpenapiAlternativePage.js +91 -91
- package/dist/node/components/docs/intent/SchemaValidationTypescriptPage.js +59 -59
- package/dist/node/components/docs/intent/SpecDrivenDevelopmentPage.js +51 -51
- package/dist/node/components/docs/intent/index.js +396 -396
- package/dist/node/components/docs/knowledge/KnowledgeCategoriesPage.js +371 -371
- package/dist/node/components/docs/knowledge/KnowledgeExamplesPage.js +79 -79
- package/dist/node/components/docs/knowledge/KnowledgeOverviewPage.js +185 -185
- package/dist/node/components/docs/knowledge/KnowledgeSourcesPage.js +187 -187
- package/dist/node/components/docs/knowledge/KnowledgeSpacesPage.js +141 -141
- package/dist/node/components/docs/knowledge/index.js +963 -963
- package/dist/node/components/docs/libraries/LibrariesAccessibilityPage.js +85 -85
- package/dist/node/components/docs/libraries/LibrariesAiAgentPage.js +63 -63
- package/dist/node/components/docs/libraries/LibrariesAnalyticsPage.js +33 -33
- package/dist/node/components/docs/libraries/LibrariesContentGenPage.js +43 -43
- package/dist/node/components/docs/libraries/LibrariesContractsPage.js +125 -125
- package/dist/node/components/docs/libraries/LibrariesCostTrackingPage.js +45 -45
- package/dist/node/components/docs/libraries/LibrariesDataBackendPage.js +69 -69
- package/dist/node/components/docs/libraries/LibrariesDataViewsPage.js +79 -79
- package/dist/node/components/docs/libraries/LibrariesDesignSystemPage.js +129 -129
- package/dist/node/components/docs/libraries/LibrariesEvolutionPage.js +49 -49
- package/dist/node/components/docs/libraries/LibrariesGraphQLPage.js +73 -73
- package/dist/node/components/docs/libraries/LibrariesGrowthPage.js +35 -35
- package/dist/node/components/docs/libraries/LibrariesMultiTenancyPage.js +43 -43
- package/dist/node/components/docs/libraries/LibrariesObservabilityPage.js +53 -53
- package/dist/node/components/docs/libraries/LibrariesOverlayEnginePage.js +45 -45
- package/dist/node/components/docs/libraries/LibrariesOverviewPage.js +191 -191
- package/dist/node/components/docs/libraries/LibrariesPersonalizationPage.js +47 -47
- package/dist/node/components/docs/libraries/LibrariesProgressiveDeliveryPage.js +53 -53
- package/dist/node/components/docs/libraries/LibrariesResiliencePage.js +49 -49
- package/dist/node/components/docs/libraries/LibrariesRuntimePage.js +87 -87
- package/dist/node/components/docs/libraries/LibrariesSLOPage.js +47 -47
- package/dist/node/components/docs/libraries/LibrariesSchemaPage.js +139 -139
- package/dist/node/components/docs/libraries/LibrariesSupportBotPage.js +57 -57
- package/dist/node/components/docs/libraries/LibrariesTestingPage.js +49 -49
- package/dist/node/components/docs/libraries/LibrariesUIKitPage.js +107 -107
- package/dist/node/components/docs/libraries/LibrariesWorkflowComposerPage.js +35 -35
- package/dist/node/components/docs/libraries/LibrariesWorkflowsPage.js +89 -89
- package/dist/node/components/docs/libraries/index.js +1919 -1919
- package/dist/node/components/docs/manifesto/ManifestoPage.js +79 -79
- package/dist/node/components/docs/ops/AutoEvolutionOpsPage.js +59 -59
- package/dist/node/components/docs/ops/DistributedTracingOpsPage.js +33 -33
- package/dist/node/components/docs/ops/index.js +92 -92
- package/dist/node/components/docs/reference/DocsMarkdownContent.js +27 -27
- package/dist/node/components/docs/reference/DocsReferenceContent.js +34 -34
- package/dist/node/components/docs/reference/DocsReferenceIndexClient.js +23 -23
- package/dist/node/components/docs/reference/DocsReferenceIndexPage.js +26 -26
- package/dist/node/components/docs/reference/DocsReferencePage.js +37 -37
- package/dist/node/components/docs/reference/index.js +63 -63
- package/dist/node/components/docs/safety/SafetyAuditingPage.js +161 -161
- package/dist/node/components/docs/safety/SafetyMigrationsPage.js +169 -169
- package/dist/node/components/docs/safety/SafetyOverviewPage.js +99 -99
- package/dist/node/components/docs/safety/SafetyPDPPage.js +137 -137
- package/dist/node/components/docs/safety/SafetySecurityTrustPage.js +95 -95
- package/dist/node/components/docs/safety/SafetySigningPage.js +39 -39
- package/dist/node/components/docs/safety/SafetyTenantIsolationPage.js +33 -33
- package/dist/node/components/docs/safety/index.js +733 -733
- package/dist/node/components/docs/shared/StudioPrompt.js +9 -9
- package/dist/node/components/docs/specs/SpecsCapabilitiesPage.js +61 -61
- package/dist/node/components/docs/specs/SpecsDataViewsPage.js +119 -119
- package/dist/node/components/docs/specs/SpecsOverlaysPage.js +171 -171
- package/dist/node/components/docs/specs/SpecsOverviewPage.js +167 -167
- package/dist/node/components/docs/specs/SpecsPolicyPage.js +179 -179
- package/dist/node/components/docs/specs/SpecsWorkflowsPage.js +141 -141
- package/dist/node/components/docs/specs/index.js +838 -838
- package/dist/node/components/docs/studio/StudioBYOKPage.js +9 -9
- package/dist/node/components/docs/studio/StudioDeploymentsPage.js +9 -9
- package/dist/node/components/docs/studio/StudioGettingStartedPage.js +9 -9
- package/dist/node/components/docs/studio/StudioIntegrationsPage.js +9 -9
- package/dist/node/components/docs/studio/StudioOverviewPage.js +33 -33
- package/dist/node/components/docs/studio/StudioVisualBuilderPage.js +9 -9
- package/dist/node/components/docs/studio/index.js +78 -78
- package/dist/node/components/integrations/index.js +209 -209
- package/dist/node/components/integrations/molecules/IntegrationCard.js +33 -33
- package/dist/node/components/integrations/organisms/IntegrationMarketplace.js +71 -71
- package/dist/node/components/integrations/organisms/IntegrationSettings.js +98 -98
- package/dist/node/components/integrations/organisms/KnowledgeSourceList.js +40 -40
- package/dist/node/components/legal/PrivacyTemplate.js +477 -477
- package/dist/node/components/legal/TermsTemplate.js +421 -421
- package/dist/node/components/legal/index.js +898 -898
- package/dist/node/components/shared/FeatureGateNotice.js +13 -13
- package/dist/node/components/shared/index.js +13 -13
- package/dist/node/components/shell/WorkspaceHeader.js +37 -37
- package/dist/node/components/shell/WorkspaceProjectShellLayout.js +77 -77
- package/dist/node/components/shell/WorkspaceShellRenderer.js +228 -0
- package/dist/node/components/shell/WorkspaceSidebar.js +27 -27
- package/dist/node/components/shell/index.js +140 -77
- package/dist/node/components/templates/index.js +272 -272
- package/dist/node/components/templates/messaging/ConversationList.js +27 -27
- package/dist/node/components/templates/messaging/MessageComposer.js +27 -27
- package/dist/node/components/templates/messaging/MessageThread.js +18 -18
- package/dist/node/components/templates/messaging/MessagingWorkspace.js +65 -65
- package/dist/node/components/templates/messaging/index.js +65 -65
- package/dist/node/components/templates/recipes/LanguageSwitcher.js +5 -5
- package/dist/node/components/templates/recipes/RecipeCard.js +26 -26
- package/dist/node/components/templates/recipes/RecipeDetail.js +33 -33
- package/dist/node/components/templates/recipes/RecipeList.js +80 -80
- package/dist/node/components/templates/recipes/index.js +80 -80
- package/dist/node/components/templates/todos/FilterBar.js +39 -39
- package/dist/node/components/templates/todos/TaskForm.js +43 -43
- package/dist/node/components/templates/todos/TaskItem.js +30 -30
- package/dist/node/components/templates/todos/TaskList.js +127 -127
- package/dist/node/components/templates/todos/index.js +127 -127
- package/dist/node/index.js +12323 -12260
- package/dist/node/infrastructure/elysia/index.js +8 -8
- package/dist/node/infrastructure/elysia/logger.js +8 -8
- package/dist/node/infrastructure/index.js +8 -8
- package/dist/node/libs/posthog/client.js +2 -2
- package/dist/node/presentation/features/atoms/FeatureIcon/FeatureIcon.js +3 -3
- package/dist/node/presentation/features/atoms/FeatureIcon/index.js +3 -3
- package/dist/node/presentation/features/atoms/index.js +3 -3
- package/dist/node/presentation/features/index.js +915 -915
- package/dist/node/presentation/features/molecules/FeatureCard/FeatureCard.js +101 -101
- package/dist/node/presentation/features/molecules/FeatureCard/index.js +101 -101
- package/dist/node/presentation/features/molecules/FeatureCategoryHeader/FeatureCategoryHeader.js +15 -15
- package/dist/node/presentation/features/molecules/FeatureCategoryHeader/index.js +15 -15
- package/dist/node/presentation/features/molecules/FeatureFilters/FeatureFilters.js +23 -23
- package/dist/node/presentation/features/molecules/FeatureFilters/index.js +23 -23
- package/dist/node/presentation/features/molecules/FeatureHoverPreview/FeatureHoverPreview.js +67 -67
- package/dist/node/presentation/features/molecules/FeatureHoverPreview/index.js +67 -67
- package/dist/node/presentation/features/molecules/index.js +139 -139
- package/dist/node/presentation/features/organisms/FeatureDataViewsList.js +7 -7
- package/dist/node/presentation/features/organisms/FeatureDetail/FeatureDetail.js +57 -57
- package/dist/node/presentation/features/organisms/FeatureDetail/index.js +57 -57
- package/dist/node/presentation/features/organisms/FeatureDiscovery/FeatureDiscovery.js +183 -183
- package/dist/node/presentation/features/organisms/FeatureDiscovery/index.js +183 -183
- package/dist/node/presentation/features/organisms/FeatureEventsList.js +7 -7
- package/dist/node/presentation/features/organisms/FeatureFormsList.js +7 -7
- package/dist/node/presentation/features/organisms/FeatureOperationsList.js +7 -7
- package/dist/node/presentation/features/organisms/FeaturePresentationsList.js +7 -7
- package/dist/node/presentation/features/organisms/index.js +275 -275
- package/dist/node/presentation/features/templates/FeatureDataViewDetailTemplate/FeatureDataViewDetailTemplate.js +126 -126
- package/dist/node/presentation/features/templates/FeatureDataViewDetailTemplate/index.js +126 -126
- package/dist/node/presentation/features/templates/FeatureDataViewsTemplate/FeatureDataViewsTemplate.js +16 -16
- package/dist/node/presentation/features/templates/FeatureDataViewsTemplate/index.js +16 -16
- package/dist/node/presentation/features/templates/FeatureEventDetailTemplate/FeatureEventDetailTemplate.js +112 -112
- package/dist/node/presentation/features/templates/FeatureEventDetailTemplate/index.js +112 -112
- package/dist/node/presentation/features/templates/FeatureEventsTemplate/FeatureEventsTemplate.js +16 -16
- package/dist/node/presentation/features/templates/FeatureEventsTemplate/index.js +16 -16
- package/dist/node/presentation/features/templates/FeatureFormDetailTemplate/FeatureFormDetailTemplate.js +126 -126
- package/dist/node/presentation/features/templates/FeatureFormDetailTemplate/index.js +126 -126
- package/dist/node/presentation/features/templates/FeatureFormsTemplate/FeatureFormsTemplate.js +16 -16
- package/dist/node/presentation/features/templates/FeatureFormsTemplate/index.js +16 -16
- package/dist/node/presentation/features/templates/FeatureOperationDetailTemplate/FeatureOperationDetailTemplate.js +110 -110
- package/dist/node/presentation/features/templates/FeatureOperationDetailTemplate/index.js +110 -110
- package/dist/node/presentation/features/templates/FeatureOperationsTemplate/FeatureOperationsTemplate.js +16 -16
- package/dist/node/presentation/features/templates/FeatureOperationsTemplate/index.js +16 -16
- package/dist/node/presentation/features/templates/FeatureOverviewTemplate/FeatureOverviewTemplate.js +66 -66
- package/dist/node/presentation/features/templates/FeatureOverviewTemplate/index.js +66 -66
- package/dist/node/presentation/features/templates/FeaturePresentationDetailTemplate/FeaturePresentationDetailTemplate.js +112 -112
- package/dist/node/presentation/features/templates/FeaturePresentationDetailTemplate/index.js +112 -112
- package/dist/node/presentation/features/templates/FeaturePresentationsTemplate/FeaturePresentationsTemplate.js +16 -16
- package/dist/node/presentation/features/templates/FeaturePresentationsTemplate/index.js +16 -16
- package/dist/presentation/features/atoms/FeatureIcon/FeatureIcon.js +3 -3
- package/dist/presentation/features/atoms/FeatureIcon/index.js +3 -3
- package/dist/presentation/features/atoms/index.js +3 -3
- package/dist/presentation/features/index.js +915 -915
- package/dist/presentation/features/molecules/FeatureCard/FeatureCard.js +101 -101
- package/dist/presentation/features/molecules/FeatureCard/index.js +101 -101
- package/dist/presentation/features/molecules/FeatureCategoryHeader/FeatureCategoryHeader.js +15 -15
- package/dist/presentation/features/molecules/FeatureCategoryHeader/index.js +15 -15
- package/dist/presentation/features/molecules/FeatureFilters/FeatureFilters.js +23 -23
- package/dist/presentation/features/molecules/FeatureFilters/index.js +23 -23
- package/dist/presentation/features/molecules/FeatureHoverPreview/FeatureHoverPreview.js +67 -67
- package/dist/presentation/features/molecules/FeatureHoverPreview/index.js +67 -67
- package/dist/presentation/features/molecules/index.js +139 -139
- package/dist/presentation/features/organisms/FeatureDataViewsList.js +7 -7
- package/dist/presentation/features/organisms/FeatureDetail/FeatureDetail.js +57 -57
- package/dist/presentation/features/organisms/FeatureDetail/index.js +57 -57
- package/dist/presentation/features/organisms/FeatureDiscovery/FeatureDiscovery.js +183 -183
- package/dist/presentation/features/organisms/FeatureDiscovery/index.js +183 -183
- package/dist/presentation/features/organisms/FeatureEventsList.js +7 -7
- package/dist/presentation/features/organisms/FeatureFormsList.js +7 -7
- package/dist/presentation/features/organisms/FeatureOperationsList.js +7 -7
- package/dist/presentation/features/organisms/FeaturePresentationsList.js +7 -7
- package/dist/presentation/features/organisms/index.js +275 -275
- package/dist/presentation/features/templates/FeatureDataViewDetailTemplate/FeatureDataViewDetailTemplate.js +126 -126
- package/dist/presentation/features/templates/FeatureDataViewDetailTemplate/index.js +126 -126
- package/dist/presentation/features/templates/FeatureDataViewsTemplate/FeatureDataViewsTemplate.js +16 -16
- package/dist/presentation/features/templates/FeatureDataViewsTemplate/index.js +16 -16
- package/dist/presentation/features/templates/FeatureEventDetailTemplate/FeatureEventDetailTemplate.js +112 -112
- package/dist/presentation/features/templates/FeatureEventDetailTemplate/index.js +112 -112
- package/dist/presentation/features/templates/FeatureEventsTemplate/FeatureEventsTemplate.js +16 -16
- package/dist/presentation/features/templates/FeatureEventsTemplate/index.js +16 -16
- package/dist/presentation/features/templates/FeatureFormDetailTemplate/FeatureFormDetailTemplate.js +126 -126
- package/dist/presentation/features/templates/FeatureFormDetailTemplate/index.js +126 -126
- package/dist/presentation/features/templates/FeatureFormsTemplate/FeatureFormsTemplate.js +16 -16
- package/dist/presentation/features/templates/FeatureFormsTemplate/index.js +16 -16
- package/dist/presentation/features/templates/FeatureOperationDetailTemplate/FeatureOperationDetailTemplate.js +110 -110
- package/dist/presentation/features/templates/FeatureOperationDetailTemplate/index.js +110 -110
- package/dist/presentation/features/templates/FeatureOperationsTemplate/FeatureOperationsTemplate.js +16 -16
- package/dist/presentation/features/templates/FeatureOperationsTemplate/index.js +16 -16
- package/dist/presentation/features/templates/FeatureOverviewTemplate/FeatureOverviewTemplate.js +66 -66
- package/dist/presentation/features/templates/FeatureOverviewTemplate/index.js +66 -66
- package/dist/presentation/features/templates/FeaturePresentationDetailTemplate/FeaturePresentationDetailTemplate.js +112 -112
- package/dist/presentation/features/templates/FeaturePresentationDetailTemplate/index.js +112 -112
- package/dist/presentation/features/templates/FeaturePresentationsTemplate/FeaturePresentationsTemplate.js +16 -16
- package/dist/presentation/features/templates/FeaturePresentationsTemplate/index.js +16 -16
- package/package.json +71 -22
- package/src/bundles/LibraryBundle.ts +152 -0
- package/src/bundles/index.ts +1 -0
- package/src/components/shell/WorkspaceShellRenderer.tsx +90 -0
- package/src/components/shell/index.ts +1 -0
|
@@ -2,114 +2,114 @@
|
|
|
2
2
|
// src/components/docs/advanced/AdvancedMCPPage.tsx
|
|
3
3
|
import Link from "@contractspec/lib.ui-link";
|
|
4
4
|
import { ChevronRight } from "lucide-react";
|
|
5
|
-
import {
|
|
5
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
6
6
|
function AdvancedMCPPage() {
|
|
7
|
-
return /* @__PURE__ */
|
|
7
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
8
8
|
className: "space-y-8",
|
|
9
9
|
children: [
|
|
10
|
-
/* @__PURE__ */
|
|
10
|
+
/* @__PURE__ */ jsxs("div", {
|
|
11
11
|
className: "space-y-4",
|
|
12
12
|
children: [
|
|
13
|
-
/* @__PURE__ */
|
|
13
|
+
/* @__PURE__ */ jsx("h1", {
|
|
14
14
|
className: "text-4xl font-bold",
|
|
15
15
|
children: "MCP Adapters"
|
|
16
|
-
}
|
|
17
|
-
/* @__PURE__ */
|
|
16
|
+
}),
|
|
17
|
+
/* @__PURE__ */ jsxs("p", {
|
|
18
18
|
className: "text-muted-foreground",
|
|
19
19
|
children: [
|
|
20
20
|
"The ",
|
|
21
|
-
/* @__PURE__ */
|
|
21
|
+
/* @__PURE__ */ jsx("strong", {
|
|
22
22
|
children: "Model Context Protocol (MCP)"
|
|
23
|
-
}
|
|
23
|
+
}),
|
|
24
24
|
" is an open standard for connecting AI models to external tools and data sources. ContractSpec provides MCP adapters that allow you to expose your capabilities as MCP tools and consume external MCP servers as capabilities."
|
|
25
25
|
]
|
|
26
|
-
}
|
|
26
|
+
})
|
|
27
27
|
]
|
|
28
|
-
}
|
|
29
|
-
/* @__PURE__ */
|
|
28
|
+
}),
|
|
29
|
+
/* @__PURE__ */ jsxs("div", {
|
|
30
30
|
className: "space-y-4",
|
|
31
31
|
children: [
|
|
32
|
-
/* @__PURE__ */
|
|
32
|
+
/* @__PURE__ */ jsx("h2", {
|
|
33
33
|
className: "text-2xl font-bold",
|
|
34
34
|
children: "Why MCP integration matters"
|
|
35
|
-
}
|
|
36
|
-
/* @__PURE__ */
|
|
35
|
+
}),
|
|
36
|
+
/* @__PURE__ */ jsx("p", {
|
|
37
37
|
className: "text-muted-foreground",
|
|
38
38
|
children: "AI agents need access to real-world tools and data to be useful. MCP provides a standardized way to expose these capabilities. By integrating ContractSpec with MCP, you can:"
|
|
39
|
-
}
|
|
40
|
-
/* @__PURE__ */
|
|
39
|
+
}),
|
|
40
|
+
/* @__PURE__ */ jsxs("ul", {
|
|
41
41
|
className: "text-muted-foreground list-inside list-disc space-y-2",
|
|
42
42
|
children: [
|
|
43
|
-
/* @__PURE__ */
|
|
43
|
+
/* @__PURE__ */ jsx("li", {
|
|
44
44
|
children: "Let AI agents invoke your ContractSpec capabilities safely and securely"
|
|
45
|
-
}
|
|
46
|
-
/* @__PURE__ */
|
|
45
|
+
}),
|
|
46
|
+
/* @__PURE__ */ jsx("li", {
|
|
47
47
|
children: "Use external MCP servers (databases, APIs, search engines) as capability providers in your workflows"
|
|
48
|
-
}
|
|
49
|
-
/* @__PURE__ */
|
|
48
|
+
}),
|
|
49
|
+
/* @__PURE__ */ jsx("li", {
|
|
50
50
|
children: "Build AI-powered features without writing custom integration code"
|
|
51
|
-
}
|
|
52
|
-
/* @__PURE__ */
|
|
51
|
+
}),
|
|
52
|
+
/* @__PURE__ */ jsx("li", {
|
|
53
53
|
children: "Enforce policies on AI agent actions just like any other user"
|
|
54
|
-
}
|
|
54
|
+
})
|
|
55
55
|
]
|
|
56
|
-
}
|
|
56
|
+
})
|
|
57
57
|
]
|
|
58
|
-
}
|
|
59
|
-
/* @__PURE__ */
|
|
58
|
+
}),
|
|
59
|
+
/* @__PURE__ */ jsxs("div", {
|
|
60
60
|
className: "space-y-4",
|
|
61
61
|
children: [
|
|
62
|
-
/* @__PURE__ */
|
|
62
|
+
/* @__PURE__ */ jsx("h2", {
|
|
63
63
|
className: "text-2xl font-bold",
|
|
64
64
|
children: "Exposing capabilities as MCP tools"
|
|
65
|
-
}
|
|
66
|
-
/* @__PURE__ */
|
|
65
|
+
}),
|
|
66
|
+
/* @__PURE__ */ jsxs("p", {
|
|
67
67
|
className: "text-muted-foreground",
|
|
68
68
|
children: [
|
|
69
69
|
"Any",
|
|
70
70
|
" ",
|
|
71
|
-
/* @__PURE__ */
|
|
71
|
+
/* @__PURE__ */ jsx(Link, {
|
|
72
72
|
href: "/docs/specs/capabilities",
|
|
73
73
|
className: "text-violet-400 hover:text-violet-300",
|
|
74
74
|
children: "CapabilitySpec"
|
|
75
|
-
}
|
|
75
|
+
}),
|
|
76
76
|
" ",
|
|
77
77
|
"can be automatically exposed as an MCP tool. ContractSpec generates:"
|
|
78
78
|
]
|
|
79
|
-
}
|
|
80
|
-
/* @__PURE__ */
|
|
79
|
+
}),
|
|
80
|
+
/* @__PURE__ */ jsxs("ul", {
|
|
81
81
|
className: "text-muted-foreground list-inside list-disc space-y-2",
|
|
82
82
|
children: [
|
|
83
|
-
/* @__PURE__ */
|
|
83
|
+
/* @__PURE__ */ jsx("li", {
|
|
84
84
|
children: "A tool schema describing the capability's inputs, outputs, and purpose"
|
|
85
|
-
}
|
|
86
|
-
/* @__PURE__ */
|
|
85
|
+
}),
|
|
86
|
+
/* @__PURE__ */ jsx("li", {
|
|
87
87
|
children: "An MCP server endpoint that AI agents can connect to"
|
|
88
|
-
}
|
|
89
|
-
/* @__PURE__ */
|
|
88
|
+
}),
|
|
89
|
+
/* @__PURE__ */ jsx("li", {
|
|
90
90
|
children: "Policy enforcement ensuring agents can only invoke capabilities they're authorized to use"
|
|
91
|
-
}
|
|
92
|
-
/* @__PURE__ */
|
|
91
|
+
}),
|
|
92
|
+
/* @__PURE__ */ jsx("li", {
|
|
93
93
|
children: "Audit logging of all agent actions for compliance and debugging"
|
|
94
|
-
}
|
|
94
|
+
})
|
|
95
95
|
]
|
|
96
|
-
}
|
|
96
|
+
})
|
|
97
97
|
]
|
|
98
|
-
}
|
|
99
|
-
/* @__PURE__ */
|
|
98
|
+
}),
|
|
99
|
+
/* @__PURE__ */ jsxs("div", {
|
|
100
100
|
className: "space-y-4",
|
|
101
101
|
children: [
|
|
102
|
-
/* @__PURE__ */
|
|
102
|
+
/* @__PURE__ */ jsx("h2", {
|
|
103
103
|
className: "text-2xl font-bold",
|
|
104
104
|
children: "Example: Exposing a capability"
|
|
105
|
-
}
|
|
106
|
-
/* @__PURE__ */
|
|
105
|
+
}),
|
|
106
|
+
/* @__PURE__ */ jsx("p", {
|
|
107
107
|
className: "text-muted-foreground",
|
|
108
108
|
children: "Here's how to expose ContractSpec operations as MCP tools:"
|
|
109
|
-
}
|
|
110
|
-
/* @__PURE__ */
|
|
109
|
+
}),
|
|
110
|
+
/* @__PURE__ */ jsx("div", {
|
|
111
111
|
className: "bg-background/50 border-border text-muted-foreground overflow-x-auto rounded-lg border p-4 font-mono text-sm",
|
|
112
|
-
children: /* @__PURE__ */
|
|
112
|
+
children: /* @__PURE__ */ jsx("pre", {
|
|
113
113
|
children: `import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
114
114
|
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
115
115
|
import { createMcpServer } from '@contractspec/lib.contracts-runtime-server-mcp/provider-mcp';
|
|
@@ -128,28 +128,28 @@ createMcpServer(server, registry, resources, prompts, {
|
|
|
128
128
|
|
|
129
129
|
const transport = new StdioServerTransport();
|
|
130
130
|
await server.connect(transport);`
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
/* @__PURE__ */
|
|
131
|
+
})
|
|
132
|
+
}),
|
|
133
|
+
/* @__PURE__ */ jsx("p", {
|
|
134
134
|
className: "text-muted-foreground",
|
|
135
135
|
children: "AI agents can now discover and invoke your operations through the MCP protocol. ContractSpec handles authentication, authorization, and execution automatically via the `OperationSpecRegistry`."
|
|
136
|
-
}
|
|
136
|
+
})
|
|
137
137
|
]
|
|
138
|
-
}
|
|
139
|
-
/* @__PURE__ */
|
|
138
|
+
}),
|
|
139
|
+
/* @__PURE__ */ jsxs("div", {
|
|
140
140
|
className: "space-y-4",
|
|
141
141
|
children: [
|
|
142
|
-
/* @__PURE__ */
|
|
142
|
+
/* @__PURE__ */ jsx("h2", {
|
|
143
143
|
className: "text-2xl font-bold",
|
|
144
144
|
children: "Consuming external MCP servers"
|
|
145
|
-
}
|
|
146
|
-
/* @__PURE__ */
|
|
145
|
+
}),
|
|
146
|
+
/* @__PURE__ */ jsx("p", {
|
|
147
147
|
className: "text-muted-foreground",
|
|
148
148
|
children: "You can integrate external MCP servers into your workflows. Define an integration spec and use it in your operations:"
|
|
149
|
-
}
|
|
150
|
-
/* @__PURE__ */
|
|
149
|
+
}),
|
|
150
|
+
/* @__PURE__ */ jsx("div", {
|
|
151
151
|
className: "bg-background/50 border-border text-muted-foreground overflow-x-auto rounded-lg border p-4 font-mono text-sm",
|
|
152
|
-
children: /* @__PURE__ */
|
|
152
|
+
children: /* @__PURE__ */ jsx("pre", {
|
|
153
153
|
children: `import { defineIntegration } from '@contractspec/lib.contracts-integrations';
|
|
154
154
|
import { SchemaModel, ScalarTypeEnum } from '@contractspec/lib.schema';
|
|
155
155
|
|
|
@@ -180,33 +180,33 @@ const SearchProductsIntegration = defineIntegration({
|
|
|
180
180
|
}),
|
|
181
181
|
},
|
|
182
182
|
});`
|
|
183
|
-
}
|
|
184
|
-
}
|
|
183
|
+
})
|
|
184
|
+
})
|
|
185
185
|
]
|
|
186
|
-
}
|
|
187
|
-
/* @__PURE__ */
|
|
186
|
+
}),
|
|
187
|
+
/* @__PURE__ */ jsxs("div", {
|
|
188
188
|
className: "space-y-4",
|
|
189
189
|
children: [
|
|
190
|
-
/* @__PURE__ */
|
|
190
|
+
/* @__PURE__ */ jsx("h2", {
|
|
191
191
|
className: "text-2xl font-bold",
|
|
192
192
|
children: "Policy enforcement for AI agents"
|
|
193
|
-
}
|
|
194
|
-
/* @__PURE__ */
|
|
193
|
+
}),
|
|
194
|
+
/* @__PURE__ */ jsxs("p", {
|
|
195
195
|
className: "text-muted-foreground",
|
|
196
196
|
children: [
|
|
197
197
|
"AI agents are treated like any other actor in ContractSpec. They must authenticate, and all their actions are subject to",
|
|
198
198
|
" ",
|
|
199
|
-
/* @__PURE__ */
|
|
199
|
+
/* @__PURE__ */ jsx(Link, {
|
|
200
200
|
href: "/docs/specs/policy",
|
|
201
201
|
className: "text-violet-400 hover:text-violet-300",
|
|
202
202
|
children: "PolicySpecs"
|
|
203
|
-
}
|
|
203
|
+
}),
|
|
204
204
|
". You can define specific policies in TypeScript:"
|
|
205
205
|
]
|
|
206
|
-
}
|
|
207
|
-
/* @__PURE__ */
|
|
206
|
+
}),
|
|
207
|
+
/* @__PURE__ */ jsx("div", {
|
|
208
208
|
className: "bg-background/50 border-border text-muted-foreground overflow-x-auto rounded-lg border p-4 font-mono text-sm",
|
|
209
|
-
children: /* @__PURE__ */
|
|
209
|
+
children: /* @__PURE__ */ jsx("pre", {
|
|
210
210
|
children: `import { definePolicy } from '@contractspec/lib.contracts-spec';
|
|
211
211
|
|
|
212
212
|
export const AIAgentRestrictions = definePolicy({
|
|
@@ -231,271 +231,271 @@ export const AIAgentRestrictions = definePolicy({
|
|
|
231
231
|
},
|
|
232
232
|
],
|
|
233
233
|
});`
|
|
234
|
-
}
|
|
235
|
-
}
|
|
234
|
+
})
|
|
235
|
+
})
|
|
236
236
|
]
|
|
237
|
-
}
|
|
238
|
-
/* @__PURE__ */
|
|
237
|
+
}),
|
|
238
|
+
/* @__PURE__ */ jsxs("div", {
|
|
239
239
|
className: "space-y-4",
|
|
240
240
|
children: [
|
|
241
|
-
/* @__PURE__ */
|
|
241
|
+
/* @__PURE__ */ jsx("h2", {
|
|
242
242
|
className: "text-2xl font-bold",
|
|
243
243
|
children: "Human-in-the-loop workflows"
|
|
244
|
-
}
|
|
245
|
-
/* @__PURE__ */
|
|
244
|
+
}),
|
|
245
|
+
/* @__PURE__ */ jsx("p", {
|
|
246
246
|
className: "text-muted-foreground",
|
|
247
247
|
children: "For sensitive operations, you can require human approval before an AI agent can proceed. ContractSpec provides built-in approval workflows:"
|
|
248
|
-
}
|
|
249
|
-
/* @__PURE__ */
|
|
248
|
+
}),
|
|
249
|
+
/* @__PURE__ */ jsxs("ul", {
|
|
250
250
|
className: "text-muted-foreground list-inside list-disc space-y-2",
|
|
251
251
|
children: [
|
|
252
|
-
/* @__PURE__ */
|
|
252
|
+
/* @__PURE__ */ jsx("li", {
|
|
253
253
|
children: "Agent requests permission to invoke a capability"
|
|
254
|
-
}
|
|
255
|
-
/* @__PURE__ */
|
|
254
|
+
}),
|
|
255
|
+
/* @__PURE__ */ jsx("li", {
|
|
256
256
|
children: "Request is sent to designated approvers (via email, Slack, etc.)"
|
|
257
|
-
}
|
|
258
|
-
/* @__PURE__ */
|
|
257
|
+
}),
|
|
258
|
+
/* @__PURE__ */ jsx("li", {
|
|
259
259
|
children: "Approver reviews the request and approves or denies it"
|
|
260
|
-
}
|
|
261
|
-
/* @__PURE__ */
|
|
260
|
+
}),
|
|
261
|
+
/* @__PURE__ */ jsx("li", {
|
|
262
262
|
children: "Agent receives the decision and can proceed if approved"
|
|
263
|
-
}
|
|
263
|
+
})
|
|
264
264
|
]
|
|
265
|
-
}
|
|
266
|
-
/* @__PURE__ */
|
|
265
|
+
}),
|
|
266
|
+
/* @__PURE__ */ jsxs("p", {
|
|
267
267
|
className: "text-muted-foreground",
|
|
268
268
|
children: [
|
|
269
269
|
"All approval decisions are logged in the",
|
|
270
270
|
" ",
|
|
271
|
-
/* @__PURE__ */
|
|
271
|
+
/* @__PURE__ */ jsx(Link, {
|
|
272
272
|
href: "/docs/safety/auditing",
|
|
273
273
|
className: "text-violet-400 hover:text-violet-300",
|
|
274
274
|
children: "audit log"
|
|
275
|
-
}
|
|
275
|
+
}),
|
|
276
276
|
"."
|
|
277
277
|
]
|
|
278
|
-
}
|
|
278
|
+
})
|
|
279
279
|
]
|
|
280
|
-
}
|
|
281
|
-
/* @__PURE__ */
|
|
280
|
+
}),
|
|
281
|
+
/* @__PURE__ */ jsxs("div", {
|
|
282
282
|
className: "space-y-4",
|
|
283
283
|
children: [
|
|
284
|
-
/* @__PURE__ */
|
|
284
|
+
/* @__PURE__ */ jsx("h2", {
|
|
285
285
|
className: "text-2xl font-bold",
|
|
286
286
|
children: "Best practices"
|
|
287
|
-
}
|
|
288
|
-
/* @__PURE__ */
|
|
287
|
+
}),
|
|
288
|
+
/* @__PURE__ */ jsxs("ul", {
|
|
289
289
|
className: "text-muted-foreground list-inside list-disc space-y-2",
|
|
290
290
|
children: [
|
|
291
|
-
/* @__PURE__ */
|
|
291
|
+
/* @__PURE__ */ jsx("li", {
|
|
292
292
|
children: "Start with read-only capabilities for AI agents\u2014only grant write access when necessary."
|
|
293
|
-
}
|
|
294
|
-
/* @__PURE__ */
|
|
293
|
+
}),
|
|
294
|
+
/* @__PURE__ */ jsx("li", {
|
|
295
295
|
children: "Use human-in-the-loop approval for any capability that modifies critical data or triggers financial transactions."
|
|
296
|
-
}
|
|
297
|
-
/* @__PURE__ */
|
|
296
|
+
}),
|
|
297
|
+
/* @__PURE__ */ jsx("li", {
|
|
298
298
|
children: "Set rate limits to prevent runaway agents from overwhelming your system."
|
|
299
|
-
}
|
|
300
|
-
/* @__PURE__ */
|
|
299
|
+
}),
|
|
300
|
+
/* @__PURE__ */ jsx("li", {
|
|
301
301
|
children: "Provide clear, detailed descriptions for each capability so agents know when to use them."
|
|
302
|
-
}
|
|
303
|
-
/* @__PURE__ */
|
|
302
|
+
}),
|
|
303
|
+
/* @__PURE__ */ jsx("li", {
|
|
304
304
|
children: "Monitor agent actions closely in production and adjust policies as needed."
|
|
305
|
-
}
|
|
306
|
-
/* @__PURE__ */
|
|
305
|
+
}),
|
|
306
|
+
/* @__PURE__ */ jsx("li", {
|
|
307
307
|
children: "Test agent integrations thoroughly with realistic scenarios before deploying."
|
|
308
|
-
}
|
|
308
|
+
})
|
|
309
309
|
]
|
|
310
|
-
}
|
|
310
|
+
})
|
|
311
311
|
]
|
|
312
|
-
}
|
|
313
|
-
/* @__PURE__ */
|
|
312
|
+
}),
|
|
313
|
+
/* @__PURE__ */ jsxs("div", {
|
|
314
314
|
className: "flex items-center gap-4 pt-4",
|
|
315
315
|
children: [
|
|
316
|
-
/* @__PURE__ */
|
|
316
|
+
/* @__PURE__ */ jsx(Link, {
|
|
317
317
|
href: "/docs/advanced/renderers",
|
|
318
318
|
className: "btn-ghost",
|
|
319
319
|
children: "Previous: Custom Renderers"
|
|
320
|
-
}
|
|
321
|
-
/* @__PURE__ */
|
|
320
|
+
}),
|
|
321
|
+
/* @__PURE__ */ jsxs(Link, {
|
|
322
322
|
href: "/docs/advanced/telemetry",
|
|
323
323
|
className: "btn-primary",
|
|
324
324
|
children: [
|
|
325
325
|
"Next: Telemetry ",
|
|
326
|
-
/* @__PURE__ */
|
|
326
|
+
/* @__PURE__ */ jsx(ChevronRight, {
|
|
327
327
|
size: 16
|
|
328
|
-
}
|
|
328
|
+
})
|
|
329
329
|
]
|
|
330
|
-
}
|
|
330
|
+
})
|
|
331
331
|
]
|
|
332
|
-
}
|
|
332
|
+
})
|
|
333
333
|
]
|
|
334
|
-
}
|
|
334
|
+
});
|
|
335
335
|
}
|
|
336
336
|
|
|
337
337
|
// src/components/docs/advanced/AdvancedOverlayEditorPage.tsx
|
|
338
338
|
import Link2 from "@contractspec/lib.ui-link";
|
|
339
|
-
import {
|
|
339
|
+
import { jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
340
340
|
function AdvancedOverlayEditorPage() {
|
|
341
|
-
return /* @__PURE__ */
|
|
341
|
+
return /* @__PURE__ */ jsxs2("div", {
|
|
342
342
|
className: "space-y-8",
|
|
343
343
|
children: [
|
|
344
|
-
/* @__PURE__ */
|
|
344
|
+
/* @__PURE__ */ jsxs2("div", {
|
|
345
345
|
className: "space-y-4",
|
|
346
346
|
children: [
|
|
347
|
-
/* @__PURE__ */
|
|
347
|
+
/* @__PURE__ */ jsx2("h1", {
|
|
348
348
|
className: "text-4xl font-bold",
|
|
349
349
|
children: "Overlay Editor"
|
|
350
|
-
}
|
|
351
|
-
/* @__PURE__ */
|
|
350
|
+
}),
|
|
351
|
+
/* @__PURE__ */ jsx2("p", {
|
|
352
352
|
className: "text-muted-foreground text-lg",
|
|
353
353
|
children: "A Next.js app (`@contractspec/app.overlay-editor`) that lets tenant admins tweak field visibility, labels, and ordering, then sign OverlaySpecs."
|
|
354
|
-
}
|
|
354
|
+
})
|
|
355
355
|
]
|
|
356
|
-
}
|
|
357
|
-
/* @__PURE__ */
|
|
356
|
+
}),
|
|
357
|
+
/* @__PURE__ */ jsxs2("div", {
|
|
358
358
|
className: "space-y-4",
|
|
359
359
|
children: [
|
|
360
|
-
/* @__PURE__ */
|
|
360
|
+
/* @__PURE__ */ jsx2("h2", {
|
|
361
361
|
className: "text-2xl font-bold",
|
|
362
362
|
children: "Features"
|
|
363
|
-
}
|
|
364
|
-
/* @__PURE__ */
|
|
363
|
+
}),
|
|
364
|
+
/* @__PURE__ */ jsxs2("ul", {
|
|
365
365
|
className: "list-disc space-y-2 pl-6",
|
|
366
366
|
children: [
|
|
367
|
-
/* @__PURE__ */
|
|
367
|
+
/* @__PURE__ */ jsx2("li", {
|
|
368
368
|
children: "Toggle visibility and rename labels without touching code."
|
|
369
|
-
}
|
|
370
|
-
/* @__PURE__ */
|
|
369
|
+
}),
|
|
370
|
+
/* @__PURE__ */ jsx2("li", {
|
|
371
371
|
children: "Move fields up/down to define the overlay order."
|
|
372
|
-
}
|
|
373
|
-
/* @__PURE__ */
|
|
372
|
+
}),
|
|
373
|
+
/* @__PURE__ */ jsx2("li", {
|
|
374
374
|
children: "Preview JSON output powered by `@contractspec/lib.overlay-engine`."
|
|
375
|
-
}
|
|
376
|
-
/* @__PURE__ */
|
|
375
|
+
}),
|
|
376
|
+
/* @__PURE__ */ jsx2("li", {
|
|
377
377
|
children: "Server action for PEM signing (Ed25519/RSA-PSS)."
|
|
378
|
-
}
|
|
378
|
+
})
|
|
379
379
|
]
|
|
380
|
-
}
|
|
381
|
-
/* @__PURE__ */
|
|
380
|
+
}),
|
|
381
|
+
/* @__PURE__ */ jsxs2("p", {
|
|
382
382
|
children: [
|
|
383
383
|
"Project path: ",
|
|
384
|
-
/* @__PURE__ */
|
|
384
|
+
/* @__PURE__ */ jsx2("code", {
|
|
385
385
|
children: "packages/apps/overlay-editor"
|
|
386
|
-
}
|
|
386
|
+
})
|
|
387
387
|
]
|
|
388
|
-
}
|
|
388
|
+
})
|
|
389
389
|
]
|
|
390
|
-
}
|
|
391
|
-
/* @__PURE__ */
|
|
390
|
+
}),
|
|
391
|
+
/* @__PURE__ */ jsxs2("div", {
|
|
392
392
|
className: "space-y-4",
|
|
393
393
|
children: [
|
|
394
|
-
/* @__PURE__ */
|
|
394
|
+
/* @__PURE__ */ jsx2("h2", {
|
|
395
395
|
className: "text-2xl font-bold",
|
|
396
396
|
children: "Provisioning flow"
|
|
397
|
-
}
|
|
398
|
-
/* @__PURE__ */
|
|
397
|
+
}),
|
|
398
|
+
/* @__PURE__ */ jsxs2("ol", {
|
|
399
399
|
className: "list-decimal space-y-2 pl-6",
|
|
400
400
|
children: [
|
|
401
|
-
/* @__PURE__ */
|
|
401
|
+
/* @__PURE__ */ jsxs2("li", {
|
|
402
402
|
children: [
|
|
403
403
|
"Clone the repo and run ",
|
|
404
|
-
/* @__PURE__ */
|
|
404
|
+
/* @__PURE__ */ jsx2("code", {
|
|
405
405
|
children: "bun dev"
|
|
406
|
-
}
|
|
406
|
+
}),
|
|
407
407
|
" inside the app."
|
|
408
408
|
]
|
|
409
|
-
}
|
|
410
|
-
/* @__PURE__ */
|
|
409
|
+
}),
|
|
410
|
+
/* @__PURE__ */ jsx2("li", {
|
|
411
411
|
children: "Use the UI to craft the overlay for a tenant."
|
|
412
|
-
}
|
|
413
|
-
/* @__PURE__ */
|
|
412
|
+
}),
|
|
413
|
+
/* @__PURE__ */ jsx2("li", {
|
|
414
414
|
children: "Paste the tenant's PEM private key (stored in Vault/KMS)."
|
|
415
|
-
}
|
|
416
|
-
/* @__PURE__ */
|
|
415
|
+
}),
|
|
416
|
+
/* @__PURE__ */ jsx2("li", {
|
|
417
417
|
children: "Click \u201CSign overlay\u201D to get the final JSON payload."
|
|
418
|
-
}
|
|
419
|
-
/* @__PURE__ */
|
|
418
|
+
}),
|
|
419
|
+
/* @__PURE__ */ jsx2("li", {
|
|
420
420
|
children: "Persist in the `Overlay` table and register with `OverlayRegistry`."
|
|
421
|
-
}
|
|
421
|
+
})
|
|
422
422
|
]
|
|
423
|
-
}
|
|
424
|
-
/* @__PURE__ */
|
|
423
|
+
}),
|
|
424
|
+
/* @__PURE__ */ jsxs2("p", {
|
|
425
425
|
children: [
|
|
426
426
|
"See also:",
|
|
427
427
|
" ",
|
|
428
|
-
/* @__PURE__ */
|
|
428
|
+
/* @__PURE__ */ jsx2(Link2, {
|
|
429
429
|
href: "/docs/ops/tenant-customization",
|
|
430
430
|
className: "text-violet-400 underline",
|
|
431
431
|
children: "Tenant customization runbook"
|
|
432
|
-
}
|
|
432
|
+
}),
|
|
433
433
|
"."
|
|
434
434
|
]
|
|
435
|
-
}
|
|
435
|
+
})
|
|
436
436
|
]
|
|
437
|
-
}
|
|
437
|
+
})
|
|
438
438
|
]
|
|
439
|
-
}
|
|
439
|
+
});
|
|
440
440
|
}
|
|
441
441
|
|
|
442
442
|
// src/components/docs/advanced/AdvancedRenderersPage.tsx
|
|
443
443
|
import Link3 from "@contractspec/lib.ui-link";
|
|
444
444
|
import { ChevronRight as ChevronRight2 } from "lucide-react";
|
|
445
|
-
import {
|
|
445
|
+
import { jsx as jsx3, jsxs as jsxs3 } from "react/jsx-runtime";
|
|
446
446
|
function AdvancedRenderersPage() {
|
|
447
|
-
return /* @__PURE__ */
|
|
447
|
+
return /* @__PURE__ */ jsxs3("div", {
|
|
448
448
|
className: "space-y-8",
|
|
449
449
|
children: [
|
|
450
|
-
/* @__PURE__ */
|
|
450
|
+
/* @__PURE__ */ jsxs3("div", {
|
|
451
451
|
className: "space-y-2",
|
|
452
452
|
children: [
|
|
453
|
-
/* @__PURE__ */
|
|
453
|
+
/* @__PURE__ */ jsx3("h1", {
|
|
454
454
|
className: "text-4xl font-bold",
|
|
455
455
|
children: "Custom Renderers"
|
|
456
|
-
}
|
|
457
|
-
/* @__PURE__ */
|
|
456
|
+
}),
|
|
457
|
+
/* @__PURE__ */ jsx3("p", {
|
|
458
458
|
className: "text-muted-foreground text-lg",
|
|
459
459
|
children: "ContractSpec ships with React and React Native renderers. You can build custom renderers for any framework."
|
|
460
|
-
}
|
|
460
|
+
})
|
|
461
461
|
]
|
|
462
|
-
}
|
|
463
|
-
/* @__PURE__ */
|
|
462
|
+
}),
|
|
463
|
+
/* @__PURE__ */ jsxs3("div", {
|
|
464
464
|
className: "space-y-6",
|
|
465
465
|
children: [
|
|
466
|
-
/* @__PURE__ */
|
|
466
|
+
/* @__PURE__ */ jsxs3("div", {
|
|
467
467
|
className: "space-y-3",
|
|
468
468
|
children: [
|
|
469
|
-
/* @__PURE__ */
|
|
469
|
+
/* @__PURE__ */ jsx3("h2", {
|
|
470
470
|
className: "text-2xl font-bold",
|
|
471
471
|
children: "Overview"
|
|
472
|
-
}
|
|
473
|
-
/* @__PURE__ */
|
|
472
|
+
}),
|
|
473
|
+
/* @__PURE__ */ jsxs3("p", {
|
|
474
474
|
className: "text-muted-foreground",
|
|
475
475
|
children: [
|
|
476
476
|
"The presentation runtime libraries (",
|
|
477
|
-
/* @__PURE__ */
|
|
477
|
+
/* @__PURE__ */ jsx3("code", {
|
|
478
478
|
children: "@contractspec/lib.presentation-runtime-react"
|
|
479
|
-
}
|
|
479
|
+
}),
|
|
480
480
|
" and",
|
|
481
|
-
/* @__PURE__ */
|
|
481
|
+
/* @__PURE__ */ jsx3("code", {
|
|
482
482
|
children: "@contractspec/lib.presentation-runtime-react-native"
|
|
483
|
-
}
|
|
483
|
+
}),
|
|
484
484
|
") provide hooks and components to render ContractSpec-defined UI like workflows and data views. You can extend these or create custom implementations for other frameworks."
|
|
485
485
|
]
|
|
486
|
-
}
|
|
486
|
+
})
|
|
487
487
|
]
|
|
488
|
-
}
|
|
489
|
-
/* @__PURE__ */
|
|
488
|
+
}),
|
|
489
|
+
/* @__PURE__ */ jsxs3("div", {
|
|
490
490
|
className: "space-y-3",
|
|
491
491
|
children: [
|
|
492
|
-
/* @__PURE__ */
|
|
492
|
+
/* @__PURE__ */ jsx3("h2", {
|
|
493
493
|
className: "text-2xl font-bold",
|
|
494
494
|
children: "Using the React Renderer"
|
|
495
|
-
}
|
|
496
|
-
/* @__PURE__ */
|
|
495
|
+
}),
|
|
496
|
+
/* @__PURE__ */ jsx3("div", {
|
|
497
497
|
className: "bg-background/50 border-border text-muted-foreground overflow-x-auto rounded-lg border p-4 font-mono text-sm",
|
|
498
|
-
children: /* @__PURE__ */
|
|
498
|
+
children: /* @__PURE__ */ jsx3("pre", {
|
|
499
499
|
children: `import { useWorkflow, WorkflowStepRenderer } from '@contractspec/lib.presentation-runtime-react';
|
|
500
500
|
import { MyWorkflowSpec } from './specs';
|
|
501
501
|
|
|
@@ -512,90 +512,90 @@ export function WorkflowPage() {
|
|
|
512
512
|
</div>
|
|
513
513
|
);
|
|
514
514
|
}`
|
|
515
|
-
}
|
|
516
|
-
}
|
|
515
|
+
})
|
|
516
|
+
})
|
|
517
517
|
]
|
|
518
|
-
}
|
|
519
|
-
/* @__PURE__ */
|
|
518
|
+
}),
|
|
519
|
+
/* @__PURE__ */ jsxs3("div", {
|
|
520
520
|
className: "space-y-3",
|
|
521
521
|
children: [
|
|
522
|
-
/* @__PURE__ */
|
|
522
|
+
/* @__PURE__ */ jsx3("h2", {
|
|
523
523
|
className: "text-2xl font-bold",
|
|
524
524
|
children: "Custom Platform Support"
|
|
525
|
-
}
|
|
526
|
-
/* @__PURE__ */
|
|
525
|
+
}),
|
|
526
|
+
/* @__PURE__ */ jsx3("p", {
|
|
527
527
|
className: "text-muted-foreground",
|
|
528
528
|
children: "To support a new platform (e.g., Vue, Svelte), you would:"
|
|
529
|
-
}
|
|
530
|
-
/* @__PURE__ */
|
|
529
|
+
}),
|
|
530
|
+
/* @__PURE__ */ jsxs3("ol", {
|
|
531
531
|
className: "text-muted-foreground list-inside list-decimal space-y-2",
|
|
532
532
|
children: [
|
|
533
|
-
/* @__PURE__ */
|
|
533
|
+
/* @__PURE__ */ jsxs3("li", {
|
|
534
534
|
children: [
|
|
535
535
|
"Implement the core workflow state machine (from",
|
|
536
536
|
" ",
|
|
537
|
-
/* @__PURE__ */
|
|
537
|
+
/* @__PURE__ */ jsx3("code", {
|
|
538
538
|
children: "@contractspec/lib.presentation-runtime-core"
|
|
539
|
-
}
|
|
539
|
+
}),
|
|
540
540
|
")"
|
|
541
541
|
]
|
|
542
|
-
}
|
|
543
|
-
/* @__PURE__ */
|
|
542
|
+
}),
|
|
543
|
+
/* @__PURE__ */ jsx3("li", {
|
|
544
544
|
children: "Create framework-specific hooks/components for step rendering"
|
|
545
|
-
}
|
|
546
|
-
/* @__PURE__ */
|
|
545
|
+
}),
|
|
546
|
+
/* @__PURE__ */ jsx3("li", {
|
|
547
547
|
children: "Handle validation and submission via the ContractSpec I/O schemas"
|
|
548
|
-
}
|
|
548
|
+
})
|
|
549
549
|
]
|
|
550
|
-
}
|
|
550
|
+
})
|
|
551
551
|
]
|
|
552
|
-
}
|
|
553
|
-
/* @__PURE__ */
|
|
552
|
+
}),
|
|
553
|
+
/* @__PURE__ */ jsx3("div", {
|
|
554
554
|
className: "flex items-center gap-4 pt-4",
|
|
555
|
-
children: /* @__PURE__ */
|
|
555
|
+
children: /* @__PURE__ */ jsxs3(Link3, {
|
|
556
556
|
href: "/docs",
|
|
557
557
|
className: "btn-primary",
|
|
558
558
|
children: [
|
|
559
559
|
"Back to docs ",
|
|
560
|
-
/* @__PURE__ */
|
|
560
|
+
/* @__PURE__ */ jsx3(ChevronRight2, {
|
|
561
561
|
size: 16
|
|
562
|
-
}
|
|
562
|
+
})
|
|
563
563
|
]
|
|
564
|
-
}
|
|
565
|
-
}
|
|
564
|
+
})
|
|
565
|
+
})
|
|
566
566
|
]
|
|
567
|
-
}
|
|
567
|
+
})
|
|
568
568
|
]
|
|
569
|
-
}
|
|
569
|
+
});
|
|
570
570
|
}
|
|
571
571
|
|
|
572
572
|
// src/components/docs/advanced/AdvancedSpecExperimentsPage.tsx
|
|
573
|
-
import {
|
|
573
|
+
import { jsx as jsx4, jsxs as jsxs4 } from "react/jsx-runtime";
|
|
574
574
|
function AdvancedSpecExperimentsPage() {
|
|
575
|
-
return /* @__PURE__ */
|
|
575
|
+
return /* @__PURE__ */ jsxs4("div", {
|
|
576
576
|
className: "space-y-8",
|
|
577
577
|
children: [
|
|
578
|
-
/* @__PURE__ */
|
|
578
|
+
/* @__PURE__ */ jsxs4("div", {
|
|
579
579
|
className: "space-y-4",
|
|
580
580
|
children: [
|
|
581
|
-
/* @__PURE__ */
|
|
581
|
+
/* @__PURE__ */ jsx4("h1", {
|
|
582
582
|
className: "text-4xl font-bold",
|
|
583
583
|
children: "Spec Experiments"
|
|
584
|
-
}
|
|
585
|
-
/* @__PURE__ */
|
|
584
|
+
}),
|
|
585
|
+
/* @__PURE__ */ jsx4("p", {
|
|
586
586
|
className: "text-muted-foreground text-lg",
|
|
587
587
|
children: "Run controlled experiments on ContractSpec operations, gradually shift traffic, and roll back automatically when guardrails trip."
|
|
588
|
-
}
|
|
588
|
+
})
|
|
589
589
|
]
|
|
590
|
-
}
|
|
591
|
-
/* @__PURE__ */
|
|
590
|
+
}),
|
|
591
|
+
/* @__PURE__ */ jsxs4("div", {
|
|
592
592
|
className: "space-y-3",
|
|
593
593
|
children: [
|
|
594
|
-
/* @__PURE__ */
|
|
594
|
+
/* @__PURE__ */ jsx4("h2", {
|
|
595
595
|
className: "text-2xl font-bold",
|
|
596
596
|
children: "Define control + variants"
|
|
597
|
-
}
|
|
598
|
-
/* @__PURE__ */
|
|
597
|
+
}),
|
|
598
|
+
/* @__PURE__ */ jsx4("pre", {
|
|
599
599
|
className: "bg-muted rounded-lg border p-4 text-sm",
|
|
600
600
|
children: `import { SpecExperimentRegistry } from '@contractspec/lib.growth/spec-experiments';
|
|
601
601
|
|
|
@@ -618,17 +618,17 @@ const registry = new SpecExperimentRegistry().register({
|
|
|
618
618
|
rolloutStages: [0.01, 0.1, 0.5, 1],
|
|
619
619
|
guardrails: { errorRateThreshold: 0.02, latencyP99ThresholdMs: 500 },
|
|
620
620
|
});`
|
|
621
|
-
}
|
|
621
|
+
})
|
|
622
622
|
]
|
|
623
|
-
}
|
|
624
|
-
/* @__PURE__ */
|
|
623
|
+
}),
|
|
624
|
+
/* @__PURE__ */ jsxs4("div", {
|
|
625
625
|
className: "space-y-3",
|
|
626
626
|
children: [
|
|
627
|
-
/* @__PURE__ */
|
|
627
|
+
/* @__PURE__ */ jsx4("h2", {
|
|
628
628
|
className: "text-2xl font-bold",
|
|
629
629
|
children: "Attach to runtime"
|
|
630
|
-
}
|
|
631
|
-
/* @__PURE__ */
|
|
630
|
+
}),
|
|
631
|
+
/* @__PURE__ */ jsx4("pre", {
|
|
632
632
|
className: "bg-muted rounded-lg border p-4 text-sm",
|
|
633
633
|
children: `import { createSpecVariantResolver } from '@contractspec/lib.growth/spec-experiments';
|
|
634
634
|
|
|
@@ -636,17 +636,17 @@ adapterContext.specVariantResolver = createSpecVariantResolver({
|
|
|
636
636
|
adapter,
|
|
637
637
|
resolveUserId: (ctx) => ctx.userId ?? ctx.organizationId ?? 'anon',
|
|
638
638
|
});`
|
|
639
|
-
}
|
|
639
|
+
})
|
|
640
640
|
]
|
|
641
|
-
}
|
|
642
|
-
/* @__PURE__ */
|
|
641
|
+
}),
|
|
642
|
+
/* @__PURE__ */ jsxs4("div", {
|
|
643
643
|
className: "space-y-3",
|
|
644
644
|
children: [
|
|
645
|
-
/* @__PURE__ */
|
|
645
|
+
/* @__PURE__ */ jsx4("h2", {
|
|
646
646
|
className: "text-2xl font-bold",
|
|
647
647
|
children: "Track outcomes + auto-rollback"
|
|
648
|
-
}
|
|
649
|
-
/* @__PURE__ */
|
|
648
|
+
}),
|
|
649
|
+
/* @__PURE__ */ jsx4("pre", {
|
|
650
650
|
className: "bg-muted rounded-lg border p-4 text-sm",
|
|
651
651
|
children: `import {
|
|
652
652
|
SpecExperimentAnalyzer,
|
|
@@ -659,10 +659,10 @@ const controller = new SpecExperimentController({
|
|
|
659
659
|
analyzer,
|
|
660
660
|
onRollback: (target, evaluation) => notifyOps(target, evaluation.reasons),
|
|
661
661
|
});`
|
|
662
|
-
}
|
|
662
|
+
})
|
|
663
663
|
]
|
|
664
|
-
}
|
|
665
|
-
/* @__PURE__ */
|
|
664
|
+
}),
|
|
665
|
+
/* @__PURE__ */ jsx4("div", {
|
|
666
666
|
className: "grid gap-4 md:grid-cols-2",
|
|
667
667
|
children: [
|
|
668
668
|
{
|
|
@@ -673,132 +673,132 @@ const controller = new SpecExperimentController({
|
|
|
673
673
|
title: "Multi-stage rollouts",
|
|
674
674
|
description: "Use `rolloutStages` to shift 1% \u2192 10% \u2192 50% \u2192 100%. Guardrails trigger rollbacks automatically."
|
|
675
675
|
}
|
|
676
|
-
].map((card) => /* @__PURE__ */
|
|
676
|
+
].map((card) => /* @__PURE__ */ jsxs4("div", {
|
|
677
677
|
className: "card-subtle space-y-2 p-4",
|
|
678
678
|
children: [
|
|
679
|
-
/* @__PURE__ */
|
|
679
|
+
/* @__PURE__ */ jsx4("h3", {
|
|
680
680
|
className: "text-lg font-semibold",
|
|
681
681
|
children: card.title
|
|
682
|
-
}
|
|
683
|
-
/* @__PURE__ */
|
|
682
|
+
}),
|
|
683
|
+
/* @__PURE__ */ jsx4("p", {
|
|
684
684
|
className: "text-muted-foreground text-sm",
|
|
685
685
|
children: card.description
|
|
686
|
-
}
|
|
686
|
+
})
|
|
687
687
|
]
|
|
688
|
-
}, card.title
|
|
689
|
-
}
|
|
688
|
+
}, card.title))
|
|
689
|
+
})
|
|
690
690
|
]
|
|
691
|
-
}
|
|
691
|
+
});
|
|
692
692
|
}
|
|
693
693
|
|
|
694
694
|
// src/components/docs/advanced/AdvancedTelemetryPage.tsx
|
|
695
695
|
import Link4 from "@contractspec/lib.ui-link";
|
|
696
696
|
import { ChevronRight as ChevronRight3 } from "lucide-react";
|
|
697
|
-
import {
|
|
697
|
+
import { jsx as jsx5, jsxs as jsxs5 } from "react/jsx-runtime";
|
|
698
698
|
function AdvancedTelemetryPage() {
|
|
699
|
-
return /* @__PURE__ */
|
|
699
|
+
return /* @__PURE__ */ jsxs5("div", {
|
|
700
700
|
className: "space-y-8",
|
|
701
701
|
children: [
|
|
702
|
-
/* @__PURE__ */
|
|
702
|
+
/* @__PURE__ */ jsxs5("div", {
|
|
703
703
|
className: "space-y-4",
|
|
704
704
|
children: [
|
|
705
|
-
/* @__PURE__ */
|
|
705
|
+
/* @__PURE__ */ jsx5("h1", {
|
|
706
706
|
className: "text-4xl font-bold",
|
|
707
707
|
children: "Telemetry"
|
|
708
|
-
}
|
|
709
|
-
/* @__PURE__ */
|
|
708
|
+
}),
|
|
709
|
+
/* @__PURE__ */ jsxs5("p", {
|
|
710
710
|
className: "text-muted-foreground",
|
|
711
711
|
children: [
|
|
712
712
|
"A ",
|
|
713
|
-
/* @__PURE__ */
|
|
713
|
+
/* @__PURE__ */ jsx5("strong", {
|
|
714
714
|
children: "TelemetrySpec"
|
|
715
|
-
}
|
|
715
|
+
}),
|
|
716
716
|
" defines what metrics, logs, and traces to collect for observability. ContractSpec automatically instruments your application based on these specs, ensuring you have the visibility you need to monitor, debug, and optimize your system."
|
|
717
717
|
]
|
|
718
|
-
}
|
|
718
|
+
})
|
|
719
719
|
]
|
|
720
|
-
}
|
|
721
|
-
/* @__PURE__ */
|
|
720
|
+
}),
|
|
721
|
+
/* @__PURE__ */ jsxs5("div", {
|
|
722
722
|
className: "space-y-4",
|
|
723
723
|
children: [
|
|
724
|
-
/* @__PURE__ */
|
|
724
|
+
/* @__PURE__ */ jsx5("h2", {
|
|
725
725
|
className: "text-2xl font-bold",
|
|
726
726
|
children: "Why telemetry matters"
|
|
727
|
-
}
|
|
728
|
-
/* @__PURE__ */
|
|
727
|
+
}),
|
|
728
|
+
/* @__PURE__ */ jsx5("p", {
|
|
729
729
|
className: "text-muted-foreground",
|
|
730
730
|
children: "You can't fix what you can't see. Telemetry provides visibility into how your application is performing, where errors are occurring, and how users are interacting with your system. Without proper instrumentation, you're flying blind in production."
|
|
731
|
-
}
|
|
732
|
-
/* @__PURE__ */
|
|
731
|
+
}),
|
|
732
|
+
/* @__PURE__ */ jsx5("p", {
|
|
733
733
|
className: "text-muted-foreground",
|
|
734
734
|
children: "ContractSpec takes a spec-first approach to telemetry: you declare what you want to observe, and runtime adapters instrument operations automatically. This ensures consistent, comprehensive coverage without manual effort."
|
|
735
|
-
}
|
|
735
|
+
})
|
|
736
736
|
]
|
|
737
|
-
}
|
|
738
|
-
/* @__PURE__ */
|
|
737
|
+
}),
|
|
738
|
+
/* @__PURE__ */ jsxs5("div", {
|
|
739
739
|
className: "space-y-4",
|
|
740
740
|
children: [
|
|
741
|
-
/* @__PURE__ */
|
|
741
|
+
/* @__PURE__ */ jsx5("h2", {
|
|
742
742
|
className: "text-2xl font-bold",
|
|
743
743
|
children: "Three pillars of observability"
|
|
744
|
-
}
|
|
745
|
-
/* @__PURE__ */
|
|
744
|
+
}),
|
|
745
|
+
/* @__PURE__ */ jsxs5("div", {
|
|
746
746
|
className: "space-y-3",
|
|
747
747
|
children: [
|
|
748
|
-
/* @__PURE__ */
|
|
748
|
+
/* @__PURE__ */ jsxs5("div", {
|
|
749
749
|
children: [
|
|
750
|
-
/* @__PURE__ */
|
|
750
|
+
/* @__PURE__ */ jsx5("h3", {
|
|
751
751
|
className: "text-lg font-semibold",
|
|
752
752
|
children: "Metrics"
|
|
753
|
-
}
|
|
754
|
-
/* @__PURE__ */
|
|
753
|
+
}),
|
|
754
|
+
/* @__PURE__ */ jsx5("p", {
|
|
755
755
|
className: "text-muted-foreground",
|
|
756
756
|
children: "Numerical measurements collected over time. Examples: request count, error rate, latency percentiles, active users, queue depth. Metrics are cheap to collect and store, making them ideal for high-level monitoring and alerting."
|
|
757
|
-
}
|
|
757
|
+
})
|
|
758
758
|
]
|
|
759
|
-
}
|
|
760
|
-
/* @__PURE__ */
|
|
759
|
+
}),
|
|
760
|
+
/* @__PURE__ */ jsxs5("div", {
|
|
761
761
|
children: [
|
|
762
|
-
/* @__PURE__ */
|
|
762
|
+
/* @__PURE__ */ jsx5("h3", {
|
|
763
763
|
className: "text-lg font-semibold",
|
|
764
764
|
children: "Logs"
|
|
765
|
-
}
|
|
766
|
-
/* @__PURE__ */
|
|
765
|
+
}),
|
|
766
|
+
/* @__PURE__ */ jsx5("p", {
|
|
767
767
|
className: "text-muted-foreground",
|
|
768
768
|
children: 'Timestamped text records of events. Examples: "User 123 logged in", "Payment failed for order 456", "Database connection pool exhausted". Logs provide detailed context for debugging specific issues.'
|
|
769
|
-
}
|
|
769
|
+
})
|
|
770
770
|
]
|
|
771
|
-
}
|
|
772
|
-
/* @__PURE__ */
|
|
771
|
+
}),
|
|
772
|
+
/* @__PURE__ */ jsxs5("div", {
|
|
773
773
|
children: [
|
|
774
|
-
/* @__PURE__ */
|
|
774
|
+
/* @__PURE__ */ jsx5("h3", {
|
|
775
775
|
className: "text-lg font-semibold",
|
|
776
776
|
children: "Traces"
|
|
777
|
-
}
|
|
778
|
-
/* @__PURE__ */
|
|
777
|
+
}),
|
|
778
|
+
/* @__PURE__ */ jsx5("p", {
|
|
779
779
|
className: "text-muted-foreground",
|
|
780
780
|
children: "Records of requests as they flow through your system. A trace shows the complete path of a request\u2014which services it touched, how long each step took, and where errors occurred. Traces are essential for debugging distributed systems."
|
|
781
|
-
}
|
|
781
|
+
})
|
|
782
782
|
]
|
|
783
|
-
}
|
|
783
|
+
})
|
|
784
784
|
]
|
|
785
|
-
}
|
|
785
|
+
})
|
|
786
786
|
]
|
|
787
|
-
}
|
|
788
|
-
/* @__PURE__ */
|
|
787
|
+
}),
|
|
788
|
+
/* @__PURE__ */ jsxs5("div", {
|
|
789
789
|
className: "space-y-4",
|
|
790
790
|
children: [
|
|
791
|
-
/* @__PURE__ */
|
|
791
|
+
/* @__PURE__ */ jsx5("h2", {
|
|
792
792
|
className: "text-2xl font-bold",
|
|
793
793
|
children: "Example TelemetrySpec"
|
|
794
|
-
}
|
|
795
|
-
/* @__PURE__ */
|
|
794
|
+
}),
|
|
795
|
+
/* @__PURE__ */ jsx5("p", {
|
|
796
796
|
className: "text-muted-foreground",
|
|
797
797
|
children: "Here's how telemetry is configured in TypeScript:"
|
|
798
|
-
}
|
|
799
|
-
/* @__PURE__ */
|
|
798
|
+
}),
|
|
799
|
+
/* @__PURE__ */ jsx5("div", {
|
|
800
800
|
className: "bg-background/50 border-border text-muted-foreground overflow-x-auto rounded-lg border p-4 font-mono text-sm",
|
|
801
|
-
children: /* @__PURE__ */
|
|
801
|
+
children: /* @__PURE__ */ jsx5("pre", {
|
|
802
802
|
children: `import { defineTelemetry } from '@contractspec/lib.contracts-spec/telemetry';
|
|
803
803
|
|
|
804
804
|
export const OrderProcessingTelemetry = defineTelemetry({
|
|
@@ -845,303 +845,303 @@ export const OrderProcessingTelemetry = defineTelemetry({
|
|
|
845
845
|
},
|
|
846
846
|
],
|
|
847
847
|
});`
|
|
848
|
-
}
|
|
849
|
-
}
|
|
848
|
+
})
|
|
849
|
+
})
|
|
850
850
|
]
|
|
851
|
-
}
|
|
852
|
-
/* @__PURE__ */
|
|
851
|
+
}),
|
|
852
|
+
/* @__PURE__ */ jsxs5("div", {
|
|
853
853
|
className: "space-y-4",
|
|
854
854
|
children: [
|
|
855
|
-
/* @__PURE__ */
|
|
855
|
+
/* @__PURE__ */ jsx5("h2", {
|
|
856
856
|
className: "text-2xl font-bold",
|
|
857
857
|
children: "Automatic instrumentation"
|
|
858
|
-
}
|
|
859
|
-
/* @__PURE__ */
|
|
858
|
+
}),
|
|
859
|
+
/* @__PURE__ */ jsx5("p", {
|
|
860
860
|
className: "text-muted-foreground",
|
|
861
861
|
children: "ContractSpec automatically instruments:"
|
|
862
|
-
}
|
|
863
|
-
/* @__PURE__ */
|
|
862
|
+
}),
|
|
863
|
+
/* @__PURE__ */ jsxs5("ul", {
|
|
864
864
|
className: "text-muted-foreground list-inside list-disc space-y-2",
|
|
865
865
|
children: [
|
|
866
|
-
/* @__PURE__ */
|
|
866
|
+
/* @__PURE__ */ jsxs5("li", {
|
|
867
867
|
children: [
|
|
868
|
-
/* @__PURE__ */
|
|
868
|
+
/* @__PURE__ */ jsx5("strong", {
|
|
869
869
|
children: "All operations"
|
|
870
|
-
}
|
|
870
|
+
}),
|
|
871
871
|
" \u2013 Request count, latency, error rate per Command/Query"
|
|
872
872
|
]
|
|
873
|
-
}
|
|
874
|
-
/* @__PURE__ */
|
|
873
|
+
}),
|
|
874
|
+
/* @__PURE__ */ jsxs5("li", {
|
|
875
875
|
children: [
|
|
876
|
-
/* @__PURE__ */
|
|
876
|
+
/* @__PURE__ */ jsx5("strong", {
|
|
877
877
|
children: "All workflows"
|
|
878
|
-
}
|
|
878
|
+
}),
|
|
879
879
|
" \u2013 Step execution time, retry counts, compensation events"
|
|
880
880
|
]
|
|
881
|
-
}
|
|
882
|
-
/* @__PURE__ */
|
|
881
|
+
}),
|
|
882
|
+
/* @__PURE__ */ jsxs5("li", {
|
|
883
883
|
children: [
|
|
884
|
-
/* @__PURE__ */
|
|
884
|
+
/* @__PURE__ */ jsx5("strong", {
|
|
885
885
|
children: "All data views"
|
|
886
|
-
}
|
|
886
|
+
}),
|
|
887
887
|
" \u2013 Query execution time, result set size"
|
|
888
888
|
]
|
|
889
|
-
}
|
|
890
|
-
/* @__PURE__ */
|
|
889
|
+
}),
|
|
890
|
+
/* @__PURE__ */ jsxs5("li", {
|
|
891
891
|
children: [
|
|
892
|
-
/* @__PURE__ */
|
|
892
|
+
/* @__PURE__ */ jsx5("strong", {
|
|
893
893
|
children: "All policy decisions"
|
|
894
|
-
}
|
|
894
|
+
}),
|
|
895
895
|
" \u2013 Decision time, permit/deny ratio"
|
|
896
896
|
]
|
|
897
|
-
}
|
|
898
|
-
/* @__PURE__ */
|
|
897
|
+
}),
|
|
898
|
+
/* @__PURE__ */ jsxs5("li", {
|
|
899
899
|
children: [
|
|
900
|
-
/* @__PURE__ */
|
|
900
|
+
/* @__PURE__ */ jsx5("strong", {
|
|
901
901
|
children: "System resources"
|
|
902
|
-
}
|
|
902
|
+
}),
|
|
903
903
|
" \u2013 CPU, memory, disk, network usage"
|
|
904
904
|
]
|
|
905
|
-
}
|
|
905
|
+
})
|
|
906
906
|
]
|
|
907
|
-
}
|
|
908
|
-
/* @__PURE__ */
|
|
907
|
+
}),
|
|
908
|
+
/* @__PURE__ */ jsx5("p", {
|
|
909
909
|
className: "text-muted-foreground",
|
|
910
910
|
children: "You don't need to add instrumentation code manually\u2014the runtime handles it based on your specs."
|
|
911
|
-
}
|
|
911
|
+
})
|
|
912
912
|
]
|
|
913
|
-
}
|
|
914
|
-
/* @__PURE__ */
|
|
913
|
+
}),
|
|
914
|
+
/* @__PURE__ */ jsxs5("div", {
|
|
915
915
|
className: "space-y-4",
|
|
916
916
|
children: [
|
|
917
|
-
/* @__PURE__ */
|
|
917
|
+
/* @__PURE__ */ jsx5("h2", {
|
|
918
918
|
className: "text-2xl font-bold",
|
|
919
919
|
children: "Integration with observability platforms"
|
|
920
|
-
}
|
|
921
|
-
/* @__PURE__ */
|
|
920
|
+
}),
|
|
921
|
+
/* @__PURE__ */ jsx5("p", {
|
|
922
922
|
className: "text-muted-foreground",
|
|
923
923
|
children: "ContractSpec supports multiple observability backends:"
|
|
924
|
-
}
|
|
925
|
-
/* @__PURE__ */
|
|
924
|
+
}),
|
|
925
|
+
/* @__PURE__ */ jsxs5("ul", {
|
|
926
926
|
className: "text-muted-foreground list-inside list-disc space-y-2",
|
|
927
927
|
children: [
|
|
928
|
-
/* @__PURE__ */
|
|
928
|
+
/* @__PURE__ */ jsxs5("li", {
|
|
929
929
|
children: [
|
|
930
|
-
/* @__PURE__ */
|
|
930
|
+
/* @__PURE__ */ jsx5("strong", {
|
|
931
931
|
children: "Prometheus"
|
|
932
|
-
}
|
|
932
|
+
}),
|
|
933
933
|
" \u2013 For metrics collection and alerting"
|
|
934
934
|
]
|
|
935
|
-
}
|
|
936
|
-
/* @__PURE__ */
|
|
935
|
+
}),
|
|
936
|
+
/* @__PURE__ */ jsxs5("li", {
|
|
937
937
|
children: [
|
|
938
|
-
/* @__PURE__ */
|
|
938
|
+
/* @__PURE__ */ jsx5("strong", {
|
|
939
939
|
children: "Grafana"
|
|
940
|
-
}
|
|
940
|
+
}),
|
|
941
941
|
" \u2013 For dashboards and visualization"
|
|
942
942
|
]
|
|
943
|
-
}
|
|
944
|
-
/* @__PURE__ */
|
|
943
|
+
}),
|
|
944
|
+
/* @__PURE__ */ jsxs5("li", {
|
|
945
945
|
children: [
|
|
946
|
-
/* @__PURE__ */
|
|
946
|
+
/* @__PURE__ */ jsx5("strong", {
|
|
947
947
|
children: "Jaeger / Tempo"
|
|
948
|
-
}
|
|
948
|
+
}),
|
|
949
949
|
" \u2013 For distributed tracing"
|
|
950
950
|
]
|
|
951
|
-
}
|
|
952
|
-
/* @__PURE__ */
|
|
951
|
+
}),
|
|
952
|
+
/* @__PURE__ */ jsxs5("li", {
|
|
953
953
|
children: [
|
|
954
|
-
/* @__PURE__ */
|
|
954
|
+
/* @__PURE__ */ jsx5("strong", {
|
|
955
955
|
children: "Loki"
|
|
956
|
-
}
|
|
956
|
+
}),
|
|
957
957
|
" \u2013 For log aggregation"
|
|
958
958
|
]
|
|
959
|
-
}
|
|
960
|
-
/* @__PURE__ */
|
|
959
|
+
}),
|
|
960
|
+
/* @__PURE__ */ jsxs5("li", {
|
|
961
961
|
children: [
|
|
962
|
-
/* @__PURE__ */
|
|
962
|
+
/* @__PURE__ */ jsx5("strong", {
|
|
963
963
|
children: "Datadog"
|
|
964
|
-
}
|
|
964
|
+
}),
|
|
965
965
|
" \u2013 All-in-one observability platform"
|
|
966
966
|
]
|
|
967
|
-
}
|
|
968
|
-
/* @__PURE__ */
|
|
967
|
+
}),
|
|
968
|
+
/* @__PURE__ */ jsxs5("li", {
|
|
969
969
|
children: [
|
|
970
|
-
/* @__PURE__ */
|
|
970
|
+
/* @__PURE__ */ jsx5("strong", {
|
|
971
971
|
children: "New Relic"
|
|
972
|
-
}
|
|
972
|
+
}),
|
|
973
973
|
" \u2013 Application performance monitoring"
|
|
974
974
|
]
|
|
975
|
-
}
|
|
976
|
-
/* @__PURE__ */
|
|
975
|
+
}),
|
|
976
|
+
/* @__PURE__ */ jsxs5("li", {
|
|
977
977
|
children: [
|
|
978
|
-
/* @__PURE__ */
|
|
978
|
+
/* @__PURE__ */ jsx5("strong", {
|
|
979
979
|
children: "Honeycomb"
|
|
980
|
-
}
|
|
980
|
+
}),
|
|
981
981
|
" \u2013 Observability for complex systems"
|
|
982
982
|
]
|
|
983
|
-
}
|
|
983
|
+
})
|
|
984
984
|
]
|
|
985
|
-
}
|
|
986
|
-
/* @__PURE__ */
|
|
985
|
+
}),
|
|
986
|
+
/* @__PURE__ */ jsx5("p", {
|
|
987
987
|
className: "text-muted-foreground",
|
|
988
988
|
children: "You can configure multiple backends and send telemetry to all of them simultaneously."
|
|
989
|
-
}
|
|
989
|
+
})
|
|
990
990
|
]
|
|
991
|
-
}
|
|
992
|
-
/* @__PURE__ */
|
|
991
|
+
}),
|
|
992
|
+
/* @__PURE__ */ jsxs5("div", {
|
|
993
993
|
className: "space-y-4",
|
|
994
994
|
children: [
|
|
995
|
-
/* @__PURE__ */
|
|
995
|
+
/* @__PURE__ */ jsx5("h2", {
|
|
996
996
|
className: "text-2xl font-bold",
|
|
997
997
|
children: "Sampling and performance"
|
|
998
|
-
}
|
|
999
|
-
/* @__PURE__ */
|
|
998
|
+
}),
|
|
999
|
+
/* @__PURE__ */ jsx5("p", {
|
|
1000
1000
|
className: "text-muted-foreground",
|
|
1001
1001
|
children: "Collecting telemetry has a cost\u2014CPU, memory, network bandwidth, and storage. ContractSpec provides several mechanisms to control overhead:"
|
|
1002
|
-
}
|
|
1003
|
-
/* @__PURE__ */
|
|
1002
|
+
}),
|
|
1003
|
+
/* @__PURE__ */ jsxs5("ul", {
|
|
1004
1004
|
className: "text-muted-foreground list-inside list-disc space-y-2",
|
|
1005
1005
|
children: [
|
|
1006
|
-
/* @__PURE__ */
|
|
1006
|
+
/* @__PURE__ */ jsxs5("li", {
|
|
1007
1007
|
children: [
|
|
1008
|
-
/* @__PURE__ */
|
|
1008
|
+
/* @__PURE__ */ jsx5("strong", {
|
|
1009
1009
|
children: "Sampling"
|
|
1010
|
-
}
|
|
1010
|
+
}),
|
|
1011
1011
|
" \u2013 Trace only a percentage of requests (e.g., 10%)"
|
|
1012
1012
|
]
|
|
1013
|
-
}
|
|
1014
|
-
/* @__PURE__ */
|
|
1013
|
+
}),
|
|
1014
|
+
/* @__PURE__ */ jsxs5("li", {
|
|
1015
1015
|
children: [
|
|
1016
|
-
/* @__PURE__ */
|
|
1016
|
+
/* @__PURE__ */ jsx5("strong", {
|
|
1017
1017
|
children: "Adaptive sampling"
|
|
1018
|
-
}
|
|
1018
|
+
}),
|
|
1019
1019
|
" \u2013 Automatically reduce sampling rate under high load"
|
|
1020
1020
|
]
|
|
1021
|
-
}
|
|
1022
|
-
/* @__PURE__ */
|
|
1021
|
+
}),
|
|
1022
|
+
/* @__PURE__ */ jsxs5("li", {
|
|
1023
1023
|
children: [
|
|
1024
|
-
/* @__PURE__ */
|
|
1024
|
+
/* @__PURE__ */ jsx5("strong", {
|
|
1025
1025
|
children: "Tail-based sampling"
|
|
1026
|
-
}
|
|
1026
|
+
}),
|
|
1027
1027
|
" \u2013 Keep traces for failed requests, sample successful ones"
|
|
1028
1028
|
]
|
|
1029
|
-
}
|
|
1030
|
-
/* @__PURE__ */
|
|
1029
|
+
}),
|
|
1030
|
+
/* @__PURE__ */ jsxs5("li", {
|
|
1031
1031
|
children: [
|
|
1032
|
-
/* @__PURE__ */
|
|
1032
|
+
/* @__PURE__ */ jsx5("strong", {
|
|
1033
1033
|
children: "Field redaction"
|
|
1034
|
-
}
|
|
1034
|
+
}),
|
|
1035
1035
|
" \u2013 Remove sensitive data from traces and logs"
|
|
1036
1036
|
]
|
|
1037
|
-
}
|
|
1038
|
-
/* @__PURE__ */
|
|
1037
|
+
}),
|
|
1038
|
+
/* @__PURE__ */ jsxs5("li", {
|
|
1039
1039
|
children: [
|
|
1040
|
-
/* @__PURE__ */
|
|
1040
|
+
/* @__PURE__ */ jsx5("strong", {
|
|
1041
1041
|
children: "Aggregation"
|
|
1042
|
-
}
|
|
1042
|
+
}),
|
|
1043
1043
|
" \u2013 Pre-aggregate metrics before sending to reduce network traffic"
|
|
1044
1044
|
]
|
|
1045
|
-
}
|
|
1045
|
+
})
|
|
1046
1046
|
]
|
|
1047
|
-
}
|
|
1047
|
+
})
|
|
1048
1048
|
]
|
|
1049
|
-
}
|
|
1050
|
-
/* @__PURE__ */
|
|
1049
|
+
}),
|
|
1050
|
+
/* @__PURE__ */ jsxs5("div", {
|
|
1051
1051
|
className: "space-y-4",
|
|
1052
1052
|
children: [
|
|
1053
|
-
/* @__PURE__ */
|
|
1053
|
+
/* @__PURE__ */ jsx5("h2", {
|
|
1054
1054
|
className: "text-2xl font-bold",
|
|
1055
1055
|
children: "Best practices"
|
|
1056
|
-
}
|
|
1057
|
-
/* @__PURE__ */
|
|
1056
|
+
}),
|
|
1057
|
+
/* @__PURE__ */ jsxs5("ul", {
|
|
1058
1058
|
className: "text-muted-foreground list-inside list-disc space-y-2",
|
|
1059
1059
|
children: [
|
|
1060
|
-
/* @__PURE__ */
|
|
1060
|
+
/* @__PURE__ */ jsx5("li", {
|
|
1061
1061
|
children: "Start with high-level metrics (request rate, error rate, latency) and add more detailed instrumentation as needed."
|
|
1062
|
-
}
|
|
1063
|
-
/* @__PURE__ */
|
|
1062
|
+
}),
|
|
1063
|
+
/* @__PURE__ */ jsx5("li", {
|
|
1064
1064
|
children: "Use structured logging\u2014log events with structured fields, not free-form text."
|
|
1065
|
-
}
|
|
1066
|
-
/* @__PURE__ */
|
|
1065
|
+
}),
|
|
1066
|
+
/* @__PURE__ */ jsx5("li", {
|
|
1067
1067
|
children: "Set up alerts for critical metrics so you're notified when things go wrong."
|
|
1068
|
-
}
|
|
1069
|
-
/* @__PURE__ */
|
|
1068
|
+
}),
|
|
1069
|
+
/* @__PURE__ */ jsx5("li", {
|
|
1070
1070
|
children: "Use traces to debug complex issues\u2014they show the complete picture of a request."
|
|
1071
|
-
}
|
|
1072
|
-
/* @__PURE__ */
|
|
1071
|
+
}),
|
|
1072
|
+
/* @__PURE__ */ jsx5("li", {
|
|
1073
1073
|
children: "Redact sensitive data from logs and traces to comply with privacy regulations."
|
|
1074
|
-
}
|
|
1075
|
-
/* @__PURE__ */
|
|
1074
|
+
}),
|
|
1075
|
+
/* @__PURE__ */ jsx5("li", {
|
|
1076
1076
|
children: "Review dashboards regularly to understand normal behavior\u2014this makes anomalies easier to spot."
|
|
1077
|
-
}
|
|
1078
|
-
/* @__PURE__ */
|
|
1077
|
+
}),
|
|
1078
|
+
/* @__PURE__ */ jsx5("li", {
|
|
1079
1079
|
children: "Use sampling to control costs, but always trace errors and slow requests."
|
|
1080
|
-
}
|
|
1080
|
+
})
|
|
1081
1081
|
]
|
|
1082
|
-
}
|
|
1082
|
+
})
|
|
1083
1083
|
]
|
|
1084
|
-
}
|
|
1085
|
-
/* @__PURE__ */
|
|
1084
|
+
}),
|
|
1085
|
+
/* @__PURE__ */ jsxs5("div", {
|
|
1086
1086
|
className: "flex items-center gap-4 pt-4",
|
|
1087
1087
|
children: [
|
|
1088
|
-
/* @__PURE__ */
|
|
1088
|
+
/* @__PURE__ */ jsx5(Link4, {
|
|
1089
1089
|
href: "/docs/advanced/mcp",
|
|
1090
1090
|
className: "btn-ghost",
|
|
1091
1091
|
children: "Previous: MCP Adapters"
|
|
1092
|
-
}
|
|
1093
|
-
/* @__PURE__ */
|
|
1092
|
+
}),
|
|
1093
|
+
/* @__PURE__ */ jsxs5(Link4, {
|
|
1094
1094
|
href: "/docs/comparison",
|
|
1095
1095
|
className: "btn-primary",
|
|
1096
1096
|
children: [
|
|
1097
1097
|
"Next: Comparison ",
|
|
1098
|
-
/* @__PURE__ */
|
|
1098
|
+
/* @__PURE__ */ jsx5(ChevronRight3, {
|
|
1099
1099
|
size: 16
|
|
1100
|
-
}
|
|
1100
|
+
})
|
|
1101
1101
|
]
|
|
1102
|
-
}
|
|
1102
|
+
})
|
|
1103
1103
|
]
|
|
1104
|
-
}
|
|
1104
|
+
})
|
|
1105
1105
|
]
|
|
1106
|
-
}
|
|
1106
|
+
});
|
|
1107
1107
|
}
|
|
1108
1108
|
|
|
1109
1109
|
// src/components/docs/advanced/AdvancedWorkflowMonitoringPage.tsx
|
|
1110
|
-
import {
|
|
1110
|
+
import { jsx as jsx6, jsxs as jsxs6 } from "react/jsx-runtime";
|
|
1111
1111
|
function AdvancedWorkflowMonitoringPage() {
|
|
1112
|
-
return /* @__PURE__ */
|
|
1112
|
+
return /* @__PURE__ */ jsxs6("div", {
|
|
1113
1113
|
className: "space-y-8",
|
|
1114
1114
|
children: [
|
|
1115
|
-
/* @__PURE__ */
|
|
1115
|
+
/* @__PURE__ */ jsxs6("div", {
|
|
1116
1116
|
className: "space-y-4",
|
|
1117
1117
|
children: [
|
|
1118
|
-
/* @__PURE__ */
|
|
1118
|
+
/* @__PURE__ */ jsx6("h1", {
|
|
1119
1119
|
className: "text-4xl font-bold",
|
|
1120
1120
|
children: "Workflow Monitoring"
|
|
1121
|
-
}
|
|
1122
|
-
/* @__PURE__ */
|
|
1121
|
+
}),
|
|
1122
|
+
/* @__PURE__ */ jsx6("p", {
|
|
1123
1123
|
className: "text-muted-foreground text-lg",
|
|
1124
1124
|
children: "Production workflows need robust observability. ContractSpec provides SLA monitoring, distributed tracing, and audit logging out of the box."
|
|
1125
|
-
}
|
|
1125
|
+
})
|
|
1126
1126
|
]
|
|
1127
|
-
}
|
|
1128
|
-
/* @__PURE__ */
|
|
1127
|
+
}),
|
|
1128
|
+
/* @__PURE__ */ jsxs6("div", {
|
|
1129
1129
|
className: "space-y-4",
|
|
1130
1130
|
children: [
|
|
1131
|
-
/* @__PURE__ */
|
|
1131
|
+
/* @__PURE__ */ jsx6("h2", {
|
|
1132
1132
|
className: "text-2xl font-bold",
|
|
1133
1133
|
children: "SLA Monitoring"
|
|
1134
|
-
}
|
|
1135
|
-
/* @__PURE__ */
|
|
1134
|
+
}),
|
|
1135
|
+
/* @__PURE__ */ jsxs6("p", {
|
|
1136
1136
|
children: [
|
|
1137
1137
|
"Use the ",
|
|
1138
|
-
/* @__PURE__ */
|
|
1138
|
+
/* @__PURE__ */ jsx6("code", {
|
|
1139
1139
|
children: "SLAMonitor"
|
|
1140
|
-
}
|
|
1140
|
+
}),
|
|
1141
1141
|
" to detect when workflows or individual steps exceed their budgeted duration."
|
|
1142
1142
|
]
|
|
1143
|
-
}
|
|
1144
|
-
/* @__PURE__ */
|
|
1143
|
+
}),
|
|
1144
|
+
/* @__PURE__ */ jsx6("pre", {
|
|
1145
1145
|
className: "bg-muted rounded-lg border p-4 text-sm",
|
|
1146
1146
|
children: `import { SLAMonitor } from '@contractspec/lib.contracts-spec/workflow/sla-monitor';
|
|
1147
1147
|
|
|
@@ -1154,62 +1154,62 @@ const monitor = new SLAMonitor((event, payload) => {
|
|
|
1154
1154
|
|
|
1155
1155
|
// Check periodically
|
|
1156
1156
|
monitor.check(currentState, workflowSpec);`
|
|
1157
|
-
}
|
|
1157
|
+
})
|
|
1158
1158
|
]
|
|
1159
|
-
}
|
|
1160
|
-
/* @__PURE__ */
|
|
1159
|
+
}),
|
|
1160
|
+
/* @__PURE__ */ jsxs6("div", {
|
|
1161
1161
|
className: "space-y-4",
|
|
1162
1162
|
children: [
|
|
1163
|
-
/* @__PURE__ */
|
|
1163
|
+
/* @__PURE__ */ jsx6("h2", {
|
|
1164
1164
|
className: "text-2xl font-bold",
|
|
1165
1165
|
children: "Telemetry & Tracing"
|
|
1166
|
-
}
|
|
1167
|
-
/* @__PURE__ */
|
|
1166
|
+
}),
|
|
1167
|
+
/* @__PURE__ */ jsx6("p", {
|
|
1168
1168
|
children: "Workflows automatically generate OpenTelemetry spans for:"
|
|
1169
|
-
}
|
|
1170
|
-
/* @__PURE__ */
|
|
1169
|
+
}),
|
|
1170
|
+
/* @__PURE__ */ jsxs6("ul", {
|
|
1171
1171
|
className: "list-disc space-y-2 pl-6",
|
|
1172
1172
|
children: [
|
|
1173
|
-
/* @__PURE__ */
|
|
1173
|
+
/* @__PURE__ */ jsx6("li", {
|
|
1174
1174
|
children: "Overall workflow execution"
|
|
1175
|
-
}
|
|
1176
|
-
/* @__PURE__ */
|
|
1175
|
+
}),
|
|
1176
|
+
/* @__PURE__ */ jsx6("li", {
|
|
1177
1177
|
children: "Individual steps"
|
|
1178
|
-
}
|
|
1179
|
-
/* @__PURE__ */
|
|
1178
|
+
}),
|
|
1179
|
+
/* @__PURE__ */ jsx6("li", {
|
|
1180
1180
|
children: "Retries and compensation"
|
|
1181
|
-
}
|
|
1181
|
+
})
|
|
1182
1182
|
]
|
|
1183
|
-
}
|
|
1184
|
-
/* @__PURE__ */
|
|
1183
|
+
}),
|
|
1184
|
+
/* @__PURE__ */ jsx6("p", {
|
|
1185
1185
|
children: "Configure your OpenTelemetry exporter to send traces to Jaeger, Datadog, or Honeycomb."
|
|
1186
|
-
}
|
|
1186
|
+
})
|
|
1187
1187
|
]
|
|
1188
|
-
}
|
|
1189
|
-
/* @__PURE__ */
|
|
1188
|
+
}),
|
|
1189
|
+
/* @__PURE__ */ jsxs6("div", {
|
|
1190
1190
|
className: "space-y-4",
|
|
1191
1191
|
children: [
|
|
1192
|
-
/* @__PURE__ */
|
|
1192
|
+
/* @__PURE__ */ jsx6("h2", {
|
|
1193
1193
|
className: "text-2xl font-bold",
|
|
1194
1194
|
children: "Dashboarding"
|
|
1195
|
-
}
|
|
1196
|
-
/* @__PURE__ */
|
|
1195
|
+
}),
|
|
1196
|
+
/* @__PURE__ */ jsxs6("p", {
|
|
1197
1197
|
children: [
|
|
1198
1198
|
"You can build a custom dashboard using ",
|
|
1199
|
-
/* @__PURE__ */
|
|
1199
|
+
/* @__PURE__ */ jsx6("code", {
|
|
1200
1200
|
children: "DataViews"
|
|
1201
|
-
}
|
|
1201
|
+
}),
|
|
1202
1202
|
" over your workflow state database. See the DataViews tutorial for how to visualize ",
|
|
1203
|
-
/* @__PURE__ */
|
|
1203
|
+
/* @__PURE__ */ jsx6("code", {
|
|
1204
1204
|
children: "WorkflowState"
|
|
1205
|
-
}
|
|
1205
|
+
}),
|
|
1206
1206
|
" records."
|
|
1207
1207
|
]
|
|
1208
|
-
}
|
|
1208
|
+
})
|
|
1209
1209
|
]
|
|
1210
|
-
}
|
|
1210
|
+
})
|
|
1211
1211
|
]
|
|
1212
|
-
}
|
|
1212
|
+
});
|
|
1213
1213
|
}
|
|
1214
1214
|
export {
|
|
1215
1215
|
AdvancedWorkflowMonitoringPage,
|