@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,32 @@
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
+ */
17
+ import type { ConsoleOrgSitesZoneProps } from '@aglyn/aglyn/plugin-manager/feature-plugins';
18
+ import { type AiJobSummary } from '../model/ai-jobs.types';
19
+ /** A site's per-run variables, as the member typed them. */
20
+ export interface AiSiteBatchRow {
21
+ hostId: string;
22
+ picked: boolean;
23
+ businessName: string;
24
+ city: string;
25
+ brand: string;
26
+ }
27
+ /** The jobs of one batch, newest batch first, as the list route serves them. */
28
+ export declare function aiSiteBatchJobs(jobs: readonly AiJobSummary[], batchId: string | null): AiJobSummary[];
29
+ /** The batch a list of jobs most recently ran, or `null` when none did. */
30
+ export declare function aiLatestSiteBatch(jobs: readonly AiJobSummary[]): string | null;
31
+ export declare function AiSiteBatchCard(props: ConsoleOrgSitesZoneProps): JSX.Element | null;
32
+ export default AiSiteBatchCard;
@@ -0,0 +1,531 @@
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
+ */ 'use client';
17
+ import { _ as _extends } from "@swc/helpers/_/_extends";
18
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
19
+ import { lockdownRefusalText, parseLockdownRefusal } from "@aglyn/aglyn";
20
+ import { AppLink, CardDisplay } from "@aglyn/shared-ui-jsx";
21
+ import { ListTable } from "@aglyn/shared-ui-jsx/components/list-table.component";
22
+ import { ScrollTable } from "@aglyn/shared-ui-jsx/components/scroll-table.component";
23
+ import { TABLE_ROW_HEIGHT } from "@aglyn/shared-ui-jsx/const/table-pagination";
24
+ import { authorizedFetch } from "@aglyn/shared-util-http/authorized-token";
25
+ import { useUser } from "@aglyn/tenant-feature-instance";
26
+ import { Alert, Box, Button, Checkbox, Chip, CircularProgress, Collapse, MenuItem, Stack, TableBody, TableCell, TableHead, TableRow, TextField, Typography } from "@mui/material";
27
+ import { useCallback, useEffect, useMemo, useRef, useState } from "react";
28
+ import { AI_JOB_TERMINAL_STATUSES } from "../model/ai-jobs.types.js";
29
+ import { AI_SITE_BATCH_MAX, AI_SITE_PAGES, AI_SITE_SUBMISSION_CHOICES, aiSiteCreditEstimate } from "../model/ai-site-job.js";
30
+ /**
31
+ * The agency batch (AGL-2911), on the organization's Sites page: one brief,
32
+ * with the business name, the city and the brand changed per site, started
33
+ * across many of the org's sites at once.
34
+ *
35
+ * What it starts are ordinary site scaffolds. Each plans first and waits for
36
+ * its own confirmation in the Assist panel before it builds anything, and
37
+ * everything it then builds is a draft — so this card publishes nothing and
38
+ * changes no live site, however many sites it is pointed at.
39
+ *
40
+ * The estimate beside the button is the guard rail the issue asks for: what
41
+ * one site is estimated to cost, and what the whole run is, before a credit
42
+ * is spent on any of it.
43
+ *
44
+ * Where a contact form's submissions go is asked once for the run and binds
45
+ * every site's form step (AGL-2918), in the words the guided start asks it
46
+ * in: one decision, worded once, whether it is asked of one site or twenty.
47
+ */ /** Jobs the card reads to find the batches this workspace has run. */ const RECENT_JOBS_READ = 100;
48
+ /** A batch over one site is a scaffold; the card is for the other case. */ const MIN_SITES = 2;
49
+ const STATUS_LABEL = {
50
+ queued: 'Queued',
51
+ running: 'Running',
52
+ needs_input: 'Needs attention',
53
+ needs_review: 'Confirm the plan',
54
+ done: 'Done',
55
+ failed: 'Failed',
56
+ canceled: 'Canceled'
57
+ };
58
+ const STATUS_COLOR = {
59
+ queued: 'default',
60
+ running: 'primary',
61
+ needs_input: 'warning',
62
+ needs_review: 'warning',
63
+ done: 'success',
64
+ failed: 'error',
65
+ canceled: 'default'
66
+ };
67
+ const isTerminal = (job)=>AI_JOB_TERMINAL_STATUSES.includes(job.status);
68
+ /** The jobs of one batch, newest batch first, as the list route serves them. */ export function aiSiteBatchJobs(jobs, batchId) {
69
+ if (!batchId) return [];
70
+ return jobs.filter((job)=>job.batch === batchId);
71
+ }
72
+ /** The batch a list of jobs most recently ran, or `null` when none did. */ export function aiLatestSiteBatch(jobs) {
73
+ var _ref;
74
+ var _jobs_find;
75
+ return (_ref = (_jobs_find = jobs.find((job)=>job.kind === 'site' && job.batch)) == null ? void 0 : _jobs_find.batch) != null ? _ref : null;
76
+ }
77
+ export function AiSiteBatchCard(props) {
78
+ var _ref, _basePath_split_filter_;
79
+ const { orgMount, basePath } = props;
80
+ const { orgId, hosts, hostsReady } = orgMount;
81
+ const { data: user } = useUser();
82
+ const userRef = useRef(user);
83
+ userRef.current = user;
84
+ const uid = (_ref = user == null ? void 0 : user.uid) != null ? _ref : null;
85
+ const orgSlug = (_basePath_split_filter_ = basePath.split('/').filter(Boolean)[0]) != null ? _basePath_split_filter_ : '';
86
+ const [verdict, setVerdict] = useState('checking');
87
+ const [open, setOpen] = useState(false);
88
+ const [notice, setNotice] = useState(null);
89
+ const [busy, setBusy] = useState(false);
90
+ const [brief, setBrief] = useState('');
91
+ const [businessType, setBusinessType] = useState('');
92
+ const [pages, setPages] = useState(AI_SITE_PAGES.min + 1);
93
+ const [welcomeEmail, setWelcomeEmail] = useState(true);
94
+ /*
95
+ * One routing answer for the whole run. It starts on the Inbox — what every
96
+ * submission does anyway — because filing a lead as well is the addition,
97
+ * and an addition is the thing somebody should have to choose.
98
+ */ const [submissions, setSubmissions] = useState('inbox');
99
+ const [rows, setRows] = useState([]);
100
+ const [batchId, setBatchId] = useState(null);
101
+ const [jobs, setJobs] = useState([]);
102
+ // One row per site the page resolved for this reader, kept as the list moves.
103
+ useEffect(()=>{
104
+ setRows((current)=>{
105
+ const byId = new Map(current.map((row)=>[
106
+ row.hostId,
107
+ row
108
+ ]));
109
+ return hosts.map((host)=>{
110
+ var _byId_get;
111
+ return (_byId_get = byId.get(host.id)) != null ? _byId_get : {
112
+ hostId: host.id,
113
+ picked: false,
114
+ businessName: host.name,
115
+ city: '',
116
+ brand: ''
117
+ };
118
+ });
119
+ });
120
+ }, [
121
+ hosts
122
+ ]);
123
+ const load = useCallback(async ()=>{
124
+ var _ref;
125
+ if (!orgId) return;
126
+ const response = await authorizedFetch(userRef.current, `/api/ai/jobs?orgId=${encodeURIComponent(orgId)}&limit=${RECENT_JOBS_READ}`);
127
+ // The generative doors answer 404 behind their release flag and 403
128
+ // without the add-on: a feature that is not released does not exist.
129
+ if (response.status === 404 || response.status === 403) return 'hidden';
130
+ const payload = await response.json().catch(()=>null);
131
+ if (!response.ok) {
132
+ var _ref1;
133
+ const locked = parseLockdownRefusal(response.status, payload);
134
+ setNotice(locked ? lockdownRefusalText(locked) : String((_ref1 = payload == null ? void 0 : payload.error) != null ? _ref1 : ''));
135
+ return 'ready';
136
+ }
137
+ const listed = (_ref = payload == null ? void 0 : payload.jobs) != null ? _ref : [];
138
+ setJobs(listed);
139
+ setBatchId((current)=>current != null ? current : aiLatestSiteBatch(listed));
140
+ return 'ready';
141
+ }, [
142
+ orgId
143
+ ]);
144
+ useEffect(()=>{
145
+ if (!orgId || !uid) return;
146
+ let active = true;
147
+ setVerdict('checking');
148
+ void (async ()=>{
149
+ try {
150
+ const answer = await load();
151
+ if (active && answer) setVerdict(answer);
152
+ } catch (unused) {
153
+ if (active) setVerdict('ready');
154
+ }
155
+ })();
156
+ return ()=>{
157
+ active = false;
158
+ };
159
+ }, [
160
+ orgId,
161
+ uid,
162
+ load
163
+ ]);
164
+ const picked = useMemo(()=>rows.filter((row)=>row.picked), [
165
+ rows
166
+ ]);
167
+ const perSite = aiSiteCreditEstimate(pages, {
168
+ welcomeEmail
169
+ });
170
+ const runJobs = useMemo(()=>aiSiteBatchJobs(jobs, batchId), [
171
+ jobs,
172
+ batchId
173
+ ]);
174
+ const siteName = useCallback((hostId)=>{
175
+ var _ref;
176
+ var _hosts_find;
177
+ return (_ref = (_hosts_find = hosts.find((host)=>host.id === hostId)) == null ? void 0 : _hosts_find.name) != null ? _ref : 'This site';
178
+ }, [
179
+ hosts
180
+ ]);
181
+ const siteHref = useCallback((hostId)=>{
182
+ var _hosts_find;
183
+ const subdomain = (_hosts_find = hosts.find((host)=>host.id === hostId)) == null ? void 0 : _hosts_find.subdomain;
184
+ return subdomain ? `${orgMount.hostsPath}/${subdomain}` : null;
185
+ }, [
186
+ hosts,
187
+ orgMount.hostsPath
188
+ ]);
189
+ /*
190
+ * One row per job of the run. A job has no page of its own — it is
191
+ * confirmed and followed in the Assist panel — so the row opens nothing,
192
+ * and the site it built for is a link when the console has an address for
193
+ * that site.
194
+ */ const runColumns = useMemo(()=>[
195
+ {
196
+ field: 'site',
197
+ headerName: 'Site',
198
+ flex: 1,
199
+ minWidth: 180,
200
+ valueGetter: (_value, job)=>siteName(job.hostId),
201
+ renderCell: ({ row: job })=>{
202
+ const href = siteHref(job.hostId);
203
+ return href ? /*#__PURE__*/ _jsx(AppLink, {
204
+ href: href,
205
+ children: siteName(job.hostId)
206
+ }) : siteName(job.hostId);
207
+ }
208
+ },
209
+ {
210
+ field: 'status',
211
+ headerName: 'Status',
212
+ width: 180,
213
+ valueGetter: (_value, job)=>STATUS_LABEL[job.status],
214
+ renderCell: ({ row: job })=>/*#__PURE__*/ _jsx(Chip, {
215
+ size: "small",
216
+ label: STATUS_LABEL[job.status],
217
+ color: STATUS_COLOR[job.status]
218
+ })
219
+ },
220
+ {
221
+ field: 'drafts',
222
+ headerName: 'Drafts',
223
+ type: 'number',
224
+ align: 'right',
225
+ headerAlign: 'right',
226
+ width: 100,
227
+ valueGetter: (_value, job)=>isTerminal(job) || job.outputs.length ? job.outputs.length : null,
228
+ valueFormatter: (value)=>value === null ? '—' : String(value)
229
+ }
230
+ ], [
231
+ siteHref,
232
+ siteName
233
+ ]);
234
+ const update = (hostId, patch)=>setRows((current)=>current.map((row)=>row.hostId === hostId ? _extends({}, row, patch) : row));
235
+ const start = useCallback(async ()=>{
236
+ if (!orgId || !picked.length) return;
237
+ setBusy(true);
238
+ setNotice(null);
239
+ try {
240
+ var _ref, _ref1, _ref2;
241
+ const response = await authorizedFetch(userRef.current, '/api/ai/jobs/batch', {
242
+ method: 'POST',
243
+ headers: {
244
+ 'Content-Type': 'application/json'
245
+ },
246
+ body: JSON.stringify({
247
+ orgId,
248
+ brief,
249
+ businessType,
250
+ pages,
251
+ welcomeEmail,
252
+ submissions,
253
+ sites: picked.map((row)=>({
254
+ hostId: row.hostId,
255
+ businessName: row.businessName,
256
+ city: row.city,
257
+ brand: row.brand
258
+ }))
259
+ })
260
+ });
261
+ const payload = await response.json().catch(()=>null);
262
+ if (!response.ok) {
263
+ var _ref3;
264
+ const locked = parseLockdownRefusal(response.status, payload);
265
+ setNotice(locked ? lockdownRefusalText(locked) : String((_ref3 = payload == null ? void 0 : payload.error) != null ? _ref3 : 'The sites could not be started.'));
266
+ return;
267
+ }
268
+ setBatchId(String((_ref = payload == null ? void 0 : payload.batchId) != null ? _ref : '') || null);
269
+ setJobs((_ref1 = payload == null ? void 0 : payload.jobs) != null ? _ref1 : []);
270
+ setOpen(false);
271
+ const refused = (_ref2 = payload == null ? void 0 : payload.refused) != null ? _ref2 : [];
272
+ if (refused.length) {
273
+ setNotice(refused.map((entry)=>`${siteName(entry.hostId)}: ${entry.error}`).join(' · '));
274
+ }
275
+ } catch (unused) {
276
+ setNotice('The sites could not be started.');
277
+ } finally{
278
+ setBusy(false);
279
+ }
280
+ }, [
281
+ orgId,
282
+ picked,
283
+ brief,
284
+ businessType,
285
+ pages,
286
+ welcomeEmail,
287
+ submissions,
288
+ siteName
289
+ ]);
290
+ if (verdict !== 'ready' || !hostsReady || hosts.length < MIN_SITES) return null;
291
+ return /*#__PURE__*/ _jsx(CardDisplay, {
292
+ contentGutterX: true,
293
+ contentGutterY: true,
294
+ HeaderProps: {
295
+ title: 'Generate sites with AI',
296
+ subheader: 'One brief across many of your sites. Each site plans first and waits for you to ' + 'confirm it; everything it builds is a draft.'
297
+ },
298
+ children: /*#__PURE__*/ _jsxs(Stack, {
299
+ spacing: 2,
300
+ children: [
301
+ notice && /*#__PURE__*/ _jsx(Alert, {
302
+ severity: "info",
303
+ children: notice
304
+ }),
305
+ runJobs.length > 0 && /*#__PURE__*/ _jsxs(Box, {
306
+ children: [
307
+ /*#__PURE__*/ _jsx(Typography, {
308
+ variant: "subtitle2",
309
+ gutterBottom: true,
310
+ children: `Last run · ${runJobs.length} ${runJobs.length === 1 ? 'site' : 'sites'}`
311
+ }),
312
+ /*#__PURE__*/ _jsx(ListTable, {
313
+ "aria-label": "Sites in this run",
314
+ rows: runJobs,
315
+ columns: runColumns,
316
+ getRowId: (job)=>job.id,
317
+ rowHeight: TABLE_ROW_HEIGHT
318
+ })
319
+ ]
320
+ }),
321
+ /*#__PURE__*/ _jsx(Box, {
322
+ children: /*#__PURE__*/ _jsx(Button, {
323
+ variant: open ? 'text' : 'contained',
324
+ onClick: ()=>setOpen(!open),
325
+ children: open ? 'Close' : 'Generate for several sites'
326
+ })
327
+ }),
328
+ /*#__PURE__*/ _jsx(Collapse, {
329
+ in: open,
330
+ unmountOnExit: true,
331
+ children: /*#__PURE__*/ _jsxs(Stack, {
332
+ spacing: 2,
333
+ children: [
334
+ /*#__PURE__*/ _jsx(TextField, {
335
+ label: "What these sites are for",
336
+ placeholder: "A neighborhood dog groomer that takes bookings",
337
+ multiline: true,
338
+ minRows: 2,
339
+ value: brief,
340
+ onChange: (event)=>setBrief(event.target.value)
341
+ }),
342
+ /*#__PURE__*/ _jsxs(Stack, {
343
+ direction: {
344
+ xs: 'column',
345
+ sm: 'row'
346
+ },
347
+ spacing: 2,
348
+ children: [
349
+ /*#__PURE__*/ _jsx(TextField, {
350
+ label: "Kind of business",
351
+ placeholder: "dog groomer",
352
+ value: businessType,
353
+ onChange: (event)=>setBusinessType(event.target.value),
354
+ sx: {
355
+ flex: 1
356
+ }
357
+ }),
358
+ /*#__PURE__*/ _jsx(TextField, {
359
+ select: true,
360
+ label: "Pages per site",
361
+ value: pages,
362
+ onChange: (event)=>setPages(Number(event.target.value)),
363
+ sx: {
364
+ minWidth: 160
365
+ },
366
+ children: Array.from({
367
+ length: AI_SITE_PAGES.max - AI_SITE_PAGES.min + 1
368
+ }, (_, index)=>AI_SITE_PAGES.min + index).map((count)=>/*#__PURE__*/ _jsx(MenuItem, {
369
+ value: count,
370
+ children: count
371
+ }, count))
372
+ }),
373
+ /*#__PURE__*/ _jsxs(TextField, {
374
+ select: true,
375
+ label: "Welcome email",
376
+ value: welcomeEmail ? 'yes' : 'no',
377
+ onChange: (event)=>setWelcomeEmail(event.target.value === 'yes'),
378
+ sx: {
379
+ minWidth: 160
380
+ },
381
+ children: [
382
+ /*#__PURE__*/ _jsx(MenuItem, {
383
+ value: "yes",
384
+ children: 'Draft one'
385
+ }),
386
+ /*#__PURE__*/ _jsx(MenuItem, {
387
+ value: "no",
388
+ children: 'No'
389
+ })
390
+ ]
391
+ })
392
+ ]
393
+ }),
394
+ /*#__PURE__*/ _jsx(TextField, {
395
+ select: true,
396
+ fullWidth: true,
397
+ label: "Where do form submissions go?",
398
+ value: submissions,
399
+ onChange: (event)=>setSubmissions(event.target.value),
400
+ helperText: "The same for every site in this run. You can change it on any form afterwards.",
401
+ children: AI_SITE_SUBMISSION_CHOICES.map((option)=>/*#__PURE__*/ _jsx(MenuItem, {
402
+ value: option.id,
403
+ children: `${option.label} — ${option.blurb}`
404
+ }, option.id))
405
+ }),
406
+ /*#__PURE__*/ _jsxs(ScrollTable, {
407
+ size: "small",
408
+ "aria-label": "Sites to generate for",
409
+ children: [
410
+ /*#__PURE__*/ _jsx(TableHead, {
411
+ children: /*#__PURE__*/ _jsxs(TableRow, {
412
+ children: [
413
+ /*#__PURE__*/ _jsx(TableCell, {
414
+ padding: "checkbox"
415
+ }),
416
+ /*#__PURE__*/ _jsx(TableCell, {
417
+ children: 'Site'
418
+ }),
419
+ /*#__PURE__*/ _jsx(TableCell, {
420
+ children: 'Business name'
421
+ }),
422
+ /*#__PURE__*/ _jsx(TableCell, {
423
+ children: 'City'
424
+ }),
425
+ /*#__PURE__*/ _jsx(TableCell, {
426
+ children: 'Brand'
427
+ })
428
+ ]
429
+ })
430
+ }),
431
+ /*#__PURE__*/ _jsx(TableBody, {
432
+ children: rows.map((row)=>/*#__PURE__*/ _jsxs(TableRow, {
433
+ children: [
434
+ /*#__PURE__*/ _jsx(TableCell, {
435
+ padding: "checkbox",
436
+ children: /*#__PURE__*/ _jsx(Checkbox, {
437
+ checked: row.picked,
438
+ slotProps: {
439
+ input: {
440
+ 'aria-label': `Generate for ${siteName(row.hostId)}`
441
+ }
442
+ },
443
+ onChange: (event)=>update(row.hostId, {
444
+ picked: event.target.checked
445
+ })
446
+ })
447
+ }),
448
+ /*#__PURE__*/ _jsx(TableCell, {
449
+ children: siteName(row.hostId)
450
+ }),
451
+ /*#__PURE__*/ _jsx(TableCell, {
452
+ children: /*#__PURE__*/ _jsx(TextField, {
453
+ size: "small",
454
+ variant: "standard",
455
+ value: row.businessName,
456
+ slotProps: {
457
+ htmlInput: {
458
+ 'aria-label': `Business name for ${siteName(row.hostId)}`
459
+ }
460
+ },
461
+ onChange: (event)=>update(row.hostId, {
462
+ businessName: event.target.value
463
+ })
464
+ })
465
+ }),
466
+ /*#__PURE__*/ _jsx(TableCell, {
467
+ children: /*#__PURE__*/ _jsx(TextField, {
468
+ size: "small",
469
+ variant: "standard",
470
+ value: row.city,
471
+ slotProps: {
472
+ htmlInput: {
473
+ 'aria-label': `City for ${siteName(row.hostId)}`
474
+ }
475
+ },
476
+ onChange: (event)=>update(row.hostId, {
477
+ city: event.target.value
478
+ })
479
+ })
480
+ }),
481
+ /*#__PURE__*/ _jsx(TableCell, {
482
+ children: /*#__PURE__*/ _jsx(TextField, {
483
+ size: "small",
484
+ variant: "standard",
485
+ value: row.brand,
486
+ slotProps: {
487
+ htmlInput: {
488
+ 'aria-label': `Brand for ${siteName(row.hostId)}`
489
+ }
490
+ },
491
+ onChange: (event)=>update(row.hostId, {
492
+ brand: event.target.value
493
+ })
494
+ })
495
+ })
496
+ ]
497
+ }, row.hostId))
498
+ })
499
+ ]
500
+ }),
501
+ /*#__PURE__*/ _jsx(Typography, {
502
+ variant: "body2",
503
+ color: "text.secondary",
504
+ children: picked.length ? `Estimated cost: about ${perSite.toLocaleString('en-US')} credits a site, ` + `${(perSite * picked.length).toLocaleString('en-US')} for ${picked.length} ` + `${picked.length === 1 ? 'site' : 'sites'}. What each site really costs is ` + 'what its own steps spend.' : `Pick up to ${AI_SITE_BATCH_MAX} sites.`
505
+ }),
506
+ /*#__PURE__*/ _jsx(Box, {
507
+ children: /*#__PURE__*/ _jsx(Button, {
508
+ variant: "contained",
509
+ disabled: busy || !brief.trim() || !businessType.trim() || picked.length === 0 || picked.length > AI_SITE_BATCH_MAX,
510
+ onClick: ()=>void start(),
511
+ startIcon: busy ? /*#__PURE__*/ _jsx(CircularProgress, {
512
+ size: 16
513
+ }) : undefined,
514
+ children: picked.length ? `Generate for ${picked.length} ${picked.length === 1 ? 'site' : 'sites'}` : 'Generate'
515
+ })
516
+ }),
517
+ orgSlug && /*#__PURE__*/ _jsx(Typography, {
518
+ variant: "caption",
519
+ color: "text.secondary",
520
+ children: 'Each site waits for you to confirm its plan in the assistant panel.'
521
+ })
522
+ ]
523
+ })
524
+ })
525
+ ]
526
+ })
527
+ });
528
+ }
529
+ export default AiSiteBatchCard;
530
+
531
+ //# sourceMappingURL=ai-site-batch-card.component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../../libs/plugins/ai/src/lib/components/ai-site-batch-card.component.tsx"],"sourcesContent":["/**\n * @license\n * Copyright 2026 Aglyn LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'use client'\n\nimport { lockdownRefusalText, parseLockdownRefusal } from '@aglyn/aglyn'\nimport type { ConsoleOrgSitesZoneProps } from '@aglyn/aglyn/plugin-manager/feature-plugins'\nimport { AppLink, CardDisplay } from '@aglyn/shared-ui-jsx'\nimport { ListTable } from '@aglyn/shared-ui-jsx/components/list-table.component'\nimport { ScrollTable } from '@aglyn/shared-ui-jsx/components/scroll-table.component'\nimport { TABLE_ROW_HEIGHT } from '@aglyn/shared-ui-jsx/const/table-pagination'\nimport { authorizedFetch } from '@aglyn/shared-util-http/authorized-token'\nimport { useUser } from '@aglyn/tenant-feature-instance'\nimport {\n Alert,\n Box,\n Button,\n Checkbox,\n Chip,\n CircularProgress,\n Collapse,\n MenuItem,\n Stack,\n TableBody,\n TableCell,\n TableHead,\n TableRow,\n TextField,\n Typography,\n} from '@mui/material'\nimport type { GridColDef } from '@mui/x-data-grid'\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport {\n AI_JOB_TERMINAL_STATUSES,\n type AiJobStatus,\n type AiJobSummary,\n} from '../model/ai-jobs.types'\nimport {\n AI_SITE_BATCH_MAX,\n AI_SITE_PAGES,\n AI_SITE_SUBMISSION_CHOICES,\n aiSiteCreditEstimate,\n type AiSiteSubmissions,\n} from '../model/ai-site-job'\n\n/**\n * The agency batch (AGL-2911), on the organization's Sites page: one brief,\n * with the business name, the city and the brand changed per site, started\n * across many of the org's sites at once.\n *\n * What it starts are ordinary site scaffolds. Each plans first and waits for\n * its own confirmation in the Assist panel before it builds anything, and\n * everything it then builds is a draft — so this card publishes nothing and\n * changes no live site, however many sites it is pointed at.\n *\n * The estimate beside the button is the guard rail the issue asks for: what\n * one site is estimated to cost, and what the whole run is, before a credit\n * is spent on any of it.\n *\n * Where a contact form's submissions go is asked once for the run and binds\n * every site's form step (AGL-2918), in the words the guided start asks it\n * in: one decision, worded once, whether it is asked of one site or twenty.\n */\n\n/** Jobs the card reads to find the batches this workspace has run. */\nconst RECENT_JOBS_READ = 100\n\n/** A batch over one site is a scaffold; the card is for the other case. */\nconst MIN_SITES = 2\n\nconst STATUS_LABEL: Record<AiJobStatus, string> = {\n queued: 'Queued',\n running: 'Running',\n needs_input: 'Needs attention',\n needs_review: 'Confirm the plan',\n done: 'Done',\n failed: 'Failed',\n canceled: 'Canceled',\n}\n\nconst STATUS_COLOR: Record<\n AiJobStatus,\n 'default' | 'primary' | 'success' | 'error' | 'warning'\n> = {\n queued: 'default',\n running: 'primary',\n needs_input: 'warning',\n needs_review: 'warning',\n done: 'success',\n failed: 'error',\n canceled: 'default',\n}\n\n/** A site's per-run variables, as the member typed them. */\nexport interface AiSiteBatchRow {\n hostId: string\n picked: boolean\n businessName: string\n city: string\n brand: string\n}\n\ntype Verdict = 'checking' | 'ready' | 'hidden'\n\nconst isTerminal = (job: AiJobSummary) =>\n AI_JOB_TERMINAL_STATUSES.includes(job.status)\n\n/** The jobs of one batch, newest batch first, as the list route serves them. */\nexport function aiSiteBatchJobs(\n jobs: readonly AiJobSummary[],\n batchId: string | null,\n): AiJobSummary[] {\n if (!batchId) return []\n return jobs.filter((job) => job.batch === batchId)\n}\n\n/** The batch a list of jobs most recently ran, or `null` when none did. */\nexport function aiLatestSiteBatch(\n jobs: readonly AiJobSummary[],\n): string | null {\n return jobs.find((job) => job.kind === 'site' && job.batch)?.batch ?? null\n}\n\nexport function AiSiteBatchCard(\n props: ConsoleOrgSitesZoneProps,\n): JSX.Element | null {\n const { orgMount, basePath } = props\n const { orgId, hosts, hostsReady } = orgMount\n const { data: user } = useUser()\n const userRef = useRef(user)\n userRef.current = user\n const uid = user?.uid ?? null\n const orgSlug = basePath.split('/').filter(Boolean)[0] ?? ''\n\n const [verdict, setVerdict] = useState<Verdict>('checking')\n const [open, setOpen] = useState(false)\n const [notice, setNotice] = useState<string | null>(null)\n const [busy, setBusy] = useState(false)\n const [brief, setBrief] = useState('')\n const [businessType, setBusinessType] = useState('')\n const [pages, setPages] = useState<number>(AI_SITE_PAGES.min + 1)\n const [welcomeEmail, setWelcomeEmail] = useState(true)\n /*\n * One routing answer for the whole run. It starts on the Inbox — what every\n * submission does anyway — because filing a lead as well is the addition,\n * and an addition is the thing somebody should have to choose.\n */\n const [submissions, setSubmissions] = useState<AiSiteSubmissions>('inbox')\n const [rows, setRows] = useState<AiSiteBatchRow[]>([])\n const [batchId, setBatchId] = useState<string | null>(null)\n const [jobs, setJobs] = useState<AiJobSummary[]>([])\n\n // One row per site the page resolved for this reader, kept as the list moves.\n useEffect(() => {\n setRows((current) => {\n const byId = new Map(current.map((row) => [row.hostId, row]))\n return hosts.map(\n (host) =>\n byId.get(host.id) ?? {\n hostId: host.id,\n picked: false,\n businessName: host.name,\n city: '',\n brand: '',\n },\n )\n })\n }, [hosts])\n\n const load = useCallback(async () => {\n if (!orgId) return\n const response = await authorizedFetch(\n userRef.current,\n `/api/ai/jobs?orgId=${encodeURIComponent(orgId)}&limit=${RECENT_JOBS_READ}`,\n )\n // The generative doors answer 404 behind their release flag and 403\n // without the add-on: a feature that is not released does not exist.\n if (response.status === 404 || response.status === 403)\n return 'hidden' as const\n const payload = await response.json().catch(() => null)\n if (!response.ok) {\n const locked = parseLockdownRefusal(response.status, payload)\n setNotice(\n locked ? lockdownRefusalText(locked) : String(payload?.error ?? ''),\n )\n return 'ready' as const\n }\n const listed = (payload?.jobs ?? []) as AiJobSummary[]\n setJobs(listed)\n setBatchId((current) => current ?? aiLatestSiteBatch(listed))\n return 'ready' as const\n }, [orgId])\n\n useEffect(() => {\n if (!orgId || !uid) return\n let active = true\n setVerdict('checking')\n void (async () => {\n try {\n const answer = await load()\n if (active && answer) setVerdict(answer)\n } catch {\n if (active) setVerdict('ready')\n }\n })()\n return () => {\n active = false\n }\n }, [orgId, uid, load])\n\n const picked = useMemo(() => rows.filter((row) => row.picked), [rows])\n const perSite = aiSiteCreditEstimate(pages, { welcomeEmail })\n const runJobs = useMemo(() => aiSiteBatchJobs(jobs, batchId), [jobs, batchId])\n const siteName = useCallback(\n (hostId: string | null) =>\n hosts.find((host) => host.id === hostId)?.name ?? 'This site',\n [hosts],\n )\n const siteHref = useCallback(\n (hostId: string | null) => {\n const subdomain = hosts.find((host) => host.id === hostId)?.subdomain\n return subdomain ? `${orgMount.hostsPath}/${subdomain}` : null\n },\n [hosts, orgMount.hostsPath],\n )\n /*\n * One row per job of the run. A job has no page of its own — it is\n * confirmed and followed in the Assist panel — so the row opens nothing,\n * and the site it built for is a link when the console has an address for\n * that site.\n */\n const runColumns = useMemo<GridColDef<AiJobSummary>[]>(\n () => [\n {\n field: 'site',\n headerName: 'Site',\n flex: 1,\n minWidth: 180,\n valueGetter: (_value, job) => siteName(job.hostId),\n renderCell: ({ row: job }) => {\n const href = siteHref(job.hostId)\n return href ? (\n <AppLink href={href}>{siteName(job.hostId)}</AppLink>\n ) : (\n siteName(job.hostId)\n )\n },\n },\n {\n field: 'status',\n headerName: 'Status',\n width: 180,\n valueGetter: (_value, job) => STATUS_LABEL[job.status],\n renderCell: ({ row: job }) => (\n <Chip\n size=\"small\"\n label={STATUS_LABEL[job.status]}\n color={STATUS_COLOR[job.status]}\n />\n ),\n },\n {\n field: 'drafts',\n headerName: 'Drafts',\n type: 'number',\n align: 'right',\n headerAlign: 'right',\n width: 100,\n valueGetter: (_value, job) =>\n isTerminal(job) || job.outputs.length ? job.outputs.length : null,\n valueFormatter: (value: number | null) =>\n value === null ? '—' : String(value),\n },\n ],\n [siteHref, siteName],\n )\n\n const update = (hostId: string, patch: Partial<AiSiteBatchRow>) =>\n setRows((current) =>\n current.map((row) =>\n row.hostId === hostId ? { ...row, ...patch } : row,\n ),\n )\n\n const start = useCallback(async () => {\n if (!orgId || !picked.length) return\n setBusy(true)\n setNotice(null)\n try {\n const response = await authorizedFetch(\n userRef.current,\n '/api/ai/jobs/batch',\n {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n orgId,\n brief,\n businessType,\n pages,\n welcomeEmail,\n submissions,\n sites: picked.map((row) => ({\n hostId: row.hostId,\n businessName: row.businessName,\n city: row.city,\n brand: row.brand,\n })),\n }),\n },\n )\n const payload = await response.json().catch(() => null)\n if (!response.ok) {\n const locked = parseLockdownRefusal(response.status, payload)\n setNotice(\n locked\n ? lockdownRefusalText(locked)\n : String(payload?.error ?? 'The sites could not be started.'),\n )\n return\n }\n setBatchId(String(payload?.batchId ?? '') || null)\n setJobs((payload?.jobs ?? []) as AiJobSummary[])\n setOpen(false)\n const refused = (payload?.refused ?? []) as Array<{\n hostId: string\n error: string\n }>\n if (refused.length) {\n setNotice(\n refused\n .map((entry) => `${siteName(entry.hostId)}: ${entry.error}`)\n .join(' · '),\n )\n }\n } catch {\n setNotice('The sites could not be started.')\n } finally {\n setBusy(false)\n }\n }, [\n orgId,\n picked,\n brief,\n businessType,\n pages,\n welcomeEmail,\n submissions,\n siteName,\n ])\n\n if (verdict !== 'ready' || !hostsReady || hosts.length < MIN_SITES)\n return null\n\n return (\n <CardDisplay\n contentGutterX\n contentGutterY\n HeaderProps={{\n title: 'Generate sites with AI',\n subheader:\n 'One brief across many of your sites. Each site plans first and waits for you to ' +\n 'confirm it; everything it builds is a draft.',\n }}\n >\n <Stack spacing={2}>\n {notice && <Alert severity=\"info\">{notice}</Alert>}\n {runJobs.length > 0 && (\n <Box>\n <Typography variant=\"subtitle2\" gutterBottom>\n {`Last run · ${runJobs.length} ${runJobs.length === 1 ? 'site' : 'sites'}`}\n </Typography>\n <ListTable\n aria-label=\"Sites in this run\"\n rows={runJobs}\n columns={runColumns}\n getRowId={(job: AiJobSummary) => job.id}\n rowHeight={TABLE_ROW_HEIGHT}\n />\n </Box>\n )}\n <Box>\n <Button\n variant={open ? 'text' : 'contained'}\n onClick={() => setOpen(!open)}\n >\n {open ? 'Close' : 'Generate for several sites'}\n </Button>\n </Box>\n <Collapse in={open} unmountOnExit>\n <Stack spacing={2}>\n <TextField\n label=\"What these sites are for\"\n placeholder=\"A neighborhood dog groomer that takes bookings\"\n multiline\n minRows={2}\n value={brief}\n onChange={(event) => setBrief(event.target.value)}\n />\n <Stack direction={{ xs: 'column', sm: 'row' }} spacing={2}>\n <TextField\n label=\"Kind of business\"\n placeholder=\"dog groomer\"\n value={businessType}\n onChange={(event) => setBusinessType(event.target.value)}\n sx={{ flex: 1 }}\n />\n <TextField\n select\n label=\"Pages per site\"\n value={pages}\n onChange={(event) => setPages(Number(event.target.value))}\n sx={{ minWidth: 160 }}\n >\n {Array.from(\n { length: AI_SITE_PAGES.max - AI_SITE_PAGES.min + 1 },\n (_, index) => AI_SITE_PAGES.min + index,\n ).map((count) => (\n <MenuItem key={count} value={count}>\n {count}\n </MenuItem>\n ))}\n </TextField>\n <TextField\n select\n label=\"Welcome email\"\n value={welcomeEmail ? 'yes' : 'no'}\n onChange={(event) =>\n setWelcomeEmail(event.target.value === 'yes')\n }\n sx={{ minWidth: 160 }}\n >\n <MenuItem value=\"yes\">{'Draft one'}</MenuItem>\n <MenuItem value=\"no\">{'No'}</MenuItem>\n </TextField>\n </Stack>\n {/*\n Asked of the run, not of each site (AGL-2918): the forms a batch\n makes are the same form, and where a submission goes is the one\n thing about a contact form a model cannot know. Left unasked,\n twenty sites each kept a proposal nobody made.\n */}\n <TextField\n select\n fullWidth\n label=\"Where do form submissions go?\"\n value={submissions}\n onChange={(event) =>\n setSubmissions(event.target.value as AiSiteSubmissions)\n }\n helperText=\"The same for every site in this run. You can change it on any form afterwards.\"\n >\n {AI_SITE_SUBMISSION_CHOICES.map((option) => (\n <MenuItem key={option.id} value={option.id}>\n {`${option.label} — ${option.blurb}`}\n </MenuItem>\n ))}\n </TextField>\n <ScrollTable size=\"small\" aria-label=\"Sites to generate for\">\n <TableHead>\n <TableRow>\n <TableCell padding=\"checkbox\" />\n <TableCell>{'Site'}</TableCell>\n <TableCell>{'Business name'}</TableCell>\n <TableCell>{'City'}</TableCell>\n <TableCell>{'Brand'}</TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {rows.map((row) => (\n <TableRow key={row.hostId}>\n <TableCell padding=\"checkbox\">\n <Checkbox\n checked={row.picked}\n slotProps={{\n input: {\n 'aria-label': `Generate for ${siteName(row.hostId)}`,\n },\n }}\n onChange={(event) =>\n update(row.hostId, { picked: event.target.checked })\n }\n />\n </TableCell>\n <TableCell>{siteName(row.hostId)}</TableCell>\n <TableCell>\n <TextField\n size=\"small\"\n variant=\"standard\"\n value={row.businessName}\n slotProps={{\n htmlInput: {\n 'aria-label': `Business name for ${siteName(row.hostId)}`,\n },\n }}\n onChange={(event) =>\n update(row.hostId, {\n businessName: event.target.value,\n })\n }\n />\n </TableCell>\n <TableCell>\n <TextField\n size=\"small\"\n variant=\"standard\"\n value={row.city}\n slotProps={{\n htmlInput: {\n 'aria-label': `City for ${siteName(row.hostId)}`,\n },\n }}\n onChange={(event) =>\n update(row.hostId, { city: event.target.value })\n }\n />\n </TableCell>\n <TableCell>\n <TextField\n size=\"small\"\n variant=\"standard\"\n value={row.brand}\n slotProps={{\n htmlInput: {\n 'aria-label': `Brand for ${siteName(row.hostId)}`,\n },\n }}\n onChange={(event) =>\n update(row.hostId, { brand: event.target.value })\n }\n />\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </ScrollTable>\n <Typography variant=\"body2\" color=\"text.secondary\">\n {picked.length\n ? `Estimated cost: about ${perSite.toLocaleString('en-US')} credits a site, ` +\n `${(perSite * picked.length).toLocaleString('en-US')} for ${picked.length} ` +\n `${picked.length === 1 ? 'site' : 'sites'}. What each site really costs is ` +\n 'what its own steps spend.'\n : `Pick up to ${AI_SITE_BATCH_MAX} sites.`}\n </Typography>\n <Box>\n <Button\n variant=\"contained\"\n disabled={\n busy ||\n !brief.trim() ||\n !businessType.trim() ||\n picked.length === 0 ||\n picked.length > AI_SITE_BATCH_MAX\n }\n onClick={() => void start()}\n startIcon={busy ? <CircularProgress size={16} /> : undefined}\n >\n {picked.length\n ? `Generate for ${picked.length} ${picked.length === 1 ? 'site' : 'sites'}`\n : 'Generate'}\n </Button>\n </Box>\n {orgSlug && (\n <Typography variant=\"caption\" color=\"text.secondary\">\n {\n 'Each site waits for you to confirm its plan in the assistant panel.'\n }\n </Typography>\n )}\n </Stack>\n </Collapse>\n </Stack>\n </CardDisplay>\n )\n}\n\nexport default AiSiteBatchCard\n"],"names":["lockdownRefusalText","parseLockdownRefusal","AppLink","CardDisplay","ListTable","ScrollTable","TABLE_ROW_HEIGHT","authorizedFetch","useUser","Alert","Box","Button","Checkbox","Chip","CircularProgress","Collapse","MenuItem","Stack","TableBody","TableCell","TableHead","TableRow","TextField","Typography","useCallback","useEffect","useMemo","useRef","useState","AI_JOB_TERMINAL_STATUSES","AI_SITE_BATCH_MAX","AI_SITE_PAGES","AI_SITE_SUBMISSION_CHOICES","aiSiteCreditEstimate","RECENT_JOBS_READ","MIN_SITES","STATUS_LABEL","queued","running","needs_input","needs_review","done","failed","canceled","STATUS_COLOR","isTerminal","job","includes","status","aiSiteBatchJobs","jobs","batchId","filter","batch","aiLatestSiteBatch","find","kind","AiSiteBatchCard","props","basePath","orgMount","orgId","hosts","hostsReady","data","user","userRef","current","uid","orgSlug","split","Boolean","verdict","setVerdict","open","setOpen","notice","setNotice","busy","setBusy","brief","setBrief","businessType","setBusinessType","pages","setPages","min","welcomeEmail","setWelcomeEmail","submissions","setSubmissions","rows","setRows","setBatchId","setJobs","byId","Map","map","row","hostId","host","get","id","picked","businessName","name","city","brand","load","response","encodeURIComponent","payload","json","catch","ok","locked","String","error","listed","active","answer","perSite","runJobs","siteName","siteHref","subdomain","hostsPath","runColumns","field","headerName","flex","minWidth","valueGetter","_value","renderCell","href","width","size","label","color","type","align","headerAlign","outputs","length","valueFormatter","value","update","patch","start","method","headers","body","JSON","stringify","sites","refused","entry","join","contentGutterX","contentGutterY","HeaderProps","title","subheader","spacing","severity","variant","gutterBottom","aria-label","columns","getRowId","rowHeight","onClick","in","unmountOnExit","placeholder","multiline","minRows","onChange","event","target","direction","xs","sm","sx","select","Number","Array","from","max","_","index","count","fullWidth","helperText","option","blurb","padding","checked","slotProps","input","htmlInput","toLocaleString","disabled","trim","startIcon","undefined"],"mappings":"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"}