@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 @@
1
+ {"version":3,"sources":["../../../../../../../libs/plugins/ai/src/lib/components/assist-signals-page.component.tsx"],"sourcesContent":["/**\n * @license\n * Copyright 2026 Aglyn LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n'use client'\n\nimport { aiAddonName, type ConsoleStaffPageProps } from '@aglyn/aglyn'\nimport { pluginDocsHelp } from '@aglyn/aglyn/app-utils/docs-help'\nimport { CardDisplay } from '@aglyn/shared-ui-jsx'\nimport { ScrollTable } from '@aglyn/shared-ui-jsx/components/scroll-table.component'\nimport {\n Accordion,\n AccordionDetails,\n AccordionSummary,\n Alert,\n Box,\n Chip,\n LinearProgress,\n Stack,\n TableBody,\n TableCell,\n TableHead,\n TableRow,\n Typography,\n} from '@mui/material'\nimport { useEffect, useRef, useState } from 'react'\nimport { useUser } from '@aglyn/tenant-feature-instance'\nimport { authorizedFetch } from '@aglyn/shared-util-http/authorized-token'\nimport type {\n AssistMiningReport,\n AssistSpendRow,\n} from '../usage/assist-signal-mining'\nimport {\n costSplitRows,\n freeTasteRefusals,\n kindTokenRows,\n} from '../usage/assist-signal-mining'\n\n/** The month leaderboard as the route serves it beside the report. */\ninterface AssistSpendLeaderboard {\n month: string\n rows: AssistSpendRow[]\n ranked: number\n truncated: boolean\n failed: boolean\n}\n\n/**\n * The Assist docs-gap and cost board (AGL-1860, AGL-2252) — the read side of\n * the data loop, and until now the half that did not exist.\n *\n * AGL-1972 split every assist turn into prose that expires and a signal that\n * does not, on the reasoning that \"the corpus the loop needs outlives the\n * words that produced it\". That is only true once something reads the corpus.\n * This is that something.\n *\n * Four panels, in the order the questions actually get asked:\n *\n * 1. **Docs gaps** — cited pages ranked by thumbs-down, then volume. A page\n * high on this list is being found and is not answering, which is a docs\n * issue with its evidence attached. The `orgs` column is the sanity\n * check: a gap one workspace has is a workspace, not a gap.\n * 2. **Ungrounded questions** — turns where retrieval matched nothing at\n * all, grouped by the screen the person was on. These cite no page, so\n * they can never appear in the ranking above; a missing page is invisible\n * to anything keyed on paths, and this panel is the only place it shows.\n * 3. **Cost** — per org, dearest first, plus the fleet totals and the\n * cache-read rate. The rate is not decoration: the cached system prefix\n * measures 1,030–1,190 tokens against Sonnet 5's 1,024-token minimum, so\n * whether it caches is an empirical question the chat route could only\n * pose, and this is the evidence.\n * 4. **Tokens by kind** — what each kind of model request costs per\n * request, what it sends and generates, how much of its prompt the cache\n * served, and the p95 output its `max_tokens` is sized against\n * (AGL-2937).\n *\n * Read through `/api/ai/admin/signals` rather than Firestore directly.\n * `assistSignals` is absent from the rules file on purpose — default-deny for\n * every client — which is exactly what lets it hold cross-tenant analytics.\n *\n * The AI plugin's staff page (AGL-2939): the console's generic staff route\n * draws the header, the breadcrumbs and the staff gate around this body, and\n * gives it the tab it had.\n */\n\nconst money = (value: number) =>\n `$${(Number(value) || 0).toFixed(Math.abs(Number(value) || 0) < 1 ? 4 : 2)}`\n\nconst percent = (value: number | null) =>\n value == null ? '—' : `${Math.round(value * 100)}%`\n\n/**\n * One cost breakdown — tier or model, dearest first (AGL-2340).\n *\n * The `share` column is why this is a table rather than a row of chips. The\n * decision it feeds is always comparative — \"is free eating the margin\" is a\n * question about proportion, not about a dollar figure — and a reader asked\n * to divide two numbers in their head does not do it.\n *\n * `turns` is kept beside the money on purpose: a tier that is a third of the\n * traffic and two thirds of the bill is the finding, and neither column says\n * that alone.\n *\n * ## Full width, and stacked rather than side by side\n *\n * Both breakdowns split the SAME total, so the reader's act is scanning one\n * against the other: does the tier carrying the turns also carry the money,\n * and would a cheaper model on the common path move it. Two tables squeezed\n * into thirds of a row put each Cost column at a different horizontal\n * position, so that comparison becomes two separate readings held in the\n * head. Stacked full-width, the Cost and Share columns of both land on the\n * same axis and the comparison is a glance down the page.\n *\n * ## Why the caption is not a row of the table\n *\n * It used to be a `colSpan={4}` cell in `TableHead`, which gave it header\n * styling and made the header two rows deep — so this table's head sat at a\n * different weight and height from the four sibling tables on the same page,\n * which is most of what made the card read as a foreign fragment.\n *\n * ## No footer, and why\n *\n * A breakdown has one row per tier and one per model — single digits, and\n * bounded by the vocabulary rather than by a collection that grows. There is\n * no page two to go to, and a pager over four rows is furniture that teaches\n * a reader to look for pages that never exist.\n */\nfunction CostSplitTable({\n caption,\n label,\n rows,\n totalUsd,\n}: {\n caption: string\n label: string\n rows: { key: string; messages: number; providerCostUsd: number }[]\n totalUsd: number\n}) {\n return (\n <Stack spacing={1} sx={{ width: '100%' }}>\n <Typography variant=\"subtitle2\">{caption}</Typography>\n <ScrollTable size=\"small\">\n <TableHead>\n <TableRow>\n <TableCell>{label}</TableCell>\n <TableCell align=\"right\">Turns</TableCell>\n <TableCell align=\"right\">Cost</TableCell>\n <TableCell align=\"right\">Share</TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {!rows.length ? (\n <TableRow>\n <TableCell colSpan={4}>\n <Typography variant=\"body2\" color=\"text.secondary\">\n No turns in this sample.\n </Typography>\n </TableCell>\n </TableRow>\n ) : (\n rows.map((row) => (\n <TableRow key={row.key}>\n <TableCell>{row.key}</TableCell>\n <TableCell align=\"right\">\n {row.messages.toLocaleString()}\n </TableCell>\n <TableCell align=\"right\">{money(row.providerCostUsd)}</TableCell>\n <TableCell align=\"right\">\n {percent(totalUsd > 0 ? row.providerCostUsd / totalUsd : null)}\n </TableCell>\n </TableRow>\n ))\n )}\n </TableBody>\n </ScrollTable>\n </Stack>\n )\n}\n\n/**\n * The count line under a RANKED table — how much of the ranking is on screen.\n *\n * These three tables are not paged, and the reason is the same for all of\n * them: each is a ranking whose value is its top. Page two of \"where are the\n * docs thin\" is, by construction, the pages least worth rewriting, and a\n * pager over a ranking invites a reader to walk it as if position carried no\n * meaning. What a pager WOULD have given honestly is the count — how much of\n * this am I looking at, and is there more — so that is what this says, and it\n * says it whether or not the ranking was cut.\n *\n * Rendered even when nothing was cut. A disclosure that appears only on\n * truncation is one a reader has never seen before the day it matters, and\n * cannot tell from a card that simply has no footer.\n */\nfunction RankingFootnote({\n shown,\n total,\n noun,\n}: {\n shown: number\n total: number\n /** Both forms: a fleet of one is the common case on a young install. */\n noun: { one: string; many: string }\n}) {\n if (!total) return null\n const counted = `${total.toLocaleString()} ${total === 1 ? noun.one : noun.many}`\n return (\n <Typography variant=\"caption\" color=\"text.secondary\">\n {shown >= total\n ? `Showing all ${counted}.`\n : `Showing the top ${shown.toLocaleString()} of ${counted}. This is a ranking, not a page — what is past the cut is what it ranked lowest.`}\n </Typography>\n )\n}\n\nexport function AssistSignalsPage(_props: ConsoleStaffPageProps) {\n const { data: user } = useUser()\n // Keyed on who is signed in, not on the user object's identity.\n const signedInUid = user?.uid ?? null\n const userRef = useRef(user)\n userRef.current = user\n const [report, setReport] = useState<AssistMiningReport | null>(null)\n const [error, setError] = useState<string | null>(null)\n const [loading, setLoading] = useState(false)\n\n useEffect(() => {\n // Mounted only for a confirmed staff reader: the generic staff route\n // renders this inside `StaffOnly`, which draws nothing while the claim\n // loads, so no request is fired from the loading default.\n const user = userRef.current\n if (!signedInUid || !user) return undefined\n let active = true\n void (async () => {\n setLoading(true)\n setError(null)\n try {\n const response = await authorizedFetch(user, '/api/ai/admin/signals')\n const body = await response.json().catch(() => null)\n if (!active) return\n if (!response.ok) {\n setError(body?.error ?? 'Assist signal lookup failed')\n } else {\n setReport(body as AssistMiningReport)\n }\n } catch {\n if (active) setError('Assist signal lookup failed')\n } finally {\n if (active) setLoading(false)\n }\n })()\n return () => {\n active = false\n }\n }, [signedInUid])\n\n const totals = report?.totals\n // The route serves the prose beside the report (AGL-2314) — it is not part\n // of the pure miner's output, because the miner never touches Firestore.\n const prose = ((report as any)?.prose ?? []) as Array<Record<string, unknown>>\n // The month's spend leaderboard (AGL-2930), likewise served beside the\n // report: it reads the month documents, which the miner never sees.\n const spend = ((report as any)?.spend ?? null) as AssistSpendLeaderboard | null\n // Absent from a route older than the page, which reads as no kinds.\n const kindRows = totals?.byKind ? kindTokenRows(totals.byKind) : []\n\n return (\n <Stack spacing={3}>\n {loading && <LinearProgress />}\n {error && <Alert severity=\"error\">{error}</Alert>}\n {report?.truncated && (\n // Never a silent partial. A ranking cut short looks exactly\n // like a complete one, and this one decides where docs effort\n // goes.\n <Alert severity=\"warning\">\n {`Ranked the first ${report.scanned.toLocaleString()} signals only — there are more. Every number below describes that sample, not the fleet.`}\n </Alert>\n )}\n\n <CardDisplay\n header={'Fleet'}\n help={pluginDocsHelp('assistSignals', { anchor: '#fleet' })}\n contentGutterX\n contentGutterY\n >\n {!totals ? (\n <Typography variant=\"body2\" color=\"text.secondary\">\n {loading ? 'Reading signals…' : 'No assist turns recorded yet.'}\n </Typography>\n ) : (\n // Neither `gap` nor `flexWrap` is a Stack prop under MUI 9\n // — both go through `sx` or it is a typecheck error.\n // AGL-1891 is the same drift, in the Assist panel itself.\n <Stack direction=\"row\" sx={{ flexWrap: 'wrap', gap: 1 }}>\n <Chip label={`${totals.messages.toLocaleString()} turns`} />\n <Chip label={`${money(totals.providerCostUsd)} estimated`} />\n {/*\n * The headline number for whether Assist is affordable to\n * leave on (AGL-2486): the share of turns answered from the\n * docs index or the answer cache, with no model call and no\n * provider spend. Placed beside the money rather than with\n * the token chips because it is the thing that MOVES the\n * money — every point of it is a turn that cost nothing.\n *\n * Success above half, because that is the point at which\n * the cheap path is carrying the feature rather than\n * trimming it.\n */}\n <Chip\n // `?? 0` on the count, and it is not defensive noise: this\n // whole object is JSON off `/api/ai/admin/signals`,\n // and a chip that throws on a missing number takes the\n // ENTIRE staff page down with it rather than rendering a\n // dash. The rate beside it is legitimately nullable —\n // `percent` renders that — so the two are handled\n // differently on purpose.\n label={`answered free ${percent(totals.deflectionRate)} (${(\n totals.deflected ?? 0\n ).toLocaleString()})`}\n color={\n totals.deflectionRate != null && totals.deflectionRate > 0.5\n ? 'success'\n : 'default'\n }\n />\n <Chip\n label={`${totals.inputTokens.toLocaleString()} in / ${totals.outputTokens.toLocaleString()} out`}\n />\n <Chip\n label={`cache reads ${percent(totals.cacheReadRate)}`}\n color={\n totals.cacheReadRate != null && totals.cacheReadRate > 0.5\n ? 'success'\n : 'default'\n }\n />\n {/*\n * Cache WRITES, beside the reads (AGL-2340). The pair only\n * means anything together: a write is billed at a premium\n * over a fresh input token and pays for itself only if\n * enough reads follow it. A board that showed the cheap\n * half alone made a prefix that is re-written every turn —\n * the expensive failure mode — look like a caching win.\n */}\n <Chip\n label={`cache writes ${totals.cacheWriteTokens.toLocaleString()}`}\n />\n <Chip\n label={`👍 ${totals.feedback.up} · 👎 ${totals.feedback.down} · unrated ${totals.feedback.none}`}\n />\n {Object.entries(totals.stopReasons).map(([reason, count]) => (\n <Chip\n key={reason}\n size=\"small\"\n // A refusal and a truncation both read as a short\n // answer in the data and need opposite fixes: a rising\n // refusal rate is a prompt problem, a rising max_tokens\n // rate is a ceiling problem.\n color={\n reason === 'refusal' || reason === 'max_tokens'\n ? 'warning'\n : 'default'\n }\n label={`${reason}: ${count}`}\n />\n ))}\n {/*\n * Today's FREE-TIER spend against the platform ceiling\n * (AGL-2925). The one AI band with no invoice behind it,\n * and the one figure that can switch every Free\n * workspace's generation off at once — so it sits with\n * the fleet money rather than on a page of its own. Red\n * once paused, amber once staff were mailed at 80%.\n */}\n {report.freeSpend ? (\n <Chip\n color={\n report.freeSpend.paused\n ? 'error'\n : report.freeSpend.alerted\n ? 'warning'\n : 'default'\n }\n label={\n `free tier today ${money(report.freeSpend.estCostUsd)} of ` +\n `${money(report.freeSpend.ceilingUsd)} ceiling · ` +\n `${report.freeSpend.requests.toLocaleString()} requests` +\n (report.freeSpend.paused ? ' · PAUSED until tomorrow' : '')\n }\n />\n ) : null}\n </Stack>\n )}\n </CardDisplay>\n\n {/* The month's spend, per workspace (AGL-2930) — ABOVE the\n tier and model splits, because \"which org\" is the question\n staff open this board with, and the two tables below split\n one fleet total that this ranking names the parts of. */}\n <CardDisplay\n header={`AI spend this month, by workspace${spend ? ` · ${spend.month}` : ''}`}\n help={pluginDocsHelp('aiMonitoring', { anchor: '#the-spend-leaderboard' })}\n contentGutterX\n contentGutterY\n >\n {spend?.failed ? (\n <Alert severity=\"warning\" sx={{ mb: 1 }}>\n {'Could not read this month’s spend documents — a failed read, not a month in which nobody spent.'}\n </Alert>\n ) : spend?.truncated ? (\n <Alert severity=\"warning\" sx={{ mb: 1 }}>\n {'Ranked over a sample of the month documents — there are more. This is not the whole fleet.'}\n </Alert>\n ) : null}\n <ScrollTable size=\"small\">\n <TableHead>\n <TableRow>\n <TableCell>Workspace</TableCell>\n <TableCell>Plan</TableCell>\n <TableCell>{aiAddonName()}</TableCell>\n <TableCell align=\"right\">Credits</TableCell>\n <TableCell align=\"right\">Cost</TableCell>\n <TableCell align=\"right\">Refusals</TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {!spend?.rows?.length ? (\n <TableRow>\n <TableCell colSpan={6}>\n <Typography variant=\"body2\" color=\"text.secondary\">\n No workspace has spent AI credits this month.\n </Typography>\n </TableCell>\n </TableRow>\n ) : (\n spend.rows.map((row) => (\n <TableRow key={row.orgId}>\n <TableCell>{row.orgLabel ?? row.orgId}</TableCell>\n <TableCell>{row.plan}</TableCell>\n <TableCell>\n <Chip\n size=\"small\"\n variant={row.aiAddon ? 'filled' : 'outlined'}\n color={row.aiAddon ? 'primary' : 'default'}\n label={row.aiAddon ? 'on' : 'off'}\n />\n </TableCell>\n <TableCell align=\"right\">\n {row.credits.toLocaleString()}\n </TableCell>\n <TableCell align=\"right\" sx={{ fontFamily: 'monospace' }}>\n {money(row.providerCostUsd)}\n </TableCell>\n {/* The total, with the reasons on hover-free display:\n a reader comparing spend to refusals needs both\n on one row, and the reasons are what turn a count\n into a diagnosis. */}\n <TableCell align=\"right\">\n {row.refusals.total.toLocaleString()}\n {row.refusals.total > 0 ? (\n <Typography\n variant=\"caption\"\n color=\"text.secondary\"\n sx={{ display: 'block' }}\n >\n {`band ${row.refusals.band} · ceiling ${row.refusals.cap} · messages ${row.refusals.messages} · backstop ${row.refusals.budget}${row.refusals.allotment > 0 ? ` · allotments ${row.refusals.allotment}` : ''}${freeTasteRefusals(row.refusals) > 0 ? ` · free taste ${freeTasteRefusals(row.refusals)}` : ''}`}\n </Typography>\n ) : null}\n </TableCell>\n </TableRow>\n ))\n )}\n </TableBody>\n </ScrollTable>\n <RankingFootnote\n shown={spend?.rows?.length ?? 0}\n total={spend?.ranked ?? 0}\n noun={{ one: 'workspace', many: 'workspaces' }}\n />\n </CardDisplay>\n\n <CardDisplay\n header={'Where the money goes'}\n help={pluginDocsHelp('assistSignals', { anchor: '#where-the-money-goes' })}\n contentGutterX\n contentGutterY\n >\n <Typography variant=\"body2\" color=\"text.secondary\" gutterBottom>\n The same spend split two ways. By tier answers whether the free\n cap or the paid price is the lever; by model answers whether a\n cheaper model on the common path would do — the one lever that\n never reaches the customer.\n </Typography>\n {!totals ? (\n <Typography variant=\"body2\" color=\"text.secondary\">\n {loading ? 'Reading signals…' : 'No assist turns recorded yet.'}\n </Typography>\n ) : totals.providerCostUsd === 0 ? (\n /*\n * ZERO SPEND IS A FINDING, NOT AN EMPTY TABLE.\n *\n * Rendered as a sentence rather than two grids of `$0.0000`\n * and em dashes. A share column is a proportion of the total,\n * and there is no proportion of nothing — so the grid could\n * only ever print a dash in every cell, which reads as a card\n * that failed rather than as a bill that is genuinely zero.\n *\n * The two zeros mean OPPOSITE things and are separated here.\n * Every turn deflected is the deflection path working: those\n * turns were answered from the docs index or the answer cache\n * with no provider call, so nothing was spent because nothing\n * was bought. A turn that reached a model and still priced at\n * zero is the other case — the model is missing from the\n * model catalog's rates and its spend is landing nowhere,\n * which is a hole in the meter and must not be reported as\n * thrift.\n */\n <Typography variant=\"body2\" color=\"text.secondary\">\n {totals.deflected >= totals.messages\n ? `Nothing spent on these ${totals.messages.toLocaleString()} turns — every one was answered from the docs index or the answer cache, with no model call. There is no split to show until a turn reaches a provider.`\n : `${(totals.messages - totals.deflected).toLocaleString()} of ${totals.messages.toLocaleString()} turns reached a model and every one priced at $0. That is a gap in the rate table, not a saving — the serving model has no entry in the cost model, so its spend is landing nowhere.`}\n </Typography>\n ) : (\n <Stack spacing={3}>\n <CostSplitTable\n caption=\"By tier\"\n label=\"Tier\"\n rows={costSplitRows(totals.byTier)}\n totalUsd={totals.providerCostUsd}\n />\n <CostSplitTable\n caption=\"By model\"\n label=\"Model\"\n rows={costSplitRows(totals.byModel)}\n totalUsd={totals.providerCostUsd}\n />\n </Stack>\n )}\n </CardDisplay>\n\n {/*\n * TOKENS BY KIND (AGL-2937): what a kind of request costs and weighs,\n * and the p95 output its `max_tokens` is sized against. Model turns\n * only — a docs answer has no tokens to split.\n */}\n <CardDisplay\n header={'Tokens by kind'}\n help={pluginDocsHelp('assistSignals', { anchor: '#tokens-by-kind' })}\n contentGutterX\n contentGutterY\n >\n <Typography variant=\"body2\" color=\"text.secondary\" gutterBottom>\n What each kind of model request costs per request, what its prompts\n and answers weigh, how much of its prompt the cache served, and the\n answer size 95 of every 100 requests stayed within — the figure its\n output ceiling is sized against.\n </Typography>\n <ScrollTable size=\"small\">\n <TableHead>\n <TableRow>\n <TableCell>Kind</TableCell>\n <TableCell align=\"right\">Requests</TableCell>\n <TableCell align=\"right\">Per request</TableCell>\n <TableCell align=\"right\">In</TableCell>\n <TableCell align=\"right\">Cache reads</TableCell>\n <TableCell align=\"right\">Cache writes</TableCell>\n <TableCell align=\"right\">Out</TableCell>\n <TableCell align=\"right\">p95 out</TableCell>\n <TableCell align=\"right\">Cache hit</TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {!kindRows.length ? (\n <TableRow>\n <TableCell colSpan={9}>\n <Typography variant=\"body2\" color=\"text.secondary\">\n No model turns in this sample.\n </Typography>\n </TableCell>\n </TableRow>\n ) : (\n kindRows.map((row) => (\n <TableRow key={row.kind}>\n <TableCell>{row.kind}</TableCell>\n <TableCell align=\"right\">{row.messages.toLocaleString()}</TableCell>\n <TableCell align=\"right\" sx={{ fontFamily: 'monospace' }}>\n {money(row.messages ? row.providerCostUsd / row.messages : 0)}\n </TableCell>\n <TableCell align=\"right\">{row.inputTokens.toLocaleString()}</TableCell>\n <TableCell align=\"right\">{row.cacheReadTokens.toLocaleString()}</TableCell>\n <TableCell align=\"right\">{row.cacheWriteTokens.toLocaleString()}</TableCell>\n <TableCell align=\"right\">{row.outputTokens.toLocaleString()}</TableCell>\n <TableCell align=\"right\">{row.outputP95.toLocaleString()}</TableCell>\n <TableCell align=\"right\">{percent(row.cacheHitRate)}</TableCell>\n </TableRow>\n ))\n )}\n </TableBody>\n </ScrollTable>\n </CardDisplay>\n\n <CardDisplay\n header={'Docs gaps'}\n help={pluginDocsHelp('assistSignals', { anchor: '#docs-gaps' })}\n contentGutterX\n contentGutterY\n >\n <Typography variant=\"body2\" color=\"text.secondary\" gutterBottom>\n Cited pages ranked by thumbs-down, then by how often a question\n landed there. A page near the top is being found and is not\n answering — that is a docs issue with its evidence attached.\n </Typography>\n <ScrollTable size=\"small\">\n <TableHead>\n <TableRow>\n <TableCell>Docs page</TableCell>\n <TableCell align=\"right\">Questions</TableCell>\n <TableCell align=\"right\">👍</TableCell>\n <TableCell align=\"right\">👎</TableCell>\n <TableCell align=\"right\">Down rate</TableCell>\n <TableCell align=\"right\">Orgs</TableCell>\n <TableCell align=\"right\">Cost</TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {!report?.docsGaps?.length ? (\n <TableRow>\n <TableCell colSpan={7}>\n <Typography variant=\"body2\" color=\"text.secondary\">\n Nothing cited yet.\n </Typography>\n </TableCell>\n </TableRow>\n ) : (\n report.docsGaps.map((row) => (\n <TableRow key={row.path}>\n <TableCell sx={{ fontFamily: 'monospace' }}>\n {row.path}\n </TableCell>\n <TableCell align=\"right\">{row.questions}</TableCell>\n <TableCell align=\"right\">{row.up}</TableCell>\n <TableCell align=\"right\">{row.down}</TableCell>\n <TableCell align=\"right\">\n {percent(row.downRate)}\n </TableCell>\n <TableCell align=\"right\">{row.orgs}</TableCell>\n <TableCell align=\"right\" sx={{ fontFamily: 'monospace' }}>\n {money(row.providerCostUsd)}\n </TableCell>\n </TableRow>\n ))\n )}\n </TableBody>\n </ScrollTable>\n <RankingFootnote\n shown={report?.docsGaps?.length ?? 0}\n total={report?.ranked?.docsGaps ?? 0}\n noun={{ one: 'cited page', many: 'cited pages' }}\n />\n </CardDisplay>\n\n <CardDisplay\n header={'Questions the docs could not answer'}\n help={pluginDocsHelp('assistSignals', { anchor: '#questions-the-docs-could-not-answer' })}\n contentGutterX\n contentGutterY\n >\n <Typography variant=\"body2\" color=\"text.secondary\" gutterBottom>\n {report\n ? `${report.ungrounded.questions.toLocaleString()} turns matched no documentation at all, ${report.ungrounded.down} of them rated down. These cite no page, so they cannot appear in the ranking above — a missing page is invisible to anything keyed on paths.`\n : 'Turns where retrieval matched no documentation at all.'}\n </Typography>\n <ScrollTable size=\"small\">\n <TableHead>\n <TableRow>\n <TableCell>Asked from</TableCell>\n <TableCell align=\"right\">Questions</TableCell>\n <TableCell align=\"right\">👎</TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {!report?.ungrounded?.routes?.length ? (\n <TableRow>\n <TableCell colSpan={3}>\n <Typography variant=\"body2\" color=\"text.secondary\">\n Every question so far matched something.\n </Typography>\n </TableCell>\n </TableRow>\n ) : (\n report.ungrounded.routes.map((row) => (\n <TableRow key={row.route}>\n <TableCell sx={{ fontFamily: 'monospace' }}>\n {row.route}\n </TableCell>\n <TableCell align=\"right\">{row.questions}</TableCell>\n <TableCell align=\"right\">{row.down}</TableCell>\n </TableRow>\n ))\n )}\n </TableBody>\n </ScrollTable>\n <RankingFootnote\n shown={report?.ungrounded?.routes?.length ?? 0}\n total={report?.ranked?.ungroundedRoutes ?? 0}\n noun={{ one: 'screen', many: 'screens' }}\n />\n </CardDisplay>\n\n {/*\n * THE WORDS THEMSELVES (AGL-2314).\n *\n * `assistExchanges` held the question a customer typed and the\n * answer we gave, for 180 days, and `assist-usage.ts` called it\n * \"the data loop's corpus\". Nothing read it — so we retained\n * customers' words, and committed publicly in the privacy policy\n * to retaining them, for zero product value. The two panels above\n * can say a page fails and cannot say what people were trying to\n * do; only this can.\n *\n * Behind a disclosure, and only for turns that FAILED — the shape\n * AGL-2294 used for churn free text. The route fetches nothing\n * else, so the panel being closed is not the privacy control; the\n * shortlist is.\n */}\n <CardDisplay\n header={'What people actually asked'}\n help={pluginDocsHelp('assistSignals', { anchor: '#what-people-actually-asked' })}\n contentGutterX\n contentGutterY\n >\n <Typography variant=\"body2\" color=\"text.secondary\" gutterBottom>\n {'The verbatim question behind each failing turn — rated down, ' +\n 'or grounded in nothing. Kept for 180 days and then deleted, ' +\n 'so an older failure shows its counts with the words gone. ' +\n 'Who asked is deliberately not shown: the question is what ' +\n 'this is for.'}\n </Typography>\n {!prose.length ? (\n <Typography variant=\"body2\" color=\"text.secondary\">\n {loading\n ? 'Reading exchanges…'\n : 'No failing turns in this sample — nothing to read.'}\n </Typography>\n ) : (\n <Accordion>\n <AccordionSummary expandIcon={<span aria-hidden>{'▾'}</span>}>\n <Typography variant=\"body2\">\n {`Show ${prose.length} question${prose.length === 1 ? '' : 's'}`}\n </Typography>\n </AccordionSummary>\n <AccordionDetails>\n <Stack spacing={2}>\n {prose.map((row: any) => (\n <Stack key={`${row.orgId}:${row.exchangeId}`} spacing={0.5}>\n <Stack\n direction=\"row\"\n sx={{ flexWrap: 'wrap', gap: 1, alignItems: 'center' }}\n >\n <Chip\n size=\"small\"\n color={row.feedback === 'down' ? 'error' : 'default'}\n label={\n row.feedback === 'down'\n ? 'rated down'\n : 'no documentation matched'\n }\n />\n <Typography variant=\"caption\" color=\"text.secondary\">\n <Box\n component=\"span\"\n sx={{ fontFamily: 'monospace' }}\n >\n {row.route}\n </Box>\n {` · ${row.orgLabel ?? row.orgId}`}\n </Typography>\n </Stack>\n {row.expired ? (\n // Said out loud. A shortlist quietly shorter than\n // the failure count it came from would read as\n // \"these are all the failures\".\n <Typography variant=\"body2\" color=\"text.secondary\">\n {'The words are past their 180-day retention and ' +\n 'have been deleted. The counts above still ' +\n 'include this turn.'}\n </Typography>\n ) : (\n <>\n <Typography variant=\"body2\">\n {row.question || '(no question recorded)'}\n </Typography>\n {row.answer ? (\n <Typography\n variant=\"caption\"\n color=\"text.secondary\"\n >\n {`We said: ${row.answer}${row.answerTruncated ? '…' : ''}`}\n </Typography>\n ) : null}\n </>\n )}\n </Stack>\n ))}\n </Stack>\n </AccordionDetails>\n </Accordion>\n )}\n </CardDisplay>\n\n <CardDisplay\n header={'What Assist costs, by workspace'}\n help={pluginDocsHelp('assistSignals', { anchor: '#what-assist-costs-by-workspace' })}\n contentGutterX\n contentGutterY\n >\n <Typography variant=\"body2\" color=\"text.secondary\" gutterBottom>\n Our estimated cost at the serving model&apos;s list rates —\n telemetry for tuning price against margin, not a bill.\n </Typography>\n <ScrollTable size=\"small\">\n <TableHead>\n <TableRow>\n <TableCell>Workspace</TableCell>\n <TableCell align=\"right\">Turns</TableCell>\n <TableCell align=\"right\">In</TableCell>\n <TableCell align=\"right\">Out</TableCell>\n <TableCell align=\"right\">Cache reads</TableCell>\n <TableCell align=\"right\">👎</TableCell>\n <TableCell align=\"right\">Cost</TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {!report?.orgs?.length ? (\n <TableRow>\n <TableCell colSpan={7}>\n <Typography variant=\"body2\" color=\"text.secondary\">\n No workspace has used Assist yet.\n </Typography>\n </TableCell>\n </TableRow>\n ) : (\n report.orgs.map((row) => (\n <TableRow key={row.orgId}>\n {/*\n The workspace's NAME. The route resolves it and\n falls back to the id, so a deleted workspace still\n renders a lead a staff member can search for rather\n than an empty cell. Not monospaced: monospace is how\n this page marks a value you copy, and a customer's\n name is one you read.\n */}\n <TableCell>{row.orgLabel ?? row.orgId}</TableCell>\n <TableCell align=\"right\">{row.messages}</TableCell>\n <TableCell align=\"right\">\n {row.inputTokens.toLocaleString()}\n </TableCell>\n <TableCell align=\"right\">\n {row.outputTokens.toLocaleString()}\n </TableCell>\n <TableCell align=\"right\">\n {row.cacheReadTokens.toLocaleString()}\n </TableCell>\n <TableCell align=\"right\">{row.down}</TableCell>\n <TableCell align=\"right\" sx={{ fontFamily: 'monospace' }}>\n {money(row.providerCostUsd)}\n </TableCell>\n </TableRow>\n ))\n )}\n </TableBody>\n </ScrollTable>\n <RankingFootnote\n shown={report?.orgs?.length ?? 0}\n total={report?.ranked?.orgs ?? 0}\n noun={{ one: 'workspace', many: 'workspaces' }}\n />\n </CardDisplay>\n </Stack>\n )\n}\n\nexport default AssistSignalsPage\n"],"names":["aiAddonName","pluginDocsHelp","CardDisplay","ScrollTable","Accordion","AccordionDetails","AccordionSummary","Alert","Box","Chip","LinearProgress","Stack","TableBody","TableCell","TableHead","TableRow","Typography","useEffect","useRef","useState","useUser","authorizedFetch","costSplitRows","freeTasteRefusals","kindTokenRows","money","value","Number","toFixed","Math","abs","percent","round","CostSplitTable","caption","label","rows","totalUsd","spacing","sx","width","variant","size","align","length","colSpan","color","map","row","key","messages","toLocaleString","providerCostUsd","RankingFootnote","shown","total","noun","counted","one","many","AssistSignalsPage","_props","totals","spend","report","data","user","signedInUid","uid","userRef","current","setReport","error","setError","loading","setLoading","undefined","active","response","body","json","catch","ok","prose","kindRows","byKind","severity","truncated","scanned","header","help","anchor","contentGutterX","contentGutterY","direction","flexWrap","gap","deflectionRate","deflected","inputTokens","outputTokens","cacheReadRate","cacheWriteTokens","feedback","up","down","none","Object","entries","stopReasons","reason","count","freeSpend","paused","alerted","estCostUsd","ceilingUsd","requests","month","failed","mb","orgLabel","orgId","plan","aiAddon","credits","fontFamily","refusals","display","band","cap","budget","allotment","ranked","gutterBottom","byTier","byModel","kind","cacheReadTokens","outputP95","cacheHitRate","docsGaps","path","questions","downRate","orgs","ungrounded","routes","route","ungroundedRoutes","expandIcon","span","aria-hidden","alignItems","component","expired","question","answer","answerTruncated","exchangeId"],"mappings":"AAAA;;;;;;;;;;;;;;;CAeC,GACD;;AAEA,SAASA,WAAW,QAAoC,eAAc;AACtE,SAASC,cAAc,QAAQ,mCAAkC;AACjE,SAASC,WAAW,QAAQ,uBAAsB;AAClD,SAASC,WAAW,QAAQ,yDAAwD;AACpF,SACEC,SAAS,EACTC,gBAAgB,EAChBC,gBAAgB,EAChBC,KAAK,EACLC,GAAG,EACHC,IAAI,EACJC,cAAc,EACdC,KAAK,EACLC,SAAS,EACTC,SAAS,EACTC,SAAS,EACTC,QAAQ,EACRC,UAAU,QACL,gBAAe;AACtB,SAASC,SAAS,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,QAAO;AACnD,SAASC,OAAO,QAAQ,iCAAgC;AACxD,SAASC,eAAe,QAAQ,2CAA0C;AAK1E,SACEC,aAAa,EACbC,iBAAiB,EACjBC,aAAa,QACR,mCAA+B;AAWtC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoCC,GAED,MAAMC,QAAQ,CAACC,QACb,CAAC,CAAC,EAAE,AAACC,CAAAA,OAAOD,UAAU,CAAA,EAAGE,OAAO,CAACC,KAAKC,GAAG,CAACH,OAAOD,UAAU,KAAK,IAAI,IAAI,IAAI;AAE9E,MAAMK,UAAU,CAACL,QACfA,SAAS,OAAO,MAAM,GAAGG,KAAKG,KAAK,CAACN,QAAQ,KAAK,CAAC,CAAC;AAErD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmCC,GACD,SAASO,eAAe,EACtBC,OAAO,EACPC,KAAK,EACLC,IAAI,EACJC,QAAQ,EAMT;IACC,qBACE,MAAC1B;QAAM2B,SAAS;QAAGC,IAAI;YAAEC,OAAO;QAAO;;0BACrC,KAACxB;gBAAWyB,SAAQ;0BAAaP;;0BACjC,MAAC/B;gBAAYuC,MAAK;;kCAChB,KAAC5B;kCACC,cAAA,MAACC;;8CACC,KAACF;8CAAWsB;;8CACZ,KAACtB;oCAAU8B,OAAM;8CAAQ;;8CACzB,KAAC9B;oCAAU8B,OAAM;8CAAQ;;8CACzB,KAAC9B;oCAAU8B,OAAM;8CAAQ;;;;;kCAG7B,KAAC/B;kCACE,CAACwB,KAAKQ,MAAM,iBACX,KAAC7B;sCACC,cAAA,KAACF;gCAAUgC,SAAS;0CAClB,cAAA,KAAC7B;oCAAWyB,SAAQ;oCAAQK,OAAM;8CAAiB;;;6BAMvDV,KAAKW,GAAG,CAAC,CAACC,oBACR,MAACjC;;kDACC,KAACF;kDAAWmC,IAAIC,GAAG;;kDACnB,KAACpC;wCAAU8B,OAAM;kDACdK,IAAIE,QAAQ,CAACC,cAAc;;kDAE9B,KAACtC;wCAAU8B,OAAM;kDAASlB,MAAMuB,IAAII,eAAe;;kDACnD,KAACvC;wCAAU8B,OAAM;kDACdZ,QAAQM,WAAW,IAAIW,IAAII,eAAe,GAAGf,WAAW;;;+BAP9CW,IAAIC,GAAG;;;;;;AAgBpC;AAEA;;;;;;;;;;;;;;CAcC,GACD,SAASI,gBAAgB,EACvBC,KAAK,EACLC,KAAK,EACLC,IAAI,EAML;IACC,IAAI,CAACD,OAAO,OAAO;IACnB,MAAME,UAAU,GAAGF,MAAMJ,cAAc,GAAG,CAAC,EAAEI,UAAU,IAAIC,KAAKE,GAAG,GAAGF,KAAKG,IAAI,EAAE;IACjF,qBACE,KAAC3C;QAAWyB,SAAQ;QAAUK,OAAM;kBACjCQ,SAASC,QACN,CAAC,YAAY,EAAEE,QAAQ,CAAC,CAAC,GACzB,CAAC,gBAAgB,EAAEH,MAAMH,cAAc,GAAG,IAAI,EAAEM,QAAQ,gFAAgF,CAAC;;AAGnJ;AAEA,OAAO,SAASG,kBAAkBC,MAA6B;4BAqG/CC;QA6GFC,aAiDGA,cAsJHC,kBA8BGA,mBACAA,gBAyBHA,2BAAAA,oBAsBGA,4BAAAA,qBACAA,iBAiIHA,cAwCGA,eACAA;IAjpBf,MAAM,EAAEC,MAAMC,IAAI,EAAE,GAAG9C;IACvB,gEAAgE;IAChE,MAAM+C,sBAAcD,wBAAAA,KAAME,GAAG,mBAAI;IACjC,MAAMC,UAAUnD,OAAOgD;IACvBG,QAAQC,OAAO,GAAGJ;IAClB,MAAM,CAACF,QAAQO,UAAU,GAAGpD,SAAoC;IAChE,MAAM,CAACqD,OAAOC,SAAS,GAAGtD,SAAwB;IAClD,MAAM,CAACuD,SAASC,WAAW,GAAGxD,SAAS;IAEvCF,UAAU;QACR,qEAAqE;QACrE,uEAAuE;QACvE,0DAA0D;QAC1D,MAAMiD,OAAOG,QAAQC,OAAO;QAC5B,IAAI,CAACH,eAAe,CAACD,MAAM,OAAOU;QAClC,IAAIC,SAAS;QACb,KAAK,AAAC,CAAA;YACJF,WAAW;YACXF,SAAS;YACT,IAAI;gBACF,MAAMK,WAAW,MAAMzD,gBAAgB6C,MAAM;gBAC7C,MAAMa,OAAO,MAAMD,SAASE,IAAI,GAAGC,KAAK,CAAC,IAAM;gBAC/C,IAAI,CAACJ,QAAQ;gBACb,IAAI,CAACC,SAASI,EAAE,EAAE;;oBAChBT,iBAASM,wBAAAA,KAAMP,KAAK,mBAAI;gBAC1B,OAAO;oBACLD,UAAUQ;gBACZ;YACF,EAAE,eAAM;gBACN,IAAIF,QAAQJ,SAAS;YACvB,SAAU;gBACR,IAAII,QAAQF,WAAW;YACzB;QACF,CAAA;QACA,OAAO;YACLE,SAAS;QACX;IACF,GAAG;QAACV;KAAY;IAEhB,MAAML,SAASE,0BAAAA,OAAQF,MAAM;IAC7B,2EAA2E;IAC3E,yEAAyE;IACzE,MAAMqB,iBAAUnB,0BAAD,AAACA,OAAgBmB,KAAK,oBAAI,EAAE;IAC3C,uEAAuE;IACvE,oEAAoE;IACpE,MAAMpB,iBAAUC,0BAAD,AAACA,OAAgBD,KAAK,oBAAI;IACzC,oEAAoE;IACpE,MAAMqB,WAAWtB,CAAAA,0BAAAA,OAAQuB,MAAM,IAAG7D,cAAcsC,OAAOuB,MAAM,IAAI,EAAE;IAEnE,qBACE,MAAC1E;QAAM2B,SAAS;;YACboC,yBAAW,KAAChE;YACZ8D,uBAAS,KAACjE;gBAAM+E,UAAS;0BAASd;;YAClCR,CAAAA,0BAAAA,OAAQuB,SAAS,KAChB,4DAA4D;YAC5D,8DAA8D;YAC9D,QAAQ;0BACR,KAAChF;gBAAM+E,UAAS;0BACb,CAAC,iBAAiB,EAAEtB,OAAOwB,OAAO,CAACrC,cAAc,GAAG,wFAAwF,CAAC;;0BAIlJ,KAACjD;gBACCuF,QAAQ;gBACRC,MAAMzF,eAAe,iBAAiB;oBAAE0F,QAAQ;gBAAS;gBACzDC,cAAc;gBACdC,cAAc;0BAEb,CAAC/B,uBACA,KAAC9C;oBAAWyB,SAAQ;oBAAQK,OAAM;8BAC/B4B,UAAU,qBAAqB;qBAGlC,2DAA2D;gBAC3D,qDAAqD;gBACrD,0DAA0D;8BAC1D,MAAC/D;oBAAMmF,WAAU;oBAAMvD,IAAI;wBAAEwD,UAAU;wBAAQC,KAAK;oBAAE;;sCACpD,KAACvF;4BAAK0B,OAAO,GAAG2B,OAAOZ,QAAQ,CAACC,cAAc,GAAG,MAAM,CAAC;;sCACxD,KAAC1C;4BAAK0B,OAAO,GAAGV,MAAMqC,OAAOV,eAAe,EAAE,UAAU,CAAC;;sCAazD,KAAC3C;4BACC,2DAA2D;4BAC3D,oDAAoD;4BACpD,uDAAuD;4BACvD,yDAAyD;4BACzD,sDAAsD;4BACtD,kDAAkD;4BAClD,0BAA0B;4BAC1B0B,OAAO,CAAC,cAAc,EAAEJ,QAAQ+B,OAAOmC,cAAc,EAAE,EAAE,EAAE,EACzDnC,oBAAAA,OAAOoC,SAAS,YAAhBpC,oBAAoB,GACpBX,cAAc,GAAG,CAAC,CAAC;4BACrBL,OACEgB,OAAOmC,cAAc,IAAI,QAAQnC,OAAOmC,cAAc,GAAG,MACrD,YACA;;sCAGR,KAACxF;4BACC0B,OAAO,GAAG2B,OAAOqC,WAAW,CAAChD,cAAc,GAAG,MAAM,EAAEW,OAAOsC,YAAY,CAACjD,cAAc,GAAG,IAAI,CAAC;;sCAElG,KAAC1C;4BACC0B,OAAO,CAAC,YAAY,EAAEJ,QAAQ+B,OAAOuC,aAAa,GAAG;4BACrDvD,OACEgB,OAAOuC,aAAa,IAAI,QAAQvC,OAAOuC,aAAa,GAAG,MACnD,YACA;;sCAWR,KAAC5F;4BACC0B,OAAO,CAAC,aAAa,EAAE2B,OAAOwC,gBAAgB,CAACnD,cAAc,IAAI;;sCAEnE,KAAC1C;4BACC0B,OAAO,CAAC,GAAG,EAAE2B,OAAOyC,QAAQ,CAACC,EAAE,CAAC,MAAM,EAAE1C,OAAOyC,QAAQ,CAACE,IAAI,CAAC,WAAW,EAAE3C,OAAOyC,QAAQ,CAACG,IAAI,EAAE;;wBAEjGC,OAAOC,OAAO,CAAC9C,OAAO+C,WAAW,EAAE9D,GAAG,CAAC,CAAC,CAAC+D,QAAQC,MAAM,iBACtD,KAACtG;gCAECiC,MAAK;gCACL,kDAAkD;gCAClD,uDAAuD;gCACvD,wDAAwD;gCACxD,6BAA6B;gCAC7BI,OACEgE,WAAW,aAAaA,WAAW,eAC/B,YACA;gCAEN3E,OAAO,GAAG2E,OAAO,EAAE,EAAEC,OAAO;+BAXvBD;wBAsBR9C,OAAOgD,SAAS,iBACf,KAACvG;4BACCqC,OACEkB,OAAOgD,SAAS,CAACC,MAAM,GACnB,UACAjD,OAAOgD,SAAS,CAACE,OAAO,GACtB,YACA;4BAER/E,OACE,CAAC,gBAAgB,EAAEV,MAAMuC,OAAOgD,SAAS,CAACG,UAAU,EAAE,IAAI,CAAC,GAC3D,GAAG1F,MAAMuC,OAAOgD,SAAS,CAACI,UAAU,EAAE,WAAW,CAAC,GAClD,GAAGpD,OAAOgD,SAAS,CAACK,QAAQ,CAAClE,cAAc,GAAG,SAAS,CAAC,GACvDa,CAAAA,OAAOgD,SAAS,CAACC,MAAM,GAAG,6BAA6B,EAAC;6BAG3D;;;;0BASV,MAAC/G;gBACCuF,QAAQ,CAAC,iCAAiC,EAAE1B,QAAQ,CAAC,GAAG,EAAEA,MAAMuD,KAAK,EAAE,GAAG,IAAI;gBAC9E5B,MAAMzF,eAAe,gBAAgB;oBAAE0F,QAAQ;gBAAyB;gBACxEC,cAAc;gBACdC,cAAc;;oBAEb9B,CAAAA,yBAAAA,MAAOwD,MAAM,kBACZ,KAAChH;wBAAM+E,UAAS;wBAAU/C,IAAI;4BAAEiF,IAAI;wBAAE;kCACnC;yBAEDzD,CAAAA,yBAAAA,MAAOwB,SAAS,kBAClB,KAAChF;wBAAM+E,UAAS;wBAAU/C,IAAI;4BAAEiF,IAAI;wBAAE;kCACnC;yBAED;kCACJ,MAACrH;wBAAYuC,MAAK;;0CAChB,KAAC5B;0CACC,cAAA,MAACC;;sDACC,KAACF;sDAAU;;sDACX,KAACA;sDAAU;;sDACX,KAACA;sDAAWb;;sDACZ,KAACa;4CAAU8B,OAAM;sDAAQ;;sDACzB,KAAC9B;4CAAU8B,OAAM;sDAAQ;;sDACzB,KAAC9B;4CAAU8B,OAAM;sDAAQ;;;;;0CAG7B,KAAC/B;0CACE,EAACmD,0BAAAA,cAAAA,MAAO3B,IAAI,qBAAX2B,YAAanB,MAAM,kBACnB,KAAC7B;8CACC,cAAA,KAACF;wCAAUgC,SAAS;kDAClB,cAAA,KAAC7B;4CAAWyB,SAAQ;4CAAQK,OAAM;sDAAiB;;;qCAMvDiB,MAAM3B,IAAI,CAACW,GAAG,CAAC,CAACC;wCAEAA;yDADd,MAACjC;;0DACC,KAACF;2DAAWmC,gBAAAA,IAAIyE,QAAQ,YAAZzE,gBAAgBA,IAAI0E,KAAK;;0DACrC,KAAC7G;0DAAWmC,IAAI2E,IAAI;;0DACpB,KAAC9G;0DACC,cAAA,KAACJ;oDACCiC,MAAK;oDACLD,SAASO,IAAI4E,OAAO,GAAG,WAAW;oDAClC9E,OAAOE,IAAI4E,OAAO,GAAG,YAAY;oDACjCzF,OAAOa,IAAI4E,OAAO,GAAG,OAAO;;;0DAGhC,KAAC/G;gDAAU8B,OAAM;0DACdK,IAAI6E,OAAO,CAAC1E,cAAc;;0DAE7B,KAACtC;gDAAU8B,OAAM;gDAAQJ,IAAI;oDAAEuF,YAAY;gDAAY;0DACpDrG,MAAMuB,IAAII,eAAe;;0DAM5B,MAACvC;gDAAU8B,OAAM;;oDACdK,IAAI+E,QAAQ,CAACxE,KAAK,CAACJ,cAAc;oDACjCH,IAAI+E,QAAQ,CAACxE,KAAK,GAAG,kBACpB,KAACvC;wDACCyB,SAAQ;wDACRK,OAAM;wDACNP,IAAI;4DAAEyF,SAAS;wDAAQ;kEAEtB,CAAC,KAAK,EAAEhF,IAAI+E,QAAQ,CAACE,IAAI,CAAC,WAAW,EAAEjF,IAAI+E,QAAQ,CAACG,GAAG,CAAC,YAAY,EAAElF,IAAI+E,QAAQ,CAAC7E,QAAQ,CAAC,YAAY,EAAEF,IAAI+E,QAAQ,CAACI,MAAM,GAAGnF,IAAI+E,QAAQ,CAACK,SAAS,GAAG,IAAI,CAAC,cAAc,EAAEpF,IAAI+E,QAAQ,CAACK,SAAS,EAAE,GAAG,KAAK7G,kBAAkByB,IAAI+E,QAAQ,IAAI,IAAI,CAAC,cAAc,EAAExG,kBAAkByB,IAAI+E,QAAQ,GAAG,GAAG,IAAI;yDAE9S;;;;uCA/BO/E,IAAI0E,KAAK;;;;;kCAsChC,KAACrE;wBACCC,KAAK,WAAES,0BAAAA,eAAAA,MAAO3B,IAAI,qBAAX2B,aAAanB,MAAM,oBAAI;wBAC9BW,KAAK,WAAEQ,yBAAAA,MAAOsE,MAAM,oBAAI;wBACxB7E,MAAM;4BAAEE,KAAK;4BAAaC,MAAM;wBAAa;;;;0BAIjD,MAACzD;gBACCuF,QAAQ;gBACRC,MAAMzF,eAAe,iBAAiB;oBAAE0F,QAAQ;gBAAwB;gBACxEC,cAAc;gBACdC,cAAc;;kCAEd,KAAC7E;wBAAWyB,SAAQ;wBAAQK,OAAM;wBAAiBwF,YAAY;kCAAC;;oBAM/D,CAACxE,uBACA,KAAC9C;wBAAWyB,SAAQ;wBAAQK,OAAM;kCAC/B4B,UAAU,qBAAqB;yBAEhCZ,OAAOV,eAAe,KAAK,IAC7B;;;;;;;;;;;;;;;;;;WAkBC,iBACD,KAACpC;wBAAWyB,SAAQ;wBAAQK,OAAM;kCAC/BgB,OAAOoC,SAAS,IAAIpC,OAAOZ,QAAQ,GAChC,CAAC,uBAAuB,EAAEY,OAAOZ,QAAQ,CAACC,cAAc,GAAG,uJAAuJ,CAAC,GACnN,GAAG,AAACW,CAAAA,OAAOZ,QAAQ,GAAGY,OAAOoC,SAAS,AAAD,EAAG/C,cAAc,GAAG,IAAI,EAAEW,OAAOZ,QAAQ,CAACC,cAAc,GAAG,qLAAqL,CAAC;uCAG5R,MAACxC;wBAAM2B,SAAS;;0CACd,KAACL;gCACCC,SAAQ;gCACRC,OAAM;gCACNC,MAAMd,cAAcwC,OAAOyE,MAAM;gCACjClG,UAAUyB,OAAOV,eAAe;;0CAElC,KAACnB;gCACCC,SAAQ;gCACRC,OAAM;gCACNC,MAAMd,cAAcwC,OAAO0E,OAAO;gCAClCnG,UAAUyB,OAAOV,eAAe;;;;;;0BAWxC,MAAClD;gBACCuF,QAAQ;gBACRC,MAAMzF,eAAe,iBAAiB;oBAAE0F,QAAQ;gBAAkB;gBAClEC,cAAc;gBACdC,cAAc;;kCAEd,KAAC7E;wBAAWyB,SAAQ;wBAAQK,OAAM;wBAAiBwF,YAAY;kCAAC;;kCAMhE,MAACnI;wBAAYuC,MAAK;;0CAChB,KAAC5B;0CACC,cAAA,MAACC;;sDACC,KAACF;sDAAU;;sDACX,KAACA;4CAAU8B,OAAM;sDAAQ;;sDACzB,KAAC9B;4CAAU8B,OAAM;sDAAQ;;sDACzB,KAAC9B;4CAAU8B,OAAM;sDAAQ;;sDACzB,KAAC9B;4CAAU8B,OAAM;sDAAQ;;sDACzB,KAAC9B;4CAAU8B,OAAM;sDAAQ;;sDACzB,KAAC9B;4CAAU8B,OAAM;sDAAQ;;sDACzB,KAAC9B;4CAAU8B,OAAM;sDAAQ;;sDACzB,KAAC9B;4CAAU8B,OAAM;sDAAQ;;;;;0CAG7B,KAAC/B;0CACE,CAACwE,SAASxC,MAAM,iBACf,KAAC7B;8CACC,cAAA,KAACF;wCAAUgC,SAAS;kDAClB,cAAA,KAAC7B;4CAAWyB,SAAQ;4CAAQK,OAAM;sDAAiB;;;qCAMvDsC,SAASrC,GAAG,CAAC,CAACC,oBACZ,MAACjC;;0DACC,KAACF;0DAAWmC,IAAIyF,IAAI;;0DACpB,KAAC5H;gDAAU8B,OAAM;0DAASK,IAAIE,QAAQ,CAACC,cAAc;;0DACrD,KAACtC;gDAAU8B,OAAM;gDAAQJ,IAAI;oDAAEuF,YAAY;gDAAY;0DACpDrG,MAAMuB,IAAIE,QAAQ,GAAGF,IAAII,eAAe,GAAGJ,IAAIE,QAAQ,GAAG;;0DAE7D,KAACrC;gDAAU8B,OAAM;0DAASK,IAAImD,WAAW,CAAChD,cAAc;;0DACxD,KAACtC;gDAAU8B,OAAM;0DAASK,IAAI0F,eAAe,CAACvF,cAAc;;0DAC5D,KAACtC;gDAAU8B,OAAM;0DAASK,IAAIsD,gBAAgB,CAACnD,cAAc;;0DAC7D,KAACtC;gDAAU8B,OAAM;0DAASK,IAAIoD,YAAY,CAACjD,cAAc;;0DACzD,KAACtC;gDAAU8B,OAAM;0DAASK,IAAI2F,SAAS,CAACxF,cAAc;;0DACtD,KAACtC;gDAAU8B,OAAM;0DAASZ,QAAQiB,IAAI4F,YAAY;;;uCAXrC5F,IAAIyF,IAAI;;;;;;0BAmBjC,MAACvI;gBACCuF,QAAQ;gBACRC,MAAMzF,eAAe,iBAAiB;oBAAE0F,QAAQ;gBAAa;gBAC7DC,cAAc;gBACdC,cAAc;;kCAEd,KAAC7E;wBAAWyB,SAAQ;wBAAQK,OAAM;wBAAiBwF,YAAY;kCAAC;;kCAKhE,MAACnI;wBAAYuC,MAAK;;0CAChB,KAAC5B;0CACC,cAAA,MAACC;;sDACC,KAACF;sDAAU;;sDACX,KAACA;4CAAU8B,OAAM;sDAAQ;;sDACzB,KAAC9B;4CAAU8B,OAAM;sDAAQ;;sDACzB,KAAC9B;4CAAU8B,OAAM;sDAAQ;;sDACzB,KAAC9B;4CAAU8B,OAAM;sDAAQ;;sDACzB,KAAC9B;4CAAU8B,OAAM;sDAAQ;;sDACzB,KAAC9B;4CAAU8B,OAAM;sDAAQ;;;;;0CAG7B,KAAC/B;0CACE,EAACoD,2BAAAA,mBAAAA,OAAQ6E,QAAQ,qBAAhB7E,iBAAkBpB,MAAM,kBACxB,KAAC7B;8CACC,cAAA,KAACF;wCAAUgC,SAAS;kDAClB,cAAA,KAAC7B;4CAAWyB,SAAQ;4CAAQK,OAAM;sDAAiB;;;qCAMvDkB,OAAO6E,QAAQ,CAAC9F,GAAG,CAAC,CAACC,oBACnB,MAACjC;;0DACC,KAACF;gDAAU0B,IAAI;oDAAEuF,YAAY;gDAAY;0DACtC9E,IAAI8F,IAAI;;0DAEX,KAACjI;gDAAU8B,OAAM;0DAASK,IAAI+F,SAAS;;0DACvC,KAAClI;gDAAU8B,OAAM;0DAASK,IAAIwD,EAAE;;0DAChC,KAAC3F;gDAAU8B,OAAM;0DAASK,IAAIyD,IAAI;;0DAClC,KAAC5F;gDAAU8B,OAAM;0DACdZ,QAAQiB,IAAIgG,QAAQ;;0DAEvB,KAACnI;gDAAU8B,OAAM;0DAASK,IAAIiG,IAAI;;0DAClC,KAACpI;gDAAU8B,OAAM;gDAAQJ,IAAI;oDAAEuF,YAAY;gDAAY;0DACpDrG,MAAMuB,IAAII,eAAe;;;uCAZfJ,IAAI8F,IAAI;;;;kCAmB/B,KAACzF;wBACCC,KAAK,WAAEU,2BAAAA,oBAAAA,OAAQ6E,QAAQ,qBAAhB7E,kBAAkBpB,MAAM,oBAAI;wBACnCW,KAAK,WAAES,2BAAAA,iBAAAA,OAAQqE,MAAM,qBAAdrE,eAAgB6E,QAAQ,oBAAI;wBACnCrF,MAAM;4BAAEE,KAAK;4BAAcC,MAAM;wBAAc;;;;0BAInD,MAACzD;gBACCuF,QAAQ;gBACRC,MAAMzF,eAAe,iBAAiB;oBAAE0F,QAAQ;gBAAuC;gBACvFC,cAAc;gBACdC,cAAc;;kCAEd,KAAC7E;wBAAWyB,SAAQ;wBAAQK,OAAM;wBAAiBwF,YAAY;kCAC5DtE,SACG,GAAGA,OAAOkF,UAAU,CAACH,SAAS,CAAC5F,cAAc,GAAG,wCAAwC,EAAEa,OAAOkF,UAAU,CAACzC,IAAI,CAAC,6IAA6I,CAAC,GAC/P;;kCAEN,MAACtG;wBAAYuC,MAAK;;0CAChB,KAAC5B;0CACC,cAAA,MAACC;;sDACC,KAACF;sDAAU;;sDACX,KAACA;4CAAU8B,OAAM;sDAAQ;;sDACzB,KAAC9B;4CAAU8B,OAAM;sDAAQ;;;;;0CAG7B,KAAC/B;0CACE,EAACoD,2BAAAA,qBAAAA,OAAQkF,UAAU,sBAAlBlF,4BAAAA,mBAAoBmF,MAAM,qBAA1BnF,0BAA4BpB,MAAM,kBAClC,KAAC7B;8CACC,cAAA,KAACF;wCAAUgC,SAAS;kDAClB,cAAA,KAAC7B;4CAAWyB,SAAQ;4CAAQK,OAAM;sDAAiB;;;qCAMvDkB,OAAOkF,UAAU,CAACC,MAAM,CAACpG,GAAG,CAAC,CAACC,oBAC5B,MAACjC;;0DACC,KAACF;gDAAU0B,IAAI;oDAAEuF,YAAY;gDAAY;0DACtC9E,IAAIoG,KAAK;;0DAEZ,KAACvI;gDAAU8B,OAAM;0DAASK,IAAI+F,SAAS;;0DACvC,KAAClI;gDAAU8B,OAAM;0DAASK,IAAIyD,IAAI;;;uCALrBzD,IAAIoG,KAAK;;;;kCAWhC,KAAC/F;wBACCC,KAAK,WAAEU,2BAAAA,sBAAAA,OAAQkF,UAAU,sBAAlBlF,6BAAAA,oBAAoBmF,MAAM,qBAA1BnF,2BAA4BpB,MAAM,oBAAI;wBAC7CW,KAAK,WAAES,2BAAAA,kBAAAA,OAAQqE,MAAM,qBAAdrE,gBAAgBqF,gBAAgB,oBAAI;wBAC3C7F,MAAM;4BAAEE,KAAK;4BAAUC,MAAM;wBAAU;;;;0BAoB3C,MAACzD;gBACCuF,QAAQ;gBACRC,MAAMzF,eAAe,iBAAiB;oBAAE0F,QAAQ;gBAA8B;gBAC9EC,cAAc;gBACdC,cAAc;;kCAEd,KAAC7E;wBAAWyB,SAAQ;wBAAQK,OAAM;wBAAiBwF,YAAY;kCAC5D,kEACC,iEACA,+DACA,+DACA;;oBAEH,CAACnD,MAAMvC,MAAM,iBACZ,KAAC5B;wBAAWyB,SAAQ;wBAAQK,OAAM;kCAC/B4B,UACG,uBACA;uCAGN,MAACtE;;0CACC,KAACE;gCAAiBgJ,0BAAY,KAACC;oCAAKC,aAAW;8CAAE;;0CAC/C,cAAA,KAACxI;oCAAWyB,SAAQ;8CACjB,CAAC,KAAK,EAAE0C,MAAMvC,MAAM,CAAC,SAAS,EAAEuC,MAAMvC,MAAM,KAAK,IAAI,KAAK,KAAK;;;0CAGpE,KAACvC;0CACC,cAAA,KAACM;oCAAM2B,SAAS;8CACb6C,MAAMpC,GAAG,CAAC,CAACC;4CAsBGA;6DArBb,MAACrC;4CAA6C2B,SAAS;;8DACrD,MAAC3B;oDACCmF,WAAU;oDACVvD,IAAI;wDAAEwD,UAAU;wDAAQC,KAAK;wDAAGyD,YAAY;oDAAS;;sEAErD,KAAChJ;4DACCiC,MAAK;4DACLI,OAAOE,IAAIuD,QAAQ,KAAK,SAAS,UAAU;4DAC3CpE,OACEa,IAAIuD,QAAQ,KAAK,SACb,eACA;;sEAGR,MAACvF;4DAAWyB,SAAQ;4DAAUK,OAAM;;8EAClC,KAACtC;oEACCkJ,WAAU;oEACVnH,IAAI;wEAAEuF,YAAY;oEAAY;8EAE7B9E,IAAIoG,KAAK;;gEAEX,CAAC,GAAG,GAAEpG,gBAAAA,IAAIyE,QAAQ,YAAZzE,gBAAgBA,IAAI0E,KAAK,EAAE;;;;;gDAGrC1E,IAAI2G,OAAO,GACV,kDAAkD;gDAClD,+CAA+C;gDAC/C,gCAAgC;8DAChC,KAAC3I;oDAAWyB,SAAQ;oDAAQK,OAAM;8DAC/B,oDACC,+CACA;mEAGJ;;sEACE,KAAC9B;4DAAWyB,SAAQ;sEACjBO,IAAI4G,QAAQ,IAAI;;wDAElB5G,IAAI6G,MAAM,iBACT,KAAC7I;4DACCyB,SAAQ;4DACRK,OAAM;sEAEL,CAAC,SAAS,EAAEE,IAAI6G,MAAM,GAAG7G,IAAI8G,eAAe,GAAG,MAAM,IAAI;6DAE1D;;;;2CA7CE,GAAG9G,IAAI0E,KAAK,CAAC,CAAC,EAAE1E,IAAI+G,UAAU,EAAE;;;;;;;;0BAwDxD,MAAC7J;gBACCuF,QAAQ;gBACRC,MAAMzF,eAAe,iBAAiB;oBAAE0F,QAAQ;gBAAkC;gBAClFC,cAAc;gBACdC,cAAc;;kCAEd,KAAC7E;wBAAWyB,SAAQ;wBAAQK,OAAM;wBAAiBwF,YAAY;kCAAC;;kCAIhE,MAACnI;wBAAYuC,MAAK;;0CAChB,KAAC5B;0CACC,cAAA,MAACC;;sDACC,KAACF;sDAAU;;sDACX,KAACA;4CAAU8B,OAAM;sDAAQ;;sDACzB,KAAC9B;4CAAU8B,OAAM;sDAAQ;;sDACzB,KAAC9B;4CAAU8B,OAAM;sDAAQ;;sDACzB,KAAC9B;4CAAU8B,OAAM;sDAAQ;;sDACzB,KAAC9B;4CAAU8B,OAAM;sDAAQ;;sDACzB,KAAC9B;4CAAU8B,OAAM;sDAAQ;;;;;0CAG7B,KAAC/B;0CACE,EAACoD,2BAAAA,eAAAA,OAAQiF,IAAI,qBAAZjF,aAAcpB,MAAM,kBACpB,KAAC7B;8CACC,cAAA,KAACF;wCAAUgC,SAAS;kDAClB,cAAA,KAAC7B;4CAAWyB,SAAQ;4CAAQK,OAAM;sDAAiB;;;qCAMvDkB,OAAOiF,IAAI,CAAClG,GAAG,CAAC,CAACC;wCAUDA;yDATd,MAACjC;;0DASC,KAACF;2DAAWmC,gBAAAA,IAAIyE,QAAQ,YAAZzE,gBAAgBA,IAAI0E,KAAK;;0DACrC,KAAC7G;gDAAU8B,OAAM;0DAASK,IAAIE,QAAQ;;0DACtC,KAACrC;gDAAU8B,OAAM;0DACdK,IAAImD,WAAW,CAAChD,cAAc;;0DAEjC,KAACtC;gDAAU8B,OAAM;0DACdK,IAAIoD,YAAY,CAACjD,cAAc;;0DAElC,KAACtC;gDAAU8B,OAAM;0DACdK,IAAI0F,eAAe,CAACvF,cAAc;;0DAErC,KAACtC;gDAAU8B,OAAM;0DAASK,IAAIyD,IAAI;;0DAClC,KAAC5F;gDAAU8B,OAAM;gDAAQJ,IAAI;oDAAEuF,YAAY;gDAAY;0DACpDrG,MAAMuB,IAAII,eAAe;;;uCAtBfJ,IAAI0E,KAAK;;;;;kCA6BhC,KAACrE;wBACCC,KAAK,WAAEU,2BAAAA,gBAAAA,OAAQiF,IAAI,qBAAZjF,cAAcpB,MAAM,oBAAI;wBAC/BW,KAAK,YAAES,2BAAAA,kBAAAA,OAAQqE,MAAM,qBAAdrE,gBAAgBiF,IAAI,qBAAI;wBAC/BzF,MAAM;4BAAEE,KAAK;4BAAaC,MAAM;wBAAa;;;;;;AAKvD;AAEA,eAAeC,kBAAiB"}
@@ -0,0 +1,29 @@
1
+ import { type NodeSchema } from '@aglyn/aglyn';
2
+ /**
3
+ * Whether the copy assistant can rewrite an element (AGL-89, AGL-130): a
4
+ * text-editable element, or one declaring a text attribute — alt text, a
5
+ * label — the rewrite dialog lets the reader pick.
6
+ */
7
+ export declare function nodeTakesCopyRewrite(node: NodeSchema<any> | null | undefined): boolean;
8
+ /**
9
+ * Generate a section (AGL-169), on the besigner toolbar through the
10
+ * `besignerToolbar` zone: opens the provider's prompt dialog, and the
11
+ * proposed subtree lands at the end of the canvas root. Not drawn while the
12
+ * reader's permission refuses the door.
13
+ */
14
+ export declare function AiGenerateSectionControl(): import("react").JSX.Element;
15
+ export declare namespace AiGenerateSectionControl {
16
+ var displayName: string;
17
+ }
18
+ /**
19
+ * Rewrite with AI (AGL-89), under the selected element's fields through the
20
+ * `besignerInspector` zone: opens the provider's instruction dialog for the
21
+ * element. Drawn for an element the rewrite applies to, while the reader's
22
+ * permission admits the door.
23
+ */
24
+ export declare function AiRewriteControl(props: {
25
+ node?: NodeSchema<any> | null;
26
+ }): import("react").JSX.Element;
27
+ export declare namespace AiRewriteControl {
28
+ var displayName: string;
29
+ }
@@ -0,0 +1,81 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Aglyn LLC
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */ 'use client';
17
+ import { jsx as _jsx } from "react/jsx-runtime";
18
+ import { FEATURE_FLAG, FieldComponentType } from "@aglyn/aglyn";
19
+ import { mdiAutoFix } from "@aglyn/shared-data-mdi";
20
+ import { MdiIcon } from "@aglyn/shared-ui-jsx";
21
+ import { Button, FormControl, IconButton, Tooltip } from "@mui/material";
22
+ import { useContext } from "react";
23
+ import { AiAssistActionsContext } from "./ai-assist-actions-context.js";
24
+ /**
25
+ * Whether the copy assistant can rewrite an element (AGL-89, AGL-130): a
26
+ * text-editable element, or one declaring a text attribute — alt text, a
27
+ * label — the rewrite dialog lets the reader pick.
28
+ */ export function nodeTakesCopyRewrite(node) {
29
+ var _ref, _ref1;
30
+ var _schema_flags;
31
+ const schema = node == null ? void 0 : node.componentSchema;
32
+ const textEditable = (((_ref = schema == null ? void 0 : (_schema_flags = schema.flags) == null ? void 0 : _schema_flags.textEditable) != null ? _ref : FEATURE_FLAG.DISABLED) & FEATURE_FLAG.ENABLED) !== 0;
33
+ const hasTextAttributes = ((_ref1 = schema == null ? void 0 : schema.attributes) != null ? _ref1 : []).some((field)=>field.component === FieldComponentType.TEXT_FIELD || field.component === FieldComponentType.TEXTAREA);
34
+ return textEditable || hasTextAttributes;
35
+ }
36
+ /**
37
+ * Generate a section (AGL-169), on the besigner toolbar through the
38
+ * `besignerToolbar` zone: opens the provider's prompt dialog, and the
39
+ * proposed subtree lands at the end of the canvas root. Not drawn while the
40
+ * reader's permission refuses the door.
41
+ */ export function AiGenerateSectionControl() {
42
+ const { onGenerateSection } = useContext(AiAssistActionsContext);
43
+ if (!onGenerateSection) return null;
44
+ return /*#__PURE__*/ _jsx(Tooltip, {
45
+ title: "Generate a section with AI",
46
+ children: /*#__PURE__*/ _jsx(IconButton, {
47
+ "aria-label": "generate section with ai",
48
+ size: "small",
49
+ color: "inherit",
50
+ onClick: ()=>onGenerateSection(),
51
+ children: /*#__PURE__*/ _jsx(MdiIcon, {
52
+ fontSize: "inherit",
53
+ path: mdiAutoFix.path
54
+ })
55
+ })
56
+ });
57
+ }
58
+ AiGenerateSectionControl.displayName = 'AiGenerateSectionControl';
59
+ /**
60
+ * Rewrite with AI (AGL-89), under the selected element's fields through the
61
+ * `besignerInspector` zone: opens the provider's instruction dialog for the
62
+ * element. Drawn for an element the rewrite applies to, while the reader's
63
+ * permission admits the door.
64
+ */ export function AiRewriteControl(props) {
65
+ const { onRewrite } = useContext(AiAssistActionsContext);
66
+ const node = props.node;
67
+ if (!onRewrite || !node || !nodeTakesCopyRewrite(node)) return null;
68
+ return /*#__PURE__*/ _jsx(FormControl, {
69
+ margin: "none",
70
+ fullWidth: true,
71
+ children: /*#__PURE__*/ _jsx(Button, {
72
+ color: "primary",
73
+ onClick: ()=>onRewrite(node),
74
+ fullWidth: true,
75
+ children: 'Rewrite with AI'
76
+ })
77
+ });
78
+ }
79
+ AiRewriteControl.displayName = 'AiRewriteControl';
80
+
81
+ //# sourceMappingURL=besigner-ai-controls.component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../../libs/plugins/ai/src/lib/components/besigner-ai-controls.component.tsx"],"sourcesContent":["/**\n * @license\n * Copyright 2026 Aglyn LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n'use client'\n\nimport { FEATURE_FLAG, FieldComponentType, type NodeSchema } from '@aglyn/aglyn'\nimport { mdiAutoFix } from '@aglyn/shared-data-mdi'\nimport { MdiIcon } from '@aglyn/shared-ui-jsx'\nimport { Button, FormControl, IconButton, Tooltip } from '@mui/material'\nimport { useContext } from 'react'\nimport { AiAssistActionsContext } from './ai-assist-actions-context'\n\n/**\n * Whether the copy assistant can rewrite an element (AGL-89, AGL-130): a\n * text-editable element, or one declaring a text attribute — alt text, a\n * label — the rewrite dialog lets the reader pick.\n */\nexport function nodeTakesCopyRewrite(node: NodeSchema<any> | null | undefined): boolean {\n const schema = node?.componentSchema\n const textEditable =\n ((schema?.flags?.textEditable ?? FEATURE_FLAG.DISABLED) & FEATURE_FLAG.ENABLED) !== 0\n const hasTextAttributes = (schema?.attributes ?? []).some(\n (field: { component?: unknown }) =>\n field.component === FieldComponentType.TEXT_FIELD ||\n field.component === FieldComponentType.TEXTAREA,\n )\n return textEditable || hasTextAttributes\n}\n\n/**\n * Generate a section (AGL-169), on the besigner toolbar through the\n * `besignerToolbar` zone: opens the provider's prompt dialog, and the\n * proposed subtree lands at the end of the canvas root. Not drawn while the\n * reader's permission refuses the door.\n */\nexport function AiGenerateSectionControl() {\n const { onGenerateSection } = useContext(AiAssistActionsContext)\n if (!onGenerateSection) return null\n return (\n <Tooltip title=\"Generate a section with AI\">\n <IconButton\n aria-label=\"generate section with ai\"\n size=\"small\"\n color=\"inherit\"\n onClick={() => onGenerateSection()}\n >\n <MdiIcon fontSize=\"inherit\" path={mdiAutoFix.path} />\n </IconButton>\n </Tooltip>\n )\n}\nAiGenerateSectionControl.displayName = 'AiGenerateSectionControl'\n\n/**\n * Rewrite with AI (AGL-89), under the selected element's fields through the\n * `besignerInspector` zone: opens the provider's instruction dialog for the\n * element. Drawn for an element the rewrite applies to, while the reader's\n * permission admits the door.\n */\nexport function AiRewriteControl(props: { node?: NodeSchema<any> | null }) {\n const { onRewrite } = useContext(AiAssistActionsContext)\n const node = props.node\n if (!onRewrite || !node || !nodeTakesCopyRewrite(node)) return null\n return (\n <FormControl margin=\"none\" fullWidth>\n <Button color=\"primary\" onClick={() => onRewrite(node)} fullWidth>\n {'Rewrite with AI'}\n </Button>\n </FormControl>\n )\n}\nAiRewriteControl.displayName = 'AiRewriteControl'\n"],"names":["FEATURE_FLAG","FieldComponentType","mdiAutoFix","MdiIcon","Button","FormControl","IconButton","Tooltip","useContext","AiAssistActionsContext","nodeTakesCopyRewrite","node","schema","componentSchema","textEditable","flags","DISABLED","ENABLED","hasTextAttributes","attributes","some","field","component","TEXT_FIELD","TEXTAREA","AiGenerateSectionControl","onGenerateSection","title","aria-label","size","color","onClick","fontSize","path","displayName","AiRewriteControl","props","onRewrite","margin","fullWidth"],"mappings":"AAAA;;;;;;;;;;;;;;;CAeC,GACD;;AAEA,SAASA,YAAY,EAAEC,kBAAkB,QAAyB,eAAc;AAChF,SAASC,UAAU,QAAQ,yBAAwB;AACnD,SAASC,OAAO,QAAQ,uBAAsB;AAC9C,SAASC,MAAM,EAAEC,WAAW,EAAEC,UAAU,EAAEC,OAAO,QAAQ,gBAAe;AACxE,SAASC,UAAU,QAAQ,QAAO;AAClC,SAASC,sBAAsB,QAAQ,iCAA6B;AAEpE;;;;CAIC,GACD,OAAO,SAASC,qBAAqBC,IAAwC;;QAGvEC;IAFJ,MAAMA,SAASD,wBAAAA,KAAME,eAAe;IACpC,MAAMC,eACJ,AAAC,CAAA,SAACF,2BAAAA,gBAAAA,OAAQG,KAAK,qBAAbH,cAAeE,YAAY,mBAAId,aAAagB,QAAQ,IAAIhB,aAAaiB,OAAO,AAAD,MAAO;IACtF,MAAMC,oBAAoB,UAACN,0BAAAA,OAAQO,UAAU,oBAAI,EAAE,EAAEC,IAAI,CACvD,CAACC,QACCA,MAAMC,SAAS,KAAKrB,mBAAmBsB,UAAU,IACjDF,MAAMC,SAAS,KAAKrB,mBAAmBuB,QAAQ;IAEnD,OAAOV,gBAAgBI;AACzB;AAEA;;;;;CAKC,GACD,OAAO,SAASO;IACd,MAAM,EAAEC,iBAAiB,EAAE,GAAGlB,WAAWC;IACzC,IAAI,CAACiB,mBAAmB,OAAO;IAC/B,qBACE,KAACnB;QAAQoB,OAAM;kBACb,cAAA,KAACrB;YACCsB,cAAW;YACXC,MAAK;YACLC,OAAM;YACNC,SAAS,IAAML;sBAEf,cAAA,KAACvB;gBAAQ6B,UAAS;gBAAUC,MAAM/B,WAAW+B,IAAI;;;;AAIzD;AACAR,yBAAyBS,WAAW,GAAG;AAEvC;;;;;CAKC,GACD,OAAO,SAASC,iBAAiBC,KAAwC;IACvE,MAAM,EAAEC,SAAS,EAAE,GAAG7B,WAAWC;IACjC,MAAME,OAAOyB,MAAMzB,IAAI;IACvB,IAAI,CAAC0B,aAAa,CAAC1B,QAAQ,CAACD,qBAAqBC,OAAO,OAAO;IAC/D,qBACE,KAACN;QAAYiC,QAAO;QAAOC,SAAS;kBAClC,cAAA,KAACnC;YAAO0B,OAAM;YAAUC,SAAS,IAAMM,UAAU1B;YAAO4B,SAAS;sBAC9D;;;AAIT;AACAJ,iBAAiBD,WAAW,GAAG"}
@@ -0,0 +1,36 @@
1
+ import type { AiAllotmentRowWire } from '../usage/ai-usage-wire';
2
+ /** An allotment as a table cell reads it: used of credits, mode, models. */
3
+ export declare function aiAllotmentSummary(row: Pick<AiAllotmentRowWire, 'credits' | 'mode' | 'models' | 'used'> | null | undefined): string;
4
+ /** The color an allotment's figure reads in: warning from 80%, error at it. */
5
+ export declare function aiAllotmentTone(row: Pick<AiAllotmentRowWire, 'credits' | 'used'> | null | undefined): 'text.primary' | 'warning.main' | 'error.main';
6
+ /**
7
+ * AI ALLOTMENTS ON BILLING → USAGE (AGL-2942): who may draw how much of the
8
+ * workspace's AI pool.
9
+ *
10
+ * Team members and sites, each with this month's credits and its allotment;
11
+ * select several and set one allotment for all of them, or set the same
12
+ * allotment on every site at once — the agency's "same for every client
13
+ * site". Collaborators' allotments, which their sites' Users cards set, are
14
+ * listed below. On a plan that offers it, the organization's model
15
+ * restriction sits at the end.
16
+ *
17
+ * Read with `billing.view`; the controls appear with `billing.manage`, and
18
+ * the route refuses a write without it whatever this card draws.
19
+ */
20
+ export declare function BillingAiAllotments({ orgId }: {
21
+ orgId?: string;
22
+ }): import("react").JSX.Element;
23
+ export declare namespace BillingAiAllotments {
24
+ var displayName: string;
25
+ }
26
+ /**
27
+ * The card on Billing → Usage, through the `orgBillingUsage` zone, beneath
28
+ * the table of who drew the credits. Registered with `billing.view`.
29
+ */
30
+ export declare function AiAllotmentsCard(props: {
31
+ orgId?: string;
32
+ }): import("react").JSX.Element;
33
+ export declare namespace AiAllotmentsCard {
34
+ var displayName: string;
35
+ }
36
+ export default AiAllotmentsCard;