@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.
- package/LICENSE +201 -0
- package/README.md +25 -0
- package/package.json +60 -0
- package/src/index.d.ts +21 -0
- package/src/index.js +22 -0
- package/src/index.js.map +1 -0
- package/src/lib/activity/ai-activity-actions.d.ts +106 -0
- package/src/lib/activity/ai-activity-actions.js +209 -0
- package/src/lib/activity/ai-activity-actions.js.map +1 -0
- package/src/lib/activity/ai-activity.d.ts +219 -0
- package/src/lib/activity/ai-activity.js +251 -0
- package/src/lib/activity/ai-activity.js.map +1 -0
- package/src/lib/billing/ai-overage-charge.d.ts +102 -0
- package/src/lib/billing/ai-overage-charge.js +258 -0
- package/src/lib/billing/ai-overage-charge.js.map +1 -0
- package/src/lib/billing/ai-overage-close.d.ts +62 -0
- package/src/lib/billing/ai-overage-close.js +129 -0
- package/src/lib/billing/ai-overage-close.js.map +1 -0
- package/src/lib/billing/ai-overage-cutover.d.ts +63 -0
- package/src/lib/billing/ai-overage-cutover.js +114 -0
- package/src/lib/billing/ai-overage-cutover.js.map +1 -0
- package/src/lib/billing/ai-overage-events.d.ts +77 -0
- package/src/lib/billing/ai-overage-events.js +174 -0
- package/src/lib/billing/ai-overage-events.js.map +1 -0
- package/src/lib/billing/ai-overage-gate.d.ts +147 -0
- package/src/lib/billing/ai-overage-gate.js +177 -0
- package/src/lib/billing/ai-overage-gate.js.map +1 -0
- package/src/lib/billing/ai-overage-ledger.d.ts +135 -0
- package/src/lib/billing/ai-overage-ledger.js +278 -0
- package/src/lib/billing/ai-overage-ledger.js.map +1 -0
- package/src/lib/billing/ai-overage-standing-writes.d.ts +110 -0
- package/src/lib/billing/ai-overage-standing-writes.js +205 -0
- package/src/lib/billing/ai-overage-standing-writes.js.map +1 -0
- package/src/lib/billing/ai-overage-standing.d.ts +168 -0
- package/src/lib/billing/ai-overage-standing.js +215 -0
- package/src/lib/billing/ai-overage-standing.js.map +1 -0
- package/src/lib/billing/ai-overage-trigger.d.ts +30 -0
- package/src/lib/billing/ai-overage-trigger.js +76 -0
- package/src/lib/billing/ai-overage-trigger.js.map +1 -0
- package/src/lib/components/ai-allotment-editor.component.d.ts +40 -0
- package/src/lib/components/ai-allotment-editor.component.js +213 -0
- package/src/lib/components/ai-allotment-editor.component.js.map +1 -0
- package/src/lib/components/ai-assist-actions-context.d.ts +13 -0
- package/src/lib/components/ai-assist-actions-context.js +21 -0
- package/src/lib/components/ai-assist-actions-context.js.map +1 -0
- package/src/lib/components/ai-assist-provider.component.d.ts +51 -0
- package/src/lib/components/ai-assist-provider.component.js +519 -0
- package/src/lib/components/ai-assist-provider.component.js.map +1 -0
- package/src/lib/components/ai-brief-dialog.component.d.ts +56 -0
- package/src/lib/components/ai-brief-dialog.component.js +319 -0
- package/src/lib/components/ai-brief-dialog.component.js.map +1 -0
- package/src/lib/components/ai-collaborator-permissions-column.component.d.ts +32 -0
- package/src/lib/components/ai-collaborator-permissions-column.component.js +132 -0
- package/src/lib/components/ai-collaborator-permissions-column.component.js.map +1 -0
- package/src/lib/components/ai-credits-card.component.d.ts +34 -0
- package/src/lib/components/ai-credits-card.component.js +131 -0
- package/src/lib/components/ai-credits-card.component.js.map +1 -0
- package/src/lib/components/ai-credits-columns.component.d.ts +56 -0
- package/src/lib/components/ai-credits-columns.component.js +118 -0
- package/src/lib/components/ai-credits-columns.component.js.map +1 -0
- package/src/lib/components/ai-crm-email-draft.component.d.ts +17 -0
- package/src/lib/components/ai-crm-email-draft.component.js +159 -0
- package/src/lib/components/ai-crm-email-draft.component.js.map +1 -0
- package/src/lib/components/ai-crm-import-mapping.component.d.ts +20 -0
- package/src/lib/components/ai-crm-import-mapping.component.js +167 -0
- package/src/lib/components/ai-crm-import-mapping.component.js.map +1 -0
- package/src/lib/components/ai-crm-record-card.component.d.ts +27 -0
- package/src/lib/components/ai-crm-record-card.component.js +263 -0
- package/src/lib/components/ai-crm-record-card.component.js.map +1 -0
- package/src/lib/components/ai-describe-automation.component.d.ts +31 -0
- package/src/lib/components/ai-describe-automation.component.js +226 -0
- package/src/lib/components/ai-describe-automation.component.js.map +1 -0
- package/src/lib/components/ai-describe-button.component.d.ts +39 -0
- package/src/lib/components/ai-describe-button.component.js +87 -0
- package/src/lib/components/ai-describe-button.component.js.map +1 -0
- package/src/lib/components/ai-describe-page.component.d.ts +26 -0
- package/src/lib/components/ai-describe-page.component.js +18 -0
- package/src/lib/components/ai-describe-page.component.js.map +1 -0
- package/src/lib/components/ai-experiment-cards.component.d.ts +75 -0
- package/src/lib/components/ai-experiment-cards.component.js +573 -0
- package/src/lib/components/ai-experiment-cards.component.js.map +1 -0
- package/src/lib/components/ai-explain-automation.component.d.ts +31 -0
- package/src/lib/components/ai-explain-automation.component.js +265 -0
- package/src/lib/components/ai-explain-automation.component.js.map +1 -0
- package/src/lib/components/ai-insight-dialog.component.d.ts +37 -0
- package/src/lib/components/ai-insight-dialog.component.js +441 -0
- package/src/lib/components/ai-insight-dialog.component.js.map +1 -0
- package/src/lib/components/ai-job-plan.component.d.ts +46 -0
- package/src/lib/components/ai-job-plan.component.js +192 -0
- package/src/lib/components/ai-job-plan.component.js.map +1 -0
- package/src/lib/components/ai-model-selector.component.d.ts +21 -0
- package/src/lib/components/ai-model-selector.component.js +109 -0
- package/src/lib/components/ai-model-selector.component.js.map +1 -0
- package/src/lib/components/ai-page-brief-dialog.component.d.ts +29 -0
- package/src/lib/components/ai-page-brief-dialog.component.js +27 -0
- package/src/lib/components/ai-page-brief-dialog.component.js.map +1 -0
- package/src/lib/components/ai-permissions-on-host.component.d.ts +55 -0
- package/src/lib/components/ai-permissions-on-host.component.js +91 -0
- package/src/lib/components/ai-permissions-on-host.component.js.map +1 -0
- package/src/lib/components/ai-product-copy-card.component.d.ts +25 -0
- package/src/lib/components/ai-product-copy-card.component.js +328 -0
- package/src/lib/components/ai-product-copy-card.component.js.map +1 -0
- package/src/lib/components/ai-product-import-option.component.d.ts +14 -0
- package/src/lib/components/ai-product-import-option.component.js +58 -0
- package/src/lib/components/ai-product-import-option.component.js.map +1 -0
- package/src/lib/components/ai-products-hub-card.component.d.ts +15 -0
- package/src/lib/components/ai-products-hub-card.component.js +418 -0
- package/src/lib/components/ai-products-hub-card.component.js.map +1 -0
- package/src/lib/components/ai-products-proposals.component.d.ts +19 -0
- package/src/lib/components/ai-products-proposals.component.js +547 -0
- package/src/lib/components/ai-products-proposals.component.js.map +1 -0
- package/src/lib/components/ai-save-as-component.component.d.ts +38 -0
- package/src/lib/components/ai-save-as-component.component.js +231 -0
- package/src/lib/components/ai-save-as-component.component.js.map +1 -0
- package/src/lib/components/ai-seo-audit-card.component.d.ts +9 -0
- package/src/lib/components/ai-seo-audit-card.component.js +620 -0
- package/src/lib/components/ai-seo-audit-card.component.js.map +1 -0
- package/src/lib/components/ai-seo-fields-card.component.d.ts +10 -0
- package/src/lib/components/ai-seo-fields-card.component.js +453 -0
- package/src/lib/components/ai-seo-fields-card.component.js.map +1 -0
- package/src/lib/components/ai-site-batch-card.component.d.ts +32 -0
- package/src/lib/components/ai-site-batch-card.component.js +531 -0
- package/src/lib/components/ai-site-batch-card.component.js.map +1 -0
- package/src/lib/components/ai-site-seo-start-card.component.d.ts +26 -0
- package/src/lib/components/ai-site-seo-start-card.component.js +178 -0
- package/src/lib/components/ai-site-seo-start-card.component.js.map +1 -0
- package/src/lib/components/ai-site-start-card.component.d.ts +19 -0
- package/src/lib/components/ai-site-start-card.component.js +348 -0
- package/src/lib/components/ai-site-start-card.component.js.map +1 -0
- package/src/lib/components/ai-template-collection-field.component.d.ts +32 -0
- package/src/lib/components/ai-template-collection-field.component.js +63 -0
- package/src/lib/components/ai-template-collection-field.component.js.map +1 -0
- package/src/lib/components/ai-theme-proposal-card.component.d.ts +6 -0
- package/src/lib/components/ai-theme-proposal-card.component.js +619 -0
- package/src/lib/components/ai-theme-proposal-card.component.js.map +1 -0
- package/src/lib/components/ai-usage-strip.component.d.ts +27 -0
- package/src/lib/components/ai-usage-strip.component.js +145 -0
- package/src/lib/components/ai-usage-strip.component.js.map +1 -0
- package/src/lib/components/assist-edit-canvas.d.ts +169 -0
- package/src/lib/components/assist-edit-canvas.js +636 -0
- package/src/lib/components/assist-edit-canvas.js.map +1 -0
- package/src/lib/components/assist-edit-card.component.d.ts +16 -0
- package/src/lib/components/assist-edit-card.component.js +181 -0
- package/src/lib/components/assist-edit-card.component.js.map +1 -0
- package/src/lib/components/assist-jobs-drawer.component.d.ts +72 -0
- package/src/lib/components/assist-jobs-drawer.component.js +626 -0
- package/src/lib/components/assist-jobs-drawer.component.js.map +1 -0
- package/src/lib/components/assist-panel.component.d.ts +136 -0
- package/src/lib/components/assist-panel.component.js +1099 -0
- package/src/lib/components/assist-panel.component.js.map +1 -0
- package/src/lib/components/assist-signals-page.component.d.ts +3 -0
- package/src/lib/components/assist-signals-page.component.js +1017 -0
- package/src/lib/components/assist-signals-page.component.js.map +1 -0
- package/src/lib/components/besigner-ai-controls.component.d.ts +29 -0
- package/src/lib/components/besigner-ai-controls.component.js +81 -0
- package/src/lib/components/besigner-ai-controls.component.js.map +1 -0
- package/src/lib/components/billing-ai-allotments.component.d.ts +36 -0
- package/src/lib/components/billing-ai-allotments.component.js +486 -0
- package/src/lib/components/billing-ai-allotments.component.js.map +1 -0
- package/src/lib/components/billing-ai-top-users.component.d.ts +44 -0
- package/src/lib/components/billing-ai-top-users.component.js +304 -0
- package/src/lib/components/billing-ai-top-users.component.js.map +1 -0
- package/src/lib/components/billing-assist-overage-card.component.d.ts +69 -0
- package/src/lib/components/billing-assist-overage-card.component.js +437 -0
- package/src/lib/components/billing-assist-overage-card.component.js.map +1 -0
- package/src/lib/components/host-ai-allotments.component.d.ts +40 -0
- package/src/lib/components/host-ai-allotments.component.js +239 -0
- package/src/lib/components/host-ai-allotments.component.js.map +1 -0
- package/src/lib/components/member-ai-allotment-card.component.d.ts +28 -0
- package/src/lib/components/member-ai-allotment-card.component.js +172 -0
- package/src/lib/components/member-ai-allotment-card.component.js.map +1 -0
- package/src/lib/components/member-ai-usage-card.component.d.ts +28 -0
- package/src/lib/components/member-ai-usage-card.component.js +240 -0
- package/src/lib/components/member-ai-usage-card.component.js.map +1 -0
- package/src/lib/components/staff-org-ai-card.component.d.ts +17 -0
- package/src/lib/components/staff-org-ai-card.component.js +739 -0
- package/src/lib/components/staff-org-ai-card.component.js.map +1 -0
- package/src/lib/components/staff-org-usage-ai-columns.component.d.ts +41 -0
- package/src/lib/components/staff-org-usage-ai-columns.component.js +65 -0
- package/src/lib/components/staff-org-usage-ai-columns.component.js.map +1 -0
- package/src/lib/components/staff-orgs-ai-spend-column.component.d.ts +28 -0
- package/src/lib/components/staff-orgs-ai-spend-column.component.js +89 -0
- package/src/lib/components/staff-orgs-ai-spend-column.component.js.map +1 -0
- package/src/lib/components/staff-user-ai-usage-card.component.d.ts +27 -0
- package/src/lib/components/staff-user-ai-usage-card.component.js +183 -0
- package/src/lib/components/staff-user-ai-usage-card.component.js.map +1 -0
- package/src/lib/components/use-ai-allotments.d.ts +49 -0
- package/src/lib/components/use-ai-allotments.js +171 -0
- package/src/lib/components/use-ai-allotments.js.map +1 -0
- package/src/lib/components/use-ai-crm-answer.d.ts +50 -0
- package/src/lib/components/use-ai-crm-answer.js +220 -0
- package/src/lib/components/use-ai-crm-answer.js.map +1 -0
- package/src/lib/components/use-ai-job-run.d.ts +51 -0
- package/src/lib/components/use-ai-job-run.js +176 -0
- package/src/lib/components/use-ai-job-run.js.map +1 -0
- package/src/lib/components/use-ai-model-choice.d.ts +47 -0
- package/src/lib/components/use-ai-model-choice.js +150 -0
- package/src/lib/components/use-ai-model-choice.js.map +1 -0
- package/src/lib/components/use-ai-products-jobs.d.ts +36 -0
- package/src/lib/components/use-ai-products-jobs.js +190 -0
- package/src/lib/components/use-ai-products-jobs.js.map +1 -0
- package/src/lib/components/use-ai-usage-meter.d.ts +11 -0
- package/src/lib/components/use-ai-usage-meter.js +96 -0
- package/src/lib/components/use-ai-usage-meter.js.map +1 -0
- package/src/lib/components/use-org-ai-usage.d.ts +42 -0
- package/src/lib/components/use-org-ai-usage.js +181 -0
- package/src/lib/components/use-org-ai-usage.js.map +1 -0
- package/src/lib/components/use-staff-orgs-ai-spend.d.ts +18 -0
- package/src/lib/components/use-staff-orgs-ai-spend.js +127 -0
- package/src/lib/components/use-staff-orgs-ai-spend.js.map +1 -0
- package/src/lib/constants.d.ts +24 -0
- package/src/lib/constants.js +23 -0
- package/src/lib/constants.js.map +1 -0
- package/src/lib/declarations.d.ts +48 -0
- package/src/lib/declarations.js +129 -0
- package/src/lib/declarations.js.map +1 -0
- package/src/lib/declarations.server.d.ts +35 -0
- package/src/lib/declarations.server.js +138 -0
- package/src/lib/declarations.server.js.map +1 -0
- package/src/lib/insights/ai-figure-readers.d.ts +90 -0
- package/src/lib/insights/ai-figure-readers.js +863 -0
- package/src/lib/insights/ai-figure-readers.js.map +1 -0
- package/src/lib/insights/ai-insight-digest.d.ts +165 -0
- package/src/lib/insights/ai-insight-digest.js +363 -0
- package/src/lib/insights/ai-insight-digest.js.map +1 -0
- package/src/lib/insights/ai-insight-readers.d.ts +71 -0
- package/src/lib/insights/ai-insight-readers.js +141 -0
- package/src/lib/insights/ai-insight-readers.js.map +1 -0
- package/src/lib/jobs/ai-crm-access.d.ts +61 -0
- package/src/lib/jobs/ai-crm-access.js +94 -0
- package/src/lib/jobs/ai-crm-access.js.map +1 -0
- package/src/lib/jobs/ai-email-bindings.d.ts +97 -0
- package/src/lib/jobs/ai-email-bindings.js +147 -0
- package/src/lib/jobs/ai-email-bindings.js.map +1 -0
- package/src/lib/jobs/ai-job-admission.d.ts +82 -0
- package/src/lib/jobs/ai-job-admission.js +45 -0
- package/src/lib/jobs/ai-job-admission.js.map +1 -0
- package/src/lib/jobs/ai-job-budget.d.ts +167 -0
- package/src/lib/jobs/ai-job-budget.js +161 -0
- package/src/lib/jobs/ai-job-budget.js.map +1 -0
- package/src/lib/jobs/ai-job-campaign-step.d.ts +108 -0
- package/src/lib/jobs/ai-job-campaign-step.js +340 -0
- package/src/lib/jobs/ai-job-campaign-step.js.map +1 -0
- package/src/lib/jobs/ai-job-component-checks.d.ts +74 -0
- package/src/lib/jobs/ai-job-component-checks.js +442 -0
- package/src/lib/jobs/ai-job-component-checks.js.map +1 -0
- package/src/lib/jobs/ai-job-component-step.d.ts +75 -0
- package/src/lib/jobs/ai-job-component-step.js +262 -0
- package/src/lib/jobs/ai-job-component-step.js.map +1 -0
- package/src/lib/jobs/ai-job-crm-step.d.ts +192 -0
- package/src/lib/jobs/ai-job-crm-step.js +734 -0
- package/src/lib/jobs/ai-job-crm-step.js.map +1 -0
- package/src/lib/jobs/ai-job-draft-ids.d.ts +62 -0
- package/src/lib/jobs/ai-job-draft-ids.js +132 -0
- package/src/lib/jobs/ai-job-draft-ids.js.map +1 -0
- package/src/lib/jobs/ai-job-drafts.d.ts +304 -0
- package/src/lib/jobs/ai-job-drafts.js +557 -0
- package/src/lib/jobs/ai-job-drafts.js.map +1 -0
- package/src/lib/jobs/ai-job-email-step.d.ts +195 -0
- package/src/lib/jobs/ai-job-email-step.js +547 -0
- package/src/lib/jobs/ai-job-email-step.js.map +1 -0
- package/src/lib/jobs/ai-job-experiment-step.d.ts +105 -0
- package/src/lib/jobs/ai-job-experiment-step.js +445 -0
- package/src/lib/jobs/ai-job-experiment-step.js.map +1 -0
- package/src/lib/jobs/ai-job-form-step.d.ts +250 -0
- package/src/lib/jobs/ai-job-form-step.js +634 -0
- package/src/lib/jobs/ai-job-form-step.js.map +1 -0
- package/src/lib/jobs/ai-job-generation.d.ts +114 -0
- package/src/lib/jobs/ai-job-generation.js +384 -0
- package/src/lib/jobs/ai-job-generation.js.map +1 -0
- package/src/lib/jobs/ai-job-insight-budget.d.ts +41 -0
- package/src/lib/jobs/ai-job-insight-budget.js +46 -0
- package/src/lib/jobs/ai-job-insight-budget.js.map +1 -0
- package/src/lib/jobs/ai-job-insight-step.d.ts +58 -0
- package/src/lib/jobs/ai-job-insight-step.js +350 -0
- package/src/lib/jobs/ai-job-insight-step.js.map +1 -0
- package/src/lib/jobs/ai-job-layout-step.d.ts +103 -0
- package/src/lib/jobs/ai-job-layout-step.js +340 -0
- package/src/lib/jobs/ai-job-layout-step.js.map +1 -0
- package/src/lib/jobs/ai-job-page-budget.d.ts +57 -0
- package/src/lib/jobs/ai-job-page-budget.js +60 -0
- package/src/lib/jobs/ai-job-page-budget.js.map +1 -0
- package/src/lib/jobs/ai-job-page-sections.d.ts +150 -0
- package/src/lib/jobs/ai-job-page-sections.js +450 -0
- package/src/lib/jobs/ai-job-page-sections.js.map +1 -0
- package/src/lib/jobs/ai-job-page-step.d.ts +198 -0
- package/src/lib/jobs/ai-job-page-step.js +667 -0
- package/src/lib/jobs/ai-job-page-step.js.map +1 -0
- package/src/lib/jobs/ai-job-plan-conformance.d.ts +107 -0
- package/src/lib/jobs/ai-job-plan-conformance.js +164 -0
- package/src/lib/jobs/ai-job-plan-conformance.js.map +1 -0
- package/src/lib/jobs/ai-job-plan-step.d.ts +196 -0
- package/src/lib/jobs/ai-job-plan-step.js +458 -0
- package/src/lib/jobs/ai-job-plan-step.js.map +1 -0
- package/src/lib/jobs/ai-job-plugin-drafts.d.ts +76 -0
- package/src/lib/jobs/ai-job-plugin-drafts.js +91 -0
- package/src/lib/jobs/ai-job-plugin-drafts.js.map +1 -0
- package/src/lib/jobs/ai-job-products-step.d.ts +106 -0
- package/src/lib/jobs/ai-job-products-step.js +436 -0
- package/src/lib/jobs/ai-job-products-step.js.map +1 -0
- package/src/lib/jobs/ai-job-seo-budget.d.ts +52 -0
- package/src/lib/jobs/ai-job-seo-budget.js +63 -0
- package/src/lib/jobs/ai-job-seo-budget.js.map +1 -0
- package/src/lib/jobs/ai-job-seo-step.d.ts +145 -0
- package/src/lib/jobs/ai-job-seo-step.js +809 -0
- package/src/lib/jobs/ai-job-seo-step.js.map +1 -0
- package/src/lib/jobs/ai-job-site-step.d.ts +252 -0
- package/src/lib/jobs/ai-job-site-step.js +538 -0
- package/src/lib/jobs/ai-job-site-step.js.map +1 -0
- package/src/lib/jobs/ai-job-template-step.d.ts +105 -0
- package/src/lib/jobs/ai-job-template-step.js +391 -0
- package/src/lib/jobs/ai-job-template-step.js.map +1 -0
- package/src/lib/jobs/ai-job-text-step.d.ts +125 -0
- package/src/lib/jobs/ai-job-text-step.js +128 -0
- package/src/lib/jobs/ai-job-text-step.js.map +1 -0
- package/src/lib/jobs/ai-job-theme-budget.d.ts +38 -0
- package/src/lib/jobs/ai-job-theme-budget.js +43 -0
- package/src/lib/jobs/ai-job-theme-budget.js.map +1 -0
- package/src/lib/jobs/ai-job-theme-step.d.ts +115 -0
- package/src/lib/jobs/ai-job-theme-step.js +337 -0
- package/src/lib/jobs/ai-job-theme-step.js.map +1 -0
- package/src/lib/jobs/ai-job-workflow-step.d.ts +139 -0
- package/src/lib/jobs/ai-job-workflow-step.js +530 -0
- package/src/lib/jobs/ai-job-workflow-step.js.map +1 -0
- package/src/lib/jobs/ai-jobs-beat.d.ts +78 -0
- package/src/lib/jobs/ai-jobs-beat.js +93 -0
- package/src/lib/jobs/ai-jobs-beat.js.map +1 -0
- package/src/lib/jobs/ai-jobs-pause.d.ts +38 -0
- package/src/lib/jobs/ai-jobs-pause.js +45 -0
- package/src/lib/jobs/ai-jobs-pause.js.map +1 -0
- package/src/lib/jobs/ai-jobs.d.ts +558 -0
- package/src/lib/jobs/ai-jobs.js +1410 -0
- package/src/lib/jobs/ai-jobs.js.map +1 -0
- package/src/lib/jobs/ai-media-asset-server.d.ts +34 -0
- package/src/lib/jobs/ai-media-asset-server.js +34 -0
- package/src/lib/jobs/ai-media-asset-server.js.map +1 -0
- package/src/lib/jobs/ai-media-asset.d.ts +59 -0
- package/src/lib/jobs/ai-media-asset.js +86 -0
- package/src/lib/jobs/ai-media-asset.js.map +1 -0
- package/src/lib/jobs/ai-product-image.d.ts +78 -0
- package/src/lib/jobs/ai-product-image.js +113 -0
- package/src/lib/jobs/ai-product-image.js.map +1 -0
- package/src/lib/jobs/ai-theme-brand-inputs.d.ts +125 -0
- package/src/lib/jobs/ai-theme-brand-inputs.js +378 -0
- package/src/lib/jobs/ai-theme-brand-inputs.js.map +1 -0
- package/src/lib/jobs/ai-theme-brand-server.d.ts +33 -0
- package/src/lib/jobs/ai-theme-brand-server.js +33 -0
- package/src/lib/jobs/ai-theme-brand-server.js.map +1 -0
- package/src/lib/jobs/ai-workflow-records.d.ts +84 -0
- package/src/lib/jobs/ai-workflow-records.js +158 -0
- package/src/lib/jobs/ai-workflow-records.js.map +1 -0
- package/src/lib/jobs/fixtures/ai-free-page-built-recording.d.ts +31 -0
- package/src/lib/jobs/fixtures/ai-free-page-built-recording.js +367 -0
- package/src/lib/jobs/fixtures/ai-free-page-built-recording.js.map +1 -0
- package/src/lib/jobs/fixtures/ai-free-page-recording.d.ts +69 -0
- package/src/lib/jobs/fixtures/ai-free-page-recording.js +442 -0
- package/src/lib/jobs/fixtures/ai-free-page-recording.js.map +1 -0
- package/src/lib/jobs/fixtures/ai-page-briefs.d.ts +146 -0
- package/src/lib/jobs/fixtures/ai-page-briefs.js +1850 -0
- package/src/lib/jobs/fixtures/ai-page-briefs.js.map +1 -0
- package/src/lib/model/ai-allotments.d.ts +208 -0
- package/src/lib/model/ai-allotments.js +269 -0
- package/src/lib/model/ai-allotments.js.map +1 -0
- package/src/lib/model/ai-automation-draft.d.ts +74 -0
- package/src/lib/model/ai-automation-draft.js +310 -0
- package/src/lib/model/ai-automation-draft.js.map +1 -0
- package/src/lib/model/ai-automation-outline.d.ts +50 -0
- package/src/lib/model/ai-automation-outline.js +262 -0
- package/src/lib/model/ai-automation-outline.js.map +1 -0
- package/src/lib/model/ai-build-plan.d.ts +197 -0
- package/src/lib/model/ai-build-plan.js +438 -0
- package/src/lib/model/ai-build-plan.js.map +1 -0
- package/src/lib/model/ai-crm.d.ts +237 -0
- package/src/lib/model/ai-crm.js +225 -0
- package/src/lib/model/ai-crm.js.map +1 -0
- package/src/lib/model/ai-experiment-proposal.d.ts +68 -0
- package/src/lib/model/ai-experiment-proposal.js +146 -0
- package/src/lib/model/ai-experiment-proposal.js.map +1 -0
- package/src/lib/model/ai-experiment.d.ts +309 -0
- package/src/lib/model/ai-experiment.js +395 -0
- package/src/lib/model/ai-experiment.js.map +1 -0
- package/src/lib/model/ai-insight.d.ts +178 -0
- package/src/lib/model/ai-insight.js +201 -0
- package/src/lib/model/ai-insight.js.map +1 -0
- package/src/lib/model/ai-jobs.types.d.ts +412 -0
- package/src/lib/model/ai-jobs.types.js +42 -0
- package/src/lib/model/ai-jobs.types.js.map +1 -0
- package/src/lib/model/ai-page-job.d.ts +92 -0
- package/src/lib/model/ai-page-job.js +159 -0
- package/src/lib/model/ai-page-job.js.map +1 -0
- package/src/lib/model/ai-permissions.d.ts +49 -0
- package/src/lib/model/ai-permissions.js +97 -0
- package/src/lib/model/ai-permissions.js.map +1 -0
- package/src/lib/model/ai-plan-capabilities.d.ts +139 -0
- package/src/lib/model/ai-plan-capabilities.js +149 -0
- package/src/lib/model/ai-plan-capabilities.js.map +1 -0
- package/src/lib/model/ai-products.d.ts +251 -0
- package/src/lib/model/ai-products.js +253 -0
- package/src/lib/model/ai-products.js.map +1 -0
- package/src/lib/model/ai-seo.d.ts +208 -0
- package/src/lib/model/ai-seo.js +150 -0
- package/src/lib/model/ai-seo.js.map +1 -0
- package/src/lib/model/ai-site-inventory.d.ts +164 -0
- package/src/lib/model/ai-site-inventory.js +145 -0
- package/src/lib/model/ai-site-inventory.js.map +1 -0
- package/src/lib/model/ai-site-job.d.ts +247 -0
- package/src/lib/model/ai-site-job.js +314 -0
- package/src/lib/model/ai-site-job.js.map +1 -0
- package/src/lib/model/ai-site-start-seo.d.ts +103 -0
- package/src/lib/model/ai-site-start-seo.js +154 -0
- package/src/lib/model/ai-site-start-seo.js.map +1 -0
- package/src/lib/model/ai-site-start.d.ts +122 -0
- package/src/lib/model/ai-site-start.js +159 -0
- package/src/lib/model/ai-site-start.js.map +1 -0
- package/src/lib/model/ai-site-switch.d.ts +56 -0
- package/src/lib/model/ai-site-switch.js +73 -0
- package/src/lib/model/ai-site-switch.js.map +1 -0
- package/src/lib/model/ai-storefront-claims.d.ts +70 -0
- package/src/lib/model/ai-storefront-claims.js +130 -0
- package/src/lib/model/ai-storefront-claims.js.map +1 -0
- package/src/lib/model/ai-template-subjects.d.ts +82 -0
- package/src/lib/model/ai-template-subjects.js +136 -0
- package/src/lib/model/ai-template-subjects.js.map +1 -0
- package/src/lib/model/ai-theme-proposal.d.ts +210 -0
- package/src/lib/model/ai-theme-proposal.js +506 -0
- package/src/lib/model/ai-theme-proposal.js.map +1 -0
- package/src/lib/model/ai-tokens.d.ts +96 -0
- package/src/lib/model/ai-tokens.js +117 -0
- package/src/lib/model/ai-tokens.js.map +1 -0
- package/src/lib/model/ai-usage-by-user.d.ts +120 -0
- package/src/lib/model/ai-usage-by-user.js +139 -0
- package/src/lib/model/ai-usage-by-user.js.map +1 -0
- package/src/lib/model/ai-workflow-job.d.ts +111 -0
- package/src/lib/model/ai-workflow-job.js +183 -0
- package/src/lib/model/ai-workflow-job.js.map +1 -0
- package/src/lib/model/assist-edit.d.ts +261 -0
- package/src/lib/model/assist-edit.js +175 -0
- package/src/lib/model/assist-edit.js.map +1 -0
- package/src/lib/plugin-config.d.ts +33 -0
- package/src/lib/plugin-config.js +118 -0
- package/src/lib/plugin-config.js.map +1 -0
- package/src/lib/plugin.d.ts +30 -0
- package/src/lib/plugin.js +525 -0
- package/src/lib/plugin.js.map +1 -0
- package/src/lib/providers/anthropic.d.ts +84 -0
- package/src/lib/providers/anthropic.js +432 -0
- package/src/lib/providers/anthropic.js.map +1 -0
- package/src/lib/providers/catalog.d.ts +197 -0
- package/src/lib/providers/catalog.js +312 -0
- package/src/lib/providers/catalog.js.map +1 -0
- package/src/lib/providers/contract.d.ts +464 -0
- package/src/lib/providers/contract.js +274 -0
- package/src/lib/providers/contract.js.map +1 -0
- package/src/lib/providers/model-choice.d.ts +119 -0
- package/src/lib/providers/model-choice.js +416 -0
- package/src/lib/providers/model-choice.js.map +1 -0
- package/src/lib/providers/openai-compatible.d.ts +58 -0
- package/src/lib/providers/openai-compatible.js +361 -0
- package/src/lib/providers/openai-compatible.js.map +1 -0
- package/src/lib/providers/registry.d.ts +49 -0
- package/src/lib/providers/registry.js +71 -0
- package/src/lib/providers/registry.js.map +1 -0
- package/src/lib/providers/routing.d.ts +98 -0
- package/src/lib/providers/routing.js +450 -0
- package/src/lib/providers/routing.js.map +1 -0
- package/src/lib/runtime/ai-abuse-guards.d.ts +113 -0
- package/src/lib/runtime/ai-abuse-guards.js +148 -0
- package/src/lib/runtime/ai-abuse-guards.js.map +1 -0
- package/src/lib/runtime/ai-component-bindings.d.ts +67 -0
- package/src/lib/runtime/ai-component-bindings.js +106 -0
- package/src/lib/runtime/ai-component-bindings.js.map +1 -0
- package/src/lib/runtime/ai-device-audit.d.ts +109 -0
- package/src/lib/runtime/ai-device-audit.js +97 -0
- package/src/lib/runtime/ai-device-audit.js.map +1 -0
- package/src/lib/runtime/ai-doctrine-validators.d.ts +720 -0
- package/src/lib/runtime/ai-doctrine-validators.js +3133 -0
- package/src/lib/runtime/ai-doctrine-validators.js.map +1 -0
- package/src/lib/runtime/ai-doctrine.d.ts +372 -0
- package/src/lib/runtime/ai-doctrine.js +944 -0
- package/src/lib/runtime/ai-doctrine.js.map +1 -0
- package/src/lib/runtime/ai-eval-live.d.ts +321 -0
- package/src/lib/runtime/ai-eval-live.js +1257 -0
- package/src/lib/runtime/ai-eval-live.js.map +1 -0
- package/src/lib/runtime/ai-eval-memory-firestore.d.ts +51 -0
- package/src/lib/runtime/ai-eval-memory-firestore.js +183 -0
- package/src/lib/runtime/ai-eval-memory-firestore.js.map +1 -0
- package/src/lib/runtime/ai-eval.d.ts +441 -0
- package/src/lib/runtime/ai-eval.js +1151 -0
- package/src/lib/runtime/ai-eval.js.map +1 -0
- package/src/lib/runtime/ai-gate.d.ts +130 -0
- package/src/lib/runtime/ai-gate.js +272 -0
- package/src/lib/runtime/ai-gate.js.map +1 -0
- package/src/lib/runtime/ai-generation-bounds.d.ts +24 -0
- package/src/lib/runtime/ai-generation-bounds.js +23 -0
- package/src/lib/runtime/ai-generation-bounds.js.map +1 -0
- package/src/lib/runtime/ai-insight-check.d.ts +76 -0
- package/src/lib/runtime/ai-insight-check.js +281 -0
- package/src/lib/runtime/ai-insight-check.js.map +1 -0
- package/src/lib/runtime/ai-node-tree.d.ts +181 -0
- package/src/lib/runtime/ai-node-tree.js +931 -0
- package/src/lib/runtime/ai-node-tree.js.map +1 -0
- package/src/lib/runtime/ai-page-links.d.ts +79 -0
- package/src/lib/runtime/ai-page-links.js +135 -0
- package/src/lib/runtime/ai-page-links.js.map +1 -0
- package/src/lib/runtime/ai-palette.d.ts +252 -0
- package/src/lib/runtime/ai-palette.generated.d.ts +34 -0
- package/src/lib/runtime/ai-palette.generated.js +5263 -0
- package/src/lib/runtime/ai-palette.generated.js.map +1 -0
- package/src/lib/runtime/ai-palette.js +187 -0
- package/src/lib/runtime/ai-palette.js.map +1 -0
- package/src/lib/runtime/ai-products-generation.d.ts +107 -0
- package/src/lib/runtime/ai-products-generation.js +250 -0
- package/src/lib/runtime/ai-products-generation.js.map +1 -0
- package/src/lib/runtime/ai-repeated-items.d.ts +95 -0
- package/src/lib/runtime/ai-repeated-items.js +397 -0
- package/src/lib/runtime/ai-repeated-items.js.map +1 -0
- package/src/lib/runtime/ai-runtime.d.ts +148 -0
- package/src/lib/runtime/ai-runtime.js +237 -0
- package/src/lib/runtime/ai-runtime.js.map +1 -0
- package/src/lib/runtime/ai-template-examples.d.ts +71 -0
- package/src/lib/runtime/ai-template-examples.js +135 -0
- package/src/lib/runtime/ai-template-examples.js.map +1 -0
- package/src/lib/runtime/assist-answer-cache.d.ts +80 -0
- package/src/lib/runtime/assist-answer-cache.js +184 -0
- package/src/lib/runtime/assist-answer-cache.js.map +1 -0
- package/src/lib/runtime/seo-audit.d.ts +93 -0
- package/src/lib/runtime/seo-audit.js +260 -0
- package/src/lib/runtime/seo-audit.js.map +1 -0
- package/src/lib/runtime/seo-content-fixes.d.ts +41 -0
- package/src/lib/runtime/seo-content-fixes.js +168 -0
- package/src/lib/runtime/seo-content-fixes.js.map +1 -0
- package/src/lib/runtime/seo-fields.d.ts +152 -0
- package/src/lib/runtime/seo-fields.js +215 -0
- package/src/lib/runtime/seo-fields.js.map +1 -0
- package/src/lib/runtime/seo-page-facts.d.ts +61 -0
- package/src/lib/runtime/seo-page-facts.js +150 -0
- package/src/lib/runtime/seo-page-facts.js.map +1 -0
- package/src/lib/runtime/site-inventory.d.ts +63 -0
- package/src/lib/runtime/site-inventory.js +230 -0
- package/src/lib/runtime/site-inventory.js.map +1 -0
- package/src/lib/server/ai-admin-org.d.ts +33 -0
- package/src/lib/server/ai-admin-org.js +381 -0
- package/src/lib/server/ai-admin-org.js.map +1 -0
- package/src/lib/server/ai-admin-orgs-spend.d.ts +40 -0
- package/src/lib/server/ai-admin-orgs-spend.js +129 -0
- package/src/lib/server/ai-admin-orgs-spend.js.map +1 -0
- package/src/lib/server/ai-admin-overage.d.ts +19 -0
- package/src/lib/server/ai-admin-overage.js +246 -0
- package/src/lib/server/ai-admin-overage.js.map +1 -0
- package/src/lib/server/ai-admin-signals.d.ts +34 -0
- package/src/lib/server/ai-admin-signals.js +330 -0
- package/src/lib/server/ai-admin-signals.js.map +1 -0
- package/src/lib/server/ai-admin-user.d.ts +27 -0
- package/src/lib/server/ai-admin-user.js +128 -0
- package/src/lib/server/ai-admin-user.js.map +1 -0
- package/src/lib/server/ai-allotments.d.ts +27 -0
- package/src/lib/server/ai-allotments.js +544 -0
- package/src/lib/server/ai-allotments.js.map +1 -0
- package/src/lib/server/ai-assist-prompts.d.ts +102 -0
- package/src/lib/server/ai-assist-prompts.js +207 -0
- package/src/lib/server/ai-assist-prompts.js.map +1 -0
- package/src/lib/server/ai-assist.d.ts +119 -0
- package/src/lib/server/ai-assist.js +517 -0
- package/src/lib/server/ai-assist.js.map +1 -0
- package/src/lib/server/ai-crm-answer.d.ts +30 -0
- package/src/lib/server/ai-crm-answer.js +98 -0
- package/src/lib/server/ai-crm-answer.js.map +1 -0
- package/src/lib/server/ai-generate-component.d.ts +111 -0
- package/src/lib/server/ai-generate-component.js +643 -0
- package/src/lib/server/ai-generate-component.js.map +1 -0
- package/src/lib/server/ai-host-permissions.d.ts +46 -0
- package/src/lib/server/ai-host-permissions.js +204 -0
- package/src/lib/server/ai-host-permissions.js.map +1 -0
- package/src/lib/server/ai-insight-answer.d.ts +30 -0
- package/src/lib/server/ai-insight-answer.js +83 -0
- package/src/lib/server/ai-insight-answer.js.map +1 -0
- package/src/lib/server/ai-insight-digest-route.d.ts +30 -0
- package/src/lib/server/ai-insight-digest-route.js +156 -0
- package/src/lib/server/ai-insight-digest-route.js.map +1 -0
- package/src/lib/server/ai-jobs-batch.d.ts +48 -0
- package/src/lib/server/ai-jobs-batch.js +306 -0
- package/src/lib/server/ai-jobs-batch.js.map +1 -0
- package/src/lib/server/ai-jobs-beat-route.d.ts +36 -0
- package/src/lib/server/ai-jobs-beat-route.js +86 -0
- package/src/lib/server/ai-jobs-beat-route.js.map +1 -0
- package/src/lib/server/ai-jobs-cancel.d.ts +30 -0
- package/src/lib/server/ai-jobs-cancel.js +74 -0
- package/src/lib/server/ai-jobs-cancel.js.map +1 -0
- package/src/lib/server/ai-jobs-events-route.d.ts +31 -0
- package/src/lib/server/ai-jobs-events-route.js +51 -0
- package/src/lib/server/ai-jobs-events-route.js.map +1 -0
- package/src/lib/server/ai-jobs-events.d.ts +55 -0
- package/src/lib/server/ai-jobs-events.js +144 -0
- package/src/lib/server/ai-jobs-events.js.map +1 -0
- package/src/lib/server/ai-jobs-gate.d.ts +47 -0
- package/src/lib/server/ai-jobs-gate.js +106 -0
- package/src/lib/server/ai-jobs-gate.js.map +1 -0
- package/src/lib/server/ai-jobs-resume.d.ts +23 -0
- package/src/lib/server/ai-jobs-resume.js +209 -0
- package/src/lib/server/ai-jobs-resume.js.map +1 -0
- package/src/lib/server/ai-jobs-route.d.ts +32 -0
- package/src/lib/server/ai-jobs-route.js +307 -0
- package/src/lib/server/ai-jobs-route.js.map +1 -0
- package/src/lib/server/ai-models.d.ts +18 -0
- package/src/lib/server/ai-models.js +134 -0
- package/src/lib/server/ai-models.js.map +1 -0
- package/src/lib/server/ai-seo-apply.d.ts +53 -0
- package/src/lib/server/ai-seo-apply.js +294 -0
- package/src/lib/server/ai-seo-apply.js.map +1 -0
- package/src/lib/server/ai-usage.d.ts +18 -0
- package/src/lib/server/ai-usage.js +220 -0
- package/src/lib/server/ai-usage.js.map +1 -0
- package/src/lib/server/assist-chat.d.ts +234 -0
- package/src/lib/server/assist-chat.js +1446 -0
- package/src/lib/server/assist-chat.js.map +1 -0
- package/src/lib/server/assist-edit-applied.d.ts +22 -0
- package/src/lib/server/assist-edit-applied.js +239 -0
- package/src/lib/server/assist-edit-applied.js.map +1 -0
- package/src/lib/server/assist-edit.d.ts +124 -0
- package/src/lib/server/assist-edit.js +1000 -0
- package/src/lib/server/assist-edit.js.map +1 -0
- package/src/lib/server/assist-feedback.d.ts +31 -0
- package/src/lib/server/assist-feedback.js +115 -0
- package/src/lib/server/assist-feedback.js.map +1 -0
- package/src/lib/server/assist-view-context.d.ts +343 -0
- package/src/lib/server/assist-view-context.js +690 -0
- package/src/lib/server/assist-view-context.js.map +1 -0
- package/src/lib/server/billing-credits.d.ts +59 -0
- package/src/lib/server/billing-credits.js +146 -0
- package/src/lib/server/billing-credits.js.map +1 -0
- package/src/lib/server/billing-overage.d.ts +19 -0
- package/src/lib/server/billing-overage.js +337 -0
- package/src/lib/server/billing-overage.js.map +1 -0
- package/src/lib/server.d.ts +32 -0
- package/src/lib/server.js +265 -0
- package/src/lib/server.js.map +1 -0
- package/src/lib/subprocessors.d.ts +18 -0
- package/src/lib/subprocessors.js +52 -0
- package/src/lib/subprocessors.js.map +1 -0
- package/src/lib/tools/ai-component-tool.d.ts +99 -0
- package/src/lib/tools/ai-component-tool.js +369 -0
- package/src/lib/tools/ai-component-tool.js.map +1 -0
- package/src/lib/tools/ai-crm-tool.d.ts +106 -0
- package/src/lib/tools/ai-crm-tool.js +488 -0
- package/src/lib/tools/ai-crm-tool.js.map +1 -0
- package/src/lib/tools/ai-duplicate-resource-tool.d.ts +71 -0
- package/src/lib/tools/ai-duplicate-resource-tool.js +164 -0
- package/src/lib/tools/ai-duplicate-resource-tool.js.map +1 -0
- package/src/lib/tools/ai-experiment-tool.d.ts +40 -0
- package/src/lib/tools/ai-experiment-tool.js +155 -0
- package/src/lib/tools/ai-experiment-tool.js.map +1 -0
- package/src/lib/tools/ai-insight-tool.d.ts +46 -0
- package/src/lib/tools/ai-insight-tool.js +200 -0
- package/src/lib/tools/ai-insight-tool.js.map +1 -0
- package/src/lib/tools/ai-inventory-lookup-tool.d.ts +86 -0
- package/src/lib/tools/ai-inventory-lookup-tool.js +164 -0
- package/src/lib/tools/ai-inventory-lookup-tool.js.map +1 -0
- package/src/lib/tools/ai-products-tool.d.ts +65 -0
- package/src/lib/tools/ai-products-tool.js +644 -0
- package/src/lib/tools/ai-products-tool.js.map +1 -0
- package/src/lib/tools/ai-seo-tool.d.ts +162 -0
- package/src/lib/tools/ai-seo-tool.js +546 -0
- package/src/lib/tools/ai-seo-tool.js.map +1 -0
- package/src/lib/tools/ai-theme-tool.d.ts +101 -0
- package/src/lib/tools/ai-theme-tool.js +562 -0
- package/src/lib/tools/ai-theme-tool.js.map +1 -0
- package/src/lib/tools/ai-workflow-tool.d.ts +166 -0
- package/src/lib/tools/ai-workflow-tool.js +860 -0
- package/src/lib/tools/ai-workflow-tool.js.map +1 -0
- package/src/lib/usage/ai-allotment-alerts.d.ts +72 -0
- package/src/lib/usage/ai-allotment-alerts.js +157 -0
- package/src/lib/usage/ai-allotment-alerts.js.map +1 -0
- package/src/lib/usage/ai-allotments.d.ts +125 -0
- package/src/lib/usage/ai-allotments.js +239 -0
- package/src/lib/usage/ai-allotments.js.map +1 -0
- package/src/lib/usage/ai-model-sample.d.ts +36 -0
- package/src/lib/usage/ai-model-sample.js +68 -0
- package/src/lib/usage/ai-model-sample.js.map +1 -0
- package/src/lib/usage/ai-usage-alerts.d.ts +55 -0
- package/src/lib/usage/ai-usage-alerts.js +114 -0
- package/src/lib/usage/ai-usage-alerts.js.map +1 -0
- package/src/lib/usage/ai-usage-by-user.d.ts +161 -0
- package/src/lib/usage/ai-usage-by-user.js +211 -0
- package/src/lib/usage/ai-usage-by-user.js.map +1 -0
- package/src/lib/usage/ai-usage-eraser.d.ts +29 -0
- package/src/lib/usage/ai-usage-eraser.js +40 -0
- package/src/lib/usage/ai-usage-eraser.js.map +1 -0
- package/src/lib/usage/ai-usage-meter.d.ts +39 -0
- package/src/lib/usage/ai-usage-meter.js +85 -0
- package/src/lib/usage/ai-usage-meter.js.map +1 -0
- package/src/lib/usage/ai-usage-wire.d.ts +184 -0
- package/src/lib/usage/ai-usage-wire.js +98 -0
- package/src/lib/usage/ai-usage-wire.js.map +1 -0
- package/src/lib/usage/assist-ceiling.d.ts +87 -0
- package/src/lib/usage/assist-ceiling.js +110 -0
- package/src/lib/usage/assist-ceiling.js.map +1 -0
- package/src/lib/usage/assist-free-taste.d.ts +225 -0
- package/src/lib/usage/assist-free-taste.js +308 -0
- package/src/lib/usage/assist-free-taste.js.map +1 -0
- package/src/lib/usage/assist-refusals.d.ts +69 -0
- package/src/lib/usage/assist-refusals.js +79 -0
- package/src/lib/usage/assist-refusals.js.map +1 -0
- package/src/lib/usage/assist-signal-mining.d.ts +375 -0
- package/src/lib/usage/assist-signal-mining.js +344 -0
- package/src/lib/usage/assist-signal-mining.js.map +1 -0
- package/src/lib/usage/assist-usage.d.ts +571 -0
- package/src/lib/usage/assist-usage.js +978 -0
- package/src/lib/usage/assist-usage.js.map +1 -0
- package/src/lib/usage/staff-org-ai.d.ts +242 -0
- package/src/lib/usage/staff-org-ai.js +173 -0
- package/src/lib/usage/staff-org-ai.js.map +1 -0
- package/src/lib/usage/staff-org-usage-ai.d.ts +83 -0
- package/src/lib/usage/staff-org-usage-ai.js +59 -0
- package/src/lib/usage/staff-org-usage-ai.js.map +1 -0
- package/src/lib/usage/staff-orgs-ai-spend.d.ts +83 -0
- package/src/lib/usage/staff-orgs-ai-spend.js +114 -0
- package/src/lib/usage/staff-orgs-ai-spend.js.map +1 -0
|
@@ -0,0 +1,304 @@
|
|
|
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, jsxs as _jsxs } from "react/jsx-runtime";
|
|
18
|
+
import { aiAddonName, countCsvDataRows } from "@aglyn/aglyn";
|
|
19
|
+
import { pluginDocsHelp } from "@aglyn/aglyn/app-utils/docs-help";
|
|
20
|
+
import { mdiOpenInNew } from "@aglyn/shared-data-mdi";
|
|
21
|
+
import { CardDisplay } from "@aglyn/shared-ui-jsx";
|
|
22
|
+
import { ListRowActions, ListTable, listActionsColumn } from "@aglyn/shared-ui-jsx/components/list-table.component";
|
|
23
|
+
import { TABLE_ROW_HEIGHT } from "@aglyn/shared-ui-jsx/const/table-pagination";
|
|
24
|
+
import { useSnackbar } from "@aglyn/shared-ui-snackstack";
|
|
25
|
+
import { authorizedFetch } from "@aglyn/shared-util-http/authorized-token";
|
|
26
|
+
import { useUser } from "@aglyn/tenant-feature-instance";
|
|
27
|
+
import { Alert, Button, MenuItem, Stack, TextField, Typography } from "@mui/material";
|
|
28
|
+
import { buildRoute, Route } from "@aglyn/aglyn/app-utils/console-routes";
|
|
29
|
+
import { useRouter } from "next/navigation";
|
|
30
|
+
import { useCallback, useMemo, useState } from "react";
|
|
31
|
+
import { topAiUsageKinds } from "../model/ai-usage-by-user.js";
|
|
32
|
+
import { useOrgAiUsage } from "./use-org-ai-usage.js";
|
|
33
|
+
import { AI_USAGE_EXPORT_ROWS_HEADER, aiUsageMonthLabel, formatAiUsageShare } from "../usage/ai-usage-wire.js";
|
|
34
|
+
/**
|
|
35
|
+
* WHO IS GENERATING WHAT (AGL-2928) — the per-person table beneath the
|
|
36
|
+
* credit meter on Billing → Usage.
|
|
37
|
+
*
|
|
38
|
+
* The meter above says how much of the pool the workspace has drawn; this
|
|
39
|
+
* says who drew it. Each row is one member's month: credits, their share of
|
|
40
|
+
* the workspace's spend, requests, and how often the gate refused them. A
|
|
41
|
+
* month picker walks the retention window, and the file button hands the
|
|
42
|
+
* same month to a spreadsheet through the streamed export.
|
|
43
|
+
*
|
|
44
|
+
* ## The file is checked, not trusted
|
|
45
|
+
*
|
|
46
|
+
* The route promises its row count in a header taken before the first row
|
|
47
|
+
* is written. A stream that dies halfway yields a well-formed shorter file,
|
|
48
|
+
* so a body with fewer rows than promised is refused rather than saved.
|
|
49
|
+
*
|
|
50
|
+
* The copy stays descriptive on purpose — who, how much, on which site — and
|
|
51
|
+
* never characterizes what the numbers mean about a person.
|
|
52
|
+
*/ export function BillingAiTopUsersComponent(props) {
|
|
53
|
+
var _ref;
|
|
54
|
+
var _usage_data;
|
|
55
|
+
const { orgId, orgSlug } = props;
|
|
56
|
+
const { data: user } = useUser();
|
|
57
|
+
const { enqueueSnackbar } = useSnackbar();
|
|
58
|
+
const [month, setMonth] = useState(undefined);
|
|
59
|
+
const [exporting, setExporting] = useState(false);
|
|
60
|
+
const usage = useOrgAiUsage(orgId, {
|
|
61
|
+
month
|
|
62
|
+
});
|
|
63
|
+
const router = useRouter();
|
|
64
|
+
const name = aiAddonName();
|
|
65
|
+
const handleExport = useCallback(async ()=>{
|
|
66
|
+
if (!orgId || exporting) return;
|
|
67
|
+
setExporting(true);
|
|
68
|
+
try {
|
|
69
|
+
var _response_headers_get;
|
|
70
|
+
const params = new URLSearchParams({
|
|
71
|
+
orgId,
|
|
72
|
+
month: usage.month,
|
|
73
|
+
format: 'csv'
|
|
74
|
+
});
|
|
75
|
+
const response = await authorizedFetch(user, `/api/ai/usage?${params.toString()}`);
|
|
76
|
+
if (!response.ok) {
|
|
77
|
+
var _ref;
|
|
78
|
+
const failure = await response.json().catch(()=>({}));
|
|
79
|
+
throw new Error((_ref = failure == null ? void 0 : failure.error) != null ? _ref : 'Export failed');
|
|
80
|
+
}
|
|
81
|
+
const text = await response.text();
|
|
82
|
+
const promised = Number((_response_headers_get = response.headers.get(AI_USAGE_EXPORT_ROWS_HEADER)) != null ? _response_headers_get : '');
|
|
83
|
+
const received = countCsvDataRows(text);
|
|
84
|
+
if (Number.isFinite(promised) && received < promised) {
|
|
85
|
+
enqueueSnackbar(`Export incomplete — ${received} of ${promised} rows arrived. ` + 'Nothing was saved; try again.', {
|
|
86
|
+
variant: 'error'
|
|
87
|
+
});
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
const url = URL.createObjectURL(new Blob([
|
|
91
|
+
text
|
|
92
|
+
], {
|
|
93
|
+
type: 'text/csv'
|
|
94
|
+
}));
|
|
95
|
+
const anchor = document.createElement('a');
|
|
96
|
+
anchor.href = url;
|
|
97
|
+
anchor.download = `ai-usage-${usage.month}.csv`;
|
|
98
|
+
anchor.click();
|
|
99
|
+
URL.revokeObjectURL(url);
|
|
100
|
+
} catch (error) {
|
|
101
|
+
enqueueSnackbar(error instanceof Error ? error.message : 'Export failed', {
|
|
102
|
+
variant: 'error'
|
|
103
|
+
});
|
|
104
|
+
} finally{
|
|
105
|
+
setExporting(false);
|
|
106
|
+
}
|
|
107
|
+
}, [
|
|
108
|
+
orgId,
|
|
109
|
+
exporting,
|
|
110
|
+
usage.month,
|
|
111
|
+
user,
|
|
112
|
+
enqueueSnackbar
|
|
113
|
+
]);
|
|
114
|
+
const rows = (_ref = (_usage_data = usage.data) == null ? void 0 : _usage_data.rows) != null ? _ref : [];
|
|
115
|
+
const memberHref = useCallback((uid)=>buildRoute(Route.MANAGE_TEAM_MEMBER, {
|
|
116
|
+
orgSlug,
|
|
117
|
+
uid
|
|
118
|
+
}), [
|
|
119
|
+
orgSlug
|
|
120
|
+
]);
|
|
121
|
+
/*
|
|
122
|
+
* One row per member, and the whole month is in hand, so the grid pages,
|
|
123
|
+
* sorts and searches it itself. The row opens the member's page, which is
|
|
124
|
+
* where the split by site and by kind lives.
|
|
125
|
+
*/ const columns = useMemo(()=>[
|
|
126
|
+
{
|
|
127
|
+
field: 'name',
|
|
128
|
+
headerName: 'Member',
|
|
129
|
+
flex: 1,
|
|
130
|
+
minWidth: 220,
|
|
131
|
+
renderCell: ({ row })=>/*#__PURE__*/ _jsxs(Stack, {
|
|
132
|
+
sx: {
|
|
133
|
+
minWidth: 0
|
|
134
|
+
},
|
|
135
|
+
children: [
|
|
136
|
+
/*#__PURE__*/ _jsx(Typography, {
|
|
137
|
+
variant: "body2",
|
|
138
|
+
noWrap: true,
|
|
139
|
+
title: row.name,
|
|
140
|
+
children: row.name
|
|
141
|
+
}),
|
|
142
|
+
row.email && row.email !== row.name ? /*#__PURE__*/ _jsx(Typography, {
|
|
143
|
+
variant: "caption",
|
|
144
|
+
color: "text.secondary",
|
|
145
|
+
noWrap: true,
|
|
146
|
+
children: row.email
|
|
147
|
+
}) : null
|
|
148
|
+
]
|
|
149
|
+
})
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
field: 'credits',
|
|
153
|
+
headerName: 'Credits',
|
|
154
|
+
type: 'number',
|
|
155
|
+
align: 'right',
|
|
156
|
+
headerAlign: 'right',
|
|
157
|
+
width: 110,
|
|
158
|
+
valueFormatter: (value)=>value.toLocaleString()
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
field: 'share',
|
|
162
|
+
headerName: 'Share',
|
|
163
|
+
type: 'number',
|
|
164
|
+
align: 'right',
|
|
165
|
+
headerAlign: 'right',
|
|
166
|
+
width: 90,
|
|
167
|
+
valueFormatter: (value)=>formatAiUsageShare(value)
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
field: 'requests',
|
|
171
|
+
headerName: 'Requests',
|
|
172
|
+
type: 'number',
|
|
173
|
+
align: 'right',
|
|
174
|
+
headerAlign: 'right',
|
|
175
|
+
width: 110,
|
|
176
|
+
valueFormatter: (value)=>value.toLocaleString()
|
|
177
|
+
},
|
|
178
|
+
{
|
|
179
|
+
field: 'refusals',
|
|
180
|
+
headerName: 'Refusals',
|
|
181
|
+
type: 'number',
|
|
182
|
+
align: 'right',
|
|
183
|
+
headerAlign: 'right',
|
|
184
|
+
width: 110,
|
|
185
|
+
valueFormatter: (value)=>value.toLocaleString()
|
|
186
|
+
},
|
|
187
|
+
{
|
|
188
|
+
field: 'mostly',
|
|
189
|
+
headerName: 'Mostly',
|
|
190
|
+
flex: 1,
|
|
191
|
+
minWidth: 160,
|
|
192
|
+
sortable: false,
|
|
193
|
+
valueGetter: (_value, row)=>topAiUsageKinds(row.byKind, 2).map((entry)=>entry.kind).join(', ') || '—'
|
|
194
|
+
},
|
|
195
|
+
listActionsColumn((row)=>/*#__PURE__*/ _jsx(ListRowActions, {
|
|
196
|
+
label: row.name,
|
|
197
|
+
quick: {
|
|
198
|
+
icon: mdiOpenInNew.path,
|
|
199
|
+
label: 'View member',
|
|
200
|
+
to: memberHref(row.uid)
|
|
201
|
+
},
|
|
202
|
+
items: []
|
|
203
|
+
}))
|
|
204
|
+
], [
|
|
205
|
+
memberHref
|
|
206
|
+
]);
|
|
207
|
+
return /*#__PURE__*/ _jsxs(Stack, {
|
|
208
|
+
spacing: 1.5,
|
|
209
|
+
children: [
|
|
210
|
+
/*#__PURE__*/ _jsx(Typography, {
|
|
211
|
+
variant: "body2",
|
|
212
|
+
color: "text.secondary",
|
|
213
|
+
children: `Who is generating what, per site: each member's ${name} credits for the month and their share of the workspace's spend. Open a member for the split by site and by kind.`
|
|
214
|
+
}),
|
|
215
|
+
/*#__PURE__*/ _jsxs(Stack, {
|
|
216
|
+
direction: "row",
|
|
217
|
+
spacing: 1,
|
|
218
|
+
sx: {
|
|
219
|
+
alignItems: 'center',
|
|
220
|
+
flexWrap: 'wrap',
|
|
221
|
+
rowGap: 1
|
|
222
|
+
},
|
|
223
|
+
children: [
|
|
224
|
+
/*#__PURE__*/ _jsx(TextField, {
|
|
225
|
+
select: true,
|
|
226
|
+
size: "small",
|
|
227
|
+
label: "Month",
|
|
228
|
+
value: usage.month,
|
|
229
|
+
onChange: (event)=>setMonth(event.target.value),
|
|
230
|
+
sx: {
|
|
231
|
+
minWidth: 180
|
|
232
|
+
},
|
|
233
|
+
children: usage.months.map((key)=>/*#__PURE__*/ _jsx(MenuItem, {
|
|
234
|
+
value: key,
|
|
235
|
+
children: aiUsageMonthLabel(key)
|
|
236
|
+
}, key))
|
|
237
|
+
}),
|
|
238
|
+
/*#__PURE__*/ _jsx(Button, {
|
|
239
|
+
size: "small",
|
|
240
|
+
disabled: exporting || usage.status !== 'ready' || rows.length === 0,
|
|
241
|
+
onClick: ()=>void handleExport(),
|
|
242
|
+
children: exporting ? 'Exporting…' : 'Export CSV'
|
|
243
|
+
}),
|
|
244
|
+
usage.data ? /*#__PURE__*/ _jsx(Typography, {
|
|
245
|
+
variant: "caption",
|
|
246
|
+
color: "text.secondary",
|
|
247
|
+
children: `${usage.data.orgCredits.toLocaleString()} credits drawn by the workspace in ${aiUsageMonthLabel(usage.month)}`
|
|
248
|
+
}) : null
|
|
249
|
+
]
|
|
250
|
+
}),
|
|
251
|
+
usage.status === 'refused' ? /*#__PURE__*/ _jsx(Alert, {
|
|
252
|
+
severity: "info",
|
|
253
|
+
children: 'Seeing who used AI credits requires the View billing permission.'
|
|
254
|
+
}) : usage.status === 'error' ? /*#__PURE__*/ _jsx(Alert, {
|
|
255
|
+
severity: "warning",
|
|
256
|
+
children: 'Could not read this month’s per-member usage — a failed read, not zero usage.'
|
|
257
|
+
}) : usage.status === 'loading' && !usage.data ? /*#__PURE__*/ _jsx(Typography, {
|
|
258
|
+
variant: "body2",
|
|
259
|
+
color: "text.secondary",
|
|
260
|
+
children: 'Loading…'
|
|
261
|
+
}) : rows.length === 0 ? /*#__PURE__*/ _jsx(Typography, {
|
|
262
|
+
variant: "body2",
|
|
263
|
+
color: "text.secondary",
|
|
264
|
+
children: `No ${name} usage attributed to a member in ${aiUsageMonthLabel(usage.month)}.`
|
|
265
|
+
}) : /*#__PURE__*/ _jsx(ListTable, {
|
|
266
|
+
rows: rows,
|
|
267
|
+
columns: columns,
|
|
268
|
+
getRowId: (row)=>row.uid,
|
|
269
|
+
rowHeight: TABLE_ROW_HEIGHT,
|
|
270
|
+
onOpen: (uid)=>router.push(memberHref(uid))
|
|
271
|
+
}, usage.month)
|
|
272
|
+
]
|
|
273
|
+
});
|
|
274
|
+
}
|
|
275
|
+
BillingAiTopUsersComponent.displayName = 'BillingAiTopUsersComponent';
|
|
276
|
+
/**
|
|
277
|
+
* The card on Billing → Usage, through the `orgBillingUsage` zone: its own
|
|
278
|
+
* band beneath the meters, full width, because it is a table of people rather
|
|
279
|
+
* than a gauge. Registered with `billing.view`, so a manager without it sees
|
|
280
|
+
* no card rather than a refusal.
|
|
281
|
+
*/ export function AiTopUsersCard(props) {
|
|
282
|
+
var _ref;
|
|
283
|
+
var _props_org;
|
|
284
|
+
return /*#__PURE__*/ _jsx("div", {
|
|
285
|
+
id: "ai-usage-by-member",
|
|
286
|
+
children: /*#__PURE__*/ _jsx(CardDisplay, {
|
|
287
|
+
header: 'Who is generating what',
|
|
288
|
+
help: pluginDocsHelp('billing', {
|
|
289
|
+
anchor: '#who-is-generating-what',
|
|
290
|
+
excerpt: 'Each member’s AI credits for a month, their share of the ' + 'workspace’s spend, requests and refusals — with a month picker ' + 'and a CSV export.'
|
|
291
|
+
}),
|
|
292
|
+
contentGutterX: true,
|
|
293
|
+
contentGutterY: true,
|
|
294
|
+
children: /*#__PURE__*/ _jsx(BillingAiTopUsersComponent, {
|
|
295
|
+
orgId: props.orgId,
|
|
296
|
+
orgSlug: (_ref = (_props_org = props.org) == null ? void 0 : _props_org.slug) != null ? _ref : ''
|
|
297
|
+
})
|
|
298
|
+
})
|
|
299
|
+
});
|
|
300
|
+
}
|
|
301
|
+
AiTopUsersCard.displayName = 'AiTopUsersCard';
|
|
302
|
+
export default BillingAiTopUsersComponent;
|
|
303
|
+
|
|
304
|
+
//# sourceMappingURL=billing-ai-top-users.component.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../../libs/plugins/ai/src/lib/components/billing-ai-top-users.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, countCsvDataRows } from '@aglyn/aglyn'\nimport { pluginDocsHelp } from '@aglyn/aglyn/app-utils/docs-help'\nimport { mdiOpenInNew } from '@aglyn/shared-data-mdi'\nimport { CardDisplay } from '@aglyn/shared-ui-jsx'\nimport {\n ListRowActions,\n ListTable,\n listActionsColumn,\n} from '@aglyn/shared-ui-jsx/components/list-table.component'\nimport { TABLE_ROW_HEIGHT } from '@aglyn/shared-ui-jsx/const/table-pagination'\nimport { useSnackbar } from '@aglyn/shared-ui-snackstack'\nimport { authorizedFetch } from '@aglyn/shared-util-http/authorized-token'\nimport { useUser } from '@aglyn/tenant-feature-instance'\nimport {\n Alert,\n Button,\n MenuItem,\n Stack,\n TextField,\n Typography,\n} from '@mui/material'\nimport type { GridColDef } from '@mui/x-data-grid'\nimport { buildRoute, Route } from '@aglyn/aglyn/app-utils/console-routes'\nimport { useRouter } from 'next/navigation'\nimport { useCallback, useMemo, useState } from 'react'\nimport { topAiUsageKinds } from '../model/ai-usage-by-user'\nimport { useOrgAiUsage } from './use-org-ai-usage'\nimport {\n AI_USAGE_EXPORT_ROWS_HEADER,\n aiUsageMonthLabel,\n formatAiUsageShare,\n type OrgAiUsageRowWire,\n} from '../usage/ai-usage-wire'\n\nexport interface BillingAiTopUsersProps {\n orgId: string | undefined\n /** The org's slug, for the links into each person's page. */\n orgSlug: string\n}\n\n/**\n * WHO IS GENERATING WHAT (AGL-2928) — the per-person table beneath the\n * credit meter on Billing → Usage.\n *\n * The meter above says how much of the pool the workspace has drawn; this\n * says who drew it. Each row is one member's month: credits, their share of\n * the workspace's spend, requests, and how often the gate refused them. A\n * month picker walks the retention window, and the file button hands the\n * same month to a spreadsheet through the streamed export.\n *\n * ## The file is checked, not trusted\n *\n * The route promises its row count in a header taken before the first row\n * is written. A stream that dies halfway yields a well-formed shorter file,\n * so a body with fewer rows than promised is refused rather than saved.\n *\n * The copy stays descriptive on purpose — who, how much, on which site — and\n * never characterizes what the numbers mean about a person.\n */\nexport function BillingAiTopUsersComponent(props: BillingAiTopUsersProps) {\n const { orgId, orgSlug } = props\n const { data: user } = useUser()\n const { enqueueSnackbar } = useSnackbar()\n const [month, setMonth] = useState<string | undefined>(undefined)\n const [exporting, setExporting] = useState(false)\n const usage = useOrgAiUsage(orgId, { month })\n const router = useRouter()\n const name = aiAddonName()\n\n const handleExport = useCallback(async () => {\n if (!orgId || exporting) return\n setExporting(true)\n try {\n const params = new URLSearchParams({ orgId, month: usage.month, format: 'csv' })\n const response = await authorizedFetch(\n user,\n `/api/ai/usage?${params.toString()}`,\n )\n if (!response.ok) {\n const failure = await response.json().catch(() => ({}))\n throw new Error(failure?.error ?? 'Export failed')\n }\n const text = await response.text()\n const promised = Number(response.headers.get(AI_USAGE_EXPORT_ROWS_HEADER) ?? '')\n const received = countCsvDataRows(text)\n if (Number.isFinite(promised) && received < promised) {\n enqueueSnackbar(\n `Export incomplete — ${received} of ${promised} rows arrived. ` +\n 'Nothing was saved; try again.',\n { variant: 'error' },\n )\n return\n }\n const url = URL.createObjectURL(new Blob([text], { type: 'text/csv' }))\n const anchor = document.createElement('a')\n anchor.href = url\n anchor.download = `ai-usage-${usage.month}.csv`\n anchor.click()\n URL.revokeObjectURL(url)\n } catch (error) {\n enqueueSnackbar(error instanceof Error ? error.message : 'Export failed', {\n variant: 'error',\n })\n } finally {\n setExporting(false)\n }\n }, [orgId, exporting, usage.month, user, enqueueSnackbar])\n\n const rows = usage.data?.rows ?? []\n const memberHref = useCallback(\n (uid: string) => buildRoute(Route.MANAGE_TEAM_MEMBER, { orgSlug, uid }),\n [orgSlug],\n )\n\n /*\n * One row per member, and the whole month is in hand, so the grid pages,\n * sorts and searches it itself. The row opens the member's page, which is\n * where the split by site and by kind lives.\n */\n const columns = useMemo<GridColDef<OrgAiUsageRowWire>[]>(\n () => [\n {\n field: 'name',\n headerName: 'Member',\n flex: 1,\n minWidth: 220,\n renderCell: ({ row }) => (\n <Stack sx={{ minWidth: 0 }}>\n <Typography variant=\"body2\" noWrap title={row.name}>\n {row.name}\n </Typography>\n {row.email && row.email !== row.name ? (\n <Typography variant=\"caption\" color=\"text.secondary\" noWrap>\n {row.email}\n </Typography>\n ) : null}\n </Stack>\n ),\n },\n {\n field: 'credits',\n headerName: 'Credits',\n type: 'number',\n align: 'right',\n headerAlign: 'right',\n width: 110,\n valueFormatter: (value: number) => value.toLocaleString(),\n },\n {\n field: 'share',\n headerName: 'Share',\n type: 'number',\n align: 'right',\n headerAlign: 'right',\n width: 90,\n valueFormatter: (value: number) => formatAiUsageShare(value),\n },\n {\n field: 'requests',\n headerName: 'Requests',\n type: 'number',\n align: 'right',\n headerAlign: 'right',\n width: 110,\n valueFormatter: (value: number) => value.toLocaleString(),\n },\n {\n field: 'refusals',\n headerName: 'Refusals',\n type: 'number',\n align: 'right',\n headerAlign: 'right',\n width: 110,\n valueFormatter: (value: number) => value.toLocaleString(),\n },\n {\n field: 'mostly',\n headerName: 'Mostly',\n flex: 1,\n minWidth: 160,\n sortable: false,\n valueGetter: (_value, row) =>\n topAiUsageKinds(row.byKind, 2)\n .map((entry) => entry.kind)\n .join(', ') || '—',\n },\n listActionsColumn((row: OrgAiUsageRowWire) => (\n <ListRowActions\n label={row.name}\n quick={{\n icon: mdiOpenInNew.path,\n label: 'View member',\n to: memberHref(row.uid),\n }}\n items={[]}\n />\n )),\n ],\n [memberHref],\n )\n\n return (\n <Stack spacing={1.5}>\n <Typography variant=\"body2\" color=\"text.secondary\">\n {`Who is generating what, per site: each member's ${name} credits for the month and their share of the workspace's spend. Open a member for the split by site and by kind.`}\n </Typography>\n <Stack direction=\"row\" spacing={1} sx={{ alignItems: 'center', flexWrap: 'wrap', rowGap: 1 }}>\n <TextField\n select\n size=\"small\"\n label=\"Month\"\n value={usage.month}\n onChange={(event) => setMonth(event.target.value)}\n sx={{ minWidth: 180 }}\n >\n {usage.months.map((key) => (\n <MenuItem key={key} value={key}>\n {aiUsageMonthLabel(key)}\n </MenuItem>\n ))}\n </TextField>\n <Button\n size=\"small\"\n disabled={exporting || usage.status !== 'ready' || rows.length === 0}\n onClick={() => void handleExport()}\n >\n {exporting ? 'Exporting…' : 'Export CSV'}\n </Button>\n {usage.data ? (\n <Typography variant=\"caption\" color=\"text.secondary\">\n {`${usage.data.orgCredits.toLocaleString()} credits drawn by the workspace in ${aiUsageMonthLabel(usage.month)}`}\n </Typography>\n ) : null}\n </Stack>\n {usage.status === 'refused' ? (\n <Alert severity=\"info\">\n {'Seeing who used AI credits requires the View billing permission.'}\n </Alert>\n ) : usage.status === 'error' ? (\n <Alert severity=\"warning\">\n {'Could not read this month’s per-member usage — a failed read, not zero usage.'}\n </Alert>\n ) : usage.status === 'loading' && !usage.data ? (\n <Typography variant=\"body2\" color=\"text.secondary\">\n {'Loading…'}\n </Typography>\n ) : rows.length === 0 ? (\n <Typography variant=\"body2\" color=\"text.secondary\">\n {`No ${name} usage attributed to a member in ${aiUsageMonthLabel(usage.month)}.`}\n </Typography>\n ) : (\n <ListTable\n // Another month is another list: it opens on its first page.\n key={usage.month}\n rows={rows}\n columns={columns}\n getRowId={(row: OrgAiUsageRowWire) => row.uid}\n rowHeight={TABLE_ROW_HEIGHT}\n onOpen={(uid) => router.push(memberHref(uid))}\n />\n )}\n </Stack>\n )\n}\nBillingAiTopUsersComponent.displayName = 'BillingAiTopUsersComponent'\n\n/**\n * The card on Billing → Usage, through the `orgBillingUsage` zone: its own\n * band beneath the meters, full width, because it is a table of people rather\n * than a gauge. Registered with `billing.view`, so a manager without it sees\n * no card rather than a refusal.\n */\nexport function AiTopUsersCard(props: { orgId?: string; org?: { slug?: string } | null }) {\n return (\n <div id=\"ai-usage-by-member\">\n <CardDisplay\n header={'Who is generating what'}\n help={pluginDocsHelp('billing', {\n anchor: '#who-is-generating-what',\n excerpt:\n 'Each member’s AI credits for a month, their share of the ' +\n 'workspace’s spend, requests and refusals — with a month picker ' +\n 'and a CSV export.',\n })}\n contentGutterX\n contentGutterY\n >\n <BillingAiTopUsersComponent orgId={props.orgId} orgSlug={props.org?.slug ?? ''} />\n </CardDisplay>\n </div>\n )\n}\nAiTopUsersCard.displayName = 'AiTopUsersCard'\n\nexport default BillingAiTopUsersComponent\n"],"names":["aiAddonName","countCsvDataRows","pluginDocsHelp","mdiOpenInNew","CardDisplay","ListRowActions","ListTable","listActionsColumn","TABLE_ROW_HEIGHT","useSnackbar","authorizedFetch","useUser","Alert","Button","MenuItem","Stack","TextField","Typography","buildRoute","Route","useRouter","useCallback","useMemo","useState","topAiUsageKinds","useOrgAiUsage","AI_USAGE_EXPORT_ROWS_HEADER","aiUsageMonthLabel","formatAiUsageShare","BillingAiTopUsersComponent","props","usage","orgId","orgSlug","data","user","enqueueSnackbar","month","setMonth","undefined","exporting","setExporting","router","name","handleExport","response","params","URLSearchParams","format","toString","ok","failure","json","catch","Error","error","text","promised","Number","headers","get","received","isFinite","variant","url","URL","createObjectURL","Blob","type","anchor","document","createElement","href","download","click","revokeObjectURL","message","rows","memberHref","uid","MANAGE_TEAM_MEMBER","columns","field","headerName","flex","minWidth","renderCell","row","sx","noWrap","title","email","color","align","headerAlign","width","valueFormatter","value","toLocaleString","sortable","valueGetter","_value","byKind","map","entry","kind","join","label","quick","icon","path","to","items","spacing","direction","alignItems","flexWrap","rowGap","select","size","onChange","event","target","months","key","disabled","status","length","onClick","orgCredits","severity","getRowId","rowHeight","onOpen","push","displayName","AiTopUsersCard","div","id","header","help","excerpt","contentGutterX","contentGutterY","org","slug"],"mappings":"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"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2026 Aglyn LLC
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
export interface BillingAssistOverageCardProps {
|
|
18
|
+
orgId?: string | null;
|
|
19
|
+
/** billing.manage: the switch acts; view-only otherwise. */
|
|
20
|
+
canManage: boolean;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* The org's own controls on AI assist spend: the hard cap at the band
|
|
24
|
+
* (AGL-2653) and the dollar ceiling on overage (AGL-2898).
|
|
25
|
+
*
|
|
26
|
+
* ## What this card is
|
|
27
|
+
*
|
|
28
|
+
* Credits past a plan's included assist band are SOLD by default, at the
|
|
29
|
+
* plan's per-1,000 rate, the way storage past its band bills by default. This
|
|
30
|
+
* card offers the two controls a customer has over that: a switch that makes
|
|
31
|
+
* the band a wall, so the assistant refuses there and nothing past it is ever
|
|
32
|
+
* billed; and, with the switch off, a monthly ceiling in dollars on the
|
|
33
|
+
* overage the org will buy before the assistant stops. Both are optional and
|
|
34
|
+
* unset unless chosen — the storage cap's siblings, for the same reason a
|
|
35
|
+
* ceiling on metered spend is the END USER's control, offered rather than
|
|
36
|
+
* imposed.
|
|
37
|
+
*
|
|
38
|
+
* ## Why a switch AND a number
|
|
39
|
+
*
|
|
40
|
+
* The switch answers "sell past the band at all?" and needs no figure: the
|
|
41
|
+
* band is the plan's, and a second band here would drift from it. The
|
|
42
|
+
* ceiling answers "and if so, how much?", which is a figure only the customer
|
|
43
|
+
* can name — it is a bound on THEIR invoice, not a quantity the plan sold.
|
|
44
|
+
* The ceiling is offered only while the switch is off, because past a wall
|
|
45
|
+
* there is no overage to bound.
|
|
46
|
+
*
|
|
47
|
+
* ## Why the switch is edited here and enforced there
|
|
48
|
+
*
|
|
49
|
+
* The route owns every refusal: a plan that sells no overage, a value that
|
|
50
|
+
* is not a boolean, a missing permission. This card sends the boolean and
|
|
51
|
+
* renders the route's own answer rather than pre-validating against constants
|
|
52
|
+
* that would then be a second source of truth. The rate it quotes arrives on
|
|
53
|
+
* the same payload, so what the card says the overage costs is what the
|
|
54
|
+
* invoice bills.
|
|
55
|
+
*
|
|
56
|
+
* ## Why turning it OFF is confirmed and turning it ON is not
|
|
57
|
+
*
|
|
58
|
+
* Off is the direction that can raise a bill, so it asks; on never raises
|
|
59
|
+
* one, so it is a plain click. Off is also always available, on any plan and
|
|
60
|
+
* from any state — an org that wants the sale back must not have to argue
|
|
61
|
+
* with a precondition.
|
|
62
|
+
*/
|
|
63
|
+
/**
|
|
64
|
+
* The card as the Billing → Usage page's plugin band mounts it (AGL-2939):
|
|
65
|
+
* the overage controls under the heading and help the page used to draw
|
|
66
|
+
* around them.
|
|
67
|
+
*/
|
|
68
|
+
export default function BillingAssistOverageCard(props: BillingAssistOverageCardProps): import("react").JSX.Element;
|
|
69
|
+
export declare function BillingAssistOverageControls({ orgId, canManage, }: BillingAssistOverageCardProps): import("react").JSX.Element;
|