@decantr/content 3.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +58 -0
- package/archetypes/about-hybrid.json +104 -0
- package/archetypes/admin-analytics.json +63 -0
- package/archetypes/admin-moderation.json +87 -0
- package/archetypes/admin-overview.json +77 -0
- package/archetypes/agent-orchestrator.json +178 -0
- package/archetypes/agent-studio.json +154 -0
- package/archetypes/ai-chatbot.json +121 -0
- package/archetypes/ai-transparency.json +140 -0
- package/archetypes/alert-manager-pro.json +154 -0
- package/archetypes/api-console.json +130 -0
- package/archetypes/api-reference.json +95 -0
- package/archetypes/appointment-center.json +113 -0
- package/archetypes/asset-browser.json +90 -0
- package/archetypes/audit-center.json +103 -0
- package/archetypes/auth-flow-enterprise.json +140 -0
- package/archetypes/auth-flow.json +101 -0
- package/archetypes/auth-full.json +199 -0
- package/archetypes/auth-gateway.json +76 -0
- package/archetypes/billing-portal.json +75 -0
- package/archetypes/billing.json +74 -0
- package/archetypes/budget-planner.json +63 -0
- package/archetypes/budget-transparency.json +117 -0
- package/archetypes/buyer-dashboard.json +124 -0
- package/archetypes/changelog-center.json +96 -0
- package/archetypes/character-library.json +113 -0
- package/archetypes/citation-tools.json +98 -0
- package/archetypes/cloud-infrastructure.json +253 -0
- package/archetypes/cloud-marketing.json +111 -0
- package/archetypes/collaboration-hub.json +87 -0
- package/archetypes/community-feed.json +131 -0
- package/archetypes/config-editor.json +136 -0
- package/archetypes/contact.json +82 -0
- package/archetypes/content-author.json +121 -0
- package/archetypes/content-editor.json +82 -0
- package/archetypes/content-newsletter.json +111 -0
- package/archetypes/content-reader.json +135 -0
- package/archetypes/content-site.json +112 -0
- package/archetypes/contract-center.json +120 -0
- package/archetypes/cook-mode.json +57 -0
- package/archetypes/copilot-settings.json +87 -0
- package/archetypes/copilot-workspace.json +110 -0
- package/archetypes/creator-content.json +128 -0
- package/archetypes/creator-dashboard.json +105 -0
- package/archetypes/creator-earnings.json +100 -0
- package/archetypes/creator-subscribers.json +99 -0
- package/archetypes/creator-tiers.json +76 -0
- package/archetypes/crm-dashboard.json +199 -0
- package/archetypes/crm-email.json +88 -0
- package/archetypes/crm-intelligence.json +85 -0
- package/archetypes/crm-meetings.json +95 -0
- package/archetypes/customer-loyalty.json +75 -0
- package/archetypes/customer-management.json +76 -0
- package/archetypes/daily-operations.json +62 -0
- package/archetypes/dashboard-core.json +87 -0
- package/archetypes/data-repository.json +81 -0
- package/archetypes/deal-workspace.json +126 -0
- package/archetypes/doc-browser.json +111 -0
- package/archetypes/document-editor.json +147 -0
- package/archetypes/document-vault.json +119 -0
- package/archetypes/ecommerce-admin.json +138 -0
- package/archetypes/ecommerce-checkout.json +57 -0
- package/archetypes/ecommerce.json +138 -0
- package/archetypes/emissions-dashboard.json +136 -0
- package/archetypes/engagement-hub.json +157 -0
- package/archetypes/eval-suite.json +142 -0
- package/archetypes/event-discovery.json +130 -0
- package/archetypes/experiment-tracker.json +83 -0
- package/archetypes/fan-checkout.json +107 -0
- package/archetypes/fan-library.json +99 -0
- package/archetypes/fan-storefront.json +106 -0
- package/archetypes/financial-dashboard.json +127 -0
- package/archetypes/game-catalog.json +120 -0
- package/archetypes/gaming-community.json +196 -0
- package/archetypes/governance-center.json +82 -0
- package/archetypes/health-records.json +111 -0
- package/archetypes/instrument-booking.json +82 -0
- package/archetypes/inventory-supplies.json +72 -0
- package/archetypes/investment-tracker.json +82 -0
- package/archetypes/investor-portal.json +124 -0
- package/archetypes/job-monitor.json +109 -0
- package/archetypes/kitchen-display.json +58 -0
- package/archetypes/lab-notebook.json +83 -0
- package/archetypes/landing-hero.json +145 -0
- package/archetypes/landing-legal.json +101 -0
- package/archetypes/landing-resources.json +127 -0
- package/archetypes/launch-campaign.json +393 -0
- package/archetypes/legal.json +107 -0
- package/archetypes/listing-browser.json +160 -0
- package/archetypes/log-explorer-pro.json +106 -0
- package/archetypes/log-viewer.json +123 -0
- package/archetypes/maintenance-center.json +116 -0
- package/archetypes/marketing-ai-studio.json +117 -0
- package/archetypes/marketing-civic.json +116 -0
- package/archetypes/marketing-climate.json +94 -0
- package/archetypes/marketing-content.json +109 -0
- package/archetypes/marketing-copilot.json +100 -0
- package/archetypes/marketing-creator.json +132 -0
- package/archetypes/marketing-crm.json +96 -0
- package/archetypes/marketing-deal-room.json +100 -0
- package/archetypes/marketing-devtool.json +139 -0
- package/archetypes/marketing-docs.json +92 -0
- package/archetypes/marketing-ecommerce.json +69 -0
- package/archetypes/marketing-esports.json +89 -0
- package/archetypes/marketing-events.json +89 -0
- package/archetypes/marketing-finance.json +69 -0
- package/archetypes/marketing-fractional.json +74 -0
- package/archetypes/marketing-health.json +100 -0
- package/archetypes/marketing-landing.json +65 -0
- package/archetypes/marketing-legal.json +86 -0
- package/archetypes/marketing-marketplace.json +121 -0
- package/archetypes/marketing-observability.json +95 -0
- package/archetypes/marketing-pipeline.json +108 -0
- package/archetypes/marketing-platform.json +129 -0
- package/archetypes/marketing-producer.json +88 -0
- package/archetypes/marketing-productivity.json +139 -0
- package/archetypes/marketing-realestate.json +101 -0
- package/archetypes/marketing-recipe.json +69 -0
- package/archetypes/marketing-research.json +72 -0
- package/archetypes/marketing-restaurant.json +53 -0
- package/archetypes/marketing-saas-v2.json +75 -0
- package/archetypes/marketing-saas.json +119 -0
- package/archetypes/marketing-swipecircle.json +185 -0
- package/archetypes/marketing-video-studio.json +121 -0
- package/archetypes/marketplace-messaging.json +106 -0
- package/archetypes/matter-management.json +104 -0
- package/archetypes/meeting-archive.json +131 -0
- package/archetypes/menu-management.json +73 -0
- package/archetypes/metrics-monitor.json +164 -0
- package/archetypes/metrics-overview-dashboard.json +112 -0
- package/archetypes/music-workspace.json +104 -0
- package/archetypes/notifications.json +68 -0
- package/archetypes/offset-marketplace.json +134 -0
- package/archetypes/onboarding-wizard.json +203 -0
- package/archetypes/order-fulfillment.json +83 -0
- package/archetypes/order-management.json +71 -0
- package/archetypes/organizer-dashboard.json +146 -0
- package/archetypes/owner-dashboard.json +112 -0
- package/archetypes/ownership-dashboard.json +97 -0
- package/archetypes/patient-dashboard.json +142 -0
- package/archetypes/pipeline-builder.json +116 -0
- package/archetypes/pm-financials.json +126 -0
- package/archetypes/portfolio-about.json +85 -0
- package/archetypes/portfolio-blog.json +71 -0
- package/archetypes/portfolio-overview.json +76 -0
- package/archetypes/portfolio-showcase.json +71 -0
- package/archetypes/portfolio.json +122 -0
- package/archetypes/product-management.json +84 -0
- package/archetypes/project-library.json +111 -0
- package/archetypes/prompt-director.json +118 -0
- package/archetypes/prompt-library.json +135 -0
- package/archetypes/property-manager.json +158 -0
- package/archetypes/qa-workflow.json +116 -0
- package/archetypes/recipe-browser.json +83 -0
- package/archetypes/recipe-community.json +126 -0
- package/archetypes/recipe-creator.json +71 -0
- package/archetypes/recipe-social.json +95 -0
- package/archetypes/recipefork-ai-kitchen.json +95 -0
- package/archetypes/recipefork-auth.json +79 -0
- package/archetypes/recipefork-cookbooks.json +104 -0
- package/archetypes/recipefork-landing.json +101 -0
- package/archetypes/recipefork-profile.json +180 -0
- package/archetypes/recipefork-recipe-authoring.json +216 -0
- package/archetypes/recipefork-recipe-detail.json +139 -0
- package/archetypes/recipefork-social.json +103 -0
- package/archetypes/registry-browser.json +121 -0
- package/archetypes/render-monitor.json +114 -0
- package/archetypes/reporting-center.json +107 -0
- package/archetypes/research-workspace.json +127 -0
- package/archetypes/restaurant-floor.json +74 -0
- package/archetypes/review-system.json +84 -0
- package/archetypes/saas-analytics.json +69 -0
- package/archetypes/saas-billing-v2.json +77 -0
- package/archetypes/saas-dashboard.json +127 -0
- package/archetypes/saas-overview.json +77 -0
- package/archetypes/sample-inventory.json +80 -0
- package/archetypes/scrim-scheduler.json +103 -0
- package/archetypes/search-hub.json +87 -0
- package/archetypes/secondary-market.json +83 -0
- package/archetypes/seller-dashboard.json +169 -0
- package/archetypes/server-station.json +61 -0
- package/archetypes/service-requests.json +141 -0
- package/archetypes/session-rooms.json +92 -0
- package/archetypes/settings-full.json +164 -0
- package/archetypes/settings.json +67 -0
- package/archetypes/source-catalog.json +116 -0
- package/archetypes/spatial-workspace.json +115 -0
- package/archetypes/sponsor-dashboard.json +103 -0
- package/archetypes/storefront-browse.json +97 -0
- package/archetypes/supply-chain.json +112 -0
- package/archetypes/swipe-feed.json +469 -0
- package/archetypes/team-management.json +95 -0
- package/archetypes/team-operations.json +131 -0
- package/archetypes/team-workspace.json +71 -0
- package/archetypes/telehealth-room.json +78 -0
- package/archetypes/tenant-manager.json +129 -0
- package/archetypes/tenant-payments.json +105 -0
- package/archetypes/tenant-portal.json +135 -0
- package/archetypes/tenant-switcher-dashboard.json +154 -0
- package/archetypes/terminal-home.json +127 -0
- package/archetypes/ticket-checkout.json +84 -0
- package/archetypes/tool-registry.json +111 -0
- package/archetypes/trace-explorer.json +113 -0
- package/archetypes/trace-viewer.json +112 -0
- package/archetypes/track-library.json +90 -0
- package/archetypes/transaction-history.json +77 -0
- package/archetypes/transformation-editor.json +117 -0
- package/archetypes/usage-billing.json +146 -0
- package/archetypes/user-dashboard.json +155 -0
- package/archetypes/video-editor.json +158 -0
- package/archetypes/vod-review.json +97 -0
- package/archetypes/webhook-manager.json +108 -0
- package/archetypes/workspace-home.json +105 -0
- package/archetypes/workspace-settings.json +140 -0
- package/blueprints/agent-marketplace.json +222 -0
- package/blueprints/agent-studio.json +291 -0
- package/blueprints/ai-copilot-shell.json +163 -0
- package/blueprints/ai-native-crm.json +269 -0
- package/blueprints/ai-video-studio.json +93 -0
- package/blueprints/carbon-ai-portal.json +252 -0
- package/blueprints/civic-platform.json +91 -0
- package/blueprints/climate-dashboard.json +90 -0
- package/blueprints/cloud-platform.json +219 -0
- package/blueprints/content-site.json +110 -0
- package/blueprints/content-studio.json +120 -0
- package/blueprints/creator-monetization-platform.json +373 -0
- package/blueprints/data-pipeline-studio.json +263 -0
- package/blueprints/deal-room.json +88 -0
- package/blueprints/ecommerce-admin.json +253 -0
- package/blueprints/ecommerce.json +242 -0
- package/blueprints/esports-hq.json +116 -0
- package/blueprints/event-community-hub.json +251 -0
- package/blueprints/financial-dashboard.json +237 -0
- package/blueprints/fractional-ownership.json +89 -0
- package/blueprints/gaming-platform.json +171 -0
- package/blueprints/health-wellness-portal.json +252 -0
- package/blueprints/knowledge-base.json +176 -0
- package/blueprints/legal-research.json +90 -0
- package/blueprints/multi-tenant-platform.json +257 -0
- package/blueprints/observability-platform.json +275 -0
- package/blueprints/portfolio.json +164 -0
- package/blueprints/producer-studio.json +156 -0
- package/blueprints/product-landing.json +112 -0
- package/blueprints/property-management-portal.json +384 -0
- package/blueprints/realtime-collaboration-workspace.json +300 -0
- package/blueprints/recipe-community.json +259 -0
- package/blueprints/recipefork.json +194 -0
- package/blueprints/registry-platform.json +204 -0
- package/blueprints/research-lab.json +92 -0
- package/blueprints/restaurant-ops.json +104 -0
- package/blueprints/retro-launch-campaign.json +205 -0
- package/blueprints/saas-dashboard.json +246 -0
- package/blueprints/spatial-collaboration.json +172 -0
- package/blueprints/swipecircle.json +253 -0
- package/blueprints/terminal-dashboard.json +282 -0
- package/blueprints/two-sided-marketplace.json +293 -0
- package/dist/index.d.ts +178 -0
- package/dist/index.js +582 -0
- package/dist/index.js.map +1 -0
- package/package.json +75 -0
- package/patterns/account-settings.json +149 -0
- package/patterns/activity-feed.json +154 -0
- package/patterns/adaptive-density-panel.json +130 -0
- package/patterns/agent-handoff-zone.json +97 -0
- package/patterns/agent-swarm-canvas.json +136 -0
- package/patterns/agent-timeline.json +119 -0
- package/patterns/alert-rule-builder.json +127 -0
- package/patterns/ambient-status-ring.json +125 -0
- package/patterns/api-explorer.json +131 -0
- package/patterns/api-key-row.json +119 -0
- package/patterns/ar-annotation.json +137 -0
- package/patterns/arrangement-canvas.json +72 -0
- package/patterns/ascii-chart.json +138 -0
- package/patterns/audit-trail.json +123 -0
- package/patterns/auth-form.json +209 -0
- package/patterns/avatar-grid-tile.json +118 -0
- package/patterns/backer-progress-console.json +137 -0
- package/patterns/backer-wall-ticker.json +127 -0
- package/patterns/before-after.json +105 -0
- package/patterns/block-toolbar.json +129 -0
- package/patterns/blueprint-anatomy.json +112 -0
- package/patterns/blueprint-launch-hero.json +113 -0
- package/patterns/booking-calendar.json +125 -0
- package/patterns/bottom-tab-bar.json +117 -0
- package/patterns/breadcrumb-nav.json +111 -0
- package/patterns/budget-sankey.json +103 -0
- package/patterns/calendar-view.json +143 -0
- package/patterns/campaign-marquee-hero.json +167 -0
- package/patterns/cap-table.json +121 -0
- package/patterns/card-grid.json +202 -0
- package/patterns/case-brief-card.json +113 -0
- package/patterns/character-sheet.json +102 -0
- package/patterns/chart-grid.json +129 -0
- package/patterns/chat-header.json +105 -0
- package/patterns/chat-input.json +106 -0
- package/patterns/chat-message.json +122 -0
- package/patterns/chat-thread.json +120 -0
- package/patterns/checklist-card.json +96 -0
- package/patterns/checkout-flow.json +148 -0
- package/patterns/chip-multiselect.json +118 -0
- package/patterns/citation-graph.json +118 -0
- package/patterns/command-palette.json +115 -0
- package/patterns/command-rail.json +123 -0
- package/patterns/comment-thread.json +155 -0
- package/patterns/comparison-table.json +121 -0
- package/patterns/contact-form.json +135 -0
- package/patterns/content-card-grid.json +151 -0
- package/patterns/content-detail-hero.json +129 -0
- package/patterns/content-feed.json +141 -0
- package/patterns/content-uploader.json +137 -0
- package/patterns/continue-screen-cta.json +135 -0
- package/patterns/contract-diff.json +110 -0
- package/patterns/contract-explorer.json +119 -0
- package/patterns/conversation-list.json +109 -0
- package/patterns/creator-profile.json +127 -0
- package/patterns/cta-banner.json +103 -0
- package/patterns/cta-section.json +122 -0
- package/patterns/cta.json +124 -0
- package/patterns/data-source-connector.json +131 -0
- package/patterns/data-table.json +138 -0
- package/patterns/dataset-card.json +127 -0
- package/patterns/daw-transport-bar.json +66 -0
- package/patterns/deal-pipeline-board.json +124 -0
- package/patterns/deal-stage-gates.json +102 -0
- package/patterns/depth-layered-canvas.json +105 -0
- package/patterns/detail-header.json +140 -0
- package/patterns/diff-view.json +122 -0
- package/patterns/dividend-ledger.json +120 -0
- package/patterns/doc-editor.json +147 -0
- package/patterns/document-vault.json +129 -0
- package/patterns/drag-sort-list.json +119 -0
- package/patterns/earnings-dashboard.json +132 -0
- package/patterns/emissions-sankey.json +113 -0
- package/patterns/emoji-reaction-bar.json +115 -0
- package/patterns/esports-matchday-command.json +132 -0
- package/patterns/eval-dashboard.json +131 -0
- package/patterns/expense-tracker.json +130 -0
- package/patterns/featured-launchpad-list.json +114 -0
- package/patterns/features.json +118 -0
- package/patterns/file-browser.json +148 -0
- package/patterns/filter-bar.json +146 -0
- package/patterns/footer.json +115 -0
- package/patterns/form-sections.json +180 -0
- package/patterns/form.json +190 -0
- package/patterns/founder-comic-strip.json +126 -0
- package/patterns/generative-card-grid.json +130 -0
- package/patterns/gesture-control-overlay.json +134 -0
- package/patterns/governance-ballot.json +126 -0
- package/patterns/help-modal.json +155 -0
- package/patterns/hero-split.json +125 -0
- package/patterns/hero.json +227 -0
- package/patterns/holographic-control-bar.json +114 -0
- package/patterns/hotkey-bar.json +97 -0
- package/patterns/how-it-works.json +118 -0
- package/patterns/identity-summary.json +115 -0
- package/patterns/instrument-schedule.json +131 -0
- package/patterns/intake-form-wizard.json +134 -0
- package/patterns/intent-radar.json +115 -0
- package/patterns/json-viewer.json +129 -0
- package/patterns/kanban-board.json +133 -0
- package/patterns/kds-ticket-rail.json +133 -0
- package/patterns/kpi-grid.json +123 -0
- package/patterns/launch-update-log.json +129 -0
- package/patterns/launchpad-flow.json +107 -0
- package/patterns/leaderboard.json +143 -0
- package/patterns/lease-manager.json +129 -0
- package/patterns/legal-prose.json +120 -0
- package/patterns/live-room-stage.json +63 -0
- package/patterns/log-stream.json +150 -0
- package/patterns/logo-strip.json +93 -0
- package/patterns/maintenance-board.json +127 -0
- package/patterns/maintenance-ticket.json +156 -0
- package/patterns/map-view.json +140 -0
- package/patterns/match-celebration.json +133 -0
- package/patterns/matter-card.json +113 -0
- package/patterns/mention-popup.json +85 -0
- package/patterns/metric-gauge.json +141 -0
- package/patterns/mixer-console.json +69 -0
- package/patterns/mobile-profile-hero.json +138 -0
- package/patterns/moderation-queue-item.json +129 -0
- package/patterns/morphing-topology.json +113 -0
- package/patterns/namespace-badge.json +93 -0
- package/patterns/nav-header.json +110 -0
- package/patterns/neural-feedback-loop.json +124 -0
- package/patterns/notebook-entry.json +129 -0
- package/patterns/notification-center.json +136 -0
- package/patterns/offset-cart.json +109 -0
- package/patterns/onboarding-wizard.json +130 -0
- package/patterns/org-governance-panel.json +101 -0
- package/patterns/page-tree.json +143 -0
- package/patterns/payment-history.json +130 -0
- package/patterns/payout-settings.json +130 -0
- package/patterns/permission-matrix.json +129 -0
- package/patterns/petition-card.json +106 -0
- package/patterns/pipeline-cards.json +99 -0
- package/patterns/player-form-tracker.json +111 -0
- package/patterns/pledge-checkout-panel.json +145 -0
- package/patterns/pnl-dashboard.json +116 -0
- package/patterns/post-list.json +147 -0
- package/patterns/presence-avatars.json +129 -0
- package/patterns/press-kit-shelf.json +132 -0
- package/patterns/pricing-usage.json +118 -0
- package/patterns/pricing.json +137 -0
- package/patterns/producer-split-workbench.json +57 -0
- package/patterns/product-box-spec-panel.json +126 -0
- package/patterns/product-card.json +120 -0
- package/patterns/product-grid.json +140 -0
- package/patterns/progress-bar.json +124 -0
- package/patterns/prompt-playground.json +129 -0
- package/patterns/property-card.json +112 -0
- package/patterns/property-detail.json +124 -0
- package/patterns/property-grid.json +137 -0
- package/patterns/prose-section.json +102 -0
- package/patterns/protocol-step.json +128 -0
- package/patterns/prototype-demo-bezel.json +137 -0
- package/patterns/qa-thread.json +109 -0
- package/patterns/quick-start.json +88 -0
- package/patterns/recipefork-activity-feed.json +51 -0
- package/patterns/recipefork-chef-ingredients-display.json +48 -0
- package/patterns/recipefork-chef-ingredients-editor.json +52 -0
- package/patterns/recipefork-chef-instruction-editor.json +59 -0
- package/patterns/recipefork-chef-instructions-display.json +54 -0
- package/patterns/recipefork-cookbook-assignment.json +51 -0
- package/patterns/recipefork-cooking-tips-display.json +43 -0
- package/patterns/recipefork-cooking-tips-editor.json +46 -0
- package/patterns/recipefork-fork-provenance.json +50 -0
- package/patterns/recipefork-kitchen-chat.json +103 -0
- package/patterns/recipefork-photo-generator.json +123 -0
- package/patterns/recipefork-presentation-display.json +45 -0
- package/patterns/recipefork-presentation-editor.json +52 -0
- package/patterns/recipefork-recipe-card.json +123 -0
- package/patterns/recipefork-recipe-metadata-form.json +58 -0
- package/patterns/recipefork-recipe-mode-switch.json +52 -0
- package/patterns/recipefork-recipe-story-editor.json +51 -0
- package/patterns/recipefork-simple-recipe-editor.json +49 -0
- package/patterns/redline-track-changes.json +113 -0
- package/patterns/registry-discovery-cta-grid.json +93 -0
- package/patterns/registry-link-list.json +118 -0
- package/patterns/relationship-graph.json +127 -0
- package/patterns/remote-cursor.json +103 -0
- package/patterns/render-queue.json +102 -0
- package/patterns/rent-reminder.json +140 -0
- package/patterns/rent-roll.json +112 -0
- package/patterns/reputation-badge.json +111 -0
- package/patterns/retro-table.json +128 -0
- package/patterns/reward-tier-selector.json +137 -0
- package/patterns/sample-tracker.json +127 -0
- package/patterns/scene-storyboard.json +104 -0
- package/patterns/scope-breakdown.json +108 -0
- package/patterns/scoreboard-live.json +116 -0
- package/patterns/scrim-calendar.json +114 -0
- package/patterns/search-filter-bar.json +141 -0
- package/patterns/secure-document-viewer.json +107 -0
- package/patterns/service-catalog.json +94 -0
- package/patterns/service-map.json +133 -0
- package/patterns/session-inspector.json +62 -0
- package/patterns/session-manager.json +89 -0
- package/patterns/settings-nav.json +106 -0
- package/patterns/share-modal.json +157 -0
- package/patterns/share-quest-panel.json +134 -0
- package/patterns/shot-grid.json +104 -0
- package/patterns/skeleton-loader.json +114 -0
- package/patterns/slash-command.json +80 -0
- package/patterns/sparkline-cell.json +103 -0
- package/patterns/spatial-card-stack.json +133 -0
- package/patterns/spatial-presence-ring.json +103 -0
- package/patterns/split-calculator.json +104 -0
- package/patterns/split-pane.json +112 -0
- package/patterns/stats-bar.json +125 -0
- package/patterns/stats-detail.json +102 -0
- package/patterns/stats-overview.json +132 -0
- package/patterns/stats-section.json +90 -0
- package/patterns/status-bar.json +101 -0
- package/patterns/status-board.json +92 -0
- package/patterns/stem-browser.json +58 -0
- package/patterns/stem-stack.json +101 -0
- package/patterns/stepper.json +115 -0
- package/patterns/storefront-hero.json +120 -0
- package/patterns/stretch-goal-ladder.json +128 -0
- package/patterns/subscriber-list.json +135 -0
- package/patterns/supply-chain-map.json +109 -0
- package/patterns/swipe-action-bar.json +119 -0
- package/patterns/swipe-card.json +126 -0
- package/patterns/table-map.json +134 -0
- package/patterns/target-progress-ring.json +103 -0
- package/patterns/team-member-row.json +139 -0
- package/patterns/tech-pills.json +69 -0
- package/patterns/tenant-card.json +150 -0
- package/patterns/tenant-directory.json +118 -0
- package/patterns/tenant-payment-setup.json +98 -0
- package/patterns/terminal-emulator.json +117 -0
- package/patterns/testimonials.json +133 -0
- package/patterns/tier-builder.json +131 -0
- package/patterns/tier-card.json +118 -0
- package/patterns/tier-upgrade-card.json +144 -0
- package/patterns/timeline-scrubber.json +107 -0
- package/patterns/timeline.json +140 -0
- package/patterns/toast-notification.json +123 -0
- package/patterns/tool-list.json +89 -0
- package/patterns/trace-waterfall.json +123 -0
- package/patterns/trade-modal.json +132 -0
- package/patterns/transcript-stream.json +125 -0
- package/patterns/tree-view.json +124 -0
- package/patterns/unit-detail.json +100 -0
- package/patterns/unit-list.json +106 -0
- package/patterns/unlock-gate.json +132 -0
- package/patterns/usage-meter.json +113 -0
- package/patterns/vacancy-tracker.json +106 -0
- package/patterns/valuation-chart.json +126 -0
- package/patterns/version-history.json +140 -0
- package/patterns/video-room.json +142 -0
- package/patterns/vod-annotator.json +112 -0
- package/patterns/voice-command-palette.json +127 -0
- package/patterns/voice-waveform.json +120 -0
- package/patterns/voting-breakdown.json +101 -0
- package/patterns/waveform-track.json +102 -0
- package/patterns/webhook-debugger.json +116 -0
- package/patterns/workflow-canvas.json +147 -0
- package/patterns/workspace-region-stack.json +74 -0
- package/schemas/archetype.v2.json +145 -0
- package/schemas/blueprint.v1.json +225 -0
- package/schemas/common.v1.json +337 -0
- package/schemas/content-health-report.v1.json +255 -0
- package/schemas/content-intelligence.v1.json +142 -0
- package/schemas/essence.v4.json +430 -0
- package/schemas/execution-pack.common.v1.json +207 -0
- package/schemas/page-pack.v1.json +106 -0
- package/schemas/pattern.v2.json +232 -0
- package/schemas/public-content-list.v1.json +28 -0
- package/schemas/public-content-record.v1.json +91 -0
- package/schemas/public-content-summary.v1.json +132 -0
- package/schemas/registry-intelligence-summary.v1.json +81 -0
- package/schemas/search-response.v1.json +28 -0
- package/schemas/section-pack.v1.json +128 -0
- package/schemas/shell.v1.json +69 -0
- package/schemas/showcase-manifest-entry.v1.json +92 -0
- package/schemas/showcase-manifest.v1.json +28 -0
- package/schemas/showcase-shortlist.v1.json +36 -0
- package/schemas/theme.v1.json +190 -0
- package/shells/canvas-overlay.json +94 -0
- package/shells/centered.json +49 -0
- package/shells/chat-portal.json +153 -0
- package/shells/copilot-overlay.json +156 -0
- package/shells/full-bleed.json +100 -0
- package/shells/immersive-stage.json +89 -0
- package/shells/minimal-header.json +103 -0
- package/shells/mobile-tab-bar.json +119 -0
- package/shells/recipefork-top-nav.json +74 -0
- package/shells/sidebar-aside.json +163 -0
- package/shells/sidebar-main-footer.json +158 -0
- package/shells/sidebar-main.json +175 -0
- package/shells/sidebar-right.json +128 -0
- package/shells/terminal-split.json +95 -0
- package/shells/three-column-browser.json +215 -0
- package/shells/top-nav-footer.json +114 -0
- package/shells/top-nav-main.json +103 -0
- package/shells/top-nav-sidebar.json +130 -0
- package/shells/workspace-aside.json +181 -0
- package/themes/auradecantism.json +601 -0
- package/themes/bespoke.json +433 -0
- package/themes/bioluminescent.json +217 -0
- package/themes/bistro.json +422 -0
- package/themes/carbon-neon.json +458 -0
- package/themes/carbon.json +429 -0
- package/themes/cinema.json +479 -0
- package/themes/clean.json +261 -0
- package/themes/counsel.json +431 -0
- package/themes/dopamine.json +237 -0
- package/themes/earth.json +453 -0
- package/themes/editorial.json +237 -0
- package/themes/estate.json +559 -0
- package/themes/fintech.json +472 -0
- package/themes/gaming-guild.json +341 -0
- package/themes/glassmorphism.json +309 -0
- package/themes/government.json +481 -0
- package/themes/healthcare.json +480 -0
- package/themes/lab.json +437 -0
- package/themes/launchpad.json +320 -0
- package/themes/liquid-glass.json +223 -0
- package/themes/luminarum.json +598 -0
- package/themes/neo-tokyo.json +451 -0
- package/themes/neon-cyber.json +280 -0
- package/themes/neon-dark.json +220 -0
- package/themes/paper.json +496 -0
- package/themes/prismatic.json +217 -0
- package/themes/recipefork.json +278 -0
- package/themes/retro-arcade.json +620 -0
- package/themes/retro.json +240 -0
- package/themes/studio-dark.json +437 -0
- package/themes/studio.json +488 -0
- package/themes/swipecircle.json +533 -0
- package/themes/terminal.json +549 -0
package/dist/index.js
ADDED
|
@@ -0,0 +1,582 @@
|
|
|
1
|
+
// src/index.ts
|
|
2
|
+
import { readdirSync, readFileSync } from "fs";
|
|
3
|
+
import { basename, join } from "path";
|
|
4
|
+
import { fileURLToPath } from "url";
|
|
5
|
+
import Ajv2020 from "ajv/dist/2020.js";
|
|
6
|
+
var CONTENT_TYPES = ["pattern", "theme", "blueprint", "archetype", "shell"];
|
|
7
|
+
var API_CONTENT_TYPES = ["patterns", "themes", "blueprints", "archetypes", "shells"];
|
|
8
|
+
var CONTENT_TYPE_TO_API_CONTENT_TYPE = {
|
|
9
|
+
pattern: "patterns",
|
|
10
|
+
theme: "themes",
|
|
11
|
+
blueprint: "blueprints",
|
|
12
|
+
archetype: "archetypes",
|
|
13
|
+
shell: "shells"
|
|
14
|
+
};
|
|
15
|
+
var API_CONTENT_TYPE_TO_CONTENT_TYPE = {
|
|
16
|
+
patterns: "pattern",
|
|
17
|
+
themes: "theme",
|
|
18
|
+
blueprints: "blueprint",
|
|
19
|
+
archetypes: "archetype",
|
|
20
|
+
shells: "shell"
|
|
21
|
+
};
|
|
22
|
+
var CONTENT_TYPE_TO_DIRECTORY = CONTENT_TYPE_TO_API_CONTENT_TYPE;
|
|
23
|
+
var CONTENT_SCHEMA_FILES = {
|
|
24
|
+
common: "common.v1.json",
|
|
25
|
+
pattern: "pattern.v2.json",
|
|
26
|
+
theme: "theme.v1.json",
|
|
27
|
+
blueprint: "blueprint.v1.json",
|
|
28
|
+
archetype: "archetype.v2.json",
|
|
29
|
+
shell: "shell.v1.json"
|
|
30
|
+
};
|
|
31
|
+
var OFFICIAL_CONTENT_NAMESPACE = "@official";
|
|
32
|
+
var OFFICIAL_CONTENT_OWNER_NAME = "Decantr";
|
|
33
|
+
var OFFICIAL_CONTENT_OWNER_USERNAME = "decantr";
|
|
34
|
+
var OFFICIAL_CONTENT_PUBLISHED_AT = "2026-07-02T00:00:00.000Z";
|
|
35
|
+
var PUBLIC_BLUEPRINT_SETS = ["all", "featured", "certified", "labs"];
|
|
36
|
+
var PUBLIC_CONTENT_SOURCES = ["official", "community", "organization"];
|
|
37
|
+
var CONTENT_INTELLIGENCE_SOURCES = ["authored", "benchmark", "hybrid"];
|
|
38
|
+
var PACKAGE_ROOT = fileURLToPath(new URL("..", import.meta.url));
|
|
39
|
+
var catalogCache = null;
|
|
40
|
+
var ajvCache = null;
|
|
41
|
+
var validatorCache = {};
|
|
42
|
+
function getContentPackageRoot() {
|
|
43
|
+
return PACKAGE_ROOT;
|
|
44
|
+
}
|
|
45
|
+
function isContentType(value) {
|
|
46
|
+
return typeof value === "string" && CONTENT_TYPES.includes(value);
|
|
47
|
+
}
|
|
48
|
+
function isApiContentType(value) {
|
|
49
|
+
return typeof value === "string" && API_CONTENT_TYPES.includes(value);
|
|
50
|
+
}
|
|
51
|
+
function isPublicBlueprintSet(value) {
|
|
52
|
+
return typeof value === "string" && PUBLIC_BLUEPRINT_SETS.includes(value);
|
|
53
|
+
}
|
|
54
|
+
function isPublicContentSource(value) {
|
|
55
|
+
return typeof value === "string" && PUBLIC_CONTENT_SOURCES.includes(value);
|
|
56
|
+
}
|
|
57
|
+
function isContentIntelligenceSource(value) {
|
|
58
|
+
return typeof value === "string" && CONTENT_INTELLIGENCE_SOURCES.includes(value);
|
|
59
|
+
}
|
|
60
|
+
function normalizeContentType(value) {
|
|
61
|
+
if (isContentType(value)) return value;
|
|
62
|
+
return API_CONTENT_TYPE_TO_CONTENT_TYPE[value];
|
|
63
|
+
}
|
|
64
|
+
function getContentSchema(type) {
|
|
65
|
+
return readJson(join(PACKAGE_ROOT, "schemas", CONTENT_SCHEMA_FILES[type]));
|
|
66
|
+
}
|
|
67
|
+
function listContentSchemas() {
|
|
68
|
+
return ["common", ...CONTENT_TYPES].map((type) => ({
|
|
69
|
+
type,
|
|
70
|
+
file: CONTENT_SCHEMA_FILES[type],
|
|
71
|
+
schema: getContentSchema(type)
|
|
72
|
+
}));
|
|
73
|
+
}
|
|
74
|
+
function listContentRecords(options = {}) {
|
|
75
|
+
const limit = normalizeLimit(options.limit);
|
|
76
|
+
const offset = normalizeOffset(options.offset);
|
|
77
|
+
const type = options.type ? normalizeContentType(options.type) : null;
|
|
78
|
+
const namespace = options.namespace ?? null;
|
|
79
|
+
if (namespace && namespace !== OFFICIAL_CONTENT_NAMESPACE) {
|
|
80
|
+
return { items: [], total: 0, limit, offset };
|
|
81
|
+
}
|
|
82
|
+
if (options.source && options.source !== "official") {
|
|
83
|
+
return { items: [], total: 0, limit, offset };
|
|
84
|
+
}
|
|
85
|
+
const blueprintSet = options.blueprintSet ?? "all";
|
|
86
|
+
const includeLabs = options.labs === true || blueprintSet === "labs";
|
|
87
|
+
const summaries = getContentCatalog().filter((record) => !type || record.type === type).map(toPublicSummary).filter(
|
|
88
|
+
(item) => matchesPublicContentFilters(
|
|
89
|
+
item,
|
|
90
|
+
options.recommended === true,
|
|
91
|
+
options.intelligenceSource,
|
|
92
|
+
blueprintSet,
|
|
93
|
+
includeLabs
|
|
94
|
+
)
|
|
95
|
+
);
|
|
96
|
+
const sorted = sortPublicContent(summaries, normalizePublicContentSort(options.sort));
|
|
97
|
+
return {
|
|
98
|
+
total: sorted.length,
|
|
99
|
+
limit,
|
|
100
|
+
offset,
|
|
101
|
+
items: sorted.slice(offset, offset + limit)
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
function searchContent(options = {}) {
|
|
105
|
+
const limit = normalizeLimit(options.limit);
|
|
106
|
+
const offset = normalizeOffset(options.offset);
|
|
107
|
+
const query = (options.q ?? "").trim().toLowerCase();
|
|
108
|
+
const base = listContentRecords({
|
|
109
|
+
type: options.type,
|
|
110
|
+
namespace: options.namespace,
|
|
111
|
+
source: options.source,
|
|
112
|
+
sort: options.sort,
|
|
113
|
+
recommended: options.recommended,
|
|
114
|
+
intelligenceSource: options.intelligenceSource,
|
|
115
|
+
blueprintSet: options.blueprintSet,
|
|
116
|
+
labs: options.labs,
|
|
117
|
+
limit: 5e3,
|
|
118
|
+
offset: 0
|
|
119
|
+
}).items;
|
|
120
|
+
const filtered = query.length === 0 ? base : base.map((summary) => ({ summary, score: scoreSearchMatch(summary, query) })).filter((match) => match.score > 0).sort((left, right) => right.score - left.score || comparePublicContent(left.summary, right.summary)).map((match) => match.summary);
|
|
121
|
+
return {
|
|
122
|
+
total: filtered.length,
|
|
123
|
+
limit,
|
|
124
|
+
offset,
|
|
125
|
+
results: filtered.slice(offset, offset + limit)
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
function getContentRecord(type, slug, namespace = OFFICIAL_CONTENT_NAMESPACE) {
|
|
129
|
+
if (namespace !== OFFICIAL_CONTENT_NAMESPACE) return null;
|
|
130
|
+
const normalizedType = normalizeContentType(type);
|
|
131
|
+
return getContentCatalog().find((record) => record.type === normalizedType && (record.slug === slug || record.id === slug || record.data.id === slug)) ?? null;
|
|
132
|
+
}
|
|
133
|
+
function resolveContent(type, slug, namespace = OFFICIAL_CONTENT_NAMESPACE) {
|
|
134
|
+
const record = getContentRecord(type, slug, namespace);
|
|
135
|
+
if (!record) return null;
|
|
136
|
+
return {
|
|
137
|
+
item: record.data,
|
|
138
|
+
source: "core",
|
|
139
|
+
path: `${record.namespace}/${record.type}/${record.slug}`
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
function createContentResolver(namespace = OFFICIAL_CONTENT_NAMESPACE) {
|
|
143
|
+
return {
|
|
144
|
+
async resolve(type, id) {
|
|
145
|
+
return resolveContent(type, id, namespace);
|
|
146
|
+
}
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
function buildContentIntelligenceSummary(namespace = OFFICIAL_CONTENT_NAMESPACE) {
|
|
150
|
+
const records = namespace && namespace !== OFFICIAL_CONTENT_NAMESPACE ? [] : getContentCatalog();
|
|
151
|
+
const byType = Object.fromEntries(
|
|
152
|
+
CONTENT_TYPES.map((type) => [type, createEmptyBucket()])
|
|
153
|
+
);
|
|
154
|
+
const totals = createEmptyBucket();
|
|
155
|
+
for (const record of records) {
|
|
156
|
+
applyIntelligenceToBucket(byType[record.type], record.intelligence ?? null);
|
|
157
|
+
applyIntelligenceToBucket(totals, record.intelligence ?? null);
|
|
158
|
+
}
|
|
159
|
+
return {
|
|
160
|
+
$schema: "https://decantr.ai/schemas/registry-intelligence-summary.v1.json",
|
|
161
|
+
generated_at: (/* @__PURE__ */ new Date()).toISOString(),
|
|
162
|
+
namespace,
|
|
163
|
+
totals,
|
|
164
|
+
by_type: byType
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
function validateContentData(type, data) {
|
|
168
|
+
const normalizedType = normalizeContentType(type);
|
|
169
|
+
const validator = getValidator(normalizedType);
|
|
170
|
+
const valid = validator(data);
|
|
171
|
+
return {
|
|
172
|
+
valid,
|
|
173
|
+
errors: valid ? [] : (validator.errors ?? []).map(formatAjvError)
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
function validateOfficialCorpus() {
|
|
177
|
+
const errors = [];
|
|
178
|
+
for (const record of getContentCatalog()) {
|
|
179
|
+
const result = validateContentData(record.type, record.data);
|
|
180
|
+
if (!result.valid) {
|
|
181
|
+
errors.push(...result.errors.map((error) => `${record.type}/${record.slug}: ${error}`));
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
return { valid: errors.length === 0, errors };
|
|
185
|
+
}
|
|
186
|
+
function getContentCatalog() {
|
|
187
|
+
if (catalogCache) return catalogCache;
|
|
188
|
+
catalogCache = CONTENT_TYPES.flatMap((type) => {
|
|
189
|
+
const directory = CONTENT_TYPE_TO_DIRECTORY[type];
|
|
190
|
+
const dirPath = join(PACKAGE_ROOT, directory);
|
|
191
|
+
return readdirSync(dirPath).filter((file) => file.endsWith(".json")).sort().map((file) => createRecord(type, basename(file, ".json"), readJson(join(dirPath, file))));
|
|
192
|
+
});
|
|
193
|
+
return catalogCache;
|
|
194
|
+
}
|
|
195
|
+
function clearContentCatalogCache() {
|
|
196
|
+
catalogCache = null;
|
|
197
|
+
ajvCache = null;
|
|
198
|
+
validatorCache = {};
|
|
199
|
+
}
|
|
200
|
+
function createRecord(type, slug, data) {
|
|
201
|
+
const version = typeof data.version === "string" && data.version.trim().length > 0 ? data.version : "1.0.0";
|
|
202
|
+
return {
|
|
203
|
+
id: slug,
|
|
204
|
+
slug,
|
|
205
|
+
namespace: OFFICIAL_CONTENT_NAMESPACE,
|
|
206
|
+
type,
|
|
207
|
+
version,
|
|
208
|
+
data,
|
|
209
|
+
visibility: "public",
|
|
210
|
+
status: "published",
|
|
211
|
+
created_at: OFFICIAL_CONTENT_PUBLISHED_AT,
|
|
212
|
+
updated_at: OFFICIAL_CONTENT_PUBLISHED_AT,
|
|
213
|
+
published_at: OFFICIAL_CONTENT_PUBLISHED_AT,
|
|
214
|
+
owner_name: OFFICIAL_CONTENT_OWNER_NAME,
|
|
215
|
+
owner_username: OFFICIAL_CONTENT_OWNER_USERNAME,
|
|
216
|
+
thumbnail_url: null,
|
|
217
|
+
intelligence: deriveContentIntelligence(type, data)
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
function toPublicSummary(record) {
|
|
221
|
+
return {
|
|
222
|
+
id: record.id,
|
|
223
|
+
slug: record.slug,
|
|
224
|
+
namespace: record.namespace,
|
|
225
|
+
type: record.type,
|
|
226
|
+
version: record.version,
|
|
227
|
+
name: getString(record.data.name),
|
|
228
|
+
description: getString(record.data.description),
|
|
229
|
+
published_at: record.published_at,
|
|
230
|
+
owner_name: record.owner_name,
|
|
231
|
+
owner_username: record.owner_username,
|
|
232
|
+
thumbnail_url: record.thumbnail_url,
|
|
233
|
+
blueprint_portfolio: getBlueprintPortfolioMetadata(record.data),
|
|
234
|
+
intelligence: record.intelligence ?? null
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
function getBlueprintPortfolioMetadata(value) {
|
|
238
|
+
const record = asRecord(value);
|
|
239
|
+
if (!record) return null;
|
|
240
|
+
const candidate = asRecord(record.blueprint_portfolio) ?? record;
|
|
241
|
+
const artifact = asRecord(candidate.artifact);
|
|
242
|
+
if (typeof candidate.visibility !== "string" || typeof candidate.maturity !== "string" || typeof candidate.rationale !== "string" || !artifact || typeof artifact.status !== "string") {
|
|
243
|
+
return null;
|
|
244
|
+
}
|
|
245
|
+
return {
|
|
246
|
+
visibility: normalizePortfolioVisibility(candidate.visibility),
|
|
247
|
+
maturity: normalizePortfolioMaturity(candidate.maturity),
|
|
248
|
+
rationale: candidate.rationale,
|
|
249
|
+
recommended_alternative: getString(candidate.recommended_alternative),
|
|
250
|
+
artifact: {
|
|
251
|
+
status: normalizeArtifactStatus(artifact.status),
|
|
252
|
+
showcase: getString(artifact.showcase),
|
|
253
|
+
notes: getString(artifact.notes)
|
|
254
|
+
}
|
|
255
|
+
};
|
|
256
|
+
}
|
|
257
|
+
function deriveContentIntelligence(type, data) {
|
|
258
|
+
const authored = asRecord(data.content_intelligence) ?? asRecord(data.registry_intelligence) ?? asRecord(data.intelligence);
|
|
259
|
+
if (authored && isContentIntelligenceSource(authored.source)) {
|
|
260
|
+
return {
|
|
261
|
+
source: authored.source,
|
|
262
|
+
verification_status: normalizeVerificationStatus(authored.verification_status),
|
|
263
|
+
last_verified_at: getString(authored.last_verified_at) ?? null,
|
|
264
|
+
target_coverage: getStringArray(authored.target_coverage),
|
|
265
|
+
benchmark_confidence: normalizeBenchmarkConfidence(authored.benchmark_confidence),
|
|
266
|
+
confidence_tier: normalizeConfidenceTier(authored.confidence_tier),
|
|
267
|
+
golden_usage: normalizeGoldenUsage(authored.golden_usage),
|
|
268
|
+
quality_score: getNumberOrNull(authored.quality_score),
|
|
269
|
+
confidence_score: getNumberOrNull(authored.confidence_score),
|
|
270
|
+
recommended: authored.recommended === true,
|
|
271
|
+
evidence: getStringArray(authored.evidence),
|
|
272
|
+
recommendation_reasons: getStringArray(authored.recommendation_reasons),
|
|
273
|
+
recommendation_blockers: getStringArray(authored.recommendation_blockers)
|
|
274
|
+
};
|
|
275
|
+
}
|
|
276
|
+
if (type !== "blueprint") return null;
|
|
277
|
+
const portfolio = getBlueprintPortfolioMetadata(data);
|
|
278
|
+
if (!portfolio) return null;
|
|
279
|
+
const certified = portfolio.artifact.status === "certified";
|
|
280
|
+
const featured = portfolio.visibility === "featured";
|
|
281
|
+
const candidate = portfolio.artifact.status === "candidate";
|
|
282
|
+
const recommended = certified || featured;
|
|
283
|
+
return {
|
|
284
|
+
source: "authored",
|
|
285
|
+
verification_status: certified ? "smoke-green" : candidate ? "pending" : "unknown",
|
|
286
|
+
last_verified_at: null,
|
|
287
|
+
target_coverage: portfolio.artifact.showcase ? [portfolio.artifact.showcase] : [],
|
|
288
|
+
benchmark_confidence: certified ? "medium" : candidate ? "low" : "none",
|
|
289
|
+
confidence_tier: certified ? "verified" : featured ? "high" : candidate ? "medium" : "low",
|
|
290
|
+
golden_usage: portfolio.artifact.showcase ? "showcase" : "none",
|
|
291
|
+
quality_score: certified ? 86 : featured ? 78 : candidate ? 66 : null,
|
|
292
|
+
confidence_score: certified ? 84 : featured ? 76 : candidate ? 62 : null,
|
|
293
|
+
recommended,
|
|
294
|
+
evidence: ["blueprint_portfolio"],
|
|
295
|
+
recommendation_reasons: recommended ? [portfolio.rationale] : [],
|
|
296
|
+
recommendation_blockers: portfolio.visibility === "hidden" ? ["Blueprint is hidden from public browse surfaces."] : []
|
|
297
|
+
};
|
|
298
|
+
}
|
|
299
|
+
function matchesPublicContentFilters(item, recommendedOnly, intelligenceSource, blueprintSet, includeLabs) {
|
|
300
|
+
if (item.type === "blueprint") {
|
|
301
|
+
const portfolio = getBlueprintPortfolioMetadata(item.blueprint_portfolio);
|
|
302
|
+
const visibility = portfolio?.visibility ?? "public";
|
|
303
|
+
if (visibility === "hidden") return false;
|
|
304
|
+
if (visibility === "labs" && !includeLabs) return false;
|
|
305
|
+
if (blueprintSet === "featured" && visibility !== "featured") return false;
|
|
306
|
+
if (blueprintSet === "certified" && portfolio?.artifact.status !== "certified") return false;
|
|
307
|
+
if (blueprintSet === "labs" && visibility !== "labs") return false;
|
|
308
|
+
}
|
|
309
|
+
if (recommendedOnly && item.intelligence?.recommended !== true) {
|
|
310
|
+
return false;
|
|
311
|
+
}
|
|
312
|
+
if (intelligenceSource && item.intelligence?.source !== intelligenceSource) {
|
|
313
|
+
return false;
|
|
314
|
+
}
|
|
315
|
+
return true;
|
|
316
|
+
}
|
|
317
|
+
function sortPublicContent(items, sort = "recommended") {
|
|
318
|
+
return [...items].sort((left, right) => comparePublicContent(left, right, sort));
|
|
319
|
+
}
|
|
320
|
+
function comparePublicContent(left, right, sort = "recommended") {
|
|
321
|
+
if (sort === "name") {
|
|
322
|
+
return (left.name ?? left.slug).localeCompare(right.name ?? right.slug);
|
|
323
|
+
}
|
|
324
|
+
if (sort === "recent") {
|
|
325
|
+
const publishedDelta = new Date(right.published_at ?? 0).getTime() - new Date(left.published_at ?? 0).getTime();
|
|
326
|
+
if (publishedDelta !== 0) return publishedDelta;
|
|
327
|
+
return left.slug.localeCompare(right.slug);
|
|
328
|
+
}
|
|
329
|
+
const priorityDelta = getRecommendedPriority(right) - getRecommendedPriority(left);
|
|
330
|
+
if (priorityDelta !== 0) return priorityDelta;
|
|
331
|
+
return (left.name ?? left.slug).localeCompare(right.name ?? right.slug);
|
|
332
|
+
}
|
|
333
|
+
function getRecommendedPriority(item) {
|
|
334
|
+
let score = 0;
|
|
335
|
+
const portfolio = getBlueprintPortfolioMetadata(item.blueprint_portfolio);
|
|
336
|
+
if (portfolio?.visibility === "featured") score += 900;
|
|
337
|
+
if (portfolio?.artifact.status === "certified") score += 650;
|
|
338
|
+
if (portfolio?.artifact.status === "candidate") score += 120;
|
|
339
|
+
if (portfolio?.visibility === "labs" || portfolio?.visibility === "hidden") score -= 400;
|
|
340
|
+
const intelligence = item.intelligence;
|
|
341
|
+
if (!intelligence) return score;
|
|
342
|
+
if (intelligence.recommended) score += 500;
|
|
343
|
+
if (intelligence.golden_usage === "shortlisted") score += 160;
|
|
344
|
+
if (intelligence.golden_usage === "showcase") score += 80;
|
|
345
|
+
score += verificationScore(intelligence.verification_status);
|
|
346
|
+
score += confidenceScore(intelligence.benchmark_confidence);
|
|
347
|
+
score += confidenceTierScore(intelligence.confidence_tier);
|
|
348
|
+
score += Math.round((intelligence.confidence_score ?? 0) / 2);
|
|
349
|
+
score += intelligence.quality_score ?? 0;
|
|
350
|
+
return score;
|
|
351
|
+
}
|
|
352
|
+
function normalizePublicContentSort(value) {
|
|
353
|
+
switch (value) {
|
|
354
|
+
case "popular":
|
|
355
|
+
case "recommended":
|
|
356
|
+
return "recommended";
|
|
357
|
+
case "newest":
|
|
358
|
+
case "recent":
|
|
359
|
+
case "published":
|
|
360
|
+
return "recent";
|
|
361
|
+
case "name":
|
|
362
|
+
return "name";
|
|
363
|
+
default:
|
|
364
|
+
return "recommended";
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
function scoreSearchMatch(summary, query) {
|
|
368
|
+
const record = getContentRecord(summary.type, summary.slug);
|
|
369
|
+
const data = record?.data ?? {};
|
|
370
|
+
let score = 0;
|
|
371
|
+
if (summary.slug.toLowerCase() === query) score += 1e3;
|
|
372
|
+
if ((summary.name ?? "").toLowerCase() === query) score += 800;
|
|
373
|
+
if (summary.slug.toLowerCase().includes(query)) score += 260;
|
|
374
|
+
if ((summary.name ?? "").toLowerCase().includes(query)) score += 220;
|
|
375
|
+
if ((summary.description ?? "").toLowerCase().includes(query)) score += 90;
|
|
376
|
+
if (getString(data.personality)?.toLowerCase().includes(query)) score += 45;
|
|
377
|
+
for (const tag of getStringArray(data.tags)) {
|
|
378
|
+
if (tag.toLowerCase() === query) score += 180;
|
|
379
|
+
else if (tag.toLowerCase().includes(query)) score += 80;
|
|
380
|
+
}
|
|
381
|
+
return score;
|
|
382
|
+
}
|
|
383
|
+
function getValidator(type) {
|
|
384
|
+
if (validatorCache[type]) return validatorCache[type];
|
|
385
|
+
const ajv = getAjv();
|
|
386
|
+
const validator = ajv.compile(getContentSchema(type));
|
|
387
|
+
validatorCache[type] = validator;
|
|
388
|
+
return validator;
|
|
389
|
+
}
|
|
390
|
+
function getAjv() {
|
|
391
|
+
if (ajvCache) return ajvCache;
|
|
392
|
+
ajvCache = new Ajv2020({
|
|
393
|
+
allErrors: true,
|
|
394
|
+
strict: false,
|
|
395
|
+
allowUnionTypes: true
|
|
396
|
+
});
|
|
397
|
+
ajvCache.addSchema(getContentSchema("common"));
|
|
398
|
+
return ajvCache;
|
|
399
|
+
}
|
|
400
|
+
function readJson(path) {
|
|
401
|
+
return JSON.parse(readFileSync(path, "utf8"));
|
|
402
|
+
}
|
|
403
|
+
function asRecord(value) {
|
|
404
|
+
return Boolean(value) && typeof value === "object" && !Array.isArray(value) ? value : null;
|
|
405
|
+
}
|
|
406
|
+
function getString(value) {
|
|
407
|
+
return typeof value === "string" && value.trim().length > 0 ? value : void 0;
|
|
408
|
+
}
|
|
409
|
+
function getStringArray(value) {
|
|
410
|
+
return Array.isArray(value) ? value.filter((item) => typeof item === "string" && item.trim().length > 0) : [];
|
|
411
|
+
}
|
|
412
|
+
function getNumberOrNull(value) {
|
|
413
|
+
return typeof value === "number" && Number.isFinite(value) ? value : null;
|
|
414
|
+
}
|
|
415
|
+
function normalizeLimit(value) {
|
|
416
|
+
if (typeof value !== "number" || !Number.isFinite(value)) return 50;
|
|
417
|
+
return Math.max(1, Math.min(500, Math.floor(value)));
|
|
418
|
+
}
|
|
419
|
+
function normalizeOffset(value) {
|
|
420
|
+
if (typeof value !== "number" || !Number.isFinite(value)) return 0;
|
|
421
|
+
return Math.max(0, Math.floor(value));
|
|
422
|
+
}
|
|
423
|
+
function createEmptyBucket() {
|
|
424
|
+
return {
|
|
425
|
+
total_public_items: 0,
|
|
426
|
+
with_intelligence: 0,
|
|
427
|
+
recommended: 0,
|
|
428
|
+
authored: 0,
|
|
429
|
+
benchmark: 0,
|
|
430
|
+
hybrid: 0,
|
|
431
|
+
missing_source: 0,
|
|
432
|
+
smoke_green: 0,
|
|
433
|
+
build_green: 0,
|
|
434
|
+
high_confidence: 0,
|
|
435
|
+
verified_confidence: 0
|
|
436
|
+
};
|
|
437
|
+
}
|
|
438
|
+
function applyIntelligenceToBucket(bucket, intelligence) {
|
|
439
|
+
bucket.total_public_items += 1;
|
|
440
|
+
if (!intelligence) return;
|
|
441
|
+
bucket.with_intelligence += 1;
|
|
442
|
+
if (intelligence.recommended) bucket.recommended += 1;
|
|
443
|
+
switch (intelligence.source) {
|
|
444
|
+
case "authored":
|
|
445
|
+
bucket.authored += 1;
|
|
446
|
+
break;
|
|
447
|
+
case "benchmark":
|
|
448
|
+
bucket.benchmark += 1;
|
|
449
|
+
break;
|
|
450
|
+
case "hybrid":
|
|
451
|
+
bucket.hybrid += 1;
|
|
452
|
+
break;
|
|
453
|
+
default:
|
|
454
|
+
bucket.missing_source += 1;
|
|
455
|
+
break;
|
|
456
|
+
}
|
|
457
|
+
if (intelligence.verification_status === "smoke-green") bucket.smoke_green += 1;
|
|
458
|
+
if (intelligence.verification_status === "build-green") bucket.build_green += 1;
|
|
459
|
+
if (intelligence.confidence_tier === "verified") {
|
|
460
|
+
bucket.verified_confidence += 1;
|
|
461
|
+
bucket.high_confidence += 1;
|
|
462
|
+
} else if (intelligence.confidence_tier === "high") {
|
|
463
|
+
bucket.high_confidence += 1;
|
|
464
|
+
}
|
|
465
|
+
}
|
|
466
|
+
function verificationScore(status) {
|
|
467
|
+
switch (status) {
|
|
468
|
+
case "smoke-green":
|
|
469
|
+
return 200;
|
|
470
|
+
case "build-green":
|
|
471
|
+
return 120;
|
|
472
|
+
case "pending":
|
|
473
|
+
return 20;
|
|
474
|
+
case "smoke-red":
|
|
475
|
+
case "build-red":
|
|
476
|
+
return -40;
|
|
477
|
+
default:
|
|
478
|
+
return 0;
|
|
479
|
+
}
|
|
480
|
+
}
|
|
481
|
+
function confidenceScore(level) {
|
|
482
|
+
switch (level) {
|
|
483
|
+
case "high":
|
|
484
|
+
return 120;
|
|
485
|
+
case "medium":
|
|
486
|
+
return 70;
|
|
487
|
+
case "low":
|
|
488
|
+
return 30;
|
|
489
|
+
default:
|
|
490
|
+
return 0;
|
|
491
|
+
}
|
|
492
|
+
}
|
|
493
|
+
function confidenceTierScore(tier) {
|
|
494
|
+
switch (tier) {
|
|
495
|
+
case "verified":
|
|
496
|
+
return 180;
|
|
497
|
+
case "high":
|
|
498
|
+
return 120;
|
|
499
|
+
case "medium":
|
|
500
|
+
return 60;
|
|
501
|
+
case "low":
|
|
502
|
+
return 10;
|
|
503
|
+
default:
|
|
504
|
+
return 0;
|
|
505
|
+
}
|
|
506
|
+
}
|
|
507
|
+
function normalizePortfolioVisibility(value) {
|
|
508
|
+
if (value === "featured" || value === "public" || value === "labs" || value === "hidden") return value;
|
|
509
|
+
return "public";
|
|
510
|
+
}
|
|
511
|
+
function normalizePortfolioMaturity(value) {
|
|
512
|
+
if (value === "certified-flagship" || value === "supported-contract" || value === "experimental" || value === "fold-candidate" || value === "legacy-hidden") {
|
|
513
|
+
return value;
|
|
514
|
+
}
|
|
515
|
+
return "supported-contract";
|
|
516
|
+
}
|
|
517
|
+
function normalizeArtifactStatus(value) {
|
|
518
|
+
if (value === "none" || value === "planned" || value === "candidate" || value === "certified") return value;
|
|
519
|
+
return "none";
|
|
520
|
+
}
|
|
521
|
+
function normalizeVerificationStatus(value) {
|
|
522
|
+
if (value === "unknown" || value === "pending" || value === "build-green" || value === "build-red" || value === "smoke-green" || value === "smoke-red") {
|
|
523
|
+
return value;
|
|
524
|
+
}
|
|
525
|
+
return "unknown";
|
|
526
|
+
}
|
|
527
|
+
function normalizeBenchmarkConfidence(value) {
|
|
528
|
+
if (value === "none" || value === "low" || value === "medium" || value === "high") return value;
|
|
529
|
+
return "none";
|
|
530
|
+
}
|
|
531
|
+
function normalizeConfidenceTier(value) {
|
|
532
|
+
if (value === "low" || value === "medium" || value === "high" || value === "verified") return value;
|
|
533
|
+
return "low";
|
|
534
|
+
}
|
|
535
|
+
function normalizeGoldenUsage(value) {
|
|
536
|
+
if (value === "none" || value === "showcase" || value === "shortlisted") return value;
|
|
537
|
+
return "none";
|
|
538
|
+
}
|
|
539
|
+
function formatAjvError(error) {
|
|
540
|
+
const instancePath = error.instancePath || "/";
|
|
541
|
+
return `${instancePath} ${error.message}`.trim();
|
|
542
|
+
}
|
|
543
|
+
export {
|
|
544
|
+
API_CONTENT_TYPES,
|
|
545
|
+
API_CONTENT_TYPE_TO_CONTENT_TYPE,
|
|
546
|
+
CONTENT_INTELLIGENCE_SOURCES,
|
|
547
|
+
CONTENT_SCHEMA_FILES,
|
|
548
|
+
CONTENT_TYPES,
|
|
549
|
+
CONTENT_TYPE_TO_API_CONTENT_TYPE,
|
|
550
|
+
CONTENT_TYPE_TO_DIRECTORY,
|
|
551
|
+
OFFICIAL_CONTENT_NAMESPACE,
|
|
552
|
+
OFFICIAL_CONTENT_OWNER_NAME,
|
|
553
|
+
OFFICIAL_CONTENT_OWNER_USERNAME,
|
|
554
|
+
OFFICIAL_CONTENT_PUBLISHED_AT,
|
|
555
|
+
PUBLIC_BLUEPRINT_SETS,
|
|
556
|
+
PUBLIC_CONTENT_SOURCES,
|
|
557
|
+
buildContentIntelligenceSummary,
|
|
558
|
+
clearContentCatalogCache,
|
|
559
|
+
comparePublicContent,
|
|
560
|
+
createContentResolver,
|
|
561
|
+
deriveContentIntelligence,
|
|
562
|
+
getBlueprintPortfolioMetadata,
|
|
563
|
+
getContentCatalog,
|
|
564
|
+
getContentPackageRoot,
|
|
565
|
+
getContentRecord,
|
|
566
|
+
getContentSchema,
|
|
567
|
+
isApiContentType,
|
|
568
|
+
isContentIntelligenceSource,
|
|
569
|
+
isContentType,
|
|
570
|
+
isPublicBlueprintSet,
|
|
571
|
+
isPublicContentSource,
|
|
572
|
+
listContentRecords,
|
|
573
|
+
listContentSchemas,
|
|
574
|
+
normalizeContentType,
|
|
575
|
+
normalizePublicContentSort,
|
|
576
|
+
resolveContent,
|
|
577
|
+
searchContent,
|
|
578
|
+
sortPublicContent,
|
|
579
|
+
validateContentData,
|
|
580
|
+
validateOfficialCorpus
|
|
581
|
+
};
|
|
582
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { readdirSync, readFileSync } from 'node:fs';\nimport { basename, join } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport Ajv2020, { type ValidateFunction } from 'ajv/dist/2020.js';\n\nexport const CONTENT_TYPES = ['pattern', 'theme', 'blueprint', 'archetype', 'shell'] as const;\nexport type ContentType = (typeof CONTENT_TYPES)[number];\n\nexport const API_CONTENT_TYPES = ['patterns', 'themes', 'blueprints', 'archetypes', 'shells'] as const;\nexport type ApiContentType = (typeof API_CONTENT_TYPES)[number];\n\nexport const CONTENT_TYPE_TO_API_CONTENT_TYPE: Record<ContentType, ApiContentType> = {\n pattern: 'patterns',\n theme: 'themes',\n blueprint: 'blueprints',\n archetype: 'archetypes',\n shell: 'shells',\n};\n\nexport const API_CONTENT_TYPE_TO_CONTENT_TYPE: Record<ApiContentType, ContentType> = {\n patterns: 'pattern',\n themes: 'theme',\n blueprints: 'blueprint',\n archetypes: 'archetype',\n shells: 'shell',\n};\n\nexport const CONTENT_TYPE_TO_DIRECTORY: Record<ContentType, ApiContentType> = CONTENT_TYPE_TO_API_CONTENT_TYPE;\n\nexport const CONTENT_SCHEMA_FILES: Record<ContentType | 'common', string> = {\n common: 'common.v1.json',\n pattern: 'pattern.v2.json',\n theme: 'theme.v1.json',\n blueprint: 'blueprint.v1.json',\n archetype: 'archetype.v2.json',\n shell: 'shell.v1.json',\n};\n\nexport const OFFICIAL_CONTENT_NAMESPACE = '@official';\nexport const OFFICIAL_CONTENT_OWNER_NAME = 'Decantr';\nexport const OFFICIAL_CONTENT_OWNER_USERNAME = 'decantr';\nexport const OFFICIAL_CONTENT_PUBLISHED_AT = '2026-07-02T00:00:00.000Z';\n\nexport const PUBLIC_BLUEPRINT_SETS = ['all', 'featured', 'certified', 'labs'] as const;\nexport type PublicBlueprintSet = (typeof PUBLIC_BLUEPRINT_SETS)[number];\n\nexport const PUBLIC_CONTENT_SOURCES = ['official', 'community', 'organization'] as const;\nexport type PublicContentSource = (typeof PUBLIC_CONTENT_SOURCES)[number];\n\nexport const CONTENT_INTELLIGENCE_SOURCES = ['authored', 'benchmark', 'hybrid'] as const;\nexport type ContentIntelligenceSource = (typeof CONTENT_INTELLIGENCE_SOURCES)[number];\n\nexport type PublicContentSort = 'recommended' | 'recent' | 'name';\n\nexport type JsonObject = Record<string, unknown>;\n\nexport interface BlueprintPortfolioArtifact {\n status: 'none' | 'planned' | 'candidate' | 'certified';\n showcase?: string;\n notes?: string;\n}\n\nexport interface BlueprintPortfolioMetadata {\n visibility: 'featured' | 'public' | 'labs' | 'hidden';\n maturity: 'certified-flagship' | 'supported-contract' | 'experimental' | 'fold-candidate' | 'legacy-hidden';\n rationale: string;\n recommended_alternative?: string;\n artifact: BlueprintPortfolioArtifact;\n}\n\nexport interface ContentIntelligenceMetadata {\n source: ContentIntelligenceSource;\n verification_status: 'unknown' | 'pending' | 'build-green' | 'build-red' | 'smoke-green' | 'smoke-red';\n last_verified_at?: string | null;\n target_coverage: string[];\n benchmark_confidence: 'none' | 'low' | 'medium' | 'high';\n confidence_tier: 'low' | 'medium' | 'high' | 'verified';\n golden_usage: 'none' | 'showcase' | 'shortlisted';\n quality_score: number | null;\n confidence_score: number | null;\n recommended: boolean;\n evidence: string[];\n recommendation_reasons: string[];\n recommendation_blockers: string[];\n}\n\nexport interface PublicContentSummary {\n id: string;\n slug: string;\n namespace: string;\n type: ContentType;\n version?: string;\n name?: string;\n description?: string;\n published_at?: string;\n owner_name?: string | null;\n owner_username?: string | null;\n thumbnail_url?: string | null;\n blueprint_portfolio?: BlueprintPortfolioMetadata | null;\n intelligence?: ContentIntelligenceMetadata | null;\n}\n\nexport interface PublicContentRecord<TData extends JsonObject = JsonObject> {\n id: string;\n slug: string;\n namespace: string;\n type: ContentType;\n version: string;\n data: TData;\n visibility: 'public';\n status: 'published';\n created_at: string;\n updated_at: string;\n published_at: string;\n owner_name: string;\n owner_username: string;\n thumbnail_url: string | null;\n intelligence?: ContentIntelligenceMetadata | null;\n}\n\nexport interface ContentListResponse<T = PublicContentSummary> {\n items: T[];\n total: number;\n limit?: number;\n offset?: number;\n}\n\nexport interface SearchResponse {\n results: PublicContentSummary[];\n total: number;\n limit?: number;\n offset?: number;\n}\n\nexport interface SearchContentOptions {\n q?: string;\n type?: ContentType | ApiContentType;\n namespace?: string | null;\n source?: PublicContentSource;\n sort?: string | null;\n recommended?: boolean;\n intelligenceSource?: ContentIntelligenceSource;\n blueprintSet?: PublicBlueprintSet;\n labs?: boolean;\n limit?: number;\n offset?: number;\n}\n\nexport interface ListContentOptions {\n type?: ContentType | ApiContentType;\n namespace?: string | null;\n source?: PublicContentSource;\n sort?: string | null;\n recommended?: boolean;\n intelligenceSource?: ContentIntelligenceSource;\n blueprintSet?: PublicBlueprintSet;\n labs?: boolean;\n limit?: number;\n offset?: number;\n}\n\nexport interface ResolvedContent<TData extends JsonObject = JsonObject> {\n item: TData;\n source: 'core' | 'local';\n path: string;\n}\n\nexport interface ContentResolver {\n resolve<T extends ContentType>(type: T, id: string): Promise<ResolvedContent | null>;\n}\n\nexport interface RegistryIntelligenceSummaryBucket {\n total_public_items: number;\n with_intelligence: number;\n recommended: number;\n authored: number;\n benchmark: number;\n hybrid: number;\n missing_source: number;\n smoke_green: number;\n build_green: number;\n high_confidence: number;\n verified_confidence: number;\n}\n\nexport interface RegistryIntelligenceSummaryResponse {\n $schema: string;\n generated_at: string;\n namespace: string | null;\n totals: RegistryIntelligenceSummaryBucket;\n by_type: Record<ContentType, RegistryIntelligenceSummaryBucket>;\n}\n\nexport interface ContentValidationResult {\n valid: boolean;\n errors: string[];\n}\n\nconst PACKAGE_ROOT = fileURLToPath(new URL('..', import.meta.url));\n\nlet catalogCache: PublicContentRecord[] | null = null;\nlet ajvCache: Ajv2020 | null = null;\nlet validatorCache: Partial<Record<ContentType, ValidateFunction>> = {};\n\nexport function getContentPackageRoot(): string {\n return PACKAGE_ROOT;\n}\n\nexport function isContentType(value: unknown): value is ContentType {\n return typeof value === 'string' && CONTENT_TYPES.includes(value as ContentType);\n}\n\nexport function isApiContentType(value: unknown): value is ApiContentType {\n return typeof value === 'string' && API_CONTENT_TYPES.includes(value as ApiContentType);\n}\n\nexport function isPublicBlueprintSet(value: unknown): value is PublicBlueprintSet {\n return typeof value === 'string' && PUBLIC_BLUEPRINT_SETS.includes(value as PublicBlueprintSet);\n}\n\nexport function isPublicContentSource(value: unknown): value is PublicContentSource {\n return typeof value === 'string' && PUBLIC_CONTENT_SOURCES.includes(value as PublicContentSource);\n}\n\nexport function isContentIntelligenceSource(value: unknown): value is ContentIntelligenceSource {\n return typeof value === 'string' && CONTENT_INTELLIGENCE_SOURCES.includes(value as ContentIntelligenceSource);\n}\n\nexport function normalizeContentType(value: ContentType | ApiContentType): ContentType {\n if (isContentType(value)) return value;\n return API_CONTENT_TYPE_TO_CONTENT_TYPE[value];\n}\n\nexport function getContentSchema(type: ContentType | 'common'): JsonObject {\n return readJson(join(PACKAGE_ROOT, 'schemas', CONTENT_SCHEMA_FILES[type]));\n}\n\nexport function listContentSchemas(): Array<{ type: ContentType | 'common'; file: string; schema: JsonObject }> {\n return (['common', ...CONTENT_TYPES] as Array<ContentType | 'common'>).map((type) => ({\n type,\n file: CONTENT_SCHEMA_FILES[type],\n schema: getContentSchema(type),\n }));\n}\n\nexport function listContentRecords(options: ListContentOptions = {}): ContentListResponse {\n const limit = normalizeLimit(options.limit);\n const offset = normalizeOffset(options.offset);\n const type = options.type ? normalizeContentType(options.type) : null;\n const namespace = options.namespace ?? null;\n\n if (namespace && namespace !== OFFICIAL_CONTENT_NAMESPACE) {\n return { items: [], total: 0, limit, offset };\n }\n if (options.source && options.source !== 'official') {\n return { items: [], total: 0, limit, offset };\n }\n\n const blueprintSet = options.blueprintSet ?? 'all';\n const includeLabs = options.labs === true || blueprintSet === 'labs';\n const summaries = getContentCatalog()\n .filter((record) => !type || record.type === type)\n .map(toPublicSummary)\n .filter((item) =>\n matchesPublicContentFilters(\n item,\n options.recommended === true,\n options.intelligenceSource,\n blueprintSet,\n includeLabs,\n ),\n );\n const sorted = sortPublicContent(summaries, normalizePublicContentSort(options.sort));\n\n return {\n total: sorted.length,\n limit,\n offset,\n items: sorted.slice(offset, offset + limit),\n };\n}\n\nexport function searchContent(options: SearchContentOptions = {}): SearchResponse {\n const limit = normalizeLimit(options.limit);\n const offset = normalizeOffset(options.offset);\n const query = (options.q ?? '').trim().toLowerCase();\n const base = listContentRecords({\n type: options.type,\n namespace: options.namespace,\n source: options.source,\n sort: options.sort,\n recommended: options.recommended,\n intelligenceSource: options.intelligenceSource,\n blueprintSet: options.blueprintSet,\n labs: options.labs,\n limit: 5000,\n offset: 0,\n }).items;\n const filtered = query.length === 0\n ? base\n : base\n .map((summary) => ({ summary, score: scoreSearchMatch(summary, query) }))\n .filter((match) => match.score > 0)\n .sort((left, right) => right.score - left.score || comparePublicContent(left.summary, right.summary))\n .map((match) => match.summary);\n\n return {\n total: filtered.length,\n limit,\n offset,\n results: filtered.slice(offset, offset + limit),\n };\n}\n\nexport function getContentRecord(\n type: ContentType | ApiContentType,\n slug: string,\n namespace: string = OFFICIAL_CONTENT_NAMESPACE,\n): PublicContentRecord | null {\n if (namespace !== OFFICIAL_CONTENT_NAMESPACE) return null;\n const normalizedType = normalizeContentType(type);\n return getContentCatalog().find((record) => (\n record.type === normalizedType\n && (record.slug === slug || record.id === slug || record.data.id === slug)\n )) ?? null;\n}\n\nexport function resolveContent(\n type: ContentType | ApiContentType,\n slug: string,\n namespace: string = OFFICIAL_CONTENT_NAMESPACE,\n): ResolvedContent | null {\n const record = getContentRecord(type, slug, namespace);\n if (!record) return null;\n return {\n item: record.data,\n source: 'core',\n path: `${record.namespace}/${record.type}/${record.slug}`,\n };\n}\n\nexport function createContentResolver(namespace: string = OFFICIAL_CONTENT_NAMESPACE): ContentResolver {\n return {\n async resolve(type, id) {\n return resolveContent(type, id, namespace);\n },\n };\n}\n\nexport function buildContentIntelligenceSummary(namespace: string | null = OFFICIAL_CONTENT_NAMESPACE): RegistryIntelligenceSummaryResponse {\n const records = namespace && namespace !== OFFICIAL_CONTENT_NAMESPACE\n ? []\n : getContentCatalog();\n const byType = Object.fromEntries(\n CONTENT_TYPES.map((type) => [type, createEmptyBucket()]),\n ) as Record<ContentType, RegistryIntelligenceSummaryBucket>;\n const totals = createEmptyBucket();\n\n for (const record of records) {\n applyIntelligenceToBucket(byType[record.type], record.intelligence ?? null);\n applyIntelligenceToBucket(totals, record.intelligence ?? null);\n }\n\n return {\n $schema: 'https://decantr.ai/schemas/registry-intelligence-summary.v1.json',\n generated_at: new Date().toISOString(),\n namespace,\n totals,\n by_type: byType,\n };\n}\n\nexport function validateContentData(type: ContentType | ApiContentType, data: unknown): ContentValidationResult {\n const normalizedType = normalizeContentType(type);\n const validator = getValidator(normalizedType);\n const valid = validator(data);\n return {\n valid,\n errors: valid ? [] : (validator.errors ?? []).map(formatAjvError),\n };\n}\n\nexport function validateOfficialCorpus(): ContentValidationResult {\n const errors: string[] = [];\n for (const record of getContentCatalog()) {\n const result = validateContentData(record.type, record.data);\n if (!result.valid) {\n errors.push(...result.errors.map((error) => `${record.type}/${record.slug}: ${error}`));\n }\n }\n return { valid: errors.length === 0, errors };\n}\n\nexport function getContentCatalog(): PublicContentRecord[] {\n if (catalogCache) return catalogCache;\n\n catalogCache = CONTENT_TYPES.flatMap((type) => {\n const directory = CONTENT_TYPE_TO_DIRECTORY[type];\n const dirPath = join(PACKAGE_ROOT, directory);\n return readdirSync(dirPath)\n .filter((file) => file.endsWith('.json'))\n .sort()\n .map((file) => createRecord(type, basename(file, '.json'), readJson(join(dirPath, file))));\n });\n\n return catalogCache;\n}\n\nexport function clearContentCatalogCache(): void {\n catalogCache = null;\n ajvCache = null;\n validatorCache = {};\n}\n\nfunction createRecord(type: ContentType, slug: string, data: JsonObject): PublicContentRecord {\n const version = typeof data.version === 'string' && data.version.trim().length > 0\n ? data.version\n : '1.0.0';\n return {\n id: slug,\n slug,\n namespace: OFFICIAL_CONTENT_NAMESPACE,\n type,\n version,\n data,\n visibility: 'public',\n status: 'published',\n created_at: OFFICIAL_CONTENT_PUBLISHED_AT,\n updated_at: OFFICIAL_CONTENT_PUBLISHED_AT,\n published_at: OFFICIAL_CONTENT_PUBLISHED_AT,\n owner_name: OFFICIAL_CONTENT_OWNER_NAME,\n owner_username: OFFICIAL_CONTENT_OWNER_USERNAME,\n thumbnail_url: null,\n intelligence: deriveContentIntelligence(type, data),\n };\n}\n\nfunction toPublicSummary(record: PublicContentRecord): PublicContentSummary {\n return {\n id: record.id,\n slug: record.slug,\n namespace: record.namespace,\n type: record.type,\n version: record.version,\n name: getString(record.data.name),\n description: getString(record.data.description),\n published_at: record.published_at,\n owner_name: record.owner_name,\n owner_username: record.owner_username,\n thumbnail_url: record.thumbnail_url,\n blueprint_portfolio: getBlueprintPortfolioMetadata(record.data),\n intelligence: record.intelligence ?? null,\n };\n}\n\nexport function getBlueprintPortfolioMetadata(value: unknown): BlueprintPortfolioMetadata | null {\n const record = asRecord(value);\n if (!record) return null;\n const candidate = asRecord(record.blueprint_portfolio) ?? record;\n const artifact = asRecord(candidate.artifact);\n if (\n typeof candidate.visibility !== 'string'\n || typeof candidate.maturity !== 'string'\n || typeof candidate.rationale !== 'string'\n || !artifact\n || typeof artifact.status !== 'string'\n ) {\n return null;\n }\n\n return {\n visibility: normalizePortfolioVisibility(candidate.visibility),\n maturity: normalizePortfolioMaturity(candidate.maturity),\n rationale: candidate.rationale,\n recommended_alternative: getString(candidate.recommended_alternative),\n artifact: {\n status: normalizeArtifactStatus(artifact.status),\n showcase: getString(artifact.showcase),\n notes: getString(artifact.notes),\n },\n };\n}\n\nexport function deriveContentIntelligence(type: ContentType, data: JsonObject): ContentIntelligenceMetadata | null {\n const authored = asRecord(data.content_intelligence) ?? asRecord(data.registry_intelligence) ?? asRecord(data.intelligence);\n if (authored && isContentIntelligenceSource(authored.source)) {\n return {\n source: authored.source,\n verification_status: normalizeVerificationStatus(authored.verification_status),\n last_verified_at: getString(authored.last_verified_at) ?? null,\n target_coverage: getStringArray(authored.target_coverage),\n benchmark_confidence: normalizeBenchmarkConfidence(authored.benchmark_confidence),\n confidence_tier: normalizeConfidenceTier(authored.confidence_tier),\n golden_usage: normalizeGoldenUsage(authored.golden_usage),\n quality_score: getNumberOrNull(authored.quality_score),\n confidence_score: getNumberOrNull(authored.confidence_score),\n recommended: authored.recommended === true,\n evidence: getStringArray(authored.evidence),\n recommendation_reasons: getStringArray(authored.recommendation_reasons),\n recommendation_blockers: getStringArray(authored.recommendation_blockers),\n };\n }\n\n if (type !== 'blueprint') return null;\n const portfolio = getBlueprintPortfolioMetadata(data);\n if (!portfolio) return null;\n\n const certified = portfolio.artifact.status === 'certified';\n const featured = portfolio.visibility === 'featured';\n const candidate = portfolio.artifact.status === 'candidate';\n const recommended = certified || featured;\n\n return {\n source: 'authored',\n verification_status: certified ? 'smoke-green' : candidate ? 'pending' : 'unknown',\n last_verified_at: null,\n target_coverage: portfolio.artifact.showcase ? [portfolio.artifact.showcase] : [],\n benchmark_confidence: certified ? 'medium' : candidate ? 'low' : 'none',\n confidence_tier: certified ? 'verified' : featured ? 'high' : candidate ? 'medium' : 'low',\n golden_usage: portfolio.artifact.showcase ? 'showcase' : 'none',\n quality_score: certified ? 86 : featured ? 78 : candidate ? 66 : null,\n confidence_score: certified ? 84 : featured ? 76 : candidate ? 62 : null,\n recommended,\n evidence: ['blueprint_portfolio'],\n recommendation_reasons: recommended ? [portfolio.rationale] : [],\n recommendation_blockers: portfolio.visibility === 'hidden'\n ? ['Blueprint is hidden from public browse surfaces.']\n : [],\n };\n}\n\nfunction matchesPublicContentFilters(\n item: PublicContentSummary,\n recommendedOnly: boolean,\n intelligenceSource: ContentIntelligenceSource | undefined,\n blueprintSet: PublicBlueprintSet,\n includeLabs: boolean,\n): boolean {\n if (item.type === 'blueprint') {\n const portfolio = getBlueprintPortfolioMetadata(item.blueprint_portfolio);\n const visibility = portfolio?.visibility ?? 'public';\n if (visibility === 'hidden') return false;\n if (visibility === 'labs' && !includeLabs) return false;\n if (blueprintSet === 'featured' && visibility !== 'featured') return false;\n if (blueprintSet === 'certified' && portfolio?.artifact.status !== 'certified') return false;\n if (blueprintSet === 'labs' && visibility !== 'labs') return false;\n }\n\n if (recommendedOnly && item.intelligence?.recommended !== true) {\n return false;\n }\n\n if (intelligenceSource && item.intelligence?.source !== intelligenceSource) {\n return false;\n }\n\n return true;\n}\n\nexport function sortPublicContent<T extends PublicContentSummary>(\n items: T[],\n sort: PublicContentSort = 'recommended',\n): T[] {\n return [...items].sort((left, right) => comparePublicContent(left, right, sort));\n}\n\nexport function comparePublicContent(\n left: PublicContentSummary,\n right: PublicContentSummary,\n sort: PublicContentSort = 'recommended',\n): number {\n if (sort === 'name') {\n return (left.name ?? left.slug).localeCompare(right.name ?? right.slug);\n }\n\n if (sort === 'recent') {\n const publishedDelta =\n new Date(right.published_at ?? 0).getTime() - new Date(left.published_at ?? 0).getTime();\n if (publishedDelta !== 0) return publishedDelta;\n return left.slug.localeCompare(right.slug);\n }\n\n const priorityDelta = getRecommendedPriority(right) - getRecommendedPriority(left);\n if (priorityDelta !== 0) return priorityDelta;\n return (left.name ?? left.slug).localeCompare(right.name ?? right.slug);\n}\n\nfunction getRecommendedPriority(item: PublicContentSummary): number {\n let score = 0;\n const portfolio = getBlueprintPortfolioMetadata(item.blueprint_portfolio);\n if (portfolio?.visibility === 'featured') score += 900;\n if (portfolio?.artifact.status === 'certified') score += 650;\n if (portfolio?.artifact.status === 'candidate') score += 120;\n if (portfolio?.visibility === 'labs' || portfolio?.visibility === 'hidden') score -= 400;\n\n const intelligence = item.intelligence;\n if (!intelligence) return score;\n\n if (intelligence.recommended) score += 500;\n if (intelligence.golden_usage === 'shortlisted') score += 160;\n if (intelligence.golden_usage === 'showcase') score += 80;\n score += verificationScore(intelligence.verification_status);\n score += confidenceScore(intelligence.benchmark_confidence);\n score += confidenceTierScore(intelligence.confidence_tier);\n score += Math.round((intelligence.confidence_score ?? 0) / 2);\n score += intelligence.quality_score ?? 0;\n return score;\n}\n\nexport function normalizePublicContentSort(value: string | null | undefined): PublicContentSort {\n switch (value) {\n case 'popular':\n case 'recommended':\n return 'recommended';\n case 'newest':\n case 'recent':\n case 'published':\n return 'recent';\n case 'name':\n return 'name';\n default:\n return 'recommended';\n }\n}\n\nfunction scoreSearchMatch(summary: PublicContentSummary, query: string): number {\n const record = getContentRecord(summary.type, summary.slug);\n const data = record?.data ?? {};\n let score = 0;\n if (summary.slug.toLowerCase() === query) score += 1000;\n if ((summary.name ?? '').toLowerCase() === query) score += 800;\n if (summary.slug.toLowerCase().includes(query)) score += 260;\n if ((summary.name ?? '').toLowerCase().includes(query)) score += 220;\n if ((summary.description ?? '').toLowerCase().includes(query)) score += 90;\n if (getString(data.personality)?.toLowerCase().includes(query)) score += 45;\n for (const tag of getStringArray(data.tags)) {\n if (tag.toLowerCase() === query) score += 180;\n else if (tag.toLowerCase().includes(query)) score += 80;\n }\n return score;\n}\n\nfunction getValidator(type: ContentType): ValidateFunction {\n if (validatorCache[type]) return validatorCache[type]!;\n const ajv = getAjv();\n const validator = ajv.compile(getContentSchema(type));\n validatorCache[type] = validator;\n return validator;\n}\n\nfunction getAjv(): Ajv2020 {\n if (ajvCache) return ajvCache;\n ajvCache = new Ajv2020({\n allErrors: true,\n strict: false,\n allowUnionTypes: true,\n });\n ajvCache.addSchema(getContentSchema('common'));\n return ajvCache;\n}\n\nfunction readJson(path: string): JsonObject {\n return JSON.parse(readFileSync(path, 'utf8')) as JsonObject;\n}\n\nfunction asRecord(value: unknown): JsonObject | null {\n return Boolean(value) && typeof value === 'object' && !Array.isArray(value)\n ? value as JsonObject\n : null;\n}\n\nfunction getString(value: unknown): string | undefined {\n return typeof value === 'string' && value.trim().length > 0 ? value : undefined;\n}\n\nfunction getStringArray(value: unknown): string[] {\n return Array.isArray(value)\n ? value.filter((item): item is string => typeof item === 'string' && item.trim().length > 0)\n : [];\n}\n\nfunction getNumberOrNull(value: unknown): number | null {\n return typeof value === 'number' && Number.isFinite(value) ? value : null;\n}\n\nfunction normalizeLimit(value: unknown): number {\n if (typeof value !== 'number' || !Number.isFinite(value)) return 50;\n return Math.max(1, Math.min(500, Math.floor(value)));\n}\n\nfunction normalizeOffset(value: unknown): number {\n if (typeof value !== 'number' || !Number.isFinite(value)) return 0;\n return Math.max(0, Math.floor(value));\n}\n\nfunction createEmptyBucket(): RegistryIntelligenceSummaryBucket {\n return {\n total_public_items: 0,\n with_intelligence: 0,\n recommended: 0,\n authored: 0,\n benchmark: 0,\n hybrid: 0,\n missing_source: 0,\n smoke_green: 0,\n build_green: 0,\n high_confidence: 0,\n verified_confidence: 0,\n };\n}\n\nfunction applyIntelligenceToBucket(\n bucket: RegistryIntelligenceSummaryBucket,\n intelligence: ContentIntelligenceMetadata | null,\n): void {\n bucket.total_public_items += 1;\n if (!intelligence) return;\n\n bucket.with_intelligence += 1;\n if (intelligence.recommended) bucket.recommended += 1;\n\n switch (intelligence.source) {\n case 'authored':\n bucket.authored += 1;\n break;\n case 'benchmark':\n bucket.benchmark += 1;\n break;\n case 'hybrid':\n bucket.hybrid += 1;\n break;\n default:\n bucket.missing_source += 1;\n break;\n }\n\n if (intelligence.verification_status === 'smoke-green') bucket.smoke_green += 1;\n if (intelligence.verification_status === 'build-green') bucket.build_green += 1;\n if (intelligence.confidence_tier === 'verified') {\n bucket.verified_confidence += 1;\n bucket.high_confidence += 1;\n } else if (intelligence.confidence_tier === 'high') {\n bucket.high_confidence += 1;\n }\n}\n\nfunction verificationScore(status?: string | null): number {\n switch (status) {\n case 'smoke-green':\n return 200;\n case 'build-green':\n return 120;\n case 'pending':\n return 20;\n case 'smoke-red':\n case 'build-red':\n return -40;\n default:\n return 0;\n }\n}\n\nfunction confidenceScore(level?: string | null): number {\n switch (level) {\n case 'high':\n return 120;\n case 'medium':\n return 70;\n case 'low':\n return 30;\n default:\n return 0;\n }\n}\n\nfunction confidenceTierScore(tier?: string | null): number {\n switch (tier) {\n case 'verified':\n return 180;\n case 'high':\n return 120;\n case 'medium':\n return 60;\n case 'low':\n return 10;\n default:\n return 0;\n }\n}\n\nfunction normalizePortfolioVisibility(value: string): BlueprintPortfolioMetadata['visibility'] {\n if (value === 'featured' || value === 'public' || value === 'labs' || value === 'hidden') return value;\n return 'public';\n}\n\nfunction normalizePortfolioMaturity(value: string): BlueprintPortfolioMetadata['maturity'] {\n if (\n value === 'certified-flagship'\n || value === 'supported-contract'\n || value === 'experimental'\n || value === 'fold-candidate'\n || value === 'legacy-hidden'\n ) {\n return value;\n }\n return 'supported-contract';\n}\n\nfunction normalizeArtifactStatus(value: string): BlueprintPortfolioArtifact['status'] {\n if (value === 'none' || value === 'planned' || value === 'candidate' || value === 'certified') return value;\n return 'none';\n}\n\nfunction normalizeVerificationStatus(value: unknown): ContentIntelligenceMetadata['verification_status'] {\n if (\n value === 'unknown'\n || value === 'pending'\n || value === 'build-green'\n || value === 'build-red'\n || value === 'smoke-green'\n || value === 'smoke-red'\n ) {\n return value;\n }\n return 'unknown';\n}\n\nfunction normalizeBenchmarkConfidence(value: unknown): ContentIntelligenceMetadata['benchmark_confidence'] {\n if (value === 'none' || value === 'low' || value === 'medium' || value === 'high') return value;\n return 'none';\n}\n\nfunction normalizeConfidenceTier(value: unknown): ContentIntelligenceMetadata['confidence_tier'] {\n if (value === 'low' || value === 'medium' || value === 'high' || value === 'verified') return value;\n return 'low';\n}\n\nfunction normalizeGoldenUsage(value: unknown): ContentIntelligenceMetadata['golden_usage'] {\n if (value === 'none' || value === 'showcase' || value === 'shortlisted') return value;\n return 'none';\n}\n\nfunction formatAjvError(error: NonNullable<ValidateFunction['errors']>[number]): string {\n const instancePath = error.instancePath || '/';\n return `${instancePath} ${error.message}`.trim();\n}\n"],"mappings":"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","names":[]}
|