@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,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,4 @@
1
+ // v0.5.21 hotfix stub — TS-migration Phase 1 (568bb998d) declared this
2
+ // types: export but Phase 2 hasn't generated real declarations yet.
3
+ // Replace with real type declarations when Phase 2 lands.
4
+ export {};
@@ -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
+ }
@@ -0,0 +1,4 @@
1
+ // v0.5.21 hotfix stub — TS-migration Phase 1 (568bb998d) declared this
2
+ // types: export but Phase 2 hasn't generated real declarations yet.
3
+ // Replace with real type declarations when Phase 2 lands.
4
+ export {};
@@ -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
+ }