@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,114 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Aglyn LLC
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */ /**
17
+ * THE CUTOVER (AGL-3011): one switch, and everything hangs off it.
18
+ *
19
+ * `AI_OVERAGE_INVOICED_FROM` names the first month (`YYYY-MM`) in which AI
20
+ * overage is billed by invoice as it accrues. Unset — which is how it ships
21
+ * — every workspace behaves exactly as it does today: overage accrues, the
22
+ * monthly sweep prices it into the meter event, and the renewal invoice
23
+ * bills it. Nothing charges mid-period and nothing new refuses.
24
+ *
25
+ * ## Why the GUARDS are behind the same switch as the charging
26
+ *
27
+ * The unpaid bound refuses a workspace whose accrued overage has not been
28
+ * paid for. Before cutover nothing charges, so nothing is ever paid for, so
29
+ * every workspace past $50 of overage would be refused with no invoice to
30
+ * pay and no way to clear it. A bound with no way to settle is not a bound,
31
+ * it is a wall — and a wall nobody agreed to.
32
+ *
33
+ * So the guards read this same switch. Turning it on turns on the charging
34
+ * and the guards together, which is the only combination in which each one
35
+ * makes sense.
36
+ *
37
+ * ## Why it is a month and not a boolean
38
+ *
39
+ * The meter and the invoice must never both bill one month's overage. A
40
+ * month is the unit the meter reports in, so a month is the unit the handover
41
+ * has to be expressed in: everything before the named month bills through the
42
+ * meter exactly as it always did, and everything from it bills by invoice.
43
+ * A boolean flipped mid-month would split one month's overage across both
44
+ * channels and bill part of it twice.
45
+ */ import { registerPluginMeteredLine } from "@aglyn/aglyn/plugin-manager/plugin-metered-lines";
46
+ import { AI_PLUGIN_ID } from "../constants.js";
47
+ /**
48
+ * Core's own name for the AI overage line in the monthly usage sweep. The
49
+ * sweep asks the registry by this id; the plugin answers.
50
+ */ export const AI_OVERAGE_METER_LINE_ID = 'assist-overage';
51
+ /** The environment variable that starts mid-period charging. */ export const AI_OVERAGE_INVOICED_FROM_ENV = 'AI_OVERAGE_INVOICED_FROM';
52
+ const MONTH = /^\d{4}-\d{2}$/;
53
+ /**
54
+ * The configured cutover month, or `null` when there is none.
55
+ *
56
+ * Read on every call rather than cached, so setting the variable takes
57
+ * effect without a restart and a process that started before it was set is
58
+ * not stuck a month behind.
59
+ *
60
+ * An unparseable value is `null`, not an error: a typo must leave the
61
+ * platform billing through the channel that works, not stop billing.
62
+ */ export function aiOverageInvoicedFrom() {
63
+ var _process_env_AI_OVERAGE_INVOICED_FROM_ENV;
64
+ const raw = String((_process_env_AI_OVERAGE_INVOICED_FROM_ENV = process.env[AI_OVERAGE_INVOICED_FROM_ENV]) != null ? _process_env_AI_OVERAGE_INVOICED_FROM_ENV : '').trim();
65
+ return MONTH.test(raw) ? raw : null;
66
+ }
67
+ /**
68
+ * Is AI overage billed by invoice — rather than through the monthly meter —
69
+ * for this month?
70
+ *
71
+ * `YYYY-MM` is zero-padded and fixed width, so it orders identically as a
72
+ * string and as a date; the format checks are what make that true rather
73
+ * than lucky.
74
+ */ export function aiOverageBillsByInvoice(month) {
75
+ const from = aiOverageInvoicedFrom();
76
+ if (!from) return false;
77
+ if (!MONTH.test(month)) return false;
78
+ return month >= from;
79
+ }
80
+ /**
81
+ * Are the overage guards live for this month?
82
+ *
83
+ * The same answer as `aiOverageBillsByInvoice`, given its own name because
84
+ * it is asked for a different reason and a reader of the gate should not
85
+ * have to work out why the gate consults a billing question. If the two ever
86
+ * need to differ, this is where that would be said — and it would need a
87
+ * paragraph explaining how a workspace refused for unpaid overage is
88
+ * supposed to pay it.
89
+ */ export function aiOverageGuardsApply(month) {
90
+ return aiOverageBillsByInvoice(month);
91
+ }
92
+ /**
93
+ * Claims the meter line, so the monthly sweep leaves AI overage out of the
94
+ * figure it meters from the cutover month on.
95
+ *
96
+ * Registered from the plugin's server declarations, at boot, because the
97
+ * sweep is a core cron that never loads an AI door. Idempotent by the
98
+ * registry's own rule: the same plugin re-claiming replaces its claim.
99
+ */ export function registerAiOverageMeteredLine() {
100
+ registerPluginMeteredLine({
101
+ lineId: AI_OVERAGE_METER_LINE_ID,
102
+ pluginId: AI_PLUGIN_ID,
103
+ billsFrom: aiOverageInvoicedFrom,
104
+ // Loaded on the first closed month rather than at boot, so the console's
105
+ // every process does not carry the Stripe path for a sweep that runs
106
+ // once a day in one of them.
107
+ closeMonth: async (context)=>{
108
+ const { closeAiOverageMonth } = await import("./ai-overage-close.js");
109
+ await closeAiOverageMonth(context);
110
+ }
111
+ });
112
+ }
113
+
114
+ //# sourceMappingURL=ai-overage-cutover.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../../libs/plugins/ai/src/lib/billing/ai-overage-cutover.ts"],"sourcesContent":["/**\n * @license\n * Copyright 2026 Aglyn LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * THE CUTOVER (AGL-3011): one switch, and everything hangs off it.\n *\n * `AI_OVERAGE_INVOICED_FROM` names the first month (`YYYY-MM`) in which AI\n * overage is billed by invoice as it accrues. Unset — which is how it ships\n * — every workspace behaves exactly as it does today: overage accrues, the\n * monthly sweep prices it into the meter event, and the renewal invoice\n * bills it. Nothing charges mid-period and nothing new refuses.\n *\n * ## Why the GUARDS are behind the same switch as the charging\n *\n * The unpaid bound refuses a workspace whose accrued overage has not been\n * paid for. Before cutover nothing charges, so nothing is ever paid for, so\n * every workspace past $50 of overage would be refused with no invoice to\n * pay and no way to clear it. A bound with no way to settle is not a bound,\n * it is a wall — and a wall nobody agreed to.\n *\n * So the guards read this same switch. Turning it on turns on the charging\n * and the guards together, which is the only combination in which each one\n * makes sense.\n *\n * ## Why it is a month and not a boolean\n *\n * The meter and the invoice must never both bill one month's overage. A\n * month is the unit the meter reports in, so a month is the unit the handover\n * has to be expressed in: everything before the named month bills through the\n * meter exactly as it always did, and everything from it bills by invoice.\n * A boolean flipped mid-month would split one month's overage across both\n * channels and bill part of it twice.\n */\n\nimport { registerPluginMeteredLine } from '@aglyn/aglyn/plugin-manager/plugin-metered-lines'\nimport { AI_PLUGIN_ID } from '../constants'\n\n/**\n * Core's own name for the AI overage line in the monthly usage sweep. The\n * sweep asks the registry by this id; the plugin answers.\n */\nexport const AI_OVERAGE_METER_LINE_ID = 'assist-overage'\n\n/** The environment variable that starts mid-period charging. */\nexport const AI_OVERAGE_INVOICED_FROM_ENV = 'AI_OVERAGE_INVOICED_FROM'\n\nconst MONTH = /^\\d{4}-\\d{2}$/\n\n/**\n * The configured cutover month, or `null` when there is none.\n *\n * Read on every call rather than cached, so setting the variable takes\n * effect without a restart and a process that started before it was set is\n * not stuck a month behind.\n *\n * An unparseable value is `null`, not an error: a typo must leave the\n * platform billing through the channel that works, not stop billing.\n */\nexport function aiOverageInvoicedFrom(): string | null {\n const raw = String(process.env[AI_OVERAGE_INVOICED_FROM_ENV] ?? '').trim()\n return MONTH.test(raw) ? raw : null\n}\n\n/**\n * Is AI overage billed by invoice — rather than through the monthly meter —\n * for this month?\n *\n * `YYYY-MM` is zero-padded and fixed width, so it orders identically as a\n * string and as a date; the format checks are what make that true rather\n * than lucky.\n */\nexport function aiOverageBillsByInvoice(month: string): boolean {\n const from = aiOverageInvoicedFrom()\n if (!from) return false\n if (!MONTH.test(month)) return false\n return month >= from\n}\n\n/**\n * Are the overage guards live for this month?\n *\n * The same answer as `aiOverageBillsByInvoice`, given its own name because\n * it is asked for a different reason and a reader of the gate should not\n * have to work out why the gate consults a billing question. If the two ever\n * need to differ, this is where that would be said — and it would need a\n * paragraph explaining how a workspace refused for unpaid overage is\n * supposed to pay it.\n */\nexport function aiOverageGuardsApply(month: string): boolean {\n return aiOverageBillsByInvoice(month)\n}\n\n/**\n * Claims the meter line, so the monthly sweep leaves AI overage out of the\n * figure it meters from the cutover month on.\n *\n * Registered from the plugin's server declarations, at boot, because the\n * sweep is a core cron that never loads an AI door. Idempotent by the\n * registry's own rule: the same plugin re-claiming replaces its claim.\n */\nexport function registerAiOverageMeteredLine(): void {\n registerPluginMeteredLine({\n lineId: AI_OVERAGE_METER_LINE_ID,\n pluginId: AI_PLUGIN_ID,\n billsFrom: aiOverageInvoicedFrom,\n // Loaded on the first closed month rather than at boot, so the console's\n // every process does not carry the Stripe path for a sweep that runs\n // once a day in one of them.\n closeMonth: async (context) => {\n const { closeAiOverageMonth } = await import('./ai-overage-close')\n await closeAiOverageMonth(context)\n },\n })\n}\n"],"names":["registerPluginMeteredLine","AI_PLUGIN_ID","AI_OVERAGE_METER_LINE_ID","AI_OVERAGE_INVOICED_FROM_ENV","MONTH","aiOverageInvoicedFrom","process","raw","String","env","trim","test","aiOverageBillsByInvoice","month","from","aiOverageGuardsApply","registerAiOverageMeteredLine","lineId","pluginId","billsFrom","closeMonth","context","closeAiOverageMonth"],"mappings":"AAAA;;;;;;;;;;;;;;;CAeC,GAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6BC,GAED,SAASA,yBAAyB,QAAQ,mDAAkD;AAC5F,SAASC,YAAY,QAAQ,kBAAc;AAE3C;;;CAGC,GACD,OAAO,MAAMC,2BAA2B,iBAAgB;AAExD,8DAA8D,GAC9D,OAAO,MAAMC,+BAA+B,2BAA0B;AAEtE,MAAMC,QAAQ;AAEd;;;;;;;;;CASC,GACD,OAAO,SAASC;QACKC;IAAnB,MAAMC,MAAMC,QAAOF,4CAAAA,QAAQG,GAAG,CAACN,6BAA6B,YAAzCG,4CAA6C,IAAII,IAAI;IACxE,OAAON,MAAMO,IAAI,CAACJ,OAAOA,MAAM;AACjC;AAEA;;;;;;;CAOC,GACD,OAAO,SAASK,wBAAwBC,KAAa;IACnD,MAAMC,OAAOT;IACb,IAAI,CAACS,MAAM,OAAO;IAClB,IAAI,CAACV,MAAMO,IAAI,CAACE,QAAQ,OAAO;IAC/B,OAAOA,SAASC;AAClB;AAEA;;;;;;;;;CASC,GACD,OAAO,SAASC,qBAAqBF,KAAa;IAChD,OAAOD,wBAAwBC;AACjC;AAEA;;;;;;;CAOC,GACD,OAAO,SAASG;IACdhB,0BAA0B;QACxBiB,QAAQf;QACRgB,UAAUjB;QACVkB,WAAWd;QACX,yEAAyE;QACzE,qEAAqE;QACrE,6BAA6B;QAC7Be,YAAY,OAAOC;YACjB,MAAM,EAAEC,mBAAmB,EAAE,GAAG,MAAM,MAAM,CAAC;YAC7C,MAAMA,oBAAoBD;QAC5B;IACF;AACF"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Aglyn LLC
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+ import type { PluginEventPayloads } from '@aglyn/aglyn/plugin-manager/plugin-events';
18
+ /** The metadata an invoice of ours carries. */
19
+ export declare const AI_OVERAGE_INVOICE_KIND = "ai-overage";
20
+ interface OverageInvoice {
21
+ chargeId: string;
22
+ month: string;
23
+ }
24
+ /**
25
+ * Is this invoice one of ours, and which charge does it settle?
26
+ *
27
+ * Both halves are required. `pluginId` alone would claim an invoice another
28
+ * AI feature might one day raise, and a `chargeId` alone would claim any
29
+ * invoice that happened to carry the key.
30
+ */
31
+ export declare function aiOverageInvoiceFromMetadata(metadata: Readonly<Record<string, string>>): OverageInvoice | null;
32
+ /**
33
+ * An invoice was paid.
34
+ *
35
+ * Three consequences, and they are independent of each other:
36
+ *
37
+ * 1. The workspace's payment history moves, which is what raises the ceiling
38
+ * over time. Every real payment counts, ours or a renewal.
39
+ * 2. If it was OUR invoice, the charge is settled — and settling is what
40
+ * lowers the unpaid balance the gate refuses on, so paying is what lets a
41
+ * workspace keep going.
42
+ * 3. A pause this invoice caused is lifted. A paid renewal also lifts a
43
+ * `past_due` pause, because past due is exactly what it stopped being.
44
+ */
45
+ export declare function onAiBillingInvoicePaid(payload: PluginEventPayloads['billing.invoice.paid'], now?: Date): Promise<void>;
46
+ /**
47
+ * A charge attempt failed.
48
+ *
49
+ * Ours pauses on `charge_failed` and names the invoice, so the sentence the
50
+ * customer reads points at something they can pay. Anything else is the
51
+ * workspace's own subscription falling past due, which pauses for a
52
+ * different reason and names no invoice of ours.
53
+ *
54
+ * Either way the workspace keeps its INCLUDED credits. Pausing overage is
55
+ * about credit we extend between invoices; the band was paid for in advance.
56
+ */
57
+ export declare function onAiBillingInvoiceFailed(payload: PluginEventPayloads['billing.invoice.failed'], now?: Date): Promise<void>;
58
+ /**
59
+ * An invoice was voided or written off.
60
+ *
61
+ * Only ours matters here: the charge is closed as `void`, and the pause it
62
+ * set is lifted. Nothing is re-billed — voiding an invoice is a decision
63
+ * that these dollars are not owed, and the ledger keeps the row so the
64
+ * decision is visible rather than looking like a gap in the sequence.
65
+ */
66
+ export declare function onAiBillingInvoiceClosed(payload: PluginEventPayloads['billing.invoice.closed']): Promise<void>;
67
+ /** A dispute resets the ladder and pauses until staff review it. */
68
+ export declare function onAiBillingDisputeOpened(payload: PluginEventPayloads['billing.dispute.opened'], now?: Date): Promise<void>;
69
+ /**
70
+ * The default payment method changed.
71
+ *
72
+ * Mirrored rather than looked up at the gate: the reservation runs on every
73
+ * metered request and a Stripe round trip there would put a vendor's
74
+ * latency on the critical path of every AI turn.
75
+ */
76
+ export declare function onAiBillingPaymentMethodChanged(payload: PluginEventPayloads['billing.paymentMethod.changed']): Promise<void>;
77
+ export {};
@@ -0,0 +1,174 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Aglyn LLC
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */ /**
17
+ * WHAT THE PLATFORM'S BILLING EVENTS MEAN TO AI OVERAGE (AGL-3011).
18
+ *
19
+ * Five facts reach the plugin from the platform's Stripe webhook, and this
20
+ * module is where each one becomes a change to a workspace's standing. The
21
+ * plugin subscribes no Stripe endpoint of its own: core raises the fact, the
22
+ * plugin decides what it means.
23
+ *
24
+ * ## Whose invoice is it
25
+ *
26
+ * Every invoice this plugin creates is stamped `pluginId: 'ai'` and
27
+ * `kind: 'ai-overage'`. An invoice carrying those is OURS — its outcome
28
+ * settles a charge in the ledger. An invoice without them is the workspace's
29
+ * subscription, and it still matters: a failed renewal is a past-due
30
+ * workspace, and extending it credit between invoices is precisely what must
31
+ * not happen while it owes us money.
32
+ *
33
+ * ## Resuming needs no cron
34
+ *
35
+ * The gate reads the standing document on every request past the band, so
36
+ * clearing a pause here is the whole of "overage resumes". There is nothing
37
+ * to schedule and no cache to expire: the next request sees it.
38
+ */ import { firebaseAdmin } from "@aglyn/tenant-data-admin";
39
+ import { assistUsageMonth } from "../usage/assist-usage.js";
40
+ import { AI_PLUGIN_ID } from "../constants.js";
41
+ import { settleAiOverageCharge } from "./ai-overage-ledger.js";
42
+ import { pauseAiOverage, recordAiOveragePaidInvoice, recordAiOveragePaymentMethod, recordAiOverageDispute, resumeAiOverage } from "./ai-overage-standing-writes.js";
43
+ /** The metadata an invoice of ours carries. */ export const AI_OVERAGE_INVOICE_KIND = 'ai-overage';
44
+ /**
45
+ * Is this invoice one of ours, and which charge does it settle?
46
+ *
47
+ * Both halves are required. `pluginId` alone would claim an invoice another
48
+ * AI feature might one day raise, and a `chargeId` alone would claim any
49
+ * invoice that happened to carry the key.
50
+ */ export function aiOverageInvoiceFromMetadata(metadata) {
51
+ var _metadata_chargeId, _metadata_month;
52
+ if (metadata['pluginId'] !== AI_PLUGIN_ID) return null;
53
+ if (metadata['kind'] !== AI_OVERAGE_INVOICE_KIND) return null;
54
+ const chargeId = String((_metadata_chargeId = metadata['chargeId']) != null ? _metadata_chargeId : '').trim();
55
+ const month = String((_metadata_month = metadata['month']) != null ? _metadata_month : '').trim();
56
+ if (!chargeId || !/^\d{4}-\d{2}$/.test(month)) return null;
57
+ return {
58
+ chargeId,
59
+ month
60
+ };
61
+ }
62
+ function firestore() {
63
+ return firebaseAdmin.app().firestore();
64
+ }
65
+ /**
66
+ * An invoice was paid.
67
+ *
68
+ * Three consequences, and they are independent of each other:
69
+ *
70
+ * 1. The workspace's payment history moves, which is what raises the ceiling
71
+ * over time. Every real payment counts, ours or a renewal.
72
+ * 2. If it was OUR invoice, the charge is settled — and settling is what
73
+ * lowers the unpaid balance the gate refuses on, so paying is what lets a
74
+ * workspace keep going.
75
+ * 3. A pause this invoice caused is lifted. A paid renewal also lifts a
76
+ * `past_due` pause, because past due is exactly what it stopped being.
77
+ */ export async function onAiBillingInvoicePaid(payload, now = new Date()) {
78
+ const db = firestore();
79
+ await recordAiOveragePaidInvoice(db, payload.orgId, {
80
+ month: assistUsageMonth(now),
81
+ amountPaidCents: payload.amountPaidCents,
82
+ paidOutOfBand: payload.paidOutOfBand
83
+ });
84
+ const ours = aiOverageInvoiceFromMetadata(payload.metadata);
85
+ if (ours) {
86
+ await settleAiOverageCharge(db, payload.orgId, {
87
+ chargeId: ours.chargeId,
88
+ month: ours.month,
89
+ invoiceId: payload.invoiceId,
90
+ status: 'paid',
91
+ // The event's own figure (AGL-3023): what Stripe collected, which is
92
+ // the only thing that may clear what the gate refuses on.
93
+ paidUsd: payload.amountPaidCents / 100
94
+ });
95
+ await resumeAiOverage(db, payload.orgId, {
96
+ invoiceId: payload.invoiceId
97
+ });
98
+ return;
99
+ }
100
+ // A renewal paid. It clears the `past_due` pause its own failure set, and
101
+ // NOTHING else: an AI charge that failed is still an open invoice, and
102
+ // resuming accrual against it would let the unpaid balance grow.
103
+ await resumeAiOverage(db, payload.orgId, {
104
+ reason: 'past_due'
105
+ });
106
+ }
107
+ /**
108
+ * A charge attempt failed.
109
+ *
110
+ * Ours pauses on `charge_failed` and names the invoice, so the sentence the
111
+ * customer reads points at something they can pay. Anything else is the
112
+ * workspace's own subscription falling past due, which pauses for a
113
+ * different reason and names no invoice of ours.
114
+ *
115
+ * Either way the workspace keeps its INCLUDED credits. Pausing overage is
116
+ * about credit we extend between invoices; the band was paid for in advance.
117
+ */ export async function onAiBillingInvoiceFailed(payload, now = new Date()) {
118
+ const db = firestore();
119
+ const ours = aiOverageInvoiceFromMetadata(payload.metadata);
120
+ if (ours) {
121
+ await settleAiOverageCharge(db, payload.orgId, {
122
+ chargeId: ours.chargeId,
123
+ month: ours.month,
124
+ invoiceId: payload.invoiceId,
125
+ status: 'failed'
126
+ });
127
+ await pauseAiOverage(db, payload.orgId, {
128
+ reason: 'charge_failed',
129
+ invoiceId: payload.invoiceId,
130
+ now
131
+ });
132
+ return;
133
+ }
134
+ await pauseAiOverage(db, payload.orgId, {
135
+ reason: 'past_due',
136
+ invoiceId: null,
137
+ now
138
+ });
139
+ }
140
+ /**
141
+ * An invoice was voided or written off.
142
+ *
143
+ * Only ours matters here: the charge is closed as `void`, and the pause it
144
+ * set is lifted. Nothing is re-billed — voiding an invoice is a decision
145
+ * that these dollars are not owed, and the ledger keeps the row so the
146
+ * decision is visible rather than looking like a gap in the sequence.
147
+ */ export async function onAiBillingInvoiceClosed(payload) {
148
+ const ours = aiOverageInvoiceFromMetadata(payload.metadata);
149
+ if (!ours) return;
150
+ const db = firestore();
151
+ await settleAiOverageCharge(db, payload.orgId, {
152
+ chargeId: ours.chargeId,
153
+ month: ours.month,
154
+ invoiceId: payload.invoiceId,
155
+ status: 'void'
156
+ });
157
+ await resumeAiOverage(db, payload.orgId, {
158
+ invoiceId: payload.invoiceId
159
+ });
160
+ }
161
+ /** A dispute resets the ladder and pauses until staff review it. */ export async function onAiBillingDisputeOpened(payload, now = new Date()) {
162
+ await recordAiOverageDispute(firestore(), payload.orgId, now);
163
+ }
164
+ /**
165
+ * The default payment method changed.
166
+ *
167
+ * Mirrored rather than looked up at the gate: the reservation runs on every
168
+ * metered request and a Stripe round trip there would put a vendor's
169
+ * latency on the critical path of every AI turn.
170
+ */ export async function onAiBillingPaymentMethodChanged(payload) {
171
+ await recordAiOveragePaymentMethod(firestore(), payload.orgId, payload.defaultType);
172
+ }
173
+
174
+ //# sourceMappingURL=ai-overage-events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../../libs/plugins/ai/src/lib/billing/ai-overage-events.ts"],"sourcesContent":["/**\n * @license\n * Copyright 2026 Aglyn LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * WHAT THE PLATFORM'S BILLING EVENTS MEAN TO AI OVERAGE (AGL-3011).\n *\n * Five facts reach the plugin from the platform's Stripe webhook, and this\n * module is where each one becomes a change to a workspace's standing. The\n * plugin subscribes no Stripe endpoint of its own: core raises the fact, the\n * plugin decides what it means.\n *\n * ## Whose invoice is it\n *\n * Every invoice this plugin creates is stamped `pluginId: 'ai'` and\n * `kind: 'ai-overage'`. An invoice carrying those is OURS — its outcome\n * settles a charge in the ledger. An invoice without them is the workspace's\n * subscription, and it still matters: a failed renewal is a past-due\n * workspace, and extending it credit between invoices is precisely what must\n * not happen while it owes us money.\n *\n * ## Resuming needs no cron\n *\n * The gate reads the standing document on every request past the band, so\n * clearing a pause here is the whole of \"overage resumes\". There is nothing\n * to schedule and no cache to expire: the next request sees it.\n */\n\nimport { firebaseAdmin } from '@aglyn/tenant-data-admin'\nimport type { PluginEventPayloads } from '@aglyn/aglyn/plugin-manager/plugin-events'\nimport { assistUsageMonth } from '../usage/assist-usage'\nimport { AI_PLUGIN_ID } from '../constants'\nimport { settleAiOverageCharge } from './ai-overage-ledger'\nimport {\n pauseAiOverage,\n recordAiOveragePaidInvoice,\n recordAiOveragePaymentMethod,\n recordAiOverageDispute,\n resumeAiOverage,\n} from './ai-overage-standing-writes'\n\n/** The metadata an invoice of ours carries. */\nexport const AI_OVERAGE_INVOICE_KIND = 'ai-overage'\n\ninterface OverageInvoice {\n chargeId: string\n month: string\n}\n\n/**\n * Is this invoice one of ours, and which charge does it settle?\n *\n * Both halves are required. `pluginId` alone would claim an invoice another\n * AI feature might one day raise, and a `chargeId` alone would claim any\n * invoice that happened to carry the key.\n */\nexport function aiOverageInvoiceFromMetadata(\n metadata: Readonly<Record<string, string>>,\n): OverageInvoice | null {\n if (metadata['pluginId'] !== AI_PLUGIN_ID) return null\n if (metadata['kind'] !== AI_OVERAGE_INVOICE_KIND) return null\n const chargeId = String(metadata['chargeId'] ?? '').trim()\n const month = String(metadata['month'] ?? '').trim()\n if (!chargeId || !/^\\d{4}-\\d{2}$/.test(month)) return null\n return { chargeId, month }\n}\n\nfunction firestore(): FirebaseFirestore.Firestore {\n return firebaseAdmin.app().firestore()\n}\n\n/**\n * An invoice was paid.\n *\n * Three consequences, and they are independent of each other:\n *\n * 1. The workspace's payment history moves, which is what raises the ceiling\n * over time. Every real payment counts, ours or a renewal.\n * 2. If it was OUR invoice, the charge is settled — and settling is what\n * lowers the unpaid balance the gate refuses on, so paying is what lets a\n * workspace keep going.\n * 3. A pause this invoice caused is lifted. A paid renewal also lifts a\n * `past_due` pause, because past due is exactly what it stopped being.\n */\nexport async function onAiBillingInvoicePaid(\n payload: PluginEventPayloads['billing.invoice.paid'],\n now = new Date(),\n): Promise<void> {\n const db = firestore()\n await recordAiOveragePaidInvoice(db, payload.orgId, {\n month: assistUsageMonth(now),\n amountPaidCents: payload.amountPaidCents,\n paidOutOfBand: payload.paidOutOfBand,\n })\n const ours = aiOverageInvoiceFromMetadata(payload.metadata)\n if (ours) {\n await settleAiOverageCharge(db, payload.orgId, {\n chargeId: ours.chargeId,\n month: ours.month,\n invoiceId: payload.invoiceId,\n status: 'paid',\n // The event's own figure (AGL-3023): what Stripe collected, which is\n // the only thing that may clear what the gate refuses on.\n paidUsd: payload.amountPaidCents / 100,\n })\n await resumeAiOverage(db, payload.orgId, { invoiceId: payload.invoiceId })\n return\n }\n // A renewal paid. It clears the `past_due` pause its own failure set, and\n // NOTHING else: an AI charge that failed is still an open invoice, and\n // resuming accrual against it would let the unpaid balance grow.\n await resumeAiOverage(db, payload.orgId, { reason: 'past_due' })\n}\n\n/**\n * A charge attempt failed.\n *\n * Ours pauses on `charge_failed` and names the invoice, so the sentence the\n * customer reads points at something they can pay. Anything else is the\n * workspace's own subscription falling past due, which pauses for a\n * different reason and names no invoice of ours.\n *\n * Either way the workspace keeps its INCLUDED credits. Pausing overage is\n * about credit we extend between invoices; the band was paid for in advance.\n */\nexport async function onAiBillingInvoiceFailed(\n payload: PluginEventPayloads['billing.invoice.failed'],\n now = new Date(),\n): Promise<void> {\n const db = firestore()\n const ours = aiOverageInvoiceFromMetadata(payload.metadata)\n if (ours) {\n await settleAiOverageCharge(db, payload.orgId, {\n chargeId: ours.chargeId,\n month: ours.month,\n invoiceId: payload.invoiceId,\n status: 'failed',\n })\n await pauseAiOverage(db, payload.orgId, {\n reason: 'charge_failed',\n invoiceId: payload.invoiceId,\n now,\n })\n return\n }\n await pauseAiOverage(db, payload.orgId, { reason: 'past_due', invoiceId: null, now })\n}\n\n/**\n * An invoice was voided or written off.\n *\n * Only ours matters here: the charge is closed as `void`, and the pause it\n * set is lifted. Nothing is re-billed — voiding an invoice is a decision\n * that these dollars are not owed, and the ledger keeps the row so the\n * decision is visible rather than looking like a gap in the sequence.\n */\nexport async function onAiBillingInvoiceClosed(\n payload: PluginEventPayloads['billing.invoice.closed'],\n): Promise<void> {\n const ours = aiOverageInvoiceFromMetadata(payload.metadata)\n if (!ours) return\n const db = firestore()\n await settleAiOverageCharge(db, payload.orgId, {\n chargeId: ours.chargeId,\n month: ours.month,\n invoiceId: payload.invoiceId,\n status: 'void',\n })\n await resumeAiOverage(db, payload.orgId, { invoiceId: payload.invoiceId })\n}\n\n/** A dispute resets the ladder and pauses until staff review it. */\nexport async function onAiBillingDisputeOpened(\n payload: PluginEventPayloads['billing.dispute.opened'],\n now = new Date(),\n): Promise<void> {\n await recordAiOverageDispute(firestore(), payload.orgId, now)\n}\n\n/**\n * The default payment method changed.\n *\n * Mirrored rather than looked up at the gate: the reservation runs on every\n * metered request and a Stripe round trip there would put a vendor's\n * latency on the critical path of every AI turn.\n */\nexport async function onAiBillingPaymentMethodChanged(\n payload: PluginEventPayloads['billing.paymentMethod.changed'],\n): Promise<void> {\n await recordAiOveragePaymentMethod(firestore(), payload.orgId, payload.defaultType)\n}\n"],"names":["firebaseAdmin","assistUsageMonth","AI_PLUGIN_ID","settleAiOverageCharge","pauseAiOverage","recordAiOveragePaidInvoice","recordAiOveragePaymentMethod","recordAiOverageDispute","resumeAiOverage","AI_OVERAGE_INVOICE_KIND","aiOverageInvoiceFromMetadata","metadata","chargeId","String","trim","month","test","firestore","app","onAiBillingInvoicePaid","payload","now","Date","db","orgId","amountPaidCents","paidOutOfBand","ours","invoiceId","status","paidUsd","reason","onAiBillingInvoiceFailed","onAiBillingInvoiceClosed","onAiBillingDisputeOpened","onAiBillingPaymentMethodChanged","defaultType"],"mappings":"AAAA;;;;;;;;;;;;;;;CAeC,GAED;;;;;;;;;;;;;;;;;;;;;;CAsBC,GAED,SAASA,aAAa,QAAQ,2BAA0B;AAExD,SAASC,gBAAgB,QAAQ,2BAAuB;AACxD,SAASC,YAAY,QAAQ,kBAAc;AAC3C,SAASC,qBAAqB,QAAQ,yBAAqB;AAC3D,SACEC,cAAc,EACdC,0BAA0B,EAC1BC,4BAA4B,EAC5BC,sBAAsB,EACtBC,eAAe,QACV,kCAA8B;AAErC,6CAA6C,GAC7C,OAAO,MAAMC,0BAA0B,aAAY;AAOnD;;;;;;CAMC,GACD,OAAO,SAASC,6BACdC,QAA0C;QAIlBA,oBACHA;IAHrB,IAAIA,QAAQ,CAAC,WAAW,KAAKT,cAAc,OAAO;IAClD,IAAIS,QAAQ,CAAC,OAAO,KAAKF,yBAAyB,OAAO;IACzD,MAAMG,WAAWC,QAAOF,qBAAAA,QAAQ,CAAC,WAAW,YAApBA,qBAAwB,IAAIG,IAAI;IACxD,MAAMC,QAAQF,QAAOF,kBAAAA,QAAQ,CAAC,QAAQ,YAAjBA,kBAAqB,IAAIG,IAAI;IAClD,IAAI,CAACF,YAAY,CAAC,gBAAgBI,IAAI,CAACD,QAAQ,OAAO;IACtD,OAAO;QAAEH;QAAUG;IAAM;AAC3B;AAEA,SAASE;IACP,OAAOjB,cAAckB,GAAG,GAAGD,SAAS;AACtC;AAEA;;;;;;;;;;;;CAYC,GACD,OAAO,eAAeE,uBACpBC,OAAoD,EACpDC,MAAM,IAAIC,MAAM;IAEhB,MAAMC,KAAKN;IACX,MAAMZ,2BAA2BkB,IAAIH,QAAQI,KAAK,EAAE;QAClDT,OAAOd,iBAAiBoB;QACxBI,iBAAiBL,QAAQK,eAAe;QACxCC,eAAeN,QAAQM,aAAa;IACtC;IACA,MAAMC,OAAOjB,6BAA6BU,QAAQT,QAAQ;IAC1D,IAAIgB,MAAM;QACR,MAAMxB,sBAAsBoB,IAAIH,QAAQI,KAAK,EAAE;YAC7CZ,UAAUe,KAAKf,QAAQ;YACvBG,OAAOY,KAAKZ,KAAK;YACjBa,WAAWR,QAAQQ,SAAS;YAC5BC,QAAQ;YACR,qEAAqE;YACrE,0DAA0D;YAC1DC,SAASV,QAAQK,eAAe,GAAG;QACrC;QACA,MAAMjB,gBAAgBe,IAAIH,QAAQI,KAAK,EAAE;YAAEI,WAAWR,QAAQQ,SAAS;QAAC;QACxE;IACF;IACA,0EAA0E;IAC1E,uEAAuE;IACvE,iEAAiE;IACjE,MAAMpB,gBAAgBe,IAAIH,QAAQI,KAAK,EAAE;QAAEO,QAAQ;IAAW;AAChE;AAEA;;;;;;;;;;CAUC,GACD,OAAO,eAAeC,yBACpBZ,OAAsD,EACtDC,MAAM,IAAIC,MAAM;IAEhB,MAAMC,KAAKN;IACX,MAAMU,OAAOjB,6BAA6BU,QAAQT,QAAQ;IAC1D,IAAIgB,MAAM;QACR,MAAMxB,sBAAsBoB,IAAIH,QAAQI,KAAK,EAAE;YAC7CZ,UAAUe,KAAKf,QAAQ;YACvBG,OAAOY,KAAKZ,KAAK;YACjBa,WAAWR,QAAQQ,SAAS;YAC5BC,QAAQ;QACV;QACA,MAAMzB,eAAemB,IAAIH,QAAQI,KAAK,EAAE;YACtCO,QAAQ;YACRH,WAAWR,QAAQQ,SAAS;YAC5BP;QACF;QACA;IACF;IACA,MAAMjB,eAAemB,IAAIH,QAAQI,KAAK,EAAE;QAAEO,QAAQ;QAAYH,WAAW;QAAMP;IAAI;AACrF;AAEA;;;;;;;CAOC,GACD,OAAO,eAAeY,yBACpBb,OAAsD;IAEtD,MAAMO,OAAOjB,6BAA6BU,QAAQT,QAAQ;IAC1D,IAAI,CAACgB,MAAM;IACX,MAAMJ,KAAKN;IACX,MAAMd,sBAAsBoB,IAAIH,QAAQI,KAAK,EAAE;QAC7CZ,UAAUe,KAAKf,QAAQ;QACvBG,OAAOY,KAAKZ,KAAK;QACjBa,WAAWR,QAAQQ,SAAS;QAC5BC,QAAQ;IACV;IACA,MAAMrB,gBAAgBe,IAAIH,QAAQI,KAAK,EAAE;QAAEI,WAAWR,QAAQQ,SAAS;IAAC;AAC1E;AAEA,kEAAkE,GAClE,OAAO,eAAeM,yBACpBd,OAAsD,EACtDC,MAAM,IAAIC,MAAM;IAEhB,MAAMf,uBAAuBU,aAAaG,QAAQI,KAAK,EAAEH;AAC3D;AAEA;;;;;;CAMC,GACD,OAAO,eAAec,gCACpBf,OAA6D;IAE7D,MAAMd,6BAA6BW,aAAaG,QAAQI,KAAK,EAAEJ,QAAQgB,WAAW;AACpF"}
@@ -0,0 +1,147 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Aglyn LLC
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+ /**
18
+ * THE OVERAGE GUARDS AT THE GATE (AGL-3011).
19
+ *
20
+ * Four reasons a workspace past its included band is refused, decided from
21
+ * the month's own figures and the workspace's standing, and nothing else.
22
+ * Pure: the reservation transaction calls this with what it has already
23
+ * read, so the guard costs one document read and no round trip.
24
+ *
25
+ * ## The one that matters
26
+ *
27
+ * `settling` is why the bound is a bound. The other three describe a
28
+ * workspace whose payment standing is known to be bad; `settling` describes
29
+ * one whose charges simply have not landed — because a background task was
30
+ * killed, because Stripe was down, because the charge path has a bug, or
31
+ * because it was never switched on. In every one of those cases accrued
32
+ * overage stops at the unpaid limit, having charged nothing. **The bound
33
+ * holds even if a charge never runs**, and that is the whole design.
34
+ *
35
+ * ## Every refusal is `refusedBy: 'cap'`
36
+ *
37
+ * These join the workspace's own overage ceiling (AGL-2898) rather than
38
+ * inventing a sixth refusal class, because they are the same kind of fact: a
39
+ * dollar limit on credits sold past the band. `capReason` says whose limit
40
+ * and which one, which is what decides the status and the sentence. Like
41
+ * every other refusal, they move no counter.
42
+ */
43
+ import { type AiOverageStanding } from './ai-overage-standing';
44
+ /**
45
+ * Which limit refused.
46
+ *
47
+ * - `no-card` the workspace has no card as its default payment method.
48
+ * - `paused` accrual is stopped — a failed charge, a past-due invoice,
49
+ * a dispute, or staff.
50
+ * - `limit` this month's overage reached Aglyn's ceiling.
51
+ * - `settling` accrued-but-unpaid overage reached the unpaid limit.
52
+ * - `customer` the workspace's own ceiling (AGL-2898), which refuses
53
+ * before any of the above and keeps its existing sentence.
54
+ */
55
+ export type AiOverageCapReason = 'no-card' | 'paused' | 'limit' | 'settling' | 'customer';
56
+ /** What the gate hands the guards. All figures are retail dollars. */
57
+ export interface AiOverageGateInput {
58
+ /** This month's overage, priced as the invoice prices it. */
59
+ overageUsd: number;
60
+ /** What of it has been paid — `overagePaidUsd` on the month's rollup. */
61
+ paidUsd: number;
62
+ standing: AiOverageStanding;
63
+ now: Date;
64
+ }
65
+ /** The refusal, with the figure its sentence must quote. */
66
+ export interface AiOverageRefusal {
67
+ capReason: AiOverageCapReason;
68
+ /** The ceiling in force, for `limit`; the unpaid limit for `settling`. */
69
+ limitUsd: number;
70
+ /** What is accrued and unpaid, for the pause and settling sentences. */
71
+ unpaidUsd: number;
72
+ }
73
+ /**
74
+ * Which guard, if any, refuses this request.
75
+ *
76
+ * Order is deliberate and is the order a person can act on: a missing card
77
+ * is one action, a failed charge is another, and both of those are things
78
+ * the workspace can fix right now. A ceiling reached and a balance settling
79
+ * are waits, so they come last. Two guards holding at once is ordinary — a
80
+ * paused workspace is usually also at its unpaid limit — and naming the
81
+ * actionable one is worth more than naming the first one numerically true.
82
+ *
83
+ * `>=` throughout, matching `assistOverageCapReached`: a limit is met when
84
+ * it is met, not once it is passed.
85
+ *
86
+ * The card guard ABSTAINS when nobody has observed the workspace's payment
87
+ * method (see `AiOverageStanding.paymentMethodType`). That is a deliberate
88
+ * hole in the card rule and not in the bound: `settling` below does not read
89
+ * the card at all, so an unobserved workspace is still stopped at the unpaid
90
+ * limit. Closing the hole is a backfill, not a code change.
91
+ */
92
+ export declare function aiOverageRefusal(input: AiOverageGateInput): AiOverageRefusal | null;
93
+ /**
94
+ * The sentence a workspace is told, by reason.
95
+ *
96
+ * In the plugin, beside the guard that produced it, so the figure quoted is
97
+ * the figure that refused. Every one of them says that INCLUDED CREDITS KEEP
98
+ * WORKING, because that is the fact a customer most needs and least expects:
99
+ * these guards stop what is sold past the band, never the band itself.
100
+ *
101
+ * `customer` is not answered here — the workspace's own ceiling keeps the
102
+ * sentence `assistOverageCapRefusalText` already gives it, which names the
103
+ * control by the label the console shows.
104
+ */
105
+ export declare function aiOverageRefusalText(refusal: AiOverageRefusal): string | null;
106
+ /**
107
+ * The HTTP status each reason answers with.
108
+ *
109
+ * 402 where the workspace can settle it — a card to add, an invoice to pay.
110
+ * 429 where it can only wait, which is the status the message cap and the
111
+ * spend ceiling already use for exactly that meaning. The two must not be
112
+ * swapped: a client retrying a 429 is right to, and retrying a 402 is not.
113
+ */
114
+ export declare function aiOverageRefusalStatus(capReason: AiOverageCapReason): 402 | 429;
115
+ /**
116
+ * What the customer's overage card says about when the next charge lands.
117
+ *
118
+ * Here rather than in the component because it is the same arithmetic the
119
+ * charge trigger makes, and a card that named a different figure from the
120
+ * one that actually charges would be worse than a card that named none.
121
+ */
122
+ export declare function aiOverageNextChargeUsd(overageUsd: number, invoicedUsd: number): number;
123
+ /** The refusal fields a reservation carries, without importing its type. */
124
+ export interface AiOverageRefusedReservation {
125
+ refusedBy: string | null;
126
+ capReason?: AiOverageCapReason | null;
127
+ overageLimitUsd?: number | null;
128
+ overageUnpaidUsd?: number | null;
129
+ }
130
+ /**
131
+ * The sentence and status for a reservation that AGLYN'S guards refused, or
132
+ * `null` when they did not.
133
+ *
134
+ * ONE function for all four doors — the chat door, the besigner copy
135
+ * assistant, the shared gate ladder and the generation jobs — because a
136
+ * refusal whose words differ by door is a refusal a customer cannot search
137
+ * for, and because the status and the sentence must agree about whether the
138
+ * workspace can do anything about it.
139
+ *
140
+ * `null` for the workspace's OWN ceiling and for every other refusal, so a
141
+ * door falls through to `assistOwnControlRefusalText` and the sentences it
142
+ * has always given.
143
+ */
144
+ export declare function aiOverageReservationRefusal(reservation: AiOverageRefusedReservation): {
145
+ text: string;
146
+ status: 402 | 429;
147
+ } | null;