@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.
Files changed (631) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/README.md +77 -0
  3. package/compose/CHANGELOG.md +1707 -0
  4. package/compose/README.md +215 -0
  5. package/compose/core/artifacts.js +262 -0
  6. package/compose/core/context-store.js +218 -0
  7. package/compose/core/generator.d.ts +4 -0
  8. package/compose/core/generator.js +602 -0
  9. package/compose/core/pipeline/engine.js +289 -0
  10. package/compose/core/pipeline/types.js +91 -0
  11. package/compose/core/plan-primitives.js +120 -0
  12. package/compose/core/plan-turn.js +145 -0
  13. package/compose/core/reference.js +150 -0
  14. package/compose/core/state.js +15 -0
  15. package/compose/evals/harness.d.ts +4 -0
  16. package/compose/evals/harness.mjs +193 -0
  17. package/compose/index.d.ts +4 -0
  18. package/compose/index.js +16 -0
  19. package/compose/shared/validate-and-repair.js +122 -0
  20. package/compose/strategies/_shared/chunk-loader.js +282 -0
  21. package/compose/strategies/cascade.d.ts +67 -0
  22. package/compose/strategies/cascade.js +165 -0
  23. package/compose/strategies/escalation.d.ts +13 -0
  24. package/compose/strategies/escalation.js +132 -0
  25. package/compose/strategies/free-form-composer/index.js +254 -0
  26. package/compose/strategies/free-form-composer/system-prompt.js +205 -0
  27. package/compose/strategies/free-form-composer/transpile.js +279 -0
  28. package/compose/strategies/monolithic/_shared.js +1619 -0
  29. package/compose/strategies/monolithic/generate-instant.js +228 -0
  30. package/compose/strategies/monolithic/generate-pro.js +490 -0
  31. package/compose/strategies/monolithic/generate-thinking.js +206 -0
  32. package/compose/strategies/registry.d.ts +20 -0
  33. package/compose/strategies/registry.js +495 -0
  34. package/compose/strategies/zettel/_smoke.js +27 -0
  35. package/compose/strategies/zettel/chunk-composer.js +214 -0
  36. package/compose/strategies/zettel/chunk-refiner.js +582 -0
  37. package/compose/strategies/zettel/chunk-synthesizer.js +458 -0
  38. package/compose/strategies/zettel/composer.js +78 -0
  39. package/compose/strategies/zettel/composition-library.js +418 -0
  40. package/compose/strategies/zettel/generate.js +15 -0
  41. package/compose/strategies/zettel/generator-adapter.d.ts +4 -0
  42. package/compose/strategies/zettel/generator-adapter.js +242 -0
  43. package/compose/strategies/zettel/issue-reporter.js +607 -0
  44. package/compose/strategies/zettel/session-store.js +121 -0
  45. package/compose/strategies/zettel/state-cache.js +158 -0
  46. package/compose/transpiler/transpiler-maps.js +675 -0
  47. package/compose/transpiler/transpiler.d.ts +4 -0
  48. package/compose/transpiler/transpiler.js +962 -0
  49. package/corpus/CHANGELOG.md +1957 -0
  50. package/corpus/README.md +279 -0
  51. package/corpus/catalog-a2ui_0_9.d.ts +4 -0
  52. package/corpus/catalog-a2ui_0_9.json +29571 -0
  53. package/corpus/catalog-a2ui_0_9_rules.txt +1215 -0
  54. package/corpus/chunk-embeddings.d.ts +4 -0
  55. package/corpus/chunk-embeddings.json +1 -0
  56. package/corpus/chunks/_index.json +16658 -0
  57. package/corpus/chunks/_source-hashes.json +571 -0
  58. package/corpus/chunks/access-denied-with-request.json +124 -0
  59. package/corpus/chunks/access-request-form.json +166 -0
  60. package/corpus/chunks/access-request-pending.json +133 -0
  61. package/corpus/chunks/accordion-settings.json +176 -0
  62. package/corpus/chunks/achievement-badges.json +413 -0
  63. package/corpus/chunks/achievement-unlock.json +104 -0
  64. package/corpus/chunks/action-list-record-actions.json +84 -0
  65. package/corpus/chunks/activity-feed.json +390 -0
  66. package/corpus/chunks/admin-page-header-flush.json +83 -0
  67. package/corpus/chunks/admin-page-header-title-description.json +80 -0
  68. package/corpus/chunks/admin-page-header-with-actions.json +107 -0
  69. package/corpus/chunks/admin-page-header-with-tabs.json +144 -0
  70. package/corpus/chunks/admin-shell-rounded-borderless.json +287 -0
  71. package/corpus/chunks/admin-shell-standard.json +310 -0
  72. package/corpus/chunks/admin-sidebar-brand-signin.json +158 -0
  73. package/corpus/chunks/admin-sidebar-brand-version.json +130 -0
  74. package/corpus/chunks/admin-sidebar-flat-nav.json +131 -0
  75. package/corpus/chunks/admin-sidebar-nav-dividers.json +150 -0
  76. package/corpus/chunks/admin-sidebar-nav-groups.json +171 -0
  77. package/corpus/chunks/admin-sidebar-workspace-switcher.json +139 -0
  78. package/corpus/chunks/admin-topbar-breadcrumb-actions.json +130 -0
  79. package/corpus/chunks/admin-topbar-breadcrumb-minimal.json +79 -0
  80. package/corpus/chunks/admin-topbar-deep-breadcrumb.json +129 -0
  81. package/corpus/chunks/admin-topbar-search.json +104 -0
  82. package/corpus/chunks/admin-topbar-status-indicator.json +122 -0
  83. package/corpus/chunks/admin-topbar-trailing-toggle.json +114 -0
  84. package/corpus/chunks/agent-activity-feed.json +163 -0
  85. package/corpus/chunks/agent-artifact-stub-card.json +115 -0
  86. package/corpus/chunks/agent-canvas-shell.json +305 -0
  87. package/corpus/chunks/agent-citations-source-chips.json +82 -0
  88. package/corpus/chunks/agent-command-palette-search.json +120 -0
  89. package/corpus/chunks/agent-cost-detailed.json +260 -0
  90. package/corpus/chunks/agent-cost-inline.json +78 -0
  91. package/corpus/chunks/agent-memory-detail.json +181 -0
  92. package/corpus/chunks/agent-memory-editor.json +173 -0
  93. package/corpus/chunks/agent-memory-list.json +207 -0
  94. package/corpus/chunks/agent-pipeline-status-stages.json +61 -0
  95. package/corpus/chunks/agent-prompt-card.json +179 -0
  96. package/corpus/chunks/agent-prompt-library-grid.json +341 -0
  97. package/corpus/chunks/agent-prompt-picker.json +282 -0
  98. package/corpus/chunks/agent-rate-limit.json +100 -0
  99. package/corpus/chunks/agent-reasoning-collapsed.json +128 -0
  100. package/corpus/chunks/agent-tool-call-accordion.json +109 -0
  101. package/corpus/chunks/agent-tool-call-collapsed.json +98 -0
  102. package/corpus/chunks/agent-tool-call-error.json +112 -0
  103. package/corpus/chunks/agent-tool-call-result.json +145 -0
  104. package/corpus/chunks/agent-tool-call-running.json +85 -0
  105. package/corpus/chunks/agent-tool-call-success.json +137 -0
  106. package/corpus/chunks/agent-trace-timeline.json +244 -0
  107. package/corpus/chunks/ai-streaming-response.json +147 -0
  108. package/corpus/chunks/alert-banner-stack.json +78 -0
  109. package/corpus/chunks/alert-banner.json +55 -0
  110. package/corpus/chunks/alert-dialog-simple.json +72 -0
  111. package/corpus/chunks/alert-dialog-typed.json +107 -0
  112. package/corpus/chunks/alert-dialog-unsaved.json +81 -0
  113. package/corpus/chunks/analytics-chart.json +213 -0
  114. package/corpus/chunks/analytics-sparklines-dashboard.json +259 -0
  115. package/corpus/chunks/anchor-bar-selection-bar.json +226 -0
  116. package/corpus/chunks/api-key-table.json +148 -0
  117. package/corpus/chunks/api-keys-create.json +140 -0
  118. package/corpus/chunks/api-keys-list.json +271 -0
  119. package/corpus/chunks/app-nav-badges-counts.json +77 -0
  120. package/corpus/chunks/app-nav-badges-group-rollup-badges.json +100 -0
  121. package/corpus/chunks/app-nav-badges-plan-tiers.json +76 -0
  122. package/corpus/chunks/app-nav-badges-status-callouts.json +75 -0
  123. package/corpus/chunks/app-nav-full-example.json +195 -0
  124. package/corpus/chunks/app-nav-groups.json +103 -0
  125. package/corpus/chunks/app-nav-items.json +74 -0
  126. package/corpus/chunks/app-nav-labels-and-dividers.json +92 -0
  127. package/corpus/chunks/app-nav-spacer.json +77 -0
  128. package/corpus/chunks/app-product-listing-card.json +214 -0
  129. package/corpus/chunks/approvals-detail.json +240 -0
  130. package/corpus/chunks/approvals-queue.json +321 -0
  131. package/corpus/chunks/audit-log-basic.json +184 -0
  132. package/corpus/chunks/audit-log.json +174 -0
  133. package/corpus/chunks/auth-account-deleted-actions.json +51 -0
  134. package/corpus/chunks/auth-account-deleted.json +202 -0
  135. package/corpus/chunks/auth-card-content.json +260 -0
  136. package/corpus/chunks/auth-card-header.json +205 -0
  137. package/corpus/chunks/auth-email-entry.json +65 -0
  138. package/corpus/chunks/auth-email-verify-confirm.json +52 -0
  139. package/corpus/chunks/auth-email-verify.json +196 -0
  140. package/corpus/chunks/auth-forbidden-actions.json +59 -0
  141. package/corpus/chunks/auth-forbidden.json +203 -0
  142. package/corpus/chunks/auth-invite-actions.json +49 -0
  143. package/corpus/chunks/auth-invite-team-card.json +86 -0
  144. package/corpus/chunks/auth-link-expired-form.json +65 -0
  145. package/corpus/chunks/auth-link-expired.json +196 -0
  146. package/corpus/chunks/auth-locked-account.json +211 -0
  147. package/corpus/chunks/auth-locked-recovery-options.json +60 -0
  148. package/corpus/chunks/auth-mfa-enrollment-submit.json +54 -0
  149. package/corpus/chunks/auth-mfa-enrollment.json +284 -0
  150. package/corpus/chunks/auth-mfa-fallback-actions.json +52 -0
  151. package/corpus/chunks/auth-mfa-recovery.json +61 -0
  152. package/corpus/chunks/auth-new-password-form.json +75 -0
  153. package/corpus/chunks/auth-new-password.json +217 -0
  154. package/corpus/chunks/auth-oauth-fallback-actions.json +52 -0
  155. package/corpus/chunks/auth-oauth-interstitial.json +160 -0
  156. package/corpus/chunks/auth-password-challenge.json +94 -0
  157. package/corpus/chunks/auth-password-reset-form.json +64 -0
  158. package/corpus/chunks/auth-password-reset.json +195 -0
  159. package/corpus/chunks/auth-profile-form.json +72 -0
  160. package/corpus/chunks/auth-profile-setup.json +194 -0
  161. package/corpus/chunks/auth-reset-sent.json +188 -0
  162. package/corpus/chunks/auth-session-expired-actions.json +52 -0
  163. package/corpus/chunks/auth-session-expired.json +201 -0
  164. package/corpus/chunks/auth-signin-card-email.json +245 -0
  165. package/corpus/chunks/auth-signin-card-magic-link.json +147 -0
  166. package/corpus/chunks/auth-signin-card-mfa.json +231 -0
  167. package/corpus/chunks/auth-signin-card-otp.json +205 -0
  168. package/corpus/chunks/auth-signin-card-password.json +264 -0
  169. package/corpus/chunks/auth-signin-card-recovery.json +218 -0
  170. package/corpus/chunks/auth-signout-actions.json +51 -0
  171. package/corpus/chunks/auth-signout.json +184 -0
  172. package/corpus/chunks/auth-signup-email-entry.json +66 -0
  173. package/corpus/chunks/auth-signup-entry.json +281 -0
  174. package/corpus/chunks/auth-signup-social-auths.json +54 -0
  175. package/corpus/chunks/auth-signup-verify.json +227 -0
  176. package/corpus/chunks/auth-social-auths.json +62 -0
  177. package/corpus/chunks/auth-sso-providers.json +55 -0
  178. package/corpus/chunks/auth-sso-required.json +213 -0
  179. package/corpus/chunks/auth-team-invite.json +288 -0
  180. package/corpus/chunks/avatar-group-overflow.json +137 -0
  181. package/corpus/chunks/avatar-stack-overflow.json +124 -0
  182. package/corpus/chunks/banner-announcement-beta.json +99 -0
  183. package/corpus/chunks/banner-announcement-promo.json +102 -0
  184. package/corpus/chunks/banner-live-update.json +102 -0
  185. package/corpus/chunks/banner-system-maintenance.json +101 -0
  186. package/corpus/chunks/banner-system-offline.json +85 -0
  187. package/corpus/chunks/banner-system-update.json +102 -0
  188. package/corpus/chunks/bell-menu-empty.json +107 -0
  189. package/corpus/chunks/bell-menu-unread.json +395 -0
  190. package/corpus/chunks/billing-cancel-subscription-danger.json +61 -0
  191. package/corpus/chunks/billing-invoice-history-table.json +75 -0
  192. package/corpus/chunks/billing-overview.json +202 -0
  193. package/corpus/chunks/billing-payment-method-card-on-file.json +157 -0
  194. package/corpus/chunks/billing-progress-label.json +101 -0
  195. package/corpus/chunks/blog-post-card.json +212 -0
  196. package/corpus/chunks/breadcrumb-navigation.json +72 -0
  197. package/corpus/chunks/bulk-action-toolbar-floating.json +199 -0
  198. package/corpus/chunks/bulk-action-toolbar-swap.json +158 -0
  199. package/corpus/chunks/bulk-selection-actions-bar.json +162 -0
  200. package/corpus/chunks/business-address-form.json +953 -0
  201. package/corpus/chunks/calendar-month-view.json +74 -0
  202. package/corpus/chunks/card-grid-images.json +459 -0
  203. package/corpus/chunks/card-header-with-description.json +47 -0
  204. package/corpus/chunks/card-with-empty-state.json +96 -0
  205. package/corpus/chunks/card-with-form.json +143 -0
  206. package/corpus/chunks/card-with-sparkline.json +90 -0
  207. package/corpus/chunks/card-with-stat-kpi.json +86 -0
  208. package/corpus/chunks/changelog-feed-basic.json +470 -0
  209. package/corpus/chunks/chart-in-card-chart-plus-breakdown.json +188 -0
  210. package/corpus/chunks/chart-in-card-chart-plus-stat.json +89 -0
  211. package/corpus/chunks/chart-in-card-chart-with-filter-pills.json +124 -0
  212. package/corpus/chunks/chart-in-card-full-bleed-legend.json +116 -0
  213. package/corpus/chunks/chart-in-card-full-chart.json +107 -0
  214. package/corpus/chunks/chart-in-card-sparkline-tile.json +93 -0
  215. package/corpus/chunks/chart-in-card-stat-with-sparkline.json +73 -0
  216. package/corpus/chunks/chart-in-card-trend-footer.json +115 -0
  217. package/corpus/chunks/chart-with-filter-pills.json +169 -0
  218. package/corpus/chunks/chat-empty-state-hero.json +102 -0
  219. package/corpus/chunks/chat-message-assistant-byline.json +85 -0
  220. package/corpus/chunks/chat-message-user-byline.json +84 -0
  221. package/corpus/chunks/chat-page-shell.json +379 -0
  222. package/corpus/chunks/chat-streaming-surface.json +169 -0
  223. package/corpus/chunks/checkout-order-summary-card.json +140 -0
  224. package/corpus/chunks/code-snippet.json +107 -0
  225. package/corpus/chunks/col-form-stack.json +93 -0
  226. package/corpus/chunks/col-heading-body-action.json +79 -0
  227. package/corpus/chunks/col-stat-label.json +63 -0
  228. package/corpus/chunks/color-picker-swatches.json +153 -0
  229. package/corpus/chunks/command-palette.json +327 -0
  230. package/corpus/chunks/comments-composer.json +158 -0
  231. package/corpus/chunks/comments-mention-menu.json +237 -0
  232. package/corpus/chunks/comments-thread.json +344 -0
  233. package/corpus/chunks/commerce-pricing-tiers.json +401 -0
  234. package/corpus/chunks/comparison-table.json +246 -0
  235. package/corpus/chunks/contact-form-card.json +197 -0
  236. package/corpus/chunks/contact-form.json +157 -0
  237. package/corpus/chunks/contact-support-form.json +702 -0
  238. package/corpus/chunks/conversion-funnel-4-step-funnel.json +139 -0
  239. package/corpus/chunks/conversion-funnel-6step.json +151 -0
  240. package/corpus/chunks/conversion-funnel-wide-summary.json +192 -0
  241. package/corpus/chunks/conversion-funnel-with-segment-compare.json +202 -0
  242. package/corpus/chunks/cta-banner-centered.json +102 -0
  243. package/corpus/chunks/dashboard-acquisition-panel.json +212 -0
  244. package/corpus/chunks/dashboard-admin-page.json +104 -0
  245. package/corpus/chunks/dashboard-audience-kpis.json +165 -0
  246. package/corpus/chunks/dashboard-audience-panel.json +756 -0
  247. package/corpus/chunks/dashboard-behavior-panel.json +114 -0
  248. package/corpus/chunks/dashboard-chart-recent.json +566 -0
  249. package/corpus/chunks/dashboard-cohort-retention.json +83 -0
  250. package/corpus/chunks/dashboard-conversion-panel.json +234 -0
  251. package/corpus/chunks/dashboard-country-list.json +304 -0
  252. package/corpus/chunks/dashboard-filter-bar.json +118 -0
  253. package/corpus/chunks/dashboard-funnel.json +142 -0
  254. package/corpus/chunks/dashboard-notifications-panel.json +423 -0
  255. package/corpus/chunks/dashboard-overview-panel.json +1644 -0
  256. package/corpus/chunks/dashboard-page-header.json +166 -0
  257. package/corpus/chunks/dashboard-pages-table.json +86 -0
  258. package/corpus/chunks/dashboard-quick-actions.json +116 -0
  259. package/corpus/chunks/dashboard-reports-panel.json +166 -0
  260. package/corpus/chunks/dashboard-reports-table.json +138 -0
  261. package/corpus/chunks/dashboard-storage-card.json +117 -0
  262. package/corpus/chunks/dashboard-tabs.json +86 -0
  263. package/corpus/chunks/dashboard-team-actions-storage.json +605 -0
  264. package/corpus/chunks/dashboard-team-list.json +334 -0
  265. package/corpus/chunks/dashboard-traffic-channels.json +184 -0
  266. package/corpus/chunks/dashboard-transactions-table.json +145 -0
  267. package/corpus/chunks/data-export-history.json +192 -0
  268. package/corpus/chunks/data-export-request.json +197 -0
  269. package/corpus/chunks/data-import-wizard.json +391 -0
  270. package/corpus/chunks/date-range-picker.json +156 -0
  271. package/corpus/chunks/date-time-picker-form.json +222 -0
  272. package/corpus/chunks/departments-checkbox-form.json +390 -0
  273. package/corpus/chunks/destructive-confirm-modal.json +149 -0
  274. package/corpus/chunks/diff-inline.json +84 -0
  275. package/corpus/chunks/diff-side-by-side.json +131 -0
  276. package/corpus/chunks/diff-structured.json +216 -0
  277. package/corpus/chunks/digest-email-preview.json +374 -0
  278. package/corpus/chunks/divider-text-label.json +87 -0
  279. package/corpus/chunks/doc-editor-shell.json +356 -0
  280. package/corpus/chunks/drawer-2fa-key.json +273 -0
  281. package/corpus/chunks/drawer-2fa-sms.json +261 -0
  282. package/corpus/chunks/drawer-2fa-totp.json +385 -0
  283. package/corpus/chunks/drawer-cancel-sub.json +636 -0
  284. package/corpus/chunks/drawer-change-plan.json +561 -0
  285. package/corpus/chunks/drawer-custom-roles.json +696 -0
  286. package/corpus/chunks/drawer-data-start.json +171 -0
  287. package/corpus/chunks/drawer-delete-account.json +341 -0
  288. package/corpus/chunks/drawer-delete-workspace.json +362 -0
  289. package/corpus/chunks/drawer-discord.json +434 -0
  290. package/corpus/chunks/drawer-figma.json +401 -0
  291. package/corpus/chunks/drawer-first-dashboard.json +220 -0
  292. package/corpus/chunks/drawer-gcal.json +475 -0
  293. package/corpus/chunks/drawer-github.json +589 -0
  294. package/corpus/chunks/drawer-invite.json +397 -0
  295. package/corpus/chunks/drawer-record-detail.json +44 -0
  296. package/corpus/chunks/drawer-report.json +528 -0
  297. package/corpus/chunks/drawer-revoke-session.json +331 -0
  298. package/corpus/chunks/drawer-role.json +190 -0
  299. package/corpus/chunks/drawer-slack.json +429 -0
  300. package/corpus/chunks/drawer-smtp.json +476 -0
  301. package/corpus/chunks/drawer-source.json +294 -0
  302. package/corpus/chunks/drawer-transaction.json +493 -0
  303. package/corpus/chunks/drawer-with-create-form.json +43 -0
  304. package/corpus/chunks/editor-code-pane.json +204 -0
  305. package/corpus/chunks/editor-page-shell.json +149 -0
  306. package/corpus/chunks/editor-preview-pane.json +136 -0
  307. package/corpus/chunks/editor-statusbar-ready.json +99 -0
  308. package/corpus/chunks/editor-toolbar-import-export.json +195 -0
  309. package/corpus/chunks/email-inbox-list.json +678 -0
  310. package/corpus/chunks/empty-state-danger.json +58 -0
  311. package/corpus/chunks/empty-state-minimal.json +44 -0
  312. package/corpus/chunks/empty-state-warning.json +53 -0
  313. package/corpus/chunks/empty-state.json +65 -0
  314. package/corpus/chunks/error-404-actions.json +54 -0
  315. package/corpus/chunks/error-404.json +204 -0
  316. package/corpus/chunks/error-500-actions.json +61 -0
  317. package/corpus/chunks/error-500.json +220 -0
  318. package/corpus/chunks/error-maintenance-actions.json +53 -0
  319. package/corpus/chunks/error-maintenance.json +203 -0
  320. package/corpus/chunks/error-page-shell.json +132 -0
  321. package/corpus/chunks/export-flow-async.json +210 -0
  322. package/corpus/chunks/export-flow-delivery.json +163 -0
  323. package/corpus/chunks/export-flow-sync.json +162 -0
  324. package/corpus/chunks/extended-profile-form.json +512 -0
  325. package/corpus/chunks/faq-accordion.json +123 -0
  326. package/corpus/chunks/feature-grid-icons.json +314 -0
  327. package/corpus/chunks/feature-grid-three-cards.json +187 -0
  328. package/corpus/chunks/feature-toggle-switch-grid.json +213 -0
  329. package/corpus/chunks/file-upload-dnd.json +166 -0
  330. package/corpus/chunks/file-upload-field.json +97 -0
  331. package/corpus/chunks/file-upload-form.json +251 -0
  332. package/corpus/chunks/filter-bar-active-filters.json +176 -0
  333. package/corpus/chunks/filter-bar-filter-bar-with-table.json +113 -0
  334. package/corpus/chunks/filter-bar-saved-views.json +117 -0
  335. package/corpus/chunks/filter-popover-form.json +137 -0
  336. package/corpus/chunks/footer-multi-column.json +270 -0
  337. package/corpus/chunks/footer-primary-only.json +41 -0
  338. package/corpus/chunks/form-checkbox-group.json +65 -0
  339. package/corpus/chunks/form-drawer-edit-form.json +178 -0
  340. package/corpus/chunks/form-drawer-simple-form.json +151 -0
  341. package/corpus/chunks/form-drawer-tall-form.json +325 -0
  342. package/corpus/chunks/form-field-email-hint.json +53 -0
  343. package/corpus/chunks/form-field-range.json +54 -0
  344. package/corpus/chunks/form-field-required.json +52 -0
  345. package/corpus/chunks/form-field-select.json +66 -0
  346. package/corpus/chunks/form-field-textarea.json +51 -0
  347. package/corpus/chunks/form-field-with-error.json +151 -0
  348. package/corpus/chunks/form-fields-two-column.json +69 -0
  349. package/corpus/chunks/form-page-shell.json +146 -0
  350. package/corpus/chunks/form-switch-toggle.json +41 -0
  351. package/corpus/chunks/form-system-live-demo.json +123 -0
  352. package/corpus/chunks/forms-address-autocomplete.json +277 -0
  353. package/corpus/chunks/forms-address-fields.json +221 -0
  354. package/corpus/chunks/forms-conditional-reveal.json +195 -0
  355. package/corpus/chunks/gallery-page-shell.json +444 -0
  356. package/corpus/chunks/grid-2col-entry-cards.json +140 -0
  357. package/corpus/chunks/grid-kpi-4col.json +164 -0
  358. package/corpus/chunks/grid-responsive-kpi.json +165 -0
  359. package/corpus/chunks/hero-cta-simple.json +107 -0
  360. package/corpus/chunks/hero-cta-split.json +183 -0
  361. package/corpus/chunks/hero-section-split.json +111 -0
  362. package/corpus/chunks/icon-text-row.json +60 -0
  363. package/corpus/chunks/image-caption-tile.json +99 -0
  364. package/corpus/chunks/image-carousel.json +156 -0
  365. package/corpus/chunks/image-thumbnail-grid.json +77 -0
  366. package/corpus/chunks/image-upload-preview.json +118 -0
  367. package/corpus/chunks/import-mapping-flow.json +972 -0
  368. package/corpus/chunks/inline-dialog-rename.json +128 -0
  369. package/corpus/chunks/inline-dialog-schedule.json +154 -0
  370. package/corpus/chunks/inline-dialog-status.json +179 -0
  371. package/corpus/chunks/integrations-api-keys-card-list.json +475 -0
  372. package/corpus/chunks/integrations-connect-form.json +550 -0
  373. package/corpus/chunks/integrations-grid.json +141 -0
  374. package/corpus/chunks/integrations-webhooks-empty-state.json +66 -0
  375. package/corpus/chunks/inventory-list-stock.json +137 -0
  376. package/corpus/chunks/invite-members.json +153 -0
  377. package/corpus/chunks/invoice-line-items.json +493 -0
  378. package/corpus/chunks/kanban-board-3col.json +713 -0
  379. package/corpus/chunks/kanban-page-shell.json +671 -0
  380. package/corpus/chunks/key-value-detail-list.json +242 -0
  381. package/corpus/chunks/keyboard-shortcut-display.json +250 -0
  382. package/corpus/chunks/labeled-textarea.json +45 -0
  383. package/corpus/chunks/leaderboard-table.json +140 -0
  384. package/corpus/chunks/library-browser-search-filter.json +109 -0
  385. package/corpus/chunks/linked-record-row.json +61 -0
  386. package/corpus/chunks/loading-skeleton-placeholder.json +387 -0
  387. package/corpus/chunks/login-form-card.json +207 -0
  388. package/corpus/chunks/logo-cloud-trusted-by.json +235 -0
  389. package/corpus/chunks/map-with-location-list.json +293 -0
  390. package/corpus/chunks/marketing-hero-cta.json +102 -0
  391. package/corpus/chunks/marketing-page-shell.json +352 -0
  392. package/corpus/chunks/masonry-gallery.json +154 -0
  393. package/corpus/chunks/member-edit-drawer.json +236 -0
  394. package/corpus/chunks/members-active-table-search-filter.json +184 -0
  395. package/corpus/chunks/members-pending-invites-cards.json +251 -0
  396. package/corpus/chunks/members-roles-permissions-list.json +146 -0
  397. package/corpus/chunks/menu-context-actions.json +113 -0
  398. package/corpus/chunks/metadata-description-list.json +178 -0
  399. package/corpus/chunks/modal-create-project-form.json +133 -0
  400. package/corpus/chunks/modal-preferences-tabs.json +147 -0
  401. package/corpus/chunks/multi-field-form-validation.json +394 -0
  402. package/corpus/chunks/nav-menu-icons.json +74 -0
  403. package/corpus/chunks/newsletter-subscription.json +190 -0
  404. package/corpus/chunks/notification-badges-feed.json +411 -0
  405. package/corpus/chunks/notification-preferences-panel.json +238 -0
  406. package/corpus/chunks/onb-completion.json +139 -0
  407. package/corpus/chunks/onb-extension-install.json +172 -0
  408. package/corpus/chunks/onb-hero-welcome.json +156 -0
  409. package/corpus/chunks/onb-import-picker.json +86 -0
  410. package/corpus/chunks/onb-mobile-handoff.json +121 -0
  411. package/corpus/chunks/onb-notification-prefs.json +83 -0
  412. package/corpus/chunks/onb-persona-picker.json +82 -0
  413. package/corpus/chunks/onb-provider-tiles.json +137 -0
  414. package/corpus/chunks/onb-settings-review.json +257 -0
  415. package/corpus/chunks/onb-step-footer.json +121 -0
  416. package/corpus/chunks/onb-step-header.json +121 -0
  417. package/corpus/chunks/onb-step-progress.json +140 -0
  418. package/corpus/chunks/onb-step-shell.json +380 -0
  419. package/corpus/chunks/onb-story-pane.json +121 -0
  420. package/corpus/chunks/onb-tutorial-steps.json +193 -0
  421. package/corpus/chunks/order-confirmation-success-card.json +177 -0
  422. package/corpus/chunks/order-tracking-timeline.json +131 -0
  423. package/corpus/chunks/pagination-controls.json +82 -0
  424. package/corpus/chunks/pane-settings-sidebar.json +204 -0
  425. package/corpus/chunks/patient-visit-shell.json +191 -0
  426. package/corpus/chunks/payment-checkout-form.json +341 -0
  427. package/corpus/chunks/payment-method-form.json +328 -0
  428. package/corpus/chunks/period-comparison.json +236 -0
  429. package/corpus/chunks/permission-matrix-table.json +438 -0
  430. package/corpus/chunks/permissions-matrix-grid.json +111 -0
  431. package/corpus/chunks/permissions-matrix-summary.json +157 -0
  432. package/corpus/chunks/permissions-role-picker-radio.json +107 -0
  433. package/corpus/chunks/permissions-role-picker-select.json +101 -0
  434. package/corpus/chunks/permissions-share-link.json +256 -0
  435. package/corpus/chunks/permissions-share-people.json +297 -0
  436. package/corpus/chunks/permissions-sharing-scopes.json +109 -0
  437. package/corpus/chunks/plan-selection-form.json +529 -0
  438. package/corpus/chunks/playground-a2ui.json +181 -0
  439. package/corpus/chunks/playground-agent-admin.json +117 -0
  440. package/corpus/chunks/playground-agent-chat.json +126 -0
  441. package/corpus/chunks/playground-app-shell.json +488 -0
  442. package/corpus/chunks/playground-chat.json +265 -0
  443. package/corpus/chunks/playground-construct-canvas.json +118 -0
  444. package/corpus/chunks/playground-css-channel.json +487 -0
  445. package/corpus/chunks/playground-gen-ui.json +224 -0
  446. package/corpus/chunks/playground-render-preview.json +369 -0
  447. package/corpus/chunks/playground-streams-bridge.json +437 -0
  448. package/corpus/chunks/playground-table-toolbar.json +38 -0
  449. package/corpus/chunks/popover-with-content.json +118 -0
  450. package/corpus/chunks/pricing-tiers.json +561 -0
  451. package/corpus/chunks/product-tour.json +158 -0
  452. package/corpus/chunks/profile-public.json +297 -0
  453. package/corpus/chunks/progress-tracker-milestones.json +294 -0
  454. package/corpus/chunks/radio-button-group.json +83 -0
  455. package/corpus/chunks/rating-stars-review-summary.json +259 -0
  456. package/corpus/chunks/reactions-bar.json +75 -0
  457. package/corpus/chunks/reactions-picker.json +245 -0
  458. package/corpus/chunks/real-time-metrics-dashboard.json +344 -0
  459. package/corpus/chunks/record-detail-drawer-simple-detail.json +296 -0
  460. package/corpus/chunks/record-detail-drawer-tabbed-detail.json +443 -0
  461. package/corpus/chunks/referral-share-link.json +128 -0
  462. package/corpus/chunks/referral-status.json +243 -0
  463. package/corpus/chunks/reg-address-form.json +825 -0
  464. package/corpus/chunks/reg-billing-card.json +210 -0
  465. package/corpus/chunks/reg-brand-scrape.json +599 -0
  466. package/corpus/chunks/reg-departments-toggle.json +259 -0
  467. package/corpus/chunks/reg-extended-profile.json +356 -0
  468. package/corpus/chunks/reg-final-done.json +457 -0
  469. package/corpus/chunks/reg-helpdesk-grid.json +571 -0
  470. package/corpus/chunks/reg-import-picker.json +112 -0
  471. package/corpus/chunks/reg-integrations-grid.json +418 -0
  472. package/corpus/chunks/reg-invite-form.json +245 -0
  473. package/corpus/chunks/reg-legal-entity.json +260 -0
  474. package/corpus/chunks/reg-org-chart-review.json +891 -0
  475. package/corpus/chunks/reg-profile-identity.json +188 -0
  476. package/corpus/chunks/reg-step-footer.json +201 -0
  477. package/corpus/chunks/reg-step-header.json +201 -0
  478. package/corpus/chunks/reg-step-progress.json +236 -0
  479. package/corpus/chunks/reg-step-shell.json +605 -0
  480. package/corpus/chunks/reg-story-pane.json +201 -0
  481. package/corpus/chunks/reg-success-summary.json +257 -0
  482. package/corpus/chunks/reg-team-size.json +128 -0
  483. package/corpus/chunks/reg-usecase-picker.json +104 -0
  484. package/corpus/chunks/reg-workspace-name.json +159 -0
  485. package/corpus/chunks/responsive-grid-pattern.json +71 -0
  486. package/corpus/chunks/responsive-kpi-grid.json +166 -0
  487. package/corpus/chunks/responsive-row-pattern.json +71 -0
  488. package/corpus/chunks/responsive-shell-sidebar.json +308 -0
  489. package/corpus/chunks/responsive-wrap-at-pattern.json +124 -0
  490. package/corpus/chunks/retention-cohort-default-retention.json +80 -0
  491. package/corpus/chunks/retention-cohort-stat-pair.json +163 -0
  492. package/corpus/chunks/retention-cohort-with-legend.json +135 -0
  493. package/corpus/chunks/revenue-heatmap.json +82 -0
  494. package/corpus/chunks/role-management.json +272 -0
  495. package/corpus/chunks/row-action-cluster.json +54 -0
  496. package/corpus/chunks/row-avatar-name-role.json +71 -0
  497. package/corpus/chunks/row-icon-label.json +52 -0
  498. package/corpus/chunks/row-spread-label-value.json +54 -0
  499. package/corpus/chunks/row-wrap-tags.json +72 -0
  500. package/corpus/chunks/schedule-meeting-form-card.json +229 -0
  501. package/corpus/chunks/search-recents-menu.json +195 -0
  502. package/corpus/chunks/search-results-grouped.json +357 -0
  503. package/corpus/chunks/search-results-list.json +202 -0
  504. package/corpus/chunks/search-saved-views.json +356 -0
  505. package/corpus/chunks/search-with-filters.json +311 -0
  506. package/corpus/chunks/searchable-picker-modal.json +164 -0
  507. package/corpus/chunks/section-with-stack.json +48 -0
  508. package/corpus/chunks/security-active-sessions-devices.json +287 -0
  509. package/corpus/chunks/security-change-password-form.json +102 -0
  510. package/corpus/chunks/security-delete-account-danger.json +79 -0
  511. package/corpus/chunks/segmented-control-billing-tabs.json +164 -0
  512. package/corpus/chunks/select-multiple-preselected.json +70 -0
  513. package/corpus/chunks/settings-2fa-setup.json +307 -0
  514. package/corpus/chunks/settings-admin-page.json +1205 -0
  515. package/corpus/chunks/settings-appearance-primitives.json +145 -0
  516. package/corpus/chunks/settings-appearance-theme-panel.json +55 -0
  517. package/corpus/chunks/settings-appearance.json +81 -0
  518. package/corpus/chunks/settings-danger-zone-delete-workspace.json +93 -0
  519. package/corpus/chunks/settings-general-form.json +69 -0
  520. package/corpus/chunks/settings-integrations.json +298 -0
  521. package/corpus/chunks/settings-members-invite.json +112 -0
  522. package/corpus/chunks/settings-notification-activity-checkboxes.json +108 -0
  523. package/corpus/chunks/settings-notification-channels-switches.json +101 -0
  524. package/corpus/chunks/settings-page-shell.json +190 -0
  525. package/corpus/chunks/settings-privacy.json +83 -0
  526. package/corpus/chunks/settings-profile-security.json +122 -0
  527. package/corpus/chunks/settings-toggle-switches.json +66 -0
  528. package/corpus/chunks/sidebar-nav.json +120 -0
  529. package/corpus/chunks/sidebar-navigation-panel.json +165 -0
  530. package/corpus/chunks/signup-form-card.json +218 -0
  531. package/corpus/chunks/signup-team-size-form.json +259 -0
  532. package/corpus/chunks/single-select-card-form.json +231 -0
  533. package/corpus/chunks/slider-range-controls.json +119 -0
  534. package/corpus/chunks/social-media-post-card.json +159 -0
  535. package/corpus/chunks/sortable-list.json +307 -0
  536. package/corpus/chunks/sortable-search-paginate-table.json +162 -0
  537. package/corpus/chunks/split-pane-editor.json +146 -0
  538. package/corpus/chunks/stack-avatar-badge-overlay.json +53 -0
  539. package/corpus/chunks/stack-image-shimmer.json +51 -0
  540. package/corpus/chunks/stat-cards-kpi-dashboard.json +178 -0
  541. package/corpus/chunks/stats-band-big-numbers.json +175 -0
  542. package/corpus/chunks/status-dashboard.json +282 -0
  543. package/corpus/chunks/stepper-form-wizard.json +165 -0
  544. package/corpus/chunks/subscription-status-renewal-card.json +285 -0
  545. package/corpus/chunks/survey-rating-form.json +165 -0
  546. package/corpus/chunks/swiper-product-carousel.json +349 -0
  547. package/corpus/chunks/swiper-testimonial-carousel.json +279 -0
  548. package/corpus/chunks/table-empty-state.json +116 -0
  549. package/corpus/chunks/table-inline-edit-row.json +269 -0
  550. package/corpus/chunks/table-spreadsheet-cells.json +334 -0
  551. package/corpus/chunks/table-toolbar-no-search.json +42 -0
  552. package/corpus/chunks/table-toolbar-with-table.json +208 -0
  553. package/corpus/chunks/table-with-toolbar-card.json +80 -0
  554. package/corpus/chunks/tabs-with-panels.json +187 -0
  555. package/corpus/chunks/tag-chips-filter.json +100 -0
  556. package/corpus/chunks/team-invite-form.json +380 -0
  557. package/corpus/chunks/team-members-list.json +341 -0
  558. package/corpus/chunks/testimonial-grid.json +269 -0
  559. package/corpus/chunks/testimonial-pull-quote.json +137 -0
  560. package/corpus/chunks/testimonials-avatar-cards.json +286 -0
  561. package/corpus/chunks/timeline-events.json +89 -0
  562. package/corpus/chunks/timezone-selector-basic.json +99 -0
  563. package/corpus/chunks/timezone-selector-preview.json +104 -0
  564. package/corpus/chunks/toolbar-icons.json +216 -0
  565. package/corpus/chunks/toolbar-rich-text-editor.json +230 -0
  566. package/corpus/chunks/toolbar-tooltips.json +191 -0
  567. package/corpus/chunks/tooltip-hover-button.json +106 -0
  568. package/corpus/chunks/tree-file-explorer.json +136 -0
  569. package/corpus/chunks/tree-table-basic.json +171 -0
  570. package/corpus/chunks/trial-banner.json +158 -0
  571. package/corpus/chunks/url-import-form.json +728 -0
  572. package/corpus/chunks/usage-quota-meter-card.json +217 -0
  573. package/corpus/chunks/user-identity-row.json +81 -0
  574. package/corpus/chunks/user-onboarding-checklist.json +301 -0
  575. package/corpus/chunks/user-profile-card.json +192 -0
  576. package/corpus/chunks/users-table-badge.json +135 -0
  577. package/corpus/chunks/verification-document-upload.json +179 -0
  578. package/corpus/chunks/verification-status.json +97 -0
  579. package/corpus/chunks/verification-stepper.json +111 -0
  580. package/corpus/chunks/video-player-controls.json +120 -0
  581. package/corpus/chunks/webhook-config.json +209 -0
  582. package/corpus/chunks/webhooks-list.json +204 -0
  583. package/corpus/chunks/wizard-drawer-three-step-wizard.json +443 -0
  584. package/corpus/manifest.d.ts +4 -0
  585. package/corpus/manifest.json +6 -0
  586. package/corpus/scripts/chunk-library.d.ts +4 -0
  587. package/corpus/scripts/chunk-library.js +335 -0
  588. package/node-shims.d.ts +48 -0
  589. package/package.json +215 -0
  590. package/retrieval/CHANGELOG.md +1073 -0
  591. package/retrieval/README.md +71 -0
  592. package/retrieval/anti-patterns.js +189 -0
  593. package/retrieval/authoring/index.d.ts +4 -0
  594. package/retrieval/authoring/index.js +9 -0
  595. package/retrieval/authoring/web-research.js +220 -0
  596. package/retrieval/catalog.js +250 -0
  597. package/retrieval/component-catalog.js +168 -0
  598. package/retrieval/component-entry.js +80 -0
  599. package/retrieval/context-assembler.js +174 -0
  600. package/retrieval/domain-router.js +417 -0
  601. package/retrieval/embedding/chunk-embedding-retriever.js +117 -0
  602. package/retrieval/embedding/embedding-provider.js +72 -0
  603. package/retrieval/embedding/index.d.ts +4 -0
  604. package/retrieval/embedding/index.js +2 -0
  605. package/retrieval/feedback/dialog-recorder.js +107 -0
  606. package/retrieval/feedback/feedback-analyzer.js +180 -0
  607. package/retrieval/feedback/feedback-store.js +194 -0
  608. package/retrieval/feedback/feedback.js +117 -0
  609. package/retrieval/feedback/gap-registry.js +80 -0
  610. package/retrieval/feedback/human-signal.js +113 -0
  611. package/retrieval/feedback/index.d.ts +4 -0
  612. package/retrieval/feedback/index.js +24 -0
  613. package/retrieval/feedback/submit-feedback.js +45 -0
  614. package/retrieval/index.d.ts +4 -0
  615. package/retrieval/index.js +53 -0
  616. package/retrieval/intent/clarity.js +139 -0
  617. package/retrieval/intent/decomposer.js +124 -0
  618. package/retrieval/intent/index.d.ts +4 -0
  619. package/retrieval/intent/index.js +18 -0
  620. package/retrieval/intent/intent-alignment.js +172 -0
  621. package/retrieval/intent/intent-categorizer.js +69 -0
  622. package/retrieval/intent/intent-gate.js +96 -0
  623. package/retrieval/intent/prompt-analyzer.js +162 -0
  624. package/retrieval/wiring-catalog.js +168 -0
  625. package/validate/catalog-validator.d.ts +4 -0
  626. package/validate/catalog-validator.js +327 -0
  627. package/validate/semantic/cache.js +54 -0
  628. package/validate/semantic/classify-intent.js +128 -0
  629. package/validate/semantic/index.js +163 -0
  630. package/validate/semantic/intent-specs.js +162 -0
  631. package/validate/semantic/judge.js +180 -0
@@ -0,0 +1,250 @@
1
+ /**
2
+ * CatalogManifest — Structured index of all AdiaUI components.
3
+ *
4
+ * Reads from the per-component a2ui.json sidecars co-located with each
5
+ * component (packages/web-components/components/<c>/<c>.a2ui.json), generated
6
+ * from the YAML single-source-of-truth by scripts/build-components.mjs.
7
+ */
8
+
9
+ import { registry } from '@adia-ai/a2ui';
10
+
11
+ // ── Schema loading ──
12
+ const schemaByTag = new Map();
13
+ let schemasLoaded = false;
14
+
15
+ function tagFromSchema(schema) {
16
+ return schema?.['x-adiaui']?.tag || null;
17
+ }
18
+
19
+ async function loadSchemas() {
20
+ if (schemasLoaded) return;
21
+ schemasLoaded = true;
22
+
23
+ if (typeof process !== 'undefined' && process.versions?.node) {
24
+ try {
25
+ const { readdir, readFile, stat } = await import(/* @vite-ignore */ 'node:fs/promises');
26
+ const { fileURLToPath } = await import(/* @vite-ignore */ 'node:url');
27
+ const { dirname, join } = await import(/* @vite-ignore */ 'node:path');
28
+ const compsDir = join(dirname(fileURLToPath(import.meta.url)), '../../web-components/components');
29
+ const entries = await readdir(compsDir, { withFileTypes: true });
30
+ for (const e of entries) {
31
+ if (!e.isDirectory()) continue;
32
+ const path = join(compsDir, e.name, `${e.name}.a2ui.json`);
33
+ try {
34
+ const raw = await readFile(path, 'utf8');
35
+ const schema = JSON.parse(raw);
36
+ const tag = tagFromSchema(schema);
37
+ if (tag) schemaByTag.set(tag, schema);
38
+ } catch { /* skip missing / malformed */ }
39
+ }
40
+ } catch { /* components dir missing */ }
41
+ } else {
42
+ // Browser. Vite rewrites the glob CALL at transform time; on the static
43
+ // deploy that call throws (no Vite — `import.meta.glob` is a compile-time
44
+ // macro, undefined at runtime) → we fall through to fetching the
45
+ // CONSOLIDATED catalog. `typeof import.meta.glob` is undefined in BOTH
46
+ // contexts, so the only reliable discriminator is whether the CALL
47
+ // produced loaders. See composition-library.js for the full rationale.
48
+ let modules = null;
49
+ try {
50
+ modules = import.meta.glob('../../web-components/components/*/*.a2ui.json', { query: '?raw', import: 'default' });
51
+ } catch { /* no Vite transform — static deploy */ }
52
+
53
+ if (modules && Object.keys(modules).length > 0) {
54
+ // Vite dev — iterate the glob loaders.
55
+ for (const [, loader] of Object.entries(modules)) {
56
+ try {
57
+ const raw = await loader();
58
+ const schema = JSON.parse(raw);
59
+ const tag = tagFromSchema(schema);
60
+ if (tag) schemaByTag.set(tag, schema);
61
+ } catch { /* skip invalid */ }
62
+ }
63
+ } else {
64
+ // Static deploy — fetch the consolidated catalog once. Its `components`
65
+ // values carry the same `x-adiaui.tag` shape as the per-component
66
+ // sidecars (2026-06-10). Relative-to-module so it resolves under any
67
+ // mount point + the dist symlink layout.
68
+ try {
69
+ const url = new URL('../corpus/catalog-a2ui_0_9.json', import.meta.url);
70
+ const res = await fetch(url);
71
+ if (res.ok) {
72
+ const catalog = await res.json();
73
+ const comps = catalog?.components;
74
+ if (comps && typeof comps === 'object') {
75
+ for (const schema of Object.values(comps)) {
76
+ const tag = tagFromSchema(schema);
77
+ if (tag) schemaByTag.set(tag, schema);
78
+ }
79
+ }
80
+ }
81
+ } catch { /* consolidated catalog not present */ }
82
+ }
83
+ }
84
+ }
85
+
86
+ /**
87
+ * Register a JSON schema for a component tag (runtime).
88
+ */
89
+ export function registerSchema(tag, schema) {
90
+ schemaByTag.set(tag, schema);
91
+ }
92
+
93
+ // ── Category classification ──
94
+ const categoryMap = {
95
+ 'row-ui': 'layout', 'col-ui': 'layout', 'list-ui': 'layout', 'grid-ui': 'layout',
96
+ 'stack-ui': 'layout', 'block-ui': 'layout', 'toolbar-ui': 'layout',
97
+ 'text-ui': 'display', 'image-ui': 'display', 'icon-ui': 'display',
98
+ 'divider-ui': 'display', 'badge-ui': 'display', 'avatar-ui': 'display',
99
+ 'avatar-group-ui': 'display', 'progress-ui': 'display', 'skeleton-ui': 'display',
100
+ 'code-ui': 'display', 'kbd-ui': 'display', 'tag-ui': 'display',
101
+ 'stat-ui': 'display', 'empty-state-ui': 'display',
102
+ 'input-ui': 'input', 'check-ui': 'input', 'switch-ui': 'input',
103
+ 'slider-ui': 'input', 'select-ui': 'input', 'search-ui': 'input',
104
+ 'upload-ui': 'input', 'textarea-ui': 'input', 'radio-ui': 'input',
105
+ 'otp-input-ui': 'input', 'calendar-picker-ui': 'input', 'color-picker-ui': 'input',
106
+ 'range-ui': 'input',
107
+ 'button-ui': 'action',
108
+ 'card-ui': 'container', 'tabs-ui': 'container', 'tab-ui': 'container',
109
+ 'pane-ui': 'container', 'modal-ui': 'container', 'drawer-ui': 'container',
110
+ 'toast-ui': 'container', 'popover-ui': 'container', 'accordion-ui': 'container',
111
+ 'alert-ui': 'container', 'tooltip-ui': 'container', 'menu-ui': 'container',
112
+ 'command-ui': 'container',
113
+ 'section': 'card-child', 'header': 'card-child', 'footer': 'card-child',
114
+ 'stream-ui': 'agent', 'table-ui': 'agent', 'chart-ui': 'agent',
115
+ 'embed-ui': 'agent', 'noodles-ui': 'agent',
116
+ 'breadcrumb-ui': 'navigation', 'nav-ui': 'navigation', 'pagination-ui': 'navigation',
117
+ 'segmented-ui': 'navigation', 'segment-ui': 'navigation', 'router-ui': 'navigation',
118
+ 'toggle-group-ui': 'navigation', 'toggle-option-ui': 'navigation',
119
+ };
120
+
121
+ // ── Trait registry ──
122
+ //
123
+ // Loaded from packages/web-components/traits/_catalog.json — generated
124
+ // by `node scripts/build/traits-catalog.mjs` from the live defineTrait()
125
+ // metadata. Hand-edits here will be overwritten. Treat the trait file
126
+ // itself as the single source of truth.
127
+ let traitRegistry = [];
128
+
129
+ async function loadTraitRegistry() {
130
+ if (typeof process !== 'undefined' && process.versions?.node) {
131
+ try {
132
+ const { readFile } = await import(/* @vite-ignore */ 'node:fs/promises');
133
+ const { fileURLToPath } = await import(/* @vite-ignore */ 'node:url');
134
+ const { dirname, join } = await import(/* @vite-ignore */ 'node:path');
135
+ const path = join(dirname(fileURLToPath(import.meta.url)), '../../web-components/traits/_catalog.json');
136
+ const raw = await readFile(path, 'utf8');
137
+ const data = JSON.parse(raw);
138
+ traitRegistry = data.traits.map(t => ({
139
+ name: t.name,
140
+ category: t.category,
141
+ description: t.description,
142
+ attributes: [...t.attributes],
143
+ events: [...t.events],
144
+ config: [...t.config],
145
+ }));
146
+ } catch (err) {
147
+ console.warn('[a2ui-corpus] could not load trait catalog:', err.message);
148
+ }
149
+ } else {
150
+ // Browser branch — fetch via HTTP, not `import('… .json', { with: { type: 'json' } })`.
151
+ // Vite's dev server transforms JSON imports into JS modules and serves them
152
+ // with `Content-Type: text/javascript`; Chrome's strict MIME check rejects
153
+ // that when the spec-correct `with: { type: 'json' }` attribute is present.
154
+ // (Site pages already use fetch() for the same file — see
155
+ // site/pages/traits/_api-table.js + site/pages/traits/catalog/index.setup.js.)
156
+ try {
157
+ const res = await fetch('/packages/web-components/traits/_catalog.json');
158
+ if (!res.ok) throw new Error(`HTTP ${res.status}`);
159
+ const data = await res.json();
160
+ traitRegistry = data.traits.map(t => ({
161
+ name: t.name,
162
+ category: t.category,
163
+ description: t.description,
164
+ attributes: [...t.attributes],
165
+ events: [...t.events],
166
+ config: [...t.config],
167
+ }));
168
+ } catch { /* trait catalog not present in this build context */ }
169
+ }
170
+ }
171
+
172
+ await loadTraitRegistry();
173
+
174
+ // ── Alias tracking ──
175
+ const aliases = new Set([
176
+ 'Select', 'LoadingIndicator', 'ErrorContainer',
177
+ 'Keyboard', 'DatePicker', 'CommandPalette', 'Segmented', 'OTP', 'SideNav', 'IconSource',
178
+ ]);
179
+
180
+ // ── Build the catalog ──
181
+ let catalog = null;
182
+
183
+ async function buildCatalog() {
184
+ if (catalog) return catalog;
185
+ await loadSchemas();
186
+
187
+ const entries = new Map();
188
+
189
+ for (const [type, tag] of registry) {
190
+ if (aliases.has(type)) continue;
191
+ // Skip -ui alias entries (lowercase with dash)
192
+ if (type.includes('-')) continue;
193
+
194
+ const schema = schemaByTag.get(tag) || null;
195
+ const category = categoryMap[tag] || 'other';
196
+
197
+ entries.set(type, {
198
+ type,
199
+ tag,
200
+ category,
201
+ description: schema?.description || '',
202
+ schema,
203
+ });
204
+ }
205
+
206
+ catalog = {
207
+ version: '0.1.0',
208
+ totalTypes: entries.size,
209
+ entries,
210
+ };
211
+
212
+ return catalog;
213
+ }
214
+
215
+ export async function getCatalog() {
216
+ return buildCatalog();
217
+ }
218
+
219
+ export async function getComponent(typeName) {
220
+ const cat = await buildCatalog();
221
+ if (cat.entries.has(typeName)) return cat.entries.get(typeName);
222
+ const tag = registry.get(typeName);
223
+ if (!tag) return null;
224
+ for (const entry of cat.entries.values()) {
225
+ if (entry.tag === tag) return entry;
226
+ }
227
+ return null;
228
+ }
229
+
230
+ export async function getComponentsByCategory(category) {
231
+ const cat = await buildCatalog();
232
+ return [...cat.entries.values()].filter(e => e.category === category);
233
+ }
234
+
235
+ export function getTraits() {
236
+ return traitRegistry;
237
+ }
238
+
239
+ export function getTraitsByCategory(category) {
240
+ return traitRegistry.filter(t => t.category === category);
241
+ }
242
+
243
+ export async function getFullCatalog() {
244
+ const cat = await buildCatalog();
245
+ return {
246
+ ...cat,
247
+ totalTraits: traitRegistry.length,
248
+ traits: traitRegistry,
249
+ };
250
+ }
@@ -0,0 +1,168 @@
1
+ /**
2
+ * Component Catalog — Loads `.a2ui.json` sidecars from web-components/.
3
+ *
4
+ * The `.a2ui.json` sidecars are hand-authored component contracts that
5
+ * live alongside their components in `packages/web-components/components/`.
6
+ * They are part of the component library — NOT the training corpus — and
7
+ * are the canonical source of truth for component shape (v0.9 JSON Schema
8
+ * with `x-adiaui` extension for retrieval signals).
9
+ *
10
+ * §66 wired these into `buildSystemPrompt` as the authoritative component
11
+ * descriptor. §64 split this loader out of the now-retired
12
+ * `pattern-library.js` so it survives the patterns corpus deletion.
13
+ *
14
+ * Works in both Node.js (readdir/readFile) and the browser (Vite glob).
15
+ */
16
+
17
+ const IS_NODE =
18
+ typeof process !== 'undefined' &&
19
+ typeof process.versions?.node === 'string';
20
+
21
+ /** @type {Map<string, object>} */
22
+ const _componentData = new Map();
23
+
24
+ let _loaded = false;
25
+ let _loadPromise = null;
26
+
27
+ // Vite rewrites this CALL at transform time. On the static deploy the call
28
+ // throws (no Vite) → `_globA2UIModules` null → fetch the CONSOLIDATED
29
+ // catalog (one request) instead of 138 per-component sidecars.
30
+ // `import.meta.glob` is a compile-time macro (undefined at runtime in both
31
+ // Vite and static) — the only reliable discriminator is whether the CALL
32
+ // produced loaders. See composition-library.js for the full rationale.
33
+ let _globA2UIModules = null;
34
+ if (!IS_NODE) {
35
+ try {
36
+ _globA2UIModules = import.meta.glob('../../web-components/components/**/*.a2ui.json', {
37
+ query: '?raw',
38
+ import: 'default',
39
+ });
40
+ } catch {
41
+ // No Vite transform here (static deploy) — fall through to the fetch branch.
42
+ }
43
+ }
44
+ const HAS_VITE_GLOB =
45
+ !IS_NODE && !!_globA2UIModules && Object.keys(_globA2UIModules).length > 0;
46
+
47
+ // Static-deploy source: the consolidated catalog co-located in the corpus.
48
+ // Its `components` map values are byte-shape-identical to the standalone
49
+ // `.a2ui.json` sidecars (verified 2026-06-10), so one fetch replaces 138.
50
+ // Relative-to-module from retrieval/ → ../a2ui-corpus is `../corpus/`.
51
+ const _CONSOLIDATED_CATALOG_URL =
52
+ !IS_NODE && !HAS_VITE_GLOB
53
+ ? new URL('../corpus/catalog-a2ui_0_9.json', import.meta.url)
54
+ : null;
55
+
56
+ async function _loadNode() {
57
+ const fs = await import(/* @vite-ignore */ 'node:fs/promises');
58
+ const path = await import(/* @vite-ignore */ 'node:path');
59
+ const url = await import(/* @vite-ignore */ 'node:url');
60
+
61
+ const __dirname = path.dirname(url.fileURLToPath(import.meta.url));
62
+ const componentsDir = path.resolve(__dirname, '..', '..', 'web-components', 'components');
63
+
64
+ let compEntries;
65
+ try {
66
+ compEntries = await fs.readdir(componentsDir, { withFileTypes: true });
67
+ } catch {
68
+ return; // components dir doesn't exist — skip
69
+ }
70
+
71
+ for (const compEntry of compEntries) {
72
+ if (!compEntry.isDirectory()) continue;
73
+ const a2uiPath = path.join(componentsDir, compEntry.name, `${compEntry.name}.a2ui.json`);
74
+ try {
75
+ const raw = await fs.readFile(a2uiPath, 'utf8');
76
+ const data = JSON.parse(raw);
77
+ if (data?.title) _componentData.set(data.title, data);
78
+ } catch {
79
+ // No .a2ui.json for this component — skip
80
+ }
81
+ // §172 (v0.5.4): also pick up SIBLING .a2ui.json files in the same
82
+ // component dir. Some components live as sibling files inside a
83
+ // parent's folder (e.g. <chat-input-ui> in components/chat-thread/).
84
+ // Pre-§172 these were invisible to the retrieval catalog +
85
+ // system-prompt's getComponentData() lookup, causing the LLM to emit
86
+ // them without schema awareness (e.g. the 2026-05-14 redundant-send-
87
+ // button regression on ChatInput). The build scanner gained the same
88
+ // sibling-discovery treatment in `scripts/build/components.mjs`.
89
+ try {
90
+ const sibs = await fs.readdir(path.join(componentsDir, compEntry.name), { withFileTypes: true });
91
+ for (const s of sibs) {
92
+ if (!s.isFile() || !s.name.endsWith('.a2ui.json')) continue;
93
+ if (s.name === `${compEntry.name}.a2ui.json`) continue; // already loaded
94
+ try {
95
+ const raw = await fs.readFile(path.join(componentsDir, compEntry.name, s.name), 'utf8');
96
+ const data = JSON.parse(raw);
97
+ if (data?.title) _componentData.set(data.title, data);
98
+ } catch {
99
+ // skip malformed sibling sidecar
100
+ }
101
+ }
102
+ } catch {
103
+ // skip on read error
104
+ }
105
+ }
106
+ }
107
+
108
+ async function _loadBrowser() {
109
+ if (!_globA2UIModules) return;
110
+
111
+ for (const [, loader] of Object.entries(_globA2UIModules)) {
112
+ try {
113
+ const raw = await loader();
114
+ const data = JSON.parse(raw);
115
+ if (data?.title) _componentData.set(data.title, data);
116
+ } catch {
117
+ // skip malformed .a2ui.json
118
+ }
119
+ }
120
+ }
121
+
122
+ async function _loadStatic() {
123
+ if (!_CONSOLIDATED_CATALOG_URL) return;
124
+ try {
125
+ const res = await fetch(_CONSOLIDATED_CATALOG_URL);
126
+ if (!res.ok) return;
127
+ const catalog = await res.json();
128
+ const comps = catalog?.components;
129
+ if (!comps || typeof comps !== 'object') return;
130
+ for (const data of Object.values(comps)) {
131
+ if (data?.title) _componentData.set(data.title, data);
132
+ }
133
+ } catch {
134
+ // Consolidated catalog not present / unparseable — leave empty.
135
+ }
136
+ }
137
+
138
+ export async function loadCatalog() {
139
+ if (_loaded) return;
140
+ if (_loadPromise) return _loadPromise;
141
+ _loadPromise = (async () => {
142
+ if (IS_NODE) await _loadNode();
143
+ else if (HAS_VITE_GLOB) await _loadBrowser();
144
+ else await _loadStatic();
145
+ })();
146
+ await _loadPromise;
147
+ _loaded = true;
148
+ }
149
+
150
+ // Eager load on module import so the synchronous getters below are safe.
151
+ await loadCatalog();
152
+
153
+ /**
154
+ * Get `.a2ui.json` data for a named component.
155
+ * @param {string} name — PascalCase component name (e.g., "Swiper")
156
+ * @returns {object|null} raw .a2ui.json document, or null
157
+ */
158
+ export function getComponentData(name) {
159
+ return _componentData.get(name) || null;
160
+ }
161
+
162
+ /**
163
+ * Get all loaded `.a2ui.json` component data.
164
+ * @returns {Object.<string, object>} component name → .a2ui.json data
165
+ */
166
+ export function getAllComponentData() {
167
+ return Object.fromEntries(_componentData);
168
+ }
@@ -0,0 +1,80 @@
1
+ /**
2
+ * ComponentEntry — Detail level serialization for catalog entries.
3
+ *
4
+ * Three progressive-disclosure levels:
5
+ * Index (~10 tokens): { type, tag, category }
6
+ * Summary (~50 tokens): index + { description, properties: [names] }
7
+ * Reference (~200 tokens): summary + { properties: [full], slots, events, children, tokens }
8
+ */
9
+
10
+ /** @typedef {'index' | 'summary' | 'reference'} DetailLevel */
11
+
12
+ /**
13
+ * Serialize a component entry to the requested detail level.
14
+ *
15
+ * @param {object} entry — Full component entry from the catalog
16
+ * @param {DetailLevel} level — Detail level
17
+ * @returns {object} — Serialized entry at the requested level
18
+ */
19
+ export function serializeEntry(entry, level = 'index') {
20
+ if (level === 'index') return serializeIndex(entry);
21
+ if (level === 'summary') return serializeSummary(entry);
22
+ return serializeReference(entry);
23
+ }
24
+
25
+ function serializeIndex(entry) {
26
+ return {
27
+ type: entry.type,
28
+ tag: entry.tag,
29
+ category: entry.category,
30
+ };
31
+ }
32
+
33
+ function serializeSummary(entry) {
34
+ const index = serializeIndex(entry);
35
+ const result = {
36
+ ...index,
37
+ description: entry.description || '',
38
+ };
39
+ if (entry.schema?.properties) {
40
+ result.properties = Object.keys(entry.schema.properties);
41
+ }
42
+ return result;
43
+ }
44
+
45
+ function serializeReference(entry) {
46
+ const summary = serializeSummary(entry);
47
+ const schema = entry.schema;
48
+ if (!schema) return summary;
49
+
50
+ const result = { ...summary };
51
+
52
+ // Full property definitions
53
+ if (schema.properties) {
54
+ result.properties = Object.entries(schema.properties).map(([name, def]) => ({
55
+ name,
56
+ type: def.type,
57
+ ...(def.enum ? { enum: def.enum } : {}),
58
+ ...(def.default !== undefined ? { default: def.default } : {}),
59
+ ...(def.description ? { description: def.description } : {}),
60
+ }));
61
+ }
62
+
63
+ if (schema.slots && Object.keys(schema.slots).length > 0) {
64
+ result.slots = schema.slots;
65
+ }
66
+
67
+ if (schema.events && Object.keys(schema.events).length > 0) {
68
+ result.events = schema.events;
69
+ }
70
+
71
+ if (schema.children) {
72
+ result.children = schema.children;
73
+ }
74
+
75
+ if (schema.tokens) {
76
+ result.tokens = schema.tokens;
77
+ }
78
+
79
+ return result;
80
+ }
@@ -0,0 +1,174 @@
1
+ /**
2
+ * Context Assembler — Progressive-disclosure context packaging with token budgets.
3
+ *
4
+ * Assembles context at 5 budget tiers, combining component entries,
5
+ * domain-relevant patterns, and anti-patterns within token limits.
6
+ *
7
+ * Token estimation: ~1 token per 4 characters of JSON output.
8
+ */
9
+
10
+ import { getCatalog, getComponentsByCategory } from './catalog.js';
11
+ import { serializeEntry } from './component-entry.js';
12
+ import { classifyIntent, getDomain } from './domain-router.js';
13
+ import { getAntiPatterns } from './anti-patterns.js';
14
+ import {
15
+ searchAll as searchCompositions,
16
+ getComposition,
17
+ getAllCompositions,
18
+ } from '../compose/strategies/zettel/composition-library.js';
19
+
20
+ /** Token budget per tier */
21
+ const TIER_BUDGETS = {
22
+ 0: 500,
23
+ 1: 2000,
24
+ 2: 5000,
25
+ 3: 10000,
26
+ 4: 20000,
27
+ };
28
+
29
+ /**
30
+ * Estimate token count from a JavaScript value (serialized as JSON).
31
+ * @param {*} value
32
+ * @returns {number}
33
+ */
34
+ function estimateTokens(value) {
35
+ const json = JSON.stringify(value);
36
+ return Math.ceil(json.length / 4);
37
+ }
38
+
39
+ /**
40
+ * Assemble context for a given intent at a specific budget tier.
41
+ *
42
+ * @param {object} options
43
+ * @param {string} [options.intent] — Natural language intent (used for domain classification)
44
+ * @param {number} [options.tier=1] — Budget tier (0-4)
45
+ * @param {string} [options.domain] — Override domain (skips classification)
46
+ * @returns {{ components: object[], patterns: object[], antiPatterns: object[], domain: object, estimatedTokens: number }}
47
+ */
48
+ export async function assembleContext({ intent = '', tier = 1, domain: overrideDomain } = {}) {
49
+ const budget = TIER_BUDGETS[tier] ?? TIER_BUDGETS[1];
50
+
51
+ // Classify domain
52
+ const classification = intent ? classifyIntent(intent) : null;
53
+ const domainName = overrideDomain || classification?.domain || 'layout';
54
+ const domainConfig = getDomain(domainName);
55
+
56
+ let usedTokens = 0;
57
+ const result = {
58
+ components: [],
59
+ patterns: [],
60
+ antiPatterns: [],
61
+ domain: {
62
+ name: domainName,
63
+ confidence: classification?.confidence ?? 1,
64
+ matchedSignals: classification?.matchedSignals ?? [],
65
+ },
66
+ estimatedTokens: 0,
67
+ };
68
+
69
+ // Account for domain metadata
70
+ usedTokens += estimateTokens(result.domain);
71
+
72
+ const catalog = await getCatalog();
73
+
74
+ // ── Tier 0: Component index only ──
75
+ if (tier === 0) {
76
+ for (const entry of catalog.entries.values()) {
77
+ const serialized = serializeEntry(entry, 'index');
78
+ const cost = estimateTokens(serialized);
79
+ if (usedTokens + cost > budget) break;
80
+ result.components.push(serialized);
81
+ usedTokens += cost;
82
+ }
83
+ result.estimatedTokens = usedTokens;
84
+ return result;
85
+ }
86
+
87
+ // ── Tier 1+: Domain-relevant summaries first ──
88
+ const domainComponents = domainConfig?.components || [];
89
+ const addedTypes = new Set();
90
+
91
+ // Add domain-relevant components as summaries
92
+ for (const typeName of domainComponents) {
93
+ const entry = findEntry(catalog, typeName);
94
+ if (!entry) continue;
95
+
96
+ const level = tier >= 2 ? 'reference' : 'summary';
97
+ const serialized = serializeEntry(entry, level);
98
+ const cost = estimateTokens(serialized);
99
+ if (usedTokens + cost > budget) break;
100
+
101
+ result.components.push(serialized);
102
+ addedTypes.add(entry.type);
103
+ usedTokens += cost;
104
+ }
105
+
106
+ // ── Tier 2+: Fill remaining budget with other components ──
107
+ if (tier >= 2) {
108
+ for (const entry of catalog.entries.values()) {
109
+ if (addedTypes.has(entry.type)) continue;
110
+
111
+ const level = tier >= 3 ? 'reference' : 'summary';
112
+ const serialized = serializeEntry(entry, level);
113
+ const cost = estimateTokens(serialized);
114
+ if (usedTokens + cost > budget) break;
115
+
116
+ result.components.push(serialized);
117
+ addedTypes.add(entry.type);
118
+ usedTokens += cost;
119
+ }
120
+ }
121
+
122
+ // ── Tier 1+: Add anti-patterns ──
123
+ if (tier >= 1) {
124
+ const ap = getAntiPatterns();
125
+ const apCost = estimateTokens(ap);
126
+ if (usedTokens + apCost <= budget) {
127
+ result.antiPatterns = ap;
128
+ usedTokens += apCost;
129
+ }
130
+ }
131
+
132
+ // ── Tier 3+: Add matching compositions ──
133
+ // §64 migrated from pattern-library to composition-library. Compositions
134
+ // are the canonical retrieval surface post-§65.
135
+ if (tier >= 3) {
136
+ const matchedCompositions = intent
137
+ ? searchCompositions(intent).map((hit) => getComposition(hit.name)).filter(Boolean)
138
+ : getAllCompositions().filter((c) => c.domain === domainName);
139
+
140
+ for (const composition of matchedCompositions) {
141
+ const cost = estimateTokens(composition);
142
+ if (usedTokens + cost > budget) break;
143
+ result.patterns.push(composition);
144
+ usedTokens += cost;
145
+ }
146
+ }
147
+
148
+ // ── Tier 4: Full exploration — add remaining compositions ──
149
+ if (tier >= 4) {
150
+ const added = new Set(result.patterns.map((c) => c.name));
151
+ for (const composition of getAllCompositions()) {
152
+ if (added.has(composition.name)) continue;
153
+ const cost = estimateTokens(composition);
154
+ if (usedTokens + cost > budget) break;
155
+ result.patterns.push(composition);
156
+ usedTokens += cost;
157
+ }
158
+ }
159
+
160
+ result.estimatedTokens = usedTokens;
161
+ return result;
162
+ }
163
+
164
+ /**
165
+ * Find an entry in the catalog by type name.
166
+ */
167
+ function findEntry(catalog, typeName) {
168
+ if (catalog.entries.has(typeName)) return catalog.entries.get(typeName);
169
+ // Search by tag fallback
170
+ for (const entry of catalog.entries.values()) {
171
+ if (entry.type === typeName) return entry;
172
+ }
173
+ return null;
174
+ }