@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,263 @@
|
|
|
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 { pluginDocsHelp } from "@aglyn/aglyn/app-utils/docs-help";
|
|
19
|
+
import { useHostOrgId } from "@aglyn/tenant-feature-instance";
|
|
20
|
+
import { Alert, Box, Button, CircularProgress, Link, Stack, Typography } from "@mui/material";
|
|
21
|
+
import { useMemo } from "react";
|
|
22
|
+
import { AI_CRM_RECORD_KINDS } from "../model/ai-crm.js";
|
|
23
|
+
import { useAiCrmAnswer } from "./use-ai-crm-answer.js";
|
|
24
|
+
const TASK_KIND_WORDS = {
|
|
25
|
+
call: 'Call',
|
|
26
|
+
email: 'Email',
|
|
27
|
+
meeting: 'Meeting',
|
|
28
|
+
todo: 'To-do'
|
|
29
|
+
};
|
|
30
|
+
/** When a suggested task is due, in words. */ export function aiCrmDueWords(dueInDays) {
|
|
31
|
+
if (dueInDays <= 0) return 'due today';
|
|
32
|
+
if (dueInDays === 1) return 'due tomorrow';
|
|
33
|
+
return `due in ${dueInDays} days`;
|
|
34
|
+
}
|
|
35
|
+
/** A suggested next step as the task form takes it. */ export function aiCrmTaskOf(step) {
|
|
36
|
+
return {
|
|
37
|
+
title: step.title,
|
|
38
|
+
notes: step.reason,
|
|
39
|
+
kind: step.kind,
|
|
40
|
+
priority: step.priority,
|
|
41
|
+
dueInDays: step.dueInDays
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
const recordKindOf = (kind)=>AI_CRM_RECORD_KINDS.includes(kind) ? kind : null;
|
|
45
|
+
/**
|
|
46
|
+
* "Summarize this contact" (AGL-2917), on a CRM record's page through the
|
|
47
|
+
* `recordInsights` zone: a contact's, company's, deal's or lead's summary,
|
|
48
|
+
* with a suggested next step, a deal's suggested stage and a lead's standing.
|
|
49
|
+
*
|
|
50
|
+
* The card writes nothing. A next step goes to the page's own task form
|
|
51
|
+
* through `proposeTask`, whose Save is the write, and a stage to the page's
|
|
52
|
+
* stage move through `proposeStage`, which asks the member first. A summary
|
|
53
|
+
* any member asked for is shown to every member who can open the record, and
|
|
54
|
+
* asking again for an unchanged record reuses it at no cost.
|
|
55
|
+
*
|
|
56
|
+
* It renders nothing until the jobs route has answered for this workspace:
|
|
57
|
+
* the shell decided the plan and the permission, but the release flag is the
|
|
58
|
+
* route's, and a 404 there is this card staying absent.
|
|
59
|
+
*/ export function AiCrmRecordCard(props) {
|
|
60
|
+
var _ref, _props_orgId, _ref1, _find;
|
|
61
|
+
var _run_answer, _run_answer1, _run_job;
|
|
62
|
+
const { hostId, record, proposeTask, stages, stageId, proposeStage } = props;
|
|
63
|
+
// A record page may not know the org yet; its site does.
|
|
64
|
+
const hostOrgId = useHostOrgId(props.orgId || !hostId ? undefined : hostId);
|
|
65
|
+
const orgId = (_ref = (_props_orgId = props.orgId) != null ? _props_orgId : hostOrgId) != null ? _ref : undefined;
|
|
66
|
+
const kind = recordKindOf(record.kind);
|
|
67
|
+
const recordId = record.id;
|
|
68
|
+
const wanted = useMemo(()=>kind ? {
|
|
69
|
+
kind: 'record',
|
|
70
|
+
record: {
|
|
71
|
+
kind,
|
|
72
|
+
id: recordId
|
|
73
|
+
}
|
|
74
|
+
} : null, [
|
|
75
|
+
kind,
|
|
76
|
+
recordId
|
|
77
|
+
]);
|
|
78
|
+
const run = useAiCrmAnswer({
|
|
79
|
+
orgId,
|
|
80
|
+
hostId,
|
|
81
|
+
wanted,
|
|
82
|
+
recall: 'any'
|
|
83
|
+
});
|
|
84
|
+
if (!kind || run.verdict !== 'ready') return null;
|
|
85
|
+
const proposal = ((_run_answer = run.answer) == null ? void 0 : _run_answer.proposal.kind) === 'record' ? run.answer.proposal : null;
|
|
86
|
+
const jobId = (_ref1 = (_run_answer1 = run.answer) == null ? void 0 : _run_answer1.jobId) != null ? _ref1 : '';
|
|
87
|
+
const working = run.busy || run.running;
|
|
88
|
+
const nextStep = (proposal == null ? void 0 : proposal.nextStep) && proposeTask ? proposal.nextStep : null;
|
|
89
|
+
const offeredStage = (proposal == null ? void 0 : proposal.stage) && proposeStage && proposal.stage.stageId !== stageId ? (_find = (stages != null ? stages : []).find((stage)=>{
|
|
90
|
+
var _proposal_stage;
|
|
91
|
+
return stage.id === ((_proposal_stage = proposal.stage) == null ? void 0 : _proposal_stage.stageId);
|
|
92
|
+
})) != null ? _find : null : null;
|
|
93
|
+
const help = pluginDocsHelp('aiCrm', {
|
|
94
|
+
anchor: '#summarize-a-record',
|
|
95
|
+
excerpt: 'A short summary of this record and a suggested next step, from its timeline. Nothing is saved until you save it.'
|
|
96
|
+
});
|
|
97
|
+
return /*#__PURE__*/ _jsx(Box, {
|
|
98
|
+
sx: {
|
|
99
|
+
border: 1,
|
|
100
|
+
borderColor: 'divider',
|
|
101
|
+
borderRadius: 1,
|
|
102
|
+
p: 1.5
|
|
103
|
+
},
|
|
104
|
+
"aria-label": "AI summary",
|
|
105
|
+
children: /*#__PURE__*/ _jsxs(Stack, {
|
|
106
|
+
spacing: 1.5,
|
|
107
|
+
children: [
|
|
108
|
+
/*#__PURE__*/ _jsxs(Stack, {
|
|
109
|
+
direction: "row",
|
|
110
|
+
spacing: 1,
|
|
111
|
+
sx: {
|
|
112
|
+
alignItems: 'baseline'
|
|
113
|
+
},
|
|
114
|
+
children: [
|
|
115
|
+
/*#__PURE__*/ _jsx(Typography, {
|
|
116
|
+
variant: "subtitle2",
|
|
117
|
+
sx: {
|
|
118
|
+
flexGrow: 1
|
|
119
|
+
},
|
|
120
|
+
children: 'AI summary'
|
|
121
|
+
}),
|
|
122
|
+
/*#__PURE__*/ _jsx(Link, {
|
|
123
|
+
href: help.href,
|
|
124
|
+
target: "_blank",
|
|
125
|
+
rel: "noopener",
|
|
126
|
+
variant: "caption",
|
|
127
|
+
title: help.excerpt,
|
|
128
|
+
children: 'How it works'
|
|
129
|
+
})
|
|
130
|
+
]
|
|
131
|
+
}),
|
|
132
|
+
proposal ? /*#__PURE__*/ _jsxs(Stack, {
|
|
133
|
+
spacing: 0.5,
|
|
134
|
+
children: [
|
|
135
|
+
/*#__PURE__*/ _jsx(Typography, {
|
|
136
|
+
variant: "body2",
|
|
137
|
+
sx: {
|
|
138
|
+
wordBreak: 'break-word'
|
|
139
|
+
},
|
|
140
|
+
children: proposal.summary
|
|
141
|
+
}),
|
|
142
|
+
proposal.standing ? /*#__PURE__*/ _jsx(Typography, {
|
|
143
|
+
variant: "body2",
|
|
144
|
+
color: "text.secondary",
|
|
145
|
+
sx: {
|
|
146
|
+
wordBreak: 'break-word'
|
|
147
|
+
},
|
|
148
|
+
children: proposal.standing
|
|
149
|
+
}) : null,
|
|
150
|
+
/*#__PURE__*/ _jsx(Typography, {
|
|
151
|
+
variant: "caption",
|
|
152
|
+
color: "text.secondary",
|
|
153
|
+
children: `Written from the timeline on ${proposal.asOf}.`
|
|
154
|
+
})
|
|
155
|
+
]
|
|
156
|
+
}) : null,
|
|
157
|
+
nextStep && proposeTask ? /*#__PURE__*/ _jsxs(Stack, {
|
|
158
|
+
spacing: 0.5,
|
|
159
|
+
"aria-label": "Suggested next step",
|
|
160
|
+
children: [
|
|
161
|
+
/*#__PURE__*/ _jsx(Typography, {
|
|
162
|
+
variant: "caption",
|
|
163
|
+
color: "text.secondary",
|
|
164
|
+
children: 'Suggested next step'
|
|
165
|
+
}),
|
|
166
|
+
/*#__PURE__*/ _jsx(Typography, {
|
|
167
|
+
variant: "body2",
|
|
168
|
+
sx: {
|
|
169
|
+
wordBreak: 'break-word'
|
|
170
|
+
},
|
|
171
|
+
children: `${nextStep.title} (${TASK_KIND_WORDS[nextStep.kind]}, ${nextStep.priority} priority, ${aiCrmDueWords(nextStep.dueInDays)})`
|
|
172
|
+
}),
|
|
173
|
+
/*#__PURE__*/ _jsx(Typography, {
|
|
174
|
+
variant: "caption",
|
|
175
|
+
color: "text.secondary",
|
|
176
|
+
sx: {
|
|
177
|
+
wordBreak: 'break-word'
|
|
178
|
+
},
|
|
179
|
+
children: nextStep.reason
|
|
180
|
+
}),
|
|
181
|
+
/*#__PURE__*/ _jsx(Button, {
|
|
182
|
+
size: "small",
|
|
183
|
+
variant: "contained",
|
|
184
|
+
sx: {
|
|
185
|
+
alignSelf: 'flex-start'
|
|
186
|
+
},
|
|
187
|
+
onClick: ()=>proposeTask(aiCrmTaskOf(nextStep), jobId),
|
|
188
|
+
children: 'Create task'
|
|
189
|
+
})
|
|
190
|
+
]
|
|
191
|
+
}) : null,
|
|
192
|
+
offeredStage && (proposal == null ? void 0 : proposal.stage) && proposeStage ? /*#__PURE__*/ _jsxs(Stack, {
|
|
193
|
+
spacing: 0.5,
|
|
194
|
+
"aria-label": "Suggested stage",
|
|
195
|
+
children: [
|
|
196
|
+
/*#__PURE__*/ _jsx(Typography, {
|
|
197
|
+
variant: "caption",
|
|
198
|
+
color: "text.secondary",
|
|
199
|
+
children: 'Suggested stage'
|
|
200
|
+
}),
|
|
201
|
+
/*#__PURE__*/ _jsx(Typography, {
|
|
202
|
+
variant: "body2",
|
|
203
|
+
children: offeredStage.name
|
|
204
|
+
}),
|
|
205
|
+
/*#__PURE__*/ _jsx(Typography, {
|
|
206
|
+
variant: "caption",
|
|
207
|
+
color: "text.secondary",
|
|
208
|
+
sx: {
|
|
209
|
+
wordBreak: 'break-word'
|
|
210
|
+
},
|
|
211
|
+
children: proposal.stage.reason
|
|
212
|
+
}),
|
|
213
|
+
/*#__PURE__*/ _jsx(Button, {
|
|
214
|
+
size: "small",
|
|
215
|
+
variant: "outlined",
|
|
216
|
+
sx: {
|
|
217
|
+
alignSelf: 'flex-start'
|
|
218
|
+
},
|
|
219
|
+
onClick: ()=>proposeStage(offeredStage.id, jobId),
|
|
220
|
+
children: `Move to ${offeredStage.name}`
|
|
221
|
+
})
|
|
222
|
+
]
|
|
223
|
+
}) : null,
|
|
224
|
+
/*#__PURE__*/ _jsxs(Stack, {
|
|
225
|
+
direction: "row",
|
|
226
|
+
spacing: 1,
|
|
227
|
+
sx: {
|
|
228
|
+
alignItems: 'center'
|
|
229
|
+
},
|
|
230
|
+
children: [
|
|
231
|
+
/*#__PURE__*/ _jsx(Button, {
|
|
232
|
+
size: "small",
|
|
233
|
+
variant: "outlined",
|
|
234
|
+
disabled: working || !orgId,
|
|
235
|
+
onClick: ()=>void run.ask(`Summarize this ${kind}`, {
|
|
236
|
+
task: 'record',
|
|
237
|
+
record: kind,
|
|
238
|
+
recordId
|
|
239
|
+
}),
|
|
240
|
+
children: proposal ? 'Summarize again' : `Summarize this ${kind}`
|
|
241
|
+
}),
|
|
242
|
+
working ? /*#__PURE__*/ _jsx(CircularProgress, {
|
|
243
|
+
size: 16,
|
|
244
|
+
"aria-label": "Summarizing"
|
|
245
|
+
}) : null
|
|
246
|
+
]
|
|
247
|
+
}),
|
|
248
|
+
run.notice ? /*#__PURE__*/ _jsx(Alert, {
|
|
249
|
+
severity: "warning",
|
|
250
|
+
children: run.notice
|
|
251
|
+
}) : null,
|
|
252
|
+
((_run_job = run.job) == null ? void 0 : _run_job.error) && !proposal ? /*#__PURE__*/ _jsx(Alert, {
|
|
253
|
+
severity: run.job.status === 'failed' ? 'error' : 'warning',
|
|
254
|
+
children: run.job.error
|
|
255
|
+
}) : null
|
|
256
|
+
]
|
|
257
|
+
})
|
|
258
|
+
});
|
|
259
|
+
}
|
|
260
|
+
AiCrmRecordCard.displayName = 'AiCrmRecordCard';
|
|
261
|
+
export default AiCrmRecordCard;
|
|
262
|
+
|
|
263
|
+
//# sourceMappingURL=ai-crm-record-card.component.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../../libs/plugins/ai/src/lib/components/ai-crm-record-card.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 { pluginDocsHelp } from '@aglyn/aglyn/app-utils/docs-help'\nimport type { ConsoleRecordInsightsZoneProps } from '@aglyn/aglyn/plugin-manager/feature-plugins'\nimport type { ConsoleProposedTask } from '@aglyn/aglyn/plugin-manager/record-zone-props'\nimport { useHostOrgId } from '@aglyn/tenant-feature-instance'\nimport { Alert, Box, Button, CircularProgress, Link, Stack, Typography } from '@mui/material'\nimport { useMemo } from 'react'\nimport {\n AI_CRM_RECORD_KINDS,\n type AiCrmAnswerWanted,\n type AiCrmNextStep,\n type AiCrmRecordKind,\n} from '../model/ai-crm'\nimport { useAiCrmAnswer } from './use-ai-crm-answer'\n\nconst TASK_KIND_WORDS: Record<AiCrmNextStep['kind'], string> = {\n call: 'Call',\n email: 'Email',\n meeting: 'Meeting',\n todo: 'To-do',\n}\n\n/** When a suggested task is due, in words. */\nexport function aiCrmDueWords(dueInDays: number): string {\n if (dueInDays <= 0) return 'due today'\n if (dueInDays === 1) return 'due tomorrow'\n return `due in ${dueInDays} days`\n}\n\n/** A suggested next step as the task form takes it. */\nexport function aiCrmTaskOf(step: AiCrmNextStep): ConsoleProposedTask {\n return { title: step.title, notes: step.reason, kind: step.kind, priority: step.priority, dueInDays: step.dueInDays }\n}\n\nconst recordKindOf = (kind: string): AiCrmRecordKind | null =>\n (AI_CRM_RECORD_KINDS as readonly string[]).includes(kind) ? (kind as AiCrmRecordKind) : null\n\n/**\n * \"Summarize this contact\" (AGL-2917), on a CRM record's page through the\n * `recordInsights` zone: a contact's, company's, deal's or lead's summary,\n * with a suggested next step, a deal's suggested stage and a lead's standing.\n *\n * The card writes nothing. A next step goes to the page's own task form\n * through `proposeTask`, whose Save is the write, and a stage to the page's\n * stage move through `proposeStage`, which asks the member first. A summary\n * any member asked for is shown to every member who can open the record, and\n * asking again for an unchanged record reuses it at no cost.\n *\n * It renders nothing until the jobs route has answered for this workspace:\n * the shell decided the plan and the permission, but the release flag is the\n * route's, and a 404 there is this card staying absent.\n */\nexport function AiCrmRecordCard(props: ConsoleRecordInsightsZoneProps) {\n const { hostId, record, proposeTask, stages, stageId, proposeStage } = props\n // A record page may not know the org yet; its site does.\n const hostOrgId = useHostOrgId(props.orgId || !hostId ? undefined : hostId)\n const orgId = props.orgId ?? hostOrgId ?? undefined\n const kind = recordKindOf(record.kind)\n const recordId = record.id\n const wanted = useMemo<AiCrmAnswerWanted | null>(\n () => (kind ? { kind: 'record', record: { kind, id: recordId } } : null),\n [kind, recordId],\n )\n const run = useAiCrmAnswer({ orgId, hostId, wanted, recall: 'any' })\n\n if (!kind || run.verdict !== 'ready') return null\n\n const proposal = run.answer?.proposal.kind === 'record' ? run.answer.proposal : null\n const jobId = run.answer?.jobId ?? ''\n const working = run.busy || run.running\n const nextStep = proposal?.nextStep && proposeTask ? proposal.nextStep : null\n const offeredStage =\n proposal?.stage && proposeStage && proposal.stage.stageId !== stageId\n ? (stages ?? []).find((stage) => stage.id === proposal.stage?.stageId) ?? null\n : null\n const help = pluginDocsHelp('aiCrm', {\n anchor: '#summarize-a-record',\n excerpt: 'A short summary of this record and a suggested next step, from its timeline. Nothing is saved until you save it.',\n })\n\n return (\n <Box sx={{ border: 1, borderColor: 'divider', borderRadius: 1, p: 1.5 }} aria-label=\"AI summary\">\n <Stack spacing={1.5}>\n <Stack direction=\"row\" spacing={1} sx={{ alignItems: 'baseline' }}>\n <Typography variant=\"subtitle2\" sx={{ flexGrow: 1 }}>\n {'AI summary'}\n </Typography>\n <Link href={help.href} target=\"_blank\" rel=\"noopener\" variant=\"caption\" title={help.excerpt}>\n {'How it works'}\n </Link>\n </Stack>\n\n {proposal ? (\n <Stack spacing={0.5}>\n <Typography variant=\"body2\" sx={{ wordBreak: 'break-word' }}>\n {proposal.summary}\n </Typography>\n {proposal.standing ? (\n <Typography variant=\"body2\" color=\"text.secondary\" sx={{ wordBreak: 'break-word' }}>\n {proposal.standing}\n </Typography>\n ) : null}\n <Typography variant=\"caption\" color=\"text.secondary\">\n {`Written from the timeline on ${proposal.asOf}.`}\n </Typography>\n </Stack>\n ) : null}\n\n {nextStep && proposeTask ? (\n <Stack spacing={0.5} aria-label=\"Suggested next step\">\n <Typography variant=\"caption\" color=\"text.secondary\">\n {'Suggested next step'}\n </Typography>\n <Typography variant=\"body2\" sx={{ wordBreak: 'break-word' }}>\n {`${nextStep.title} (${TASK_KIND_WORDS[nextStep.kind]}, ${nextStep.priority} priority, ${aiCrmDueWords(nextStep.dueInDays)})`}\n </Typography>\n <Typography variant=\"caption\" color=\"text.secondary\" sx={{ wordBreak: 'break-word' }}>\n {nextStep.reason}\n </Typography>\n <Button\n size=\"small\"\n variant=\"contained\"\n sx={{ alignSelf: 'flex-start' }}\n onClick={() => proposeTask(aiCrmTaskOf(nextStep), jobId)}\n >\n {'Create task'}\n </Button>\n </Stack>\n ) : null}\n\n {offeredStage && proposal?.stage && proposeStage ? (\n <Stack spacing={0.5} aria-label=\"Suggested stage\">\n <Typography variant=\"caption\" color=\"text.secondary\">\n {'Suggested stage'}\n </Typography>\n <Typography variant=\"body2\">{offeredStage.name}</Typography>\n <Typography variant=\"caption\" color=\"text.secondary\" sx={{ wordBreak: 'break-word' }}>\n {proposal.stage.reason}\n </Typography>\n <Button\n size=\"small\"\n variant=\"outlined\"\n sx={{ alignSelf: 'flex-start' }}\n onClick={() => proposeStage(offeredStage.id, jobId)}\n >\n {`Move to ${offeredStage.name}`}\n </Button>\n </Stack>\n ) : null}\n\n <Stack direction=\"row\" spacing={1} sx={{ alignItems: 'center' }}>\n <Button\n size=\"small\"\n variant=\"outlined\"\n disabled={working || !orgId}\n onClick={() => void run.ask(`Summarize this ${kind}`, { task: 'record', record: kind, recordId })}\n >\n {proposal ? 'Summarize again' : `Summarize this ${kind}`}\n </Button>\n {working ? <CircularProgress size={16} aria-label=\"Summarizing\" /> : null}\n </Stack>\n {run.notice ? <Alert severity=\"warning\">{run.notice}</Alert> : null}\n {run.job?.error && !proposal ? (\n <Alert severity={run.job.status === 'failed' ? 'error' : 'warning'}>{run.job.error}</Alert>\n ) : null}\n </Stack>\n </Box>\n )\n}\nAiCrmRecordCard.displayName = 'AiCrmRecordCard'\n\nexport default AiCrmRecordCard\n"],"names":["pluginDocsHelp","useHostOrgId","Alert","Box","Button","CircularProgress","Link","Stack","Typography","useMemo","AI_CRM_RECORD_KINDS","useAiCrmAnswer","TASK_KIND_WORDS","call","email","meeting","todo","aiCrmDueWords","dueInDays","aiCrmTaskOf","step","title","notes","reason","kind","priority","recordKindOf","includes","AiCrmRecordCard","props","run","hostId","record","proposeTask","stages","stageId","proposeStage","hostOrgId","orgId","undefined","recordId","id","wanted","recall","verdict","proposal","answer","jobId","working","busy","running","nextStep","offeredStage","stage","find","help","anchor","excerpt","sx","border","borderColor","borderRadius","p","aria-label","spacing","direction","alignItems","variant","flexGrow","href","target","rel","wordBreak","summary","standing","color","asOf","size","alignSelf","onClick","name","disabled","ask","task","notice","severity","job","error","status","displayName"],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { ConsoleHostAutomationsZoneProps } from '@aglyn/aglyn/plugin-manager/feature-plugins';
|
|
2
|
+
import { useAiJobRun } from './use-ai-job-run';
|
|
3
|
+
export declare const AI_AUTOMATION_BRIEF_COPY: {
|
|
4
|
+
readonly title: "Describe an automation";
|
|
5
|
+
readonly briefLabel: "What should happen, and when?";
|
|
6
|
+
readonly placeholder: string;
|
|
7
|
+
readonly next: string;
|
|
8
|
+
readonly submit: "Draft the automation";
|
|
9
|
+
readonly started: string;
|
|
10
|
+
readonly drafted: "Drafted";
|
|
11
|
+
readonly review: "Review it";
|
|
12
|
+
readonly notListed: "The draft is saved. It appears in the list in a moment.";
|
|
13
|
+
readonly failed: "The automation could not be drafted. Try again.";
|
|
14
|
+
};
|
|
15
|
+
export interface AiAutomationBriefDialogProps {
|
|
16
|
+
open: boolean;
|
|
17
|
+
onClose: () => void;
|
|
18
|
+
orgId: string | undefined;
|
|
19
|
+
hostId: string;
|
|
20
|
+
/** Who is signed in, whose token the requests carry. */
|
|
21
|
+
user: Parameters<typeof useAiJobRun>[0];
|
|
22
|
+
/** Opens a listed action in the Actions editor; `false` when the list has not read it yet. */
|
|
23
|
+
openAction: (actionId: string) => boolean;
|
|
24
|
+
}
|
|
25
|
+
export declare function AiAutomationBriefDialog(props: AiAutomationBriefDialogProps): import("react").JSX.Element;
|
|
26
|
+
/**
|
|
27
|
+
* Renders nothing until the jobs route has answered for this workspace, and
|
|
28
|
+
* nothing when it says the feature is not this workspace's.
|
|
29
|
+
*/
|
|
30
|
+
export declare function AiDescribeAutomationButton({ hostId, orgId, openAction }: ConsoleHostAutomationsZoneProps): import("react").JSX.Element;
|
|
31
|
+
export default AiDescribeAutomationButton;
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
+
/**
|
|
4
|
+
* @license
|
|
5
|
+
* Copyright 2026 Aglyn LLC
|
|
6
|
+
*
|
|
7
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
8
|
+
* you may not use this file except in compliance with the License.
|
|
9
|
+
* You may obtain a copy of the License at
|
|
10
|
+
*
|
|
11
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
12
|
+
*
|
|
13
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
14
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
15
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
16
|
+
* See the License for the specific language governing permissions and
|
|
17
|
+
* limitations under the License.
|
|
18
|
+
*/ import { pluginDocsHelp } from "@aglyn/aglyn/app-utils/docs-help";
|
|
19
|
+
import { useUser } from "@aglyn/tenant-feature-instance";
|
|
20
|
+
import { Alert, Button, CircularProgress, Dialog, DialogActions, DialogContent, DialogTitle, Link, Stack, TextField, Typography } from "@mui/material";
|
|
21
|
+
import { useEffect, useState } from "react";
|
|
22
|
+
import { aiJobProblem, useAiJobRun, useAiJobsVerdict } from "./use-ai-job-run.js";
|
|
23
|
+
/**
|
|
24
|
+
* "Describe it" on the Automation page's Actions (AGL-2919), beside Add action
|
|
25
|
+
* and Recipes through the `hostAutomations` zone: a description becomes a
|
|
26
|
+
* `workflow` job that drafts one automation, switched off.
|
|
27
|
+
*
|
|
28
|
+
* The dialog follows the shared brief dialog's shape — one text box, what
|
|
29
|
+
* happens next, and the action that starts the job — and then follows the
|
|
30
|
+
* job, because an automation's draft needs no plan to confirm: when it is
|
|
31
|
+
* written, the dialog says what to fill in and opens it in the Actions editor.
|
|
32
|
+
*/ /** The longest description a job admits. */ const BRIEF_MAX_CHARS = 4000;
|
|
33
|
+
export const AI_AUTOMATION_BRIEF_COPY = {
|
|
34
|
+
title: 'Describe an automation',
|
|
35
|
+
briefLabel: 'What should happen, and when?',
|
|
36
|
+
placeholder: 'When someone submits the newsletter form, add them to the newsletter list, make them ' + 'a lead and send them a welcome email',
|
|
37
|
+
next: 'The automation is drafted switched off, using only the triggers and steps your plan ' + 'includes. Anything it needs that your site does not have yet is left for you to fill in.',
|
|
38
|
+
submit: 'Draft the automation',
|
|
39
|
+
started: 'The automation is being drafted. This can take a few minutes. You can close this ' + 'window: the draft appears in the list, switched off, when it is ready.',
|
|
40
|
+
drafted: 'Drafted',
|
|
41
|
+
review: 'Review it',
|
|
42
|
+
notListed: 'The draft is saved. It appears in the list in a moment.',
|
|
43
|
+
failed: 'The automation could not be drafted. Try again.'
|
|
44
|
+
};
|
|
45
|
+
export function AiAutomationBriefDialog(props) {
|
|
46
|
+
var _aiJobProblem;
|
|
47
|
+
const { open, onClose, orgId, hostId, user, openAction } = props;
|
|
48
|
+
const copy = AI_AUTOMATION_BRIEF_COPY;
|
|
49
|
+
const help = pluginDocsHelp('aiAutomations');
|
|
50
|
+
const [brief, setBrief] = useState('');
|
|
51
|
+
const [notListed, setNotListed] = useState(false);
|
|
52
|
+
const run = useAiJobRun(user, copy.failed);
|
|
53
|
+
const { job, starting, running, notice, reset } = run;
|
|
54
|
+
// Opening or closing starts over and stops following: a job still drafting
|
|
55
|
+
// carries on in AI jobs, and its draft appears in the list when it is written.
|
|
56
|
+
useEffect(()=>{
|
|
57
|
+
reset();
|
|
58
|
+
setNotListed(false);
|
|
59
|
+
}, [
|
|
60
|
+
open,
|
|
61
|
+
reset
|
|
62
|
+
]);
|
|
63
|
+
const draft = (job == null ? void 0 : job.status) === 'done' ? job.outputs.find((output)=>output.resource === 'workflow') : undefined;
|
|
64
|
+
const problem = (_aiJobProblem = aiJobProblem(job, copy.failed)) != null ? _aiJobProblem : (job == null ? void 0 : job.status) === 'done' && !draft ? copy.failed : null;
|
|
65
|
+
const asking = !job || Boolean(notice);
|
|
66
|
+
const start = async ()=>{
|
|
67
|
+
const trimmed = brief.trim();
|
|
68
|
+
if (!orgId || !trimmed) return;
|
|
69
|
+
setNotListed(false);
|
|
70
|
+
if (await run.start({
|
|
71
|
+
orgId,
|
|
72
|
+
hostId,
|
|
73
|
+
kind: 'workflow',
|
|
74
|
+
brief: trimmed,
|
|
75
|
+
inputs: {
|
|
76
|
+
mode: 'draft'
|
|
77
|
+
}
|
|
78
|
+
})) {
|
|
79
|
+
setBrief('');
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
const review = ()=>{
|
|
83
|
+
if (!draft) return;
|
|
84
|
+
if (openAction(draft.id)) onClose();
|
|
85
|
+
else setNotListed(true);
|
|
86
|
+
};
|
|
87
|
+
return /*#__PURE__*/ _jsxs(Dialog, {
|
|
88
|
+
open: open,
|
|
89
|
+
onClose: starting ? undefined : onClose,
|
|
90
|
+
fullWidth: true,
|
|
91
|
+
maxWidth: "sm",
|
|
92
|
+
children: [
|
|
93
|
+
/*#__PURE__*/ _jsx(DialogTitle, {
|
|
94
|
+
children: copy.title
|
|
95
|
+
}),
|
|
96
|
+
/*#__PURE__*/ _jsx(DialogContent, {
|
|
97
|
+
children: asking ? /*#__PURE__*/ _jsxs(Stack, {
|
|
98
|
+
spacing: 2,
|
|
99
|
+
sx: {
|
|
100
|
+
pt: 1
|
|
101
|
+
},
|
|
102
|
+
children: [
|
|
103
|
+
/*#__PURE__*/ _jsx(TextField, {
|
|
104
|
+
label: copy.briefLabel,
|
|
105
|
+
placeholder: copy.placeholder,
|
|
106
|
+
multiline: true,
|
|
107
|
+
minRows: 4,
|
|
108
|
+
value: brief,
|
|
109
|
+
onChange: (event)=>setBrief(event.target.value.slice(0, BRIEF_MAX_CHARS)),
|
|
110
|
+
helperText: `${brief.length.toLocaleString('en-US')} / ${BRIEF_MAX_CHARS.toLocaleString('en-US')}`,
|
|
111
|
+
disabled: starting,
|
|
112
|
+
autoFocus: true
|
|
113
|
+
}),
|
|
114
|
+
/*#__PURE__*/ _jsxs(Typography, {
|
|
115
|
+
variant: "body2",
|
|
116
|
+
color: "text.secondary",
|
|
117
|
+
children: [
|
|
118
|
+
copy.next,
|
|
119
|
+
' ',
|
|
120
|
+
/*#__PURE__*/ _jsx(Link, {
|
|
121
|
+
href: help.href,
|
|
122
|
+
target: "_blank",
|
|
123
|
+
rel: "noopener",
|
|
124
|
+
title: help.excerpt,
|
|
125
|
+
children: 'How it works'
|
|
126
|
+
})
|
|
127
|
+
]
|
|
128
|
+
}),
|
|
129
|
+
notice ? /*#__PURE__*/ _jsx(Alert, {
|
|
130
|
+
severity: "warning",
|
|
131
|
+
children: notice
|
|
132
|
+
}) : null
|
|
133
|
+
]
|
|
134
|
+
}) : /*#__PURE__*/ _jsxs(Stack, {
|
|
135
|
+
spacing: 2,
|
|
136
|
+
sx: {
|
|
137
|
+
pt: 1
|
|
138
|
+
},
|
|
139
|
+
children: [
|
|
140
|
+
running ? /*#__PURE__*/ _jsx(Alert, {
|
|
141
|
+
severity: "info",
|
|
142
|
+
icon: /*#__PURE__*/ _jsx(CircularProgress, {
|
|
143
|
+
size: 18,
|
|
144
|
+
"aria-label": "Drafting"
|
|
145
|
+
}),
|
|
146
|
+
children: copy.started
|
|
147
|
+
}) : null,
|
|
148
|
+
draft ? /*#__PURE__*/ _jsxs(Alert, {
|
|
149
|
+
severity: "success",
|
|
150
|
+
children: [
|
|
151
|
+
/*#__PURE__*/ _jsx(Typography, {
|
|
152
|
+
variant: "body2",
|
|
153
|
+
sx: {
|
|
154
|
+
fontWeight: 600
|
|
155
|
+
},
|
|
156
|
+
children: `${copy.drafted}: ${draft.label}`
|
|
157
|
+
}),
|
|
158
|
+
draft.note ? /*#__PURE__*/ _jsx(Typography, {
|
|
159
|
+
variant: "body2",
|
|
160
|
+
children: draft.note
|
|
161
|
+
}) : null
|
|
162
|
+
]
|
|
163
|
+
}) : null,
|
|
164
|
+
problem ? /*#__PURE__*/ _jsx(Alert, {
|
|
165
|
+
severity: (job == null ? void 0 : job.status) === 'failed' ? 'error' : 'warning',
|
|
166
|
+
children: problem
|
|
167
|
+
}) : null,
|
|
168
|
+
notListed ? /*#__PURE__*/ _jsx(Alert, {
|
|
169
|
+
severity: "info",
|
|
170
|
+
children: copy.notListed
|
|
171
|
+
}) : null
|
|
172
|
+
]
|
|
173
|
+
})
|
|
174
|
+
}),
|
|
175
|
+
/*#__PURE__*/ _jsxs(DialogActions, {
|
|
176
|
+
children: [
|
|
177
|
+
/*#__PURE__*/ _jsx(Button, {
|
|
178
|
+
onClick: onClose,
|
|
179
|
+
disabled: starting,
|
|
180
|
+
children: asking ? 'Cancel' : 'Close'
|
|
181
|
+
}),
|
|
182
|
+
asking ? /*#__PURE__*/ _jsx(Button, {
|
|
183
|
+
variant: "contained",
|
|
184
|
+
onClick: ()=>void start(),
|
|
185
|
+
disabled: starting || !orgId || !brief.trim(),
|
|
186
|
+
children: copy.submit
|
|
187
|
+
}) : draft ? /*#__PURE__*/ _jsx(Button, {
|
|
188
|
+
variant: "contained",
|
|
189
|
+
onClick: review,
|
|
190
|
+
children: copy.review
|
|
191
|
+
}) : null
|
|
192
|
+
]
|
|
193
|
+
})
|
|
194
|
+
]
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Renders nothing until the jobs route has answered for this workspace, and
|
|
199
|
+
* nothing when it says the feature is not this workspace's.
|
|
200
|
+
*/ export function AiDescribeAutomationButton({ hostId, orgId, openAction }) {
|
|
201
|
+
const { data: user } = useUser();
|
|
202
|
+
const verdict = useAiJobsVerdict(user, orgId);
|
|
203
|
+
const [open, setOpen] = useState(false);
|
|
204
|
+
if (verdict !== 'ready') return null;
|
|
205
|
+
return /*#__PURE__*/ _jsxs(_Fragment, {
|
|
206
|
+
children: [
|
|
207
|
+
/*#__PURE__*/ _jsx(Button, {
|
|
208
|
+
size: "small",
|
|
209
|
+
variant: "outlined",
|
|
210
|
+
onClick: ()=>setOpen(true),
|
|
211
|
+
children: 'Describe it'
|
|
212
|
+
}),
|
|
213
|
+
/*#__PURE__*/ _jsx(AiAutomationBriefDialog, {
|
|
214
|
+
open: open,
|
|
215
|
+
onClose: ()=>setOpen(false),
|
|
216
|
+
orgId: orgId,
|
|
217
|
+
hostId: hostId,
|
|
218
|
+
user: user,
|
|
219
|
+
openAction: openAction
|
|
220
|
+
})
|
|
221
|
+
]
|
|
222
|
+
});
|
|
223
|
+
}
|
|
224
|
+
export default AiDescribeAutomationButton;
|
|
225
|
+
|
|
226
|
+
//# sourceMappingURL=ai-describe-automation.component.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../../libs/plugins/ai/src/lib/components/ai-describe-automation.component.tsx"],"sourcesContent":["'use client'\n\n/**\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\nimport { pluginDocsHelp } from '@aglyn/aglyn/app-utils/docs-help'\nimport type { ConsoleHostAutomationsZoneProps } from '@aglyn/aglyn/plugin-manager/feature-plugins'\nimport { useUser } from '@aglyn/tenant-feature-instance'\nimport {\n Alert,\n Button,\n CircularProgress,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n Link,\n Stack,\n TextField,\n Typography,\n} from '@mui/material'\nimport { useEffect, useState } from 'react'\nimport { aiJobProblem, useAiJobRun, useAiJobsVerdict } from './use-ai-job-run'\n\n/**\n * \"Describe it\" on the Automation page's Actions (AGL-2919), beside Add action\n * and Recipes through the `hostAutomations` zone: a description becomes a\n * `workflow` job that drafts one automation, switched off.\n *\n * The dialog follows the shared brief dialog's shape — one text box, what\n * happens next, and the action that starts the job — and then follows the\n * job, because an automation's draft needs no plan to confirm: when it is\n * written, the dialog says what to fill in and opens it in the Actions editor.\n */\n\n/** The longest description a job admits. */\nconst BRIEF_MAX_CHARS = 4_000\n\nexport const AI_AUTOMATION_BRIEF_COPY = {\n title: 'Describe an automation',\n briefLabel: 'What should happen, and when?',\n placeholder:\n 'When someone submits the newsletter form, add them to the newsletter list, make them ' +\n 'a lead and send them a welcome email',\n next:\n 'The automation is drafted switched off, using only the triggers and steps your plan ' +\n 'includes. Anything it needs that your site does not have yet is left for you to fill in.',\n submit: 'Draft the automation',\n started:\n 'The automation is being drafted. This can take a few minutes. You can close this ' +\n 'window: the draft appears in the list, switched off, when it is ready.',\n drafted: 'Drafted',\n review: 'Review it',\n notListed: 'The draft is saved. It appears in the list in a moment.',\n failed: 'The automation could not be drafted. Try again.',\n} as const\n\nexport interface AiAutomationBriefDialogProps {\n open: boolean\n onClose: () => void\n orgId: string | undefined\n hostId: string\n /** Who is signed in, whose token the requests carry. */\n user: Parameters<typeof useAiJobRun>[0]\n /** Opens a listed action in the Actions editor; `false` when the list has not read it yet. */\n openAction: (actionId: string) => boolean\n}\n\nexport function AiAutomationBriefDialog(props: AiAutomationBriefDialogProps) {\n const { open, onClose, orgId, hostId, user, openAction } = props\n const copy = AI_AUTOMATION_BRIEF_COPY\n const help = pluginDocsHelp('aiAutomations')\n const [brief, setBrief] = useState('')\n const [notListed, setNotListed] = useState(false)\n const run = useAiJobRun(user, copy.failed)\n const { job, starting, running, notice, reset } = run\n\n // Opening or closing starts over and stops following: a job still drafting\n // carries on in AI jobs, and its draft appears in the list when it is written.\n useEffect(() => {\n reset()\n setNotListed(false)\n }, [open, reset])\n\n const draft = job?.status === 'done' ? job.outputs.find((output) => output.resource === 'workflow') : undefined\n const problem = aiJobProblem(job, copy.failed) ?? (job?.status === 'done' && !draft ? copy.failed : null)\n const asking = !job || Boolean(notice)\n\n const start = async () => {\n const trimmed = brief.trim()\n if (!orgId || !trimmed) return\n setNotListed(false)\n if (await run.start({ orgId, hostId, kind: 'workflow', brief: trimmed, inputs: { mode: 'draft' } })) {\n setBrief('')\n }\n }\n\n const review = () => {\n if (!draft) return\n if (openAction(draft.id)) onClose()\n else setNotListed(true)\n }\n\n return (\n <Dialog open={open} onClose={starting ? undefined : onClose} fullWidth maxWidth=\"sm\">\n <DialogTitle>{copy.title}</DialogTitle>\n <DialogContent>\n {asking ? (\n <Stack spacing={2} sx={{ pt: 1 }}>\n <TextField\n label={copy.briefLabel}\n placeholder={copy.placeholder}\n multiline\n minRows={4}\n value={brief}\n onChange={(event) => setBrief(event.target.value.slice(0, BRIEF_MAX_CHARS))}\n helperText={`${brief.length.toLocaleString('en-US')} / ${BRIEF_MAX_CHARS.toLocaleString('en-US')}`}\n disabled={starting}\n autoFocus\n />\n <Typography variant=\"body2\" color=\"text.secondary\">\n {copy.next}{' '}\n <Link href={help.href} target=\"_blank\" rel=\"noopener\" title={help.excerpt}>\n {'How it works'}\n </Link>\n </Typography>\n {notice ? <Alert severity=\"warning\">{notice}</Alert> : null}\n </Stack>\n ) : (\n <Stack spacing={2} sx={{ pt: 1 }}>\n {running ? (\n <Alert severity=\"info\" icon={<CircularProgress size={18} aria-label=\"Drafting\" />}>\n {copy.started}\n </Alert>\n ) : null}\n {draft ? (\n <Alert severity=\"success\">\n <Typography variant=\"body2\" sx={{ fontWeight: 600 }}>\n {`${copy.drafted}: ${draft.label}`}\n </Typography>\n {draft.note ? <Typography variant=\"body2\">{draft.note}</Typography> : null}\n </Alert>\n ) : null}\n {problem ? <Alert severity={job?.status === 'failed' ? 'error' : 'warning'}>{problem}</Alert> : null}\n {notListed ? <Alert severity=\"info\">{copy.notListed}</Alert> : null}\n </Stack>\n )}\n </DialogContent>\n <DialogActions>\n <Button onClick={onClose} disabled={starting}>\n {asking ? 'Cancel' : 'Close'}\n </Button>\n {asking ? (\n <Button\n variant=\"contained\"\n onClick={() => void start()}\n disabled={starting || !orgId || !brief.trim()}\n >\n {copy.submit}\n </Button>\n ) : draft ? (\n <Button variant=\"contained\" onClick={review}>\n {copy.review}\n </Button>\n ) : null}\n </DialogActions>\n </Dialog>\n )\n}\n\n/**\n * Renders nothing until the jobs route has answered for this workspace, and\n * nothing when it says the feature is not this workspace's.\n */\nexport function AiDescribeAutomationButton({ hostId, orgId, openAction }: ConsoleHostAutomationsZoneProps) {\n const { data: user } = useUser()\n const verdict = useAiJobsVerdict(user, orgId)\n const [open, setOpen] = useState(false)\n\n if (verdict !== 'ready') return null\n return (\n <>\n <Button size=\"small\" variant=\"outlined\" onClick={() => setOpen(true)}>\n {'Describe it'}\n </Button>\n <AiAutomationBriefDialog\n open={open}\n onClose={() => setOpen(false)}\n orgId={orgId}\n hostId={hostId}\n user={user}\n openAction={openAction}\n />\n </>\n )\n}\n\nexport default AiDescribeAutomationButton\n"],"names":["pluginDocsHelp","useUser","Alert","Button","CircularProgress","Dialog","DialogActions","DialogContent","DialogTitle","Link","Stack","TextField","Typography","useEffect","useState","aiJobProblem","useAiJobRun","useAiJobsVerdict","BRIEF_MAX_CHARS","AI_AUTOMATION_BRIEF_COPY","title","briefLabel","placeholder","next","submit","started","drafted","review","notListed","failed","AiAutomationBriefDialog","props","open","onClose","orgId","hostId","user","openAction","copy","help","brief","setBrief","setNotListed","run","job","starting","running","notice","reset","draft","status","outputs","find","output","resource","undefined","problem","asking","Boolean","start","trimmed","trim","kind","inputs","mode","id","fullWidth","maxWidth","spacing","sx","pt","label","multiline","minRows","value","onChange","event","target","slice","helperText","length","toLocaleString","disabled","autoFocus","variant","color","href","rel","excerpt","severity","icon","size","aria-label","fontWeight","note","onClick","AiDescribeAutomationButton","data","verdict","setOpen"],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2026 Aglyn LLC
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
import type { ConsoleHostComponentsZoneProps, ConsoleHostFormsZoneProps, ConsoleHostLayoutsZoneProps, ConsoleHostScreensZoneProps, ConsoleHostTemplatesZoneProps } from '@aglyn/aglyn/plugin-manager/feature-plugins';
|
|
18
|
+
import { type AiBriefKind } from './ai-brief-dialog.component';
|
|
19
|
+
export interface AiDescribeButtonProps extends ConsoleHostScreensZoneProps {
|
|
20
|
+
/** The job the brief starts: what the page the button sits on lists. */
|
|
21
|
+
kind: AiBriefKind;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Renders nothing until the jobs route has answered for this workspace: the
|
|
25
|
+
* shell decided the plan, the member's permission and the site's AI switch
|
|
26
|
+
* before mounting it, and the release flag is the route's to decide, so a 404
|
|
27
|
+
* or a 403 there is this control staying absent. A lockdown is the start
|
|
28
|
+
* door's to say, in the dialog, in its own words.
|
|
29
|
+
*/
|
|
30
|
+
export declare function AiDescribeButton({ kind, hostId, orgId }: AiDescribeButtonProps): import("react").JSX.Element;
|
|
31
|
+
/** A page template from a brief, on the Templates page (`hostTemplates`). */
|
|
32
|
+
export declare function AiDescribeTemplateButton(props: ConsoleHostTemplatesZoneProps): import("react").JSX.Element;
|
|
33
|
+
/** A layout from a brief, on the Layouts page (`hostLayouts`). */
|
|
34
|
+
export declare function AiDescribeLayoutButton(props: ConsoleHostLayoutsZoneProps): import("react").JSX.Element;
|
|
35
|
+
/** A form from a brief, on the Forms page (`hostForms`). */
|
|
36
|
+
export declare function AiDescribeFormButton(props: ConsoleHostFormsZoneProps): import("react").JSX.Element;
|
|
37
|
+
/** A reusable component from a brief, on the Components page (`hostComponents`). */
|
|
38
|
+
export declare function AiDescribeComponentButton(props: ConsoleHostComponentsZoneProps): import("react").JSX.Element;
|
|
39
|
+
export default AiDescribeButton;
|