@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,863 @@
1
+ import { _ as _extends } from "@swc/helpers/_/_extends";
2
+ /**
3
+ * @license
4
+ * Copyright 2026 Aglyn LLC
5
+ *
6
+ * Licensed under the Apache License, Version 2.0 (the "License");
7
+ * you may not use this file except in compliance with the License.
8
+ * You may obtain a copy of the License at
9
+ *
10
+ * http://www.apache.org/licenses/LICENSE-2.0
11
+ *
12
+ * Unless required by applicable law or agreed to in writing, software
13
+ * distributed under the License is distributed on an "AS IS" BASIS,
14
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ * See the License for the specific language governing permissions and
16
+ * limitations under the License.
17
+ */ import { effectiveDatasetModel } from "@aglyn/aglyn/app-utils/dataset-models";
18
+ import { formPeriodKey, formStatsTotals } from "@aglyn/aglyn/app-utils/forms";
19
+ import { visibleToHost } from "@aglyn/aglyn/app-utils/scope-tokens";
20
+ import { hostRoleFor, isOrgWideMember, memberCanSee } from "@aglyn/aglyn/app-utils/organizations";
21
+ import { PLUGIN_FIGURE_MAX_ROWS, pluginFigureChange, pluginFigureDay, pluginFigureWindows, registerPluginFigureReader } from "@aglyn/aglyn/plugin-manager/plugin-figures";
22
+ import { AI_PLUGIN_ID } from "../constants.js";
23
+ /** The traffic windows: the Traffic card's own ranges. */ export const AI_TRAFFIC_WINDOWS = [
24
+ 7,
25
+ 14,
26
+ 30,
27
+ 90
28
+ ];
29
+ /** A day-by-day table fits a table's row bound only over a short window. */ export const AI_TRAFFIC_DAILY_WINDOWS = [
30
+ 7,
31
+ 14
32
+ ];
33
+ /** Pages a pages table lists; the rest are counted in `omitted`. */ export const AI_TRAFFIC_TOP_PAGES = 10;
34
+ /** Referring sites, and campaign sources and campaigns, a sources table lists. */ export const AI_TRAFFIC_TOP_REFERRERS = 8;
35
+ export const AI_TRAFFIC_TOP_CAMPAIGNS = 5;
36
+ /** Forms a forms table reads. */ export const AI_FORMS_READ_LIMIT = 100;
37
+ /** Datasets a dataset summary reads. */ export const AI_DATASETS_READ_LIMIT = 50;
38
+ /** Records a dataset breakdown or field summary reads, in document order; the rest are named in a note. */ export const AI_DATASET_RECORDS_READ_LIMIT = 2000;
39
+ /** The fewest records a breakdown shows a group of by its own label. */ export const AI_DATASET_MIN_GROUP = 3;
40
+ /**
41
+ * The most different values a breakdown groups by: every state and territory,
42
+ * a status, a category. A field with more tells records apart rather than
43
+ * sorting them, so it is refused.
44
+ */ export const AI_DATASET_MAX_GROUP_VALUES = 60;
45
+ /** The aggregates a breakdown computes. */ export const AI_DATASET_OPERATIONS = [
46
+ 'count',
47
+ 'sum',
48
+ 'average',
49
+ 'min',
50
+ 'max'
51
+ ];
52
+ const str = (value)=>typeof value === 'string' ? value.trim() : '';
53
+ const num = (value)=>{
54
+ const parsed = typeof value === 'number' ? value : Number(value);
55
+ return Number.isFinite(parsed) ? parsed : 0;
56
+ };
57
+ const round1 = (value)=>Math.round(value * 10) / 10;
58
+ const share = (part, whole)=>whole > 0 ? round1(part / whole * 100) : null;
59
+ function refused(status, error) {
60
+ return {
61
+ ok: false,
62
+ status,
63
+ error
64
+ };
65
+ }
66
+ /** A window's days as the table's period, oldest to newest. */ function periodOf(request) {
67
+ const { current } = pluginFigureWindows(request.now, request.days);
68
+ return {
69
+ from: current.from,
70
+ to: current.to,
71
+ days: request.days
72
+ };
73
+ }
74
+ /** Every day id of the window and the one before it, newest first. */ function dayIds(now, days) {
75
+ const { current, previous } = pluginFigureWindows(now, days);
76
+ const walk = (startMs, endMs)=>{
77
+ const ids = [];
78
+ for(let at = endMs - 86400000; at >= startMs; at -= 86400000)ids.push(pluginFigureDay(new Date(at)));
79
+ return ids;
80
+ };
81
+ return {
82
+ current: walk(current.startMs, current.endMs),
83
+ previous: walk(previous.startMs, previous.endMs)
84
+ };
85
+ }
86
+ const counts = (value)=>{
87
+ const out = {};
88
+ if (!value || typeof value !== 'object') return out;
89
+ for (const [key, count] of Object.entries(value)){
90
+ const n = num(count);
91
+ if (n > 0) out[key] = n;
92
+ }
93
+ return out;
94
+ };
95
+ async function readTrafficDays(firestore, hostId, ids) {
96
+ if (!ids.length) return [];
97
+ const collection = firestore.collection('hosts').doc(hostId).collection('analytics');
98
+ const snapshots = await firestore.getAll(...ids.map((id)=>collection.doc(id)));
99
+ return snapshots.map((snapshot)=>{
100
+ var _ref, _data_utm;
101
+ const data = (_ref = snapshot.exists ? snapshot.data() : null) != null ? _ref : {};
102
+ const utm = {};
103
+ for (const [param, values] of Object.entries((_data_utm = data['utm']) != null ? _data_utm : {})){
104
+ utm[param] = counts(values);
105
+ }
106
+ return {
107
+ total: num(data['total']),
108
+ visitors: num(data['visitors']),
109
+ paths: counts(data['paths']),
110
+ referrers: counts(data['referrers']),
111
+ utm
112
+ };
113
+ });
114
+ }
115
+ function sumMaps(days, pick) {
116
+ const totals = new Map();
117
+ for (const day of days){
118
+ var _totals_get;
119
+ for (const [key, count] of Object.entries(pick(day)))totals.set(key, ((_totals_get = totals.get(key)) != null ? _totals_get : 0) + count);
120
+ }
121
+ return totals;
122
+ }
123
+ const ranked = (totals)=>[
124
+ ...totals.entries()
125
+ ].sort((a, b)=>b[1] - a[1] || a[0].localeCompare(b[0]));
126
+ function siteReader(base, read, firestore, plugin) {
127
+ return _extends({}, base, {
128
+ scope: 'site',
129
+ plugin,
130
+ read: async (request)=>{
131
+ if (!request.hostId) return refused(400, 'Open a site to read its figures');
132
+ if (!base.windows.includes(request.days)) return refused(400, 'That window is not one this reader covers');
133
+ return read(firestore(), _extends({}, request, {
134
+ hostId: request.hostId
135
+ }));
136
+ }
137
+ });
138
+ }
139
+ export function trafficFigureReaders(firestore) {
140
+ const source = {
141
+ label: 'Analytics',
142
+ path: 'analytics'
143
+ };
144
+ const visitorsNote = 'Visitors are counted once per browser tab per day, so one person on two days counts twice.';
145
+ return [
146
+ siteReader({
147
+ id: 'traffic.summary',
148
+ label: 'Traffic',
149
+ description: 'Page views, visitors and views a day on the site over the window, each beside the window before it and the change.',
150
+ windows: AI_TRAFFIC_WINDOWS
151
+ }, async (db, request)=>{
152
+ const ids = dayIds(request.now, request.days);
153
+ const [current, previous] = await Promise.all([
154
+ readTrafficDays(db, request.hostId, ids.current),
155
+ readTrafficDays(db, request.hostId, ids.previous)
156
+ ]);
157
+ const total = (days)=>days.reduce((sum, day)=>sum + day.total, 0);
158
+ const visitors = (days)=>days.reduce((sum, day)=>sum + day.visitors, 0);
159
+ const views = total(current);
160
+ const viewsBefore = total(previous);
161
+ const perDay = Math.round(views / request.days);
162
+ const perDayBefore = Math.round(viewsBefore / request.days);
163
+ const table = {
164
+ title: 'Traffic',
165
+ source,
166
+ period: periodOf(request),
167
+ columns: [
168
+ {
169
+ key: 'figure',
170
+ label: 'Figure',
171
+ kind: 'text'
172
+ },
173
+ {
174
+ key: 'current',
175
+ label: 'This window',
176
+ kind: 'count'
177
+ },
178
+ {
179
+ key: 'previous',
180
+ label: 'Window before',
181
+ kind: 'count'
182
+ },
183
+ {
184
+ key: 'change',
185
+ label: 'Change',
186
+ kind: 'change'
187
+ }
188
+ ],
189
+ rows: [
190
+ {
191
+ figure: 'Page views',
192
+ current: views,
193
+ previous: viewsBefore,
194
+ change: pluginFigureChange(views, viewsBefore)
195
+ },
196
+ {
197
+ figure: 'Visitors',
198
+ current: visitors(current),
199
+ previous: visitors(previous),
200
+ change: pluginFigureChange(visitors(current), visitors(previous))
201
+ },
202
+ {
203
+ figure: 'Page views a day',
204
+ current: perDay,
205
+ previous: perDayBefore,
206
+ change: pluginFigureChange(perDay, perDayBefore)
207
+ }
208
+ ],
209
+ omitted: 0,
210
+ notes: [
211
+ visitorsNote,
212
+ ...viewsBefore ? [] : [
213
+ 'The window before this one recorded no page views, so there is no change to compare.'
214
+ ]
215
+ ]
216
+ };
217
+ return {
218
+ ok: true,
219
+ table
220
+ };
221
+ }, firestore, null),
222
+ siteReader({
223
+ id: 'traffic.pages',
224
+ label: 'Top pages',
225
+ description: `The site's ${AI_TRAFFIC_TOP_PAGES} most viewed pages over the window, with each page's share of all views and its change from the window before.`,
226
+ windows: AI_TRAFFIC_WINDOWS
227
+ }, async (db, request)=>{
228
+ const ids = dayIds(request.now, request.days);
229
+ const [current, previous] = await Promise.all([
230
+ readTrafficDays(db, request.hostId, ids.current),
231
+ readTrafficDays(db, request.hostId, ids.previous)
232
+ ]);
233
+ const now = ranked(sumMaps(current, (day)=>day.paths));
234
+ const before = sumMaps(previous, (day)=>day.paths);
235
+ const all = now.reduce((sum, [, count])=>sum + count, 0);
236
+ const rows = now.slice(0, AI_TRAFFIC_TOP_PAGES).map(([path, views])=>{
237
+ var _before_get;
238
+ return {
239
+ page: path,
240
+ views,
241
+ share: share(views, all),
242
+ change: pluginFigureChange(views, (_before_get = before.get(path)) != null ? _before_get : null)
243
+ };
244
+ });
245
+ return {
246
+ ok: true,
247
+ table: {
248
+ title: 'Top pages',
249
+ source,
250
+ period: periodOf(request),
251
+ columns: [
252
+ {
253
+ key: 'page',
254
+ label: 'Page',
255
+ kind: 'text'
256
+ },
257
+ {
258
+ key: 'views',
259
+ label: 'Views',
260
+ kind: 'count'
261
+ },
262
+ {
263
+ key: 'share',
264
+ label: 'Share of views',
265
+ kind: 'percent'
266
+ },
267
+ {
268
+ key: 'change',
269
+ label: 'Change',
270
+ kind: 'change'
271
+ }
272
+ ],
273
+ rows,
274
+ omitted: Math.max(0, now.length - rows.length),
275
+ notes: []
276
+ }
277
+ };
278
+ }, firestore, null),
279
+ siteReader({
280
+ id: 'traffic.sources',
281
+ label: 'Traffic sources',
282
+ description: 'Where visits came from over the window: the referring sites, and the campaign sources and campaigns links were tagged with, with each one’s views.',
283
+ windows: AI_TRAFFIC_WINDOWS
284
+ }, async (db, request)=>{
285
+ const days = await readTrafficDays(db, request.hostId, dayIds(request.now, request.days).current);
286
+ const all = days.reduce((sum, day)=>sum + day.total, 0);
287
+ const referrers = ranked(sumMaps(days, (day)=>day.referrers));
288
+ const sources = ranked(sumMaps(days, (day)=>{
289
+ var _day_utm_source;
290
+ return (_day_utm_source = day.utm['source']) != null ? _day_utm_source : {};
291
+ }));
292
+ const campaigns = ranked(sumMaps(days, (day)=>{
293
+ var _day_utm_campaign;
294
+ return (_day_utm_campaign = day.utm['campaign']) != null ? _day_utm_campaign : {};
295
+ }));
296
+ const rowsOf = (entries, limit, type)=>entries.slice(0, limit).map(([name, views])=>({
297
+ source: name,
298
+ type,
299
+ views,
300
+ share: share(views, all)
301
+ }));
302
+ const rows = [
303
+ ...rowsOf(referrers, AI_TRAFFIC_TOP_REFERRERS, 'Referring site'),
304
+ ...rowsOf(sources, AI_TRAFFIC_TOP_CAMPAIGNS, 'Campaign source'),
305
+ ...rowsOf(campaigns, AI_TRAFFIC_TOP_CAMPAIGNS, 'Campaign')
306
+ ];
307
+ return {
308
+ ok: true,
309
+ table: {
310
+ title: 'Traffic sources',
311
+ source,
312
+ period: periodOf(request),
313
+ columns: [
314
+ {
315
+ key: 'source',
316
+ label: 'Source',
317
+ kind: 'text'
318
+ },
319
+ {
320
+ key: 'type',
321
+ label: 'Kind',
322
+ kind: 'text'
323
+ },
324
+ {
325
+ key: 'views',
326
+ label: 'Views',
327
+ kind: 'count'
328
+ },
329
+ {
330
+ key: 'share',
331
+ label: 'Share of all views',
332
+ kind: 'percent'
333
+ }
334
+ ],
335
+ rows,
336
+ omitted: Math.max(0, referrers.length - AI_TRAFFIC_TOP_REFERRERS) + Math.max(0, sources.length - AI_TRAFFIC_TOP_CAMPAIGNS) + Math.max(0, campaigns.length - AI_TRAFFIC_TOP_CAMPAIGNS),
337
+ notes: [
338
+ 'A visit with no referring site, such as a typed address, is in no row.'
339
+ ]
340
+ }
341
+ };
342
+ }, firestore, null),
343
+ siteReader({
344
+ id: 'traffic.daily',
345
+ label: 'Traffic by day',
346
+ description: 'Page views and visitors on each day of the window, oldest first, for spotting a day that stood out.',
347
+ windows: AI_TRAFFIC_DAILY_WINDOWS
348
+ }, async (db, request)=>{
349
+ const ids = [
350
+ ...dayIds(request.now, request.days).current
351
+ ].reverse();
352
+ const days = await readTrafficDays(db, request.hostId, ids);
353
+ return {
354
+ ok: true,
355
+ table: {
356
+ title: 'Traffic by day',
357
+ source,
358
+ period: periodOf(request),
359
+ columns: [
360
+ {
361
+ key: 'day',
362
+ label: 'Day',
363
+ kind: 'date'
364
+ },
365
+ {
366
+ key: 'views',
367
+ label: 'Page views',
368
+ kind: 'count'
369
+ },
370
+ {
371
+ key: 'visitors',
372
+ label: 'Visitors',
373
+ kind: 'count'
374
+ }
375
+ ],
376
+ rows: days.map((day, index)=>({
377
+ day: ids[index],
378
+ views: day.total,
379
+ visitors: day.visitors
380
+ })),
381
+ omitted: 0,
382
+ notes: [
383
+ visitorsNote
384
+ ]
385
+ }
386
+ };
387
+ }, firestore, null)
388
+ ];
389
+ }
390
+ // ── Forms ─────────────────────────────────────────────────────────────────
391
+ export function formsFigureReader(firestore) {
392
+ return siteReader({
393
+ id: 'forms.performance',
394
+ label: 'Forms',
395
+ description: 'Each form’s views, submissions, the share of views that became a submission, and leads, over the calendar months the window falls in.',
396
+ windows: AI_TRAFFIC_WINDOWS
397
+ }, async (db, request)=>{
398
+ const { current } = pluginFigureWindows(request.now, request.days);
399
+ const from = formPeriodKey(current.startMs);
400
+ const to = formPeriodKey(current.endMs - 1);
401
+ const snapshot = await db.collection('hosts').doc(request.hostId).collection('forms').limit(AI_FORMS_READ_LIMIT).get();
402
+ const forms = snapshot.docs.map((doc)=>{
403
+ var _doc_data;
404
+ return {
405
+ doc,
406
+ data: (_doc_data = doc.data()) != null ? _doc_data : {}
407
+ };
408
+ }).filter(({ data })=>!data['deletedAt']).map(({ doc, data })=>{
409
+ const totals = formStatsTotals(data['stats'], {
410
+ from,
411
+ to
412
+ });
413
+ return {
414
+ form: str(data['displayName']) || doc.id,
415
+ views: totals.views,
416
+ submissions: totals.submissions,
417
+ completion: totals.views && totals.submissions !== null ? share(totals.submissions, totals.views) : null,
418
+ leads: totals.leads
419
+ };
420
+ }).sort((a, b)=>{
421
+ var _b_submissions, _a_submissions;
422
+ return ((_b_submissions = b.submissions) != null ? _b_submissions : -1) - ((_a_submissions = a.submissions) != null ? _a_submissions : -1) || a.form.localeCompare(b.form);
423
+ });
424
+ const monthStart = from ? `${from}-01` : current.from;
425
+ return {
426
+ ok: true,
427
+ table: {
428
+ title: 'Forms',
429
+ source: {
430
+ label: 'Forms',
431
+ path: 'forms'
432
+ },
433
+ period: {
434
+ from: monthStart,
435
+ to: current.to,
436
+ days: Math.round((Date.parse(current.to) - Date.parse(monthStart)) / 86400000) + 1
437
+ },
438
+ columns: [
439
+ {
440
+ key: 'form',
441
+ label: 'Form',
442
+ kind: 'text'
443
+ },
444
+ {
445
+ key: 'views',
446
+ label: 'Views',
447
+ kind: 'count'
448
+ },
449
+ {
450
+ key: 'submissions',
451
+ label: 'Submissions',
452
+ kind: 'count'
453
+ },
454
+ {
455
+ key: 'completion',
456
+ label: 'Views that became a submission',
457
+ kind: 'percent'
458
+ },
459
+ {
460
+ key: 'leads',
461
+ label: 'Leads',
462
+ kind: 'count'
463
+ }
464
+ ],
465
+ rows: forms.slice(0, PLUGIN_FIGURE_MAX_ROWS),
466
+ omitted: Math.max(0, forms.length - PLUGIN_FIGURE_MAX_ROWS),
467
+ notes: [
468
+ 'Form figures are kept by calendar month, so they cover whole months from the first day of the month the window starts in.',
469
+ 'Views are counted in the visitor’s browser and submissions on the server, so a rate can pass 100%.'
470
+ ]
471
+ }
472
+ };
473
+ }, firestore, 'forms');
474
+ }
475
+ /**
476
+ * The datasets a request may read: those the member who asked may see — and,
477
+ * narrowed to a site, only those shared with it, which is the site Data page's
478
+ * rule (AGL-2891). With no member, only datasets shared with every site.
479
+ */ async function visibleDatasets(firestore, request) {
480
+ const orgRef = firestore.collection('orgs').doc(request.orgId);
481
+ const [snapshot, memberSnapshot] = await Promise.all([
482
+ orgRef.collection('datasets').limit(AI_DATASETS_READ_LIMIT).get(),
483
+ request.uid ? orgRef.collection('members').doc(request.uid).get() : Promise.resolve(null)
484
+ ]);
485
+ const member = (memberSnapshot == null ? void 0 : memberSnapshot.exists) ? memberSnapshot.data() : null;
486
+ if (request.uid && !member) return [];
487
+ if (request.hostId && member && !isOrgWideMember(member) && hostRoleFor(member, request.hostId) === null) {
488
+ return [];
489
+ }
490
+ return snapshot.docs.map((doc)=>{
491
+ var _doc_data;
492
+ return {
493
+ id: doc.id,
494
+ data: (_doc_data = doc.data()) != null ? _doc_data : {}
495
+ };
496
+ }).filter(({ data })=>{
497
+ const visibleTo = data['visibleTo'];
498
+ if (data['deletedAt']) return false;
499
+ if (request.hostId && !visibleToHost(visibleTo, request.hostId)) return false;
500
+ return member ? memberCanSee(member, visibleTo) : Boolean(visibleTo == null ? void 0 : visibleTo.includes('org'));
501
+ }).map(({ id, data })=>({
502
+ id,
503
+ name: str(data['displayName']) || id,
504
+ model: effectiveDatasetModel(data)
505
+ })).sort((a, b)=>a.name.localeCompare(b.name));
506
+ }
507
+ /** The datasets a request may read, with their fields: what the model picks a breakdown from. */ export async function aiDatasetCatalog(firestore, request) {
508
+ const datasets = await visibleDatasets(firestore, _extends({}, request, {
509
+ days: 0,
510
+ now: new Date(0),
511
+ params: {}
512
+ }));
513
+ return datasets.map((dataset)=>({
514
+ id: dataset.id,
515
+ name: dataset.name,
516
+ fields: dataset.model.order.map((fieldId)=>{
517
+ var _ref;
518
+ var _dataset_model_fields_fieldId, _dataset_model_fields_fieldId1;
519
+ return {
520
+ id: fieldId,
521
+ name: str((_dataset_model_fields_fieldId = dataset.model.fields[fieldId]) == null ? void 0 : _dataset_model_fields_fieldId.name) || fieldId,
522
+ type: String((_ref = (_dataset_model_fields_fieldId1 = dataset.model.fields[fieldId]) == null ? void 0 : _dataset_model_fields_fieldId1.type) != null ? _ref : 'text')
523
+ };
524
+ })
525
+ }));
526
+ }
527
+ async function readRecords(firestore, orgId, datasetId) {
528
+ const recordsRef = firestore.collection('orgs').doc(orgId).collection('datasets').doc(datasetId).collection('records');
529
+ const [page, count] = await Promise.all([
530
+ recordsRef.limit(AI_DATASET_RECORDS_READ_LIMIT).get(),
531
+ recordsRef.count().get()
532
+ ]);
533
+ return {
534
+ rows: page.docs.map((doc)=>{
535
+ var _values, _doc_data;
536
+ return (_values = ((_doc_data = doc.data()) != null ? _doc_data : {})['values']) != null ? _values : {};
537
+ }),
538
+ total: num(count.data().count)
539
+ };
540
+ }
541
+ const NUMERIC_TYPES = new Set([
542
+ 'float',
543
+ 'int32',
544
+ 'int64'
545
+ ]);
546
+ function readNote(read, total) {
547
+ return total > read ? [
548
+ `Read the first ${read.toLocaleString('en-US')} of ${total.toLocaleString('en-US')} records, so every figure covers only those.`
549
+ ] : [];
550
+ }
551
+ /** A field a dataset table may be read by: the model's own id, or its name as the dataset page shows it. */ function fieldOf(model, raw) {
552
+ const wanted = raw.trim().toLowerCase();
553
+ for (const id of model.order){
554
+ var _model_fields_id;
555
+ if (id.toLowerCase() === wanted || str((_model_fields_id = model.fields[id]) == null ? void 0 : _model_fields_id.name).toLowerCase() === wanted) return id;
556
+ }
557
+ return null;
558
+ }
559
+ /** A value as a breakdown groups it: text as written, a number or a yes/no as text; empty is its own group. */ function groupLabel(value) {
560
+ if (value === null || value === undefined || value === '') return '(empty)';
561
+ if (typeof value === 'boolean') return value ? 'Yes' : 'No';
562
+ if (typeof value === 'number' || typeof value === 'string') return String(value).trim() || '(empty)';
563
+ return '(not a single value)';
564
+ }
565
+ export function datasetFigureReaders(firestore) {
566
+ const base = {
567
+ scope: 'org',
568
+ plugin: 'data',
569
+ feature: 'dataStore',
570
+ windows: []
571
+ };
572
+ // Datasets belong to the workspace, so a table links its Data page.
573
+ const source = {
574
+ label: 'Data',
575
+ path: 'data'
576
+ };
577
+ return [
578
+ _extends({}, base, {
579
+ id: 'datasets.summary',
580
+ label: 'Datasets',
581
+ description: 'With no dataset named: each dataset’s records and fields. With one: each of its fields, how many records fill it, how many distinct values it holds and, for a number, its lowest, average and highest.',
582
+ params: [
583
+ {
584
+ name: 'dataset',
585
+ description: 'A dataset’s id or name, to summarize its fields.',
586
+ required: false
587
+ }
588
+ ],
589
+ read: async (request)=>{
590
+ const db = firestore();
591
+ const datasets = await visibleDatasets(db, request);
592
+ const named = request.params['dataset'];
593
+ if (!named) {
594
+ const counted = await Promise.all(datasets.slice(0, PLUGIN_FIGURE_MAX_ROWS).map(async (dataset)=>({
595
+ dataset: dataset.name,
596
+ records: num((await db.collection('orgs').doc(request.orgId).collection('datasets').doc(dataset.id).collection('records').count().get()).data().count),
597
+ fields: dataset.model.order.length
598
+ })));
599
+ return {
600
+ ok: true,
601
+ table: {
602
+ title: 'Datasets',
603
+ source,
604
+ period: null,
605
+ columns: [
606
+ {
607
+ key: 'dataset',
608
+ label: 'Dataset',
609
+ kind: 'text'
610
+ },
611
+ {
612
+ key: 'records',
613
+ label: 'Records',
614
+ kind: 'count'
615
+ },
616
+ {
617
+ key: 'fields',
618
+ label: 'Fields',
619
+ kind: 'count'
620
+ }
621
+ ],
622
+ rows: counted,
623
+ omitted: Math.max(0, datasets.length - counted.length),
624
+ notes: []
625
+ }
626
+ };
627
+ }
628
+ const dataset = datasets.find((entry)=>entry.id === named || entry.name.toLowerCase() === named.toLowerCase());
629
+ if (!dataset) return refused(404, 'That dataset is not one you can read here');
630
+ const { rows: values, total } = await readRecords(db, request.orgId, dataset.id);
631
+ const rows = dataset.model.order.slice(0, PLUGIN_FIGURE_MAX_ROWS).map((fieldId)=>{
632
+ var _ref;
633
+ const field = dataset.model.fields[fieldId];
634
+ const filled = values.filter((entry)=>entry[fieldId] !== null && entry[fieldId] !== undefined && entry[fieldId] !== '');
635
+ const numbers = NUMERIC_TYPES.has(String(field == null ? void 0 : field.type)) ? filled.map((entry)=>entry[fieldId]).filter((value)=>typeof value === 'number' && Number.isFinite(value)) : [];
636
+ return {
637
+ field: str(field == null ? void 0 : field.name) || fieldId,
638
+ type: String((_ref = field == null ? void 0 : field.type) != null ? _ref : 'text'),
639
+ filled: share(filled.length, values.length),
640
+ distinct: new Set(filled.map((entry)=>groupLabel(entry[fieldId]))).size,
641
+ lowest: numbers.length ? Math.min(...numbers) : null,
642
+ average: numbers.length ? Math.round(numbers.reduce((sum, value)=>sum + value, 0) / numbers.length * 100) / 100 : null,
643
+ highest: numbers.length ? Math.max(...numbers) : null
644
+ };
645
+ });
646
+ return {
647
+ ok: true,
648
+ table: {
649
+ title: `${dataset.name}: fields`,
650
+ source,
651
+ period: null,
652
+ columns: [
653
+ {
654
+ key: 'field',
655
+ label: 'Field',
656
+ kind: 'text'
657
+ },
658
+ {
659
+ key: 'type',
660
+ label: 'Type',
661
+ kind: 'text'
662
+ },
663
+ {
664
+ key: 'filled',
665
+ label: 'Records that fill it',
666
+ kind: 'percent'
667
+ },
668
+ {
669
+ key: 'distinct',
670
+ label: 'Distinct values',
671
+ kind: 'count'
672
+ },
673
+ {
674
+ key: 'lowest',
675
+ label: 'Lowest',
676
+ kind: 'number'
677
+ },
678
+ {
679
+ key: 'average',
680
+ label: 'Average',
681
+ kind: 'number'
682
+ },
683
+ {
684
+ key: 'highest',
685
+ label: 'Highest',
686
+ kind: 'number'
687
+ }
688
+ ],
689
+ rows,
690
+ omitted: Math.max(0, dataset.model.order.length - rows.length),
691
+ notes: readNote(values.length, total)
692
+ }
693
+ };
694
+ }
695
+ }),
696
+ _extends({}, base, {
697
+ id: 'datasets.breakdown',
698
+ label: 'Dataset breakdown',
699
+ description: 'One dataset’s records grouped by the values of one field, with how many records each group holds and, for a number field, its sum, average, lowest or highest in each group.',
700
+ params: [
701
+ {
702
+ name: 'dataset',
703
+ description: 'The dataset’s id or name.',
704
+ required: true
705
+ },
706
+ {
707
+ name: 'group',
708
+ description: 'The field to group records by, by id or name.',
709
+ required: true
710
+ },
711
+ {
712
+ name: 'measure',
713
+ description: 'A number field to aggregate, by id or name; empty to count records.',
714
+ required: false
715
+ },
716
+ {
717
+ name: 'operation',
718
+ description: `One of ${AI_DATASET_OPERATIONS.join(', ')}; count when empty.`,
719
+ required: false
720
+ }
721
+ ],
722
+ read: async (request)=>{
723
+ var _request_params_dataset, _request_params_group, _request_params_operation;
724
+ var _dataset_model_fields_measure, _dataset_model_fields_group, _dataset_model_fields_measure1;
725
+ const db = firestore();
726
+ const datasets = await visibleDatasets(db, request);
727
+ const named = (_request_params_dataset = request.params['dataset']) != null ? _request_params_dataset : '';
728
+ const dataset = datasets.find((entry)=>entry.id === named || entry.name.toLowerCase() === named.toLowerCase());
729
+ if (!dataset) return refused(404, 'That dataset is not one you can read here');
730
+ const group = fieldOf(dataset.model, (_request_params_group = request.params['group']) != null ? _request_params_group : '');
731
+ if (!group) return refused(400, 'That dataset has no field by that name to group by');
732
+ const operation = (_request_params_operation = request.params['operation']) != null ? _request_params_operation : 'count';
733
+ if (!AI_DATASET_OPERATIONS.includes(operation)) {
734
+ return refused(400, `The operation is one of ${AI_DATASET_OPERATIONS.join(', ')}`);
735
+ }
736
+ const measure = request.params['measure'] ? fieldOf(dataset.model, request.params['measure']) : null;
737
+ if (operation !== 'count' && (!measure || !NUMERIC_TYPES.has(String((_dataset_model_fields_measure = dataset.model.fields[measure]) == null ? void 0 : _dataset_model_fields_measure.type)))) {
738
+ return refused(400, 'Only a number field can be summed, averaged or ranged');
739
+ }
740
+ const { rows: values, total } = await readRecords(db, request.orgId, dataset.id);
741
+ const groups = new Map();
742
+ const sizes = new Map();
743
+ for (const entry of values){
744
+ var _sizes_get;
745
+ const label = groupLabel(entry[group]);
746
+ sizes.set(label, ((_sizes_get = sizes.get(label)) != null ? _sizes_get : 0) + 1);
747
+ const value = measure ? entry[measure] : null;
748
+ if (typeof value === 'number' && Number.isFinite(value)) {
749
+ var _groups_get;
750
+ groups.set(label, [
751
+ ...(_groups_get = groups.get(label)) != null ? _groups_get : [],
752
+ value
753
+ ]);
754
+ }
755
+ }
756
+ if (sizes.size > AI_DATASET_MAX_GROUP_VALUES) {
757
+ return refused(400, `That field has more than ${AI_DATASET_MAX_GROUP_VALUES} different values, too many to group by. Group by a field many records share, such as a state, a status or a category`);
758
+ }
759
+ // A group of fewer than AI_DATASET_MIN_GROUP records is folded into
760
+ // one row: a group that small is a record, and its label could be a
761
+ // person's name.
762
+ const small = [
763
+ ...sizes.entries()
764
+ ].filter(([, size])=>size < AI_DATASET_MIN_GROUP);
765
+ const aggregate = (numbers)=>{
766
+ if (operation === 'count') return null;
767
+ if (!numbers.length) return null;
768
+ const sum = numbers.reduce((acc, value)=>acc + value, 0);
769
+ switch(operation){
770
+ case 'sum':
771
+ return Math.round(sum * 100) / 100;
772
+ case 'average':
773
+ return Math.round(sum / numbers.length * 100) / 100;
774
+ case 'min':
775
+ return Math.min(...numbers);
776
+ default:
777
+ return Math.max(...numbers);
778
+ }
779
+ };
780
+ const row = (group, records, numbers)=>operation === 'count' ? {
781
+ group,
782
+ records
783
+ } : {
784
+ group,
785
+ records,
786
+ value: aggregate(numbers)
787
+ };
788
+ const rows = [
789
+ ...sizes.entries()
790
+ ].filter(([, size])=>size >= AI_DATASET_MIN_GROUP).map(([label, size])=>{
791
+ var _groups_get;
792
+ return row(label, size, (_groups_get = groups.get(label)) != null ? _groups_get : []);
793
+ });
794
+ if (small.length) {
795
+ rows.push(row(`Other (${small.length} groups under ${AI_DATASET_MIN_GROUP} records)`, small.reduce((sum, [, size])=>sum + size, 0), small.flatMap(([label])=>{
796
+ var _groups_get;
797
+ return (_groups_get = groups.get(label)) != null ? _groups_get : [];
798
+ })));
799
+ }
800
+ rows.sort((a, b)=>{
801
+ var _b_value, _a_value;
802
+ return num((_b_value = b['value']) != null ? _b_value : b['records']) - num((_a_value = a['value']) != null ? _a_value : a['records']);
803
+ });
804
+ const groupName = str((_dataset_model_fields_group = dataset.model.fields[group]) == null ? void 0 : _dataset_model_fields_group.name) || group;
805
+ const measureName = measure ? str((_dataset_model_fields_measure1 = dataset.model.fields[measure]) == null ? void 0 : _dataset_model_fields_measure1.name) || measure : '';
806
+ return {
807
+ ok: true,
808
+ table: {
809
+ title: `${dataset.name} by ${groupName}`,
810
+ source,
811
+ period: null,
812
+ columns: [
813
+ {
814
+ key: 'group',
815
+ label: groupName,
816
+ kind: 'text'
817
+ },
818
+ {
819
+ key: 'records',
820
+ label: 'Records',
821
+ kind: 'count'
822
+ },
823
+ ...operation === 'count' ? [] : [
824
+ {
825
+ key: 'value',
826
+ label: `${operation[0].toUpperCase()}${operation.slice(1)} of ${measureName}`,
827
+ kind: 'number'
828
+ }
829
+ ]
830
+ ],
831
+ rows: rows.slice(0, PLUGIN_FIGURE_MAX_ROWS),
832
+ omitted: Math.max(0, rows.length - PLUGIN_FIGURE_MAX_ROWS),
833
+ notes: [
834
+ ...readNote(values.length, total),
835
+ ...small.length ? [
836
+ `Groups of fewer than ${AI_DATASET_MIN_GROUP} records are counted together as Other.`
837
+ ] : []
838
+ ]
839
+ }
840
+ };
841
+ }
842
+ })
843
+ ];
844
+ }
845
+ /** Every reader this plugin registers, for the platform's own records. */ export function aiFigureReaders(firestore) {
846
+ return [
847
+ ...trafficFigureReaders(firestore),
848
+ formsFigureReader(firestore),
849
+ ...datasetFigureReaders(firestore)
850
+ ];
851
+ }
852
+ /**
853
+ * Registers them from the console surface, the one surface that runs insight
854
+ * jobs. By a call, never by an import (AGL-3025).
855
+ */ export function registerAiFigureReaders(firestore) {
856
+ for (const reader of aiFigureReaders(firestore)){
857
+ registerPluginFigureReader(reader, {
858
+ pluginId: AI_PLUGIN_ID
859
+ });
860
+ }
861
+ }
862
+
863
+ //# sourceMappingURL=ai-figure-readers.js.map