@contractspec/bundle.library 3.8.10 → 3.8.11
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 +606 -594
- package/CHANGELOG.md +37 -0
- package/dist/application/context-storage/index.js +1 -28
- package/dist/application/index.js +13 -2133
- package/dist/application/mcp/cliMcp.js +4 -452
- package/dist/application/mcp/common.js +1 -193
- package/dist/application/mcp/contractsMcp.js +2 -549
- package/dist/application/mcp/contractsMcpResources.js +2 -123
- package/dist/application/mcp/contractsMcpTools.js +1 -199
- package/dist/application/mcp/docsMcp.catalog.js +3 -381
- package/dist/application/mcp/docsMcp.data.js +1 -147
- package/dist/application/mcp/docsMcp.js +6 -1039
- package/dist/application/mcp/docsMcp.prompts.js +6 -521
- package/dist/application/mcp/docsMcp.reference.js +3 -235
- package/dist/application/mcp/docsMcp.resources.js +3 -519
- package/dist/application/mcp/docsMcp.tools.js +3 -518
- package/dist/application/mcp/index.js +13 -2106
- package/dist/application/mcp/internalMcp.js +2 -410
- package/dist/application/mcp/normalizeMcpRequest.js +1 -21
- package/dist/application/mcp/providerRankingMcp.js +1 -530
- package/dist/bundles/LibraryBundle.js +1 -138
- package/dist/bundles/index.js +1 -138
- package/dist/components/docs/DocsIndexPage.js +2 -912
- package/dist/components/docs/advanced/AdvancedMCPPage.js +4 -271
- package/dist/components/docs/advanced/AdvancedOverlayEditorPage.js +1 -107
- package/dist/components/docs/advanced/AdvancedRenderersPage.js +2 -118
- package/dist/components/docs/advanced/AdvancedSpecExperimentsPage.js +4 -92
- package/dist/components/docs/advanced/AdvancedTelemetryPage.js +2 -373
- package/dist/components/docs/advanced/AdvancedWorkflowMonitoringPage.js +2 -99
- package/dist/components/docs/advanced/index.js +10 -1055
- package/dist/components/docs/architecture/ArchitectureAppConfigPage.js +6 -243
- package/dist/components/docs/architecture/ArchitectureControlPlanePage.js +3 -160
- package/dist/components/docs/architecture/ArchitectureIntegrationBindingPage.js +7 -259
- package/dist/components/docs/architecture/ArchitectureKnowledgeBindingPage.js +6 -374
- package/dist/components/docs/architecture/ArchitectureMultiTenancyPage.js +2 -166
- package/dist/components/docs/architecture/ArchitectureOverviewPage.js +1 -143
- package/dist/components/docs/architecture/index.js +20 -1340
- package/dist/components/docs/comparison/ComparisonAutomationPlatformsPage.js +1 -245
- package/dist/components/docs/comparison/ComparisonEnterprisePlatformsPage.js +1 -230
- package/dist/components/docs/comparison/ComparisonInternalToolBuildersPage.js +1 -245
- package/dist/components/docs/comparison/ComparisonOverviewPage.js +1 -202
- package/dist/components/docs/comparison/ComparisonWindmillPage.js +1 -254
- package/dist/components/docs/comparison/ComparisonWorkflowEnginesPage.js +1 -339
- package/dist/components/docs/comparison/index.js +1 -1510
- package/dist/components/docs/docsManifest.js +1 -611
- package/dist/components/docs/docsManifest.test.d.ts +1 -0
- package/dist/components/docs/ecosystem/IntegrationsPage.js +2 -103
- package/dist/components/docs/ecosystem/PluginsPage.js +13 -179
- package/dist/components/docs/ecosystem/RegistryPage.js +7 -100
- package/dist/components/docs/ecosystem/TemplatesPage.js +3 -141
- package/dist/components/docs/ecosystem/ecosystem.docblocks.js +2 -48
- package/dist/components/docs/ecosystem/index.js +23 -569
- package/dist/components/docs/examples/DocsExamplesPage.js +4 -124
- package/dist/components/docs/examples/ExampleShowcasePage.js +4 -244
- package/dist/components/docs/examples/exampleShowcaseData.js +4 -39
- package/dist/components/docs/examples/index.js +4 -330
- package/dist/components/docs/generated/docs-index.generated.js +1 -5
- package/dist/components/docs/generated/index.js +1 -74
- package/dist/components/docs/generated/loader.js +1 -74
- package/dist/components/docs/getting-started/CLIPage.js +4 -271
- package/dist/components/docs/getting-started/CompatibilityPage.js +1 -173
- package/dist/components/docs/getting-started/DataViewTutorialPage.js +4 -134
- package/dist/components/docs/getting-started/DeveloperToolsPage.js +1 -194
- package/dist/components/docs/getting-started/HelloWorldPage.js +5 -183
- package/dist/components/docs/getting-started/InstallationPage.js +3 -154
- package/dist/components/docs/getting-started/StartHerePage.js +2 -129
- package/dist/components/docs/getting-started/TroubleshootingPage.js +2 -168
- package/dist/components/docs/getting-started/VSCodeExtensionPage.js +1 -432
- package/dist/components/docs/getting-started/getting-started.docblocks.js +4 -41
- package/dist/components/docs/getting-started/index.js +18 -1869
- package/dist/components/docs/guides/GuideCIDiffGatingPage.js +2 -196
- package/dist/components/docs/guides/GuideConnectInRepoPage.d.ts +1 -0
- package/dist/components/docs/guides/GuideConnectInRepoPage.js +44 -0
- package/dist/components/docs/guides/GuideContractTypesPage.js +6 -541
- package/dist/components/docs/guides/GuideDocsPipelinePage.js +3 -207
- package/dist/components/docs/guides/GuideFirstModuleBundlePage.d.ts +1 -0
- package/dist/components/docs/guides/GuideFirstModuleBundlePage.js +76 -0
- package/dist/components/docs/guides/GuideGenerateDocsClientsSchemasPage.js +2 -209
- package/dist/components/docs/guides/GuideHostBuilderWorkbenchPage.d.ts +1 -0
- package/dist/components/docs/guides/GuideHostBuilderWorkbenchPage.js +70 -0
- package/dist/components/docs/guides/GuideImportExistingCodebasesPage.js +8 -754
- package/dist/components/docs/guides/GuideNextjsOneEndpointPage.js +6 -268
- package/dist/components/docs/guides/GuideSpecValidationTypingPage.js +4 -196
- package/dist/components/docs/guides/GuidesIndexPage.js +2 -169
- package/dist/components/docs/guides/guides.docblocks.js +11 -75
- package/dist/components/docs/guides/index.d.ts +3 -0
- package/dist/components/docs/guides/index.js +213 -2428
- package/dist/components/docs/index.js +542 -24310
- package/dist/components/docs/integrations/IntegrationsCircuitBreakersPage.js +2 -42
- package/dist/components/docs/integrations/IntegrationsElevenLabsPage.js +3 -105
- package/dist/components/docs/integrations/IntegrationsGithubPage.js +3 -142
- package/dist/components/docs/integrations/IntegrationsGmailPage.js +3 -109
- package/dist/components/docs/integrations/IntegrationsGoogleCalendarPage.js +3 -79
- package/dist/components/docs/integrations/IntegrationsHealthRoutingPage.js +3 -146
- package/dist/components/docs/integrations/IntegrationsMistralPage.js +5 -150
- package/dist/components/docs/integrations/IntegrationsOpenAIPage.js +5 -140
- package/dist/components/docs/integrations/IntegrationsOverviewPage.js +1 -160
- package/dist/components/docs/integrations/IntegrationsPostmarkPage.js +4 -218
- package/dist/components/docs/integrations/IntegrationsPowensPage.js +4 -300
- package/dist/components/docs/integrations/IntegrationsQdrantPage.js +5 -111
- package/dist/components/docs/integrations/IntegrationsResendPage.js +3 -102
- package/dist/components/docs/integrations/IntegrationsS3Page.js +4 -124
- package/dist/components/docs/integrations/IntegrationsSlackPage.js +3 -144
- package/dist/components/docs/integrations/IntegrationsSpecModelPage.js +7 -290
- package/dist/components/docs/integrations/IntegrationsStripePage.js +6 -327
- package/dist/components/docs/integrations/IntegrationsTwilioPage.js +3 -128
- package/dist/components/docs/integrations/IntegrationsWhatsappMetaPage.js +2 -146
- package/dist/components/docs/integrations/IntegrationsWhatsappTwilioPage.js +2 -156
- package/dist/components/docs/integrations/index.js +52 -3100
- package/dist/components/docs/intent/ContractFirstApiPage.js +2 -126
- package/dist/components/docs/intent/DeterministicCodegenPage.js +2 -148
- package/dist/components/docs/intent/GenerateClientFromSchemaPage.js +7 -207
- package/dist/components/docs/intent/OpenapiAlternativePage.js +3 -201
- package/dist/components/docs/intent/SchemaValidationTypescriptPage.js +4 -144
- package/dist/components/docs/intent/SpecDrivenDevelopmentPage.js +2 -126
- package/dist/components/docs/intent/index.js +15 -1135
- package/dist/components/docs/intent/intent-pages.docblocks.js +1 -201
- package/dist/components/docs/knowledge/KnowledgeCategoriesPage.js +6 -750
- package/dist/components/docs/knowledge/KnowledgeExamplesPage.js +4 -175
- package/dist/components/docs/knowledge/KnowledgeOverviewPage.js +1 -116
- package/dist/components/docs/knowledge/KnowledgeSourcesPage.js +8 -391
- package/dist/components/docs/knowledge/KnowledgeSpacesPage.js +6 -302
- package/dist/components/docs/knowledge/index.js +21 -1730
- package/dist/components/docs/libraries/LibrariesAccessibilityPage.js +3 -198
- package/dist/components/docs/libraries/LibrariesAiAgentPage.js +3 -141
- package/dist/components/docs/libraries/LibrariesAnalyticsPage.js +4 -80
- package/dist/components/docs/libraries/LibrariesContentGenPage.js +2 -100
- package/dist/components/docs/libraries/LibrariesContractsPage.js +2 -284
- package/dist/components/docs/libraries/LibrariesCostTrackingPage.js +3 -112
- package/dist/components/docs/libraries/LibrariesDataBackendPage.js +2 -166
- package/dist/components/docs/libraries/LibrariesDataViewsPage.js +3 -186
- package/dist/components/docs/libraries/LibrariesDesignSystemPage.js +4 -279
- package/dist/components/docs/libraries/LibrariesEvolutionPage.js +4 -127
- package/dist/components/docs/libraries/LibrariesGraphQLPage.js +2 -173
- package/dist/components/docs/libraries/LibrariesGrowthPage.js +3 -88
- package/dist/components/docs/libraries/LibrariesMultiTenancyPage.js +3 -108
- package/dist/components/docs/libraries/LibrariesObservabilityPage.js +5 -130
- package/dist/components/docs/libraries/LibrariesOverlayEnginePage.js +4 -110
- package/dist/components/docs/libraries/LibrariesOverviewPage.js +1 -170
- package/dist/components/docs/libraries/LibrariesPersonalizationPage.js +4 -114
- package/dist/components/docs/libraries/LibrariesProgressiveDeliveryPage.js +3 -132
- package/dist/components/docs/libraries/LibrariesResiliencePage.js +4 -120
- package/dist/components/docs/libraries/LibrariesRuntimePage.js +2 -200
- package/dist/components/docs/libraries/LibrariesSLOPage.js +3 -116
- package/dist/components/docs/libraries/LibrariesSchemaPage.js +3 -273
- package/dist/components/docs/libraries/LibrariesSupportBotPage.js +3 -134
- package/dist/components/docs/libraries/LibrariesTestingPage.js +3 -133
- package/dist/components/docs/libraries/LibrariesUIKitPage.js +2 -230
- package/dist/components/docs/libraries/LibrariesWorkflowComposerPage.js +3 -88
- package/dist/components/docs/libraries/LibrariesWorkflowsPage.js +2 -181
- package/dist/components/docs/libraries/index.js +54 -4147
- package/dist/components/docs/manifesto/ManifestoPage.js +1 -86
- package/dist/components/docs/ops/AutoEvolutionOpsPage.js +2 -132
- package/dist/components/docs/ops/DistributedTracingOpsPage.js +2 -71
- package/dist/components/docs/ops/index.js +3 -202
- package/dist/components/docs/ops/ops-lifecycle.docblocks.js +3 -38
- package/dist/components/docs/ops/ops-runbooks-a.docblocks.js +3 -94
- package/dist/components/docs/ops/ops-runbooks-b.docblocks.js +3 -76
- package/dist/components/docs/ops/ops-slo-tenant.docblocks.js +3 -76
- package/dist/components/docs/ops/ops-top.docs.js +2 -17
- package/dist/components/docs/ops/ops.docs.js +10 -302
- package/dist/components/docs/product/product.docblocks.js +5 -72
- package/dist/components/docs/reference/DocsMarkdownContent.js +2 -196
- package/dist/components/docs/reference/DocsReferenceContent.js +3 -256
- package/dist/components/docs/reference/DocsReferenceIndexClient.js +2 -127
- package/dist/components/docs/reference/DocsReferenceIndexPage.js +2 -206
- package/dist/components/docs/reference/DocsReferencePage.js +3 -265
- package/dist/components/docs/reference/docsMarkdownParser.js +2 -92
- package/dist/components/docs/reference/index.js +4 -470
- package/dist/components/docs/safety/SafetyAuditingPage.js +2 -350
- package/dist/components/docs/safety/SafetyMigrationsPage.js +2 -359
- package/dist/components/docs/safety/SafetyOverviewPage.js +1 -101
- package/dist/components/docs/safety/SafetyPDPPage.js +2 -301
- package/dist/components/docs/safety/SafetySecurityTrustPage.js +1 -206
- package/dist/components/docs/safety/SafetySigningPage.js +3 -90
- package/dist/components/docs/safety/SafetyTenantIsolationPage.js +2 -79
- package/dist/components/docs/safety/index.js +7 -1480
- package/dist/components/docs/shared/StudioPrompt.js +1 -31
- package/dist/components/docs/specs/SpecsBuilderControlPlanePage.d.ts +1 -0
- package/dist/components/docs/specs/SpecsBuilderControlPlanePage.js +34 -0
- package/dist/components/docs/specs/SpecsCapabilitiesPage.js +2 -158
- package/dist/components/docs/specs/SpecsConnectPage.d.ts +1 -0
- package/dist/components/docs/specs/SpecsConnectPage.js +8 -0
- package/dist/components/docs/specs/SpecsDataViewsPage.js +2 -260
- package/dist/components/docs/specs/SpecsModuleBundlesPage.d.ts +1 -0
- package/dist/components/docs/specs/SpecsModuleBundlesPage.js +67 -0
- package/dist/components/docs/specs/SpecsOverlaysPage.js +2 -372
- package/dist/components/docs/specs/SpecsOverviewPage.js +1 -186
- package/dist/components/docs/specs/SpecsPolicyPage.js +3 -420
- package/dist/components/docs/specs/SpecsWorkflowsPage.js +2 -325
- package/dist/components/docs/specs/index.d.ts +3 -0
- package/dist/components/docs/specs/index.js +109 -1715
- package/dist/components/docs/studio/StudioBYOKPage.js +1 -26
- package/dist/components/docs/studio/StudioDeploymentsPage.js +1 -26
- package/dist/components/docs/studio/StudioGettingStartedPage.js +1 -26
- package/dist/components/docs/studio/StudioIntegrationsPage.js +1 -26
- package/dist/components/docs/studio/StudioOverviewPage.js +1 -157
- package/dist/components/docs/studio/StudioVisualBuilderPage.js +1 -26
- package/dist/components/docs/studio/index.js +1 -282
- package/dist/components/docs/tech/contracts/tech-docs.docblocks.js +2 -19
- package/dist/components/integrations/index.js +2 -600
- package/dist/components/integrations/molecules/IntegrationCard.js +1 -100
- package/dist/components/integrations/organisms/IntegrationMarketplace.js +1 -214
- package/dist/components/integrations/organisms/IntegrationSettings.js +2 -284
- package/dist/components/integrations/organisms/KnowledgeSourceList.js +1 -103
- package/dist/components/legal/PrivacyTemplate.js +1 -1025
- package/dist/components/legal/TermsTemplate.js +1 -941
- package/dist/components/legal/index.js +1 -1963
- package/dist/components/shared/FeatureGateNotice.js +1 -38
- package/dist/components/shared/index.js +1 -38
- package/dist/components/shell/WorkspaceHeader.js +1 -100
- package/dist/components/shell/WorkspaceProjectShellLayout.js +1 -222
- package/dist/components/shell/WorkspaceShellRenderer.js +1 -228
- package/dist/components/shell/WorkspaceSidebar.js +1 -68
- package/dist/components/shell/index.js +1 -287
- package/dist/components/templates/engine/index.js +1 -39
- package/dist/components/templates/index.js +11 -965
- package/dist/components/templates/messaging/ConversationList.js +2 -83
- package/dist/components/templates/messaging/MessageComposer.js +4 -150
- package/dist/components/templates/messaging/MessageThread.js +3 -83
- package/dist/components/templates/messaging/MessagingWorkspace.js +5 -265
- package/dist/components/templates/messaging/index.js +5 -269
- package/dist/components/templates/recipes/LanguageSwitcher.js +1 -16
- package/dist/components/templates/recipes/RecipeCard.js +1 -80
- package/dist/components/templates/recipes/RecipeDetail.js +1 -74
- package/dist/components/templates/recipes/RecipeList.js +3 -245
- package/dist/components/templates/recipes/index.js +3 -248
- package/dist/components/templates/todos/FilterBar.js +1 -107
- package/dist/components/templates/todos/TaskForm.js +2 -158
- package/dist/components/templates/todos/TaskItem.js +1 -77
- package/dist/components/templates/todos/TaskList.js +5 -449
- package/dist/components/templates/todos/index.js +5 -452
- package/dist/config/contractspec-blueprint.js +1 -123
- package/dist/config/contractspec-branding.js +1 -44
- package/dist/config/contractspec-routes.js +1 -24
- package/dist/config/index.js +1 -126
- package/dist/features/contracts-registry.js +1 -178
- package/dist/features/docs/docs.contracts.js +1 -17
- package/dist/features/docs/index.js +1 -17
- package/dist/features/docs.feature.js +1 -33
- package/dist/features/index.js +1 -315
- package/dist/features/mcp.feature.js +1 -30
- package/dist/features/presentations.feature.js +1 -33
- package/dist/features/registry.js +1 -116
- package/dist/index.js +556 -28593
- package/dist/infrastructure/elysia/index.js +1 -35
- package/dist/infrastructure/elysia/logger.js +1 -35
- package/dist/infrastructure/index.js +1 -35
- package/dist/libs/email/client.js +1 -114
- package/dist/libs/email/contact.js +12 -165
- package/dist/libs/email/newsletter.js +6 -167
- package/dist/libs/email/types.js +0 -2
- package/dist/libs/email/utils.js +2 -8
- package/dist/libs/email/waitlist-application.js +28 -209
- package/dist/libs/email/waitlist.js +6 -167
- package/dist/libs/email.js +46 -363
- package/dist/libs/posthog/client.js +1 -63
- package/dist/libs/posthog/native.js +1 -23
- package/dist/libs/posthog/server.js +1 -13
- package/dist/libs/pricing-examples.js +1 -18
- package/dist/node/application/context-storage/index.js +1 -28
- package/dist/node/application/index.js +13 -2133
- package/dist/node/application/mcp/cliMcp.js +4 -452
- package/dist/node/application/mcp/common.js +1 -193
- package/dist/node/application/mcp/contractsMcp.js +2 -549
- package/dist/node/application/mcp/contractsMcpResources.js +2 -123
- package/dist/node/application/mcp/contractsMcpTools.js +1 -199
- package/dist/node/application/mcp/docsMcp.catalog.js +3 -381
- package/dist/node/application/mcp/docsMcp.data.js +1 -147
- package/dist/node/application/mcp/docsMcp.js +6 -1039
- package/dist/node/application/mcp/docsMcp.prompts.js +6 -521
- package/dist/node/application/mcp/docsMcp.reference.js +3 -235
- package/dist/node/application/mcp/docsMcp.resources.js +3 -519
- package/dist/node/application/mcp/docsMcp.tools.js +3 -518
- package/dist/node/application/mcp/index.js +13 -2106
- package/dist/node/application/mcp/internalMcp.js +2 -410
- package/dist/node/application/mcp/normalizeMcpRequest.js +1 -21
- package/dist/node/application/mcp/providerRankingMcp.js +1 -530
- package/dist/node/bundles/LibraryBundle.js +1 -138
- package/dist/node/bundles/index.js +1 -138
- package/dist/node/components/docs/DocsIndexPage.js +2 -912
- package/dist/node/components/docs/advanced/AdvancedMCPPage.js +4 -271
- package/dist/node/components/docs/advanced/AdvancedOverlayEditorPage.js +1 -107
- package/dist/node/components/docs/advanced/AdvancedRenderersPage.js +2 -118
- package/dist/node/components/docs/advanced/AdvancedSpecExperimentsPage.js +4 -92
- package/dist/node/components/docs/advanced/AdvancedTelemetryPage.js +2 -373
- package/dist/node/components/docs/advanced/AdvancedWorkflowMonitoringPage.js +2 -99
- package/dist/node/components/docs/advanced/index.js +10 -1055
- package/dist/node/components/docs/architecture/ArchitectureAppConfigPage.js +6 -243
- package/dist/node/components/docs/architecture/ArchitectureControlPlanePage.js +3 -160
- package/dist/node/components/docs/architecture/ArchitectureIntegrationBindingPage.js +7 -259
- package/dist/node/components/docs/architecture/ArchitectureKnowledgeBindingPage.js +6 -374
- package/dist/node/components/docs/architecture/ArchitectureMultiTenancyPage.js +2 -166
- package/dist/node/components/docs/architecture/ArchitectureOverviewPage.js +1 -143
- package/dist/node/components/docs/architecture/index.js +20 -1340
- package/dist/node/components/docs/comparison/ComparisonAutomationPlatformsPage.js +1 -245
- package/dist/node/components/docs/comparison/ComparisonEnterprisePlatformsPage.js +1 -230
- package/dist/node/components/docs/comparison/ComparisonInternalToolBuildersPage.js +1 -245
- package/dist/node/components/docs/comparison/ComparisonOverviewPage.js +1 -202
- package/dist/node/components/docs/comparison/ComparisonWindmillPage.js +1 -254
- package/dist/node/components/docs/comparison/ComparisonWorkflowEnginesPage.js +1 -339
- package/dist/node/components/docs/comparison/index.js +1 -1510
- package/dist/node/components/docs/docsManifest.js +1 -611
- package/dist/node/components/docs/ecosystem/IntegrationsPage.js +2 -103
- package/dist/node/components/docs/ecosystem/PluginsPage.js +13 -179
- package/dist/node/components/docs/ecosystem/RegistryPage.js +7 -100
- package/dist/node/components/docs/ecosystem/TemplatesPage.js +3 -141
- package/dist/node/components/docs/ecosystem/ecosystem.docblocks.js +2 -48
- package/dist/node/components/docs/ecosystem/index.js +23 -569
- package/dist/node/components/docs/examples/DocsExamplesPage.js +4 -124
- package/dist/node/components/docs/examples/ExampleShowcasePage.js +4 -244
- package/dist/node/components/docs/examples/exampleShowcaseData.js +4 -39
- package/dist/node/components/docs/examples/index.js +4 -330
- package/dist/node/components/docs/generated/docs-index.generated.js +1 -5
- package/dist/node/components/docs/generated/index.js +1 -74
- package/dist/node/components/docs/generated/loader.js +1 -74
- package/dist/node/components/docs/getting-started/CLIPage.js +4 -271
- package/dist/node/components/docs/getting-started/CompatibilityPage.js +1 -173
- package/dist/node/components/docs/getting-started/DataViewTutorialPage.js +4 -134
- package/dist/node/components/docs/getting-started/DeveloperToolsPage.js +1 -194
- package/dist/node/components/docs/getting-started/HelloWorldPage.js +5 -183
- package/dist/node/components/docs/getting-started/InstallationPage.js +3 -154
- package/dist/node/components/docs/getting-started/StartHerePage.js +2 -129
- package/dist/node/components/docs/getting-started/TroubleshootingPage.js +2 -168
- package/dist/node/components/docs/getting-started/VSCodeExtensionPage.js +1 -432
- package/dist/node/components/docs/getting-started/getting-started.docblocks.js +4 -41
- package/dist/node/components/docs/getting-started/index.js +18 -1869
- package/dist/node/components/docs/guides/GuideCIDiffGatingPage.js +2 -196
- package/dist/node/components/docs/guides/GuideConnectInRepoPage.js +43 -0
- package/dist/node/components/docs/guides/GuideContractTypesPage.js +6 -541
- package/dist/node/components/docs/guides/GuideDocsPipelinePage.js +3 -207
- package/dist/node/components/docs/guides/GuideFirstModuleBundlePage.js +75 -0
- package/dist/node/components/docs/guides/GuideGenerateDocsClientsSchemasPage.js +2 -209
- package/dist/node/components/docs/guides/GuideHostBuilderWorkbenchPage.js +69 -0
- package/dist/node/components/docs/guides/GuideImportExistingCodebasesPage.js +8 -754
- package/dist/node/components/docs/guides/GuideNextjsOneEndpointPage.js +6 -268
- package/dist/node/components/docs/guides/GuideSpecValidationTypingPage.js +4 -196
- package/dist/node/components/docs/guides/GuidesIndexPage.js +2 -169
- package/dist/node/components/docs/guides/guides.docblocks.js +11 -75
- package/dist/node/components/docs/guides/index.js +213 -2428
- package/dist/node/components/docs/index.js +542 -24310
- package/dist/node/components/docs/integrations/IntegrationsCircuitBreakersPage.js +2 -42
- package/dist/node/components/docs/integrations/IntegrationsElevenLabsPage.js +3 -105
- package/dist/node/components/docs/integrations/IntegrationsGithubPage.js +3 -142
- package/dist/node/components/docs/integrations/IntegrationsGmailPage.js +3 -109
- package/dist/node/components/docs/integrations/IntegrationsGoogleCalendarPage.js +3 -79
- package/dist/node/components/docs/integrations/IntegrationsHealthRoutingPage.js +3 -146
- package/dist/node/components/docs/integrations/IntegrationsMistralPage.js +5 -150
- package/dist/node/components/docs/integrations/IntegrationsOpenAIPage.js +5 -140
- package/dist/node/components/docs/integrations/IntegrationsOverviewPage.js +1 -160
- package/dist/node/components/docs/integrations/IntegrationsPostmarkPage.js +4 -218
- package/dist/node/components/docs/integrations/IntegrationsPowensPage.js +4 -300
- package/dist/node/components/docs/integrations/IntegrationsQdrantPage.js +5 -111
- package/dist/node/components/docs/integrations/IntegrationsResendPage.js +3 -102
- package/dist/node/components/docs/integrations/IntegrationsS3Page.js +4 -124
- package/dist/node/components/docs/integrations/IntegrationsSlackPage.js +3 -144
- package/dist/node/components/docs/integrations/IntegrationsSpecModelPage.js +7 -290
- package/dist/node/components/docs/integrations/IntegrationsStripePage.js +6 -327
- package/dist/node/components/docs/integrations/IntegrationsTwilioPage.js +3 -128
- package/dist/node/components/docs/integrations/IntegrationsWhatsappMetaPage.js +2 -146
- package/dist/node/components/docs/integrations/IntegrationsWhatsappTwilioPage.js +2 -156
- package/dist/node/components/docs/integrations/index.js +52 -3100
- package/dist/node/components/docs/intent/ContractFirstApiPage.js +2 -126
- package/dist/node/components/docs/intent/DeterministicCodegenPage.js +2 -148
- package/dist/node/components/docs/intent/GenerateClientFromSchemaPage.js +7 -207
- package/dist/node/components/docs/intent/OpenapiAlternativePage.js +3 -201
- package/dist/node/components/docs/intent/SchemaValidationTypescriptPage.js +4 -144
- package/dist/node/components/docs/intent/SpecDrivenDevelopmentPage.js +2 -126
- package/dist/node/components/docs/intent/index.js +15 -1135
- package/dist/node/components/docs/intent/intent-pages.docblocks.js +1 -201
- package/dist/node/components/docs/knowledge/KnowledgeCategoriesPage.js +6 -750
- package/dist/node/components/docs/knowledge/KnowledgeExamplesPage.js +4 -175
- package/dist/node/components/docs/knowledge/KnowledgeOverviewPage.js +1 -116
- package/dist/node/components/docs/knowledge/KnowledgeSourcesPage.js +8 -391
- package/dist/node/components/docs/knowledge/KnowledgeSpacesPage.js +6 -302
- package/dist/node/components/docs/knowledge/index.js +21 -1730
- package/dist/node/components/docs/libraries/LibrariesAccessibilityPage.js +3 -198
- package/dist/node/components/docs/libraries/LibrariesAiAgentPage.js +3 -141
- package/dist/node/components/docs/libraries/LibrariesAnalyticsPage.js +4 -80
- package/dist/node/components/docs/libraries/LibrariesContentGenPage.js +2 -100
- package/dist/node/components/docs/libraries/LibrariesContractsPage.js +2 -284
- package/dist/node/components/docs/libraries/LibrariesCostTrackingPage.js +3 -112
- package/dist/node/components/docs/libraries/LibrariesDataBackendPage.js +2 -166
- package/dist/node/components/docs/libraries/LibrariesDataViewsPage.js +3 -186
- package/dist/node/components/docs/libraries/LibrariesDesignSystemPage.js +4 -279
- package/dist/node/components/docs/libraries/LibrariesEvolutionPage.js +4 -127
- package/dist/node/components/docs/libraries/LibrariesGraphQLPage.js +2 -173
- package/dist/node/components/docs/libraries/LibrariesGrowthPage.js +3 -88
- package/dist/node/components/docs/libraries/LibrariesMultiTenancyPage.js +3 -108
- package/dist/node/components/docs/libraries/LibrariesObservabilityPage.js +5 -130
- package/dist/node/components/docs/libraries/LibrariesOverlayEnginePage.js +4 -110
- package/dist/node/components/docs/libraries/LibrariesOverviewPage.js +1 -170
- package/dist/node/components/docs/libraries/LibrariesPersonalizationPage.js +4 -114
- package/dist/node/components/docs/libraries/LibrariesProgressiveDeliveryPage.js +3 -132
- package/dist/node/components/docs/libraries/LibrariesResiliencePage.js +4 -120
- package/dist/node/components/docs/libraries/LibrariesRuntimePage.js +2 -200
- package/dist/node/components/docs/libraries/LibrariesSLOPage.js +3 -116
- package/dist/node/components/docs/libraries/LibrariesSchemaPage.js +3 -273
- package/dist/node/components/docs/libraries/LibrariesSupportBotPage.js +3 -134
- package/dist/node/components/docs/libraries/LibrariesTestingPage.js +3 -133
- package/dist/node/components/docs/libraries/LibrariesUIKitPage.js +2 -230
- package/dist/node/components/docs/libraries/LibrariesWorkflowComposerPage.js +3 -88
- package/dist/node/components/docs/libraries/LibrariesWorkflowsPage.js +2 -181
- package/dist/node/components/docs/libraries/index.js +54 -4147
- package/dist/node/components/docs/manifesto/ManifestoPage.js +1 -86
- package/dist/node/components/docs/ops/AutoEvolutionOpsPage.js +2 -132
- package/dist/node/components/docs/ops/DistributedTracingOpsPage.js +2 -71
- package/dist/node/components/docs/ops/index.js +3 -202
- package/dist/node/components/docs/ops/ops-lifecycle.docblocks.js +3 -38
- package/dist/node/components/docs/ops/ops-runbooks-a.docblocks.js +3 -94
- package/dist/node/components/docs/ops/ops-runbooks-b.docblocks.js +3 -76
- package/dist/node/components/docs/ops/ops-slo-tenant.docblocks.js +3 -76
- package/dist/node/components/docs/ops/ops-top.docs.js +2 -17
- package/dist/node/components/docs/ops/ops.docs.js +10 -302
- package/dist/node/components/docs/product/product.docblocks.js +5 -72
- package/dist/node/components/docs/reference/DocsMarkdownContent.js +2 -196
- package/dist/node/components/docs/reference/DocsReferenceContent.js +3 -256
- package/dist/node/components/docs/reference/DocsReferenceIndexClient.js +2 -127
- package/dist/node/components/docs/reference/DocsReferenceIndexPage.js +2 -206
- package/dist/node/components/docs/reference/DocsReferencePage.js +3 -265
- package/dist/node/components/docs/reference/docsMarkdownParser.js +2 -92
- package/dist/node/components/docs/reference/index.js +4 -470
- package/dist/node/components/docs/safety/SafetyAuditingPage.js +2 -350
- package/dist/node/components/docs/safety/SafetyMigrationsPage.js +2 -359
- package/dist/node/components/docs/safety/SafetyOverviewPage.js +1 -101
- package/dist/node/components/docs/safety/SafetyPDPPage.js +2 -301
- package/dist/node/components/docs/safety/SafetySecurityTrustPage.js +1 -206
- package/dist/node/components/docs/safety/SafetySigningPage.js +3 -90
- package/dist/node/components/docs/safety/SafetyTenantIsolationPage.js +2 -79
- package/dist/node/components/docs/safety/index.js +7 -1480
- package/dist/node/components/docs/shared/StudioPrompt.js +1 -31
- package/dist/node/components/docs/specs/SpecsBuilderControlPlanePage.js +33 -0
- package/dist/node/components/docs/specs/SpecsCapabilitiesPage.js +2 -158
- package/dist/node/components/docs/specs/SpecsConnectPage.js +7 -0
- package/dist/node/components/docs/specs/SpecsDataViewsPage.js +2 -260
- package/dist/node/components/docs/specs/SpecsModuleBundlesPage.js +66 -0
- package/dist/node/components/docs/specs/SpecsOverlaysPage.js +2 -372
- package/dist/node/components/docs/specs/SpecsOverviewPage.js +1 -186
- package/dist/node/components/docs/specs/SpecsPolicyPage.js +3 -420
- package/dist/node/components/docs/specs/SpecsWorkflowsPage.js +2 -325
- package/dist/node/components/docs/specs/index.js +109 -1715
- package/dist/node/components/docs/studio/StudioBYOKPage.js +1 -26
- package/dist/node/components/docs/studio/StudioDeploymentsPage.js +1 -26
- package/dist/node/components/docs/studio/StudioGettingStartedPage.js +1 -26
- package/dist/node/components/docs/studio/StudioIntegrationsPage.js +1 -26
- package/dist/node/components/docs/studio/StudioOverviewPage.js +1 -157
- package/dist/node/components/docs/studio/StudioVisualBuilderPage.js +1 -26
- package/dist/node/components/docs/studio/index.js +1 -282
- package/dist/node/components/docs/tech/contracts/tech-docs.docblocks.js +2 -19
- package/dist/node/components/integrations/index.js +2 -600
- package/dist/node/components/integrations/molecules/IntegrationCard.js +1 -100
- package/dist/node/components/integrations/organisms/IntegrationMarketplace.js +1 -214
- package/dist/node/components/integrations/organisms/IntegrationSettings.js +2 -284
- package/dist/node/components/integrations/organisms/KnowledgeSourceList.js +1 -103
- package/dist/node/components/legal/PrivacyTemplate.js +1 -1025
- package/dist/node/components/legal/TermsTemplate.js +1 -941
- package/dist/node/components/legal/index.js +1 -1963
- package/dist/node/components/shared/FeatureGateNotice.js +1 -38
- package/dist/node/components/shared/index.js +1 -38
- package/dist/node/components/shell/WorkspaceHeader.js +1 -100
- package/dist/node/components/shell/WorkspaceProjectShellLayout.js +1 -222
- package/dist/node/components/shell/WorkspaceShellRenderer.js +1 -228
- package/dist/node/components/shell/WorkspaceSidebar.js +1 -68
- package/dist/node/components/shell/index.js +1 -287
- package/dist/node/components/templates/engine/index.js +1 -39
- package/dist/node/components/templates/index.js +11 -965
- package/dist/node/components/templates/messaging/ConversationList.js +2 -83
- package/dist/node/components/templates/messaging/MessageComposer.js +4 -150
- package/dist/node/components/templates/messaging/MessageThread.js +3 -83
- package/dist/node/components/templates/messaging/MessagingWorkspace.js +5 -265
- package/dist/node/components/templates/messaging/index.js +5 -269
- package/dist/node/components/templates/recipes/LanguageSwitcher.js +1 -16
- package/dist/node/components/templates/recipes/RecipeCard.js +1 -80
- package/dist/node/components/templates/recipes/RecipeDetail.js +1 -74
- package/dist/node/components/templates/recipes/RecipeList.js +3 -245
- package/dist/node/components/templates/recipes/index.js +3 -248
- package/dist/node/components/templates/todos/FilterBar.js +1 -107
- package/dist/node/components/templates/todos/TaskForm.js +2 -158
- package/dist/node/components/templates/todos/TaskItem.js +1 -77
- package/dist/node/components/templates/todos/TaskList.js +5 -449
- package/dist/node/components/templates/todos/index.js +5 -452
- package/dist/node/config/contractspec-blueprint.js +1 -123
- package/dist/node/config/contractspec-branding.js +1 -44
- package/dist/node/config/contractspec-routes.js +1 -24
- package/dist/node/config/index.js +1 -126
- package/dist/node/features/contracts-registry.js +1 -178
- package/dist/node/features/docs/docs.contracts.js +1 -17
- package/dist/node/features/docs/index.js +1 -17
- package/dist/node/features/docs.feature.js +1 -33
- package/dist/node/features/index.js +1 -315
- package/dist/node/features/mcp.feature.js +1 -30
- package/dist/node/features/presentations.feature.js +1 -33
- package/dist/node/features/registry.js +1 -116
- package/dist/node/index.js +556 -28593
- package/dist/node/infrastructure/elysia/index.js +1 -35
- package/dist/node/infrastructure/elysia/logger.js +1 -35
- package/dist/node/infrastructure/index.js +1 -35
- package/dist/node/libs/email/client.js +1 -114
- package/dist/node/libs/email/contact.js +12 -165
- package/dist/node/libs/email/newsletter.js +6 -167
- package/dist/node/libs/email/types.js +0 -2
- package/dist/node/libs/email/utils.js +2 -8
- package/dist/node/libs/email/waitlist-application.js +28 -209
- package/dist/node/libs/email/waitlist.js +6 -167
- package/dist/node/libs/email.js +46 -363
- package/dist/node/libs/posthog/client.js +1 -63
- package/dist/node/libs/posthog/native.js +1 -23
- package/dist/node/libs/posthog/server.js +1 -13
- package/dist/node/libs/pricing-examples.js +1 -18
- package/dist/node/presentation/features/atoms/FeatureIcon/FeatureIcon.js +1 -97
- package/dist/node/presentation/features/atoms/FeatureIcon/index.js +1 -97
- package/dist/node/presentation/features/atoms/index.js +1 -97
- package/dist/node/presentation/features/hooks/index.js +1 -397
- package/dist/node/presentation/features/hooks/useContractsRegistry.js +1 -289
- package/dist/node/presentation/features/hooks/useFeatureFilters.js +1 -75
- package/dist/node/presentation/features/hooks/useFeatureRegistry.js +1 -147
- package/dist/node/presentation/features/hooks/useRelatedDocs.js +1 -28
- package/dist/node/presentation/features/index.js +1 -3063
- package/dist/node/presentation/features/molecules/FeatureCard/FeatureCard.js +1 -366
- package/dist/node/presentation/features/molecules/FeatureCard/index.js +1 -366
- package/dist/node/presentation/features/molecules/FeatureCategoryHeader/FeatureCategoryHeader.js +1 -50
- package/dist/node/presentation/features/molecules/FeatureCategoryHeader/index.js +1 -50
- package/dist/node/presentation/features/molecules/FeatureFilters/FeatureFilters.js +1 -92
- package/dist/node/presentation/features/molecules/FeatureFilters/index.js +1 -92
- package/dist/node/presentation/features/molecules/FeatureHoverPreview/FeatureHoverPreview.js +1 -176
- package/dist/node/presentation/features/molecules/FeatureHoverPreview/index.js +1 -176
- package/dist/node/presentation/features/molecules/index.js +1 -505
- package/dist/node/presentation/features/organisms/FeatureDataViewsList.js +1 -304
- package/dist/node/presentation/features/organisms/FeatureDetail/FeatureDetail.js +1 -154
- package/dist/node/presentation/features/organisms/FeatureDetail/index.js +1 -154
- package/dist/node/presentation/features/organisms/FeatureDiscovery/FeatureDiscovery.js +1 -909
- package/dist/node/presentation/features/organisms/FeatureDiscovery/index.js +1 -909
- package/dist/node/presentation/features/organisms/FeatureEventsList.js +1 -302
- package/dist/node/presentation/features/organisms/FeatureFormsList.js +1 -302
- package/dist/node/presentation/features/organisms/FeatureOperationsList.js +1 -180
- package/dist/node/presentation/features/organisms/FeaturePresentationsList.js +1 -304
- package/dist/node/presentation/features/organisms/index.js +1 -1359
- package/dist/node/presentation/features/templates/FeatureDataViewDetailTemplate/FeatureDataViewDetailTemplate.js +1 -332
- package/dist/node/presentation/features/templates/FeatureDataViewDetailTemplate/index.js +1 -332
- package/dist/node/presentation/features/templates/FeatureDataViewsTemplate/FeatureDataViewsTemplate.js +1 -342
- package/dist/node/presentation/features/templates/FeatureDataViewsTemplate/index.js +1 -342
- package/dist/node/presentation/features/templates/FeatureEventDetailTemplate/FeatureEventDetailTemplate.js +1 -303
- package/dist/node/presentation/features/templates/FeatureEventDetailTemplate/index.js +1 -303
- package/dist/node/presentation/features/templates/FeatureEventsTemplate/FeatureEventsTemplate.js +1 -340
- package/dist/node/presentation/features/templates/FeatureEventsTemplate/index.js +1 -340
- package/dist/node/presentation/features/templates/FeatureFormDetailTemplate/FeatureFormDetailTemplate.js +1 -329
- package/dist/node/presentation/features/templates/FeatureFormDetailTemplate/index.js +1 -329
- package/dist/node/presentation/features/templates/FeatureFormsTemplate/FeatureFormsTemplate.js +1 -340
- package/dist/node/presentation/features/templates/FeatureFormsTemplate/index.js +1 -340
- package/dist/node/presentation/features/templates/FeatureOperationDetailTemplate/FeatureOperationDetailTemplate.js +1 -302
- package/dist/node/presentation/features/templates/FeatureOperationDetailTemplate/index.js +1 -302
- package/dist/node/presentation/features/templates/FeatureOperationsTemplate/FeatureOperationsTemplate.js +1 -218
- package/dist/node/presentation/features/templates/FeatureOperationsTemplate/index.js +1 -218
- package/dist/node/presentation/features/templates/FeatureOverviewTemplate/FeatureOverviewTemplate.js +1 -187
- package/dist/node/presentation/features/templates/FeatureOverviewTemplate/index.js +1 -187
- package/dist/node/presentation/features/templates/FeaturePresentationDetailTemplate/FeaturePresentationDetailTemplate.js +1 -306
- package/dist/node/presentation/features/templates/FeaturePresentationDetailTemplate/index.js +1 -306
- package/dist/node/presentation/features/templates/FeaturePresentationsTemplate/FeaturePresentationsTemplate.js +1 -342
- package/dist/node/presentation/features/templates/FeaturePresentationsTemplate/index.js +1 -342
- package/dist/presentation/features/atoms/FeatureIcon/FeatureIcon.js +1 -97
- package/dist/presentation/features/atoms/FeatureIcon/index.js +1 -97
- package/dist/presentation/features/atoms/index.js +1 -97
- package/dist/presentation/features/hooks/index.js +1 -397
- package/dist/presentation/features/hooks/useContractsRegistry.js +1 -289
- package/dist/presentation/features/hooks/useFeatureFilters.js +1 -75
- package/dist/presentation/features/hooks/useFeatureRegistry.js +1 -147
- package/dist/presentation/features/hooks/useRelatedDocs.js +1 -28
- package/dist/presentation/features/index.js +1 -3063
- package/dist/presentation/features/molecules/FeatureCard/FeatureCard.js +1 -366
- package/dist/presentation/features/molecules/FeatureCard/index.js +1 -366
- package/dist/presentation/features/molecules/FeatureCategoryHeader/FeatureCategoryHeader.js +1 -50
- package/dist/presentation/features/molecules/FeatureCategoryHeader/index.js +1 -50
- package/dist/presentation/features/molecules/FeatureFilters/FeatureFilters.js +1 -92
- package/dist/presentation/features/molecules/FeatureFilters/index.js +1 -92
- package/dist/presentation/features/molecules/FeatureHoverPreview/FeatureHoverPreview.js +1 -176
- package/dist/presentation/features/molecules/FeatureHoverPreview/index.js +1 -176
- package/dist/presentation/features/molecules/index.js +1 -505
- package/dist/presentation/features/organisms/FeatureDataViewsList.js +1 -304
- package/dist/presentation/features/organisms/FeatureDetail/FeatureDetail.js +1 -154
- package/dist/presentation/features/organisms/FeatureDetail/index.js +1 -154
- package/dist/presentation/features/organisms/FeatureDiscovery/FeatureDiscovery.js +1 -909
- package/dist/presentation/features/organisms/FeatureDiscovery/index.js +1 -909
- package/dist/presentation/features/organisms/FeatureEventsList.js +1 -302
- package/dist/presentation/features/organisms/FeatureFormsList.js +1 -302
- package/dist/presentation/features/organisms/FeatureOperationsList.js +1 -180
- package/dist/presentation/features/organisms/FeaturePresentationsList.js +1 -304
- package/dist/presentation/features/organisms/index.js +1 -1359
- package/dist/presentation/features/templates/FeatureDataViewDetailTemplate/FeatureDataViewDetailTemplate.js +1 -332
- package/dist/presentation/features/templates/FeatureDataViewDetailTemplate/index.js +1 -332
- package/dist/presentation/features/templates/FeatureDataViewsTemplate/FeatureDataViewsTemplate.js +1 -342
- package/dist/presentation/features/templates/FeatureDataViewsTemplate/index.js +1 -342
- package/dist/presentation/features/templates/FeatureEventDetailTemplate/FeatureEventDetailTemplate.js +1 -303
- package/dist/presentation/features/templates/FeatureEventDetailTemplate/index.js +1 -303
- package/dist/presentation/features/templates/FeatureEventsTemplate/FeatureEventsTemplate.js +1 -340
- package/dist/presentation/features/templates/FeatureEventsTemplate/index.js +1 -340
- package/dist/presentation/features/templates/FeatureFormDetailTemplate/FeatureFormDetailTemplate.js +1 -329
- package/dist/presentation/features/templates/FeatureFormDetailTemplate/index.js +1 -329
- package/dist/presentation/features/templates/FeatureFormsTemplate/FeatureFormsTemplate.js +1 -340
- package/dist/presentation/features/templates/FeatureFormsTemplate/index.js +1 -340
- package/dist/presentation/features/templates/FeatureOperationDetailTemplate/FeatureOperationDetailTemplate.js +1 -302
- package/dist/presentation/features/templates/FeatureOperationDetailTemplate/index.js +1 -302
- package/dist/presentation/features/templates/FeatureOperationsTemplate/FeatureOperationsTemplate.js +1 -218
- package/dist/presentation/features/templates/FeatureOperationsTemplate/index.js +1 -218
- package/dist/presentation/features/templates/FeatureOverviewTemplate/FeatureOverviewTemplate.js +1 -187
- package/dist/presentation/features/templates/FeatureOverviewTemplate/index.js +1 -187
- package/dist/presentation/features/templates/FeaturePresentationDetailTemplate/FeaturePresentationDetailTemplate.js +1 -306
- package/dist/presentation/features/templates/FeaturePresentationDetailTemplate/index.js +1 -306
- package/dist/presentation/features/templates/FeaturePresentationsTemplate/FeaturePresentationsTemplate.js +1 -342
- package/dist/presentation/features/templates/FeaturePresentationsTemplate/index.js +1 -342
- package/package.json +103 -31
- package/src/components/docs/DocsIndexPage.tsx +55 -0
- package/src/components/docs/architecture/ArchitectureControlPlanePage.tsx +19 -0
- package/src/components/docs/architecture/ArchitectureOverviewPage.tsx +34 -0
- package/src/components/docs/docsManifest.test.ts +70 -0
- package/src/components/docs/docsManifest.ts +71 -1
- package/src/components/docs/ecosystem/PluginsPage.tsx +24 -10
- package/src/components/docs/ecosystem/RegistryPage.tsx +11 -6
- package/src/components/docs/generated/docs-index._common.json +206 -273
- package/src/components/docs/generated/docs-index.control-plane.json +18 -0
- package/src/components/docs/generated/docs-index.defineExample.json +10 -0
- package/src/components/docs/generated/docs-index.manifest.json +22 -12
- package/src/components/docs/generated/docs-index.platform-acp.json +64 -0
- package/src/components/docs/generated/docs-index.platform-agent.json +89 -1
- package/src/components/docs/generated/docs-index.platform-context.json +48 -0
- package/src/components/docs/generated/docs-index.platform-control-plane.json +72 -0
- package/src/components/docs/generated/docs-index.platform-database.json +40 -0
- package/src/components/docs/generated/docs-index.platform-docs.json +64 -0
- package/src/components/docs/generated/docs-index.platform-provider-ranking.json +89 -1
- package/src/components/docs/generated/docs-index.pocket-family-office.json +8 -0
- package/src/components/docs/generated/docs-index.unknown.json +8 -0
- package/src/components/docs/guides/GuideConnectInRepoPage.tsx +184 -0
- package/src/components/docs/guides/GuideFirstModuleBundlePage.tsx +182 -0
- package/src/components/docs/guides/GuideHostBuilderWorkbenchPage.tsx +230 -0
- package/src/components/docs/guides/GuidesIndexPage.tsx +21 -0
- package/src/components/docs/guides/index.ts +3 -0
- package/src/components/docs/specs/SpecsBuilderControlPlanePage.tsx +210 -0
- package/src/components/docs/specs/SpecsConnectPage.tsx +162 -0
- package/src/components/docs/specs/SpecsModuleBundlesPage.tsx +223 -0
- package/src/components/docs/specs/SpecsOverlaysPage.tsx +20 -0
- package/src/components/docs/specs/SpecsOverviewPage.tsx +44 -0
- package/src/components/docs/specs/index.ts +3 -0
- package/src/components/docs/studio/StudioOverviewPage.tsx +26 -0
- package/src/infrastructure/elysia/logger.ts +11 -3
|
@@ -1,46 +1,5 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
|
|
3
|
-
import { CodeBlock } from "@contractspec/lib.design-system";
|
|
4
|
-
import Link from "@contractspec/lib.ui-link";
|
|
5
|
-
import { ChevronRight } from "lucide-react";
|
|
6
|
-
import { jsx, jsxs } from "react/jsx-runtime";
|
|
7
|
-
function ArchitectureAppConfigPage() {
|
|
8
|
-
return /* @__PURE__ */ jsxs("div", {
|
|
9
|
-
className: "space-y-8",
|
|
10
|
-
children: [
|
|
11
|
-
/* @__PURE__ */ jsxs("div", {
|
|
12
|
-
className: "space-y-4",
|
|
13
|
-
children: [
|
|
14
|
-
/* @__PURE__ */ jsx("h1", {
|
|
15
|
-
className: "font-bold text-4xl",
|
|
16
|
-
children: "App Configuration"
|
|
17
|
-
}),
|
|
18
|
-
/* @__PURE__ */ jsx("p", {
|
|
19
|
-
className: "text-muted-foreground",
|
|
20
|
-
children: "ContractSpec uses a three-tier configuration model that separates global app definitions from tenant-specific settings and runtime resolution."
|
|
21
|
-
})
|
|
22
|
-
]
|
|
23
|
-
}),
|
|
24
|
-
/* @__PURE__ */ jsxs("div", {
|
|
25
|
-
className: "space-y-4",
|
|
26
|
-
children: [
|
|
27
|
-
/* @__PURE__ */ jsx("h2", {
|
|
28
|
-
className: "font-bold text-2xl",
|
|
29
|
-
children: "AppBlueprintSpec"
|
|
30
|
-
}),
|
|
31
|
-
/* @__PURE__ */ jsxs("p", {
|
|
32
|
-
className: "text-muted-foreground",
|
|
33
|
-
children: [
|
|
34
|
-
"The ",
|
|
35
|
-
/* @__PURE__ */ jsx("strong", {
|
|
36
|
-
children: "AppBlueprintSpec"
|
|
37
|
-
}),
|
|
38
|
-
" is the global, versioned definition of your application. It contains no tenant-specific information and is stored in version control."
|
|
39
|
-
]
|
|
40
|
-
}),
|
|
41
|
-
/* @__PURE__ */ jsx(CodeBlock, {
|
|
42
|
-
language: "typescript",
|
|
43
|
-
code: `type AppBlueprintSpec = {
|
|
2
|
+
import{CodeBlock as g}from"@contractspec/lib.design-system";import b from"@contractspec/lib.ui-link";import{ChevronRight as C}from"lucide-react";import{jsx as n,jsxs as r}from"react/jsx-runtime";function I(){return r("div",{className:"space-y-8",children:[r("div",{className:"space-y-4",children:[n("h1",{className:"font-bold text-4xl",children:"App Configuration"}),n("p",{className:"text-muted-foreground",children:"ContractSpec uses a three-tier configuration model that separates global app definitions from tenant-specific settings and runtime resolution."})]}),r("div",{className:"space-y-4",children:[n("h2",{className:"font-bold text-2xl",children:"AppBlueprintSpec"}),r("p",{className:"text-muted-foreground",children:["The ",n("strong",{children:"AppBlueprintSpec"})," is the global, versioned definition of your application. It contains no tenant-specific information and is stored in version control."]}),n(g,{language:"typescript",code:`type AppBlueprintSpec = {
|
|
44
3
|
id: string;
|
|
45
4
|
version: string;
|
|
46
5
|
name: string;
|
|
@@ -77,30 +36,7 @@ function ArchitectureAppConfigPage() {
|
|
|
77
36
|
|
|
78
37
|
// Schema evolution
|
|
79
38
|
migrations: MigrationSpec[];
|
|
80
|
-
};`
|
|
81
|
-
})
|
|
82
|
-
]
|
|
83
|
-
}),
|
|
84
|
-
/* @__PURE__ */ jsxs("div", {
|
|
85
|
-
className: "space-y-4",
|
|
86
|
-
children: [
|
|
87
|
-
/* @__PURE__ */ jsx("h2", {
|
|
88
|
-
className: "font-bold text-2xl",
|
|
89
|
-
children: "TenantAppConfig"
|
|
90
|
-
}),
|
|
91
|
-
/* @__PURE__ */ jsxs("p", {
|
|
92
|
-
className: "text-muted-foreground",
|
|
93
|
-
children: [
|
|
94
|
-
"The ",
|
|
95
|
-
/* @__PURE__ */ jsx("strong", {
|
|
96
|
-
children: "TenantAppConfig"
|
|
97
|
-
}),
|
|
98
|
-
" is the per-tenant, per-environment configuration that customizes how a specific tenant uses the app."
|
|
99
|
-
]
|
|
100
|
-
}),
|
|
101
|
-
/* @__PURE__ */ jsx(CodeBlock, {
|
|
102
|
-
language: "typescript",
|
|
103
|
-
code: `type TenantAppConfig = {
|
|
39
|
+
};`})]}),r("div",{className:"space-y-4",children:[n("h2",{className:"font-bold text-2xl",children:"TenantAppConfig"}),r("p",{className:"text-muted-foreground",children:["The ",n("strong",{children:"TenantAppConfig"})," is the per-tenant, per-environment configuration that customizes how a specific tenant uses the app."]}),n(g,{language:"typescript",code:`type TenantAppConfig = {
|
|
104
40
|
tenantId: string;
|
|
105
41
|
blueprintId: string;
|
|
106
42
|
blueprintVersion: string;
|
|
@@ -131,24 +67,7 @@ function ArchitectureAppConfigPage() {
|
|
|
131
67
|
metadata: Record<string, unknown>;
|
|
132
68
|
createdAt: string;
|
|
133
69
|
updatedAt: string;
|
|
134
|
-
};`
|
|
135
|
-
})
|
|
136
|
-
]
|
|
137
|
-
}),
|
|
138
|
-
/* @__PURE__ */ jsxs("div", {
|
|
139
|
-
className: "space-y-4",
|
|
140
|
-
children: [
|
|
141
|
-
/* @__PURE__ */ jsx("h2", {
|
|
142
|
-
className: "font-bold text-2xl",
|
|
143
|
-
children: "AppIntegrationBinding"
|
|
144
|
-
}),
|
|
145
|
-
/* @__PURE__ */ jsx("p", {
|
|
146
|
-
className: "text-muted-foreground",
|
|
147
|
-
children: "Defines how a tenant connects specific integration instances to satisfy capabilities and workflows."
|
|
148
|
-
}),
|
|
149
|
-
/* @__PURE__ */ jsx(CodeBlock, {
|
|
150
|
-
language: "typescript",
|
|
151
|
-
code: `type AppIntegrationBinding = {
|
|
70
|
+
};`})]}),r("div",{className:"space-y-4",children:[n("h2",{className:"font-bold text-2xl",children:"AppIntegrationBinding"}),n("p",{className:"text-muted-foreground",children:"Defines how a tenant connects specific integration instances to satisfy capabilities and workflows."}),n(g,{language:"typescript",code:`type AppIntegrationBinding = {
|
|
152
71
|
slotId: string; // References AppIntegrationSlot.slotId
|
|
153
72
|
connectionId: string; // References IntegrationConnection.meta.id
|
|
154
73
|
scope?: {
|
|
@@ -168,24 +87,7 @@ function ArchitectureAppConfigPage() {
|
|
|
168
87
|
operations: ["payments.stripe.*"]
|
|
169
88
|
},
|
|
170
89
|
priority: 1
|
|
171
|
-
}`
|
|
172
|
-
})
|
|
173
|
-
]
|
|
174
|
-
}),
|
|
175
|
-
/* @__PURE__ */ jsxs("div", {
|
|
176
|
-
className: "space-y-4",
|
|
177
|
-
children: [
|
|
178
|
-
/* @__PURE__ */ jsx("h2", {
|
|
179
|
-
className: "font-bold text-2xl",
|
|
180
|
-
children: "AppKnowledgeBinding"
|
|
181
|
-
}),
|
|
182
|
-
/* @__PURE__ */ jsx("p", {
|
|
183
|
-
className: "text-muted-foreground",
|
|
184
|
-
children: "Defines which knowledge spaces a tenant's app can access and how."
|
|
185
|
-
}),
|
|
186
|
-
/* @__PURE__ */ jsx(CodeBlock, {
|
|
187
|
-
language: "typescript",
|
|
188
|
-
code: `type AppKnowledgeBinding = {
|
|
90
|
+
}`})]}),r("div",{className:"space-y-4",children:[n("h2",{className:"font-bold text-2xl",children:"AppKnowledgeBinding"}),n("p",{className:"text-muted-foreground",children:"Defines which knowledge spaces a tenant's app can access and how."}),n(g,{language:"typescript",code:`type AppKnowledgeBinding = {
|
|
189
91
|
spaceId: string;
|
|
190
92
|
enabled: boolean;
|
|
191
93
|
|
|
@@ -215,30 +117,7 @@ function ArchitectureAppConfigPage() {
|
|
|
215
117
|
},
|
|
216
118
|
allowedCategories: ["canonical", "operational"],
|
|
217
119
|
sources: ["src_notion_product_docs", "src_database_schema"]
|
|
218
|
-
}`
|
|
219
|
-
})
|
|
220
|
-
]
|
|
221
|
-
}),
|
|
222
|
-
/* @__PURE__ */ jsxs("div", {
|
|
223
|
-
className: "space-y-4",
|
|
224
|
-
children: [
|
|
225
|
-
/* @__PURE__ */ jsx("h2", {
|
|
226
|
-
className: "font-bold text-2xl",
|
|
227
|
-
children: "ResolvedAppConfig"
|
|
228
|
-
}),
|
|
229
|
-
/* @__PURE__ */ jsxs("p", {
|
|
230
|
-
className: "text-muted-foreground",
|
|
231
|
-
children: [
|
|
232
|
-
"The ",
|
|
233
|
-
/* @__PURE__ */ jsx("strong", {
|
|
234
|
-
children: "ResolvedAppConfig"
|
|
235
|
-
}),
|
|
236
|
-
" is the runtime result of merging AppBlueprintSpec with TenantAppConfig. It's computed on-demand and never persisted."
|
|
237
|
-
]
|
|
238
|
-
}),
|
|
239
|
-
/* @__PURE__ */ jsx(CodeBlock, {
|
|
240
|
-
language: "typescript",
|
|
241
|
-
code: `type ResolvedAppConfig = {
|
|
120
|
+
}`})]}),r("div",{className:"space-y-4",children:[n("h2",{className:"font-bold text-2xl",children:"ResolvedAppConfig"}),r("p",{className:"text-muted-foreground",children:["The ",n("strong",{children:"ResolvedAppConfig"})," is the runtime result of merging AppBlueprintSpec with TenantAppConfig. It's computed on-demand and never persisted."]}),n(g,{language:"typescript",code:`type ResolvedAppConfig = {
|
|
242
121
|
appId: string;
|
|
243
122
|
tenantId: string;
|
|
244
123
|
blueprintName: string;
|
|
@@ -265,195 +144,7 @@ function ArchitectureAppConfigPage() {
|
|
|
265
144
|
knowledge: ResolvedKnowledge[]; // [{ binding, space, sources }]
|
|
266
145
|
branding: ResolvedBranding; // { appName, assets, colors, domain }
|
|
267
146
|
notes?: string;
|
|
268
|
-
};`
|
|
269
|
-
})
|
|
270
|
-
]
|
|
271
|
-
}),
|
|
272
|
-
/* @__PURE__ */ jsxs("div", {
|
|
273
|
-
className: "space-y-4",
|
|
274
|
-
children: [
|
|
275
|
-
/* @__PURE__ */ jsx("h2", {
|
|
276
|
-
className: "font-bold text-2xl",
|
|
277
|
-
children: "Configuration flow"
|
|
278
|
-
}),
|
|
279
|
-
/* @__PURE__ */ jsx("p", {
|
|
280
|
-
className: "text-muted-foreground",
|
|
281
|
-
children: "Here's how configuration flows from definition to runtime:"
|
|
282
|
-
}),
|
|
283
|
-
/* @__PURE__ */ jsxs("ol", {
|
|
284
|
-
className: "list-inside list-decimal space-y-3 text-muted-foreground",
|
|
285
|
-
children: [
|
|
286
|
-
/* @__PURE__ */ jsxs("li", {
|
|
287
|
-
children: [
|
|
288
|
-
/* @__PURE__ */ jsx("strong", {
|
|
289
|
-
children: "Development"
|
|
290
|
-
}),
|
|
291
|
-
" - Define AppBlueprintSpec with required integrations and knowledge spaces"
|
|
292
|
-
]
|
|
293
|
-
}),
|
|
294
|
-
/* @__PURE__ */ jsxs("li", {
|
|
295
|
-
children: [
|
|
296
|
-
/* @__PURE__ */ jsx("strong", {
|
|
297
|
-
children: "Deployment"
|
|
298
|
-
}),
|
|
299
|
-
" - Deploy blueprint to environment (sandbox, staging, production)"
|
|
300
|
-
]
|
|
301
|
-
}),
|
|
302
|
-
/* @__PURE__ */ jsxs("li", {
|
|
303
|
-
children: [
|
|
304
|
-
/* @__PURE__ */ jsx("strong", {
|
|
305
|
-
children: "Tenant Setup"
|
|
306
|
-
}),
|
|
307
|
-
" - Create TenantAppConfig with specific integration connections and knowledge sources"
|
|
308
|
-
]
|
|
309
|
-
}),
|
|
310
|
-
/* @__PURE__ */ jsxs("li", {
|
|
311
|
-
children: [
|
|
312
|
-
/* @__PURE__ */ jsx("strong", {
|
|
313
|
-
children: "Runtime"
|
|
314
|
-
}),
|
|
315
|
-
" - Resolve configuration on-demand when tenant accesses the app"
|
|
316
|
-
]
|
|
317
|
-
}),
|
|
318
|
-
/* @__PURE__ */ jsxs("li", {
|
|
319
|
-
children: [
|
|
320
|
-
/* @__PURE__ */ jsx("strong", {
|
|
321
|
-
children: "Execution"
|
|
322
|
-
}),
|
|
323
|
-
" - Use ResolvedAppConfig to execute capabilities, workflows, and enforce policies"
|
|
324
|
-
]
|
|
325
|
-
})
|
|
326
|
-
]
|
|
327
|
-
})
|
|
328
|
-
]
|
|
329
|
-
}),
|
|
330
|
-
/* @__PURE__ */ jsxs("div", {
|
|
331
|
-
className: "space-y-4",
|
|
332
|
-
children: [
|
|
333
|
-
/* @__PURE__ */ jsx("h2", {
|
|
334
|
-
className: "font-bold text-2xl",
|
|
335
|
-
children: "Best practices"
|
|
336
|
-
}),
|
|
337
|
-
/* @__PURE__ */ jsxs("ul", {
|
|
338
|
-
className: "list-inside list-disc space-y-2 text-muted-foreground",
|
|
339
|
-
children: [
|
|
340
|
-
/* @__PURE__ */ jsx("li", {
|
|
341
|
-
children: "Keep AppBlueprintSpec environment-agnostic - no secrets or tenant-specific data"
|
|
342
|
-
}),
|
|
343
|
-
/* @__PURE__ */ jsx("li", {
|
|
344
|
-
children: "Use TenantAppConfig for all tenant-specific settings and connections"
|
|
345
|
-
}),
|
|
346
|
-
/* @__PURE__ */ jsx("li", {
|
|
347
|
-
children: "Cache ResolvedAppConfig per request to avoid repeated resolution"
|
|
348
|
-
}),
|
|
349
|
-
/* @__PURE__ */ jsx("li", {
|
|
350
|
-
children: "Version blueprints carefully - migrations affect all tenants"
|
|
351
|
-
}),
|
|
352
|
-
/* @__PURE__ */ jsx("li", {
|
|
353
|
-
children: "Test blueprint changes in sandbox before promoting to production"
|
|
354
|
-
})
|
|
355
|
-
]
|
|
356
|
-
})
|
|
357
|
-
]
|
|
358
|
-
}),
|
|
359
|
-
/* @__PURE__ */ jsxs("div", {
|
|
360
|
-
className: "flex items-center gap-4 pt-4",
|
|
361
|
-
children: [
|
|
362
|
-
/* @__PURE__ */ jsx(Link, {
|
|
363
|
-
href: "/docs/architecture",
|
|
364
|
-
className: "btn-ghost",
|
|
365
|
-
children: "Back to Architecture"
|
|
366
|
-
}),
|
|
367
|
-
/* @__PURE__ */ jsxs(Link, {
|
|
368
|
-
href: "/docs/architecture/integration-binding",
|
|
369
|
-
className: "btn-primary",
|
|
370
|
-
children: [
|
|
371
|
-
"Integration Binding ",
|
|
372
|
-
/* @__PURE__ */ jsx(ChevronRight, {
|
|
373
|
-
size: 16
|
|
374
|
-
})
|
|
375
|
-
]
|
|
376
|
-
})
|
|
377
|
-
]
|
|
378
|
-
})
|
|
379
|
-
]
|
|
380
|
-
});
|
|
381
|
-
}
|
|
382
|
-
|
|
383
|
-
// src/components/docs/architecture/ArchitectureControlPlanePage.tsx
|
|
384
|
-
import { CodeBlock as CodeBlock2 } from "@contractspec/lib.design-system";
|
|
385
|
-
import Link2 from "@contractspec/lib.ui-link";
|
|
386
|
-
import { ChevronRight as ChevronRight2 } from "lucide-react";
|
|
387
|
-
import { jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
388
|
-
function ArchitectureControlPlanePage() {
|
|
389
|
-
return /* @__PURE__ */ jsxs2("div", {
|
|
390
|
-
className: "space-y-8",
|
|
391
|
-
children: [
|
|
392
|
-
/* @__PURE__ */ jsxs2("div", {
|
|
393
|
-
className: "space-y-4",
|
|
394
|
-
children: [
|
|
395
|
-
/* @__PURE__ */ jsx2("h1", {
|
|
396
|
-
className: "font-bold text-4xl",
|
|
397
|
-
children: "Control Plane Runtime"
|
|
398
|
-
}),
|
|
399
|
-
/* @__PURE__ */ jsx2("p", {
|
|
400
|
-
className: "text-muted-foreground",
|
|
401
|
-
children: "The control plane is the governance layer for agentic execution. It turns incoming intent into deterministic plans, enforces risk policy before side effects, and records replayable traces for audits."
|
|
402
|
-
})
|
|
403
|
-
]
|
|
404
|
-
}),
|
|
405
|
-
/* @__PURE__ */ jsxs2("div", {
|
|
406
|
-
className: "space-y-4",
|
|
407
|
-
children: [
|
|
408
|
-
/* @__PURE__ */ jsx2("h2", {
|
|
409
|
-
className: "font-bold text-2xl",
|
|
410
|
-
children: "Canonical execution loop"
|
|
411
|
-
}),
|
|
412
|
-
/* @__PURE__ */ jsxs2("ol", {
|
|
413
|
-
className: "list-inside list-decimal space-y-2 text-muted-foreground",
|
|
414
|
-
children: [
|
|
415
|
-
/* @__PURE__ */ jsx2("li", {
|
|
416
|
-
children: "Accept intent and create execution identity + trace context."
|
|
417
|
-
}),
|
|
418
|
-
/* @__PURE__ */ jsx2("li", {
|
|
419
|
-
children: "Compile intent into a typed, deterministic plan DAG."
|
|
420
|
-
}),
|
|
421
|
-
/* @__PURE__ */ jsx2("li", {
|
|
422
|
-
children: "Verify plan against policy and risk rules."
|
|
423
|
-
}),
|
|
424
|
-
/* @__PURE__ */ jsx2("li", {
|
|
425
|
-
children: "Route into autonomous or assist mode based on verdict."
|
|
426
|
-
}),
|
|
427
|
-
/* @__PURE__ */ jsx2("li", {
|
|
428
|
-
children: "Execute steps with idempotent keys and explicit stage events."
|
|
429
|
-
}),
|
|
430
|
-
/* @__PURE__ */ jsx2("li", {
|
|
431
|
-
children: "Persist outcomes for replay, audits, and operator visibility."
|
|
432
|
-
})
|
|
433
|
-
]
|
|
434
|
-
})
|
|
435
|
-
]
|
|
436
|
-
}),
|
|
437
|
-
/* @__PURE__ */ jsxs2("div", {
|
|
438
|
-
className: "space-y-4",
|
|
439
|
-
children: [
|
|
440
|
-
/* @__PURE__ */ jsx2("h2", {
|
|
441
|
-
className: "font-bold text-2xl",
|
|
442
|
-
children: "Contract surfaces (v1 baseline)"
|
|
443
|
-
}),
|
|
444
|
-
/* @__PURE__ */ jsxs2("p", {
|
|
445
|
-
className: "text-muted-foreground",
|
|
446
|
-
children: [
|
|
447
|
-
"The runtime is contract-first. Commands, queries, events, and capabilities are explicit and versioned under",
|
|
448
|
-
/* @__PURE__ */ jsx2("code", {
|
|
449
|
-
children: " @contractspec/lib.contracts-spec"
|
|
450
|
-
}),
|
|
451
|
-
"."
|
|
452
|
-
]
|
|
453
|
-
}),
|
|
454
|
-
/* @__PURE__ */ jsx2(CodeBlock2, {
|
|
455
|
-
language: "text",
|
|
456
|
-
code: `Commands
|
|
147
|
+
};`})]}),r("div",{className:"space-y-4",children:[n("h2",{className:"font-bold text-2xl",children:"Configuration flow"}),n("p",{className:"text-muted-foreground",children:"Here's how configuration flows from definition to runtime:"}),r("ol",{className:"list-inside list-decimal space-y-3 text-muted-foreground",children:[r("li",{children:[n("strong",{children:"Development"})," - Define AppBlueprintSpec with required integrations and knowledge spaces"]}),r("li",{children:[n("strong",{children:"Deployment"})," - Deploy blueprint to environment (sandbox, staging, production)"]}),r("li",{children:[n("strong",{children:"Tenant Setup"})," - Create TenantAppConfig with specific integration connections and knowledge sources"]}),r("li",{children:[n("strong",{children:"Runtime"})," - Resolve configuration on-demand when tenant accesses the app"]}),r("li",{children:[n("strong",{children:"Execution"})," - Use ResolvedAppConfig to execute capabilities, workflows, and enforce policies"]})]})]}),r("div",{className:"space-y-4",children:[n("h2",{className:"font-bold text-2xl",children:"Best practices"}),r("ul",{className:"list-inside list-disc space-y-2 text-muted-foreground",children:[n("li",{children:"Keep AppBlueprintSpec environment-agnostic - no secrets or tenant-specific data"}),n("li",{children:"Use TenantAppConfig for all tenant-specific settings and connections"}),n("li",{children:"Cache ResolvedAppConfig per request to avoid repeated resolution"}),n("li",{children:"Version blueprints carefully - migrations affect all tenants"}),n("li",{children:"Test blueprint changes in sandbox before promoting to production"})]})]}),r("div",{className:"flex items-center gap-4 pt-4",children:[n(b,{href:"/docs/architecture",className:"btn-ghost",children:"Back to Architecture"}),r(b,{href:"/docs/architecture/integration-binding",className:"btn-primary",children:["Integration Binding ",n(C,{size:16})]})]})]})}import{CodeBlock as v}from"@contractspec/lib.design-system";import h from"@contractspec/lib.ui-link";import{ChevronRight as A}from"lucide-react";import{jsx as o,jsxs as p}from"react/jsx-runtime";function S(){return p("div",{className:"space-y-8",children:[p("div",{className:"space-y-4",children:[o("h1",{className:"font-bold text-4xl",children:"Control Plane Runtime"}),o("p",{className:"text-muted-foreground",children:"The control plane is the governance layer for agentic execution. It turns incoming intent into deterministic plans, enforces risk policy before side effects, and records replayable traces for audits."})]}),p("div",{className:"space-y-4",children:[o("h2",{className:"font-bold text-2xl",children:"Canonical execution loop"}),p("ol",{className:"list-inside list-decimal space-y-2 text-muted-foreground",children:[o("li",{children:"Accept intent and create execution identity + trace context."}),o("li",{children:"Compile intent into a typed, deterministic plan DAG."}),o("li",{children:"Verify plan against policy and risk rules."}),o("li",{children:"Route into autonomous or assist mode based on verdict."}),o("li",{children:"Execute steps with idempotent keys and explicit stage events."}),o("li",{children:"Persist outcomes for replay, audits, and operator visibility."})]})]}),p("div",{className:"space-y-4",children:[o("h2",{className:"font-bold text-2xl",children:"Contract surfaces (v1 baseline)"}),p("p",{className:"text-muted-foreground",children:["The runtime is contract-first. Commands, queries, events, and capabilities are explicit and versioned under",o("code",{children:" @contractspec/lib.contracts-spec"}),"."]}),o(v,{language:"text",code:`Commands
|
|
457
148
|
- controlPlane.intent.submit
|
|
458
149
|
- controlPlane.plan.compile
|
|
459
150
|
- controlPlane.plan.verify
|
|
@@ -489,49 +180,7 @@ Capabilities
|
|
|
489
180
|
- control-plane.approval
|
|
490
181
|
- control-plane.audit
|
|
491
182
|
- control-plane.skill-registry
|
|
492
|
-
- control-plane.channel-runtime`
|
|
493
|
-
})
|
|
494
|
-
]
|
|
495
|
-
}),
|
|
496
|
-
/* @__PURE__ */ jsxs2("div", {
|
|
497
|
-
className: "space-y-4",
|
|
498
|
-
children: [
|
|
499
|
-
/* @__PURE__ */ jsx2("h2", {
|
|
500
|
-
className: "font-bold text-2xl",
|
|
501
|
-
children: "Policy and safety posture"
|
|
502
|
-
}),
|
|
503
|
-
/* @__PURE__ */ jsxs2("ul", {
|
|
504
|
-
className: "list-inside list-disc space-y-2 text-muted-foreground",
|
|
505
|
-
children: [
|
|
506
|
-
/* @__PURE__ */ jsx2("li", {
|
|
507
|
-
children: "No side-effect action executes unless it comes from a compiled plan."
|
|
508
|
-
}),
|
|
509
|
-
/* @__PURE__ */ jsx2("li", {
|
|
510
|
-
children: "High-risk actions are blocked from autonomous mode in v1."
|
|
511
|
-
}),
|
|
512
|
-
/* @__PURE__ */ jsx2("li", {
|
|
513
|
-
children: "Approval commands provide explicit human-in-the-loop transitions."
|
|
514
|
-
}),
|
|
515
|
-
/* @__PURE__ */ jsx2("li", {
|
|
516
|
-
children: "Skill installation is modeled as governance-controlled operations."
|
|
517
|
-
}),
|
|
518
|
-
/* @__PURE__ */ jsx2("li", {
|
|
519
|
-
children: "Trace queries expose policy rationale and step outcomes for replay."
|
|
520
|
-
})
|
|
521
|
-
]
|
|
522
|
-
})
|
|
523
|
-
]
|
|
524
|
-
}),
|
|
525
|
-
/* @__PURE__ */ jsxs2("div", {
|
|
526
|
-
className: "space-y-4",
|
|
527
|
-
children: [
|
|
528
|
-
/* @__PURE__ */ jsx2("h2", {
|
|
529
|
-
className: "font-bold text-2xl",
|
|
530
|
-
children: "Implementation map"
|
|
531
|
-
}),
|
|
532
|
-
/* @__PURE__ */ jsx2(CodeBlock2, {
|
|
533
|
-
language: "text",
|
|
534
|
-
code: `packages/libs/contracts-spec/src/control-plane/
|
|
183
|
+
- control-plane.channel-runtime`})]}),p("div",{className:"space-y-4",children:[o("h2",{className:"font-bold text-2xl",children:"Policy and safety posture"}),p("ul",{className:"list-inside list-disc space-y-2 text-muted-foreground",children:[o("li",{children:"No side-effect action executes unless it comes from a compiled plan."}),o("li",{children:"High-risk actions are blocked from autonomous mode in v1."}),o("li",{children:"Approval commands provide explicit human-in-the-loop transitions."}),o("li",{children:"Skill installation is modeled as governance-controlled operations."}),o("li",{children:"Trace queries expose policy rationale and step outcomes for replay."})]})]}),p("section",{className:"editorial-panel space-y-4",children:[o("h2",{className:"font-serif text-3xl tracking-[-0.03em]",children:"Apply the runtime locally with Connect"}),o("p",{className:"text-muted-foreground text-sm leading-7",children:"The control plane defines the governance contracts. Connect is the local adapter that turns those contracts into task-scoped context, plan, verification, review, and replay flows for coding agents."}),p("div",{className:"flex flex-wrap gap-3",children:[o(h,{href:"/docs/specs/connect",className:"btn-primary",children:"Connect spec"}),o(h,{href:"/docs/guides/connect-in-a-repo",className:"btn-ghost",children:"Use Connect in a repo"})]})]}),p("div",{className:"space-y-4",children:[o("h2",{className:"font-bold text-2xl",children:"Implementation map"}),o(v,{language:"text",code:`packages/libs/contracts-spec/src/control-plane/
|
|
535
184
|
commands/
|
|
536
185
|
queries/
|
|
537
186
|
events/
|
|
@@ -540,132 +189,7 @@ Capabilities
|
|
|
540
189
|
contracts.test.ts
|
|
541
190
|
|
|
542
191
|
packages/apps/web-landing/src/app/docs/architecture/control-plane/page.tsx
|
|
543
|
-
implementation_plan_controle_plane.md`
|
|
544
|
-
})
|
|
545
|
-
]
|
|
546
|
-
}),
|
|
547
|
-
/* @__PURE__ */ jsxs2("div", {
|
|
548
|
-
className: "space-y-4",
|
|
549
|
-
children: [
|
|
550
|
-
/* @__PURE__ */ jsx2("h2", {
|
|
551
|
-
className: "font-bold text-2xl",
|
|
552
|
-
children: "What comes next"
|
|
553
|
-
}),
|
|
554
|
-
/* @__PURE__ */ jsx2("p", {
|
|
555
|
-
className: "text-muted-foreground",
|
|
556
|
-
children: "WS1 delivers the contract fabric. Next increments add planner/executor split, policy escalation, capability-bound authorization, signed skill compatibility checks, and full replay tooling."
|
|
557
|
-
})
|
|
558
|
-
]
|
|
559
|
-
}),
|
|
560
|
-
/* @__PURE__ */ jsxs2("div", {
|
|
561
|
-
className: "flex items-center gap-4 pt-4",
|
|
562
|
-
children: [
|
|
563
|
-
/* @__PURE__ */ jsx2(Link2, {
|
|
564
|
-
href: "/docs/architecture/integration-binding",
|
|
565
|
-
className: "btn-ghost",
|
|
566
|
-
children: "Previous: Integration Binding"
|
|
567
|
-
}),
|
|
568
|
-
/* @__PURE__ */ jsxs2(Link2, {
|
|
569
|
-
href: "/docs/safety/auditing",
|
|
570
|
-
className: "btn-primary",
|
|
571
|
-
children: [
|
|
572
|
-
"Audit Logs ",
|
|
573
|
-
/* @__PURE__ */ jsx2(ChevronRight2, {
|
|
574
|
-
size: 16
|
|
575
|
-
})
|
|
576
|
-
]
|
|
577
|
-
})
|
|
578
|
-
]
|
|
579
|
-
})
|
|
580
|
-
]
|
|
581
|
-
});
|
|
582
|
-
}
|
|
583
|
-
|
|
584
|
-
// src/components/docs/architecture/ArchitectureIntegrationBindingPage.tsx
|
|
585
|
-
import { CodeBlock as CodeBlock3 } from "@contractspec/lib.design-system";
|
|
586
|
-
import Link3 from "@contractspec/lib.ui-link";
|
|
587
|
-
import { ChevronRight as ChevronRight3 } from "lucide-react";
|
|
588
|
-
import { jsx as jsx3, jsxs as jsxs3 } from "react/jsx-runtime";
|
|
589
|
-
function ArchitectureIntegrationBindingPage() {
|
|
590
|
-
return /* @__PURE__ */ jsxs3("div", {
|
|
591
|
-
className: "space-y-8",
|
|
592
|
-
children: [
|
|
593
|
-
/* @__PURE__ */ jsxs3("div", {
|
|
594
|
-
className: "space-y-4",
|
|
595
|
-
children: [
|
|
596
|
-
/* @__PURE__ */ jsx3("h1", {
|
|
597
|
-
className: "font-bold text-4xl",
|
|
598
|
-
children: "Integration Binding"
|
|
599
|
-
}),
|
|
600
|
-
/* @__PURE__ */ jsx3("p", {
|
|
601
|
-
className: "text-muted-foreground",
|
|
602
|
-
children: "Integration binding connects your app's capabilities to external service providers. Each tenant can configure their own integration connections while sharing the same app blueprint."
|
|
603
|
-
})
|
|
604
|
-
]
|
|
605
|
-
}),
|
|
606
|
-
/* @__PURE__ */ jsxs3("div", {
|
|
607
|
-
className: "space-y-4",
|
|
608
|
-
children: [
|
|
609
|
-
/* @__PURE__ */ jsx3("h2", {
|
|
610
|
-
className: "font-bold text-2xl",
|
|
611
|
-
children: "How it works"
|
|
612
|
-
}),
|
|
613
|
-
/* @__PURE__ */ jsx3("p", {
|
|
614
|
-
className: "text-muted-foreground",
|
|
615
|
-
children: "Integration binding follows a three-layer model:"
|
|
616
|
-
}),
|
|
617
|
-
/* @__PURE__ */ jsxs3("ol", {
|
|
618
|
-
className: "list-inside list-decimal space-y-3 text-muted-foreground",
|
|
619
|
-
children: [
|
|
620
|
-
/* @__PURE__ */ jsxs3("li", {
|
|
621
|
-
children: [
|
|
622
|
-
/* @__PURE__ */ jsx3("strong", {
|
|
623
|
-
children: "IntegrationSpec"
|
|
624
|
-
}),
|
|
625
|
-
" (global) - Defines what an integration provides"
|
|
626
|
-
]
|
|
627
|
-
}),
|
|
628
|
-
/* @__PURE__ */ jsxs3("li", {
|
|
629
|
-
children: [
|
|
630
|
-
/* @__PURE__ */ jsx3("strong", {
|
|
631
|
-
children: "IntegrationConnection"
|
|
632
|
-
}),
|
|
633
|
-
" (per-tenant) - A tenant's configured connection"
|
|
634
|
-
]
|
|
635
|
-
}),
|
|
636
|
-
/* @__PURE__ */ jsxs3("li", {
|
|
637
|
-
children: [
|
|
638
|
-
/* @__PURE__ */ jsx3("strong", {
|
|
639
|
-
children: "AppIntegrationBinding"
|
|
640
|
-
}),
|
|
641
|
-
" (per-app) - Maps named slots to concrete tenant connections"
|
|
642
|
-
]
|
|
643
|
-
})
|
|
644
|
-
]
|
|
645
|
-
})
|
|
646
|
-
]
|
|
647
|
-
}),
|
|
648
|
-
/* @__PURE__ */ jsxs3("div", {
|
|
649
|
-
className: "space-y-4",
|
|
650
|
-
children: [
|
|
651
|
-
/* @__PURE__ */ jsx3("h2", {
|
|
652
|
-
className: "font-bold text-2xl",
|
|
653
|
-
children: "Example: Payment processing"
|
|
654
|
-
}),
|
|
655
|
-
/* @__PURE__ */ jsx3("p", {
|
|
656
|
-
className: "text-muted-foreground",
|
|
657
|
-
children: "Let's walk through a complete example of binding Stripe for payments."
|
|
658
|
-
}),
|
|
659
|
-
/* @__PURE__ */ jsxs3("div", {
|
|
660
|
-
className: "space-y-3",
|
|
661
|
-
children: [
|
|
662
|
-
/* @__PURE__ */ jsx3("h3", {
|
|
663
|
-
className: "font-semibold text-lg",
|
|
664
|
-
children: "Step 1: Blueprint declares requirement"
|
|
665
|
-
}),
|
|
666
|
-
/* @__PURE__ */ jsx3(CodeBlock3, {
|
|
667
|
-
language: "typescript",
|
|
668
|
-
code: `// AppBlueprintSpec
|
|
192
|
+
implementation_plan_controle_plane.md`})]}),p("div",{className:"space-y-4",children:[o("h2",{className:"font-bold text-2xl",children:"What comes next"}),o("p",{className:"text-muted-foreground",children:"WS1 delivers the contract fabric. Next increments add planner/executor split, policy escalation, capability-bound authorization, signed skill compatibility checks, and full replay tooling."})]}),p("div",{className:"flex items-center gap-4 pt-4",children:[o(h,{href:"/docs/architecture/integration-binding",className:"btn-ghost",children:"Previous: Integration Binding"}),p(h,{href:"/docs/safety/auditing",className:"btn-primary",children:["Audit Logs ",o(A,{size:16})]})]})]})}import{CodeBlock as m}from"@contractspec/lib.design-system";import w from"@contractspec/lib.ui-link";import{ChevronRight as P}from"lucide-react";import{jsx as t,jsxs as s}from"react/jsx-runtime";function _(){return s("div",{className:"space-y-8",children:[s("div",{className:"space-y-4",children:[t("h1",{className:"font-bold text-4xl",children:"Integration Binding"}),t("p",{className:"text-muted-foreground",children:"Integration binding connects your app's capabilities to external service providers. Each tenant can configure their own integration connections while sharing the same app blueprint."})]}),s("div",{className:"space-y-4",children:[t("h2",{className:"font-bold text-2xl",children:"How it works"}),t("p",{className:"text-muted-foreground",children:"Integration binding follows a three-layer model:"}),s("ol",{className:"list-inside list-decimal space-y-3 text-muted-foreground",children:[s("li",{children:[t("strong",{children:"IntegrationSpec"})," (global) - Defines what an integration provides"]}),s("li",{children:[t("strong",{children:"IntegrationConnection"})," (per-tenant) - A tenant's configured connection"]}),s("li",{children:[t("strong",{children:"AppIntegrationBinding"})," (per-app) - Maps named slots to concrete tenant connections"]})]})]}),s("div",{className:"space-y-4",children:[t("h2",{className:"font-bold text-2xl",children:"Example: Payment processing"}),t("p",{className:"text-muted-foreground",children:"Let's walk through a complete example of binding Stripe for payments."}),s("div",{className:"space-y-3",children:[t("h3",{className:"font-semibold text-lg",children:"Step 1: Blueprint declares requirement"}),t(m,{language:"typescript",code:`// AppBlueprintSpec
|
|
669
193
|
{
|
|
670
194
|
meta: { name: "invoice-app", version: '1.0.0', appId: "invoice" },
|
|
671
195
|
integrationSlots: [
|
|
@@ -689,20 +213,7 @@ function ArchitectureIntegrationBindingPage() {
|
|
|
689
213
|
assets: [{ type: "logo", url: "https://cdn.acme.dev/logo.png" }],
|
|
690
214
|
colorTokens: { primary: "colors.brand.primary" }
|
|
691
215
|
}
|
|
692
|
-
}`
|
|
693
|
-
})
|
|
694
|
-
]
|
|
695
|
-
}),
|
|
696
|
-
/* @__PURE__ */ jsxs3("div", {
|
|
697
|
-
className: "space-y-3",
|
|
698
|
-
children: [
|
|
699
|
-
/* @__PURE__ */ jsx3("h3", {
|
|
700
|
-
className: "font-semibold text-lg",
|
|
701
|
-
children: "Step 2: Tenant creates connection"
|
|
702
|
-
}),
|
|
703
|
-
/* @__PURE__ */ jsx3(CodeBlock3, {
|
|
704
|
-
language: "typescript",
|
|
705
|
-
code: `// IntegrationConnection
|
|
216
|
+
}`})]}),s("div",{className:"space-y-3",children:[t("h3",{className:"font-semibold text-lg",children:"Step 2: Tenant creates connection"}),t(m,{language:"typescript",code:`// IntegrationConnection
|
|
706
217
|
{
|
|
707
218
|
meta: {
|
|
708
219
|
id: "conn_stripe_acme_prod",
|
|
@@ -722,20 +233,7 @@ function ArchitectureIntegrationBindingPage() {
|
|
|
722
233
|
},
|
|
723
234
|
secretRef: "vault://integrations/acme/conn_stripe_acme_prod",
|
|
724
235
|
status: "active"
|
|
725
|
-
}`
|
|
726
|
-
})
|
|
727
|
-
]
|
|
728
|
-
}),
|
|
729
|
-
/* @__PURE__ */ jsxs3("div", {
|
|
730
|
-
className: "space-y-3",
|
|
731
|
-
children: [
|
|
732
|
-
/* @__PURE__ */ jsx3("h3", {
|
|
733
|
-
className: "font-semibold text-lg",
|
|
734
|
-
children: "Step 3: TenantAppConfig binds connection"
|
|
735
|
-
}),
|
|
736
|
-
/* @__PURE__ */ jsx3(CodeBlock3, {
|
|
737
|
-
language: "typescript",
|
|
738
|
-
code: `// TenantAppConfig
|
|
236
|
+
}`})]}),s("div",{className:"space-y-3",children:[t("h3",{className:"font-semibold text-lg",children:"Step 3: TenantAppConfig binds connection"}),t(m,{language:"typescript",code:`// TenantAppConfig
|
|
739
237
|
{
|
|
740
238
|
meta: {
|
|
741
239
|
tenantId: "acme-corp",
|
|
@@ -761,20 +259,7 @@ function ArchitectureIntegrationBindingPage() {
|
|
|
761
259
|
customDomain: "billing.acme.com",
|
|
762
260
|
assets: [{ type: "logo", url: "https://assets.acme.com/logo.svg" }]
|
|
763
261
|
}
|
|
764
|
-
}`
|
|
765
|
-
})
|
|
766
|
-
]
|
|
767
|
-
}),
|
|
768
|
-
/* @__PURE__ */ jsxs3("div", {
|
|
769
|
-
className: "space-y-3",
|
|
770
|
-
children: [
|
|
771
|
-
/* @__PURE__ */ jsx3("h3", {
|
|
772
|
-
className: "font-semibold text-lg",
|
|
773
|
-
children: "Step 4: Runtime resolves and executes"
|
|
774
|
-
}),
|
|
775
|
-
/* @__PURE__ */ jsx3(CodeBlock3, {
|
|
776
|
-
language: "typescript",
|
|
777
|
-
code: `// ResolvedAppConfig (runtime)
|
|
262
|
+
}`})]}),s("div",{className:"space-y-3",children:[t("h3",{className:"font-semibold text-lg",children:"Step 4: Runtime resolves and executes"}),t(m,{language:"typescript",code:`// ResolvedAppConfig (runtime)
|
|
778
263
|
{
|
|
779
264
|
integrations: {
|
|
780
265
|
"payments.createPaymentIntent": {
|
|
@@ -791,26 +276,7 @@ const result = await executeCapability(
|
|
|
791
276
|
{ amount: 5000, currency: "usd" },
|
|
792
277
|
resolvedConfig
|
|
793
278
|
);
|
|
794
|
-
// \u2192 Uses Stripe connection automatically`
|
|
795
|
-
})
|
|
796
|
-
]
|
|
797
|
-
})
|
|
798
|
-
]
|
|
799
|
-
}),
|
|
800
|
-
/* @__PURE__ */ jsxs3("div", {
|
|
801
|
-
className: "space-y-4",
|
|
802
|
-
children: [
|
|
803
|
-
/* @__PURE__ */ jsx3("h2", {
|
|
804
|
-
className: "font-bold text-2xl",
|
|
805
|
-
children: "Multi-integration scenarios"
|
|
806
|
-
}),
|
|
807
|
-
/* @__PURE__ */ jsx3("p", {
|
|
808
|
-
className: "text-muted-foreground",
|
|
809
|
-
children: "A single app can use multiple integrations across different categories:"
|
|
810
|
-
}),
|
|
811
|
-
/* @__PURE__ */ jsx3(CodeBlock3, {
|
|
812
|
-
language: "typescript",
|
|
813
|
-
code: `integrations: [
|
|
279
|
+
// \u2192 Uses Stripe connection automatically`})]})]}),s("div",{className:"space-y-4",children:[t("h2",{className:"font-bold text-2xl",children:"Multi-integration scenarios"}),t("p",{className:"text-muted-foreground",children:"A single app can use multiple integrations across different categories:"}),t(m,{language:"typescript",code:`integrations: [
|
|
814
280
|
{
|
|
815
281
|
slotId: "payments.primary",
|
|
816
282
|
connectionId: "conn_stripe_prod",
|
|
@@ -836,24 +302,7 @@ const result = await executeCapability(
|
|
|
836
302
|
workflows: ["semantic-search", "rag-query"]
|
|
837
303
|
}
|
|
838
304
|
}
|
|
839
|
-
]`
|
|
840
|
-
})
|
|
841
|
-
]
|
|
842
|
-
}),
|
|
843
|
-
/* @__PURE__ */ jsxs3("div", {
|
|
844
|
-
className: "space-y-4",
|
|
845
|
-
children: [
|
|
846
|
-
/* @__PURE__ */ jsx3("h2", {
|
|
847
|
-
className: "font-bold text-2xl",
|
|
848
|
-
children: "Sandbox vs Production"
|
|
849
|
-
}),
|
|
850
|
-
/* @__PURE__ */ jsx3("p", {
|
|
851
|
-
className: "text-muted-foreground",
|
|
852
|
-
children: "Tenants typically maintain separate connections for sandbox and production environments:"
|
|
853
|
-
}),
|
|
854
|
-
/* @__PURE__ */ jsx3(CodeBlock3, {
|
|
855
|
-
language: "typescript",
|
|
856
|
-
code: `// Sandbox environment
|
|
305
|
+
]`})]}),s("div",{className:"space-y-4",children:[t("h2",{className:"font-bold text-2xl",children:"Sandbox vs Production"}),t("p",{className:"text-muted-foreground",children:"Tenants typically maintain separate connections for sandbox and production environments:"}),t(m,{language:"typescript",code:`// Sandbox environment
|
|
857
306
|
{
|
|
858
307
|
meta: { environment: "sandbox", status: "preview" },
|
|
859
308
|
integrations: [
|
|
@@ -873,183 +322,7 @@ const result = await executeCapability(
|
|
|
873
322
|
connectionId: "conn_stripe_acme_prod"
|
|
874
323
|
}
|
|
875
324
|
]
|
|
876
|
-
}`
|
|
877
|
-
})
|
|
878
|
-
]
|
|
879
|
-
}),
|
|
880
|
-
/* @__PURE__ */ jsxs3("div", {
|
|
881
|
-
className: "space-y-4",
|
|
882
|
-
children: [
|
|
883
|
-
/* @__PURE__ */ jsx3("h2", {
|
|
884
|
-
className: "font-bold text-2xl",
|
|
885
|
-
children: "Security & validation"
|
|
886
|
-
}),
|
|
887
|
-
/* @__PURE__ */ jsxs3("ul", {
|
|
888
|
-
className: "list-inside list-disc space-y-2 text-muted-foreground",
|
|
889
|
-
children: [
|
|
890
|
-
/* @__PURE__ */ jsx3("li", {
|
|
891
|
-
children: "Integration connections are validated before binding - health checks ensure connectivity"
|
|
892
|
-
}),
|
|
893
|
-
/* @__PURE__ */ jsx3("li", {
|
|
894
|
-
children: "Secrets are never stored in TenantAppConfig - only references to encrypted secrets"
|
|
895
|
-
}),
|
|
896
|
-
/* @__PURE__ */ jsx3("li", {
|
|
897
|
-
children: "Policy Decision Point (PDP) enforces which workflows can use which integrations"
|
|
898
|
-
}),
|
|
899
|
-
/* @__PURE__ */ jsx3("li", {
|
|
900
|
-
children: "All integration calls are audited with full request/response logging"
|
|
901
|
-
}),
|
|
902
|
-
/* @__PURE__ */ jsx3("li", {
|
|
903
|
-
children: "Rate limiting and quotas are enforced per connection"
|
|
904
|
-
})
|
|
905
|
-
]
|
|
906
|
-
})
|
|
907
|
-
]
|
|
908
|
-
}),
|
|
909
|
-
/* @__PURE__ */ jsxs3("div", {
|
|
910
|
-
className: "space-y-4",
|
|
911
|
-
children: [
|
|
912
|
-
/* @__PURE__ */ jsx3("h2", {
|
|
913
|
-
className: "font-bold text-2xl",
|
|
914
|
-
children: "Best practices"
|
|
915
|
-
}),
|
|
916
|
-
/* @__PURE__ */ jsxs3("ul", {
|
|
917
|
-
className: "list-inside list-disc space-y-2 text-muted-foreground",
|
|
918
|
-
children: [
|
|
919
|
-
/* @__PURE__ */ jsxs3("li", {
|
|
920
|
-
children: [
|
|
921
|
-
"Use wildcard patterns sparingly in ",
|
|
922
|
-
/* @__PURE__ */ jsx3("code", {
|
|
923
|
-
children: "allowedWorkflows"
|
|
924
|
-
}),
|
|
925
|
-
" - be explicit about access"
|
|
926
|
-
]
|
|
927
|
-
}),
|
|
928
|
-
/* @__PURE__ */ jsx3("li", {
|
|
929
|
-
children: "Always maintain separate sandbox and production connections"
|
|
930
|
-
}),
|
|
931
|
-
/* @__PURE__ */ jsx3("li", {
|
|
932
|
-
children: "Monitor integration health checks and set up alerts for failures"
|
|
933
|
-
}),
|
|
934
|
-
/* @__PURE__ */ jsx3("li", {
|
|
935
|
-
children: "Document the purpose of each integration binding for your team"
|
|
936
|
-
}),
|
|
937
|
-
/* @__PURE__ */ jsx3("li", {
|
|
938
|
-
children: "Test integration changes in sandbox before promoting to production"
|
|
939
|
-
})
|
|
940
|
-
]
|
|
941
|
-
})
|
|
942
|
-
]
|
|
943
|
-
}),
|
|
944
|
-
/* @__PURE__ */ jsxs3("div", {
|
|
945
|
-
className: "flex items-center gap-4 pt-4",
|
|
946
|
-
children: [
|
|
947
|
-
/* @__PURE__ */ jsx3(Link3, {
|
|
948
|
-
href: "/docs/architecture/app-config",
|
|
949
|
-
className: "btn-ghost",
|
|
950
|
-
children: "Previous: App Configuration"
|
|
951
|
-
}),
|
|
952
|
-
/* @__PURE__ */ jsxs3(Link3, {
|
|
953
|
-
href: "/docs/architecture/knowledge-binding",
|
|
954
|
-
className: "btn-primary",
|
|
955
|
-
children: [
|
|
956
|
-
"Knowledge Binding ",
|
|
957
|
-
/* @__PURE__ */ jsx3(ChevronRight3, {
|
|
958
|
-
size: 16
|
|
959
|
-
})
|
|
960
|
-
]
|
|
961
|
-
})
|
|
962
|
-
]
|
|
963
|
-
})
|
|
964
|
-
]
|
|
965
|
-
});
|
|
966
|
-
}
|
|
967
|
-
|
|
968
|
-
// src/components/docs/architecture/ArchitectureKnowledgeBindingPage.tsx
|
|
969
|
-
import { CodeBlock as CodeBlock4 } from "@contractspec/lib.design-system";
|
|
970
|
-
import Link4 from "@contractspec/lib.ui-link";
|
|
971
|
-
import { ChevronRight as ChevronRight4 } from "lucide-react";
|
|
972
|
-
import { jsx as jsx4, jsxs as jsxs4 } from "react/jsx-runtime";
|
|
973
|
-
function ArchitectureKnowledgeBindingPage() {
|
|
974
|
-
return /* @__PURE__ */ jsxs4("div", {
|
|
975
|
-
className: "space-y-8",
|
|
976
|
-
children: [
|
|
977
|
-
/* @__PURE__ */ jsxs4("div", {
|
|
978
|
-
className: "space-y-4",
|
|
979
|
-
children: [
|
|
980
|
-
/* @__PURE__ */ jsx4("h1", {
|
|
981
|
-
className: "font-bold text-4xl",
|
|
982
|
-
children: "Knowledge Binding"
|
|
983
|
-
}),
|
|
984
|
-
/* @__PURE__ */ jsx4("p", {
|
|
985
|
-
className: "text-muted-foreground",
|
|
986
|
-
children: "Knowledge binding connects your app's workflows and agents to structured knowledge spaces. This enables semantic search, RAG (Retrieval-Augmented Generation), and context-aware decision-making."
|
|
987
|
-
})
|
|
988
|
-
]
|
|
989
|
-
}),
|
|
990
|
-
/* @__PURE__ */ jsxs4("div", {
|
|
991
|
-
className: "space-y-4",
|
|
992
|
-
children: [
|
|
993
|
-
/* @__PURE__ */ jsx4("h2", {
|
|
994
|
-
className: "font-bold text-2xl",
|
|
995
|
-
children: "How it works"
|
|
996
|
-
}),
|
|
997
|
-
/* @__PURE__ */ jsx4("p", {
|
|
998
|
-
className: "text-muted-foreground",
|
|
999
|
-
children: "Knowledge binding follows a three-layer model:"
|
|
1000
|
-
}),
|
|
1001
|
-
/* @__PURE__ */ jsxs4("ol", {
|
|
1002
|
-
className: "list-inside list-decimal space-y-3 text-muted-foreground",
|
|
1003
|
-
children: [
|
|
1004
|
-
/* @__PURE__ */ jsxs4("li", {
|
|
1005
|
-
children: [
|
|
1006
|
-
/* @__PURE__ */ jsx4("strong", {
|
|
1007
|
-
children: "KnowledgeSpaceSpec"
|
|
1008
|
-
}),
|
|
1009
|
-
" (global) - Defines a logical knowledge domain"
|
|
1010
|
-
]
|
|
1011
|
-
}),
|
|
1012
|
-
/* @__PURE__ */ jsxs4("li", {
|
|
1013
|
-
children: [
|
|
1014
|
-
/* @__PURE__ */ jsx4("strong", {
|
|
1015
|
-
children: "KnowledgeSourceConfig"
|
|
1016
|
-
}),
|
|
1017
|
-
" (per-tenant) - Tenant's data sources feeding spaces"
|
|
1018
|
-
]
|
|
1019
|
-
}),
|
|
1020
|
-
/* @__PURE__ */ jsxs4("li", {
|
|
1021
|
-
children: [
|
|
1022
|
-
/* @__PURE__ */ jsx4("strong", {
|
|
1023
|
-
children: "AppKnowledgeBinding"
|
|
1024
|
-
}),
|
|
1025
|
-
" (per-app) - Maps spaces to workflows/agents"
|
|
1026
|
-
]
|
|
1027
|
-
})
|
|
1028
|
-
]
|
|
1029
|
-
})
|
|
1030
|
-
]
|
|
1031
|
-
}),
|
|
1032
|
-
/* @__PURE__ */ jsxs4("div", {
|
|
1033
|
-
className: "space-y-4",
|
|
1034
|
-
children: [
|
|
1035
|
-
/* @__PURE__ */ jsx4("h2", {
|
|
1036
|
-
className: "font-bold text-2xl",
|
|
1037
|
-
children: "Example: Support agent with RAG"
|
|
1038
|
-
}),
|
|
1039
|
-
/* @__PURE__ */ jsx4("p", {
|
|
1040
|
-
className: "text-muted-foreground",
|
|
1041
|
-
children: "Let's build a support agent that uses canonical product documentation and operational support history."
|
|
1042
|
-
}),
|
|
1043
|
-
/* @__PURE__ */ jsxs4("div", {
|
|
1044
|
-
className: "space-y-3",
|
|
1045
|
-
children: [
|
|
1046
|
-
/* @__PURE__ */ jsx4("h3", {
|
|
1047
|
-
className: "font-semibold text-lg",
|
|
1048
|
-
children: "Step 1: Blueprint declares knowledge needs"
|
|
1049
|
-
}),
|
|
1050
|
-
/* @__PURE__ */ jsx4(CodeBlock4, {
|
|
1051
|
-
language: "typescript",
|
|
1052
|
-
code: `// AppBlueprintSpec
|
|
325
|
+
}`})]}),s("div",{className:"space-y-4",children:[t("h2",{className:"font-bold text-2xl",children:"Security & validation"}),s("ul",{className:"list-inside list-disc space-y-2 text-muted-foreground",children:[t("li",{children:"Integration connections are validated before binding - health checks ensure connectivity"}),t("li",{children:"Secrets are never stored in TenantAppConfig - only references to encrypted secrets"}),t("li",{children:"Policy Decision Point (PDP) enforces which workflows can use which integrations"}),t("li",{children:"All integration calls are audited with full request/response logging"}),t("li",{children:"Rate limiting and quotas are enforced per connection"})]})]}),s("div",{className:"space-y-4",children:[t("h2",{className:"font-bold text-2xl",children:"Best practices"}),s("ul",{className:"list-inside list-disc space-y-2 text-muted-foreground",children:[s("li",{children:["Use wildcard patterns sparingly in ",t("code",{children:"allowedWorkflows"})," - be explicit about access"]}),t("li",{children:"Always maintain separate sandbox and production connections"}),t("li",{children:"Monitor integration health checks and set up alerts for failures"}),t("li",{children:"Document the purpose of each integration binding for your team"}),t("li",{children:"Test integration changes in sandbox before promoting to production"})]})]}),s("div",{className:"flex items-center gap-4 pt-4",children:[t(w,{href:"/docs/architecture/app-config",className:"btn-ghost",children:"Previous: App Configuration"}),s(w,{href:"/docs/architecture/knowledge-binding",className:"btn-primary",children:["Knowledge Binding ",t(P,{size:16})]})]})]})}import{CodeBlock as f}from"@contractspec/lib.design-system";import N from"@contractspec/lib.ui-link";import{ChevronRight as T}from"lucide-react";import{jsx as e,jsxs as a}from"react/jsx-runtime";function B(){return a("div",{className:"space-y-8",children:[a("div",{className:"space-y-4",children:[e("h1",{className:"font-bold text-4xl",children:"Knowledge Binding"}),e("p",{className:"text-muted-foreground",children:"Knowledge binding connects your app's workflows and agents to structured knowledge spaces. This enables semantic search, RAG (Retrieval-Augmented Generation), and context-aware decision-making."})]}),a("div",{className:"space-y-4",children:[e("h2",{className:"font-bold text-2xl",children:"How it works"}),e("p",{className:"text-muted-foreground",children:"Knowledge binding follows a three-layer model:"}),a("ol",{className:"list-inside list-decimal space-y-3 text-muted-foreground",children:[a("li",{children:[e("strong",{children:"KnowledgeSpaceSpec"})," (global) - Defines a logical knowledge domain"]}),a("li",{children:[e("strong",{children:"KnowledgeSourceConfig"})," (per-tenant) - Tenant's data sources feeding spaces"]}),a("li",{children:[e("strong",{children:"AppKnowledgeBinding"})," (per-app) - Maps spaces to workflows/agents"]})]})]}),a("div",{className:"space-y-4",children:[e("h2",{className:"font-bold text-2xl",children:"Example: Support agent with RAG"}),e("p",{className:"text-muted-foreground",children:"Let's build a support agent that uses canonical product documentation and operational support history."}),a("div",{className:"space-y-3",children:[e("h3",{className:"font-semibold text-lg",children:"Step 1: Blueprint declares knowledge needs"}),e(f,{language:"typescript",code:`// AppBlueprintSpec
|
|
1053
326
|
{
|
|
1054
327
|
id: "support-app",
|
|
1055
328
|
version: "1.0.0",
|
|
@@ -1073,20 +346,7 @@ function ArchitectureKnowledgeBindingPage() {
|
|
|
1073
346
|
purpose: "Third-party integration documentation"
|
|
1074
347
|
}
|
|
1075
348
|
]
|
|
1076
|
-
}`
|
|
1077
|
-
})
|
|
1078
|
-
]
|
|
1079
|
-
}),
|
|
1080
|
-
/* @__PURE__ */ jsxs4("div", {
|
|
1081
|
-
className: "space-y-3",
|
|
1082
|
-
children: [
|
|
1083
|
-
/* @__PURE__ */ jsx4("h3", {
|
|
1084
|
-
className: "font-semibold text-lg",
|
|
1085
|
-
children: "Step 2: Tenant configures sources"
|
|
1086
|
-
}),
|
|
1087
|
-
/* @__PURE__ */ jsx4(CodeBlock4, {
|
|
1088
|
-
language: "typescript",
|
|
1089
|
-
code: `// KnowledgeSourceConfig (per-tenant)
|
|
349
|
+
}`})]}),a("div",{className:"space-y-3",children:[e("h3",{className:"font-semibold text-lg",children:"Step 2: Tenant configures sources"}),e(f,{language:"typescript",code:`// KnowledgeSourceConfig (per-tenant)
|
|
1090
350
|
[
|
|
1091
351
|
{
|
|
1092
352
|
id: "src_notion_product_docs",
|
|
@@ -1115,20 +375,7 @@ function ArchitectureKnowledgeBindingPage() {
|
|
|
1115
375
|
syncPolicy: { interval: "24h" },
|
|
1116
376
|
lastSyncedAt: "2025-01-15T00:00:00Z"
|
|
1117
377
|
}
|
|
1118
|
-
]`
|
|
1119
|
-
})
|
|
1120
|
-
]
|
|
1121
|
-
}),
|
|
1122
|
-
/* @__PURE__ */ jsxs4("div", {
|
|
1123
|
-
className: "space-y-3",
|
|
1124
|
-
children: [
|
|
1125
|
-
/* @__PURE__ */ jsx4("h3", {
|
|
1126
|
-
className: "font-semibold text-lg",
|
|
1127
|
-
children: "Step 3: TenantAppConfig binds spaces"
|
|
1128
|
-
}),
|
|
1129
|
-
/* @__PURE__ */ jsx4(CodeBlock4, {
|
|
1130
|
-
language: "typescript",
|
|
1131
|
-
code: `// TenantAppConfig
|
|
378
|
+
]`})]}),a("div",{className:"space-y-3",children:[e("h3",{className:"font-semibold text-lg",children:"Step 3: TenantAppConfig binds spaces"}),e(f,{language:"typescript",code:`// TenantAppConfig
|
|
1132
379
|
{
|
|
1133
380
|
tenantId: "acme-corp",
|
|
1134
381
|
blueprintId: "support-app",
|
|
@@ -1164,20 +411,7 @@ function ArchitectureKnowledgeBindingPage() {
|
|
|
1164
411
|
sources: ["src_stripe_docs"]
|
|
1165
412
|
}
|
|
1166
413
|
]
|
|
1167
|
-
}`
|
|
1168
|
-
})
|
|
1169
|
-
]
|
|
1170
|
-
}),
|
|
1171
|
-
/* @__PURE__ */ jsxs4("div", {
|
|
1172
|
-
className: "space-y-3",
|
|
1173
|
-
children: [
|
|
1174
|
-
/* @__PURE__ */ jsx4("h3", {
|
|
1175
|
-
className: "font-semibold text-lg",
|
|
1176
|
-
children: "Step 4: Workflow uses knowledge"
|
|
1177
|
-
}),
|
|
1178
|
-
/* @__PURE__ */ jsx4(CodeBlock4, {
|
|
1179
|
-
language: "yaml",
|
|
1180
|
-
code: `// WorkflowSpec
|
|
414
|
+
}`})]}),a("div",{className:"space-y-3",children:[e("h3",{className:"font-semibold text-lg",children:"Step 4: Workflow uses knowledge"}),e(f,{language:"yaml",code:`// WorkflowSpec
|
|
1181
415
|
workflowId: answer-question
|
|
1182
416
|
version: '1.0.0'.0.0
|
|
1183
417
|
|
|
@@ -1219,156 +453,7 @@ steps:
|
|
|
1219
453
|
\${steps.search-canonical.output.results}
|
|
1220
454
|
|
|
1221
455
|
Support history:
|
|
1222
|
-
\${steps.search-support-history.output.results}`
|
|
1223
|
-
})
|
|
1224
|
-
]
|
|
1225
|
-
})
|
|
1226
|
-
]
|
|
1227
|
-
}),
|
|
1228
|
-
/* @__PURE__ */ jsxs4("div", {
|
|
1229
|
-
className: "space-y-4",
|
|
1230
|
-
children: [
|
|
1231
|
-
/* @__PURE__ */ jsx4("h2", {
|
|
1232
|
-
className: "font-bold text-2xl",
|
|
1233
|
-
children: "Category-based access control"
|
|
1234
|
-
}),
|
|
1235
|
-
/* @__PURE__ */ jsx4("p", {
|
|
1236
|
-
className: "text-muted-foreground",
|
|
1237
|
-
children: "Different knowledge categories have different trust levels and access patterns:"
|
|
1238
|
-
}),
|
|
1239
|
-
/* @__PURE__ */ jsx4("div", {
|
|
1240
|
-
className: "overflow-x-auto rounded-lg border border-border/50",
|
|
1241
|
-
children: /* @__PURE__ */ jsxs4("table", {
|
|
1242
|
-
className: "w-full text-left text-sm",
|
|
1243
|
-
children: [
|
|
1244
|
-
/* @__PURE__ */ jsx4("thead", {
|
|
1245
|
-
className: "bg-card/50",
|
|
1246
|
-
children: /* @__PURE__ */ jsxs4("tr", {
|
|
1247
|
-
className: "border-border/50 border-b",
|
|
1248
|
-
children: [
|
|
1249
|
-
/* @__PURE__ */ jsx4("th", {
|
|
1250
|
-
className: "px-4 py-3 font-semibold",
|
|
1251
|
-
children: "Category"
|
|
1252
|
-
}),
|
|
1253
|
-
/* @__PURE__ */ jsx4("th", {
|
|
1254
|
-
className: "px-4 py-3 font-semibold",
|
|
1255
|
-
children: "Trust Level"
|
|
1256
|
-
}),
|
|
1257
|
-
/* @__PURE__ */ jsx4("th", {
|
|
1258
|
-
className: "px-4 py-3 font-semibold",
|
|
1259
|
-
children: "Use Cases"
|
|
1260
|
-
}),
|
|
1261
|
-
/* @__PURE__ */ jsx4("th", {
|
|
1262
|
-
className: "px-4 py-3 font-semibold",
|
|
1263
|
-
children: "Policy Impact"
|
|
1264
|
-
})
|
|
1265
|
-
]
|
|
1266
|
-
})
|
|
1267
|
-
}),
|
|
1268
|
-
/* @__PURE__ */ jsxs4("tbody", {
|
|
1269
|
-
className: "divide-y divide-border/50",
|
|
1270
|
-
children: [
|
|
1271
|
-
/* @__PURE__ */ jsxs4("tr", {
|
|
1272
|
-
children: [
|
|
1273
|
-
/* @__PURE__ */ jsx4("td", {
|
|
1274
|
-
className: "px-4 py-3 font-mono text-xs",
|
|
1275
|
-
children: "canonical"
|
|
1276
|
-
}),
|
|
1277
|
-
/* @__PURE__ */ jsx4("td", {
|
|
1278
|
-
className: "px-4 py-3",
|
|
1279
|
-
children: "Highest"
|
|
1280
|
-
}),
|
|
1281
|
-
/* @__PURE__ */ jsx4("td", {
|
|
1282
|
-
className: "px-4 py-3",
|
|
1283
|
-
children: "Product specs, schemas, official policies"
|
|
1284
|
-
}),
|
|
1285
|
-
/* @__PURE__ */ jsx4("td", {
|
|
1286
|
-
className: "px-4 py-3",
|
|
1287
|
-
children: "Can drive policy decisions"
|
|
1288
|
-
})
|
|
1289
|
-
]
|
|
1290
|
-
}),
|
|
1291
|
-
/* @__PURE__ */ jsxs4("tr", {
|
|
1292
|
-
children: [
|
|
1293
|
-
/* @__PURE__ */ jsx4("td", {
|
|
1294
|
-
className: "px-4 py-3 font-mono text-xs",
|
|
1295
|
-
children: "operational"
|
|
1296
|
-
}),
|
|
1297
|
-
/* @__PURE__ */ jsx4("td", {
|
|
1298
|
-
className: "px-4 py-3",
|
|
1299
|
-
children: "High"
|
|
1300
|
-
}),
|
|
1301
|
-
/* @__PURE__ */ jsx4("td", {
|
|
1302
|
-
className: "px-4 py-3",
|
|
1303
|
-
children: "Support tickets, sales docs, internal runbooks"
|
|
1304
|
-
}),
|
|
1305
|
-
/* @__PURE__ */ jsx4("td", {
|
|
1306
|
-
className: "px-4 py-3",
|
|
1307
|
-
children: "Can inform decisions"
|
|
1308
|
-
})
|
|
1309
|
-
]
|
|
1310
|
-
}),
|
|
1311
|
-
/* @__PURE__ */ jsxs4("tr", {
|
|
1312
|
-
children: [
|
|
1313
|
-
/* @__PURE__ */ jsx4("td", {
|
|
1314
|
-
className: "px-4 py-3 font-mono text-xs",
|
|
1315
|
-
children: "external"
|
|
1316
|
-
}),
|
|
1317
|
-
/* @__PURE__ */ jsx4("td", {
|
|
1318
|
-
className: "px-4 py-3",
|
|
1319
|
-
children: "Medium"
|
|
1320
|
-
}),
|
|
1321
|
-
/* @__PURE__ */ jsx4("td", {
|
|
1322
|
-
className: "px-4 py-3",
|
|
1323
|
-
children: "Third-party docs, regulations, PSP guides"
|
|
1324
|
-
}),
|
|
1325
|
-
/* @__PURE__ */ jsx4("td", {
|
|
1326
|
-
className: "px-4 py-3",
|
|
1327
|
-
children: "Reference only, not authoritative"
|
|
1328
|
-
})
|
|
1329
|
-
]
|
|
1330
|
-
}),
|
|
1331
|
-
/* @__PURE__ */ jsxs4("tr", {
|
|
1332
|
-
children: [
|
|
1333
|
-
/* @__PURE__ */ jsx4("td", {
|
|
1334
|
-
className: "px-4 py-3 font-mono text-xs",
|
|
1335
|
-
children: "ephemeral"
|
|
1336
|
-
}),
|
|
1337
|
-
/* @__PURE__ */ jsx4("td", {
|
|
1338
|
-
className: "px-4 py-3",
|
|
1339
|
-
children: "Low"
|
|
1340
|
-
}),
|
|
1341
|
-
/* @__PURE__ */ jsx4("td", {
|
|
1342
|
-
className: "px-4 py-3",
|
|
1343
|
-
children: "Agent scratchpads, session context, drafts"
|
|
1344
|
-
}),
|
|
1345
|
-
/* @__PURE__ */ jsx4("td", {
|
|
1346
|
-
className: "px-4 py-3",
|
|
1347
|
-
children: "Never used for decisions"
|
|
1348
|
-
})
|
|
1349
|
-
]
|
|
1350
|
-
})
|
|
1351
|
-
]
|
|
1352
|
-
})
|
|
1353
|
-
]
|
|
1354
|
-
})
|
|
1355
|
-
})
|
|
1356
|
-
]
|
|
1357
|
-
}),
|
|
1358
|
-
/* @__PURE__ */ jsxs4("div", {
|
|
1359
|
-
className: "space-y-4",
|
|
1360
|
-
children: [
|
|
1361
|
-
/* @__PURE__ */ jsx4("h2", {
|
|
1362
|
-
className: "font-bold text-2xl",
|
|
1363
|
-
children: "Multi-space workflows"
|
|
1364
|
-
}),
|
|
1365
|
-
/* @__PURE__ */ jsx4("p", {
|
|
1366
|
-
className: "text-muted-foreground",
|
|
1367
|
-
children: "Workflows can query multiple knowledge spaces and combine results:"
|
|
1368
|
-
}),
|
|
1369
|
-
/* @__PURE__ */ jsx4(CodeBlock4, {
|
|
1370
|
-
language: "typescript",
|
|
1371
|
-
code: `knowledgeBindings: [
|
|
456
|
+
\${steps.search-support-history.output.results}`})]})]}),a("div",{className:"space-y-4",children:[e("h2",{className:"font-bold text-2xl",children:"Category-based access control"}),e("p",{className:"text-muted-foreground",children:"Different knowledge categories have different trust levels and access patterns:"}),e("div",{className:"overflow-x-auto rounded-lg border border-border/50",children:a("table",{className:"w-full text-left text-sm",children:[e("thead",{className:"bg-card/50",children:a("tr",{className:"border-border/50 border-b",children:[e("th",{className:"px-4 py-3 font-semibold",children:"Category"}),e("th",{className:"px-4 py-3 font-semibold",children:"Trust Level"}),e("th",{className:"px-4 py-3 font-semibold",children:"Use Cases"}),e("th",{className:"px-4 py-3 font-semibold",children:"Policy Impact"})]})}),a("tbody",{className:"divide-y divide-border/50",children:[a("tr",{children:[e("td",{className:"px-4 py-3 font-mono text-xs",children:"canonical"}),e("td",{className:"px-4 py-3",children:"Highest"}),e("td",{className:"px-4 py-3",children:"Product specs, schemas, official policies"}),e("td",{className:"px-4 py-3",children:"Can drive policy decisions"})]}),a("tr",{children:[e("td",{className:"px-4 py-3 font-mono text-xs",children:"operational"}),e("td",{className:"px-4 py-3",children:"High"}),e("td",{className:"px-4 py-3",children:"Support tickets, sales docs, internal runbooks"}),e("td",{className:"px-4 py-3",children:"Can inform decisions"})]}),a("tr",{children:[e("td",{className:"px-4 py-3 font-mono text-xs",children:"external"}),e("td",{className:"px-4 py-3",children:"Medium"}),e("td",{className:"px-4 py-3",children:"Third-party docs, regulations, PSP guides"}),e("td",{className:"px-4 py-3",children:"Reference only, not authoritative"})]}),a("tr",{children:[e("td",{className:"px-4 py-3 font-mono text-xs",children:"ephemeral"}),e("td",{className:"px-4 py-3",children:"Low"}),e("td",{className:"px-4 py-3",children:"Agent scratchpads, session context, drafts"}),e("td",{className:"px-4 py-3",children:"Never used for decisions"})]})]})]})})]}),a("div",{className:"space-y-4",children:[e("h2",{className:"font-bold text-2xl",children:"Multi-space workflows"}),e("p",{className:"text-muted-foreground",children:"Workflows can query multiple knowledge spaces and combine results:"}),e(f,{language:"typescript",code:`knowledgeBindings: [
|
|
1372
457
|
{
|
|
1373
458
|
spaceId: "product-canon",
|
|
1374
459
|
enabled: true,
|
|
@@ -1396,416 +481,11 @@ steps:
|
|
|
1396
481
|
allowedCategories: ["operational"],
|
|
1397
482
|
sources: ["src_crm_data", "src_past_invoices"]
|
|
1398
483
|
}
|
|
1399
|
-
]`
|
|
1400
|
-
})
|
|
1401
|
-
]
|
|
1402
|
-
}),
|
|
1403
|
-
/* @__PURE__ */ jsxs4("div", {
|
|
1404
|
-
className: "space-y-4",
|
|
1405
|
-
children: [
|
|
1406
|
-
/* @__PURE__ */ jsx4("h2", {
|
|
1407
|
-
className: "font-bold text-2xl",
|
|
1408
|
-
children: "Security & validation"
|
|
1409
|
-
}),
|
|
1410
|
-
/* @__PURE__ */ jsxs4("ul", {
|
|
1411
|
-
className: "list-inside list-disc space-y-2 text-muted-foreground",
|
|
1412
|
-
children: [
|
|
1413
|
-
/* @__PURE__ */ jsx4("li", {
|
|
1414
|
-
children: "Knowledge sources are validated before sync - credentials and permissions checked"
|
|
1415
|
-
}),
|
|
1416
|
-
/* @__PURE__ */ jsx4("li", {
|
|
1417
|
-
children: "PDP enforces which workflows/agents can access which spaces"
|
|
1418
|
-
}),
|
|
1419
|
-
/* @__PURE__ */ jsx4("li", {
|
|
1420
|
-
children: "All knowledge queries are audited with search terms and results"
|
|
1421
|
-
}),
|
|
1422
|
-
/* @__PURE__ */ jsx4("li", {
|
|
1423
|
-
children: "Canonical knowledge is immutable once indexed - changes require re-sync"
|
|
1424
|
-
}),
|
|
1425
|
-
/* @__PURE__ */ jsx4("li", {
|
|
1426
|
-
children: "Ephemeral knowledge is automatically purged based on retention policies"
|
|
1427
|
-
})
|
|
1428
|
-
]
|
|
1429
|
-
})
|
|
1430
|
-
]
|
|
1431
|
-
}),
|
|
1432
|
-
/* @__PURE__ */ jsxs4("div", {
|
|
1433
|
-
className: "space-y-4",
|
|
1434
|
-
children: [
|
|
1435
|
-
/* @__PURE__ */ jsx4("h2", {
|
|
1436
|
-
className: "font-bold text-2xl",
|
|
1437
|
-
children: "Best practices"
|
|
1438
|
-
}),
|
|
1439
|
-
/* @__PURE__ */ jsxs4("ul", {
|
|
1440
|
-
className: "list-inside list-disc space-y-2 text-muted-foreground",
|
|
1441
|
-
children: [
|
|
1442
|
-
/* @__PURE__ */ jsx4("li", {
|
|
1443
|
-
children: "Use canonical spaces for policy-critical decisions, operational for suggestions"
|
|
1444
|
-
}),
|
|
1445
|
-
/* @__PURE__ */ jsx4("li", {
|
|
1446
|
-
children: "Never allow workflows to write to canonical spaces - maintain read-only access"
|
|
1447
|
-
}),
|
|
1448
|
-
/* @__PURE__ */ jsx4("li", {
|
|
1449
|
-
children: "Set up monitoring for sync failures and stale knowledge sources"
|
|
1450
|
-
}),
|
|
1451
|
-
/* @__PURE__ */ jsx4("li", {
|
|
1452
|
-
children: "Document the purpose and trust level of each knowledge space"
|
|
1453
|
-
}),
|
|
1454
|
-
/* @__PURE__ */ jsx4("li", {
|
|
1455
|
-
children: "Test knowledge queries in sandbox before promoting to production"
|
|
1456
|
-
}),
|
|
1457
|
-
/* @__PURE__ */ jsxs4("li", {
|
|
1458
|
-
children: [
|
|
1459
|
-
"Use explicit ",
|
|
1460
|
-
/* @__PURE__ */ jsx4("code", {
|
|
1461
|
-
children: "allowedConsumers"
|
|
1462
|
-
}),
|
|
1463
|
-
" - avoid wildcard access"
|
|
1464
|
-
]
|
|
1465
|
-
})
|
|
1466
|
-
]
|
|
1467
|
-
})
|
|
1468
|
-
]
|
|
1469
|
-
}),
|
|
1470
|
-
/* @__PURE__ */ jsxs4("div", {
|
|
1471
|
-
className: "flex items-center gap-4 pt-4",
|
|
1472
|
-
children: [
|
|
1473
|
-
/* @__PURE__ */ jsx4(Link4, {
|
|
1474
|
-
href: "/docs/architecture/integration-binding",
|
|
1475
|
-
className: "btn-ghost",
|
|
1476
|
-
children: "Previous: Integration Binding"
|
|
1477
|
-
}),
|
|
1478
|
-
/* @__PURE__ */ jsxs4(Link4, {
|
|
1479
|
-
href: "/docs/knowledge",
|
|
1480
|
-
className: "btn-primary",
|
|
1481
|
-
children: [
|
|
1482
|
-
"Knowledge & Context ",
|
|
1483
|
-
/* @__PURE__ */ jsx4(ChevronRight4, {
|
|
1484
|
-
size: 16
|
|
1485
|
-
})
|
|
1486
|
-
]
|
|
1487
|
-
})
|
|
1488
|
-
]
|
|
1489
|
-
})
|
|
1490
|
-
]
|
|
1491
|
-
});
|
|
1492
|
-
}
|
|
1493
|
-
|
|
1494
|
-
// src/components/docs/architecture/ArchitectureMultiTenancyPage.tsx
|
|
1495
|
-
import { CodeBlock as CodeBlock5 } from "@contractspec/lib.design-system";
|
|
1496
|
-
import Link5 from "@contractspec/lib.ui-link";
|
|
1497
|
-
import { ChevronRight as ChevronRight5 } from "lucide-react";
|
|
1498
|
-
import { jsx as jsx5, jsxs as jsxs5 } from "react/jsx-runtime";
|
|
1499
|
-
function ArchitectureMultiTenancyPage() {
|
|
1500
|
-
return /* @__PURE__ */ jsxs5("div", {
|
|
1501
|
-
className: "space-y-8",
|
|
1502
|
-
children: [
|
|
1503
|
-
/* @__PURE__ */ jsxs5("div", {
|
|
1504
|
-
className: "space-y-4",
|
|
1505
|
-
children: [
|
|
1506
|
-
/* @__PURE__ */ jsx5("h1", {
|
|
1507
|
-
className: "font-bold text-4xl",
|
|
1508
|
-
children: "Multi-Tenancy"
|
|
1509
|
-
}),
|
|
1510
|
-
/* @__PURE__ */ jsx5("p", {
|
|
1511
|
-
className: "text-muted-foreground",
|
|
1512
|
-
children: "ContractSpec is designed from the ground up for multi-tenancy. Apps built with ContractSpec can serve multiple organizations (tenants) from a single deployment, while ensuring strict data isolation and configuration separation."
|
|
1513
|
-
})
|
|
1514
|
-
]
|
|
1515
|
-
}),
|
|
1516
|
-
/* @__PURE__ */ jsxs5("div", {
|
|
1517
|
-
className: "space-y-4",
|
|
1518
|
-
children: [
|
|
1519
|
-
/* @__PURE__ */ jsx5("h2", {
|
|
1520
|
-
className: "font-bold text-2xl",
|
|
1521
|
-
children: "Core Concepts"
|
|
1522
|
-
}),
|
|
1523
|
-
/* @__PURE__ */ jsxs5("ul", {
|
|
1524
|
-
className: "list-inside list-disc space-y-2 text-muted-foreground",
|
|
1525
|
-
children: [
|
|
1526
|
-
/* @__PURE__ */ jsxs5("li", {
|
|
1527
|
-
children: [
|
|
1528
|
-
/* @__PURE__ */ jsx5("strong", {
|
|
1529
|
-
children: "Tenant"
|
|
1530
|
-
}),
|
|
1531
|
-
": An organization or customer that uses your app. Each tenant has a unique ",
|
|
1532
|
-
/* @__PURE__ */ jsx5("code", {
|
|
1533
|
-
children: "tenantId"
|
|
1534
|
-
}),
|
|
1535
|
-
"."
|
|
1536
|
-
]
|
|
1537
|
-
}),
|
|
1538
|
-
/* @__PURE__ */ jsxs5("li", {
|
|
1539
|
-
children: [
|
|
1540
|
-
/* @__PURE__ */ jsx5("strong", {
|
|
1541
|
-
children: "Tenant Isolation"
|
|
1542
|
-
}),
|
|
1543
|
-
": Data and configuration for one tenant is never accessible to another tenant unless explicitly shared."
|
|
1544
|
-
]
|
|
1545
|
-
}),
|
|
1546
|
-
/* @__PURE__ */ jsxs5("li", {
|
|
1547
|
-
children: [
|
|
1548
|
-
/* @__PURE__ */ jsx5("strong", {
|
|
1549
|
-
children: "Tenant Context"
|
|
1550
|
-
}),
|
|
1551
|
-
": Every request and operation runs within the context of a specific tenant."
|
|
1552
|
-
]
|
|
1553
|
-
})
|
|
1554
|
-
]
|
|
1555
|
-
})
|
|
1556
|
-
]
|
|
1557
|
-
}),
|
|
1558
|
-
/* @__PURE__ */ jsxs5("div", {
|
|
1559
|
-
className: "space-y-4",
|
|
1560
|
-
children: [
|
|
1561
|
-
/* @__PURE__ */ jsx5("h2", {
|
|
1562
|
-
className: "font-bold text-2xl",
|
|
1563
|
-
children: "Tenant Resolution"
|
|
1564
|
-
}),
|
|
1565
|
-
/* @__PURE__ */ jsx5("p", {
|
|
1566
|
-
className: "text-muted-foreground",
|
|
1567
|
-
children: "The runtime automatically resolves the tenant context for every request based on:"
|
|
1568
|
-
}),
|
|
1569
|
-
/* @__PURE__ */ jsxs5("ul", {
|
|
1570
|
-
className: "list-inside list-disc space-y-2 text-muted-foreground",
|
|
1571
|
-
children: [
|
|
1572
|
-
/* @__PURE__ */ jsxs5("li", {
|
|
1573
|
-
children: [
|
|
1574
|
-
"Subdomain (e.g., ",
|
|
1575
|
-
/* @__PURE__ */ jsx5("code", {
|
|
1576
|
-
children: "acme.app.com"
|
|
1577
|
-
}),
|
|
1578
|
-
")"
|
|
1579
|
-
]
|
|
1580
|
-
}),
|
|
1581
|
-
/* @__PURE__ */ jsxs5("li", {
|
|
1582
|
-
children: [
|
|
1583
|
-
"Custom Domain (e.g., ",
|
|
1584
|
-
/* @__PURE__ */ jsx5("code", {
|
|
1585
|
-
children: "portal.acme.com"
|
|
1586
|
-
}),
|
|
1587
|
-
")"
|
|
1588
|
-
]
|
|
1589
|
-
}),
|
|
1590
|
-
/* @__PURE__ */ jsxs5("li", {
|
|
1591
|
-
children: [
|
|
1592
|
-
"Header (e.g., ",
|
|
1593
|
-
/* @__PURE__ */ jsx5("code", {
|
|
1594
|
-
children: "x-tenant-id: acme-corp"
|
|
1595
|
-
}),
|
|
1596
|
-
")"
|
|
1597
|
-
]
|
|
1598
|
-
}),
|
|
1599
|
-
/* @__PURE__ */ jsx5("li", {
|
|
1600
|
-
children: "Authentication Token (embedded tenant claim)"
|
|
1601
|
-
})
|
|
1602
|
-
]
|
|
1603
|
-
})
|
|
1604
|
-
]
|
|
1605
|
-
}),
|
|
1606
|
-
/* @__PURE__ */ jsxs5("div", {
|
|
1607
|
-
className: "space-y-4",
|
|
1608
|
-
children: [
|
|
1609
|
-
/* @__PURE__ */ jsx5("h2", {
|
|
1610
|
-
className: "font-bold text-2xl",
|
|
1611
|
-
children: "Configuration Isolation"
|
|
1612
|
-
}),
|
|
1613
|
-
/* @__PURE__ */ jsxs5("p", {
|
|
1614
|
-
className: "text-muted-foreground",
|
|
1615
|
-
children: [
|
|
1616
|
-
"Each tenant has its own ",
|
|
1617
|
-
/* @__PURE__ */ jsx5("code", {
|
|
1618
|
-
children: "TenantAppConfig"
|
|
1619
|
-
}),
|
|
1620
|
-
" which defines:"
|
|
1621
|
-
]
|
|
1622
|
-
}),
|
|
1623
|
-
/* @__PURE__ */ jsx5(CodeBlock5, {
|
|
1624
|
-
language: "typescript",
|
|
1625
|
-
code: `type TenantAppConfig = {
|
|
484
|
+
]`})]}),a("div",{className:"space-y-4",children:[e("h2",{className:"font-bold text-2xl",children:"Security & validation"}),a("ul",{className:"list-inside list-disc space-y-2 text-muted-foreground",children:[e("li",{children:"Knowledge sources are validated before sync - credentials and permissions checked"}),e("li",{children:"PDP enforces which workflows/agents can access which spaces"}),e("li",{children:"All knowledge queries are audited with search terms and results"}),e("li",{children:"Canonical knowledge is immutable once indexed - changes require re-sync"}),e("li",{children:"Ephemeral knowledge is automatically purged based on retention policies"})]})]}),a("div",{className:"space-y-4",children:[e("h2",{className:"font-bold text-2xl",children:"Best practices"}),a("ul",{className:"list-inside list-disc space-y-2 text-muted-foreground",children:[e("li",{children:"Use canonical spaces for policy-critical decisions, operational for suggestions"}),e("li",{children:"Never allow workflows to write to canonical spaces - maintain read-only access"}),e("li",{children:"Set up monitoring for sync failures and stale knowledge sources"}),e("li",{children:"Document the purpose and trust level of each knowledge space"}),e("li",{children:"Test knowledge queries in sandbox before promoting to production"}),a("li",{children:["Use explicit ",e("code",{children:"allowedConsumers"})," - avoid wildcard access"]})]})]}),a("div",{className:"flex items-center gap-4 pt-4",children:[e(N,{href:"/docs/architecture/integration-binding",className:"btn-ghost",children:"Previous: Integration Binding"}),a(N,{href:"/docs/knowledge",className:"btn-primary",children:["Knowledge & Context ",e(T,{size:16})]})]})]})}import{CodeBlock as R}from"@contractspec/lib.design-system";import k from"@contractspec/lib.ui-link";import{ChevronRight as q}from"lucide-react";import{jsx as c,jsxs as l}from"react/jsx-runtime";function L(){return l("div",{className:"space-y-8",children:[l("div",{className:"space-y-4",children:[c("h1",{className:"font-bold text-4xl",children:"Multi-Tenancy"}),c("p",{className:"text-muted-foreground",children:"ContractSpec is designed from the ground up for multi-tenancy. Apps built with ContractSpec can serve multiple organizations (tenants) from a single deployment, while ensuring strict data isolation and configuration separation."})]}),l("div",{className:"space-y-4",children:[c("h2",{className:"font-bold text-2xl",children:"Core Concepts"}),l("ul",{className:"list-inside list-disc space-y-2 text-muted-foreground",children:[l("li",{children:[c("strong",{children:"Tenant"}),": An organization or customer that uses your app. Each tenant has a unique ",c("code",{children:"tenantId"}),"."]}),l("li",{children:[c("strong",{children:"Tenant Isolation"}),": Data and configuration for one tenant is never accessible to another tenant unless explicitly shared."]}),l("li",{children:[c("strong",{children:"Tenant Context"}),": Every request and operation runs within the context of a specific tenant."]})]})]}),l("div",{className:"space-y-4",children:[c("h2",{className:"font-bold text-2xl",children:"Tenant Resolution"}),c("p",{className:"text-muted-foreground",children:"The runtime automatically resolves the tenant context for every request based on:"}),l("ul",{className:"list-inside list-disc space-y-2 text-muted-foreground",children:[l("li",{children:["Subdomain (e.g., ",c("code",{children:"acme.app.com"}),")"]}),l("li",{children:["Custom Domain (e.g., ",c("code",{children:"portal.acme.com"}),")"]}),l("li",{children:["Header (e.g., ",c("code",{children:"x-tenant-id: acme-corp"}),")"]}),c("li",{children:"Authentication Token (embedded tenant claim)"})]})]}),l("div",{className:"space-y-4",children:[c("h2",{className:"font-bold text-2xl",children:"Configuration Isolation"}),l("p",{className:"text-muted-foreground",children:["Each tenant has its own ",c("code",{children:"TenantAppConfig"})," which defines:"]}),c(R,{language:"typescript",code:`type TenantAppConfig = {
|
|
1626
485
|
tenantId: string;
|
|
1627
486
|
blueprintId: string;
|
|
1628
487
|
// ...
|
|
1629
488
|
integrationBindings: AppIntegrationBinding[];
|
|
1630
489
|
knowledgeBindings: AppKnowledgeBinding[];
|
|
1631
490
|
featureFlags: Record<string, boolean>;
|
|
1632
|
-
};`
|
|
1633
|
-
}),
|
|
1634
|
-
/* @__PURE__ */ jsx5("p", {
|
|
1635
|
-
className: "mt-2 text-muted-foreground",
|
|
1636
|
-
children: "This allows you to customize feature flags, integration connections, and knowledge sources per tenant without changing the application code."
|
|
1637
|
-
})
|
|
1638
|
-
]
|
|
1639
|
-
}),
|
|
1640
|
-
/* @__PURE__ */ jsxs5("div", {
|
|
1641
|
-
className: "flex items-center gap-4 pt-4",
|
|
1642
|
-
children: [
|
|
1643
|
-
/* @__PURE__ */ jsx5(Link5, {
|
|
1644
|
-
href: "/docs/architecture",
|
|
1645
|
-
className: "btn-ghost",
|
|
1646
|
-
children: "Back to Architecture"
|
|
1647
|
-
}),
|
|
1648
|
-
/* @__PURE__ */ jsxs5(Link5, {
|
|
1649
|
-
href: "/docs/libraries/multi-tenancy",
|
|
1650
|
-
className: "btn-primary",
|
|
1651
|
-
children: [
|
|
1652
|
-
"Multi-Tenancy Library ",
|
|
1653
|
-
/* @__PURE__ */ jsx5(ChevronRight5, {
|
|
1654
|
-
size: 16
|
|
1655
|
-
})
|
|
1656
|
-
]
|
|
1657
|
-
})
|
|
1658
|
-
]
|
|
1659
|
-
})
|
|
1660
|
-
]
|
|
1661
|
-
});
|
|
1662
|
-
}
|
|
1663
|
-
|
|
1664
|
-
// src/components/docs/architecture/ArchitectureOverviewPage.tsx
|
|
1665
|
-
import Link6 from "@contractspec/lib.ui-link";
|
|
1666
|
-
import { jsx as jsx6, jsxs as jsxs6 } from "react/jsx-runtime";
|
|
1667
|
-
var layers = [
|
|
1668
|
-
{
|
|
1669
|
-
title: "Contracts and schemas",
|
|
1670
|
-
body: "Explicit specs define the durable boundary for behavior, data, and governance."
|
|
1671
|
-
},
|
|
1672
|
-
{
|
|
1673
|
-
title: "Bindings and configuration",
|
|
1674
|
-
body: "Apps, tenants, integrations, and knowledge sources are wired through explicit configuration instead of hidden glue."
|
|
1675
|
-
},
|
|
1676
|
-
{
|
|
1677
|
-
title: "Runtimes and generators",
|
|
1678
|
-
body: "Serve or generate aligned surfaces for API, UI, workflows, docs, and agent-facing interfaces."
|
|
1679
|
-
},
|
|
1680
|
-
{
|
|
1681
|
-
title: "Operate and observe",
|
|
1682
|
-
body: "Carry auditability, policy, tracing, migrations, and tenant isolation through the same model."
|
|
1683
|
-
}
|
|
1684
|
-
];
|
|
1685
|
-
function ArchitectureOverviewPage() {
|
|
1686
|
-
return /* @__PURE__ */ jsxs6("div", {
|
|
1687
|
-
className: "space-y-10",
|
|
1688
|
-
children: [
|
|
1689
|
-
/* @__PURE__ */ jsxs6("div", {
|
|
1690
|
-
className: "space-y-3",
|
|
1691
|
-
children: [
|
|
1692
|
-
/* @__PURE__ */ jsx6("p", {
|
|
1693
|
-
className: "editorial-kicker",
|
|
1694
|
-
children: "Build"
|
|
1695
|
-
}),
|
|
1696
|
-
/* @__PURE__ */ jsx6("h1", {
|
|
1697
|
-
className: "font-serif text-4xl tracking-[-0.04em] md:text-5xl",
|
|
1698
|
-
children: "The architecture keeps contracts, runtime behavior, and operations in the same system."
|
|
1699
|
-
}),
|
|
1700
|
-
/* @__PURE__ */ jsx6("p", {
|
|
1701
|
-
className: "max-w-3xl text-lg text-muted-foreground leading-8",
|
|
1702
|
-
children: "ContractSpec is not a single runtime. It is a layered system that lets you define explicit boundaries, bind real-world configuration, and then serve or generate aligned surfaces without losing control of the output."
|
|
1703
|
-
})
|
|
1704
|
-
]
|
|
1705
|
-
}),
|
|
1706
|
-
/* @__PURE__ */ jsx6("div", {
|
|
1707
|
-
className: "grid gap-4 md:grid-cols-2",
|
|
1708
|
-
children: layers.map((layer) => /* @__PURE__ */ jsxs6("article", {
|
|
1709
|
-
className: "editorial-panel space-y-3",
|
|
1710
|
-
children: [
|
|
1711
|
-
/* @__PURE__ */ jsx6("h2", {
|
|
1712
|
-
className: "font-semibold text-xl",
|
|
1713
|
-
children: layer.title
|
|
1714
|
-
}),
|
|
1715
|
-
/* @__PURE__ */ jsx6("p", {
|
|
1716
|
-
className: "text-muted-foreground text-sm leading-7",
|
|
1717
|
-
children: layer.body
|
|
1718
|
-
})
|
|
1719
|
-
]
|
|
1720
|
-
}, layer.title))
|
|
1721
|
-
}),
|
|
1722
|
-
/* @__PURE__ */ jsxs6("section", {
|
|
1723
|
-
className: "editorial-panel space-y-5",
|
|
1724
|
-
children: [
|
|
1725
|
-
/* @__PURE__ */ jsxs6("div", {
|
|
1726
|
-
className: "space-y-2",
|
|
1727
|
-
children: [
|
|
1728
|
-
/* @__PURE__ */ jsx6("h2", {
|
|
1729
|
-
className: "font-serif text-3xl tracking-[-0.03em]",
|
|
1730
|
-
children: "Follow the architecture by responsibility"
|
|
1731
|
-
}),
|
|
1732
|
-
/* @__PURE__ */ jsx6("p", {
|
|
1733
|
-
className: "text-muted-foreground text-sm leading-7",
|
|
1734
|
-
children: "Use the architecture pages when you need to understand how the pieces snap together in a real deployment."
|
|
1735
|
-
})
|
|
1736
|
-
]
|
|
1737
|
-
}),
|
|
1738
|
-
/* @__PURE__ */ jsxs6("div", {
|
|
1739
|
-
className: "grid gap-4 md:grid-cols-2",
|
|
1740
|
-
children: [
|
|
1741
|
-
/* @__PURE__ */ jsxs6(Link6, {
|
|
1742
|
-
href: "/docs/architecture/app-config",
|
|
1743
|
-
className: "docs-footer-link",
|
|
1744
|
-
children: [
|
|
1745
|
-
/* @__PURE__ */ jsx6("h3", {
|
|
1746
|
-
className: "font-semibold text-lg",
|
|
1747
|
-
children: "App configuration"
|
|
1748
|
-
}),
|
|
1749
|
-
/* @__PURE__ */ jsx6("p", {
|
|
1750
|
-
className: "text-muted-foreground text-sm leading-7",
|
|
1751
|
-
children: "How blueprint-level and tenant-level config stay explicit and merge safely."
|
|
1752
|
-
})
|
|
1753
|
-
]
|
|
1754
|
-
}),
|
|
1755
|
-
/* @__PURE__ */ jsxs6(Link6, {
|
|
1756
|
-
href: "/docs/architecture/integration-binding",
|
|
1757
|
-
className: "docs-footer-link",
|
|
1758
|
-
children: [
|
|
1759
|
-
/* @__PURE__ */ jsx6("h3", {
|
|
1760
|
-
className: "font-semibold text-lg",
|
|
1761
|
-
children: "Integration binding"
|
|
1762
|
-
}),
|
|
1763
|
-
/* @__PURE__ */ jsx6("p", {
|
|
1764
|
-
className: "text-muted-foreground text-sm leading-7",
|
|
1765
|
-
children: "How apps connect to tenant-owned integrations without leaking provider logic everywhere."
|
|
1766
|
-
})
|
|
1767
|
-
]
|
|
1768
|
-
}),
|
|
1769
|
-
/* @__PURE__ */ jsxs6(Link6, {
|
|
1770
|
-
href: "/docs/architecture/knowledge-binding",
|
|
1771
|
-
className: "docs-footer-link",
|
|
1772
|
-
children: [
|
|
1773
|
-
/* @__PURE__ */ jsx6("h3", {
|
|
1774
|
-
className: "font-semibold text-lg",
|
|
1775
|
-
children: "Knowledge binding"
|
|
1776
|
-
}),
|
|
1777
|
-
/* @__PURE__ */ jsx6("p", {
|
|
1778
|
-
className: "text-muted-foreground text-sm leading-7",
|
|
1779
|
-
children: "How trusted knowledge enters the system and stays isolated by context and tenant."
|
|
1780
|
-
})
|
|
1781
|
-
]
|
|
1782
|
-
}),
|
|
1783
|
-
/* @__PURE__ */ jsxs6(Link6, {
|
|
1784
|
-
href: "/docs/architecture/control-plane",
|
|
1785
|
-
className: "docs-footer-link",
|
|
1786
|
-
children: [
|
|
1787
|
-
/* @__PURE__ */ jsx6("h3", {
|
|
1788
|
-
className: "font-semibold text-lg",
|
|
1789
|
-
children: "Control plane runtime"
|
|
1790
|
-
}),
|
|
1791
|
-
/* @__PURE__ */ jsx6("p", {
|
|
1792
|
-
className: "text-muted-foreground text-sm leading-7",
|
|
1793
|
-
children: "How intent, policy, planning, and execution flow through the system runtime."
|
|
1794
|
-
})
|
|
1795
|
-
]
|
|
1796
|
-
})
|
|
1797
|
-
]
|
|
1798
|
-
})
|
|
1799
|
-
]
|
|
1800
|
-
})
|
|
1801
|
-
]
|
|
1802
|
-
});
|
|
1803
|
-
}
|
|
1804
|
-
export {
|
|
1805
|
-
ArchitectureOverviewPage,
|
|
1806
|
-
ArchitectureMultiTenancyPage,
|
|
1807
|
-
ArchitectureKnowledgeBindingPage,
|
|
1808
|
-
ArchitectureIntegrationBindingPage,
|
|
1809
|
-
ArchitectureControlPlanePage,
|
|
1810
|
-
ArchitectureAppConfigPage
|
|
1811
|
-
};
|
|
491
|
+
};`}),c("p",{className:"mt-2 text-muted-foreground",children:"This allows you to customize feature flags, integration connections, and knowledge sources per tenant without changing the application code."})]}),l("div",{className:"flex items-center gap-4 pt-4",children:[c(k,{href:"/docs/architecture",className:"btn-ghost",children:"Back to Architecture"}),l(k,{href:"/docs/libraries/multi-tenancy",className:"btn-primary",children:["Multi-Tenancy Library ",c(q,{size:16})]})]})]})}import u from"@contractspec/lib.ui-link";import{jsx as i,jsxs as d}from"react/jsx-runtime";var K=[{title:"Contracts and schemas",body:"Explicit specs define the durable boundary for behavior, data, and governance."},{title:"Bindings and configuration",body:"Apps, tenants, integrations, and knowledge sources are wired through explicit configuration instead of hidden glue."},{title:"Runtimes and generators",body:"Serve or generate aligned surfaces for API, UI, workflows, docs, and agent-facing interfaces."},{title:"Operate and observe",body:"Carry auditability, policy, tracing, migrations, and tenant isolation through the same model."}];function D(){return d("div",{className:"space-y-10",children:[d("div",{className:"space-y-3",children:[i("p",{className:"editorial-kicker",children:"Build"}),i("h1",{className:"font-serif text-4xl tracking-[-0.04em] md:text-5xl",children:"The architecture keeps contracts, runtime behavior, and operations in the same system."}),i("p",{className:"max-w-3xl text-lg text-muted-foreground leading-8",children:"ContractSpec is not a single runtime. It is a layered system that lets you define explicit boundaries, bind real-world configuration, and then serve or generate aligned surfaces without losing control of the output."})]}),i("div",{className:"grid gap-4 md:grid-cols-2",children:K.map((y)=>d("article",{className:"editorial-panel space-y-3",children:[i("h2",{className:"font-semibold text-xl",children:y.title}),i("p",{className:"text-muted-foreground text-sm leading-7",children:y.body})]},y.title))}),d("section",{className:"editorial-panel space-y-5",children:[d("div",{className:"space-y-2",children:[i("h2",{className:"font-serif text-3xl tracking-[-0.03em]",children:"UI composition belongs in the bundle runtime layer"}),i("p",{className:"text-muted-foreground text-sm leading-7",children:"When the system needs adaptive layouts, entity workbenches, assistant slots, and safe overlays, use module bundles as the layer between the contract model and the rendered surface."})]}),d("div",{className:"grid gap-4 md:grid-cols-2",children:[d(u,{href:"/docs/specs/module-bundles",className:"docs-footer-link",children:[i("h3",{className:"font-semibold text-lg",children:"Module bundles spec"}),i("p",{className:"text-muted-foreground text-sm leading-7",children:"See the typed bundle contract, resolved surface plan model, and bounded AI/runtime behavior."})]}),d(u,{href:"/docs/guides/first-module-bundle",className:"docs-footer-link",children:[i("h3",{className:"font-semibold text-lg",children:"Build a first module bundle"}),i("p",{className:"text-muted-foreground text-sm leading-7",children:"Follow the route-to-plan-to-render path with one practical host example."})]})]})]}),d("section",{className:"editorial-panel space-y-5",children:[d("div",{className:"space-y-2",children:[i("h2",{className:"font-serif text-3xl tracking-[-0.03em]",children:"Follow the architecture by responsibility"}),i("p",{className:"text-muted-foreground text-sm leading-7",children:"Use the architecture pages when you need to understand how the pieces snap together in a real deployment."})]}),d("div",{className:"grid gap-4 md:grid-cols-2",children:[d(u,{href:"/docs/architecture/app-config",className:"docs-footer-link",children:[i("h3",{className:"font-semibold text-lg",children:"App configuration"}),i("p",{className:"text-muted-foreground text-sm leading-7",children:"How blueprint-level and tenant-level config stay explicit and merge safely."})]}),d(u,{href:"/docs/architecture/integration-binding",className:"docs-footer-link",children:[i("h3",{className:"font-semibold text-lg",children:"Integration binding"}),i("p",{className:"text-muted-foreground text-sm leading-7",children:"How apps connect to tenant-owned integrations without leaking provider logic everywhere."})]}),d(u,{href:"/docs/architecture/knowledge-binding",className:"docs-footer-link",children:[i("h3",{className:"font-semibold text-lg",children:"Knowledge binding"}),i("p",{className:"text-muted-foreground text-sm leading-7",children:"How trusted knowledge enters the system and stays isolated by context and tenant."})]}),d(u,{href:"/docs/architecture/control-plane",className:"docs-footer-link",children:[i("h3",{className:"font-semibold text-lg",children:"Control plane runtime"}),i("p",{className:"text-muted-foreground text-sm leading-7",children:"How intent, policy, planning, and execution flow through the system runtime."})]})]})]})]})}export{D as ArchitectureOverviewPage,L as ArchitectureMultiTenancyPage,B as ArchitectureKnowledgeBindingPage,_ as ArchitectureIntegrationBindingPage,S as ArchitectureControlPlanePage,I as ArchitectureAppConfigPage};
|