@aglyn/plugins-ai 1.0.0-beta.143

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 (717) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +25 -0
  3. package/package.json +60 -0
  4. package/src/index.d.ts +21 -0
  5. package/src/index.js +22 -0
  6. package/src/index.js.map +1 -0
  7. package/src/lib/activity/ai-activity-actions.d.ts +106 -0
  8. package/src/lib/activity/ai-activity-actions.js +209 -0
  9. package/src/lib/activity/ai-activity-actions.js.map +1 -0
  10. package/src/lib/activity/ai-activity.d.ts +219 -0
  11. package/src/lib/activity/ai-activity.js +251 -0
  12. package/src/lib/activity/ai-activity.js.map +1 -0
  13. package/src/lib/billing/ai-overage-charge.d.ts +102 -0
  14. package/src/lib/billing/ai-overage-charge.js +258 -0
  15. package/src/lib/billing/ai-overage-charge.js.map +1 -0
  16. package/src/lib/billing/ai-overage-close.d.ts +62 -0
  17. package/src/lib/billing/ai-overage-close.js +129 -0
  18. package/src/lib/billing/ai-overage-close.js.map +1 -0
  19. package/src/lib/billing/ai-overage-cutover.d.ts +63 -0
  20. package/src/lib/billing/ai-overage-cutover.js +114 -0
  21. package/src/lib/billing/ai-overage-cutover.js.map +1 -0
  22. package/src/lib/billing/ai-overage-events.d.ts +77 -0
  23. package/src/lib/billing/ai-overage-events.js +174 -0
  24. package/src/lib/billing/ai-overage-events.js.map +1 -0
  25. package/src/lib/billing/ai-overage-gate.d.ts +147 -0
  26. package/src/lib/billing/ai-overage-gate.js +177 -0
  27. package/src/lib/billing/ai-overage-gate.js.map +1 -0
  28. package/src/lib/billing/ai-overage-ledger.d.ts +135 -0
  29. package/src/lib/billing/ai-overage-ledger.js +278 -0
  30. package/src/lib/billing/ai-overage-ledger.js.map +1 -0
  31. package/src/lib/billing/ai-overage-standing-writes.d.ts +110 -0
  32. package/src/lib/billing/ai-overage-standing-writes.js +205 -0
  33. package/src/lib/billing/ai-overage-standing-writes.js.map +1 -0
  34. package/src/lib/billing/ai-overage-standing.d.ts +168 -0
  35. package/src/lib/billing/ai-overage-standing.js +215 -0
  36. package/src/lib/billing/ai-overage-standing.js.map +1 -0
  37. package/src/lib/billing/ai-overage-trigger.d.ts +30 -0
  38. package/src/lib/billing/ai-overage-trigger.js +76 -0
  39. package/src/lib/billing/ai-overage-trigger.js.map +1 -0
  40. package/src/lib/components/ai-allotment-editor.component.d.ts +40 -0
  41. package/src/lib/components/ai-allotment-editor.component.js +213 -0
  42. package/src/lib/components/ai-allotment-editor.component.js.map +1 -0
  43. package/src/lib/components/ai-assist-actions-context.d.ts +13 -0
  44. package/src/lib/components/ai-assist-actions-context.js +21 -0
  45. package/src/lib/components/ai-assist-actions-context.js.map +1 -0
  46. package/src/lib/components/ai-assist-provider.component.d.ts +51 -0
  47. package/src/lib/components/ai-assist-provider.component.js +519 -0
  48. package/src/lib/components/ai-assist-provider.component.js.map +1 -0
  49. package/src/lib/components/ai-brief-dialog.component.d.ts +56 -0
  50. package/src/lib/components/ai-brief-dialog.component.js +319 -0
  51. package/src/lib/components/ai-brief-dialog.component.js.map +1 -0
  52. package/src/lib/components/ai-collaborator-permissions-column.component.d.ts +32 -0
  53. package/src/lib/components/ai-collaborator-permissions-column.component.js +132 -0
  54. package/src/lib/components/ai-collaborator-permissions-column.component.js.map +1 -0
  55. package/src/lib/components/ai-credits-card.component.d.ts +34 -0
  56. package/src/lib/components/ai-credits-card.component.js +131 -0
  57. package/src/lib/components/ai-credits-card.component.js.map +1 -0
  58. package/src/lib/components/ai-credits-columns.component.d.ts +56 -0
  59. package/src/lib/components/ai-credits-columns.component.js +118 -0
  60. package/src/lib/components/ai-credits-columns.component.js.map +1 -0
  61. package/src/lib/components/ai-crm-email-draft.component.d.ts +17 -0
  62. package/src/lib/components/ai-crm-email-draft.component.js +159 -0
  63. package/src/lib/components/ai-crm-email-draft.component.js.map +1 -0
  64. package/src/lib/components/ai-crm-import-mapping.component.d.ts +20 -0
  65. package/src/lib/components/ai-crm-import-mapping.component.js +167 -0
  66. package/src/lib/components/ai-crm-import-mapping.component.js.map +1 -0
  67. package/src/lib/components/ai-crm-record-card.component.d.ts +27 -0
  68. package/src/lib/components/ai-crm-record-card.component.js +263 -0
  69. package/src/lib/components/ai-crm-record-card.component.js.map +1 -0
  70. package/src/lib/components/ai-describe-automation.component.d.ts +31 -0
  71. package/src/lib/components/ai-describe-automation.component.js +226 -0
  72. package/src/lib/components/ai-describe-automation.component.js.map +1 -0
  73. package/src/lib/components/ai-describe-button.component.d.ts +39 -0
  74. package/src/lib/components/ai-describe-button.component.js +87 -0
  75. package/src/lib/components/ai-describe-button.component.js.map +1 -0
  76. package/src/lib/components/ai-describe-page.component.d.ts +26 -0
  77. package/src/lib/components/ai-describe-page.component.js +18 -0
  78. package/src/lib/components/ai-describe-page.component.js.map +1 -0
  79. package/src/lib/components/ai-experiment-cards.component.d.ts +75 -0
  80. package/src/lib/components/ai-experiment-cards.component.js +573 -0
  81. package/src/lib/components/ai-experiment-cards.component.js.map +1 -0
  82. package/src/lib/components/ai-explain-automation.component.d.ts +31 -0
  83. package/src/lib/components/ai-explain-automation.component.js +265 -0
  84. package/src/lib/components/ai-explain-automation.component.js.map +1 -0
  85. package/src/lib/components/ai-insight-dialog.component.d.ts +37 -0
  86. package/src/lib/components/ai-insight-dialog.component.js +441 -0
  87. package/src/lib/components/ai-insight-dialog.component.js.map +1 -0
  88. package/src/lib/components/ai-job-plan.component.d.ts +46 -0
  89. package/src/lib/components/ai-job-plan.component.js +192 -0
  90. package/src/lib/components/ai-job-plan.component.js.map +1 -0
  91. package/src/lib/components/ai-model-selector.component.d.ts +21 -0
  92. package/src/lib/components/ai-model-selector.component.js +109 -0
  93. package/src/lib/components/ai-model-selector.component.js.map +1 -0
  94. package/src/lib/components/ai-page-brief-dialog.component.d.ts +29 -0
  95. package/src/lib/components/ai-page-brief-dialog.component.js +27 -0
  96. package/src/lib/components/ai-page-brief-dialog.component.js.map +1 -0
  97. package/src/lib/components/ai-permissions-on-host.component.d.ts +55 -0
  98. package/src/lib/components/ai-permissions-on-host.component.js +91 -0
  99. package/src/lib/components/ai-permissions-on-host.component.js.map +1 -0
  100. package/src/lib/components/ai-product-copy-card.component.d.ts +25 -0
  101. package/src/lib/components/ai-product-copy-card.component.js +328 -0
  102. package/src/lib/components/ai-product-copy-card.component.js.map +1 -0
  103. package/src/lib/components/ai-product-import-option.component.d.ts +14 -0
  104. package/src/lib/components/ai-product-import-option.component.js +58 -0
  105. package/src/lib/components/ai-product-import-option.component.js.map +1 -0
  106. package/src/lib/components/ai-products-hub-card.component.d.ts +15 -0
  107. package/src/lib/components/ai-products-hub-card.component.js +418 -0
  108. package/src/lib/components/ai-products-hub-card.component.js.map +1 -0
  109. package/src/lib/components/ai-products-proposals.component.d.ts +19 -0
  110. package/src/lib/components/ai-products-proposals.component.js +547 -0
  111. package/src/lib/components/ai-products-proposals.component.js.map +1 -0
  112. package/src/lib/components/ai-save-as-component.component.d.ts +38 -0
  113. package/src/lib/components/ai-save-as-component.component.js +231 -0
  114. package/src/lib/components/ai-save-as-component.component.js.map +1 -0
  115. package/src/lib/components/ai-seo-audit-card.component.d.ts +9 -0
  116. package/src/lib/components/ai-seo-audit-card.component.js +620 -0
  117. package/src/lib/components/ai-seo-audit-card.component.js.map +1 -0
  118. package/src/lib/components/ai-seo-fields-card.component.d.ts +10 -0
  119. package/src/lib/components/ai-seo-fields-card.component.js +453 -0
  120. package/src/lib/components/ai-seo-fields-card.component.js.map +1 -0
  121. package/src/lib/components/ai-site-batch-card.component.d.ts +32 -0
  122. package/src/lib/components/ai-site-batch-card.component.js +531 -0
  123. package/src/lib/components/ai-site-batch-card.component.js.map +1 -0
  124. package/src/lib/components/ai-site-seo-start-card.component.d.ts +26 -0
  125. package/src/lib/components/ai-site-seo-start-card.component.js +178 -0
  126. package/src/lib/components/ai-site-seo-start-card.component.js.map +1 -0
  127. package/src/lib/components/ai-site-start-card.component.d.ts +19 -0
  128. package/src/lib/components/ai-site-start-card.component.js +348 -0
  129. package/src/lib/components/ai-site-start-card.component.js.map +1 -0
  130. package/src/lib/components/ai-template-collection-field.component.d.ts +32 -0
  131. package/src/lib/components/ai-template-collection-field.component.js +63 -0
  132. package/src/lib/components/ai-template-collection-field.component.js.map +1 -0
  133. package/src/lib/components/ai-theme-proposal-card.component.d.ts +6 -0
  134. package/src/lib/components/ai-theme-proposal-card.component.js +619 -0
  135. package/src/lib/components/ai-theme-proposal-card.component.js.map +1 -0
  136. package/src/lib/components/ai-usage-strip.component.d.ts +27 -0
  137. package/src/lib/components/ai-usage-strip.component.js +145 -0
  138. package/src/lib/components/ai-usage-strip.component.js.map +1 -0
  139. package/src/lib/components/assist-edit-canvas.d.ts +169 -0
  140. package/src/lib/components/assist-edit-canvas.js +636 -0
  141. package/src/lib/components/assist-edit-canvas.js.map +1 -0
  142. package/src/lib/components/assist-edit-card.component.d.ts +16 -0
  143. package/src/lib/components/assist-edit-card.component.js +181 -0
  144. package/src/lib/components/assist-edit-card.component.js.map +1 -0
  145. package/src/lib/components/assist-jobs-drawer.component.d.ts +72 -0
  146. package/src/lib/components/assist-jobs-drawer.component.js +626 -0
  147. package/src/lib/components/assist-jobs-drawer.component.js.map +1 -0
  148. package/src/lib/components/assist-panel.component.d.ts +136 -0
  149. package/src/lib/components/assist-panel.component.js +1099 -0
  150. package/src/lib/components/assist-panel.component.js.map +1 -0
  151. package/src/lib/components/assist-signals-page.component.d.ts +3 -0
  152. package/src/lib/components/assist-signals-page.component.js +1017 -0
  153. package/src/lib/components/assist-signals-page.component.js.map +1 -0
  154. package/src/lib/components/besigner-ai-controls.component.d.ts +29 -0
  155. package/src/lib/components/besigner-ai-controls.component.js +81 -0
  156. package/src/lib/components/besigner-ai-controls.component.js.map +1 -0
  157. package/src/lib/components/billing-ai-allotments.component.d.ts +36 -0
  158. package/src/lib/components/billing-ai-allotments.component.js +486 -0
  159. package/src/lib/components/billing-ai-allotments.component.js.map +1 -0
  160. package/src/lib/components/billing-ai-top-users.component.d.ts +44 -0
  161. package/src/lib/components/billing-ai-top-users.component.js +304 -0
  162. package/src/lib/components/billing-ai-top-users.component.js.map +1 -0
  163. package/src/lib/components/billing-assist-overage-card.component.d.ts +69 -0
  164. package/src/lib/components/billing-assist-overage-card.component.js +437 -0
  165. package/src/lib/components/billing-assist-overage-card.component.js.map +1 -0
  166. package/src/lib/components/host-ai-allotments.component.d.ts +40 -0
  167. package/src/lib/components/host-ai-allotments.component.js +239 -0
  168. package/src/lib/components/host-ai-allotments.component.js.map +1 -0
  169. package/src/lib/components/member-ai-allotment-card.component.d.ts +28 -0
  170. package/src/lib/components/member-ai-allotment-card.component.js +172 -0
  171. package/src/lib/components/member-ai-allotment-card.component.js.map +1 -0
  172. package/src/lib/components/member-ai-usage-card.component.d.ts +28 -0
  173. package/src/lib/components/member-ai-usage-card.component.js +240 -0
  174. package/src/lib/components/member-ai-usage-card.component.js.map +1 -0
  175. package/src/lib/components/staff-org-ai-card.component.d.ts +17 -0
  176. package/src/lib/components/staff-org-ai-card.component.js +739 -0
  177. package/src/lib/components/staff-org-ai-card.component.js.map +1 -0
  178. package/src/lib/components/staff-org-usage-ai-columns.component.d.ts +41 -0
  179. package/src/lib/components/staff-org-usage-ai-columns.component.js +65 -0
  180. package/src/lib/components/staff-org-usage-ai-columns.component.js.map +1 -0
  181. package/src/lib/components/staff-orgs-ai-spend-column.component.d.ts +28 -0
  182. package/src/lib/components/staff-orgs-ai-spend-column.component.js +89 -0
  183. package/src/lib/components/staff-orgs-ai-spend-column.component.js.map +1 -0
  184. package/src/lib/components/staff-user-ai-usage-card.component.d.ts +27 -0
  185. package/src/lib/components/staff-user-ai-usage-card.component.js +183 -0
  186. package/src/lib/components/staff-user-ai-usage-card.component.js.map +1 -0
  187. package/src/lib/components/use-ai-allotments.d.ts +49 -0
  188. package/src/lib/components/use-ai-allotments.js +171 -0
  189. package/src/lib/components/use-ai-allotments.js.map +1 -0
  190. package/src/lib/components/use-ai-crm-answer.d.ts +50 -0
  191. package/src/lib/components/use-ai-crm-answer.js +220 -0
  192. package/src/lib/components/use-ai-crm-answer.js.map +1 -0
  193. package/src/lib/components/use-ai-job-run.d.ts +51 -0
  194. package/src/lib/components/use-ai-job-run.js +176 -0
  195. package/src/lib/components/use-ai-job-run.js.map +1 -0
  196. package/src/lib/components/use-ai-model-choice.d.ts +47 -0
  197. package/src/lib/components/use-ai-model-choice.js +150 -0
  198. package/src/lib/components/use-ai-model-choice.js.map +1 -0
  199. package/src/lib/components/use-ai-products-jobs.d.ts +36 -0
  200. package/src/lib/components/use-ai-products-jobs.js +190 -0
  201. package/src/lib/components/use-ai-products-jobs.js.map +1 -0
  202. package/src/lib/components/use-ai-usage-meter.d.ts +11 -0
  203. package/src/lib/components/use-ai-usage-meter.js +96 -0
  204. package/src/lib/components/use-ai-usage-meter.js.map +1 -0
  205. package/src/lib/components/use-org-ai-usage.d.ts +42 -0
  206. package/src/lib/components/use-org-ai-usage.js +181 -0
  207. package/src/lib/components/use-org-ai-usage.js.map +1 -0
  208. package/src/lib/components/use-staff-orgs-ai-spend.d.ts +18 -0
  209. package/src/lib/components/use-staff-orgs-ai-spend.js +127 -0
  210. package/src/lib/components/use-staff-orgs-ai-spend.js.map +1 -0
  211. package/src/lib/constants.d.ts +24 -0
  212. package/src/lib/constants.js +23 -0
  213. package/src/lib/constants.js.map +1 -0
  214. package/src/lib/declarations.d.ts +48 -0
  215. package/src/lib/declarations.js +129 -0
  216. package/src/lib/declarations.js.map +1 -0
  217. package/src/lib/declarations.server.d.ts +35 -0
  218. package/src/lib/declarations.server.js +138 -0
  219. package/src/lib/declarations.server.js.map +1 -0
  220. package/src/lib/insights/ai-figure-readers.d.ts +90 -0
  221. package/src/lib/insights/ai-figure-readers.js +863 -0
  222. package/src/lib/insights/ai-figure-readers.js.map +1 -0
  223. package/src/lib/insights/ai-insight-digest.d.ts +165 -0
  224. package/src/lib/insights/ai-insight-digest.js +363 -0
  225. package/src/lib/insights/ai-insight-digest.js.map +1 -0
  226. package/src/lib/insights/ai-insight-readers.d.ts +71 -0
  227. package/src/lib/insights/ai-insight-readers.js +141 -0
  228. package/src/lib/insights/ai-insight-readers.js.map +1 -0
  229. package/src/lib/jobs/ai-crm-access.d.ts +61 -0
  230. package/src/lib/jobs/ai-crm-access.js +94 -0
  231. package/src/lib/jobs/ai-crm-access.js.map +1 -0
  232. package/src/lib/jobs/ai-email-bindings.d.ts +97 -0
  233. package/src/lib/jobs/ai-email-bindings.js +147 -0
  234. package/src/lib/jobs/ai-email-bindings.js.map +1 -0
  235. package/src/lib/jobs/ai-job-admission.d.ts +82 -0
  236. package/src/lib/jobs/ai-job-admission.js +45 -0
  237. package/src/lib/jobs/ai-job-admission.js.map +1 -0
  238. package/src/lib/jobs/ai-job-budget.d.ts +167 -0
  239. package/src/lib/jobs/ai-job-budget.js +161 -0
  240. package/src/lib/jobs/ai-job-budget.js.map +1 -0
  241. package/src/lib/jobs/ai-job-campaign-step.d.ts +108 -0
  242. package/src/lib/jobs/ai-job-campaign-step.js +340 -0
  243. package/src/lib/jobs/ai-job-campaign-step.js.map +1 -0
  244. package/src/lib/jobs/ai-job-component-checks.d.ts +74 -0
  245. package/src/lib/jobs/ai-job-component-checks.js +442 -0
  246. package/src/lib/jobs/ai-job-component-checks.js.map +1 -0
  247. package/src/lib/jobs/ai-job-component-step.d.ts +75 -0
  248. package/src/lib/jobs/ai-job-component-step.js +262 -0
  249. package/src/lib/jobs/ai-job-component-step.js.map +1 -0
  250. package/src/lib/jobs/ai-job-crm-step.d.ts +192 -0
  251. package/src/lib/jobs/ai-job-crm-step.js +734 -0
  252. package/src/lib/jobs/ai-job-crm-step.js.map +1 -0
  253. package/src/lib/jobs/ai-job-draft-ids.d.ts +62 -0
  254. package/src/lib/jobs/ai-job-draft-ids.js +132 -0
  255. package/src/lib/jobs/ai-job-draft-ids.js.map +1 -0
  256. package/src/lib/jobs/ai-job-drafts.d.ts +304 -0
  257. package/src/lib/jobs/ai-job-drafts.js +557 -0
  258. package/src/lib/jobs/ai-job-drafts.js.map +1 -0
  259. package/src/lib/jobs/ai-job-email-step.d.ts +195 -0
  260. package/src/lib/jobs/ai-job-email-step.js +547 -0
  261. package/src/lib/jobs/ai-job-email-step.js.map +1 -0
  262. package/src/lib/jobs/ai-job-experiment-step.d.ts +105 -0
  263. package/src/lib/jobs/ai-job-experiment-step.js +445 -0
  264. package/src/lib/jobs/ai-job-experiment-step.js.map +1 -0
  265. package/src/lib/jobs/ai-job-form-step.d.ts +250 -0
  266. package/src/lib/jobs/ai-job-form-step.js +634 -0
  267. package/src/lib/jobs/ai-job-form-step.js.map +1 -0
  268. package/src/lib/jobs/ai-job-generation.d.ts +114 -0
  269. package/src/lib/jobs/ai-job-generation.js +384 -0
  270. package/src/lib/jobs/ai-job-generation.js.map +1 -0
  271. package/src/lib/jobs/ai-job-insight-budget.d.ts +41 -0
  272. package/src/lib/jobs/ai-job-insight-budget.js +46 -0
  273. package/src/lib/jobs/ai-job-insight-budget.js.map +1 -0
  274. package/src/lib/jobs/ai-job-insight-step.d.ts +58 -0
  275. package/src/lib/jobs/ai-job-insight-step.js +350 -0
  276. package/src/lib/jobs/ai-job-insight-step.js.map +1 -0
  277. package/src/lib/jobs/ai-job-layout-step.d.ts +103 -0
  278. package/src/lib/jobs/ai-job-layout-step.js +340 -0
  279. package/src/lib/jobs/ai-job-layout-step.js.map +1 -0
  280. package/src/lib/jobs/ai-job-page-budget.d.ts +57 -0
  281. package/src/lib/jobs/ai-job-page-budget.js +60 -0
  282. package/src/lib/jobs/ai-job-page-budget.js.map +1 -0
  283. package/src/lib/jobs/ai-job-page-sections.d.ts +150 -0
  284. package/src/lib/jobs/ai-job-page-sections.js +450 -0
  285. package/src/lib/jobs/ai-job-page-sections.js.map +1 -0
  286. package/src/lib/jobs/ai-job-page-step.d.ts +198 -0
  287. package/src/lib/jobs/ai-job-page-step.js +667 -0
  288. package/src/lib/jobs/ai-job-page-step.js.map +1 -0
  289. package/src/lib/jobs/ai-job-plan-conformance.d.ts +107 -0
  290. package/src/lib/jobs/ai-job-plan-conformance.js +164 -0
  291. package/src/lib/jobs/ai-job-plan-conformance.js.map +1 -0
  292. package/src/lib/jobs/ai-job-plan-step.d.ts +196 -0
  293. package/src/lib/jobs/ai-job-plan-step.js +458 -0
  294. package/src/lib/jobs/ai-job-plan-step.js.map +1 -0
  295. package/src/lib/jobs/ai-job-plugin-drafts.d.ts +76 -0
  296. package/src/lib/jobs/ai-job-plugin-drafts.js +91 -0
  297. package/src/lib/jobs/ai-job-plugin-drafts.js.map +1 -0
  298. package/src/lib/jobs/ai-job-products-step.d.ts +106 -0
  299. package/src/lib/jobs/ai-job-products-step.js +436 -0
  300. package/src/lib/jobs/ai-job-products-step.js.map +1 -0
  301. package/src/lib/jobs/ai-job-seo-budget.d.ts +52 -0
  302. package/src/lib/jobs/ai-job-seo-budget.js +63 -0
  303. package/src/lib/jobs/ai-job-seo-budget.js.map +1 -0
  304. package/src/lib/jobs/ai-job-seo-step.d.ts +145 -0
  305. package/src/lib/jobs/ai-job-seo-step.js +809 -0
  306. package/src/lib/jobs/ai-job-seo-step.js.map +1 -0
  307. package/src/lib/jobs/ai-job-site-step.d.ts +252 -0
  308. package/src/lib/jobs/ai-job-site-step.js +538 -0
  309. package/src/lib/jobs/ai-job-site-step.js.map +1 -0
  310. package/src/lib/jobs/ai-job-template-step.d.ts +105 -0
  311. package/src/lib/jobs/ai-job-template-step.js +391 -0
  312. package/src/lib/jobs/ai-job-template-step.js.map +1 -0
  313. package/src/lib/jobs/ai-job-text-step.d.ts +125 -0
  314. package/src/lib/jobs/ai-job-text-step.js +128 -0
  315. package/src/lib/jobs/ai-job-text-step.js.map +1 -0
  316. package/src/lib/jobs/ai-job-theme-budget.d.ts +38 -0
  317. package/src/lib/jobs/ai-job-theme-budget.js +43 -0
  318. package/src/lib/jobs/ai-job-theme-budget.js.map +1 -0
  319. package/src/lib/jobs/ai-job-theme-step.d.ts +115 -0
  320. package/src/lib/jobs/ai-job-theme-step.js +337 -0
  321. package/src/lib/jobs/ai-job-theme-step.js.map +1 -0
  322. package/src/lib/jobs/ai-job-workflow-step.d.ts +139 -0
  323. package/src/lib/jobs/ai-job-workflow-step.js +530 -0
  324. package/src/lib/jobs/ai-job-workflow-step.js.map +1 -0
  325. package/src/lib/jobs/ai-jobs-beat.d.ts +78 -0
  326. package/src/lib/jobs/ai-jobs-beat.js +93 -0
  327. package/src/lib/jobs/ai-jobs-beat.js.map +1 -0
  328. package/src/lib/jobs/ai-jobs-pause.d.ts +38 -0
  329. package/src/lib/jobs/ai-jobs-pause.js +45 -0
  330. package/src/lib/jobs/ai-jobs-pause.js.map +1 -0
  331. package/src/lib/jobs/ai-jobs.d.ts +558 -0
  332. package/src/lib/jobs/ai-jobs.js +1410 -0
  333. package/src/lib/jobs/ai-jobs.js.map +1 -0
  334. package/src/lib/jobs/ai-media-asset-server.d.ts +34 -0
  335. package/src/lib/jobs/ai-media-asset-server.js +34 -0
  336. package/src/lib/jobs/ai-media-asset-server.js.map +1 -0
  337. package/src/lib/jobs/ai-media-asset.d.ts +59 -0
  338. package/src/lib/jobs/ai-media-asset.js +86 -0
  339. package/src/lib/jobs/ai-media-asset.js.map +1 -0
  340. package/src/lib/jobs/ai-product-image.d.ts +78 -0
  341. package/src/lib/jobs/ai-product-image.js +113 -0
  342. package/src/lib/jobs/ai-product-image.js.map +1 -0
  343. package/src/lib/jobs/ai-theme-brand-inputs.d.ts +125 -0
  344. package/src/lib/jobs/ai-theme-brand-inputs.js +378 -0
  345. package/src/lib/jobs/ai-theme-brand-inputs.js.map +1 -0
  346. package/src/lib/jobs/ai-theme-brand-server.d.ts +33 -0
  347. package/src/lib/jobs/ai-theme-brand-server.js +33 -0
  348. package/src/lib/jobs/ai-theme-brand-server.js.map +1 -0
  349. package/src/lib/jobs/ai-workflow-records.d.ts +84 -0
  350. package/src/lib/jobs/ai-workflow-records.js +158 -0
  351. package/src/lib/jobs/ai-workflow-records.js.map +1 -0
  352. package/src/lib/jobs/fixtures/ai-free-page-built-recording.d.ts +31 -0
  353. package/src/lib/jobs/fixtures/ai-free-page-built-recording.js +367 -0
  354. package/src/lib/jobs/fixtures/ai-free-page-built-recording.js.map +1 -0
  355. package/src/lib/jobs/fixtures/ai-free-page-recording.d.ts +69 -0
  356. package/src/lib/jobs/fixtures/ai-free-page-recording.js +442 -0
  357. package/src/lib/jobs/fixtures/ai-free-page-recording.js.map +1 -0
  358. package/src/lib/jobs/fixtures/ai-page-briefs.d.ts +146 -0
  359. package/src/lib/jobs/fixtures/ai-page-briefs.js +1850 -0
  360. package/src/lib/jobs/fixtures/ai-page-briefs.js.map +1 -0
  361. package/src/lib/model/ai-allotments.d.ts +208 -0
  362. package/src/lib/model/ai-allotments.js +269 -0
  363. package/src/lib/model/ai-allotments.js.map +1 -0
  364. package/src/lib/model/ai-automation-draft.d.ts +74 -0
  365. package/src/lib/model/ai-automation-draft.js +310 -0
  366. package/src/lib/model/ai-automation-draft.js.map +1 -0
  367. package/src/lib/model/ai-automation-outline.d.ts +50 -0
  368. package/src/lib/model/ai-automation-outline.js +262 -0
  369. package/src/lib/model/ai-automation-outline.js.map +1 -0
  370. package/src/lib/model/ai-build-plan.d.ts +197 -0
  371. package/src/lib/model/ai-build-plan.js +438 -0
  372. package/src/lib/model/ai-build-plan.js.map +1 -0
  373. package/src/lib/model/ai-crm.d.ts +237 -0
  374. package/src/lib/model/ai-crm.js +225 -0
  375. package/src/lib/model/ai-crm.js.map +1 -0
  376. package/src/lib/model/ai-experiment-proposal.d.ts +68 -0
  377. package/src/lib/model/ai-experiment-proposal.js +146 -0
  378. package/src/lib/model/ai-experiment-proposal.js.map +1 -0
  379. package/src/lib/model/ai-experiment.d.ts +309 -0
  380. package/src/lib/model/ai-experiment.js +395 -0
  381. package/src/lib/model/ai-experiment.js.map +1 -0
  382. package/src/lib/model/ai-insight.d.ts +178 -0
  383. package/src/lib/model/ai-insight.js +201 -0
  384. package/src/lib/model/ai-insight.js.map +1 -0
  385. package/src/lib/model/ai-jobs.types.d.ts +412 -0
  386. package/src/lib/model/ai-jobs.types.js +42 -0
  387. package/src/lib/model/ai-jobs.types.js.map +1 -0
  388. package/src/lib/model/ai-page-job.d.ts +92 -0
  389. package/src/lib/model/ai-page-job.js +159 -0
  390. package/src/lib/model/ai-page-job.js.map +1 -0
  391. package/src/lib/model/ai-permissions.d.ts +49 -0
  392. package/src/lib/model/ai-permissions.js +97 -0
  393. package/src/lib/model/ai-permissions.js.map +1 -0
  394. package/src/lib/model/ai-plan-capabilities.d.ts +139 -0
  395. package/src/lib/model/ai-plan-capabilities.js +149 -0
  396. package/src/lib/model/ai-plan-capabilities.js.map +1 -0
  397. package/src/lib/model/ai-products.d.ts +251 -0
  398. package/src/lib/model/ai-products.js +253 -0
  399. package/src/lib/model/ai-products.js.map +1 -0
  400. package/src/lib/model/ai-seo.d.ts +208 -0
  401. package/src/lib/model/ai-seo.js +150 -0
  402. package/src/lib/model/ai-seo.js.map +1 -0
  403. package/src/lib/model/ai-site-inventory.d.ts +164 -0
  404. package/src/lib/model/ai-site-inventory.js +145 -0
  405. package/src/lib/model/ai-site-inventory.js.map +1 -0
  406. package/src/lib/model/ai-site-job.d.ts +247 -0
  407. package/src/lib/model/ai-site-job.js +314 -0
  408. package/src/lib/model/ai-site-job.js.map +1 -0
  409. package/src/lib/model/ai-site-start-seo.d.ts +103 -0
  410. package/src/lib/model/ai-site-start-seo.js +154 -0
  411. package/src/lib/model/ai-site-start-seo.js.map +1 -0
  412. package/src/lib/model/ai-site-start.d.ts +122 -0
  413. package/src/lib/model/ai-site-start.js +159 -0
  414. package/src/lib/model/ai-site-start.js.map +1 -0
  415. package/src/lib/model/ai-site-switch.d.ts +56 -0
  416. package/src/lib/model/ai-site-switch.js +73 -0
  417. package/src/lib/model/ai-site-switch.js.map +1 -0
  418. package/src/lib/model/ai-storefront-claims.d.ts +70 -0
  419. package/src/lib/model/ai-storefront-claims.js +130 -0
  420. package/src/lib/model/ai-storefront-claims.js.map +1 -0
  421. package/src/lib/model/ai-template-subjects.d.ts +82 -0
  422. package/src/lib/model/ai-template-subjects.js +136 -0
  423. package/src/lib/model/ai-template-subjects.js.map +1 -0
  424. package/src/lib/model/ai-theme-proposal.d.ts +210 -0
  425. package/src/lib/model/ai-theme-proposal.js +506 -0
  426. package/src/lib/model/ai-theme-proposal.js.map +1 -0
  427. package/src/lib/model/ai-tokens.d.ts +96 -0
  428. package/src/lib/model/ai-tokens.js +117 -0
  429. package/src/lib/model/ai-tokens.js.map +1 -0
  430. package/src/lib/model/ai-usage-by-user.d.ts +120 -0
  431. package/src/lib/model/ai-usage-by-user.js +139 -0
  432. package/src/lib/model/ai-usage-by-user.js.map +1 -0
  433. package/src/lib/model/ai-workflow-job.d.ts +111 -0
  434. package/src/lib/model/ai-workflow-job.js +183 -0
  435. package/src/lib/model/ai-workflow-job.js.map +1 -0
  436. package/src/lib/model/assist-edit.d.ts +261 -0
  437. package/src/lib/model/assist-edit.js +175 -0
  438. package/src/lib/model/assist-edit.js.map +1 -0
  439. package/src/lib/plugin-config.d.ts +33 -0
  440. package/src/lib/plugin-config.js +118 -0
  441. package/src/lib/plugin-config.js.map +1 -0
  442. package/src/lib/plugin.d.ts +30 -0
  443. package/src/lib/plugin.js +525 -0
  444. package/src/lib/plugin.js.map +1 -0
  445. package/src/lib/providers/anthropic.d.ts +84 -0
  446. package/src/lib/providers/anthropic.js +432 -0
  447. package/src/lib/providers/anthropic.js.map +1 -0
  448. package/src/lib/providers/catalog.d.ts +197 -0
  449. package/src/lib/providers/catalog.js +312 -0
  450. package/src/lib/providers/catalog.js.map +1 -0
  451. package/src/lib/providers/contract.d.ts +464 -0
  452. package/src/lib/providers/contract.js +274 -0
  453. package/src/lib/providers/contract.js.map +1 -0
  454. package/src/lib/providers/model-choice.d.ts +119 -0
  455. package/src/lib/providers/model-choice.js +416 -0
  456. package/src/lib/providers/model-choice.js.map +1 -0
  457. package/src/lib/providers/openai-compatible.d.ts +58 -0
  458. package/src/lib/providers/openai-compatible.js +361 -0
  459. package/src/lib/providers/openai-compatible.js.map +1 -0
  460. package/src/lib/providers/registry.d.ts +49 -0
  461. package/src/lib/providers/registry.js +71 -0
  462. package/src/lib/providers/registry.js.map +1 -0
  463. package/src/lib/providers/routing.d.ts +98 -0
  464. package/src/lib/providers/routing.js +450 -0
  465. package/src/lib/providers/routing.js.map +1 -0
  466. package/src/lib/runtime/ai-abuse-guards.d.ts +113 -0
  467. package/src/lib/runtime/ai-abuse-guards.js +148 -0
  468. package/src/lib/runtime/ai-abuse-guards.js.map +1 -0
  469. package/src/lib/runtime/ai-component-bindings.d.ts +67 -0
  470. package/src/lib/runtime/ai-component-bindings.js +106 -0
  471. package/src/lib/runtime/ai-component-bindings.js.map +1 -0
  472. package/src/lib/runtime/ai-device-audit.d.ts +109 -0
  473. package/src/lib/runtime/ai-device-audit.js +97 -0
  474. package/src/lib/runtime/ai-device-audit.js.map +1 -0
  475. package/src/lib/runtime/ai-doctrine-validators.d.ts +720 -0
  476. package/src/lib/runtime/ai-doctrine-validators.js +3133 -0
  477. package/src/lib/runtime/ai-doctrine-validators.js.map +1 -0
  478. package/src/lib/runtime/ai-doctrine.d.ts +372 -0
  479. package/src/lib/runtime/ai-doctrine.js +944 -0
  480. package/src/lib/runtime/ai-doctrine.js.map +1 -0
  481. package/src/lib/runtime/ai-eval-live.d.ts +321 -0
  482. package/src/lib/runtime/ai-eval-live.js +1257 -0
  483. package/src/lib/runtime/ai-eval-live.js.map +1 -0
  484. package/src/lib/runtime/ai-eval-memory-firestore.d.ts +51 -0
  485. package/src/lib/runtime/ai-eval-memory-firestore.js +183 -0
  486. package/src/lib/runtime/ai-eval-memory-firestore.js.map +1 -0
  487. package/src/lib/runtime/ai-eval.d.ts +441 -0
  488. package/src/lib/runtime/ai-eval.js +1151 -0
  489. package/src/lib/runtime/ai-eval.js.map +1 -0
  490. package/src/lib/runtime/ai-gate.d.ts +130 -0
  491. package/src/lib/runtime/ai-gate.js +272 -0
  492. package/src/lib/runtime/ai-gate.js.map +1 -0
  493. package/src/lib/runtime/ai-generation-bounds.d.ts +24 -0
  494. package/src/lib/runtime/ai-generation-bounds.js +23 -0
  495. package/src/lib/runtime/ai-generation-bounds.js.map +1 -0
  496. package/src/lib/runtime/ai-insight-check.d.ts +76 -0
  497. package/src/lib/runtime/ai-insight-check.js +281 -0
  498. package/src/lib/runtime/ai-insight-check.js.map +1 -0
  499. package/src/lib/runtime/ai-node-tree.d.ts +181 -0
  500. package/src/lib/runtime/ai-node-tree.js +931 -0
  501. package/src/lib/runtime/ai-node-tree.js.map +1 -0
  502. package/src/lib/runtime/ai-page-links.d.ts +79 -0
  503. package/src/lib/runtime/ai-page-links.js +135 -0
  504. package/src/lib/runtime/ai-page-links.js.map +1 -0
  505. package/src/lib/runtime/ai-palette.d.ts +252 -0
  506. package/src/lib/runtime/ai-palette.generated.d.ts +34 -0
  507. package/src/lib/runtime/ai-palette.generated.js +5263 -0
  508. package/src/lib/runtime/ai-palette.generated.js.map +1 -0
  509. package/src/lib/runtime/ai-palette.js +187 -0
  510. package/src/lib/runtime/ai-palette.js.map +1 -0
  511. package/src/lib/runtime/ai-products-generation.d.ts +107 -0
  512. package/src/lib/runtime/ai-products-generation.js +250 -0
  513. package/src/lib/runtime/ai-products-generation.js.map +1 -0
  514. package/src/lib/runtime/ai-repeated-items.d.ts +95 -0
  515. package/src/lib/runtime/ai-repeated-items.js +397 -0
  516. package/src/lib/runtime/ai-repeated-items.js.map +1 -0
  517. package/src/lib/runtime/ai-runtime.d.ts +148 -0
  518. package/src/lib/runtime/ai-runtime.js +237 -0
  519. package/src/lib/runtime/ai-runtime.js.map +1 -0
  520. package/src/lib/runtime/ai-template-examples.d.ts +71 -0
  521. package/src/lib/runtime/ai-template-examples.js +135 -0
  522. package/src/lib/runtime/ai-template-examples.js.map +1 -0
  523. package/src/lib/runtime/assist-answer-cache.d.ts +80 -0
  524. package/src/lib/runtime/assist-answer-cache.js +184 -0
  525. package/src/lib/runtime/assist-answer-cache.js.map +1 -0
  526. package/src/lib/runtime/seo-audit.d.ts +93 -0
  527. package/src/lib/runtime/seo-audit.js +260 -0
  528. package/src/lib/runtime/seo-audit.js.map +1 -0
  529. package/src/lib/runtime/seo-content-fixes.d.ts +41 -0
  530. package/src/lib/runtime/seo-content-fixes.js +168 -0
  531. package/src/lib/runtime/seo-content-fixes.js.map +1 -0
  532. package/src/lib/runtime/seo-fields.d.ts +152 -0
  533. package/src/lib/runtime/seo-fields.js +215 -0
  534. package/src/lib/runtime/seo-fields.js.map +1 -0
  535. package/src/lib/runtime/seo-page-facts.d.ts +61 -0
  536. package/src/lib/runtime/seo-page-facts.js +150 -0
  537. package/src/lib/runtime/seo-page-facts.js.map +1 -0
  538. package/src/lib/runtime/site-inventory.d.ts +63 -0
  539. package/src/lib/runtime/site-inventory.js +230 -0
  540. package/src/lib/runtime/site-inventory.js.map +1 -0
  541. package/src/lib/server/ai-admin-org.d.ts +33 -0
  542. package/src/lib/server/ai-admin-org.js +381 -0
  543. package/src/lib/server/ai-admin-org.js.map +1 -0
  544. package/src/lib/server/ai-admin-orgs-spend.d.ts +40 -0
  545. package/src/lib/server/ai-admin-orgs-spend.js +129 -0
  546. package/src/lib/server/ai-admin-orgs-spend.js.map +1 -0
  547. package/src/lib/server/ai-admin-overage.d.ts +19 -0
  548. package/src/lib/server/ai-admin-overage.js +246 -0
  549. package/src/lib/server/ai-admin-overage.js.map +1 -0
  550. package/src/lib/server/ai-admin-signals.d.ts +34 -0
  551. package/src/lib/server/ai-admin-signals.js +330 -0
  552. package/src/lib/server/ai-admin-signals.js.map +1 -0
  553. package/src/lib/server/ai-admin-user.d.ts +27 -0
  554. package/src/lib/server/ai-admin-user.js +128 -0
  555. package/src/lib/server/ai-admin-user.js.map +1 -0
  556. package/src/lib/server/ai-allotments.d.ts +27 -0
  557. package/src/lib/server/ai-allotments.js +544 -0
  558. package/src/lib/server/ai-allotments.js.map +1 -0
  559. package/src/lib/server/ai-assist-prompts.d.ts +102 -0
  560. package/src/lib/server/ai-assist-prompts.js +207 -0
  561. package/src/lib/server/ai-assist-prompts.js.map +1 -0
  562. package/src/lib/server/ai-assist.d.ts +119 -0
  563. package/src/lib/server/ai-assist.js +517 -0
  564. package/src/lib/server/ai-assist.js.map +1 -0
  565. package/src/lib/server/ai-crm-answer.d.ts +30 -0
  566. package/src/lib/server/ai-crm-answer.js +98 -0
  567. package/src/lib/server/ai-crm-answer.js.map +1 -0
  568. package/src/lib/server/ai-generate-component.d.ts +111 -0
  569. package/src/lib/server/ai-generate-component.js +643 -0
  570. package/src/lib/server/ai-generate-component.js.map +1 -0
  571. package/src/lib/server/ai-host-permissions.d.ts +46 -0
  572. package/src/lib/server/ai-host-permissions.js +204 -0
  573. package/src/lib/server/ai-host-permissions.js.map +1 -0
  574. package/src/lib/server/ai-insight-answer.d.ts +30 -0
  575. package/src/lib/server/ai-insight-answer.js +83 -0
  576. package/src/lib/server/ai-insight-answer.js.map +1 -0
  577. package/src/lib/server/ai-insight-digest-route.d.ts +30 -0
  578. package/src/lib/server/ai-insight-digest-route.js +156 -0
  579. package/src/lib/server/ai-insight-digest-route.js.map +1 -0
  580. package/src/lib/server/ai-jobs-batch.d.ts +48 -0
  581. package/src/lib/server/ai-jobs-batch.js +306 -0
  582. package/src/lib/server/ai-jobs-batch.js.map +1 -0
  583. package/src/lib/server/ai-jobs-beat-route.d.ts +36 -0
  584. package/src/lib/server/ai-jobs-beat-route.js +86 -0
  585. package/src/lib/server/ai-jobs-beat-route.js.map +1 -0
  586. package/src/lib/server/ai-jobs-cancel.d.ts +30 -0
  587. package/src/lib/server/ai-jobs-cancel.js +74 -0
  588. package/src/lib/server/ai-jobs-cancel.js.map +1 -0
  589. package/src/lib/server/ai-jobs-events-route.d.ts +31 -0
  590. package/src/lib/server/ai-jobs-events-route.js +51 -0
  591. package/src/lib/server/ai-jobs-events-route.js.map +1 -0
  592. package/src/lib/server/ai-jobs-events.d.ts +55 -0
  593. package/src/lib/server/ai-jobs-events.js +144 -0
  594. package/src/lib/server/ai-jobs-events.js.map +1 -0
  595. package/src/lib/server/ai-jobs-gate.d.ts +47 -0
  596. package/src/lib/server/ai-jobs-gate.js +106 -0
  597. package/src/lib/server/ai-jobs-gate.js.map +1 -0
  598. package/src/lib/server/ai-jobs-resume.d.ts +23 -0
  599. package/src/lib/server/ai-jobs-resume.js +209 -0
  600. package/src/lib/server/ai-jobs-resume.js.map +1 -0
  601. package/src/lib/server/ai-jobs-route.d.ts +32 -0
  602. package/src/lib/server/ai-jobs-route.js +307 -0
  603. package/src/lib/server/ai-jobs-route.js.map +1 -0
  604. package/src/lib/server/ai-models.d.ts +18 -0
  605. package/src/lib/server/ai-models.js +134 -0
  606. package/src/lib/server/ai-models.js.map +1 -0
  607. package/src/lib/server/ai-seo-apply.d.ts +53 -0
  608. package/src/lib/server/ai-seo-apply.js +294 -0
  609. package/src/lib/server/ai-seo-apply.js.map +1 -0
  610. package/src/lib/server/ai-usage.d.ts +18 -0
  611. package/src/lib/server/ai-usage.js +220 -0
  612. package/src/lib/server/ai-usage.js.map +1 -0
  613. package/src/lib/server/assist-chat.d.ts +234 -0
  614. package/src/lib/server/assist-chat.js +1446 -0
  615. package/src/lib/server/assist-chat.js.map +1 -0
  616. package/src/lib/server/assist-edit-applied.d.ts +22 -0
  617. package/src/lib/server/assist-edit-applied.js +239 -0
  618. package/src/lib/server/assist-edit-applied.js.map +1 -0
  619. package/src/lib/server/assist-edit.d.ts +124 -0
  620. package/src/lib/server/assist-edit.js +1000 -0
  621. package/src/lib/server/assist-edit.js.map +1 -0
  622. package/src/lib/server/assist-feedback.d.ts +31 -0
  623. package/src/lib/server/assist-feedback.js +115 -0
  624. package/src/lib/server/assist-feedback.js.map +1 -0
  625. package/src/lib/server/assist-view-context.d.ts +343 -0
  626. package/src/lib/server/assist-view-context.js +690 -0
  627. package/src/lib/server/assist-view-context.js.map +1 -0
  628. package/src/lib/server/billing-credits.d.ts +59 -0
  629. package/src/lib/server/billing-credits.js +146 -0
  630. package/src/lib/server/billing-credits.js.map +1 -0
  631. package/src/lib/server/billing-overage.d.ts +19 -0
  632. package/src/lib/server/billing-overage.js +337 -0
  633. package/src/lib/server/billing-overage.js.map +1 -0
  634. package/src/lib/server.d.ts +32 -0
  635. package/src/lib/server.js +265 -0
  636. package/src/lib/server.js.map +1 -0
  637. package/src/lib/subprocessors.d.ts +18 -0
  638. package/src/lib/subprocessors.js +52 -0
  639. package/src/lib/subprocessors.js.map +1 -0
  640. package/src/lib/tools/ai-component-tool.d.ts +99 -0
  641. package/src/lib/tools/ai-component-tool.js +369 -0
  642. package/src/lib/tools/ai-component-tool.js.map +1 -0
  643. package/src/lib/tools/ai-crm-tool.d.ts +106 -0
  644. package/src/lib/tools/ai-crm-tool.js +488 -0
  645. package/src/lib/tools/ai-crm-tool.js.map +1 -0
  646. package/src/lib/tools/ai-duplicate-resource-tool.d.ts +71 -0
  647. package/src/lib/tools/ai-duplicate-resource-tool.js +164 -0
  648. package/src/lib/tools/ai-duplicate-resource-tool.js.map +1 -0
  649. package/src/lib/tools/ai-experiment-tool.d.ts +40 -0
  650. package/src/lib/tools/ai-experiment-tool.js +155 -0
  651. package/src/lib/tools/ai-experiment-tool.js.map +1 -0
  652. package/src/lib/tools/ai-insight-tool.d.ts +46 -0
  653. package/src/lib/tools/ai-insight-tool.js +200 -0
  654. package/src/lib/tools/ai-insight-tool.js.map +1 -0
  655. package/src/lib/tools/ai-inventory-lookup-tool.d.ts +86 -0
  656. package/src/lib/tools/ai-inventory-lookup-tool.js +164 -0
  657. package/src/lib/tools/ai-inventory-lookup-tool.js.map +1 -0
  658. package/src/lib/tools/ai-products-tool.d.ts +65 -0
  659. package/src/lib/tools/ai-products-tool.js +644 -0
  660. package/src/lib/tools/ai-products-tool.js.map +1 -0
  661. package/src/lib/tools/ai-seo-tool.d.ts +162 -0
  662. package/src/lib/tools/ai-seo-tool.js +546 -0
  663. package/src/lib/tools/ai-seo-tool.js.map +1 -0
  664. package/src/lib/tools/ai-theme-tool.d.ts +101 -0
  665. package/src/lib/tools/ai-theme-tool.js +562 -0
  666. package/src/lib/tools/ai-theme-tool.js.map +1 -0
  667. package/src/lib/tools/ai-workflow-tool.d.ts +166 -0
  668. package/src/lib/tools/ai-workflow-tool.js +860 -0
  669. package/src/lib/tools/ai-workflow-tool.js.map +1 -0
  670. package/src/lib/usage/ai-allotment-alerts.d.ts +72 -0
  671. package/src/lib/usage/ai-allotment-alerts.js +157 -0
  672. package/src/lib/usage/ai-allotment-alerts.js.map +1 -0
  673. package/src/lib/usage/ai-allotments.d.ts +125 -0
  674. package/src/lib/usage/ai-allotments.js +239 -0
  675. package/src/lib/usage/ai-allotments.js.map +1 -0
  676. package/src/lib/usage/ai-model-sample.d.ts +36 -0
  677. package/src/lib/usage/ai-model-sample.js +68 -0
  678. package/src/lib/usage/ai-model-sample.js.map +1 -0
  679. package/src/lib/usage/ai-usage-alerts.d.ts +55 -0
  680. package/src/lib/usage/ai-usage-alerts.js +114 -0
  681. package/src/lib/usage/ai-usage-alerts.js.map +1 -0
  682. package/src/lib/usage/ai-usage-by-user.d.ts +161 -0
  683. package/src/lib/usage/ai-usage-by-user.js +211 -0
  684. package/src/lib/usage/ai-usage-by-user.js.map +1 -0
  685. package/src/lib/usage/ai-usage-eraser.d.ts +29 -0
  686. package/src/lib/usage/ai-usage-eraser.js +40 -0
  687. package/src/lib/usage/ai-usage-eraser.js.map +1 -0
  688. package/src/lib/usage/ai-usage-meter.d.ts +39 -0
  689. package/src/lib/usage/ai-usage-meter.js +85 -0
  690. package/src/lib/usage/ai-usage-meter.js.map +1 -0
  691. package/src/lib/usage/ai-usage-wire.d.ts +184 -0
  692. package/src/lib/usage/ai-usage-wire.js +98 -0
  693. package/src/lib/usage/ai-usage-wire.js.map +1 -0
  694. package/src/lib/usage/assist-ceiling.d.ts +87 -0
  695. package/src/lib/usage/assist-ceiling.js +110 -0
  696. package/src/lib/usage/assist-ceiling.js.map +1 -0
  697. package/src/lib/usage/assist-free-taste.d.ts +225 -0
  698. package/src/lib/usage/assist-free-taste.js +308 -0
  699. package/src/lib/usage/assist-free-taste.js.map +1 -0
  700. package/src/lib/usage/assist-refusals.d.ts +69 -0
  701. package/src/lib/usage/assist-refusals.js +79 -0
  702. package/src/lib/usage/assist-refusals.js.map +1 -0
  703. package/src/lib/usage/assist-signal-mining.d.ts +375 -0
  704. package/src/lib/usage/assist-signal-mining.js +344 -0
  705. package/src/lib/usage/assist-signal-mining.js.map +1 -0
  706. package/src/lib/usage/assist-usage.d.ts +571 -0
  707. package/src/lib/usage/assist-usage.js +978 -0
  708. package/src/lib/usage/assist-usage.js.map +1 -0
  709. package/src/lib/usage/staff-org-ai.d.ts +242 -0
  710. package/src/lib/usage/staff-org-ai.js +173 -0
  711. package/src/lib/usage/staff-org-ai.js.map +1 -0
  712. package/src/lib/usage/staff-org-usage-ai.d.ts +83 -0
  713. package/src/lib/usage/staff-org-usage-ai.js +59 -0
  714. package/src/lib/usage/staff-org-usage-ai.js.map +1 -0
  715. package/src/lib/usage/staff-orgs-ai-spend.d.ts +83 -0
  716. package/src/lib/usage/staff-orgs-ai-spend.js +114 -0
  717. package/src/lib/usage/staff-orgs-ai-spend.js.map +1 -0
@@ -0,0 +1,1850 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Aglyn LLC
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */ import { _ as _extends } from "@swc/helpers/_/_extends";
17
+ import { emptyAiSiteInventory } from "../../model/ai-site-inventory.js";
18
+ function section(prefix, name, uses, items, build) {
19
+ const nodes = {};
20
+ let counter = 0;
21
+ const add = (node, id)=>{
22
+ const key = id != null ? id : `${prefix}${++counter}`;
23
+ nodes[key] = node;
24
+ return key;
25
+ };
26
+ const root = add(build(add), `${prefix}section`);
27
+ nodes['root'] = {
28
+ componentId: 'div',
29
+ nodes: [
30
+ root
31
+ ]
32
+ };
33
+ return {
34
+ answer: {
35
+ rootId: 'root',
36
+ nodes
37
+ },
38
+ section: {
39
+ name,
40
+ uses,
41
+ items
42
+ }
43
+ };
44
+ }
45
+ const typography = (variant, children, component)=>({
46
+ componentId: 'muiTypography',
47
+ props: _extends({
48
+ variant,
49
+ children
50
+ }, component ? {
51
+ component
52
+ } : {})
53
+ });
54
+ /** A Section holding a Container holding a column Stack: the frame every golden section uses. */ function framed(add, children, maxWidth, py, stack = {}) {
55
+ const column = add({
56
+ componentId: 'muiStack',
57
+ props: _extends({
58
+ direction: 'column'
59
+ }, stack),
60
+ sx: {
61
+ gap: 2
62
+ },
63
+ nodes: children
64
+ });
65
+ const container = add({
66
+ componentId: 'muiContainer',
67
+ props: {
68
+ maxWidth
69
+ },
70
+ sx: {
71
+ py
72
+ },
73
+ nodes: [
74
+ column
75
+ ]
76
+ });
77
+ return {
78
+ componentId: 'section',
79
+ props: {
80
+ element: 'section'
81
+ },
82
+ nodes: [
83
+ container
84
+ ]
85
+ };
86
+ }
87
+ function hero(prefix, input) {
88
+ var _input_name;
89
+ return section(prefix, (_input_name = input.name) != null ? _input_name : 'hero', input.cta ? [
90
+ input.cta.screenId
91
+ ] : [], 0, (add)=>{
92
+ const children = [
93
+ add(typography('h1', input.title, 'h1')),
94
+ add(typography('body1', input.lead))
95
+ ];
96
+ if (input.cta) {
97
+ children.push(add({
98
+ componentId: 'muiButton',
99
+ props: {
100
+ children: input.cta.label,
101
+ variant: 'contained',
102
+ screenId: input.cta.screenId
103
+ }
104
+ }));
105
+ }
106
+ if (input.image) children.push(add({
107
+ componentId: 'image',
108
+ props: {
109
+ alt: input.image
110
+ }
111
+ }));
112
+ return framed(add, children, 'md', 8, {
113
+ alignItems: 'flex-start'
114
+ });
115
+ });
116
+ }
117
+ /**
118
+ * The size each item of a golden row takes (AGL-3055): full width on a phone,
119
+ * two across from sm where four or more share the row, and two, three or four
120
+ * across from md, as the stored string the Grid renderer reads.
121
+ */ function span(items) {
122
+ if (items <= 2) return 'xs:12 md:6';
123
+ if (items === 3) return 'xs:12 md:4';
124
+ return items === 4 ? 'xs:12 sm:6 md:3' : 'xs:12 sm:6 md:4';
125
+ }
126
+ /** A Grid item of a row of `items`, holding one element. */ function cell(add, items, child, repeat) {
127
+ return add(_extends({
128
+ componentId: 'muiGrid',
129
+ props: {
130
+ size: span(items)
131
+ },
132
+ nodes: [
133
+ child
134
+ ]
135
+ }, repeat ? {
136
+ repeat
137
+ } : {}));
138
+ }
139
+ /** A row of Grid items: a Grid container spaced by its own spacing (AGL-3055). */ function row(add, cells) {
140
+ return add({
141
+ componentId: 'muiGrid',
142
+ props: {
143
+ container: true,
144
+ spacing: 3
145
+ },
146
+ nodes: cells
147
+ });
148
+ }
149
+ function cards(prefix, input) {
150
+ return section(prefix, input.name, [
151
+ input.componentId
152
+ ], input.items.length, (add)=>{
153
+ const cells = input.items.map((propValues)=>cell(add, input.items.length, add({
154
+ componentId: 'reusableInstance',
155
+ props: {
156
+ refId: input.componentId,
157
+ propValues
158
+ }
159
+ })));
160
+ const children = [
161
+ add(typography('h2', input.heading, 'h2'))
162
+ ];
163
+ if (input.intro) children.push(add(typography('body1', input.intro)));
164
+ children.push(row(add, cells));
165
+ return framed(add, children, 'lg', 8);
166
+ });
167
+ }
168
+ /** A short list: fewer rows than the plan rules count as repeated items. */ function list(prefix, input) {
169
+ return section(prefix, input.name, [], input.items.length, (add)=>{
170
+ const rows = input.items.map((item)=>add({
171
+ componentId: 'muiListItem',
172
+ nodes: [
173
+ add({
174
+ componentId: 'muiListItemText',
175
+ props: _extends({
176
+ primary: item.primary
177
+ }, item.secondary ? {
178
+ secondary: item.secondary
179
+ } : {})
180
+ })
181
+ ]
182
+ }));
183
+ return framed(add, [
184
+ add(typography('h2', input.heading, 'h2')),
185
+ add({
186
+ componentId: 'muiList',
187
+ props: {
188
+ dense: false
189
+ },
190
+ nodes: rows
191
+ })
192
+ ], 'md', 6);
193
+ });
194
+ }
195
+ function prose(prefix, input) {
196
+ return section(prefix, input.name, [], 0, (add)=>framed(add, [
197
+ add(typography('h2', input.heading, 'h2')),
198
+ ...input.paragraphs.map((copy)=>add(typography('body1', copy)))
199
+ ], 'md', 6));
200
+ }
201
+ function form(prefix, input) {
202
+ return section(prefix, input.name, [
203
+ input.formId
204
+ ], 0, (add)=>framed(add, [
205
+ add(typography('h2', input.heading, 'h2')),
206
+ add(typography('body1', input.intro)),
207
+ add({
208
+ componentId: 'form',
209
+ props: {
210
+ formId: input.formId
211
+ }
212
+ })
213
+ ], 'sm', 8));
214
+ }
215
+ /**
216
+ * Items drawn where they repeat, each a Card: what a workspace that keeps no
217
+ * reusable components builds instead of placing a component (AGL-3030).
218
+ */ function inlineCards(prefix, input) {
219
+ return section(prefix, input.name, [], input.items.length, (add)=>{
220
+ const cells = input.items.map((item)=>cell(add, input.items.length, add({
221
+ componentId: 'muiCard',
222
+ props: {
223
+ variant: 'outlined'
224
+ },
225
+ nodes: [
226
+ add({
227
+ componentId: 'muiCardContent',
228
+ nodes: [
229
+ add(typography('h3', item.title, 'h3')),
230
+ add(typography('body2', item.summary))
231
+ ]
232
+ })
233
+ ]
234
+ })));
235
+ return framed(add, [
236
+ add(typography('h2', input.heading, 'h2')),
237
+ row(add, cells)
238
+ ], 'lg', 8);
239
+ });
240
+ }
241
+ /**
242
+ * The same cards written once (AGL-3053): one Grid item holding a Card whose
243
+ * title is `{{1}}` and whose summary is `{{2}}`, with every card's pair listed
244
+ * on the item, which the section check draws into exactly the cells
245
+ * `inlineCards` writes out.
246
+ */ function inlineCardsOnce(prefix, input) {
247
+ return section(prefix, input.name, [], input.items.length, (add)=>{
248
+ const item = cell(add, input.items.length, add({
249
+ componentId: 'muiCard',
250
+ props: {
251
+ variant: 'outlined'
252
+ },
253
+ nodes: [
254
+ add({
255
+ componentId: 'muiCardContent',
256
+ nodes: [
257
+ add(typography('h3', '{{1}}', 'h3')),
258
+ add(typography('body2', '{{2}}'))
259
+ ]
260
+ })
261
+ ]
262
+ }), input.items.map((entry)=>[
263
+ entry.title,
264
+ entry.summary
265
+ ]));
266
+ return framed(add, [
267
+ add(typography('h2', input.heading, 'h2')),
268
+ row(add, [
269
+ item
270
+ ])
271
+ ], 'lg', 8);
272
+ });
273
+ }
274
+ /**
275
+ * A form the page carries itself: a Form with no formId, holding its Form
276
+ * Fields — what a workspace that keeps no saved forms builds instead of
277
+ * placing one (AGL-3030). The site's submit route collects it by its name.
278
+ */ function inlineForm(prefix, input) {
279
+ return section(prefix, input.name, [], 0, (add)=>framed(add, [
280
+ add(typography('h2', input.heading, 'h2')),
281
+ add(typography('body1', input.intro)),
282
+ add({
283
+ componentId: 'form',
284
+ props: {
285
+ formName: input.formName,
286
+ submitLabel: input.submitLabel
287
+ },
288
+ nodes: input.fields.map((field)=>add({
289
+ componentId: 'formField',
290
+ props: _extends({}, field)
291
+ }))
292
+ })
293
+ ], 'sm', 8));
294
+ }
295
+ function callToAction(prefix, input) {
296
+ return section(prefix, input.name, [
297
+ input.screenId
298
+ ], 0, (add)=>framed(add, [
299
+ add(typography('h2', input.heading, 'h2')),
300
+ add(typography('body1', input.body)),
301
+ add({
302
+ componentId: 'muiButton',
303
+ props: {
304
+ children: input.label,
305
+ variant: 'contained',
306
+ screenId: input.screenId
307
+ }
308
+ })
309
+ ], 'md', 8, {
310
+ alignItems: 'center'
311
+ }));
312
+ }
313
+ const THEME = {
314
+ summary: [
315
+ 'Light scheme with the theme’s default type'
316
+ ],
317
+ colors: {
318
+ 'primary.main': '#1f5fa8',
319
+ 'secondary.main': '#c2410c'
320
+ },
321
+ fonts: [
322
+ 'Inter'
323
+ ]
324
+ };
325
+ const SITE_LAYOUT = {
326
+ id: 'lay-site',
327
+ name: 'Site layout',
328
+ parentId: null
329
+ };
330
+ const HOME = {
331
+ id: 'scr-home',
332
+ name: 'Home',
333
+ slug: '/',
334
+ layoutId: 'lay-site',
335
+ template: false
336
+ };
337
+ function site(hostId, parts) {
338
+ var _parts_components, _parts_forms, _parts_layouts, _parts_screens;
339
+ return _extends({}, emptyAiSiteInventory(hostId), {
340
+ components: (_parts_components = parts.components) != null ? _parts_components : [],
341
+ forms: (_parts_forms = parts.forms) != null ? _parts_forms : [],
342
+ layouts: (_parts_layouts = parts.layouts) != null ? _parts_layouts : [
343
+ SITE_LAYOUT
344
+ ],
345
+ screens: [
346
+ HOME,
347
+ ...(_parts_screens = parts.screens) != null ? _parts_screens : []
348
+ ],
349
+ theme: THEME
350
+ });
351
+ }
352
+ function brief(input) {
353
+ const components = new Set(input.inventory.components.map((row)=>row.id));
354
+ const forms = new Set(input.inventory.forms.map((row)=>row.id));
355
+ const screens = new Set(input.inventory.screens.map((row)=>row.id));
356
+ const reuse = [
357
+ {
358
+ kind: 'layout',
359
+ id: input.layout,
360
+ purpose: 'the page renders inside it'
361
+ }
362
+ ];
363
+ const seen = new Set([
364
+ input.layout
365
+ ]);
366
+ for (const { section: planned } of input.sections){
367
+ for (const ref of planned.uses){
368
+ if (seen.has(ref)) continue;
369
+ seen.add(ref);
370
+ if (components.has(ref)) reuse.push({
371
+ kind: 'component',
372
+ id: ref,
373
+ purpose: planned.name
374
+ });
375
+ else if (forms.has(ref)) reuse.push({
376
+ kind: 'form',
377
+ id: ref,
378
+ purpose: planned.name
379
+ });
380
+ else if (screens.has(ref)) reuse.push({
381
+ kind: 'screen',
382
+ id: ref,
383
+ purpose: `linked from ${planned.name}`
384
+ });
385
+ }
386
+ }
387
+ return {
388
+ id: input.id,
389
+ icp: input.icp,
390
+ pageType: input.pageType,
391
+ brief: input.brief,
392
+ inventory: input.inventory,
393
+ plan: {
394
+ reuse,
395
+ create: [],
396
+ screens: [
397
+ {
398
+ title: input.title,
399
+ slug: input.slug,
400
+ layout: input.layout,
401
+ template: null,
402
+ duplicateOf: null,
403
+ nav: input.nav,
404
+ seoTitle: input.seo.title,
405
+ seoDescription: input.seo.description,
406
+ sections: input.sections.map((entry)=>entry.section)
407
+ }
408
+ ]
409
+ },
410
+ answers: input.sections.map((entry)=>entry.answer),
411
+ seo: input.seo
412
+ };
413
+ }
414
+ export const AI_PAGE_BRIEF_FIXTURES = [
415
+ // ── Agency client sites ─────────────────────────────────────────────────
416
+ brief({
417
+ id: 'agency-roofing-landing',
418
+ icp: 'agency',
419
+ pageType: 'landing',
420
+ brief: 'A landing page for our spring roof inspection offer in Springfield: what the inspection covers, two customer quotes, and the quote request form.',
421
+ inventory: site('host-acme-roofing', {
422
+ components: [
423
+ {
424
+ id: 'cmp-service-card',
425
+ name: 'Service card',
426
+ props: {
427
+ title: 'text',
428
+ summary: 'text'
429
+ }
430
+ },
431
+ {
432
+ id: 'cmp-testimonial',
433
+ name: 'Testimonial',
434
+ props: {
435
+ quote: 'text',
436
+ name: 'text',
437
+ role: 'text'
438
+ }
439
+ }
440
+ ],
441
+ forms: [
442
+ {
443
+ id: 'frm-quote',
444
+ name: 'Quote request',
445
+ fields: [
446
+ 'name',
447
+ 'email',
448
+ 'phone',
449
+ 'message'
450
+ ]
451
+ }
452
+ ],
453
+ screens: [
454
+ {
455
+ id: 'scr-contact',
456
+ name: 'Contact',
457
+ slug: 'contact',
458
+ layoutId: 'lay-site',
459
+ template: false
460
+ }
461
+ ]
462
+ }),
463
+ title: 'Spring roof inspections',
464
+ slug: '/spring-roof-inspection',
465
+ layout: 'lay-site',
466
+ nav: false,
467
+ seo: {
468
+ title: 'Spring Roof Inspections in Springfield',
469
+ description: 'A licensed roofer checks shingles, flashing and gutters, then sends photos and a written report within two days.'
470
+ },
471
+ sections: [
472
+ hero('a', {
473
+ title: 'Spring roof inspections in Springfield',
474
+ lead: 'A licensed roofer checks shingles, flashing and gutters, and sends you photos and a written report within two days.',
475
+ cta: {
476
+ label: 'Request a quote',
477
+ screenId: 'scr-contact'
478
+ },
479
+ image: 'A roofer inspecting shingles on a two-story house'
480
+ }),
481
+ cards('b', {
482
+ name: 'what the inspection covers',
483
+ heading: 'What the inspection covers',
484
+ componentId: 'cmp-service-card',
485
+ items: [
486
+ {
487
+ title: 'Shingles and flashing',
488
+ summary: 'Lifted, cracked or missing shingles, and the seals around chimneys and vents.'
489
+ },
490
+ {
491
+ title: 'Gutters and drainage',
492
+ summary: 'Clogs, sagging runs and downspouts that send water toward the foundation.'
493
+ },
494
+ {
495
+ title: 'Attic and ventilation',
496
+ summary: 'Signs of leaks, damp insulation and blocked soffit vents.'
497
+ }
498
+ ]
499
+ }),
500
+ cards('c', {
501
+ name: 'customer quotes',
502
+ heading: 'What homeowners say',
503
+ componentId: 'cmp-testimonial',
504
+ items: [
505
+ {
506
+ quote: 'They found a failed vent boot before it leaked into the bedroom.',
507
+ name: '[customer name]',
508
+ role: 'Homeowner, Springfield'
509
+ },
510
+ {
511
+ quote: 'The report had photos of every problem and a price for each fix.',
512
+ name: '[customer name]',
513
+ role: 'Homeowner, Riverton'
514
+ }
515
+ ]
516
+ }),
517
+ form('d', {
518
+ name: 'quote request form',
519
+ heading: 'Book your inspection',
520
+ intro: 'Tell us about your roof and when you are home. We confirm a time within one business day.',
521
+ formId: 'frm-quote'
522
+ })
523
+ ]
524
+ }),
525
+ brief({
526
+ id: 'agency-dental-implants-service',
527
+ icp: 'agency',
528
+ pageType: 'service',
529
+ brief: 'A service page for dental implants: how treatment works step by step, our two implant dentists, and the appointment request form.',
530
+ inventory: site('host-lakeside-dental', {
531
+ components: [
532
+ {
533
+ id: 'cmp-dentist-card',
534
+ name: 'Dentist card',
535
+ props: {
536
+ name: 'text',
537
+ credentials: 'text',
538
+ bio: 'text'
539
+ }
540
+ },
541
+ {
542
+ id: 'cmp-treatment-step',
543
+ name: 'Treatment step',
544
+ props: {
545
+ step: 'text',
546
+ detail: 'text'
547
+ }
548
+ }
549
+ ],
550
+ forms: [
551
+ {
552
+ id: 'frm-appointment',
553
+ name: 'Appointment request',
554
+ fields: [
555
+ 'name',
556
+ 'email',
557
+ 'phone',
558
+ 'preferred time'
559
+ ]
560
+ }
561
+ ]
562
+ }),
563
+ title: 'Dental implants',
564
+ slug: '/dental-implants',
565
+ layout: 'lay-site',
566
+ nav: true,
567
+ seo: {
568
+ title: 'Dental Implants at Lakeside Dental',
569
+ description: 'Permanent tooth replacement placed and restored in one office, from the first 3D scan to the final crown.'
570
+ },
571
+ sections: [
572
+ hero('a', {
573
+ title: 'Dental implants at Lakeside Dental',
574
+ lead: 'A permanent tooth replacement placed and restored in one office, from the first scan to the final crown.',
575
+ image: 'A dentist showing a patient an implant model'
576
+ }),
577
+ cards('b', {
578
+ name: 'how treatment works',
579
+ heading: 'How treatment works',
580
+ componentId: 'cmp-treatment-step',
581
+ items: [
582
+ {
583
+ step: 'Consultation and 3D scan',
584
+ detail: 'We check bone density and plan the implant position.'
585
+ },
586
+ {
587
+ step: 'Implant placement',
588
+ detail: 'A short procedure under local anesthetic.'
589
+ },
590
+ {
591
+ step: 'Healing',
592
+ detail: 'Usually three to six months while the implant bonds with the bone.'
593
+ },
594
+ {
595
+ step: 'Crown fitting',
596
+ detail: 'A custom crown matched to your natural teeth.'
597
+ }
598
+ ]
599
+ }),
600
+ cards('c', {
601
+ name: 'implant dentists',
602
+ heading: 'Your implant team',
603
+ componentId: 'cmp-dentist-card',
604
+ items: [
605
+ {
606
+ name: '[dentist name]',
607
+ credentials: 'DDS, implant fellowship',
608
+ bio: 'Places and restores implants in the same office.'
609
+ },
610
+ {
611
+ name: '[dentist name]',
612
+ credentials: 'DMD, prosthodontist',
613
+ bio: 'Designs crowns, bridges and full-arch restorations.'
614
+ }
615
+ ]
616
+ }),
617
+ form('d', {
618
+ name: 'appointment request form',
619
+ heading: 'Ask for a consultation',
620
+ intro: 'Send a few details and we call you to find a time. Bring any X-rays you already have.',
621
+ formId: 'frm-appointment'
622
+ })
623
+ ]
624
+ }),
625
+ brief({
626
+ id: 'agency-law-firm-about',
627
+ icp: 'agency',
628
+ pageType: 'about',
629
+ brief: 'An about page for a family law firm: how the firm works with clients, the three attorneys and what each practices, and a link to book a consultation.',
630
+ inventory: site('host-hart-law', {
631
+ components: [
632
+ {
633
+ id: 'cmp-attorney-card',
634
+ name: 'Attorney card',
635
+ props: {
636
+ name: 'text',
637
+ practice: 'text'
638
+ }
639
+ }
640
+ ],
641
+ screens: [
642
+ {
643
+ id: 'scr-contact',
644
+ name: 'Contact',
645
+ slug: 'contact',
646
+ layoutId: 'lay-site',
647
+ template: false
648
+ }
649
+ ]
650
+ }),
651
+ title: 'About the firm',
652
+ slug: '/about',
653
+ layout: 'lay-site',
654
+ nav: true,
655
+ seo: {
656
+ title: 'About Hart & Owens Family Law',
657
+ description: 'A family law practice in Marion County. One attorney from first meeting to final order, and a written estimate before filing.'
658
+ },
659
+ sections: [
660
+ hero('a', {
661
+ title: 'About Hart & Owens',
662
+ lead: 'A family law practice that has represented parents and spouses in Marion County since [founding year].'
663
+ }),
664
+ prose('b', {
665
+ name: 'how we work',
666
+ heading: 'How we work',
667
+ paragraphs: [
668
+ 'Every client works with one attorney from the first meeting to the final order, and gets a written estimate before any filing.',
669
+ 'We settle when settlement protects you, and we go to trial when it does not.'
670
+ ]
671
+ }),
672
+ cards('c', {
673
+ name: 'attorneys',
674
+ heading: 'Our attorneys',
675
+ componentId: 'cmp-attorney-card',
676
+ items: [
677
+ {
678
+ name: '[attorney name]',
679
+ practice: 'Divorce and property division'
680
+ },
681
+ {
682
+ name: '[attorney name]',
683
+ practice: 'Custody and parenting plans'
684
+ },
685
+ {
686
+ name: '[attorney name]',
687
+ practice: 'Adoption and guardianship'
688
+ }
689
+ ]
690
+ }),
691
+ callToAction('d', {
692
+ name: 'book a consultation',
693
+ heading: 'Talk to an attorney',
694
+ body: 'The first consultation covers your situation, your options and what each would cost.',
695
+ label: 'Schedule a consultation',
696
+ screenId: 'scr-contact'
697
+ })
698
+ ]
699
+ }),
700
+ brief({
701
+ id: 'agency-hvac-pricing',
702
+ icp: 'agency',
703
+ pageType: 'pricing',
704
+ brief: 'A pricing page for heating and cooling maintenance plans: the three plans, what every visit includes, and a button to schedule service.',
705
+ inventory: site('host-northside-hvac', {
706
+ components: [
707
+ {
708
+ id: 'cmp-plan-card',
709
+ name: 'Plan card',
710
+ props: {
711
+ name: 'text',
712
+ price: 'text',
713
+ summary: 'text'
714
+ }
715
+ },
716
+ {
717
+ id: 'cmp-checklist-item',
718
+ name: 'Checklist item',
719
+ props: {
720
+ item: 'text'
721
+ }
722
+ }
723
+ ],
724
+ screens: [
725
+ {
726
+ id: 'scr-schedule',
727
+ name: 'Schedule service',
728
+ slug: 'schedule',
729
+ layoutId: 'lay-site',
730
+ template: false
731
+ }
732
+ ]
733
+ }),
734
+ title: 'Maintenance plans',
735
+ slug: '/maintenance-plans',
736
+ layout: 'lay-site',
737
+ nav: true,
738
+ seo: {
739
+ title: 'Heating and Cooling Maintenance Plans',
740
+ description: 'Two tune-ups a year, priority scheduling and a repair discount for one yearly price. Plans for one system or the whole home.'
741
+ },
742
+ sections: [
743
+ hero('a', {
744
+ title: 'Heating and cooling maintenance plans',
745
+ lead: 'Two tune-ups a year, priority scheduling and a discount on repairs, for one flat yearly price.'
746
+ }),
747
+ cards('b', {
748
+ name: 'plans',
749
+ heading: 'Choose a plan',
750
+ componentId: 'cmp-plan-card',
751
+ items: [
752
+ {
753
+ name: 'Single system',
754
+ price: '[price] a year',
755
+ summary: 'One furnace or one air conditioner.'
756
+ },
757
+ {
758
+ name: 'Whole home',
759
+ price: '[price] a year',
760
+ summary: 'A furnace and an air conditioner.'
761
+ },
762
+ {
763
+ name: 'Multi-zone',
764
+ price: '[price] a year',
765
+ summary: 'Up to three systems at one address.'
766
+ }
767
+ ]
768
+ }),
769
+ cards('c', {
770
+ name: 'what every visit includes',
771
+ heading: 'Every visit includes',
772
+ componentId: 'cmp-checklist-item',
773
+ items: [
774
+ {
775
+ item: 'Filter change and coil cleaning'
776
+ },
777
+ {
778
+ item: 'Refrigerant and pressure checks'
779
+ },
780
+ {
781
+ item: 'A written report on the system’s condition'
782
+ }
783
+ ]
784
+ }),
785
+ callToAction('d', {
786
+ name: 'schedule service',
787
+ heading: 'Start with a tune-up',
788
+ body: 'Pick a time and we sign you up at the visit.',
789
+ label: 'Schedule service',
790
+ screenId: 'scr-schedule'
791
+ })
792
+ ]
793
+ }),
794
+ // ── Multi-brand businesses ──────────────────────────────────────────────
795
+ brief({
796
+ id: 'multibrand-restaurant-group-event',
797
+ icp: 'multi-brand',
798
+ pageType: 'event',
799
+ brief: 'An event page for the Piedmont wine dinner at Osteria Lume, one of our group’s restaurants: the courses and pairings, a note about the winemaker, and the reservation form.',
800
+ inventory: site('host-harbor-group-osteria', {
801
+ components: [
802
+ {
803
+ id: 'cmp-menu-item',
804
+ name: 'Menu item',
805
+ props: {
806
+ dish: 'text',
807
+ pairing: 'text'
808
+ }
809
+ }
810
+ ],
811
+ layouts: [
812
+ {
813
+ id: 'lay-osteria',
814
+ name: 'Osteria layout',
815
+ parentId: null
816
+ },
817
+ {
818
+ id: 'lay-grill',
819
+ name: 'Harbor Grill layout',
820
+ parentId: null
821
+ }
822
+ ],
823
+ forms: [
824
+ {
825
+ id: 'frm-reservation',
826
+ name: 'Event reservation',
827
+ fields: [
828
+ 'name',
829
+ 'email',
830
+ 'party size'
831
+ ]
832
+ }
833
+ ],
834
+ screens: [
835
+ {
836
+ id: 'scr-menu',
837
+ name: 'Menu',
838
+ slug: 'menu',
839
+ layoutId: 'lay-osteria',
840
+ template: false
841
+ }
842
+ ]
843
+ }),
844
+ title: 'Piedmont wine dinner',
845
+ slug: '/events/piedmont-wine-dinner',
846
+ layout: 'lay-osteria',
847
+ nav: false,
848
+ seo: {
849
+ title: 'Piedmont Wine Dinner at Osteria Lume',
850
+ description: 'Five courses paired with wines from one family vineyard, with a tasting led by the winemaker. Reserve seats online.'
851
+ },
852
+ sections: [
853
+ hero('a', {
854
+ title: 'Piedmont wine dinner at Osteria Lume',
855
+ lead: 'Five courses paired with wines from one family vineyard, on [event date] at 7 p.m.',
856
+ image: 'A long table set for dinner with wine glasses'
857
+ }),
858
+ cards('b', {
859
+ name: 'courses and pairings',
860
+ heading: 'The menu',
861
+ componentId: 'cmp-menu-item',
862
+ items: [
863
+ {
864
+ dish: 'Vitello tonnato',
865
+ pairing: 'Paired with Arneis'
866
+ },
867
+ {
868
+ dish: 'Agnolotti del plin',
869
+ pairing: 'Paired with Dolcetto'
870
+ },
871
+ {
872
+ dish: 'Braised short rib',
873
+ pairing: 'Paired with Barbaresco'
874
+ },
875
+ {
876
+ dish: 'Hazelnut torte',
877
+ pairing: 'Paired with Moscato d’Asti'
878
+ }
879
+ ]
880
+ }),
881
+ prose('c', {
882
+ name: 'about the winemaker',
883
+ heading: 'About the winemaker',
884
+ paragraphs: [
885
+ 'The vineyard’s third-generation winemaker leads a short tasting before the first course and answers questions at each table.'
886
+ ]
887
+ }),
888
+ form('d', {
889
+ name: 'reservation form',
890
+ heading: 'Reserve seats',
891
+ intro: 'Seats are limited to [number of seats]. We confirm by email and hold your table until 7:15 p.m.',
892
+ formId: 'frm-reservation'
893
+ })
894
+ ]
895
+ }),
896
+ brief({
897
+ id: 'multibrand-home-goods-product',
898
+ icp: 'multi-brand',
899
+ pageType: 'product',
900
+ brief: 'A product page for the Hearth cast iron skillet on the Hearth brand site: three features, two reviews from home cooks, and a link to where to buy.',
901
+ inventory: site('host-hearth-and-grain', {
902
+ components: [
903
+ {
904
+ id: 'cmp-feature',
905
+ name: 'Feature',
906
+ props: {
907
+ title: 'text',
908
+ body: 'text'
909
+ }
910
+ },
911
+ {
912
+ id: 'cmp-review',
913
+ name: 'Review',
914
+ props: {
915
+ quote: 'text',
916
+ name: 'text'
917
+ }
918
+ }
919
+ ],
920
+ layouts: [
921
+ {
922
+ id: 'lay-hearth',
923
+ name: 'Hearth layout',
924
+ parentId: null
925
+ },
926
+ {
927
+ id: 'lay-grain',
928
+ name: 'Grain layout',
929
+ parentId: null
930
+ }
931
+ ],
932
+ screens: [
933
+ {
934
+ id: 'scr-stores',
935
+ name: 'Where to buy',
936
+ slug: 'where-to-buy',
937
+ layoutId: 'lay-hearth',
938
+ template: false
939
+ }
940
+ ]
941
+ }),
942
+ title: 'Cast iron skillet',
943
+ slug: '/cast-iron-skillet',
944
+ layout: 'lay-hearth',
945
+ nav: false,
946
+ seo: {
947
+ title: 'Hearth 12-Inch Cast Iron Skillet',
948
+ description: 'A seasoned 12-inch skillet with a milled cooking surface, a thick base that holds heat and a helper handle.'
949
+ },
950
+ sections: [
951
+ hero('a', {
952
+ title: 'The Hearth cast iron skillet',
953
+ lead: 'A 12-inch skillet with a smooth-milled cooking surface, seasoned and ready to use.',
954
+ image: 'A cast iron skillet searing vegetables on a stovetop'
955
+ }),
956
+ cards('b', {
957
+ name: 'features',
958
+ heading: 'Why it cooks evenly',
959
+ componentId: 'cmp-feature',
960
+ items: [
961
+ {
962
+ title: 'Milled surface',
963
+ body: 'Food releases without a thick coat of oil.'
964
+ },
965
+ {
966
+ title: 'Thick base',
967
+ body: 'Holds heat when cold food hits the pan.'
968
+ },
969
+ {
970
+ title: 'Helper handle',
971
+ body: 'A second grip for lifting a full pan.'
972
+ }
973
+ ]
974
+ }),
975
+ cards('c', {
976
+ name: 'reviews',
977
+ heading: 'From home cooks',
978
+ componentId: 'cmp-review',
979
+ items: [
980
+ {
981
+ quote: 'Eggs slide right off after a week of use.',
982
+ name: '[reviewer name]'
983
+ },
984
+ {
985
+ quote: 'Heavy, but it holds a sear better than anything I own.',
986
+ name: '[reviewer name]'
987
+ }
988
+ ]
989
+ }),
990
+ callToAction('d', {
991
+ name: 'where to buy',
992
+ heading: 'Find it near you',
993
+ body: 'Hearth skillets are sold in kitchen stores and online.',
994
+ label: 'Where to buy',
995
+ screenId: 'scr-stores'
996
+ })
997
+ ]
998
+ }),
999
+ brief({
1000
+ id: 'multibrand-fitness-studios-pricing',
1001
+ icp: 'multi-brand',
1002
+ pageType: 'pricing',
1003
+ brief: 'A pricing page for Pulse Cycle memberships across all Pulse Cycle studios: the three memberships, the questions riders ask most, and the free class form.',
1004
+ inventory: site('host-pulse-studios-cycle', {
1005
+ components: [
1006
+ {
1007
+ id: 'cmp-plan-card',
1008
+ name: 'Membership card',
1009
+ props: {
1010
+ name: 'text',
1011
+ price: 'text',
1012
+ summary: 'text'
1013
+ }
1014
+ },
1015
+ {
1016
+ id: 'cmp-faq-item',
1017
+ name: 'FAQ item',
1018
+ props: {
1019
+ question: 'text',
1020
+ answer: 'text'
1021
+ }
1022
+ }
1023
+ ],
1024
+ layouts: [
1025
+ {
1026
+ id: 'lay-cycle',
1027
+ name: 'Pulse Cycle layout',
1028
+ parentId: null
1029
+ },
1030
+ {
1031
+ id: 'lay-yoga',
1032
+ name: 'Pulse Yoga layout',
1033
+ parentId: null
1034
+ }
1035
+ ],
1036
+ forms: [
1037
+ {
1038
+ id: 'frm-trial',
1039
+ name: 'Free class',
1040
+ fields: [
1041
+ 'name',
1042
+ 'email',
1043
+ 'studio'
1044
+ ]
1045
+ }
1046
+ ]
1047
+ }),
1048
+ title: 'Memberships',
1049
+ slug: '/memberships',
1050
+ layout: 'lay-cycle',
1051
+ nav: true,
1052
+ seo: {
1053
+ title: 'Pulse Cycle Memberships',
1054
+ description: 'Ride at any Pulse Cycle studio with a monthly membership or a class pack. Every membership starts with a free class.'
1055
+ },
1056
+ sections: [
1057
+ hero('a', {
1058
+ title: 'Pulse Cycle memberships',
1059
+ lead: 'Ride at any Pulse Cycle studio. Every membership starts with a free class.'
1060
+ }),
1061
+ cards('b', {
1062
+ name: 'memberships',
1063
+ heading: 'Memberships',
1064
+ componentId: 'cmp-plan-card',
1065
+ items: [
1066
+ {
1067
+ name: 'Four classes',
1068
+ price: '[price] a month',
1069
+ summary: 'Four rides a month, booked up to a week ahead.'
1070
+ },
1071
+ {
1072
+ name: 'Unlimited',
1073
+ price: '[price] a month',
1074
+ summary: 'Ride as often as you like, booked two weeks ahead.'
1075
+ },
1076
+ {
1077
+ name: 'Class pack',
1078
+ price: '[price] for ten',
1079
+ summary: 'Ten rides to use within three months.'
1080
+ }
1081
+ ]
1082
+ }),
1083
+ cards('c', {
1084
+ name: 'questions riders ask',
1085
+ heading: 'Questions riders ask',
1086
+ componentId: 'cmp-faq-item',
1087
+ items: [
1088
+ {
1089
+ question: 'Can I pause my membership?',
1090
+ answer: 'Yes, for up to two months a year.'
1091
+ },
1092
+ {
1093
+ question: 'Do I need cycling shoes?',
1094
+ answer: 'No. Every studio lends shoes at no charge.'
1095
+ },
1096
+ {
1097
+ question: 'Can I ride at another studio?',
1098
+ answer: 'Yes, at every Pulse Cycle location.'
1099
+ }
1100
+ ]
1101
+ }),
1102
+ form('d', {
1103
+ name: 'free class form',
1104
+ heading: 'Book a free class',
1105
+ intro: 'Choose your studio and we send the schedule for the week.',
1106
+ formId: 'frm-trial'
1107
+ })
1108
+ ]
1109
+ }),
1110
+ // ── Single small businesses ─────────────────────────────────────────────
1111
+ brief({
1112
+ id: 'smallbiz-bakery-contact',
1113
+ icp: 'small-business',
1114
+ pageType: 'contact',
1115
+ brief: 'A contact page for our bakery with the opening hours and the contact form for custom cake and wholesale questions.',
1116
+ inventory: site('host-corner-bakery', {
1117
+ forms: [
1118
+ {
1119
+ id: 'frm-contact',
1120
+ name: 'Contact',
1121
+ fields: [
1122
+ 'name',
1123
+ 'email',
1124
+ 'message'
1125
+ ]
1126
+ }
1127
+ ]
1128
+ }),
1129
+ title: 'Contact',
1130
+ slug: '/contact',
1131
+ layout: 'lay-site',
1132
+ nav: true,
1133
+ seo: {
1134
+ title: 'Visit or Contact the Bakery',
1135
+ description: 'Opening hours for the bakery, and a form for custom cake and wholesale questions. We answer within a day.'
1136
+ },
1137
+ sections: [
1138
+ hero('a', {
1139
+ title: 'Visit or call the bakery',
1140
+ lead: 'Fresh bread from 7 a.m., six days a week, at [street address].'
1141
+ }),
1142
+ prose('b', {
1143
+ name: 'opening hours',
1144
+ heading: 'Opening hours',
1145
+ paragraphs: [
1146
+ 'Open Tuesday to Friday from 7 a.m. to 3 p.m., and Saturday and Sunday from 8 a.m. to 2 p.m. Closed on Mondays.'
1147
+ ]
1148
+ }),
1149
+ form('c', {
1150
+ name: 'contact form',
1151
+ heading: 'Send us a message',
1152
+ intro: 'Ask about custom cakes and wholesale orders. We answer within a day.',
1153
+ formId: 'frm-contact'
1154
+ })
1155
+ ]
1156
+ }),
1157
+ brief({
1158
+ id: 'smallbiz-yoga-teacher-about',
1159
+ icp: 'small-business',
1160
+ pageType: 'about',
1161
+ brief: 'An about page for my yoga teaching: why I teach, my training, and a link to the class schedule.',
1162
+ inventory: site('host-maya-yoga', {
1163
+ screens: [
1164
+ {
1165
+ id: 'scr-classes',
1166
+ name: 'Classes',
1167
+ slug: 'classes',
1168
+ layoutId: 'lay-site',
1169
+ template: false
1170
+ }
1171
+ ]
1172
+ }),
1173
+ title: 'About',
1174
+ slug: '/about',
1175
+ layout: 'lay-site',
1176
+ nav: true,
1177
+ seo: {
1178
+ title: 'About Maya: Slow Flow and Restorative Yoga',
1179
+ description: 'Small-group slow flow and restorative yoga classes under twelve students, with room for questions in every class.'
1180
+ },
1181
+ sections: [
1182
+ hero('a', {
1183
+ title: 'About Maya',
1184
+ lead: 'I teach slow flow and restorative yoga in small groups, with room for questions in every class.',
1185
+ image: 'A yoga teacher guiding a small class in a sunlit studio'
1186
+ }),
1187
+ prose('b', {
1188
+ name: 'why I teach',
1189
+ heading: 'Why I teach',
1190
+ paragraphs: [
1191
+ 'I started yoga to recover from a running injury, and kept practicing because it made the rest of my week calmer.',
1192
+ 'My classes stay under twelve students, so I can offer a change for each body in the room.'
1193
+ ]
1194
+ }),
1195
+ list('c', {
1196
+ name: 'training',
1197
+ heading: 'Training',
1198
+ items: [
1199
+ {
1200
+ primary: '500-hour yoga teacher training',
1201
+ secondary: '[school name]'
1202
+ },
1203
+ {
1204
+ primary: 'Restorative yoga certificate',
1205
+ secondary: '[school name]'
1206
+ }
1207
+ ]
1208
+ }),
1209
+ callToAction('d', {
1210
+ name: 'class schedule',
1211
+ heading: 'Come to a class',
1212
+ body: 'New students can try any class at the drop-in rate.',
1213
+ label: 'See the schedule',
1214
+ screenId: 'scr-classes'
1215
+ })
1216
+ ]
1217
+ }),
1218
+ brief({
1219
+ id: 'smallbiz-bike-repair-service',
1220
+ icp: 'small-business',
1221
+ pageType: 'service',
1222
+ brief: 'A service page for bike tune-ups and repairs: the three tune-up levels, how long repairs take, and the drop-off booking form.',
1223
+ inventory: site('host-spoke-bike-repair', {
1224
+ components: [
1225
+ {
1226
+ id: 'cmp-service-item',
1227
+ name: 'Service item',
1228
+ props: {
1229
+ name: 'text',
1230
+ detail: 'text'
1231
+ }
1232
+ }
1233
+ ],
1234
+ forms: [
1235
+ {
1236
+ id: 'frm-booking',
1237
+ name: 'Repair booking',
1238
+ fields: [
1239
+ 'name',
1240
+ 'email',
1241
+ 'bike type',
1242
+ 'drop-off day'
1243
+ ]
1244
+ }
1245
+ ]
1246
+ }),
1247
+ title: 'Tune-ups and repairs',
1248
+ slug: '/repairs',
1249
+ layout: 'lay-site',
1250
+ nav: true,
1251
+ seo: {
1252
+ title: 'Bike Tune-Ups and Repairs',
1253
+ description: 'Drop off your bike any weekday morning. Three tune-up levels, most ready the next day, with a call before any extra cost.'
1254
+ },
1255
+ sections: [
1256
+ hero('a', {
1257
+ title: 'Bike tune-ups and repairs',
1258
+ lead: 'Drop off your bike any weekday morning and pick it up ready to ride, most often the next day.'
1259
+ }),
1260
+ cards('b', {
1261
+ name: 'tune-up levels',
1262
+ heading: 'Tune-up levels',
1263
+ componentId: 'cmp-service-item',
1264
+ items: [
1265
+ {
1266
+ name: 'Safety check',
1267
+ detail: 'Brakes, tires and a full bolt check. [price]'
1268
+ },
1269
+ {
1270
+ name: 'Standard tune-up',
1271
+ detail: 'Adds gear and brake adjustment and wheel truing. [price]'
1272
+ },
1273
+ {
1274
+ name: 'Overhaul',
1275
+ detail: 'Adds a full strip-down, cleaning and new cables. [price]'
1276
+ }
1277
+ ]
1278
+ }),
1279
+ prose('c', {
1280
+ name: 'how long repairs take',
1281
+ heading: 'How long it takes',
1282
+ paragraphs: [
1283
+ 'Most tune-ups are ready the next day. We call before any repair that costs more than the estimate.'
1284
+ ]
1285
+ }),
1286
+ form('d', {
1287
+ name: 'drop-off booking form',
1288
+ heading: 'Book a drop-off',
1289
+ intro: 'Tell us about the bike and the day you can bring it in.',
1290
+ formId: 'frm-booking'
1291
+ })
1292
+ ]
1293
+ })
1294
+ ];
1295
+ /** A Free page brief whose card sections are written once, with the page written out in full beside it. */ function freeBrief(input) {
1296
+ const once = input.sections.map((entry)=>'once' in entry ? entry.once : entry);
1297
+ const full = input.sections.map((entry)=>'full' in entry ? entry.full : entry);
1298
+ return _extends({}, brief(_extends({}, input, {
1299
+ sections: once
1300
+ })), {
1301
+ writtenOut: full.map((entry)=>entry.answer)
1302
+ });
1303
+ }
1304
+ /** A section of cards, written once and written out. */ function repeatedCards(prefix, input) {
1305
+ return {
1306
+ once: inlineCardsOnce(prefix, input),
1307
+ full: inlineCards(prefix, input)
1308
+ };
1309
+ }
1310
+ /**
1311
+ * A page brief for a Free workspace (AGL-3030): a site that keeps no reusable
1312
+ * components and no saved forms, with the one layout its plan includes. Its
1313
+ * practice areas repeat and its consultation request is a form, so the page
1314
+ * is built the one way such a workspace can build it — the cards drawn where
1315
+ * they repeat, written once in the answer (AGL-3053), and the form carried by
1316
+ * the page with its fields inside it. The plan the page job keeps for it is
1317
+ * held to the Free workspace's capabilities, never the whole doctrine.
1318
+ */ export const AI_FREE_PAGE_FIXTURE = freeBrief({
1319
+ id: 'free-law-firm-about',
1320
+ icp: 'small-business',
1321
+ pageType: 'about',
1322
+ brief: 'An about page for Brightwater Law: who we are, the four areas we practice, how we work with clients, and a form to request a consultation.',
1323
+ inventory: site('host-brightwater-law', {}),
1324
+ title: 'About Brightwater Law',
1325
+ slug: '/about',
1326
+ layout: 'lay-site',
1327
+ nav: true,
1328
+ seo: {
1329
+ title: 'About Brightwater Law',
1330
+ description: 'A small firm for families and small businesses: estate planning, real estate, business formation and landlord-tenant matters.'
1331
+ },
1332
+ sections: [
1333
+ hero('a', {
1334
+ title: 'About Brightwater Law',
1335
+ lead: 'We are a small firm that helps families and small businesses in [city] plan ahead and settle disputes before they reach a courtroom.'
1336
+ }),
1337
+ repeatedCards('b', {
1338
+ name: 'practice areas',
1339
+ heading: 'What we help with',
1340
+ items: [
1341
+ {
1342
+ title: 'Estate planning',
1343
+ summary: 'Wills, trusts and powers of attorney, written so your family knows what you wanted.'
1344
+ },
1345
+ {
1346
+ title: 'Real estate',
1347
+ summary: 'Purchase agreements, title questions and closings for homes and small commercial property.'
1348
+ },
1349
+ {
1350
+ title: 'Business formation',
1351
+ summary: 'Choosing an entity, operating agreements and the contracts a new business signs first.'
1352
+ },
1353
+ {
1354
+ title: 'Landlord and tenant',
1355
+ summary: 'Leases, deposits and notices, for owners with a few units and the people who rent from them.'
1356
+ }
1357
+ ]
1358
+ }),
1359
+ prose('c', {
1360
+ name: 'how we work',
1361
+ heading: 'How we work with you',
1362
+ paragraphs: [
1363
+ 'Your first call is with the attorney who will handle the matter. We quote a flat fee where the work allows one, and we say so before we start when it does not.'
1364
+ ]
1365
+ }),
1366
+ inlineForm('d', {
1367
+ name: 'consultation request form',
1368
+ heading: 'Request a consultation',
1369
+ intro: 'Tell us a little about what you need. We reply within one business day.',
1370
+ formName: 'Consultation request',
1371
+ submitLabel: 'Request a consultation',
1372
+ fields: [
1373
+ {
1374
+ fieldName: 'name',
1375
+ label: 'Your name',
1376
+ fieldType: 'text',
1377
+ required: true
1378
+ },
1379
+ {
1380
+ fieldName: 'email',
1381
+ label: 'Email',
1382
+ fieldType: 'email',
1383
+ required: true
1384
+ },
1385
+ {
1386
+ fieldName: 'phone',
1387
+ label: 'Phone',
1388
+ fieldType: 'text'
1389
+ },
1390
+ {
1391
+ fieldName: 'matter',
1392
+ label: 'What can we help with?',
1393
+ fieldType: 'textarea',
1394
+ required: true
1395
+ }
1396
+ ]
1397
+ })
1398
+ ]
1399
+ });
1400
+ /**
1401
+ * A Free law firm's practice areas with copy of the length a firm writes
1402
+ * (AGL-3053): four areas for families and six for businesses and property
1403
+ * owners, 25 to 29 words a summary. A live Free About page's four practice
1404
+ * areas, drawn card by card, were cut off at their pass's ceiling on their
1405
+ * answer and on their re-ask. Written once, four and six such cards each fit a
1406
+ * balanced-tier pass; written out card by card, neither does
1407
+ * (`ai-job-page-evals.spec.ts`).
1408
+ */ export const AI_FREE_PRACTICE_AREAS_FIXTURE = freeBrief({
1409
+ id: 'free-law-firm-practice-areas',
1410
+ icp: 'small-business',
1411
+ pageType: 'about',
1412
+ brief: 'An about page for Cedar Point Law: who we are, the four ways we help families, and the six ways we help businesses and property owners, a few sentences on each.',
1413
+ inventory: site('host-cedar-point-law', {}),
1414
+ title: 'About Cedar Point Law',
1415
+ slug: '/about',
1416
+ layout: 'lay-site',
1417
+ nav: true,
1418
+ seo: {
1419
+ title: 'About Cedar Point Law',
1420
+ description: 'A general practice for families, businesses and property owners in [county], from estate planning and probate to leases and closings.'
1421
+ },
1422
+ sections: [
1423
+ hero('a', {
1424
+ title: 'About Cedar Point Law',
1425
+ lead: 'A general practice in [town] for families, small businesses and property owners, with the same attorney answering your calls from the first meeting to the last filing.'
1426
+ }),
1427
+ repeatedCards('b', {
1428
+ name: 'four ways we help families',
1429
+ heading: 'For families',
1430
+ items: [
1431
+ {
1432
+ title: 'Estate planning',
1433
+ summary: 'Wills, revocable trusts, powers of attorney and health care directives, drafted after a conversation about your family, your property and who should decide for you if you cannot.'
1434
+ },
1435
+ {
1436
+ title: 'Divorce and custody',
1437
+ summary: 'Uncontested and contested divorces, parenting plans and support, with a written estimate before anything is filed and a schedule for the children that both households can follow.'
1438
+ },
1439
+ {
1440
+ title: 'Probate',
1441
+ summary: 'Opening probate, listing assets, paying debts and distributing property for personal representatives, with a written timeline so heirs know what happens next and about how long it takes.'
1442
+ },
1443
+ {
1444
+ title: 'Guardianship and elder law',
1445
+ summary: 'Guardianship and conservatorship petitions, long-term care planning and help for adult children managing a parent’s money, with meetings at home or at a care facility when travel is hard.'
1446
+ }
1447
+ ]
1448
+ }),
1449
+ repeatedCards('c', {
1450
+ name: 'six ways we help businesses and property owners',
1451
+ heading: 'For businesses and property owners',
1452
+ items: [
1453
+ {
1454
+ title: 'Business formation',
1455
+ summary: 'Choosing between an LLC and a corporation, operating agreements, partner buyout terms and the first contracts a new business signs with its landlord, lenders and first employees.'
1456
+ },
1457
+ {
1458
+ title: 'Contracts',
1459
+ summary: 'Vendor, customer and service agreements drafted or reviewed in plain language, with the payment terms, termination rights and limits on liability explained before you sign anything.'
1460
+ },
1461
+ {
1462
+ title: 'Commercial leases',
1463
+ summary: 'First leases and renewals for shops, offices and restaurants, including build-out allowances, personal guarantees, rent increases and what happens when the business outgrows the space.'
1464
+ },
1465
+ {
1466
+ title: 'Real estate closings',
1467
+ summary: 'Purchase agreements, title review, boundary questions and closings for homes, rental property and small commercial buildings, with one attorney following the file from contract to keys.'
1468
+ },
1469
+ {
1470
+ title: 'Landlord and tenant',
1471
+ summary: 'Leases, security deposits, repair disputes and eviction notices, for owners with a few rental units and for tenants who need to know where they stand before they answer.'
1472
+ },
1473
+ {
1474
+ title: 'Employment matters',
1475
+ summary: 'Offer letters, handbooks, contractor questions and separation agreements for businesses with fewer than fifty employees, written to fit the state rules that apply to them.'
1476
+ }
1477
+ ]
1478
+ })
1479
+ ]
1480
+ });
1481
+ const CREATION_JOB = 'job-golden-creations';
1482
+ /** The ids the plan recorded for what it creates, as a kept plan carries them. */ const CREATION_IDS = {
1483
+ component: 'tstmnlCard',
1484
+ layout: 'hrbrLayout',
1485
+ form: 'roofQuoteF'
1486
+ };
1487
+ export const AI_PAGE_CREATION_FIXTURE = (()=>{
1488
+ const component = CREATION_IDS.component;
1489
+ const form = CREATION_IDS.form;
1490
+ const opener = hero('a', {
1491
+ title: 'Roof repair in Harbor County',
1492
+ lead: 'A local crew that finds the leak, fixes it the same week and sends you photos of the work.',
1493
+ cta: {
1494
+ label: 'Meet the crew',
1495
+ screenId: 'scr-about'
1496
+ }
1497
+ });
1498
+ const quotes = section('b', 'customer words', [
1499
+ 'new:Testimonial card'
1500
+ ], 3, (add)=>{
1501
+ // The brief names no customer's role, so each card leaves it to the card's default (AGL-3056).
1502
+ const cells = [
1503
+ {
1504
+ quote: 'They found the leak two other companies missed.',
1505
+ name: '[customer name]'
1506
+ },
1507
+ {
1508
+ quote: 'On time, tidy, and the photos made the invoice easy to trust.',
1509
+ name: '[customer name]'
1510
+ },
1511
+ {
1512
+ quote: 'The same crew came back to check the repair after the first storm.',
1513
+ name: '[customer name]'
1514
+ }
1515
+ ].map((propValues)=>cell(add, 3, add({
1516
+ componentId: 'reusableInstance',
1517
+ props: {
1518
+ refId: component,
1519
+ propValues
1520
+ }
1521
+ })));
1522
+ return framed(add, [
1523
+ add(typography('h2', 'What homeowners say', 'h2')),
1524
+ row(add, cells)
1525
+ ], 'lg', 8);
1526
+ });
1527
+ const request = section('c', 'quote request form', [
1528
+ 'new:Roof quote request'
1529
+ ], 0, (add)=>framed(add, [
1530
+ add(typography('h2', 'Request a quote', 'h2')),
1531
+ add(typography('body1', 'Tell us about the roof. We call back within one business day.')),
1532
+ add({
1533
+ componentId: 'form',
1534
+ props: {
1535
+ formId: form
1536
+ }
1537
+ })
1538
+ ], 'sm', 8));
1539
+ const seo = {
1540
+ title: 'Roof Repair in Harbor County',
1541
+ description: 'Same-week roof repair from a local crew, with photos of every fix and a callback within one business day.'
1542
+ };
1543
+ return {
1544
+ id: 'agency-roofing-creations',
1545
+ icp: 'agency',
1546
+ pageType: 'service',
1547
+ brief: 'A roof repair page for Harbor Roofing: what we fix, three things customers have said, and a form to request a quote. The site is new and has no layout, cards or forms yet.',
1548
+ inventory: site('host-harbor-new', {
1549
+ layouts: [],
1550
+ screens: [
1551
+ {
1552
+ id: 'scr-about',
1553
+ name: 'About',
1554
+ slug: 'about',
1555
+ layoutId: null,
1556
+ template: false
1557
+ }
1558
+ ]
1559
+ }),
1560
+ plan: {
1561
+ reuse: [
1562
+ {
1563
+ kind: 'screen',
1564
+ id: 'scr-about',
1565
+ purpose: 'linked from the hero'
1566
+ }
1567
+ ],
1568
+ create: [
1569
+ {
1570
+ kind: 'component',
1571
+ name: 'Testimonial card',
1572
+ why: 'Three quotes share one card, and the site has no card yet.',
1573
+ duplicateOf: null,
1574
+ fields: [
1575
+ 'quote:richText',
1576
+ 'name:text',
1577
+ 'role:text',
1578
+ 'photo:image'
1579
+ ],
1580
+ id: CREATION_IDS.component
1581
+ },
1582
+ {
1583
+ kind: 'layout',
1584
+ name: 'Harbor Roofing site',
1585
+ why: 'The site has no layout, so every page would otherwise carry its own header and footer.',
1586
+ duplicateOf: null,
1587
+ fields: [],
1588
+ id: CREATION_IDS.layout
1589
+ },
1590
+ {
1591
+ kind: 'form',
1592
+ name: 'Roof quote request',
1593
+ why: 'The site has no form to request a quote.',
1594
+ duplicateOf: null,
1595
+ fields: [],
1596
+ id: CREATION_IDS.form
1597
+ }
1598
+ ],
1599
+ screens: [
1600
+ {
1601
+ title: 'Roof repair',
1602
+ slug: '/roof-repair',
1603
+ layout: 'new:Harbor Roofing site',
1604
+ template: null,
1605
+ duplicateOf: null,
1606
+ nav: true,
1607
+ seoTitle: seo.title,
1608
+ seoDescription: seo.description,
1609
+ sections: [
1610
+ opener.section,
1611
+ quotes.section,
1612
+ request.section
1613
+ ]
1614
+ }
1615
+ ]
1616
+ },
1617
+ answers: [
1618
+ opener.answer,
1619
+ quotes.answer,
1620
+ request.answer
1621
+ ],
1622
+ seo,
1623
+ jobId: CREATION_JOB,
1624
+ screenId: 'roofRepair',
1625
+ layout: {
1626
+ rootId: 'root',
1627
+ nodes: {
1628
+ root: {
1629
+ componentId: 'div',
1630
+ nodes: [
1631
+ 'header',
1632
+ 'slot',
1633
+ 'footer'
1634
+ ]
1635
+ },
1636
+ header: {
1637
+ componentId: 'muiAppBar',
1638
+ props: {
1639
+ position: 'static',
1640
+ color: 'default'
1641
+ },
1642
+ nodes: [
1643
+ 'bar'
1644
+ ]
1645
+ },
1646
+ bar: {
1647
+ componentId: 'muiToolbar',
1648
+ nodes: [
1649
+ 'brand',
1650
+ 'home',
1651
+ 'about'
1652
+ ]
1653
+ },
1654
+ brand: {
1655
+ componentId: 'muiTypography',
1656
+ props: {
1657
+ variant: 'h6',
1658
+ component: 'p',
1659
+ children: 'Harbor Roofing'
1660
+ }
1661
+ },
1662
+ home: {
1663
+ componentId: 'muiScreenLink',
1664
+ props: {
1665
+ screenId: 'scr-home',
1666
+ children: 'Home'
1667
+ }
1668
+ },
1669
+ about: {
1670
+ componentId: 'muiScreenLink',
1671
+ props: {
1672
+ screenId: 'scr-about',
1673
+ children: 'About'
1674
+ }
1675
+ },
1676
+ slot: {
1677
+ componentId: 'layoutSlot'
1678
+ },
1679
+ footer: {
1680
+ componentId: 'section',
1681
+ props: {
1682
+ element: 'footer'
1683
+ },
1684
+ nodes: [
1685
+ 'tagline'
1686
+ ]
1687
+ },
1688
+ tagline: {
1689
+ componentId: 'muiTypography',
1690
+ props: {
1691
+ variant: 'body2',
1692
+ children: 'Family-run roofers in Harbor County since 1998.'
1693
+ }
1694
+ }
1695
+ }
1696
+ },
1697
+ componentGolden: 'component-testimonial-card',
1698
+ formGolden: 'roofingQuote'
1699
+ };
1700
+ })();
1701
+ const ATTORNEYS = [
1702
+ {
1703
+ photo: 'A portrait of [attorney name], the founding partner, in the firm’s office',
1704
+ name: '[attorney name]',
1705
+ role: 'Founding partner, family law',
1706
+ bio: 'Has represented parents and spouses in [county] for [years] years, and settles most cases before they reach a courtroom.'
1707
+ },
1708
+ {
1709
+ photo: 'A portrait of [attorney name] at a conference table',
1710
+ name: '[attorney name]',
1711
+ role: 'Partner, estate planning and real estate',
1712
+ bio: 'Writes wills and trusts for young families, and handles closings for homes and small commercial property.'
1713
+ }
1714
+ ];
1715
+ export const AI_TWO_PERSON_PAGE_FIXTURE = (()=>{
1716
+ const introduction = section('b', 'meet our attorneys', [], ATTORNEYS.length, (add)=>{
1717
+ const cards = ATTORNEYS.map((person)=>add({
1718
+ componentId: 'muiCard',
1719
+ props: {
1720
+ variant: 'outlined'
1721
+ },
1722
+ sx: {
1723
+ flex: 1
1724
+ },
1725
+ nodes: [
1726
+ add({
1727
+ componentId: 'image',
1728
+ props: {
1729
+ alt: person.photo
1730
+ }
1731
+ }),
1732
+ add(typography('h3', person.name, 'h3')),
1733
+ add(typography('subtitle1', person.role)),
1734
+ add(typography('body2', person.bio))
1735
+ ]
1736
+ }));
1737
+ // A Grid of two would take two more elements than the fifteen the pass
1738
+ // asks for (AGL-3055); a Stack that turns from a column into a row at md
1739
+ // is the same responsive pair in none.
1740
+ return framed(add, [
1741
+ add(typography('h2', 'Meet our attorneys', 'h2')),
1742
+ add({
1743
+ componentId: 'muiStack',
1744
+ sx: {
1745
+ flexDirection: {
1746
+ xs: 'column',
1747
+ md: 'row'
1748
+ },
1749
+ gap: 3
1750
+ },
1751
+ nodes: cards
1752
+ })
1753
+ ], 'lg', 8);
1754
+ });
1755
+ const roomier = section('b', 'meet our attorneys', [], ATTORNEYS.length, (add)=>{
1756
+ const cells = ATTORNEYS.map((person)=>add({
1757
+ componentId: 'muiGrid',
1758
+ props: {
1759
+ size: span(ATTORNEYS.length)
1760
+ },
1761
+ nodes: [
1762
+ add({
1763
+ componentId: 'muiCard',
1764
+ props: {
1765
+ variant: 'outlined'
1766
+ },
1767
+ sx: {
1768
+ height: '100%'
1769
+ },
1770
+ nodes: [
1771
+ add({
1772
+ componentId: 'image',
1773
+ props: {
1774
+ alt: person.photo,
1775
+ objectFit: 'cover',
1776
+ loading: 'lazy'
1777
+ },
1778
+ sx: {
1779
+ width: '100%'
1780
+ }
1781
+ }),
1782
+ add({
1783
+ componentId: 'muiCardContent',
1784
+ nodes: [
1785
+ add(typography('h3', person.name, 'h3')),
1786
+ add({
1787
+ componentId: 'muiTypography',
1788
+ props: {
1789
+ variant: 'subtitle1',
1790
+ children: person.role
1791
+ },
1792
+ sx: {
1793
+ color: 'text.secondary'
1794
+ }
1795
+ }),
1796
+ add(typography('body2', person.bio))
1797
+ ]
1798
+ })
1799
+ ]
1800
+ })
1801
+ ]
1802
+ }));
1803
+ return framed(add, [
1804
+ add(typography('h2', 'Meet our attorneys', 'h2')),
1805
+ add(typography('body1', 'Two attorneys, and one of them handles your matter from the first meeting to the final order.')),
1806
+ row(add, cells)
1807
+ ], 'lg', 8);
1808
+ });
1809
+ const fixture = brief({
1810
+ id: 'agency-law-firm-two-attorneys',
1811
+ icp: 'agency',
1812
+ pageType: 'about',
1813
+ brief: 'An about page for Harborline Law: who we are, and our two attorneys with a photo, their role and a short bio for each.',
1814
+ inventory: site('host-harborline-law', {
1815
+ screens: [
1816
+ {
1817
+ id: 'scr-contact',
1818
+ name: 'Contact',
1819
+ slug: 'contact',
1820
+ layoutId: 'lay-site',
1821
+ template: false
1822
+ }
1823
+ ]
1824
+ }),
1825
+ title: 'About Harborline Law',
1826
+ slug: '/about',
1827
+ layout: 'lay-site',
1828
+ nav: true,
1829
+ seo: {
1830
+ title: 'About Harborline Law',
1831
+ description: 'A coastal law firm for families and homeowners: family law, estate planning and real estate closings.'
1832
+ },
1833
+ sections: [
1834
+ hero('a', {
1835
+ title: 'About Harborline Law',
1836
+ lead: 'A small coastal firm for families and homeowners, in family law, estate planning and real estate closings.',
1837
+ cta: {
1838
+ label: 'Request a consultation',
1839
+ screenId: 'scr-contact'
1840
+ }
1841
+ }),
1842
+ introduction
1843
+ ]
1844
+ });
1845
+ return _extends({}, fixture, {
1846
+ roomier: roomier.answer
1847
+ });
1848
+ })();
1849
+
1850
+ //# sourceMappingURL=ai-page-briefs.js.map