@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 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../../libs/plugins/ai/src/lib/components/ai-allotment-editor.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 {\n Alert,\n Button,\n Checkbox,\n CircularProgress,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n FormControlLabel,\n FormGroup,\n FormHelperText,\n FormLabel,\n Radio,\n RadioGroup,\n Stack,\n TextField,\n Typography,\n} from '@mui/material'\nimport { useEffect, useState } from 'react'\nimport { AI_ALLOTMENT_MAX_CREDITS, type AiAllotmentMode } from '../model/ai-allotments'\n\nexport interface AiAllotmentValue {\n credits: number | null\n mode: AiAllotmentMode\n models: string[] | null\n}\n\nexport interface AiAllotmentEditorProps {\n open: boolean\n title: string\n /** One sentence under the title: whose allotment, and what it bounds. */\n description?: string\n /** The allotment as it stands, or `null` for a new one. */\n initial: AiAllotmentValue | null\n /** The models an allowlist may name, from the allotments route. */\n models: ReadonlyArray<{ id: string; label: string }>\n /** The org-wide restriction: models only, no credits and no mode. */\n modelsOnly?: boolean\n /** The workspace's pool, for the note that an allotment never grants past it. */\n poolLimit?: number | null\n busy?: boolean\n error?: string | null\n onClose: () => void\n onSave: (value: AiAllotmentValue) => void\n /** Offered when the allotment exists. */\n onRemove?: () => void\n}\n\n/**\n * THE ALLOTMENT EDITOR (AGL-2942): credits a month, hard or soft, and an\n * optional model allowlist — one dialog for a member, a collaborator, a\n * site, a bulk selection and the org-wide restriction, so the four places a\n * manager sets an allotment ask the same questions in the same words.\n */\nexport function AiAllotmentEditor(props: AiAllotmentEditorProps) {\n const { open, initial, models, modelsOnly, poolLimit, busy, error } = props\n const [credits, setCredits] = useState('')\n const [mode, setMode] = useState<AiAllotmentMode>('hard')\n const [allowed, setAllowed] = useState<string[]>([])\n const [invalid, setInvalid] = useState<string | null>(null)\n\n // Reset from the allotment each time the dialog opens, keyed on the open\n // flag and the values rather than on the object's identity.\n const initialCredits = initial?.credits ?? null\n const initialMode = initial?.mode ?? 'hard'\n const initialModels = (initial?.models ?? []).join('\\n')\n useEffect(() => {\n if (!open) return\n setCredits(initialCredits === null ? '' : String(initialCredits))\n setMode(initialMode)\n setAllowed(initialModels ? initialModels.split('\\n') : [])\n setInvalid(null)\n }, [open, initialCredits, initialMode, initialModels])\n\n const parsedCredits = credits.trim() === '' ? null : Number(credits)\n const save = () => {\n if (!modelsOnly) {\n if (\n parsedCredits !== null &&\n (!Number.isInteger(parsedCredits) || parsedCredits < 1 || parsedCredits > AI_ALLOTMENT_MAX_CREDITS)\n ) {\n setInvalid('Enter a whole number of credits, 1 or more.')\n return\n }\n if (parsedCredits === null && !allowed.length) {\n setInvalid('Set credits, choose models, or remove the allotment.')\n return\n }\n }\n setInvalid(null)\n props.onSave({\n credits: modelsOnly ? null : parsedCredits,\n mode,\n models: allowed.length ? allowed : null,\n })\n }\n const toggle = (id: string) =>\n setAllowed((current) =>\n current.includes(id) ? current.filter((entry) => entry !== id) : [...current, id],\n )\n\n return (\n <Dialog open={open} onClose={busy ? undefined : props.onClose} maxWidth=\"xs\" fullWidth>\n <DialogTitle>{props.title}</DialogTitle>\n <DialogContent sx={{ display: 'flex', flexDirection: 'column', gap: 2, pt: 1 }}>\n {props.description ? (\n <Typography variant=\"body2\" color=\"text.secondary\">\n {props.description}\n </Typography>\n ) : null}\n {modelsOnly ? null : (\n <>\n <TextField\n label=\"Credits a month\"\n type=\"number\"\n size=\"small\"\n value={credits}\n onChange={(event) => setCredits(event.target.value)}\n disabled={busy}\n slotProps={{ htmlInput: { min: 1, step: 100 } }}\n helperText={\n poolLimit && parsedCredits && parsedCredits > poolLimit\n ? `Larger than the workspace's ${poolLimit.toLocaleString()} credits — the workspace's pool still stops first.`\n : 'Counted from the first of the month (UTC). Leave empty to limit models only.'\n }\n />\n <div>\n <FormLabel id=\"ai-allotment-mode\">{'At the allotment'}</FormLabel>\n <RadioGroup\n aria-labelledby=\"ai-allotment-mode\"\n value={mode}\n onChange={(event) => setMode(event.target.value as AiAllotmentMode)}\n >\n <FormControlLabel\n value=\"hard\"\n control={<Radio size=\"small\" />}\n disabled={busy}\n label=\"Stop AI requests (hard)\"\n />\n <FormControlLabel\n value=\"soft\"\n control={<Radio size=\"small\" />}\n disabled={busy}\n label=\"Keep going and alert at 80% and 100% (soft)\"\n />\n </RadioGroup>\n </div>\n </>\n )}\n {models.length ? (\n <div>\n <FormLabel component=\"legend\">\n {modelsOnly ? 'Models the organization may use' : 'Limit to these models (optional)'}\n </FormLabel>\n <FormGroup>\n {models.map((model) => (\n <FormControlLabel\n key={model.id}\n control={\n <Checkbox\n size=\"small\"\n checked={allowed.includes(model.id)}\n onChange={() => toggle(model.id)}\n disabled={busy}\n />\n }\n label={model.label}\n />\n ))}\n </FormGroup>\n <FormHelperText>\n {modelsOnly\n ? 'None checked means no restriction. Auto keeps choosing among the checked models.'\n : 'None checked means every model the plan offers. Auto keeps choosing among the checked models.'}\n </FormHelperText>\n </div>\n ) : null}\n {invalid || error ? <Alert severity=\"error\">{invalid ?? error}</Alert> : null}\n </DialogContent>\n <DialogActions>\n {props.onRemove ? (\n <Button color=\"error\" disabled={busy} onClick={props.onRemove} sx={{ mr: 'auto' }}>\n {modelsOnly ? 'Clear restriction' : 'Remove allotment'}\n </Button>\n ) : null}\n <Button disabled={busy} onClick={props.onClose}>\n {'Cancel'}\n </Button>\n <Stack direction=\"row\" spacing={1} sx={{ alignItems: 'center' }}>\n <Button\n variant=\"contained\"\n disabled={busy}\n onClick={save}\n startIcon={busy ? <CircularProgress size={16} /> : undefined}\n >\n {busy ? 'Saving…' : 'Save'}\n </Button>\n </Stack>\n </DialogActions>\n </Dialog>\n )\n}\nAiAllotmentEditor.displayName = 'AiAllotmentEditor'\n\nexport default AiAllotmentEditor\n"],"names":["Alert","Button","Checkbox","CircularProgress","Dialog","DialogActions","DialogContent","DialogTitle","FormControlLabel","FormGroup","FormHelperText","FormLabel","Radio","RadioGroup","Stack","TextField","Typography","useEffect","useState","AI_ALLOTMENT_MAX_CREDITS","AiAllotmentEditor","props","open","initial","models","modelsOnly","poolLimit","busy","error","credits","setCredits","mode","setMode","allowed","setAllowed","invalid","setInvalid","initialCredits","initialMode","initialModels","join","String","split","parsedCredits","trim","Number","save","isInteger","length","onSave","toggle","id","current","includes","filter","entry","onClose","undefined","maxWidth","fullWidth","title","sx","display","flexDirection","gap","pt","description","variant","color","label","type","size","value","onChange","event","target","disabled","slotProps","htmlInput","min","step","helperText","toLocaleString","div","aria-labelledby","control","component","map","model","checked","severity","onRemove","onClick","mr","direction","spacing","alignItems","startIcon","displayName"],"mappings":"AAAA;;;;;;;;;;;;;;;CAeC,GACD;;AAEA,SACEA,KAAK,EACLC,MAAM,EACNC,QAAQ,EACRC,gBAAgB,EAChBC,MAAM,EACNC,aAAa,EACbC,aAAa,EACbC,WAAW,EACXC,gBAAgB,EAChBC,SAAS,EACTC,cAAc,EACdC,SAAS,EACTC,KAAK,EACLC,UAAU,EACVC,KAAK,EACLC,SAAS,EACTC,UAAU,QACL,gBAAe;AACtB,SAASC,SAAS,EAAEC,QAAQ,QAAQ,QAAO;AAC3C,SAASC,wBAAwB,QAA8B,4BAAwB;AA6BvF;;;;;CAKC,GACD,OAAO,SAASC,kBAAkBC,KAA6B;;IAC7D,MAAM,EAAEC,IAAI,EAAEC,OAAO,EAAEC,MAAM,EAAEC,UAAU,EAAEC,SAAS,EAAEC,IAAI,EAAEC,KAAK,EAAE,GAAGP;IACtE,MAAM,CAACQ,SAASC,WAAW,GAAGZ,SAAS;IACvC,MAAM,CAACa,MAAMC,QAAQ,GAAGd,SAA0B;IAClD,MAAM,CAACe,SAASC,WAAW,GAAGhB,SAAmB,EAAE;IACnD,MAAM,CAACiB,SAASC,WAAW,GAAGlB,SAAwB;IAEtD,yEAAyE;IACzE,4DAA4D;IAC5D,MAAMmB,yBAAiBd,2BAAAA,QAASM,OAAO,mBAAI;IAC3C,MAAMS,uBAAcf,2BAAAA,QAASQ,IAAI,oBAAI;IACrC,MAAMQ,gBAAgB,UAAChB,2BAAAA,QAASC,MAAM,oBAAI,EAAE,EAAEgB,IAAI,CAAC;IACnDvB,UAAU;QACR,IAAI,CAACK,MAAM;QACXQ,WAAWO,mBAAmB,OAAO,KAAKI,OAAOJ;QACjDL,QAAQM;QACRJ,WAAWK,gBAAgBA,cAAcG,KAAK,CAAC,QAAQ,EAAE;QACzDN,WAAW;IACb,GAAG;QAACd;QAAMe;QAAgBC;QAAaC;KAAc;IAErD,MAAMI,gBAAgBd,QAAQe,IAAI,OAAO,KAAK,OAAOC,OAAOhB;IAC5D,MAAMiB,OAAO;QACX,IAAI,CAACrB,YAAY;YACf,IACEkB,kBAAkB,QACjB,CAAA,CAACE,OAAOE,SAAS,CAACJ,kBAAkBA,gBAAgB,KAAKA,gBAAgBxB,wBAAuB,GACjG;gBACAiB,WAAW;gBACX;YACF;YACA,IAAIO,kBAAkB,QAAQ,CAACV,QAAQe,MAAM,EAAE;gBAC7CZ,WAAW;gBACX;YACF;QACF;QACAA,WAAW;QACXf,MAAM4B,MAAM,CAAC;YACXpB,SAASJ,aAAa,OAAOkB;YAC7BZ;YACAP,QAAQS,QAAQe,MAAM,GAAGf,UAAU;QACrC;IACF;IACA,MAAMiB,SAAS,CAACC,KACdjB,WAAW,CAACkB,UACVA,QAAQC,QAAQ,CAACF,MAAMC,QAAQE,MAAM,CAAC,CAACC,QAAUA,UAAUJ,MAAM;mBAAIC;gBAASD;aAAG;IAGrF,qBACE,MAAC/C;QAAOkB,MAAMA;QAAMkC,SAAS7B,OAAO8B,YAAYpC,MAAMmC,OAAO;QAAEE,UAAS;QAAKC,SAAS;;0BACpF,KAACpD;0BAAac,MAAMuC,KAAK;;0BACzB,MAACtD;gBAAcuD,IAAI;oBAAEC,SAAS;oBAAQC,eAAe;oBAAUC,KAAK;oBAAGC,IAAI;gBAAE;;oBAC1E5C,MAAM6C,WAAW,iBAChB,KAAClD;wBAAWmD,SAAQ;wBAAQC,OAAM;kCAC/B/C,MAAM6C,WAAW;yBAElB;oBACHzC,aAAa,qBACZ;;0CACE,KAACV;gCACCsD,OAAM;gCACNC,MAAK;gCACLC,MAAK;gCACLC,OAAO3C;gCACP4C,UAAU,CAACC,QAAU5C,WAAW4C,MAAMC,MAAM,CAACH,KAAK;gCAClDI,UAAUjD;gCACVkD,WAAW;oCAAEC,WAAW;wCAAEC,KAAK;wCAAGC,MAAM;oCAAI;gCAAE;gCAC9CC,YACEvD,aAAaiB,iBAAiBA,gBAAgBjB,YAC1C,CAAC,4BAA4B,EAAEA,UAAUwD,cAAc,GAAG,kDAAkD,CAAC,GAC7G;;0CAGR,MAACC;;kDACC,KAACxE;wCAAUwC,IAAG;kDAAqB;;kDACnC,MAACtC;wCACCuE,mBAAgB;wCAChBZ,OAAOzC;wCACP0C,UAAU,CAACC,QAAU1C,QAAQ0C,MAAMC,MAAM,CAACH,KAAK;;0DAE/C,KAAChE;gDACCgE,OAAM;gDACNa,uBAAS,KAACzE;oDAAM2D,MAAK;;gDACrBK,UAAUjD;gDACV0C,OAAM;;0DAER,KAAC7D;gDACCgE,OAAM;gDACNa,uBAAS,KAACzE;oDAAM2D,MAAK;;gDACrBK,UAAUjD;gDACV0C,OAAM;;;;;;;;oBAMf7C,OAAOwB,MAAM,iBACZ,MAACmC;;0CACC,KAACxE;gCAAU2E,WAAU;0CAClB7D,aAAa,oCAAoC;;0CAEpD,KAAChB;0CACEe,OAAO+D,GAAG,CAAC,CAACC,sBACX,KAAChF;wCAEC6E,uBACE,KAACnF;4CACCqE,MAAK;4CACLkB,SAASxD,QAAQoB,QAAQ,CAACmC,MAAMrC,EAAE;4CAClCsB,UAAU,IAAMvB,OAAOsC,MAAMrC,EAAE;4CAC/ByB,UAAUjD;;wCAGd0C,OAAOmB,MAAMnB,KAAK;uCATbmB,MAAMrC,EAAE;;0CAanB,KAACzC;0CACEe,aACG,qFACA;;;yBAGN;oBACHU,WAAWP,sBAAQ,KAAC5B;wBAAM0F,UAAS;kCAASvD,kBAAAA,UAAWP;yBAAiB;;;0BAE3E,MAACvB;;oBACEgB,MAAMsE,QAAQ,iBACb,KAAC1F;wBAAOmE,OAAM;wBAAQQ,UAAUjD;wBAAMiE,SAASvE,MAAMsE,QAAQ;wBAAE9B,IAAI;4BAAEgC,IAAI;wBAAO;kCAC7EpE,aAAa,sBAAsB;yBAEpC;kCACJ,KAACxB;wBAAO2E,UAAUjD;wBAAMiE,SAASvE,MAAMmC,OAAO;kCAC3C;;kCAEH,KAAC1C;wBAAMgF,WAAU;wBAAMC,SAAS;wBAAGlC,IAAI;4BAAEmC,YAAY;wBAAS;kCAC5D,cAAA,KAAC/F;4BACCkE,SAAQ;4BACRS,UAAUjD;4BACViE,SAAS9C;4BACTmD,WAAWtE,qBAAO,KAACxB;gCAAiBoE,MAAM;iCAASd;sCAElD9B,OAAO,YAAY;;;;;;;AAMhC;AACAP,kBAAkB8E,WAAW,GAAG;AAEhC,eAAe9E,kBAAiB"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { NodeSchema } from '@aglyn/aglyn';
|
|
2
|
+
/**
|
|
3
|
+
* The besigner doors the copy assistant's provider opens (AGL-89, AGL-169),
|
|
4
|
+
* read by this plugin's own besigner controls (AGL-2984). A refused
|
|
5
|
+
* permission publishes no callback, so the control for it is not drawn.
|
|
6
|
+
*/
|
|
7
|
+
export interface AiAssistActions {
|
|
8
|
+
/** Opens the instruction dialog that rewrites an element's copy. */
|
|
9
|
+
onRewrite?: (node: NodeSchema<any>) => void;
|
|
10
|
+
/** Opens the prompt dialog for a section grafted into the canvas root. */
|
|
11
|
+
onGenerateSection?: () => void;
|
|
12
|
+
}
|
|
13
|
+
export declare const AiAssistActionsContext: import("react").Context<AiAssistActions>;
|
|
@@ -0,0 +1,21 @@
|
|
|
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 { createContext } from "react";
|
|
18
|
+
export const AiAssistActionsContext = createContext({});
|
|
19
|
+
AiAssistActionsContext.displayName = 'AiAssistActionsContext';
|
|
20
|
+
|
|
21
|
+
//# sourceMappingURL=ai-assist-actions-context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../../libs/plugins/ai/src/lib/components/ai-assist-actions-context.ts"],"sourcesContent":["/**\n * @license\n * Copyright 2026 Aglyn LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n'use client'\n\nimport type { NodeSchema } from '@aglyn/aglyn'\nimport { createContext } from 'react'\n\n/**\n * The besigner doors the copy assistant's provider opens (AGL-89, AGL-169),\n * read by this plugin's own besigner controls (AGL-2984). A refused\n * permission publishes no callback, so the control for it is not drawn.\n */\nexport interface AiAssistActions {\n /** Opens the instruction dialog that rewrites an element's copy. */\n onRewrite?: (node: NodeSchema<any>) => void\n /** Opens the prompt dialog for a section grafted into the canvas root. */\n onGenerateSection?: () => void\n}\n\nexport const AiAssistActionsContext = createContext<AiAssistActions>({})\nAiAssistActionsContext.displayName = 'AiAssistActionsContext'\n"],"names":["createContext","AiAssistActionsContext","displayName"],"mappings":"AAAA;;;;;;;;;;;;;;;CAeC,GACD;AAGA,SAASA,aAAa,QAAQ,QAAO;AAcrC,OAAO,MAAMC,yBAAyBD,cAA+B,CAAC,GAAE;AACxEC,uBAAuBC,WAAW,GAAG"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
export interface AiAssistProviderProps {
|
|
2
|
+
/** Org billing doc for the entitlement gate (mounted by the shell). */
|
|
3
|
+
org?: unknown;
|
|
4
|
+
/**
|
|
5
|
+
* True once `org` is a trustworthy answer (AGL-1380). The shell mounts
|
|
6
|
+
* this provider above the whole console route tree, so it cannot hold its
|
|
7
|
+
* render until the billing doc settles the way the plugin-page route does
|
|
8
|
+
* — and an undefined `org` is not "unknown" to `checkEntitlement`, it is
|
|
9
|
+
* the free tier. Without this flag the gates below told a Pro org that AI
|
|
10
|
+
* assist is not on its plan for as long as the read was in flight.
|
|
11
|
+
*/
|
|
12
|
+
orgReady?: boolean;
|
|
13
|
+
/**
|
|
14
|
+
* The org every assist call is metered against (AGL-2073). The route no
|
|
15
|
+
* longer resolves it from the signed-in user — a user with one paid org was
|
|
16
|
+
* getting assist on all of their free ones, and their spend was landing on
|
|
17
|
+
* whichever org the server happened to resolve.
|
|
18
|
+
*/
|
|
19
|
+
orgId?: string;
|
|
20
|
+
/**
|
|
21
|
+
* The site the canvas belongs to (AGL-2927), sent with every assist call
|
|
22
|
+
* so the door can decide a site collaborator's permission on THAT site.
|
|
23
|
+
* Null off a host route, where there is no canvas to assist on.
|
|
24
|
+
*/
|
|
25
|
+
hostId?: string | null;
|
|
26
|
+
/**
|
|
27
|
+
* The reader's AI verdict, resolved by the shell (AGL-2927). The gates
|
|
28
|
+
* below HOLD until `loaded` — a door opened on a pending answer would
|
|
29
|
+
* spend the workspace's credits on a permission nobody has confirmed —
|
|
30
|
+
* and a refused key removes its callback from the context, so the
|
|
31
|
+
* designer draws no control for it. Omitted, the answer is pending.
|
|
32
|
+
*/
|
|
33
|
+
aiPermissions?: {
|
|
34
|
+
loaded: boolean;
|
|
35
|
+
use: boolean;
|
|
36
|
+
generate: boolean;
|
|
37
|
+
};
|
|
38
|
+
children?: JSX.Children;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Console-side AI copy assist (AGL-89): provides the designer's "Rewrite
|
|
42
|
+
* with AI" callback, hosts the instruction dialog, and calls the assist API
|
|
43
|
+
* (which 501-degrades when no AI provider is configured). The commit
|
|
44
|
+
* spreads the node's current props — `updateNodeProps` REPLACES the props
|
|
45
|
+
* object — and clears any stale rich-text `html` so the new text renders.
|
|
46
|
+
*/
|
|
47
|
+
export declare function AiAssistProvider(props: AiAssistProviderProps): import("react").JSX.Element;
|
|
48
|
+
export declare namespace AiAssistProvider {
|
|
49
|
+
var displayName: string;
|
|
50
|
+
}
|
|
51
|
+
export default AiAssistProvider;
|
|
@@ -0,0 +1,519 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2026 Aglyn LLC
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/ 'use client';
|
|
17
|
+
import { _ as _extends } from "@swc/helpers/_/_extends";
|
|
18
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
19
|
+
import * as Aglyn from "@aglyn/aglyn";
|
|
20
|
+
import { checkEntitlement, lockdownRefusalText, parseLockdownRefusal } from "@aglyn/aglyn";
|
|
21
|
+
import { marketplaceDefinitionToNested } from "@aglyn/aglyn/app-utils/node-definition-sanitizer";
|
|
22
|
+
import { AiAssistActionsContext } from "./ai-assist-actions-context.js";
|
|
23
|
+
import { useSnackbar } from "@aglyn/shared-ui-snackstack";
|
|
24
|
+
import { Button, CircularProgress, Dialog, DialogActions, DialogContent, DialogTitle, MenuItem, TextField, Typography } from "@mui/material";
|
|
25
|
+
import { useCallback, useMemo, useState } from "react";
|
|
26
|
+
import { useUser } from "@aglyn/tenant-feature-instance";
|
|
27
|
+
import { authorizedFetch } from "@aglyn/shared-util-http/authorized-token";
|
|
28
|
+
import { AiModelSelector } from "./ai-model-selector.component.js";
|
|
29
|
+
import { AiUsageStrip } from "./ai-usage-strip.component.js";
|
|
30
|
+
import { useAiModelChoice } from "./use-ai-model-choice.js";
|
|
31
|
+
import { usePublishAiUsageMeter } from "./use-ai-usage-meter.js";
|
|
32
|
+
const PERMISSIONS_PENDING = 'Checking your permissions — try again in a moment';
|
|
33
|
+
const AI_USE_REFUSED = 'Your role does not include AI assistance — ask an organization admin';
|
|
34
|
+
const AI_GENERATE_REFUSED = 'Your role does not include AI generation — ask an organization admin';
|
|
35
|
+
/**
|
|
36
|
+
* Console-side AI copy assist (AGL-89): provides the designer's "Rewrite
|
|
37
|
+
* with AI" callback, hosts the instruction dialog, and calls the assist API
|
|
38
|
+
* (which 501-degrades when no AI provider is configured). The commit
|
|
39
|
+
* spreads the node's current props — `updateNodeProps` REPLACES the props
|
|
40
|
+
* object — and clears any stale rich-text `html` so the new text renders.
|
|
41
|
+
*/ export function AiAssistProvider(props) {
|
|
42
|
+
var _props_hostId, _ref;
|
|
43
|
+
var _textTargets_;
|
|
44
|
+
const org = props.org;
|
|
45
|
+
const orgReady = props.orgReady;
|
|
46
|
+
const orgId = props.orgId;
|
|
47
|
+
const hostId = (_props_hostId = props.hostId) != null ? _props_hostId : null;
|
|
48
|
+
const aiPermissions = props.aiPermissions;
|
|
49
|
+
const { children } = props;
|
|
50
|
+
const { enqueueSnackbar } = useSnackbar();
|
|
51
|
+
const { data: user } = useUser();
|
|
52
|
+
const [node, setNode] = useState(null);
|
|
53
|
+
const [instruction, setInstruction] = useState('');
|
|
54
|
+
// Rewrite target (AGL-130): 'children' for text-editable elements, or
|
|
55
|
+
// any text attribute the element's schema declares (alt text, labels…).
|
|
56
|
+
const [targetProp, setTargetProp] = useState('children');
|
|
57
|
+
const [busy, setBusy] = useState(false);
|
|
58
|
+
// Generate section (AGL-169).
|
|
59
|
+
const [sectionOpen, setSectionOpen] = useState(false);
|
|
60
|
+
const [sectionPrompt, setSectionPrompt] = useState('');
|
|
61
|
+
// The model switch and the usage strip in both dialogs (AGL-2942). Each
|
|
62
|
+
// dialog remembers its own pick; one envelope store serves both strips
|
|
63
|
+
// and the assistant panel's.
|
|
64
|
+
const copyModel = useAiModelChoice({
|
|
65
|
+
orgId,
|
|
66
|
+
hostId,
|
|
67
|
+
surface: 'copy',
|
|
68
|
+
kind: 'copy.element'
|
|
69
|
+
});
|
|
70
|
+
const sectionModel = useAiModelChoice({
|
|
71
|
+
orgId,
|
|
72
|
+
hostId,
|
|
73
|
+
surface: 'section',
|
|
74
|
+
kind: 'copy.section'
|
|
75
|
+
});
|
|
76
|
+
const publishMeter = usePublishAiUsageMeter(orgId);
|
|
77
|
+
const textTargets = useMemo(()=>{
|
|
78
|
+
var _ref, _ref1;
|
|
79
|
+
var _schema_flags;
|
|
80
|
+
const schema = node == null ? void 0 : node.componentSchema;
|
|
81
|
+
const textEditable = (((_ref = schema == null ? void 0 : (_schema_flags = schema.flags) == null ? void 0 : _schema_flags.textEditable) != null ? _ref : Aglyn.FEATURE_FLAG.DISABLED) & Aglyn.FEATURE_FLAG.ENABLED) !== 0;
|
|
82
|
+
const attributes = ((_ref1 = schema == null ? void 0 : schema.attributes) != null ? _ref1 : []).filter((field)=>field.component === Aglyn.FieldComponentType.TEXT_FIELD || field.component === Aglyn.FieldComponentType.TEXTAREA).map((field)=>{
|
|
83
|
+
var _field_label;
|
|
84
|
+
return {
|
|
85
|
+
prop: String(field.name),
|
|
86
|
+
label: String((_field_label = field.label) != null ? _field_label : field.name)
|
|
87
|
+
};
|
|
88
|
+
});
|
|
89
|
+
return textEditable ? [
|
|
90
|
+
{
|
|
91
|
+
prop: 'children',
|
|
92
|
+
label: 'Element text'
|
|
93
|
+
},
|
|
94
|
+
...attributes
|
|
95
|
+
] : attributes;
|
|
96
|
+
}, [
|
|
97
|
+
node
|
|
98
|
+
]);
|
|
99
|
+
const handleRewrite = useCallback((target)=>{
|
|
100
|
+
// The permission first (AGL-2927): it is a fact about the reader, and
|
|
101
|
+
// pending asserts nothing here either. The refusal is unreachable
|
|
102
|
+
// through the designer — a refused key publishes no callback — and
|
|
103
|
+
// stands for any other caller of the context.
|
|
104
|
+
if (!(aiPermissions == null ? void 0 : aiPermissions.loaded)) {
|
|
105
|
+
return void enqueueSnackbar(PERMISSIONS_PENDING, {
|
|
106
|
+
variant: 'info',
|
|
107
|
+
persist: false
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
if (!aiPermissions.use) {
|
|
111
|
+
return void enqueueSnackbar(AI_USE_REFUSED, {
|
|
112
|
+
variant: 'warning',
|
|
113
|
+
persist: false
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
// AGL-1380: pending asserts nothing. See `orgReady` on the props.
|
|
117
|
+
if (!orgReady) {
|
|
118
|
+
return void enqueueSnackbar('Checking your plan — try again in a moment', {
|
|
119
|
+
variant: 'info',
|
|
120
|
+
persist: false
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
if (!checkEntitlement(org, 'aiAssist')) {
|
|
124
|
+
return void enqueueSnackbar('AI assist requires a Pro plan — see Billing to upgrade', {
|
|
125
|
+
variant: 'warning',
|
|
126
|
+
persist: false
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
setInstruction('');
|
|
130
|
+
setTargetProp('children');
|
|
131
|
+
setNode(target);
|
|
132
|
+
}, [
|
|
133
|
+
org,
|
|
134
|
+
orgReady,
|
|
135
|
+
aiPermissions,
|
|
136
|
+
enqueueSnackbar
|
|
137
|
+
]);
|
|
138
|
+
// Keep the target valid for the selected element.
|
|
139
|
+
const effectiveTarget = textTargets.some((item)=>item.prop === targetProp) ? targetProp : (_ref = (_textTargets_ = textTargets[0]) == null ? void 0 : _textTargets_.prop) != null ? _ref : 'children';
|
|
140
|
+
const handleConfirm = useCallback(async ()=>{
|
|
141
|
+
if (!node || !instruction.trim() || busy) return;
|
|
142
|
+
setBusy(true);
|
|
143
|
+
try {
|
|
144
|
+
var _current_props;
|
|
145
|
+
const current = Aglyn.canvas.toJSON().nodes[node.$id];
|
|
146
|
+
const text = typeof (current == null ? void 0 : (_current_props = current.props) == null ? void 0 : _current_props[effectiveTarget]) === 'string' ? current.props[effectiveTarget] : '';
|
|
147
|
+
const response = await authorizedFetch(user, '/api/ai/assist', {
|
|
148
|
+
method: 'POST',
|
|
149
|
+
headers: {
|
|
150
|
+
'Content-Type': 'application/json'
|
|
151
|
+
},
|
|
152
|
+
body: JSON.stringify(_extends({
|
|
153
|
+
orgId,
|
|
154
|
+
hostId,
|
|
155
|
+
text,
|
|
156
|
+
instruction: instruction.trim()
|
|
157
|
+
}, copyModel.model ? {
|
|
158
|
+
model: copyModel.model
|
|
159
|
+
} : {}))
|
|
160
|
+
});
|
|
161
|
+
const payload = await response.json();
|
|
162
|
+
publishMeter(payload == null ? void 0 : payload.meter);
|
|
163
|
+
// An ai-assist feature lockdown (AGL-1510/1532) reads as a pause, not
|
|
164
|
+
// as "AI request failed" — a provider incident or a cost runaway is
|
|
165
|
+
// something WE turned off, and saying so keeps the user's content out
|
|
166
|
+
// of the story.
|
|
167
|
+
const locked = parseLockdownRefusal(response.status, payload);
|
|
168
|
+
if (locked) {
|
|
169
|
+
return void enqueueSnackbar(lockdownRefusalText(locked), {
|
|
170
|
+
variant: 'warning',
|
|
171
|
+
persist: true
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
if (response.status === 501) {
|
|
175
|
+
return void enqueueSnackbar('AI assist is not configured on this deployment', {
|
|
176
|
+
variant: 'info',
|
|
177
|
+
persist: false
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
if (!response.ok || !(payload == null ? void 0 : payload.text)) {
|
|
181
|
+
var _ref;
|
|
182
|
+
return void enqueueSnackbar((_ref = payload == null ? void 0 : payload.error) != null ? _ref : 'AI request failed', {
|
|
183
|
+
variant: 'error',
|
|
184
|
+
allowDuplicate: true
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
Aglyn.canvas.updateNodeProps(node, _extends({}, current == null ? void 0 : current.props, {
|
|
188
|
+
[effectiveTarget]: payload.text
|
|
189
|
+
}, effectiveTarget === 'children' ? {
|
|
190
|
+
html: undefined
|
|
191
|
+
} : {}));
|
|
192
|
+
setNode(null);
|
|
193
|
+
enqueueSnackbar('Text rewritten — undo restores the original', {
|
|
194
|
+
variant: 'success',
|
|
195
|
+
persist: false
|
|
196
|
+
});
|
|
197
|
+
} catch (error) {
|
|
198
|
+
console.error(error);
|
|
199
|
+
enqueueSnackbar('An error has occurred', {
|
|
200
|
+
variant: 'error',
|
|
201
|
+
allowDuplicate: true
|
|
202
|
+
});
|
|
203
|
+
} finally{
|
|
204
|
+
setBusy(false);
|
|
205
|
+
}
|
|
206
|
+
}, [
|
|
207
|
+
node,
|
|
208
|
+
instruction,
|
|
209
|
+
busy,
|
|
210
|
+
user,
|
|
211
|
+
effectiveTarget,
|
|
212
|
+
orgId,
|
|
213
|
+
hostId,
|
|
214
|
+
copyModel.model,
|
|
215
|
+
publishMeter,
|
|
216
|
+
enqueueSnackbar
|
|
217
|
+
]);
|
|
218
|
+
const handleGenerateSection = useCallback(()=>{
|
|
219
|
+
// The permission first (AGL-2927) — a section is a generation, so this
|
|
220
|
+
// door sells under `ai.generate`; see `handleRewrite`.
|
|
221
|
+
if (!(aiPermissions == null ? void 0 : aiPermissions.loaded)) {
|
|
222
|
+
return void enqueueSnackbar(PERMISSIONS_PENDING, {
|
|
223
|
+
variant: 'info',
|
|
224
|
+
persist: false
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
if (!aiPermissions.generate) {
|
|
228
|
+
return void enqueueSnackbar(AI_GENERATE_REFUSED, {
|
|
229
|
+
variant: 'warning',
|
|
230
|
+
persist: false
|
|
231
|
+
});
|
|
232
|
+
}
|
|
233
|
+
// AGL-1380: same gate as `handleRewrite`.
|
|
234
|
+
if (!orgReady) {
|
|
235
|
+
return void enqueueSnackbar('Checking your plan — try again in a moment', {
|
|
236
|
+
variant: 'info',
|
|
237
|
+
persist: false
|
|
238
|
+
});
|
|
239
|
+
}
|
|
240
|
+
if (!checkEntitlement(org, 'aiAssist')) {
|
|
241
|
+
return void enqueueSnackbar('AI assist requires a Pro plan — see Billing to upgrade', {
|
|
242
|
+
variant: 'warning',
|
|
243
|
+
persist: false
|
|
244
|
+
});
|
|
245
|
+
}
|
|
246
|
+
setSectionPrompt('');
|
|
247
|
+
setSectionOpen(true);
|
|
248
|
+
}, [
|
|
249
|
+
org,
|
|
250
|
+
orgReady,
|
|
251
|
+
aiPermissions,
|
|
252
|
+
enqueueSnackbar
|
|
253
|
+
]);
|
|
254
|
+
const handleSectionConfirm = useCallback(async ()=>{
|
|
255
|
+
if (!sectionPrompt.trim() || busy) return;
|
|
256
|
+
setBusy(true);
|
|
257
|
+
try {
|
|
258
|
+
var _payload_section;
|
|
259
|
+
const response = await authorizedFetch(user, '/api/ai/assist', {
|
|
260
|
+
method: 'POST',
|
|
261
|
+
headers: {
|
|
262
|
+
'Content-Type': 'application/json'
|
|
263
|
+
},
|
|
264
|
+
body: JSON.stringify(_extends({
|
|
265
|
+
orgId,
|
|
266
|
+
hostId,
|
|
267
|
+
mode: 'section',
|
|
268
|
+
instruction: sectionPrompt.trim()
|
|
269
|
+
}, sectionModel.model ? {
|
|
270
|
+
model: sectionModel.model
|
|
271
|
+
} : {}))
|
|
272
|
+
});
|
|
273
|
+
const payload = await response.json();
|
|
274
|
+
publishMeter(payload == null ? void 0 : payload.meter);
|
|
275
|
+
// Same pause notice on the section-generation door (AGL-1532).
|
|
276
|
+
const locked = parseLockdownRefusal(response.status, payload);
|
|
277
|
+
if (locked) {
|
|
278
|
+
return void enqueueSnackbar(lockdownRefusalText(locked), {
|
|
279
|
+
variant: 'warning',
|
|
280
|
+
persist: true
|
|
281
|
+
});
|
|
282
|
+
}
|
|
283
|
+
if (response.status === 501) {
|
|
284
|
+
return void enqueueSnackbar('AI assist is not configured on this deployment', {
|
|
285
|
+
variant: 'info',
|
|
286
|
+
persist: false
|
|
287
|
+
});
|
|
288
|
+
}
|
|
289
|
+
if (!response.ok || !(payload == null ? void 0 : (_payload_section = payload.section) == null ? void 0 : _payload_section.rootId)) {
|
|
290
|
+
var _ref;
|
|
291
|
+
return void enqueueSnackbar((_ref = payload == null ? void 0 : payload.error) != null ? _ref : 'AI request failed', {
|
|
292
|
+
variant: 'error',
|
|
293
|
+
allowDuplicate: true
|
|
294
|
+
});
|
|
295
|
+
}
|
|
296
|
+
const nested = marketplaceDefinitionToNested(payload.section.rootId, payload.section.nodes);
|
|
297
|
+
if (!nested) {
|
|
298
|
+
return void enqueueSnackbar('AI returned an empty section', {
|
|
299
|
+
variant: 'error',
|
|
300
|
+
allowDuplicate: true
|
|
301
|
+
});
|
|
302
|
+
}
|
|
303
|
+
// Graft through the preset path: ids regenerate, history is saved,
|
|
304
|
+
// and the subtree lands at the end of the canvas root.
|
|
305
|
+
const stamped = function stamp(node) {
|
|
306
|
+
var _node_nodes;
|
|
307
|
+
const schema = Aglyn.components.getSchema(node.componentId);
|
|
308
|
+
return _extends({}, node, (schema == null ? void 0 : schema.pluginId) ? {
|
|
309
|
+
pluginId: schema.pluginId
|
|
310
|
+
} : {}, {
|
|
311
|
+
nodes: ((_node_nodes = node.nodes) != null ? _node_nodes : []).map(stamp)
|
|
312
|
+
});
|
|
313
|
+
}(nested);
|
|
314
|
+
Aglyn.canvas.addNodeFromPreset({
|
|
315
|
+
type: Aglyn.NodeType.PRESET,
|
|
316
|
+
data: stamped
|
|
317
|
+
}, Aglyn.canvas.rootNode);
|
|
318
|
+
setSectionOpen(false);
|
|
319
|
+
enqueueSnackbar('Section added — undo removes it', {
|
|
320
|
+
variant: 'success',
|
|
321
|
+
persist: false
|
|
322
|
+
});
|
|
323
|
+
} catch (error) {
|
|
324
|
+
console.error(error);
|
|
325
|
+
enqueueSnackbar('An error has occurred', {
|
|
326
|
+
variant: 'error',
|
|
327
|
+
allowDuplicate: true
|
|
328
|
+
});
|
|
329
|
+
} finally{
|
|
330
|
+
setBusy(false);
|
|
331
|
+
}
|
|
332
|
+
}, [
|
|
333
|
+
sectionPrompt,
|
|
334
|
+
busy,
|
|
335
|
+
user,
|
|
336
|
+
orgId,
|
|
337
|
+
hostId,
|
|
338
|
+
sectionModel.model,
|
|
339
|
+
publishMeter,
|
|
340
|
+
enqueueSnackbar
|
|
341
|
+
]);
|
|
342
|
+
// A REFUSED key publishes no callback (AGL-2927): the besigner controls
|
|
343
|
+
// render only when the callback exists, so the refusal removes
|
|
344
|
+
// the button rather than dimming it. A PENDING answer keeps both
|
|
345
|
+
// callbacks, and each holds with a notice when pressed — a control that
|
|
346
|
+
// vanishes and reappears while the read lands is worse than one that is
|
|
347
|
+
// briefly inert (the `useHostRole` argument, applied here).
|
|
348
|
+
const refusedUse = (aiPermissions == null ? void 0 : aiPermissions.loaded) === true && !aiPermissions.use;
|
|
349
|
+
const refusedGenerate = (aiPermissions == null ? void 0 : aiPermissions.loaded) === true && !aiPermissions.generate;
|
|
350
|
+
const contextValue = useMemo(()=>_extends({}, refusedUse ? {} : {
|
|
351
|
+
onRewrite: handleRewrite
|
|
352
|
+
}, refusedGenerate ? {} : {
|
|
353
|
+
onGenerateSection: handleGenerateSection
|
|
354
|
+
}), [
|
|
355
|
+
handleRewrite,
|
|
356
|
+
handleGenerateSection,
|
|
357
|
+
refusedUse,
|
|
358
|
+
refusedGenerate
|
|
359
|
+
]);
|
|
360
|
+
return /*#__PURE__*/ _jsxs(AiAssistActionsContext.Provider, {
|
|
361
|
+
value: contextValue,
|
|
362
|
+
children: [
|
|
363
|
+
children,
|
|
364
|
+
/*#__PURE__*/ _jsxs(Dialog, {
|
|
365
|
+
open: Boolean(node),
|
|
366
|
+
onClose: ()=>busy ? null : setNode(null),
|
|
367
|
+
maxWidth: "xs",
|
|
368
|
+
fullWidth: true,
|
|
369
|
+
children: [
|
|
370
|
+
/*#__PURE__*/ _jsx(DialogTitle, {
|
|
371
|
+
children: 'Rewrite with AI'
|
|
372
|
+
}),
|
|
373
|
+
/*#__PURE__*/ _jsxs(DialogContent, {
|
|
374
|
+
sx: {
|
|
375
|
+
display: 'flex',
|
|
376
|
+
flexDirection: 'column',
|
|
377
|
+
gap: 2,
|
|
378
|
+
pt: 1
|
|
379
|
+
},
|
|
380
|
+
children: [
|
|
381
|
+
/*#__PURE__*/ _jsx(Typography, {
|
|
382
|
+
variant: "body2",
|
|
383
|
+
color: "text.secondary",
|
|
384
|
+
children: 'Describe how the text should change — tone, length, message.'
|
|
385
|
+
}),
|
|
386
|
+
textTargets.length > 1 ? /*#__PURE__*/ _jsx(TextField, {
|
|
387
|
+
select: true,
|
|
388
|
+
label: "Field",
|
|
389
|
+
value: effectiveTarget,
|
|
390
|
+
onChange: (event)=>setTargetProp(event.target.value),
|
|
391
|
+
size: "small",
|
|
392
|
+
disabled: busy,
|
|
393
|
+
children: textTargets.map((item)=>/*#__PURE__*/ _jsx(MenuItem, {
|
|
394
|
+
value: item.prop,
|
|
395
|
+
children: item.label
|
|
396
|
+
}, item.prop))
|
|
397
|
+
}) : null,
|
|
398
|
+
/*#__PURE__*/ _jsx(TextField, {
|
|
399
|
+
label: "Instruction",
|
|
400
|
+
placeholder: "e.g. Make it punchier and half as long",
|
|
401
|
+
value: instruction,
|
|
402
|
+
onChange: (event)=>setInstruction(event.target.value),
|
|
403
|
+
size: "small",
|
|
404
|
+
autoFocus: true,
|
|
405
|
+
multiline: true,
|
|
406
|
+
minRows: 2,
|
|
407
|
+
disabled: busy,
|
|
408
|
+
onKeyDown: (event)=>{
|
|
409
|
+
if (event.key === 'Enter' && (event.metaKey || event.ctrlKey)) {
|
|
410
|
+
event.preventDefault();
|
|
411
|
+
handleConfirm();
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
}),
|
|
415
|
+
/*#__PURE__*/ _jsx(AiModelSelector, {
|
|
416
|
+
choice: copyModel,
|
|
417
|
+
disabled: busy
|
|
418
|
+
}),
|
|
419
|
+
/*#__PURE__*/ _jsx(AiUsageStrip, {
|
|
420
|
+
orgId: orgId
|
|
421
|
+
})
|
|
422
|
+
]
|
|
423
|
+
}),
|
|
424
|
+
/*#__PURE__*/ _jsxs(DialogActions, {
|
|
425
|
+
children: [
|
|
426
|
+
/*#__PURE__*/ _jsx(Button, {
|
|
427
|
+
disabled: busy,
|
|
428
|
+
onClick: ()=>setNode(null),
|
|
429
|
+
children: 'Cancel'
|
|
430
|
+
}),
|
|
431
|
+
/*#__PURE__*/ _jsx(Button, {
|
|
432
|
+
variant: "contained",
|
|
433
|
+
color: "primary",
|
|
434
|
+
disabled: !instruction.trim() || busy,
|
|
435
|
+
startIcon: busy ? /*#__PURE__*/ _jsx(CircularProgress, {
|
|
436
|
+
size: 16
|
|
437
|
+
}) : undefined,
|
|
438
|
+
onClick: handleConfirm,
|
|
439
|
+
children: busy ? 'Rewriting…' : 'Rewrite'
|
|
440
|
+
})
|
|
441
|
+
]
|
|
442
|
+
})
|
|
443
|
+
]
|
|
444
|
+
}),
|
|
445
|
+
/*#__PURE__*/ _jsxs(Dialog, {
|
|
446
|
+
open: sectionOpen,
|
|
447
|
+
onClose: ()=>busy ? null : setSectionOpen(false),
|
|
448
|
+
maxWidth: "xs",
|
|
449
|
+
fullWidth: true,
|
|
450
|
+
children: [
|
|
451
|
+
/*#__PURE__*/ _jsx(DialogTitle, {
|
|
452
|
+
children: 'Generate a section with AI'
|
|
453
|
+
}),
|
|
454
|
+
/*#__PURE__*/ _jsxs(DialogContent, {
|
|
455
|
+
sx: {
|
|
456
|
+
display: 'flex',
|
|
457
|
+
flexDirection: 'column',
|
|
458
|
+
gap: 2,
|
|
459
|
+
pt: 1
|
|
460
|
+
},
|
|
461
|
+
children: [
|
|
462
|
+
/*#__PURE__*/ _jsx(Typography, {
|
|
463
|
+
variant: "body2",
|
|
464
|
+
color: "text.secondary",
|
|
465
|
+
children: 'Describe the section — e.g. "hero with headline, subtext, ' + 'and a call-to-action button" or "three-column feature grid".'
|
|
466
|
+
}),
|
|
467
|
+
/*#__PURE__*/ _jsx(TextField, {
|
|
468
|
+
label: "Section",
|
|
469
|
+
value: sectionPrompt,
|
|
470
|
+
onChange: (event)=>setSectionPrompt(event.target.value),
|
|
471
|
+
size: "small",
|
|
472
|
+
autoFocus: true,
|
|
473
|
+
multiline: true,
|
|
474
|
+
minRows: 2,
|
|
475
|
+
disabled: busy,
|
|
476
|
+
onKeyDown: (event)=>{
|
|
477
|
+
if (event.key === 'Enter' && (event.metaKey || event.ctrlKey)) {
|
|
478
|
+
event.preventDefault();
|
|
479
|
+
handleSectionConfirm();
|
|
480
|
+
}
|
|
481
|
+
}
|
|
482
|
+
}),
|
|
483
|
+
/*#__PURE__*/ _jsx(AiModelSelector, {
|
|
484
|
+
choice: sectionModel,
|
|
485
|
+
disabled: busy
|
|
486
|
+
}),
|
|
487
|
+
/*#__PURE__*/ _jsx(AiUsageStrip, {
|
|
488
|
+
orgId: orgId
|
|
489
|
+
})
|
|
490
|
+
]
|
|
491
|
+
}),
|
|
492
|
+
/*#__PURE__*/ _jsxs(DialogActions, {
|
|
493
|
+
children: [
|
|
494
|
+
/*#__PURE__*/ _jsx(Button, {
|
|
495
|
+
disabled: busy,
|
|
496
|
+
onClick: ()=>setSectionOpen(false),
|
|
497
|
+
children: 'Cancel'
|
|
498
|
+
}),
|
|
499
|
+
/*#__PURE__*/ _jsx(Button, {
|
|
500
|
+
variant: "contained",
|
|
501
|
+
color: "primary",
|
|
502
|
+
disabled: !sectionPrompt.trim() || busy,
|
|
503
|
+
startIcon: busy ? /*#__PURE__*/ _jsx(CircularProgress, {
|
|
504
|
+
size: 16
|
|
505
|
+
}) : undefined,
|
|
506
|
+
onClick: handleSectionConfirm,
|
|
507
|
+
children: busy ? 'Generating…' : 'Generate'
|
|
508
|
+
})
|
|
509
|
+
]
|
|
510
|
+
})
|
|
511
|
+
]
|
|
512
|
+
})
|
|
513
|
+
]
|
|
514
|
+
});
|
|
515
|
+
}
|
|
516
|
+
AiAssistProvider.displayName = 'AiAssistProvider';
|
|
517
|
+
export default AiAssistProvider;
|
|
518
|
+
|
|
519
|
+
//# sourceMappingURL=ai-assist-provider.component.js.map
|