@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,486 @@
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, Fragment as _Fragment } from "react/jsx-runtime";
19
+ import { pluginDocsHelp } from "@aglyn/aglyn/app-utils/docs-help";
20
+ import { mdiPencilOutline } from "@aglyn/shared-data-mdi";
21
+ import { CardDisplay } from "@aglyn/shared-ui-jsx";
22
+ import { ListRowActions, ListTable, listActionsColumn } from "@aglyn/shared-ui-jsx/components/list-table.component";
23
+ import { TABLE_ROW_HEIGHT } from "@aglyn/shared-ui-jsx/const/table-pagination";
24
+ import { useUser } from "@aglyn/tenant-feature-instance";
25
+ import { Alert, Button, Stack, Typography } from "@mui/material";
26
+ import { useMemo, useState } from "react";
27
+ import { AI_ALLOTMENT_ORG_SUBJECT, aiAllotmentState } from "../model/ai-allotments.js";
28
+ import { AiAllotmentEditor } from "./ai-allotment-editor.component.js";
29
+ import { saveAiAllotments, useAiAllotments } from "./use-ai-allotments.js";
30
+ /** An allotment as a table cell reads it: used of credits, mode, models. */ export function aiAllotmentSummary(row) {
31
+ var _row_models;
32
+ if (!row) return '—';
33
+ const parts = [];
34
+ if (row.credits !== null) {
35
+ parts.push(`${row.used.toLocaleString()} of ${row.credits.toLocaleString()} (${row.mode})`);
36
+ }
37
+ if ((_row_models = row.models) == null ? void 0 : _row_models.length) {
38
+ parts.push(`${row.models.length} model${row.models.length === 1 ? '' : 's'}`);
39
+ }
40
+ return parts.join(' · ') || '—';
41
+ }
42
+ /** The color an allotment's figure reads in: warning from 80%, error at it. */ export function aiAllotmentTone(row) {
43
+ if (!row || row.credits === null) return 'text.primary';
44
+ const state = aiAllotmentState(row.used, row.credits);
45
+ return state === 'reached' ? 'error.main' : state === 'warn' ? 'warning.main' : 'text.primary';
46
+ }
47
+ const valueOf = (row)=>row ? {
48
+ credits: row.credits,
49
+ mode: row.mode,
50
+ models: row.models
51
+ } : null;
52
+ /** The allotment column: used of credits, in the tone its share has reached. */ const allotmentColumn = ()=>({
53
+ field: 'allotment',
54
+ headerName: 'Allotment',
55
+ flex: 1,
56
+ minWidth: 200,
57
+ sortable: false,
58
+ valueGetter: (_value, row)=>aiAllotmentSummary(row.allotment),
59
+ renderCell: ({ row })=>/*#__PURE__*/ _jsx(Typography, {
60
+ variant: "body2",
61
+ noWrap: true,
62
+ sx: {
63
+ color: aiAllotmentTone(row.allotment)
64
+ },
65
+ children: aiAllotmentSummary(row.allotment)
66
+ })
67
+ });
68
+ const creditsColumn = (credits)=>({
69
+ field: 'credits',
70
+ headerName: 'Credits this month',
71
+ type: 'number',
72
+ align: 'right',
73
+ headerAlign: 'right',
74
+ width: 170,
75
+ valueGetter: (_value, row)=>credits(row),
76
+ valueFormatter: (value)=>value.toLocaleString()
77
+ });
78
+ /**
79
+ * AI ALLOTMENTS ON BILLING → USAGE (AGL-2942): who may draw how much of the
80
+ * workspace's AI pool.
81
+ *
82
+ * Team members and sites, each with this month's credits and its allotment;
83
+ * select several and set one allotment for all of them, or set the same
84
+ * allotment on every site at once — the agency's "same for every client
85
+ * site". Collaborators' allotments, which their sites' Users cards set, are
86
+ * listed below. On a plan that offers it, the organization's model
87
+ * restriction sits at the end.
88
+ *
89
+ * Read with `billing.view`; the controls appear with `billing.manage`, and
90
+ * the route refuses a write without it whatever this card draws.
91
+ */ export function BillingAiAllotments({ orgId }) {
92
+ var _ref;
93
+ var _restriction_models;
94
+ const { data: user } = useUser();
95
+ const allotments = useAiAllotments({
96
+ orgId
97
+ });
98
+ const [members, setMembers] = useState([]);
99
+ const [sites, setSites] = useState([]);
100
+ const [editing, setEditing] = useState(null);
101
+ const [busy, setBusy] = useState(false);
102
+ const [error, setError] = useState(null);
103
+ const data = allotments.data;
104
+ const bySubject = useMemo(()=>{
105
+ var _ref;
106
+ return new Map(((_ref = data == null ? void 0 : data.allotments) != null ? _ref : []).map((row)=>[
107
+ row.subject,
108
+ row
109
+ ]));
110
+ }, [
111
+ data
112
+ ]);
113
+ if (allotments.status === 'refused') {
114
+ return /*#__PURE__*/ _jsx(Alert, {
115
+ severity: "info",
116
+ children: 'Seeing AI allotments requires the View billing permission.'
117
+ });
118
+ }
119
+ if (allotments.status === 'error' && !data) {
120
+ return /*#__PURE__*/ _jsx(Alert, {
121
+ severity: "warning",
122
+ children: 'Could not read the AI allotments — a failed read, not an empty list.'
123
+ });
124
+ }
125
+ if (!data || !orgId) {
126
+ return /*#__PURE__*/ _jsx(Typography, {
127
+ variant: "body2",
128
+ color: "text.secondary",
129
+ children: 'Loading…'
130
+ });
131
+ }
132
+ const canEdit = data.canEdit.billing;
133
+ const team = data.members.filter((member)=>member.orgWide);
134
+ const nameOf = (uid)=>{
135
+ var _ref, _ref1;
136
+ var _data_members_find;
137
+ return (_ref = (_ref1 = (_data_members_find = data.members.find((member)=>member.uid === uid)) == null ? void 0 : _data_members_find.name) != null ? _ref1 : uid) != null ? _ref : '';
138
+ };
139
+ const siteName = (hostId)=>{
140
+ var _ref, _ref1;
141
+ var _data_hosts_find;
142
+ return (_ref = (_ref1 = (_data_hosts_find = data.hosts.find((host)=>host.hostId === hostId)) == null ? void 0 : _data_hosts_find.name) != null ? _ref1 : hostId) != null ? _ref : '';
143
+ };
144
+ const collaborators = data.allotments.filter((row)=>row.scope === 'collab');
145
+ const restriction = bySubject.get(AI_ALLOTMENT_ORG_SUBJECT);
146
+ /*
147
+ * Each list pages, sorts and searches on its own, and a selection is kept
148
+ * by member and site id rather than by row, so it survives a page change.
149
+ */ const teamRows = team.map((member)=>({
150
+ $id: member.uid,
151
+ subject: `member:${member.uid}`,
152
+ allotment: bySubject.get(`member:${member.uid}`),
153
+ member
154
+ }));
155
+ const siteRows = data.hosts.map((host)=>({
156
+ $id: host.hostId,
157
+ subject: `host:${host.hostId}`,
158
+ allotment: bySubject.get(`host:${host.hostId}`),
159
+ host
160
+ }));
161
+ const collaboratorRows = collaborators.map((row)=>({
162
+ $id: row.subject,
163
+ subject: row.subject,
164
+ allotment: row,
165
+ name: nameOf(row.uid),
166
+ site: siteName(row.hostId)
167
+ }));
168
+ const editSubjects = (subjects, title, description)=>{
169
+ const rows = subjects.map((subject)=>bySubject.get(subject));
170
+ setError(null);
171
+ setEditing({
172
+ kind: 'subjects',
173
+ subjects,
174
+ title,
175
+ description,
176
+ initial: subjects.length === 1 ? valueOf(rows[0]) : null,
177
+ removable: rows.every(Boolean)
178
+ });
179
+ };
180
+ const run = async (body)=>{
181
+ setBusy(true);
182
+ setError(null);
183
+ const result = await saveAiAllotments(user, body);
184
+ setBusy(false);
185
+ if (!result.ok) {
186
+ setError(result.error);
187
+ return;
188
+ }
189
+ setEditing(null);
190
+ setMembers([]);
191
+ setSites([]);
192
+ };
193
+ const save = (value)=>{
194
+ if (!editing) return;
195
+ if (editing.kind === 'everySite') return void run({
196
+ orgId,
197
+ everySite: value
198
+ });
199
+ if (editing.kind === 'restriction') {
200
+ return void run(value.models ? {
201
+ orgId,
202
+ set: [
203
+ _extends({
204
+ subject: AI_ALLOTMENT_ORG_SUBJECT
205
+ }, value, {
206
+ credits: null
207
+ })
208
+ ]
209
+ } : {
210
+ orgId,
211
+ remove: [
212
+ AI_ALLOTMENT_ORG_SUBJECT
213
+ ]
214
+ });
215
+ }
216
+ return void run({
217
+ orgId,
218
+ set: editing.subjects.map((subject)=>_extends({
219
+ subject
220
+ }, value))
221
+ });
222
+ };
223
+ const remove = ()=>{
224
+ if (!editing || editing.kind === 'everySite') return;
225
+ return void run({
226
+ orgId,
227
+ remove: editing.kind === 'restriction' ? [
228
+ AI_ALLOTMENT_ORG_SUBJECT
229
+ ] : editing.subjects
230
+ });
231
+ };
232
+ const editMember = (row)=>editSubjects([
233
+ row.subject
234
+ ], `AI allotment — ${row.member.name}`, 'Counts what this person draws across every site.');
235
+ const editSite = (row)=>editSubjects([
236
+ row.subject
237
+ ], `AI allotment — ${row.host.name}`, 'Counts what everyone draws on the site, together.');
238
+ const editCollaborator = (row)=>editSubjects([
239
+ row.subject
240
+ ], `AI allotment — ${row.name} on ${row.site}`, 'Counts what this collaborator draws on this site.');
241
+ /** The one action a row has: set its allotment, or edit the one it has. */ const editColumn = (label, edit)=>listActionsColumn((row)=>/*#__PURE__*/ _jsx(ListRowActions, {
242
+ label: label(row),
243
+ quick: {
244
+ icon: mdiPencilOutline.path,
245
+ label: row.allotment ? 'Edit allotment' : 'Set allotment',
246
+ onClick: ()=>edit(row)
247
+ },
248
+ items: []
249
+ }));
250
+ const teamColumns = [
251
+ {
252
+ field: 'name',
253
+ headerName: 'Member',
254
+ flex: 1,
255
+ minWidth: 180,
256
+ valueGetter: (_value, row)=>row.member.name
257
+ },
258
+ creditsColumn((row)=>row.member.credits),
259
+ allotmentColumn(),
260
+ ...canEdit ? [
261
+ editColumn((row)=>row.member.name, editMember)
262
+ ] : []
263
+ ];
264
+ const siteColumns = [
265
+ {
266
+ field: 'name',
267
+ headerName: 'Site',
268
+ flex: 1,
269
+ minWidth: 180,
270
+ valueGetter: (_value, row)=>row.host.name
271
+ },
272
+ creditsColumn((row)=>row.host.credits),
273
+ allotmentColumn(),
274
+ ...canEdit ? [
275
+ editColumn((row)=>row.host.name, editSite)
276
+ ] : []
277
+ ];
278
+ const collaboratorColumns = [
279
+ {
280
+ field: 'name',
281
+ headerName: 'Collaborator',
282
+ flex: 1,
283
+ minWidth: 180
284
+ },
285
+ {
286
+ field: 'site',
287
+ headerName: 'Site',
288
+ flex: 1,
289
+ minWidth: 160
290
+ },
291
+ allotmentColumn(),
292
+ ...canEdit ? [
293
+ editColumn((row)=>`${row.name} on ${row.site}`, editCollaborator)
294
+ ] : []
295
+ ];
296
+ return /*#__PURE__*/ _jsxs(Stack, {
297
+ spacing: 2,
298
+ children: [
299
+ /*#__PURE__*/ _jsx(Typography, {
300
+ variant: "body2",
301
+ color: "text.secondary",
302
+ children: 'Give a member or a whole site a share of the workspace’s AI credits each month. ' + 'A hard allotment stops AI requests at the line; a soft one keeps going and alerts ' + 'you at 80% and 100%. The workspace’s own credits still stop first.'
303
+ }),
304
+ /*#__PURE__*/ _jsxs(Stack, {
305
+ direction: "row",
306
+ spacing: 1,
307
+ sx: {
308
+ alignItems: 'center',
309
+ flexWrap: 'wrap',
310
+ rowGap: 1
311
+ },
312
+ children: [
313
+ /*#__PURE__*/ _jsx(Typography, {
314
+ variant: "subtitle2",
315
+ sx: {
316
+ flexGrow: 1
317
+ },
318
+ children: 'Team members'
319
+ }),
320
+ canEdit ? /*#__PURE__*/ _jsx(Button, {
321
+ size: "small",
322
+ disabled: !members.length,
323
+ onClick: ()=>editSubjects(members.map((uid)=>`member:${uid}`), members.length === 1 ? `AI allotment — ${nameOf(members[0])}` : `AI allotment — ${members.length} members`, 'Counts what each person draws across every site.'),
324
+ children: members.length > 1 ? `Set for ${members.length} selected` : 'Set for selected'
325
+ }) : null
326
+ ]
327
+ }),
328
+ /*#__PURE__*/ _jsx(ListTable, _extends({
329
+ "aria-label": "Team members' AI allotments",
330
+ rows: teamRows,
331
+ columns: teamColumns,
332
+ rowHeight: TABLE_ROW_HEIGHT,
333
+ noRowsLabel: "No team members"
334
+ }, canEdit ? {
335
+ selectable: {
336
+ selected: members,
337
+ onChange: setMembers
338
+ },
339
+ onOpen: (_id, row)=>editMember(row)
340
+ } : {})),
341
+ /*#__PURE__*/ _jsxs(Stack, {
342
+ direction: "row",
343
+ spacing: 1,
344
+ sx: {
345
+ alignItems: 'center',
346
+ flexWrap: 'wrap',
347
+ rowGap: 1
348
+ },
349
+ children: [
350
+ /*#__PURE__*/ _jsx(Typography, {
351
+ variant: "subtitle2",
352
+ sx: {
353
+ flexGrow: 1
354
+ },
355
+ children: 'Sites'
356
+ }),
357
+ canEdit ? /*#__PURE__*/ _jsxs(_Fragment, {
358
+ children: [
359
+ /*#__PURE__*/ _jsx(Button, {
360
+ size: "small",
361
+ disabled: !sites.length,
362
+ onClick: ()=>editSubjects(sites.map((hostId)=>`host:${hostId}`), sites.length === 1 ? `AI allotment — ${siteName(sites[0])}` : `AI allotment — ${sites.length} sites`, 'Counts what everyone draws on the site, together.'),
363
+ children: sites.length > 1 ? `Set for ${sites.length} selected` : 'Set for selected'
364
+ }),
365
+ /*#__PURE__*/ _jsx(Button, {
366
+ size: "small",
367
+ disabled: !data.hosts.length,
368
+ onClick: ()=>{
369
+ setError(null);
370
+ setEditing({
371
+ kind: 'everySite'
372
+ });
373
+ },
374
+ children: 'Same for every client site'
375
+ })
376
+ ]
377
+ }) : null
378
+ ]
379
+ }),
380
+ /*#__PURE__*/ _jsx(ListTable, _extends({
381
+ "aria-label": "Sites' AI allotments",
382
+ rows: siteRows,
383
+ columns: siteColumns,
384
+ rowHeight: TABLE_ROW_HEIGHT,
385
+ noRowsLabel: "No sites"
386
+ }, canEdit ? {
387
+ selectable: {
388
+ selected: sites,
389
+ onChange: setSites
390
+ },
391
+ onOpen: (_id, row)=>editSite(row)
392
+ } : {})),
393
+ collaborators.length ? /*#__PURE__*/ _jsxs(_Fragment, {
394
+ children: [
395
+ /*#__PURE__*/ _jsx(Typography, {
396
+ variant: "subtitle2",
397
+ children: 'Site collaborators'
398
+ }),
399
+ /*#__PURE__*/ _jsx(ListTable, _extends({
400
+ "aria-label": "Site collaborators' AI allotments",
401
+ rows: collaboratorRows,
402
+ columns: collaboratorColumns,
403
+ rowHeight: TABLE_ROW_HEIGHT
404
+ }, canEdit ? {
405
+ onOpen: (_id, row)=>editCollaborator(row)
406
+ } : {}))
407
+ ]
408
+ }) : null,
409
+ data.restrictionAvailable ? /*#__PURE__*/ _jsxs(Stack, {
410
+ direction: "row",
411
+ spacing: 1,
412
+ sx: {
413
+ alignItems: 'center',
414
+ flexWrap: 'wrap',
415
+ rowGap: 1
416
+ },
417
+ children: [
418
+ /*#__PURE__*/ _jsxs(Typography, {
419
+ variant: "body2",
420
+ sx: {
421
+ flexGrow: 1
422
+ },
423
+ children: [
424
+ 'Models for the whole organization: ',
425
+ (restriction == null ? void 0 : (_restriction_models = restriction.models) == null ? void 0 : _restriction_models.length) ? data.models.filter((model)=>{
426
+ var _restriction_models;
427
+ return (_restriction_models = restriction.models) == null ? void 0 : _restriction_models.includes(model.id);
428
+ }).map((model)=>model.label).join(', ') || `${restriction.models.length} models` : 'every model the plan offers'
429
+ ]
430
+ }),
431
+ canEdit ? /*#__PURE__*/ _jsx(Button, {
432
+ size: "small",
433
+ onClick: ()=>{
434
+ setError(null);
435
+ setEditing({
436
+ kind: 'restriction',
437
+ initial: valueOf(restriction),
438
+ removable: Boolean(restriction)
439
+ });
440
+ },
441
+ children: 'Restrict models'
442
+ }) : null
443
+ ]
444
+ }) : null,
445
+ /*#__PURE__*/ _jsx(AiAllotmentEditor, {
446
+ open: editing !== null,
447
+ title: (editing == null ? void 0 : editing.kind) === 'everySite' ? 'Same allotment for every site' : (editing == null ? void 0 : editing.kind) === 'restriction' ? 'Models for the whole organization' : (_ref = editing == null ? void 0 : editing.title) != null ? _ref : '',
448
+ description: (editing == null ? void 0 : editing.kind) === 'everySite' ? `Sets this allotment on all ${data.hosts.length} sites, replacing any each one had.` : (editing == null ? void 0 : editing.kind) === 'restriction' ? 'Every member, collaborator and Auto choose only among these models.' : editing == null ? void 0 : editing.description,
449
+ initial: editing && editing.kind !== 'everySite' ? editing.initial : null,
450
+ models: data.models,
451
+ modelsOnly: (editing == null ? void 0 : editing.kind) === 'restriction',
452
+ poolLimit: data.pool.limit,
453
+ busy: busy,
454
+ error: error,
455
+ onClose: ()=>setEditing(null),
456
+ onSave: save,
457
+ onRemove: editing && editing.kind !== 'everySite' && editing.removable ? remove : undefined
458
+ })
459
+ ]
460
+ });
461
+ }
462
+ BillingAiAllotments.displayName = 'BillingAiAllotments';
463
+ /**
464
+ * The card on Billing → Usage, through the `orgBillingUsage` zone, beneath
465
+ * the table of who drew the credits. Registered with `billing.view`.
466
+ */ export function AiAllotmentsCard(props) {
467
+ return /*#__PURE__*/ _jsx("div", {
468
+ id: "ai-allotments",
469
+ children: /*#__PURE__*/ _jsx(CardDisplay, {
470
+ header: 'AI allotments',
471
+ help: pluginDocsHelp('billing', {
472
+ anchor: '#ai-allotments',
473
+ excerpt: 'A monthly share of the workspace’s AI credits for a member or a site — ' + 'hard or soft, with an optional list of models.'
474
+ }),
475
+ contentGutterX: true,
476
+ contentGutterY: true,
477
+ children: /*#__PURE__*/ _jsx(BillingAiAllotments, {
478
+ orgId: props.orgId
479
+ })
480
+ })
481
+ });
482
+ }
483
+ AiAllotmentsCard.displayName = 'AiAllotmentsCard';
484
+ export default AiAllotmentsCard;
485
+
486
+ //# sourceMappingURL=billing-ai-allotments.component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../../libs/plugins/ai/src/lib/components/billing-ai-allotments.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'use client'\n\nimport { pluginDocsHelp } from '@aglyn/aglyn/app-utils/docs-help'\nimport { mdiPencilOutline } from '@aglyn/shared-data-mdi'\nimport { CardDisplay } from '@aglyn/shared-ui-jsx'\nimport {\n ListRowActions,\n ListTable,\n listActionsColumn,\n} from '@aglyn/shared-ui-jsx/components/list-table.component'\nimport { TABLE_ROW_HEIGHT } from '@aglyn/shared-ui-jsx/const/table-pagination'\nimport { useUser } from '@aglyn/tenant-feature-instance'\nimport { Alert, Button, Stack, Typography } from '@mui/material'\nimport type { GridColDef } from '@mui/x-data-grid'\nimport { useMemo, useState } from 'react'\nimport { AI_ALLOTMENT_ORG_SUBJECT, aiAllotmentState } from '../model/ai-allotments'\nimport type {\n AiAllotmentRowWire,\n AiAllotmentsHostWire,\n AiAllotmentsMemberWire,\n} from '../usage/ai-usage-wire'\nimport { AiAllotmentEditor, type AiAllotmentValue } from './ai-allotment-editor.component'\nimport { saveAiAllotments, useAiAllotments } from './use-ai-allotments'\n\n/** An allotment as a table cell reads it: used of credits, mode, models. */\nexport function aiAllotmentSummary(\n row: Pick<AiAllotmentRowWire, 'credits' | 'mode' | 'models' | 'used'> | null | undefined,\n): string {\n if (!row) return '—'\n const parts: string[] = []\n if (row.credits !== null) {\n parts.push(`${row.used.toLocaleString()} of ${row.credits.toLocaleString()} (${row.mode})`)\n }\n if (row.models?.length) {\n parts.push(`${row.models.length} model${row.models.length === 1 ? '' : 's'}`)\n }\n return parts.join(' · ') || '—'\n}\n\n/** The color an allotment's figure reads in: warning from 80%, error at it. */\nexport function aiAllotmentTone(\n row: Pick<AiAllotmentRowWire, 'credits' | 'used'> | null | undefined,\n): 'text.primary' | 'warning.main' | 'error.main' {\n if (!row || row.credits === null) return 'text.primary'\n const state = aiAllotmentState(row.used, row.credits)\n return state === 'reached' ? 'error.main' : state === 'warn' ? 'warning.main' : 'text.primary'\n}\n\ntype Editing =\n | {\n kind: 'subjects'\n subjects: string[]\n title: string\n description: string\n initial: AiAllotmentValue | null\n removable: boolean\n }\n | { kind: 'everySite' }\n | { kind: 'restriction'; initial: AiAllotmentValue | null; removable: boolean }\n\nconst valueOf = (row: AiAllotmentRowWire | undefined): AiAllotmentValue | null =>\n row ? { credits: row.credits, mode: row.mode, models: row.models } : null\n\n/**\n * A row of one of the three lists: the subject its allotment is stored under,\n * that subject's allotment when it has one, and `$id` — the id `ListTable`\n * selects by, which is the member's uid, the site's id, or the collaborator's\n * subject.\n */\ntype AllotmentListRow = {\n $id: string\n subject: string\n allotment: AiAllotmentRowWire | undefined\n}\ntype MemberRow = AllotmentListRow & { member: AiAllotmentsMemberWire }\ntype SiteRow = AllotmentListRow & { host: AiAllotmentsHostWire }\ntype CollaboratorRow = AllotmentListRow & { name: string; site: string }\n\n/** The allotment column: used of credits, in the tone its share has reached. */\nconst allotmentColumn = <Row extends AllotmentListRow>(): GridColDef<Row> => ({\n field: 'allotment',\n headerName: 'Allotment',\n flex: 1,\n minWidth: 200,\n sortable: false,\n valueGetter: (_value, row) => aiAllotmentSummary(row.allotment),\n renderCell: ({ row }) => (\n <Typography variant=\"body2\" noWrap sx={{ color: aiAllotmentTone(row.allotment) }}>\n {aiAllotmentSummary(row.allotment)}\n </Typography>\n ),\n})\n\nconst creditsColumn = <Row extends AllotmentListRow>(\n credits: (row: Row) => number,\n): GridColDef<Row> => ({\n field: 'credits',\n headerName: 'Credits this month',\n type: 'number',\n align: 'right',\n headerAlign: 'right',\n width: 170,\n valueGetter: (_value, row) => credits(row),\n valueFormatter: (value: number) => value.toLocaleString(),\n})\n\n/**\n * AI ALLOTMENTS ON BILLING → USAGE (AGL-2942): who may draw how much of the\n * workspace's AI pool.\n *\n * Team members and sites, each with this month's credits and its allotment;\n * select several and set one allotment for all of them, or set the same\n * allotment on every site at once — the agency's \"same for every client\n * site\". Collaborators' allotments, which their sites' Users cards set, are\n * listed below. On a plan that offers it, the organization's model\n * restriction sits at the end.\n *\n * Read with `billing.view`; the controls appear with `billing.manage`, and\n * the route refuses a write without it whatever this card draws.\n */\nexport function BillingAiAllotments({ orgId }: { orgId?: string }) {\n const { data: user } = useUser()\n const allotments = useAiAllotments({ orgId })\n const [members, setMembers] = useState<string[]>([])\n const [sites, setSites] = useState<string[]>([])\n const [editing, setEditing] = useState<Editing | null>(null)\n const [busy, setBusy] = useState(false)\n const [error, setError] = useState<string | null>(null)\n const data = allotments.data\n const bySubject = useMemo(\n () => new Map((data?.allotments ?? []).map((row) => [row.subject, row])),\n [data],\n )\n\n if (allotments.status === 'refused') {\n return (\n <Alert severity=\"info\">{'Seeing AI allotments requires the View billing permission.'}</Alert>\n )\n }\n if (allotments.status === 'error' && !data) {\n return (\n <Alert severity=\"warning\">\n {'Could not read the AI allotments — a failed read, not an empty list.'}\n </Alert>\n )\n }\n if (!data || !orgId) {\n return (\n <Typography variant=\"body2\" color=\"text.secondary\">\n {'Loading…'}\n </Typography>\n )\n }\n\n const canEdit = data.canEdit.billing\n const team = data.members.filter((member) => member.orgWide)\n const nameOf = (uid: string | null) =>\n data.members.find((member) => member.uid === uid)?.name ?? uid ?? ''\n const siteName = (hostId: string | null) =>\n data.hosts.find((host) => host.hostId === hostId)?.name ?? hostId ?? ''\n const collaborators = data.allotments.filter((row) => row.scope === 'collab')\n const restriction = bySubject.get(AI_ALLOTMENT_ORG_SUBJECT)\n /*\n * Each list pages, sorts and searches on its own, and a selection is kept\n * by member and site id rather than by row, so it survives a page change.\n */\n const teamRows: MemberRow[] = team.map((member) => ({\n $id: member.uid,\n subject: `member:${member.uid}`,\n allotment: bySubject.get(`member:${member.uid}`),\n member,\n }))\n const siteRows: SiteRow[] = data.hosts.map((host) => ({\n $id: host.hostId,\n subject: `host:${host.hostId}`,\n allotment: bySubject.get(`host:${host.hostId}`),\n host,\n }))\n const collaboratorRows: CollaboratorRow[] = collaborators.map((row) => ({\n $id: row.subject,\n subject: row.subject,\n allotment: row,\n name: nameOf(row.uid),\n site: siteName(row.hostId),\n }))\n\n const editSubjects = (subjects: string[], title: string, description: string) => {\n const rows = subjects.map((subject) => bySubject.get(subject))\n setError(null)\n setEditing({\n kind: 'subjects',\n subjects,\n title,\n description,\n initial: subjects.length === 1 ? valueOf(rows[0]) : null,\n removable: rows.every(Boolean),\n })\n }\n\n const run = async (body: Parameters<typeof saveAiAllotments>[1]) => {\n setBusy(true)\n setError(null)\n const result = await saveAiAllotments(user, body)\n setBusy(false)\n if (!result.ok) {\n setError(result.error)\n return\n }\n setEditing(null)\n setMembers([])\n setSites([])\n }\n const save = (value: AiAllotmentValue) => {\n if (!editing) return\n if (editing.kind === 'everySite') return void run({ orgId, everySite: value })\n if (editing.kind === 'restriction') {\n return void run(\n value.models\n ? { orgId, set: [{ subject: AI_ALLOTMENT_ORG_SUBJECT, ...value, credits: null }] }\n : { orgId, remove: [AI_ALLOTMENT_ORG_SUBJECT] },\n )\n }\n return void run({\n orgId,\n set: editing.subjects.map((subject) => ({ subject, ...value })),\n })\n }\n const remove = () => {\n if (!editing || editing.kind === 'everySite') return\n return void run({\n orgId,\n remove: editing.kind === 'restriction' ? [AI_ALLOTMENT_ORG_SUBJECT] : editing.subjects,\n })\n }\n const editMember = (row: MemberRow) =>\n editSubjects([row.subject], `AI allotment — ${row.member.name}`, 'Counts what this person draws across every site.')\n const editSite = (row: SiteRow) =>\n editSubjects([row.subject], `AI allotment — ${row.host.name}`, 'Counts what everyone draws on the site, together.')\n const editCollaborator = (row: CollaboratorRow) =>\n editSubjects(\n [row.subject],\n `AI allotment — ${row.name} on ${row.site}`,\n 'Counts what this collaborator draws on this site.',\n )\n /** The one action a row has: set its allotment, or edit the one it has. */\n const editColumn = <Row extends AllotmentListRow>(label: (row: Row) => string, edit: (row: Row) => void) =>\n listActionsColumn((row: Row) => (\n <ListRowActions\n label={label(row)}\n quick={{\n icon: mdiPencilOutline.path,\n label: row.allotment ? 'Edit allotment' : 'Set allotment',\n onClick: () => edit(row),\n }}\n items={[]}\n />\n ))\n\n const teamColumns: GridColDef<MemberRow>[] = [\n { field: 'name', headerName: 'Member', flex: 1, minWidth: 180, valueGetter: (_value, row) => row.member.name },\n creditsColumn<MemberRow>((row) => row.member.credits),\n allotmentColumn<MemberRow>(),\n ...(canEdit ? [editColumn<MemberRow>((row) => row.member.name, editMember)] : []),\n ]\n const siteColumns: GridColDef<SiteRow>[] = [\n { field: 'name', headerName: 'Site', flex: 1, minWidth: 180, valueGetter: (_value, row) => row.host.name },\n creditsColumn<SiteRow>((row) => row.host.credits),\n allotmentColumn<SiteRow>(),\n ...(canEdit ? [editColumn<SiteRow>((row) => row.host.name, editSite)] : []),\n ]\n const collaboratorColumns: GridColDef<CollaboratorRow>[] = [\n { field: 'name', headerName: 'Collaborator', flex: 1, minWidth: 180 },\n { field: 'site', headerName: 'Site', flex: 1, minWidth: 160 },\n allotmentColumn<CollaboratorRow>(),\n ...(canEdit ? [editColumn<CollaboratorRow>((row) => `${row.name} on ${row.site}`, editCollaborator)] : []),\n ]\n\n return (\n <Stack spacing={2}>\n <Typography variant=\"body2\" color=\"text.secondary\">\n {'Give a member or a whole site a share of the workspace’s AI credits each month. ' +\n 'A hard allotment stops AI requests at the line; a soft one keeps going and alerts ' +\n 'you at 80% and 100%. The workspace’s own credits still stop first.'}\n </Typography>\n\n <Stack direction=\"row\" spacing={1} sx={{ alignItems: 'center', flexWrap: 'wrap', rowGap: 1 }}>\n <Typography variant=\"subtitle2\" sx={{ flexGrow: 1 }}>\n {'Team members'}\n </Typography>\n {canEdit ? (\n <Button\n size=\"small\"\n disabled={!members.length}\n onClick={() =>\n editSubjects(\n members.map((uid) => `member:${uid}`),\n members.length === 1 ? `AI allotment — ${nameOf(members[0])}` : `AI allotment — ${members.length} members`,\n 'Counts what each person draws across every site.',\n )\n }\n >\n {members.length > 1 ? `Set for ${members.length} selected` : 'Set for selected'}\n </Button>\n ) : null}\n </Stack>\n <ListTable\n aria-label=\"Team members' AI allotments\"\n rows={teamRows}\n columns={teamColumns}\n rowHeight={TABLE_ROW_HEIGHT}\n noRowsLabel=\"No team members\"\n {...(canEdit\n ? { selectable: { selected: members, onChange: setMembers }, onOpen: (_id: string, row: MemberRow) => editMember(row) }\n : {})}\n />\n\n <Stack direction=\"row\" spacing={1} sx={{ alignItems: 'center', flexWrap: 'wrap', rowGap: 1 }}>\n <Typography variant=\"subtitle2\" sx={{ flexGrow: 1 }}>\n {'Sites'}\n </Typography>\n {canEdit ? (\n <>\n <Button\n size=\"small\"\n disabled={!sites.length}\n onClick={() =>\n editSubjects(\n sites.map((hostId) => `host:${hostId}`),\n sites.length === 1 ? `AI allotment — ${siteName(sites[0])}` : `AI allotment — ${sites.length} sites`,\n 'Counts what everyone draws on the site, together.',\n )\n }\n >\n {sites.length > 1 ? `Set for ${sites.length} selected` : 'Set for selected'}\n </Button>\n <Button\n size=\"small\"\n disabled={!data.hosts.length}\n onClick={() => {\n setError(null)\n setEditing({ kind: 'everySite' })\n }}\n >\n {'Same for every client site'}\n </Button>\n </>\n ) : null}\n </Stack>\n <ListTable\n aria-label=\"Sites' AI allotments\"\n rows={siteRows}\n columns={siteColumns}\n rowHeight={TABLE_ROW_HEIGHT}\n noRowsLabel=\"No sites\"\n {...(canEdit\n ? { selectable: { selected: sites, onChange: setSites }, onOpen: (_id: string, row: SiteRow) => editSite(row) }\n : {})}\n />\n\n {collaborators.length ? (\n <>\n <Typography variant=\"subtitle2\">{'Site collaborators'}</Typography>\n <ListTable\n aria-label=\"Site collaborators' AI allotments\"\n rows={collaboratorRows}\n columns={collaboratorColumns}\n rowHeight={TABLE_ROW_HEIGHT}\n {...(canEdit ? { onOpen: (_id: string, row: CollaboratorRow) => editCollaborator(row) } : {})}\n />\n </>\n ) : null}\n\n {data.restrictionAvailable ? (\n <Stack direction=\"row\" spacing={1} sx={{ alignItems: 'center', flexWrap: 'wrap', rowGap: 1 }}>\n <Typography variant=\"body2\" sx={{ flexGrow: 1 }}>\n {'Models for the whole organization: '}\n {restriction?.models?.length\n ? data.models\n .filter((model) => restriction.models?.includes(model.id))\n .map((model) => model.label)\n .join(', ') || `${restriction.models.length} models`\n : 'every model the plan offers'}\n </Typography>\n {canEdit ? (\n <Button\n size=\"small\"\n onClick={() => {\n setError(null)\n setEditing({ kind: 'restriction', initial: valueOf(restriction), removable: Boolean(restriction) })\n }}\n >\n {'Restrict models'}\n </Button>\n ) : null}\n </Stack>\n ) : null}\n\n <AiAllotmentEditor\n open={editing !== null}\n title={\n editing?.kind === 'everySite'\n ? 'Same allotment for every site'\n : editing?.kind === 'restriction'\n ? 'Models for the whole organization'\n : (editing?.title ?? '')\n }\n description={\n editing?.kind === 'everySite'\n ? `Sets this allotment on all ${data.hosts.length} sites, replacing any each one had.`\n : editing?.kind === 'restriction'\n ? 'Every member, collaborator and Auto choose only among these models.'\n : editing?.description\n }\n initial={editing && editing.kind !== 'everySite' ? editing.initial : null}\n models={data.models}\n modelsOnly={editing?.kind === 'restriction'}\n poolLimit={data.pool.limit}\n busy={busy}\n error={error}\n onClose={() => setEditing(null)}\n onSave={save}\n onRemove={editing && editing.kind !== 'everySite' && editing.removable ? remove : undefined}\n />\n </Stack>\n )\n}\nBillingAiAllotments.displayName = 'BillingAiAllotments'\n\n/**\n * The card on Billing → Usage, through the `orgBillingUsage` zone, beneath\n * the table of who drew the credits. Registered with `billing.view`.\n */\nexport function AiAllotmentsCard(props: { orgId?: string }) {\n return (\n <div id=\"ai-allotments\">\n <CardDisplay\n header={'AI allotments'}\n help={pluginDocsHelp('billing', {\n anchor: '#ai-allotments',\n excerpt:\n 'A monthly share of the workspace’s AI credits for a member or a site — ' +\n 'hard or soft, with an optional list of models.',\n })}\n contentGutterX\n contentGutterY\n >\n <BillingAiAllotments orgId={props.orgId} />\n </CardDisplay>\n </div>\n )\n}\nAiAllotmentsCard.displayName = 'AiAllotmentsCard'\n\nexport default AiAllotmentsCard\n"],"names":["pluginDocsHelp","mdiPencilOutline","CardDisplay","ListRowActions","ListTable","listActionsColumn","TABLE_ROW_HEIGHT","useUser","Alert","Button","Stack","Typography","useMemo","useState","AI_ALLOTMENT_ORG_SUBJECT","aiAllotmentState","AiAllotmentEditor","saveAiAllotments","useAiAllotments","aiAllotmentSummary","row","parts","credits","push","used","toLocaleString","mode","models","length","join","aiAllotmentTone","state","valueOf","allotmentColumn","field","headerName","flex","minWidth","sortable","valueGetter","_value","allotment","renderCell","variant","noWrap","sx","color","creditsColumn","type","align","headerAlign","width","valueFormatter","value","BillingAiAllotments","orgId","restriction","data","user","allotments","members","setMembers","sites","setSites","editing","setEditing","busy","setBusy","error","setError","bySubject","Map","map","subject","status","severity","canEdit","billing","team","filter","member","orgWide","nameOf","uid","find","name","siteName","hostId","hosts","host","collaborators","scope","get","teamRows","$id","siteRows","collaboratorRows","site","editSubjects","subjects","title","description","rows","kind","initial","removable","every","Boolean","run","body","result","ok","save","everySite","set","remove","editMember","editSite","editCollaborator","editColumn","label","edit","quick","icon","path","onClick","items","teamColumns","siteColumns","collaboratorColumns","spacing","direction","alignItems","flexWrap","rowGap","flexGrow","size","disabled","aria-label","columns","rowHeight","noRowsLabel","selectable","selected","onChange","onOpen","_id","restrictionAvailable","model","includes","id","open","modelsOnly","poolLimit","pool","limit","onClose","onSave","onRemove","undefined","displayName","AiAllotmentsCard","props","div","header","help","anchor","excerpt","contentGutterX","contentGutterY"],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ export interface BillingAiTopUsersProps {
2
+ orgId: string | undefined;
3
+ /** The org's slug, for the links into each person's page. */
4
+ orgSlug: string;
5
+ }
6
+ /**
7
+ * WHO IS GENERATING WHAT (AGL-2928) — the per-person table beneath the
8
+ * credit meter on Billing → Usage.
9
+ *
10
+ * The meter above says how much of the pool the workspace has drawn; this
11
+ * says who drew it. Each row is one member's month: credits, their share of
12
+ * the workspace's spend, requests, and how often the gate refused them. A
13
+ * month picker walks the retention window, and the file button hands the
14
+ * same month to a spreadsheet through the streamed export.
15
+ *
16
+ * ## The file is checked, not trusted
17
+ *
18
+ * The route promises its row count in a header taken before the first row
19
+ * is written. A stream that dies halfway yields a well-formed shorter file,
20
+ * so a body with fewer rows than promised is refused rather than saved.
21
+ *
22
+ * The copy stays descriptive on purpose — who, how much, on which site — and
23
+ * never characterizes what the numbers mean about a person.
24
+ */
25
+ export declare function BillingAiTopUsersComponent(props: BillingAiTopUsersProps): import("react").JSX.Element;
26
+ export declare namespace BillingAiTopUsersComponent {
27
+ var displayName: string;
28
+ }
29
+ /**
30
+ * The card on Billing → Usage, through the `orgBillingUsage` zone: its own
31
+ * band beneath the meters, full width, because it is a table of people rather
32
+ * than a gauge. Registered with `billing.view`, so a manager without it sees
33
+ * no card rather than a refusal.
34
+ */
35
+ export declare function AiTopUsersCard(props: {
36
+ orgId?: string;
37
+ org?: {
38
+ slug?: string;
39
+ } | null;
40
+ }): import("react").JSX.Element;
41
+ export declare namespace AiTopUsersCard {
42
+ var displayName: string;
43
+ }
44
+ export default BillingAiTopUsersComponent;