@adia-ai/gen-ui 0.8.37
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/CHANGELOG.md +26 -0
- package/README.md +77 -0
- package/compose/CHANGELOG.md +1707 -0
- package/compose/README.md +215 -0
- package/compose/core/artifacts.js +262 -0
- package/compose/core/context-store.js +218 -0
- package/compose/core/generator.d.ts +4 -0
- package/compose/core/generator.js +602 -0
- package/compose/core/pipeline/engine.js +289 -0
- package/compose/core/pipeline/types.js +91 -0
- package/compose/core/plan-primitives.js +120 -0
- package/compose/core/plan-turn.js +145 -0
- package/compose/core/reference.js +150 -0
- package/compose/core/state.js +15 -0
- package/compose/evals/harness.d.ts +4 -0
- package/compose/evals/harness.mjs +193 -0
- package/compose/index.d.ts +4 -0
- package/compose/index.js +16 -0
- package/compose/shared/validate-and-repair.js +122 -0
- package/compose/strategies/_shared/chunk-loader.js +282 -0
- package/compose/strategies/cascade.d.ts +67 -0
- package/compose/strategies/cascade.js +165 -0
- package/compose/strategies/escalation.d.ts +13 -0
- package/compose/strategies/escalation.js +132 -0
- package/compose/strategies/free-form-composer/index.js +254 -0
- package/compose/strategies/free-form-composer/system-prompt.js +205 -0
- package/compose/strategies/free-form-composer/transpile.js +279 -0
- package/compose/strategies/monolithic/_shared.js +1619 -0
- package/compose/strategies/monolithic/generate-instant.js +228 -0
- package/compose/strategies/monolithic/generate-pro.js +490 -0
- package/compose/strategies/monolithic/generate-thinking.js +206 -0
- package/compose/strategies/registry.d.ts +20 -0
- package/compose/strategies/registry.js +495 -0
- package/compose/strategies/zettel/_smoke.js +27 -0
- package/compose/strategies/zettel/chunk-composer.js +214 -0
- package/compose/strategies/zettel/chunk-refiner.js +582 -0
- package/compose/strategies/zettel/chunk-synthesizer.js +458 -0
- package/compose/strategies/zettel/composer.js +78 -0
- package/compose/strategies/zettel/composition-library.js +418 -0
- package/compose/strategies/zettel/generate.js +15 -0
- package/compose/strategies/zettel/generator-adapter.d.ts +4 -0
- package/compose/strategies/zettel/generator-adapter.js +242 -0
- package/compose/strategies/zettel/issue-reporter.js +607 -0
- package/compose/strategies/zettel/session-store.js +121 -0
- package/compose/strategies/zettel/state-cache.js +158 -0
- package/compose/transpiler/transpiler-maps.js +675 -0
- package/compose/transpiler/transpiler.d.ts +4 -0
- package/compose/transpiler/transpiler.js +962 -0
- package/corpus/CHANGELOG.md +1957 -0
- package/corpus/README.md +279 -0
- package/corpus/catalog-a2ui_0_9.d.ts +4 -0
- package/corpus/catalog-a2ui_0_9.json +29571 -0
- package/corpus/catalog-a2ui_0_9_rules.txt +1215 -0
- package/corpus/chunk-embeddings.d.ts +4 -0
- package/corpus/chunk-embeddings.json +1 -0
- package/corpus/chunks/_index.json +16658 -0
- package/corpus/chunks/_source-hashes.json +571 -0
- package/corpus/chunks/access-denied-with-request.json +124 -0
- package/corpus/chunks/access-request-form.json +166 -0
- package/corpus/chunks/access-request-pending.json +133 -0
- package/corpus/chunks/accordion-settings.json +176 -0
- package/corpus/chunks/achievement-badges.json +413 -0
- package/corpus/chunks/achievement-unlock.json +104 -0
- package/corpus/chunks/action-list-record-actions.json +84 -0
- package/corpus/chunks/activity-feed.json +390 -0
- package/corpus/chunks/admin-page-header-flush.json +83 -0
- package/corpus/chunks/admin-page-header-title-description.json +80 -0
- package/corpus/chunks/admin-page-header-with-actions.json +107 -0
- package/corpus/chunks/admin-page-header-with-tabs.json +144 -0
- package/corpus/chunks/admin-shell-rounded-borderless.json +287 -0
- package/corpus/chunks/admin-shell-standard.json +310 -0
- package/corpus/chunks/admin-sidebar-brand-signin.json +158 -0
- package/corpus/chunks/admin-sidebar-brand-version.json +130 -0
- package/corpus/chunks/admin-sidebar-flat-nav.json +131 -0
- package/corpus/chunks/admin-sidebar-nav-dividers.json +150 -0
- package/corpus/chunks/admin-sidebar-nav-groups.json +171 -0
- package/corpus/chunks/admin-sidebar-workspace-switcher.json +139 -0
- package/corpus/chunks/admin-topbar-breadcrumb-actions.json +130 -0
- package/corpus/chunks/admin-topbar-breadcrumb-minimal.json +79 -0
- package/corpus/chunks/admin-topbar-deep-breadcrumb.json +129 -0
- package/corpus/chunks/admin-topbar-search.json +104 -0
- package/corpus/chunks/admin-topbar-status-indicator.json +122 -0
- package/corpus/chunks/admin-topbar-trailing-toggle.json +114 -0
- package/corpus/chunks/agent-activity-feed.json +163 -0
- package/corpus/chunks/agent-artifact-stub-card.json +115 -0
- package/corpus/chunks/agent-canvas-shell.json +305 -0
- package/corpus/chunks/agent-citations-source-chips.json +82 -0
- package/corpus/chunks/agent-command-palette-search.json +120 -0
- package/corpus/chunks/agent-cost-detailed.json +260 -0
- package/corpus/chunks/agent-cost-inline.json +78 -0
- package/corpus/chunks/agent-memory-detail.json +181 -0
- package/corpus/chunks/agent-memory-editor.json +173 -0
- package/corpus/chunks/agent-memory-list.json +207 -0
- package/corpus/chunks/agent-pipeline-status-stages.json +61 -0
- package/corpus/chunks/agent-prompt-card.json +179 -0
- package/corpus/chunks/agent-prompt-library-grid.json +341 -0
- package/corpus/chunks/agent-prompt-picker.json +282 -0
- package/corpus/chunks/agent-rate-limit.json +100 -0
- package/corpus/chunks/agent-reasoning-collapsed.json +128 -0
- package/corpus/chunks/agent-tool-call-accordion.json +109 -0
- package/corpus/chunks/agent-tool-call-collapsed.json +98 -0
- package/corpus/chunks/agent-tool-call-error.json +112 -0
- package/corpus/chunks/agent-tool-call-result.json +145 -0
- package/corpus/chunks/agent-tool-call-running.json +85 -0
- package/corpus/chunks/agent-tool-call-success.json +137 -0
- package/corpus/chunks/agent-trace-timeline.json +244 -0
- package/corpus/chunks/ai-streaming-response.json +147 -0
- package/corpus/chunks/alert-banner-stack.json +78 -0
- package/corpus/chunks/alert-banner.json +55 -0
- package/corpus/chunks/alert-dialog-simple.json +72 -0
- package/corpus/chunks/alert-dialog-typed.json +107 -0
- package/corpus/chunks/alert-dialog-unsaved.json +81 -0
- package/corpus/chunks/analytics-chart.json +213 -0
- package/corpus/chunks/analytics-sparklines-dashboard.json +259 -0
- package/corpus/chunks/anchor-bar-selection-bar.json +226 -0
- package/corpus/chunks/api-key-table.json +148 -0
- package/corpus/chunks/api-keys-create.json +140 -0
- package/corpus/chunks/api-keys-list.json +271 -0
- package/corpus/chunks/app-nav-badges-counts.json +77 -0
- package/corpus/chunks/app-nav-badges-group-rollup-badges.json +100 -0
- package/corpus/chunks/app-nav-badges-plan-tiers.json +76 -0
- package/corpus/chunks/app-nav-badges-status-callouts.json +75 -0
- package/corpus/chunks/app-nav-full-example.json +195 -0
- package/corpus/chunks/app-nav-groups.json +103 -0
- package/corpus/chunks/app-nav-items.json +74 -0
- package/corpus/chunks/app-nav-labels-and-dividers.json +92 -0
- package/corpus/chunks/app-nav-spacer.json +77 -0
- package/corpus/chunks/app-product-listing-card.json +214 -0
- package/corpus/chunks/approvals-detail.json +240 -0
- package/corpus/chunks/approvals-queue.json +321 -0
- package/corpus/chunks/audit-log-basic.json +184 -0
- package/corpus/chunks/audit-log.json +174 -0
- package/corpus/chunks/auth-account-deleted-actions.json +51 -0
- package/corpus/chunks/auth-account-deleted.json +202 -0
- package/corpus/chunks/auth-card-content.json +260 -0
- package/corpus/chunks/auth-card-header.json +205 -0
- package/corpus/chunks/auth-email-entry.json +65 -0
- package/corpus/chunks/auth-email-verify-confirm.json +52 -0
- package/corpus/chunks/auth-email-verify.json +196 -0
- package/corpus/chunks/auth-forbidden-actions.json +59 -0
- package/corpus/chunks/auth-forbidden.json +203 -0
- package/corpus/chunks/auth-invite-actions.json +49 -0
- package/corpus/chunks/auth-invite-team-card.json +86 -0
- package/corpus/chunks/auth-link-expired-form.json +65 -0
- package/corpus/chunks/auth-link-expired.json +196 -0
- package/corpus/chunks/auth-locked-account.json +211 -0
- package/corpus/chunks/auth-locked-recovery-options.json +60 -0
- package/corpus/chunks/auth-mfa-enrollment-submit.json +54 -0
- package/corpus/chunks/auth-mfa-enrollment.json +284 -0
- package/corpus/chunks/auth-mfa-fallback-actions.json +52 -0
- package/corpus/chunks/auth-mfa-recovery.json +61 -0
- package/corpus/chunks/auth-new-password-form.json +75 -0
- package/corpus/chunks/auth-new-password.json +217 -0
- package/corpus/chunks/auth-oauth-fallback-actions.json +52 -0
- package/corpus/chunks/auth-oauth-interstitial.json +160 -0
- package/corpus/chunks/auth-password-challenge.json +94 -0
- package/corpus/chunks/auth-password-reset-form.json +64 -0
- package/corpus/chunks/auth-password-reset.json +195 -0
- package/corpus/chunks/auth-profile-form.json +72 -0
- package/corpus/chunks/auth-profile-setup.json +194 -0
- package/corpus/chunks/auth-reset-sent.json +188 -0
- package/corpus/chunks/auth-session-expired-actions.json +52 -0
- package/corpus/chunks/auth-session-expired.json +201 -0
- package/corpus/chunks/auth-signin-card-email.json +245 -0
- package/corpus/chunks/auth-signin-card-magic-link.json +147 -0
- package/corpus/chunks/auth-signin-card-mfa.json +231 -0
- package/corpus/chunks/auth-signin-card-otp.json +205 -0
- package/corpus/chunks/auth-signin-card-password.json +264 -0
- package/corpus/chunks/auth-signin-card-recovery.json +218 -0
- package/corpus/chunks/auth-signout-actions.json +51 -0
- package/corpus/chunks/auth-signout.json +184 -0
- package/corpus/chunks/auth-signup-email-entry.json +66 -0
- package/corpus/chunks/auth-signup-entry.json +281 -0
- package/corpus/chunks/auth-signup-social-auths.json +54 -0
- package/corpus/chunks/auth-signup-verify.json +227 -0
- package/corpus/chunks/auth-social-auths.json +62 -0
- package/corpus/chunks/auth-sso-providers.json +55 -0
- package/corpus/chunks/auth-sso-required.json +213 -0
- package/corpus/chunks/auth-team-invite.json +288 -0
- package/corpus/chunks/avatar-group-overflow.json +137 -0
- package/corpus/chunks/avatar-stack-overflow.json +124 -0
- package/corpus/chunks/banner-announcement-beta.json +99 -0
- package/corpus/chunks/banner-announcement-promo.json +102 -0
- package/corpus/chunks/banner-live-update.json +102 -0
- package/corpus/chunks/banner-system-maintenance.json +101 -0
- package/corpus/chunks/banner-system-offline.json +85 -0
- package/corpus/chunks/banner-system-update.json +102 -0
- package/corpus/chunks/bell-menu-empty.json +107 -0
- package/corpus/chunks/bell-menu-unread.json +395 -0
- package/corpus/chunks/billing-cancel-subscription-danger.json +61 -0
- package/corpus/chunks/billing-invoice-history-table.json +75 -0
- package/corpus/chunks/billing-overview.json +202 -0
- package/corpus/chunks/billing-payment-method-card-on-file.json +157 -0
- package/corpus/chunks/billing-progress-label.json +101 -0
- package/corpus/chunks/blog-post-card.json +212 -0
- package/corpus/chunks/breadcrumb-navigation.json +72 -0
- package/corpus/chunks/bulk-action-toolbar-floating.json +199 -0
- package/corpus/chunks/bulk-action-toolbar-swap.json +158 -0
- package/corpus/chunks/bulk-selection-actions-bar.json +162 -0
- package/corpus/chunks/business-address-form.json +953 -0
- package/corpus/chunks/calendar-month-view.json +74 -0
- package/corpus/chunks/card-grid-images.json +459 -0
- package/corpus/chunks/card-header-with-description.json +47 -0
- package/corpus/chunks/card-with-empty-state.json +96 -0
- package/corpus/chunks/card-with-form.json +143 -0
- package/corpus/chunks/card-with-sparkline.json +90 -0
- package/corpus/chunks/card-with-stat-kpi.json +86 -0
- package/corpus/chunks/changelog-feed-basic.json +470 -0
- package/corpus/chunks/chart-in-card-chart-plus-breakdown.json +188 -0
- package/corpus/chunks/chart-in-card-chart-plus-stat.json +89 -0
- package/corpus/chunks/chart-in-card-chart-with-filter-pills.json +124 -0
- package/corpus/chunks/chart-in-card-full-bleed-legend.json +116 -0
- package/corpus/chunks/chart-in-card-full-chart.json +107 -0
- package/corpus/chunks/chart-in-card-sparkline-tile.json +93 -0
- package/corpus/chunks/chart-in-card-stat-with-sparkline.json +73 -0
- package/corpus/chunks/chart-in-card-trend-footer.json +115 -0
- package/corpus/chunks/chart-with-filter-pills.json +169 -0
- package/corpus/chunks/chat-empty-state-hero.json +102 -0
- package/corpus/chunks/chat-message-assistant-byline.json +85 -0
- package/corpus/chunks/chat-message-user-byline.json +84 -0
- package/corpus/chunks/chat-page-shell.json +379 -0
- package/corpus/chunks/chat-streaming-surface.json +169 -0
- package/corpus/chunks/checkout-order-summary-card.json +140 -0
- package/corpus/chunks/code-snippet.json +107 -0
- package/corpus/chunks/col-form-stack.json +93 -0
- package/corpus/chunks/col-heading-body-action.json +79 -0
- package/corpus/chunks/col-stat-label.json +63 -0
- package/corpus/chunks/color-picker-swatches.json +153 -0
- package/corpus/chunks/command-palette.json +327 -0
- package/corpus/chunks/comments-composer.json +158 -0
- package/corpus/chunks/comments-mention-menu.json +237 -0
- package/corpus/chunks/comments-thread.json +344 -0
- package/corpus/chunks/commerce-pricing-tiers.json +401 -0
- package/corpus/chunks/comparison-table.json +246 -0
- package/corpus/chunks/contact-form-card.json +197 -0
- package/corpus/chunks/contact-form.json +157 -0
- package/corpus/chunks/contact-support-form.json +702 -0
- package/corpus/chunks/conversion-funnel-4-step-funnel.json +139 -0
- package/corpus/chunks/conversion-funnel-6step.json +151 -0
- package/corpus/chunks/conversion-funnel-wide-summary.json +192 -0
- package/corpus/chunks/conversion-funnel-with-segment-compare.json +202 -0
- package/corpus/chunks/cta-banner-centered.json +102 -0
- package/corpus/chunks/dashboard-acquisition-panel.json +212 -0
- package/corpus/chunks/dashboard-admin-page.json +104 -0
- package/corpus/chunks/dashboard-audience-kpis.json +165 -0
- package/corpus/chunks/dashboard-audience-panel.json +756 -0
- package/corpus/chunks/dashboard-behavior-panel.json +114 -0
- package/corpus/chunks/dashboard-chart-recent.json +566 -0
- package/corpus/chunks/dashboard-cohort-retention.json +83 -0
- package/corpus/chunks/dashboard-conversion-panel.json +234 -0
- package/corpus/chunks/dashboard-country-list.json +304 -0
- package/corpus/chunks/dashboard-filter-bar.json +118 -0
- package/corpus/chunks/dashboard-funnel.json +142 -0
- package/corpus/chunks/dashboard-notifications-panel.json +423 -0
- package/corpus/chunks/dashboard-overview-panel.json +1644 -0
- package/corpus/chunks/dashboard-page-header.json +166 -0
- package/corpus/chunks/dashboard-pages-table.json +86 -0
- package/corpus/chunks/dashboard-quick-actions.json +116 -0
- package/corpus/chunks/dashboard-reports-panel.json +166 -0
- package/corpus/chunks/dashboard-reports-table.json +138 -0
- package/corpus/chunks/dashboard-storage-card.json +117 -0
- package/corpus/chunks/dashboard-tabs.json +86 -0
- package/corpus/chunks/dashboard-team-actions-storage.json +605 -0
- package/corpus/chunks/dashboard-team-list.json +334 -0
- package/corpus/chunks/dashboard-traffic-channels.json +184 -0
- package/corpus/chunks/dashboard-transactions-table.json +145 -0
- package/corpus/chunks/data-export-history.json +192 -0
- package/corpus/chunks/data-export-request.json +197 -0
- package/corpus/chunks/data-import-wizard.json +391 -0
- package/corpus/chunks/date-range-picker.json +156 -0
- package/corpus/chunks/date-time-picker-form.json +222 -0
- package/corpus/chunks/departments-checkbox-form.json +390 -0
- package/corpus/chunks/destructive-confirm-modal.json +149 -0
- package/corpus/chunks/diff-inline.json +84 -0
- package/corpus/chunks/diff-side-by-side.json +131 -0
- package/corpus/chunks/diff-structured.json +216 -0
- package/corpus/chunks/digest-email-preview.json +374 -0
- package/corpus/chunks/divider-text-label.json +87 -0
- package/corpus/chunks/doc-editor-shell.json +356 -0
- package/corpus/chunks/drawer-2fa-key.json +273 -0
- package/corpus/chunks/drawer-2fa-sms.json +261 -0
- package/corpus/chunks/drawer-2fa-totp.json +385 -0
- package/corpus/chunks/drawer-cancel-sub.json +636 -0
- package/corpus/chunks/drawer-change-plan.json +561 -0
- package/corpus/chunks/drawer-custom-roles.json +696 -0
- package/corpus/chunks/drawer-data-start.json +171 -0
- package/corpus/chunks/drawer-delete-account.json +341 -0
- package/corpus/chunks/drawer-delete-workspace.json +362 -0
- package/corpus/chunks/drawer-discord.json +434 -0
- package/corpus/chunks/drawer-figma.json +401 -0
- package/corpus/chunks/drawer-first-dashboard.json +220 -0
- package/corpus/chunks/drawer-gcal.json +475 -0
- package/corpus/chunks/drawer-github.json +589 -0
- package/corpus/chunks/drawer-invite.json +397 -0
- package/corpus/chunks/drawer-record-detail.json +44 -0
- package/corpus/chunks/drawer-report.json +528 -0
- package/corpus/chunks/drawer-revoke-session.json +331 -0
- package/corpus/chunks/drawer-role.json +190 -0
- package/corpus/chunks/drawer-slack.json +429 -0
- package/corpus/chunks/drawer-smtp.json +476 -0
- package/corpus/chunks/drawer-source.json +294 -0
- package/corpus/chunks/drawer-transaction.json +493 -0
- package/corpus/chunks/drawer-with-create-form.json +43 -0
- package/corpus/chunks/editor-code-pane.json +204 -0
- package/corpus/chunks/editor-page-shell.json +149 -0
- package/corpus/chunks/editor-preview-pane.json +136 -0
- package/corpus/chunks/editor-statusbar-ready.json +99 -0
- package/corpus/chunks/editor-toolbar-import-export.json +195 -0
- package/corpus/chunks/email-inbox-list.json +678 -0
- package/corpus/chunks/empty-state-danger.json +58 -0
- package/corpus/chunks/empty-state-minimal.json +44 -0
- package/corpus/chunks/empty-state-warning.json +53 -0
- package/corpus/chunks/empty-state.json +65 -0
- package/corpus/chunks/error-404-actions.json +54 -0
- package/corpus/chunks/error-404.json +204 -0
- package/corpus/chunks/error-500-actions.json +61 -0
- package/corpus/chunks/error-500.json +220 -0
- package/corpus/chunks/error-maintenance-actions.json +53 -0
- package/corpus/chunks/error-maintenance.json +203 -0
- package/corpus/chunks/error-page-shell.json +132 -0
- package/corpus/chunks/export-flow-async.json +210 -0
- package/corpus/chunks/export-flow-delivery.json +163 -0
- package/corpus/chunks/export-flow-sync.json +162 -0
- package/corpus/chunks/extended-profile-form.json +512 -0
- package/corpus/chunks/faq-accordion.json +123 -0
- package/corpus/chunks/feature-grid-icons.json +314 -0
- package/corpus/chunks/feature-grid-three-cards.json +187 -0
- package/corpus/chunks/feature-toggle-switch-grid.json +213 -0
- package/corpus/chunks/file-upload-dnd.json +166 -0
- package/corpus/chunks/file-upload-field.json +97 -0
- package/corpus/chunks/file-upload-form.json +251 -0
- package/corpus/chunks/filter-bar-active-filters.json +176 -0
- package/corpus/chunks/filter-bar-filter-bar-with-table.json +113 -0
- package/corpus/chunks/filter-bar-saved-views.json +117 -0
- package/corpus/chunks/filter-popover-form.json +137 -0
- package/corpus/chunks/footer-multi-column.json +270 -0
- package/corpus/chunks/footer-primary-only.json +41 -0
- package/corpus/chunks/form-checkbox-group.json +65 -0
- package/corpus/chunks/form-drawer-edit-form.json +178 -0
- package/corpus/chunks/form-drawer-simple-form.json +151 -0
- package/corpus/chunks/form-drawer-tall-form.json +325 -0
- package/corpus/chunks/form-field-email-hint.json +53 -0
- package/corpus/chunks/form-field-range.json +54 -0
- package/corpus/chunks/form-field-required.json +52 -0
- package/corpus/chunks/form-field-select.json +66 -0
- package/corpus/chunks/form-field-textarea.json +51 -0
- package/corpus/chunks/form-field-with-error.json +151 -0
- package/corpus/chunks/form-fields-two-column.json +69 -0
- package/corpus/chunks/form-page-shell.json +146 -0
- package/corpus/chunks/form-switch-toggle.json +41 -0
- package/corpus/chunks/form-system-live-demo.json +123 -0
- package/corpus/chunks/forms-address-autocomplete.json +277 -0
- package/corpus/chunks/forms-address-fields.json +221 -0
- package/corpus/chunks/forms-conditional-reveal.json +195 -0
- package/corpus/chunks/gallery-page-shell.json +444 -0
- package/corpus/chunks/grid-2col-entry-cards.json +140 -0
- package/corpus/chunks/grid-kpi-4col.json +164 -0
- package/corpus/chunks/grid-responsive-kpi.json +165 -0
- package/corpus/chunks/hero-cta-simple.json +107 -0
- package/corpus/chunks/hero-cta-split.json +183 -0
- package/corpus/chunks/hero-section-split.json +111 -0
- package/corpus/chunks/icon-text-row.json +60 -0
- package/corpus/chunks/image-caption-tile.json +99 -0
- package/corpus/chunks/image-carousel.json +156 -0
- package/corpus/chunks/image-thumbnail-grid.json +77 -0
- package/corpus/chunks/image-upload-preview.json +118 -0
- package/corpus/chunks/import-mapping-flow.json +972 -0
- package/corpus/chunks/inline-dialog-rename.json +128 -0
- package/corpus/chunks/inline-dialog-schedule.json +154 -0
- package/corpus/chunks/inline-dialog-status.json +179 -0
- package/corpus/chunks/integrations-api-keys-card-list.json +475 -0
- package/corpus/chunks/integrations-connect-form.json +550 -0
- package/corpus/chunks/integrations-grid.json +141 -0
- package/corpus/chunks/integrations-webhooks-empty-state.json +66 -0
- package/corpus/chunks/inventory-list-stock.json +137 -0
- package/corpus/chunks/invite-members.json +153 -0
- package/corpus/chunks/invoice-line-items.json +493 -0
- package/corpus/chunks/kanban-board-3col.json +713 -0
- package/corpus/chunks/kanban-page-shell.json +671 -0
- package/corpus/chunks/key-value-detail-list.json +242 -0
- package/corpus/chunks/keyboard-shortcut-display.json +250 -0
- package/corpus/chunks/labeled-textarea.json +45 -0
- package/corpus/chunks/leaderboard-table.json +140 -0
- package/corpus/chunks/library-browser-search-filter.json +109 -0
- package/corpus/chunks/linked-record-row.json +61 -0
- package/corpus/chunks/loading-skeleton-placeholder.json +387 -0
- package/corpus/chunks/login-form-card.json +207 -0
- package/corpus/chunks/logo-cloud-trusted-by.json +235 -0
- package/corpus/chunks/map-with-location-list.json +293 -0
- package/corpus/chunks/marketing-hero-cta.json +102 -0
- package/corpus/chunks/marketing-page-shell.json +352 -0
- package/corpus/chunks/masonry-gallery.json +154 -0
- package/corpus/chunks/member-edit-drawer.json +236 -0
- package/corpus/chunks/members-active-table-search-filter.json +184 -0
- package/corpus/chunks/members-pending-invites-cards.json +251 -0
- package/corpus/chunks/members-roles-permissions-list.json +146 -0
- package/corpus/chunks/menu-context-actions.json +113 -0
- package/corpus/chunks/metadata-description-list.json +178 -0
- package/corpus/chunks/modal-create-project-form.json +133 -0
- package/corpus/chunks/modal-preferences-tabs.json +147 -0
- package/corpus/chunks/multi-field-form-validation.json +394 -0
- package/corpus/chunks/nav-menu-icons.json +74 -0
- package/corpus/chunks/newsletter-subscription.json +190 -0
- package/corpus/chunks/notification-badges-feed.json +411 -0
- package/corpus/chunks/notification-preferences-panel.json +238 -0
- package/corpus/chunks/onb-completion.json +139 -0
- package/corpus/chunks/onb-extension-install.json +172 -0
- package/corpus/chunks/onb-hero-welcome.json +156 -0
- package/corpus/chunks/onb-import-picker.json +86 -0
- package/corpus/chunks/onb-mobile-handoff.json +121 -0
- package/corpus/chunks/onb-notification-prefs.json +83 -0
- package/corpus/chunks/onb-persona-picker.json +82 -0
- package/corpus/chunks/onb-provider-tiles.json +137 -0
- package/corpus/chunks/onb-settings-review.json +257 -0
- package/corpus/chunks/onb-step-footer.json +121 -0
- package/corpus/chunks/onb-step-header.json +121 -0
- package/corpus/chunks/onb-step-progress.json +140 -0
- package/corpus/chunks/onb-step-shell.json +380 -0
- package/corpus/chunks/onb-story-pane.json +121 -0
- package/corpus/chunks/onb-tutorial-steps.json +193 -0
- package/corpus/chunks/order-confirmation-success-card.json +177 -0
- package/corpus/chunks/order-tracking-timeline.json +131 -0
- package/corpus/chunks/pagination-controls.json +82 -0
- package/corpus/chunks/pane-settings-sidebar.json +204 -0
- package/corpus/chunks/patient-visit-shell.json +191 -0
- package/corpus/chunks/payment-checkout-form.json +341 -0
- package/corpus/chunks/payment-method-form.json +328 -0
- package/corpus/chunks/period-comparison.json +236 -0
- package/corpus/chunks/permission-matrix-table.json +438 -0
- package/corpus/chunks/permissions-matrix-grid.json +111 -0
- package/corpus/chunks/permissions-matrix-summary.json +157 -0
- package/corpus/chunks/permissions-role-picker-radio.json +107 -0
- package/corpus/chunks/permissions-role-picker-select.json +101 -0
- package/corpus/chunks/permissions-share-link.json +256 -0
- package/corpus/chunks/permissions-share-people.json +297 -0
- package/corpus/chunks/permissions-sharing-scopes.json +109 -0
- package/corpus/chunks/plan-selection-form.json +529 -0
- package/corpus/chunks/playground-a2ui.json +181 -0
- package/corpus/chunks/playground-agent-admin.json +117 -0
- package/corpus/chunks/playground-agent-chat.json +126 -0
- package/corpus/chunks/playground-app-shell.json +488 -0
- package/corpus/chunks/playground-chat.json +265 -0
- package/corpus/chunks/playground-construct-canvas.json +118 -0
- package/corpus/chunks/playground-css-channel.json +487 -0
- package/corpus/chunks/playground-gen-ui.json +224 -0
- package/corpus/chunks/playground-render-preview.json +369 -0
- package/corpus/chunks/playground-streams-bridge.json +437 -0
- package/corpus/chunks/playground-table-toolbar.json +38 -0
- package/corpus/chunks/popover-with-content.json +118 -0
- package/corpus/chunks/pricing-tiers.json +561 -0
- package/corpus/chunks/product-tour.json +158 -0
- package/corpus/chunks/profile-public.json +297 -0
- package/corpus/chunks/progress-tracker-milestones.json +294 -0
- package/corpus/chunks/radio-button-group.json +83 -0
- package/corpus/chunks/rating-stars-review-summary.json +259 -0
- package/corpus/chunks/reactions-bar.json +75 -0
- package/corpus/chunks/reactions-picker.json +245 -0
- package/corpus/chunks/real-time-metrics-dashboard.json +344 -0
- package/corpus/chunks/record-detail-drawer-simple-detail.json +296 -0
- package/corpus/chunks/record-detail-drawer-tabbed-detail.json +443 -0
- package/corpus/chunks/referral-share-link.json +128 -0
- package/corpus/chunks/referral-status.json +243 -0
- package/corpus/chunks/reg-address-form.json +825 -0
- package/corpus/chunks/reg-billing-card.json +210 -0
- package/corpus/chunks/reg-brand-scrape.json +599 -0
- package/corpus/chunks/reg-departments-toggle.json +259 -0
- package/corpus/chunks/reg-extended-profile.json +356 -0
- package/corpus/chunks/reg-final-done.json +457 -0
- package/corpus/chunks/reg-helpdesk-grid.json +571 -0
- package/corpus/chunks/reg-import-picker.json +112 -0
- package/corpus/chunks/reg-integrations-grid.json +418 -0
- package/corpus/chunks/reg-invite-form.json +245 -0
- package/corpus/chunks/reg-legal-entity.json +260 -0
- package/corpus/chunks/reg-org-chart-review.json +891 -0
- package/corpus/chunks/reg-profile-identity.json +188 -0
- package/corpus/chunks/reg-step-footer.json +201 -0
- package/corpus/chunks/reg-step-header.json +201 -0
- package/corpus/chunks/reg-step-progress.json +236 -0
- package/corpus/chunks/reg-step-shell.json +605 -0
- package/corpus/chunks/reg-story-pane.json +201 -0
- package/corpus/chunks/reg-success-summary.json +257 -0
- package/corpus/chunks/reg-team-size.json +128 -0
- package/corpus/chunks/reg-usecase-picker.json +104 -0
- package/corpus/chunks/reg-workspace-name.json +159 -0
- package/corpus/chunks/responsive-grid-pattern.json +71 -0
- package/corpus/chunks/responsive-kpi-grid.json +166 -0
- package/corpus/chunks/responsive-row-pattern.json +71 -0
- package/corpus/chunks/responsive-shell-sidebar.json +308 -0
- package/corpus/chunks/responsive-wrap-at-pattern.json +124 -0
- package/corpus/chunks/retention-cohort-default-retention.json +80 -0
- package/corpus/chunks/retention-cohort-stat-pair.json +163 -0
- package/corpus/chunks/retention-cohort-with-legend.json +135 -0
- package/corpus/chunks/revenue-heatmap.json +82 -0
- package/corpus/chunks/role-management.json +272 -0
- package/corpus/chunks/row-action-cluster.json +54 -0
- package/corpus/chunks/row-avatar-name-role.json +71 -0
- package/corpus/chunks/row-icon-label.json +52 -0
- package/corpus/chunks/row-spread-label-value.json +54 -0
- package/corpus/chunks/row-wrap-tags.json +72 -0
- package/corpus/chunks/schedule-meeting-form-card.json +229 -0
- package/corpus/chunks/search-recents-menu.json +195 -0
- package/corpus/chunks/search-results-grouped.json +357 -0
- package/corpus/chunks/search-results-list.json +202 -0
- package/corpus/chunks/search-saved-views.json +356 -0
- package/corpus/chunks/search-with-filters.json +311 -0
- package/corpus/chunks/searchable-picker-modal.json +164 -0
- package/corpus/chunks/section-with-stack.json +48 -0
- package/corpus/chunks/security-active-sessions-devices.json +287 -0
- package/corpus/chunks/security-change-password-form.json +102 -0
- package/corpus/chunks/security-delete-account-danger.json +79 -0
- package/corpus/chunks/segmented-control-billing-tabs.json +164 -0
- package/corpus/chunks/select-multiple-preselected.json +70 -0
- package/corpus/chunks/settings-2fa-setup.json +307 -0
- package/corpus/chunks/settings-admin-page.json +1205 -0
- package/corpus/chunks/settings-appearance-primitives.json +145 -0
- package/corpus/chunks/settings-appearance-theme-panel.json +55 -0
- package/corpus/chunks/settings-appearance.json +81 -0
- package/corpus/chunks/settings-danger-zone-delete-workspace.json +93 -0
- package/corpus/chunks/settings-general-form.json +69 -0
- package/corpus/chunks/settings-integrations.json +298 -0
- package/corpus/chunks/settings-members-invite.json +112 -0
- package/corpus/chunks/settings-notification-activity-checkboxes.json +108 -0
- package/corpus/chunks/settings-notification-channels-switches.json +101 -0
- package/corpus/chunks/settings-page-shell.json +190 -0
- package/corpus/chunks/settings-privacy.json +83 -0
- package/corpus/chunks/settings-profile-security.json +122 -0
- package/corpus/chunks/settings-toggle-switches.json +66 -0
- package/corpus/chunks/sidebar-nav.json +120 -0
- package/corpus/chunks/sidebar-navigation-panel.json +165 -0
- package/corpus/chunks/signup-form-card.json +218 -0
- package/corpus/chunks/signup-team-size-form.json +259 -0
- package/corpus/chunks/single-select-card-form.json +231 -0
- package/corpus/chunks/slider-range-controls.json +119 -0
- package/corpus/chunks/social-media-post-card.json +159 -0
- package/corpus/chunks/sortable-list.json +307 -0
- package/corpus/chunks/sortable-search-paginate-table.json +162 -0
- package/corpus/chunks/split-pane-editor.json +146 -0
- package/corpus/chunks/stack-avatar-badge-overlay.json +53 -0
- package/corpus/chunks/stack-image-shimmer.json +51 -0
- package/corpus/chunks/stat-cards-kpi-dashboard.json +178 -0
- package/corpus/chunks/stats-band-big-numbers.json +175 -0
- package/corpus/chunks/status-dashboard.json +282 -0
- package/corpus/chunks/stepper-form-wizard.json +165 -0
- package/corpus/chunks/subscription-status-renewal-card.json +285 -0
- package/corpus/chunks/survey-rating-form.json +165 -0
- package/corpus/chunks/swiper-product-carousel.json +349 -0
- package/corpus/chunks/swiper-testimonial-carousel.json +279 -0
- package/corpus/chunks/table-empty-state.json +116 -0
- package/corpus/chunks/table-inline-edit-row.json +269 -0
- package/corpus/chunks/table-spreadsheet-cells.json +334 -0
- package/corpus/chunks/table-toolbar-no-search.json +42 -0
- package/corpus/chunks/table-toolbar-with-table.json +208 -0
- package/corpus/chunks/table-with-toolbar-card.json +80 -0
- package/corpus/chunks/tabs-with-panels.json +187 -0
- package/corpus/chunks/tag-chips-filter.json +100 -0
- package/corpus/chunks/team-invite-form.json +380 -0
- package/corpus/chunks/team-members-list.json +341 -0
- package/corpus/chunks/testimonial-grid.json +269 -0
- package/corpus/chunks/testimonial-pull-quote.json +137 -0
- package/corpus/chunks/testimonials-avatar-cards.json +286 -0
- package/corpus/chunks/timeline-events.json +89 -0
- package/corpus/chunks/timezone-selector-basic.json +99 -0
- package/corpus/chunks/timezone-selector-preview.json +104 -0
- package/corpus/chunks/toolbar-icons.json +216 -0
- package/corpus/chunks/toolbar-rich-text-editor.json +230 -0
- package/corpus/chunks/toolbar-tooltips.json +191 -0
- package/corpus/chunks/tooltip-hover-button.json +106 -0
- package/corpus/chunks/tree-file-explorer.json +136 -0
- package/corpus/chunks/tree-table-basic.json +171 -0
- package/corpus/chunks/trial-banner.json +158 -0
- package/corpus/chunks/url-import-form.json +728 -0
- package/corpus/chunks/usage-quota-meter-card.json +217 -0
- package/corpus/chunks/user-identity-row.json +81 -0
- package/corpus/chunks/user-onboarding-checklist.json +301 -0
- package/corpus/chunks/user-profile-card.json +192 -0
- package/corpus/chunks/users-table-badge.json +135 -0
- package/corpus/chunks/verification-document-upload.json +179 -0
- package/corpus/chunks/verification-status.json +97 -0
- package/corpus/chunks/verification-stepper.json +111 -0
- package/corpus/chunks/video-player-controls.json +120 -0
- package/corpus/chunks/webhook-config.json +209 -0
- package/corpus/chunks/webhooks-list.json +204 -0
- package/corpus/chunks/wizard-drawer-three-step-wizard.json +443 -0
- package/corpus/manifest.d.ts +4 -0
- package/corpus/manifest.json +6 -0
- package/corpus/scripts/chunk-library.d.ts +4 -0
- package/corpus/scripts/chunk-library.js +335 -0
- package/node-shims.d.ts +48 -0
- package/package.json +215 -0
- package/retrieval/CHANGELOG.md +1073 -0
- package/retrieval/README.md +71 -0
- package/retrieval/anti-patterns.js +189 -0
- package/retrieval/authoring/index.d.ts +4 -0
- package/retrieval/authoring/index.js +9 -0
- package/retrieval/authoring/web-research.js +220 -0
- package/retrieval/catalog.js +250 -0
- package/retrieval/component-catalog.js +168 -0
- package/retrieval/component-entry.js +80 -0
- package/retrieval/context-assembler.js +174 -0
- package/retrieval/domain-router.js +417 -0
- package/retrieval/embedding/chunk-embedding-retriever.js +117 -0
- package/retrieval/embedding/embedding-provider.js +72 -0
- package/retrieval/embedding/index.d.ts +4 -0
- package/retrieval/embedding/index.js +2 -0
- package/retrieval/feedback/dialog-recorder.js +107 -0
- package/retrieval/feedback/feedback-analyzer.js +180 -0
- package/retrieval/feedback/feedback-store.js +194 -0
- package/retrieval/feedback/feedback.js +117 -0
- package/retrieval/feedback/gap-registry.js +80 -0
- package/retrieval/feedback/human-signal.js +113 -0
- package/retrieval/feedback/index.d.ts +4 -0
- package/retrieval/feedback/index.js +24 -0
- package/retrieval/feedback/submit-feedback.js +45 -0
- package/retrieval/index.d.ts +4 -0
- package/retrieval/index.js +53 -0
- package/retrieval/intent/clarity.js +139 -0
- package/retrieval/intent/decomposer.js +124 -0
- package/retrieval/intent/index.d.ts +4 -0
- package/retrieval/intent/index.js +18 -0
- package/retrieval/intent/intent-alignment.js +172 -0
- package/retrieval/intent/intent-categorizer.js +69 -0
- package/retrieval/intent/intent-gate.js +96 -0
- package/retrieval/intent/prompt-analyzer.js +162 -0
- package/retrieval/wiring-catalog.js +168 -0
- package/validate/catalog-validator.d.ts +4 -0
- package/validate/catalog-validator.js +327 -0
- package/validate/semantic/cache.js +54 -0
- package/validate/semantic/classify-intent.js +128 -0
- package/validate/semantic/index.js +163 -0
- package/validate/semantic/intent-specs.js +162 -0
- package/validate/semantic/judge.js +180 -0
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reference Tools — stable generative-system API surface.
|
|
3
|
+
*
|
|
4
|
+
* Thin wrappers used by the monolithic engines + generator pipeline.
|
|
5
|
+
* §64 migrated the "pattern" surface from `pattern-library.js` (retired)
|
|
6
|
+
* to the zettel `composition-library.js`. Function names kept
|
|
7
|
+
* (searchBlocks/lookupPattern/listPatterns/searchBlocksSemantic) for
|
|
8
|
+
* back-compat with engine call sites; internally they hit compositions.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import { getCatalog, getComponent, getComponentsByCategory } from '../../retrieval/index.js';
|
|
12
|
+
import { classifyIntent, assembleContext } from '../../retrieval/index.js';
|
|
13
|
+
import { checkAllAntiPatterns } from '../../retrieval/index.js';
|
|
14
|
+
import { serializeEntry } from '../../retrieval/index.js';
|
|
15
|
+
import {
|
|
16
|
+
searchAll as searchCompositions,
|
|
17
|
+
getComposition,
|
|
18
|
+
getAllCompositions,
|
|
19
|
+
} from '../strategies/zettel/composition-library.js';
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Compositions have `tags: { purpose: [...], complexity: "", layout: "" }`
|
|
23
|
+
* but the monolithic engines (instant/pro/thinking) all assume the old
|
|
24
|
+
* pattern shape `tags: [string]` and call `.map(...)` on it. Flatten on
|
|
25
|
+
* the way out so legacy call sites keep working without re-templating
|
|
26
|
+
* every engine. Annotated chunks expose flat-but-shallow `tags`; both
|
|
27
|
+
* are handled.
|
|
28
|
+
*/
|
|
29
|
+
function normalize(record) {
|
|
30
|
+
if (!record) return record;
|
|
31
|
+
let tags = record.tags;
|
|
32
|
+
if (Array.isArray(tags)) return record;
|
|
33
|
+
if (tags && typeof tags === 'object') {
|
|
34
|
+
tags = Object.values(tags)
|
|
35
|
+
.flat()
|
|
36
|
+
.filter((v) => typeof v === 'string');
|
|
37
|
+
} else {
|
|
38
|
+
tags = [];
|
|
39
|
+
}
|
|
40
|
+
return { ...record, tags };
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Look up a single component by A2UI type name.
|
|
45
|
+
* @param {string} typeName — e.g. 'Button', 'Card', 'TextField'
|
|
46
|
+
* @returns {object|null}
|
|
47
|
+
*/
|
|
48
|
+
export async function lookupComponent(typeName) {
|
|
49
|
+
return getComponent(typeName);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Get reference-level entry for a component (full API surface).
|
|
54
|
+
* @param {string} typeName
|
|
55
|
+
* @returns {object|null}
|
|
56
|
+
*/
|
|
57
|
+
export async function getComponentAPI(typeName) {
|
|
58
|
+
const entry = await getComponent(typeName);
|
|
59
|
+
if (!entry) return null;
|
|
60
|
+
return serializeEntry(entry, 'reference');
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Get the full component catalog map.
|
|
65
|
+
* @returns {object}
|
|
66
|
+
*/
|
|
67
|
+
export async function getComponentMap() {
|
|
68
|
+
return getCatalog();
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Get components filtered by category.
|
|
73
|
+
* @param {string} category — e.g. 'input', 'layout', 'display'
|
|
74
|
+
* @returns {object[]}
|
|
75
|
+
*/
|
|
76
|
+
export async function getComponentsByGroup(category) {
|
|
77
|
+
return getComponentsByCategory(category);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Search the composition library by query.
|
|
82
|
+
* Returns full composition records (rehydrated from name hits).
|
|
83
|
+
* @param {string} query — Natural language or keyword query
|
|
84
|
+
* @returns {object[]}
|
|
85
|
+
*/
|
|
86
|
+
export function searchBlocks(query, { domain } = {}) {
|
|
87
|
+
const hits = searchCompositions(query);
|
|
88
|
+
const records = hits.map((h) => getComposition(h.name)).filter(Boolean);
|
|
89
|
+
const filtered = domain ? records.filter((c) => c.domain === domain) : records;
|
|
90
|
+
return filtered.map(normalize);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* Get a specific named composition.
|
|
95
|
+
* @param {string} name — Composition name
|
|
96
|
+
* @returns {object|null}
|
|
97
|
+
*/
|
|
98
|
+
export function lookupPattern(name) {
|
|
99
|
+
return normalize(getComposition(name));
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Get all available compositions.
|
|
104
|
+
* @returns {object[]}
|
|
105
|
+
*/
|
|
106
|
+
export function listPatterns() {
|
|
107
|
+
return getAllCompositions().map(normalize);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Keyword search wrapped as the legacy `{ matches }` return shape so the
|
|
112
|
+
* monolithic-thinking engine's call site keeps working. The historical
|
|
113
|
+
* LLM-driven semantic path retired with `pattern-library.js` in §64;
|
|
114
|
+
* compositions don't have a semantic search backend yet.
|
|
115
|
+
*
|
|
116
|
+
* @param {string} query
|
|
117
|
+
* @param {object} [_options] — accepted for back-compat; llmAdapter/remix ignored
|
|
118
|
+
* @returns {Promise<{ matches: object[] }>}
|
|
119
|
+
*/
|
|
120
|
+
export async function searchBlocksSemantic(query, _options = {}) {
|
|
121
|
+
return { matches: searchBlocks(query) };
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* Classify an intent into a domain.
|
|
126
|
+
* @param {string} intent — Natural language intent
|
|
127
|
+
* @returns {object} — { domain, confidence, matchedSignals }
|
|
128
|
+
*/
|
|
129
|
+
export function lookupDomain(intent) {
|
|
130
|
+
return classifyIntent(intent);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* Assemble progressive-disclosure context for generation.
|
|
135
|
+
* @param {string} intent — Natural language intent
|
|
136
|
+
* @param {number} [tier=1] — Budget tier (0-4)
|
|
137
|
+
* @returns {object}
|
|
138
|
+
*/
|
|
139
|
+
export async function getContext(intent, tier = 1) {
|
|
140
|
+
return assembleContext({ intent, tier });
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* Run anti-pattern checks against a component tree.
|
|
145
|
+
* @param {object[]} components — Flat component list
|
|
146
|
+
* @returns {object[]} — Anti-pattern violations
|
|
147
|
+
*/
|
|
148
|
+
export function checkAntiPatterns(components) {
|
|
149
|
+
return checkAllAntiPatterns(components);
|
|
150
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared module-level singletons for the monolithic engine.
|
|
3
|
+
*
|
|
4
|
+
* These were previously private to core/generator.js. Extracted so that
|
|
5
|
+
* strategies/monolithic/generate-{instant,pro,thinking}.js can share the same
|
|
6
|
+
* artifact store and pipeline engine without going through the dispatcher.
|
|
7
|
+
*
|
|
8
|
+
* Same instances, imported by reference — do NOT re-instantiate per-call.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import { ArtifactStore } from './artifacts.js';
|
|
12
|
+
import { PipelineEngine } from './pipeline/engine.js';
|
|
13
|
+
|
|
14
|
+
export const store = new ArtifactStore();
|
|
15
|
+
export const engine = new PipelineEngine();
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generator-agnostic eval harness.
|
|
3
|
+
*
|
|
4
|
+
* Contract (generator return):
|
|
5
|
+
* {
|
|
6
|
+
* messages?: Array, // A2UI messages (may be empty)
|
|
7
|
+
* validation?: { score: number }, // 0-100 (or absent)
|
|
8
|
+
* strategy?: string, // architecture-specific label
|
|
9
|
+
* retrieval?: { // optional retrieval metadata
|
|
10
|
+
* hit: boolean, // top result considered relevant
|
|
11
|
+
* rank: number|null, // 1-indexed rank of first relevant candidate
|
|
12
|
+
* candidate: string|null, // name of chosen pattern/composition
|
|
13
|
+
* },
|
|
14
|
+
* fragments_used?: string[], // zettel-only
|
|
15
|
+
* ...extra
|
|
16
|
+
* }
|
|
17
|
+
*
|
|
18
|
+
* Two runners:
|
|
19
|
+
* - runHarness() legacy shape — preserved byte-for-byte for back-compat
|
|
20
|
+
* - runHarnessV2() augmented shape — coverage / avgScoreWhenEmitted /
|
|
21
|
+
* retrievalMRR / per-intent strategy & fragment data
|
|
22
|
+
*/
|
|
23
|
+
import { readFile } from 'node:fs/promises';
|
|
24
|
+
import { join, dirname } from 'node:path';
|
|
25
|
+
import { fileURLToPath } from 'node:url';
|
|
26
|
+
|
|
27
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
28
|
+
|
|
29
|
+
export async function loadHeldOut() {
|
|
30
|
+
// held-out.jsonl lives in the sibling @adia-ai/gen-ui/corpus package.
|
|
31
|
+
// Callers can still pass `intents` explicitly; this fallback is the default.
|
|
32
|
+
// Path from here: packages/gen-ui/compose/evals/ → ../.. → packages/gen-ui/
|
|
33
|
+
// → corpus/evals/held-out.jsonl.
|
|
34
|
+
const evalsPath = join(__dirname, '..', '..', 'corpus', 'evals', 'held-out.jsonl');
|
|
35
|
+
const raw = await readFile(evalsPath, 'utf8');
|
|
36
|
+
return raw.trim().split('\n').map((l) => JSON.parse(l));
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function computeF1(result, evalItem) {
|
|
40
|
+
// Handle both message shapes:
|
|
41
|
+
// mcp: [{ components: [{ component: 'Card', ... }] }]
|
|
42
|
+
// zettel: [{ messageType: 'beginComponent', componentType: 'Card', ... }]
|
|
43
|
+
const msgs = result.messages || [];
|
|
44
|
+
const types = new Set();
|
|
45
|
+
for (const m of msgs) {
|
|
46
|
+
if (Array.isArray(m.components)) {
|
|
47
|
+
for (const c of m.components) if (c.component) types.add(c.component);
|
|
48
|
+
}
|
|
49
|
+
if (m.componentType) types.add(m.componentType);
|
|
50
|
+
}
|
|
51
|
+
const expected = new Set(evalItem.expected_components || []);
|
|
52
|
+
const tp = [...expected].filter((t) => types.has(t)).length;
|
|
53
|
+
const precision = types.size ? tp / types.size : 0;
|
|
54
|
+
const recall = expected.size ? tp / expected.size : 0;
|
|
55
|
+
const f1 = precision + recall > 0 ? (2 * precision * recall) / (precision + recall) : 0;
|
|
56
|
+
return { precision, recall, f1 };
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// ── Legacy runner (byte-compat with pre-2026-04-17 inline code) ──
|
|
60
|
+
|
|
61
|
+
export async function runHarness({ generate, domain, limit, mode = 'instant', intents }) {
|
|
62
|
+
let items = intents || (await loadHeldOut());
|
|
63
|
+
if (domain) items = items.filter((i) => i.domain === domain);
|
|
64
|
+
if (limit) items = items.slice(0, limit);
|
|
65
|
+
|
|
66
|
+
const results = [];
|
|
67
|
+
for (const evalItem of items) {
|
|
68
|
+
try {
|
|
69
|
+
const result = await generate({ intent: evalItem.intent, mode });
|
|
70
|
+
const score = result.validation?.score || 0;
|
|
71
|
+
const { f1 } = computeF1(result, evalItem);
|
|
72
|
+
results.push({
|
|
73
|
+
id: evalItem.id,
|
|
74
|
+
intent: evalItem.intent,
|
|
75
|
+
score,
|
|
76
|
+
f1: Math.round(f1 * 100),
|
|
77
|
+
pass: score >= (evalItem.expected_validation_min || 70),
|
|
78
|
+
});
|
|
79
|
+
} catch (e) {
|
|
80
|
+
results.push({
|
|
81
|
+
id: evalItem.id,
|
|
82
|
+
intent: evalItem.intent,
|
|
83
|
+
score: 0,
|
|
84
|
+
f1: 0,
|
|
85
|
+
pass: false,
|
|
86
|
+
error: e.message,
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
const passCount = results.filter((r) => r.pass).length;
|
|
92
|
+
const avgScore = Math.round(
|
|
93
|
+
results.reduce((s, r) => s + r.score, 0) / (results.length || 1),
|
|
94
|
+
);
|
|
95
|
+
return {
|
|
96
|
+
total: results.length,
|
|
97
|
+
pass: passCount,
|
|
98
|
+
avgScore,
|
|
99
|
+
passRate: Math.round((passCount / (results.length || 1)) * 100),
|
|
100
|
+
results,
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
// ── V2 runner (coverage-aware, architecture-fair) ──
|
|
105
|
+
|
|
106
|
+
export async function runHarnessV2({ generate, domain, limit, mode = 'instant', intents, label = 'generator' }) {
|
|
107
|
+
let items = intents || (await loadHeldOut());
|
|
108
|
+
if (domain) items = items.filter((i) => i.domain === domain);
|
|
109
|
+
if (limit) items = items.slice(0, limit);
|
|
110
|
+
|
|
111
|
+
const results = [];
|
|
112
|
+
for (const evalItem of items) {
|
|
113
|
+
const row = {
|
|
114
|
+
id: evalItem.id,
|
|
115
|
+
intent: evalItem.intent,
|
|
116
|
+
domain: evalItem.domain,
|
|
117
|
+
strategy: null,
|
|
118
|
+
messagesEmitted: false,
|
|
119
|
+
validationScore: null,
|
|
120
|
+
precision: null,
|
|
121
|
+
recall: null,
|
|
122
|
+
componentF1: null,
|
|
123
|
+
retrievalHit: null,
|
|
124
|
+
retrievalRank: null,
|
|
125
|
+
candidate: null,
|
|
126
|
+
fragmentsUsed: null,
|
|
127
|
+
pass: false,
|
|
128
|
+
error: null,
|
|
129
|
+
};
|
|
130
|
+
try {
|
|
131
|
+
const result = await generate({ intent: evalItem.intent, mode });
|
|
132
|
+
const emitted = Array.isArray(result.messages) && result.messages.length > 0;
|
|
133
|
+
row.messagesEmitted = emitted;
|
|
134
|
+
row.strategy = result.strategy || (emitted ? 'emitted' : 'miss');
|
|
135
|
+
if (emitted) {
|
|
136
|
+
row.validationScore = result.validation?.score ?? null;
|
|
137
|
+
const { precision, recall, f1 } = computeF1(result, evalItem);
|
|
138
|
+
row.precision = Math.round(precision * 100);
|
|
139
|
+
row.recall = Math.round(recall * 100);
|
|
140
|
+
row.componentF1 = Math.round(f1 * 100);
|
|
141
|
+
row.pass = (row.validationScore ?? 0) >= (evalItem.expected_validation_min || 70);
|
|
142
|
+
}
|
|
143
|
+
if (result.retrieval) {
|
|
144
|
+
row.retrievalHit = !!result.retrieval.hit;
|
|
145
|
+
row.retrievalRank = result.retrieval.rank ?? null;
|
|
146
|
+
row.candidate = result.retrieval.candidate ?? null;
|
|
147
|
+
}
|
|
148
|
+
if (Array.isArray(result.fragments_used)) {
|
|
149
|
+
row.fragmentsUsed = result.fragments_used;
|
|
150
|
+
}
|
|
151
|
+
} catch (e) {
|
|
152
|
+
row.error = e.message;
|
|
153
|
+
}
|
|
154
|
+
results.push(row);
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
// ── Aggregates ──
|
|
158
|
+
const emitted = results.filter((r) => r.messagesEmitted);
|
|
159
|
+
const coverage = results.length ? emitted.length / results.length : 0;
|
|
160
|
+
const avgScoreWhenEmitted = emitted.length
|
|
161
|
+
? emitted.reduce((s, r) => s + (r.validationScore || 0), 0) / emitted.length
|
|
162
|
+
: 0;
|
|
163
|
+
const avgF1WhenEmitted = emitted.length
|
|
164
|
+
? emitted.reduce((s, r) => s + (r.componentF1 || 0), 0) / emitted.length
|
|
165
|
+
: 0;
|
|
166
|
+
const passCount = results.filter((r) => r.pass).length;
|
|
167
|
+
|
|
168
|
+
// Mean reciprocal rank over intents with retrieval metadata
|
|
169
|
+
const withRetrieval = results.filter((r) => r.retrievalRank != null);
|
|
170
|
+
const retrievalMRR = withRetrieval.length
|
|
171
|
+
? withRetrieval.reduce((s, r) => s + 1 / r.retrievalRank, 0) / withRetrieval.length
|
|
172
|
+
: null;
|
|
173
|
+
|
|
174
|
+
const strategyBreakdown = results.reduce((acc, r) => {
|
|
175
|
+
const k = r.strategy || 'unknown';
|
|
176
|
+
acc[k] = (acc[k] || 0) + 1;
|
|
177
|
+
return acc;
|
|
178
|
+
}, {});
|
|
179
|
+
|
|
180
|
+
return {
|
|
181
|
+
label,
|
|
182
|
+
total: results.length,
|
|
183
|
+
coverage: Math.round(coverage * 100), // % intents that emitted
|
|
184
|
+
emitted: emitted.length,
|
|
185
|
+
pass: passCount,
|
|
186
|
+
passRate: Math.round((passCount / (results.length || 1)) * 100),
|
|
187
|
+
avgScoreWhenEmitted: Math.round(avgScoreWhenEmitted),
|
|
188
|
+
avgF1WhenEmitted: Math.round(avgF1WhenEmitted),
|
|
189
|
+
retrievalMRR: retrievalMRR == null ? null : Math.round(retrievalMRR * 1000) / 1000,
|
|
190
|
+
strategyBreakdown,
|
|
191
|
+
results,
|
|
192
|
+
};
|
|
193
|
+
}
|
package/compose/index.js
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @adia-ai/gen-ui — main entry.
|
|
3
|
+
*
|
|
4
|
+
* Re-exports the most common consumer surface. For deeper access, reach
|
|
5
|
+
* via subpaths:
|
|
6
|
+
*
|
|
7
|
+
* import { generateUI } from '@adia-ai/gen-ui';
|
|
8
|
+
* import { pick, registerEngine } from '@adia-ai/gen-ui/compose/strategies/registry';
|
|
9
|
+
* import { generateZettel } from '@adia-ai/gen-ui/compose/strategies/zettel';
|
|
10
|
+
*
|
|
11
|
+
* The LLM bridge moved to its own package — `@adia-ai/llm/bridge`.
|
|
12
|
+
* See README for the full public surface.
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
export { generateUI, generateUIStream } from './core/generator.js';
|
|
16
|
+
export { pick, listEngines, registerEngine, unregisterEngine, ENGINES } from './strategies/registry.js';
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @adia-ai/gen-ui — shared closed-loop validate→repair helper.
|
|
3
|
+
*
|
|
4
|
+
* Extracted from monolithic-thinking's original inline loop (the only
|
|
5
|
+
* engine that had this before) so every LLM-calling strategy engine can
|
|
6
|
+
* share ONE implementation instead of each hand-rolling its own. Direct
|
|
7
|
+
* investigation of the pipeline (A2UI overhaul plan, 2026-07) found
|
|
8
|
+
* generate-thinking.js was the only one of six engines running a genuine
|
|
9
|
+
* closed loop against full schema + Ajv catalog conformance; generate-pro
|
|
10
|
+
* did one repair shot with no catalog check; chunk-zettel and free-form
|
|
11
|
+
* each validate a narrower plan/ingredient-grounding contract, not this
|
|
12
|
+
* one — see this module's docstring below for how those compose with it.
|
|
13
|
+
*
|
|
14
|
+
* ORTHOGONAL, FINAL-STAGE CHECK: this function knows nothing about plans,
|
|
15
|
+
* bindings, or ingredient grounding. An engine with its own narrower
|
|
16
|
+
* validation (chunk-zettel's slot bindings, free-form's ingredient
|
|
17
|
+
* grounding) runs its own loop FIRST, then routes the final candidate
|
|
18
|
+
* through this one for full schema/anti-pattern/catalog conformance —
|
|
19
|
+
* never as a replacement for the narrower check, always in addition to it.
|
|
20
|
+
*
|
|
21
|
+
* All escalation policy stays with the CALLER. This function never
|
|
22
|
+
* decides "should I retry with a bigger model" or "should I escalate" —
|
|
23
|
+
* it only runs the loop it's given and reports what failed. On exhaustion
|
|
24
|
+
* (no adapter supplied, or attempts used up) it returns `exhausted: true`
|
|
25
|
+
* — it never silently returns broken output without flagging it.
|
|
26
|
+
*/
|
|
27
|
+
|
|
28
|
+
import { validateSchema } from '@adia-ai/a2ui/validate';
|
|
29
|
+
import { validateMessages as validateCatalog } from '../../validate/catalog-validator.js';
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* @param {object} params
|
|
33
|
+
* @param {Array<object>} params.messages - candidate A2UI messages to validate
|
|
34
|
+
* @param {object|null} [params.llmAdapter] - omit/null to validate-only (no repair attempts)
|
|
35
|
+
* @param {(failedChecks: object[], messages: object[], catalogFailures: object[]) => string} [params.buildRepairPrompt]
|
|
36
|
+
* - required whenever `llmAdapter` is supplied
|
|
37
|
+
* @param {(repairResponse: object, prevMessages: object[]) => object[]} [params.parseResponse]
|
|
38
|
+
* - required whenever `llmAdapter` is supplied; parses one repair completion (the FULL response
|
|
39
|
+
* object — e.g. `{content, stopReason, usage}` — not just its content string, so callers that
|
|
40
|
+
* need per-response metadata like `stopReason` in their parse context don't have to thread it
|
|
41
|
+
* through separately) into new messages
|
|
42
|
+
* @param {string} [params.systemPrompt] - forwarded verbatim to each repair completion call
|
|
43
|
+
* @param {object} [params.validateContext] - forwarded to validateSchema as its second arg (e.g. `{ intent, context }`)
|
|
44
|
+
* @param {(messages: object[], validation: object) => object} [params.foldInAntiPatterns]
|
|
45
|
+
* - optional post-processing hook folding anti-pattern findings into the schema validation result
|
|
46
|
+
* (monolithic engines' own `_shared.js` version); omit if the caller's `validateContext`/
|
|
47
|
+
* validator already covers anti-patterns another way
|
|
48
|
+
* @param {number} [params.maxAttempts=3]
|
|
49
|
+
* @param {boolean} [params.runCatalogCheck=true]
|
|
50
|
+
* @param {(repairResponse: object) => void} [params.onAttempt]
|
|
51
|
+
* - optional side-effect hook invoked with each raw repair completion (e.g. dialog-recorder capture);
|
|
52
|
+
* this module has no opinion on recording, telemetry, or debug capture — callers own that entirely
|
|
53
|
+
* @returns {Promise<{messages: object[], valid: boolean, validation: object, catalogValidation: object, attempts: number, exhausted: boolean}>}
|
|
54
|
+
*/
|
|
55
|
+
export async function validateAndRepair({
|
|
56
|
+
messages,
|
|
57
|
+
llmAdapter = null,
|
|
58
|
+
buildRepairPrompt,
|
|
59
|
+
parseResponse,
|
|
60
|
+
systemPrompt,
|
|
61
|
+
validateContext = {},
|
|
62
|
+
foldInAntiPatterns,
|
|
63
|
+
maxAttempts = 3,
|
|
64
|
+
runCatalogCheck = true,
|
|
65
|
+
onAttempt,
|
|
66
|
+
}) {
|
|
67
|
+
const runSchemaCheck = (msgs) => {
|
|
68
|
+
const base = validateSchema(msgs, validateContext);
|
|
69
|
+
return foldInAntiPatterns ? foldInAntiPatterns(msgs, base) : base;
|
|
70
|
+
};
|
|
71
|
+
const runCatalog = (msgs) => (runCatalogCheck ? validateCatalog(msgs) : Promise.resolve({ valid: true, failures: [] }));
|
|
72
|
+
|
|
73
|
+
let validation = runSchemaCheck(messages);
|
|
74
|
+
let catalogValidation = await runCatalog(messages);
|
|
75
|
+
let attempts = 0;
|
|
76
|
+
|
|
77
|
+
while ((!validation.valid || !catalogValidation.valid) && attempts < maxAttempts && llmAdapter) {
|
|
78
|
+
attempts++;
|
|
79
|
+
const failedChecks = validation.checks.filter((c) => !c.passed);
|
|
80
|
+
const catalogFailures = catalogValidation.failures || [];
|
|
81
|
+
const repairPrompt = buildRepairPrompt(failedChecks, messages, catalogFailures);
|
|
82
|
+
|
|
83
|
+
try {
|
|
84
|
+
const repairResponse = await llmAdapter.complete({
|
|
85
|
+
messages: [{ role: 'user', content: repairPrompt }],
|
|
86
|
+
systemPrompt,
|
|
87
|
+
});
|
|
88
|
+
onAttempt?.(repairResponse);
|
|
89
|
+
messages = parseResponse(repairResponse, messages);
|
|
90
|
+
validation = runSchemaCheck(messages);
|
|
91
|
+
catalogValidation = await runCatalog(messages);
|
|
92
|
+
} catch {
|
|
93
|
+
break; // stop repair loop on adapter error — report what we have
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
const valid = validation.valid && catalogValidation.valid;
|
|
98
|
+
return { messages, valid, validation, catalogValidation, attempts, exhausted: !valid };
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* REQ-03 (spec-factory-dx-ws4-acceptance) support — normalizes a
|
|
103
|
+
* `{validation, catalogValidation}` pair (this module's own return shape)
|
|
104
|
+
* into the `{code, message}[]` failures list the acceptance block carries.
|
|
105
|
+
* Same shape convention `exit-gate.js`'s own feedback array already speaks,
|
|
106
|
+
* built independently here rather than imported from it (a different
|
|
107
|
+
* consumer's module, per REQ-01's own reuse-the-validators-not-the-module
|
|
108
|
+
* rule).
|
|
109
|
+
*
|
|
110
|
+
* @param {object} [validation] - a `validateSchema` result (`.checks[]`)
|
|
111
|
+
* @param {object} [catalogValidation] - a `validateMessages` (catalog) result (`.failures[]`)
|
|
112
|
+
* @returns {{code: string, message: string}[]}
|
|
113
|
+
*/
|
|
114
|
+
export function buildFailures(validation, catalogValidation) {
|
|
115
|
+
return [
|
|
116
|
+
...((validation?.checks || []).filter((c) => !c.passed).map((c) => ({ code: c.name, message: c.detail || c.name }))),
|
|
117
|
+
...((catalogValidation?.failures || []).map((f) => ({
|
|
118
|
+
code: 'catalog',
|
|
119
|
+
message: typeof f === 'string' ? f : (f.message || JSON.stringify(f)),
|
|
120
|
+
}))),
|
|
121
|
+
];
|
|
122
|
+
}
|