@aglyn/plugins-ai 1.0.0-beta.229 → 1.0.0-beta.231
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/README.md +3 -3
- package/package.json +17 -17
- package/src/lib/activity/ai-activity-actions.js +7 -1
- package/src/lib/activity/ai-activity-actions.js.map +1 -1
- package/src/lib/components/ai-assist-provider-on-host.component.d.ts +66 -0
- package/src/lib/components/ai-assist-provider-on-host.component.js +78 -0
- package/src/lib/components/ai-assist-provider-on-host.component.js.map +1 -0
- package/src/lib/components/ai-assist-provider.component.js +9 -10
- package/src/lib/components/ai-assist-provider.component.js.map +1 -1
- package/src/lib/components/ai-automation-zones.d.ts +38 -0
- package/src/lib/components/ai-automation-zones.js +5 -1
- package/src/lib/components/ai-automation-zones.js.map +1 -1
- package/src/lib/components/ai-brief-dialog.component.d.ts +20 -2
- package/src/lib/components/ai-brief-dialog.component.js +87 -8
- package/src/lib/components/ai-brief-dialog.component.js.map +1 -1
- package/src/lib/components/ai-campaign-create.component.d.ts +54 -0
- package/src/lib/components/ai-campaign-create.component.js +270 -0
- package/src/lib/components/ai-campaign-create.component.js.map +1 -0
- package/src/lib/components/ai-describe-automation.component.d.ts +8 -3
- package/src/lib/components/ai-describe-automation.component.js +15 -6
- package/src/lib/components/ai-describe-automation.component.js.map +1 -1
- package/src/lib/components/ai-describe-button.component.d.ts +20 -8
- package/src/lib/components/ai-describe-button.component.js +19 -36
- package/src/lib/components/ai-describe-button.component.js.map +1 -1
- package/src/lib/components/ai-describe-email.component.d.ts +31 -0
- package/src/lib/components/ai-describe-email.component.js +22 -0
- package/src/lib/components/ai-describe-email.component.js.map +1 -0
- package/src/lib/components/ai-describe-org-automation.component.d.ts +36 -0
- package/src/lib/components/ai-describe-org-automation.component.js +238 -0
- package/src/lib/components/ai-describe-org-automation.component.js.map +1 -0
- package/src/lib/components/ai-experiment-cards.component.d.ts +9 -1
- package/src/lib/components/ai-experiment-cards.component.js +104 -18
- package/src/lib/components/ai-experiment-cards.component.js.map +1 -1
- package/src/lib/components/ai-explain-automation.component.js +1 -5
- package/src/lib/components/ai-explain-automation.component.js.map +1 -1
- package/src/lib/components/ai-funnel-zones.component.d.ts +61 -0
- package/src/lib/components/ai-funnel-zones.component.js +178 -0
- package/src/lib/components/ai-funnel-zones.component.js.map +1 -0
- package/src/lib/components/ai-insight-card.component.d.ts +42 -0
- package/src/lib/components/ai-insight-card.component.js +137 -0
- package/src/lib/components/ai-insight-card.component.js.map +1 -0
- package/src/lib/components/ai-insight-dialog.component.d.ts +6 -0
- package/src/lib/components/ai-insight-dialog.component.js +9 -3
- package/src/lib/components/ai-insight-dialog.component.js.map +1 -1
- package/src/lib/components/ai-job-plan.component.d.ts +7 -2
- package/src/lib/components/ai-job-plan.component.js +38 -6
- package/src/lib/components/ai-job-plan.component.js.map +1 -1
- package/src/lib/components/ai-job-requests.d.ts +17 -1
- package/src/lib/components/ai-job-requests.js +39 -3
- package/src/lib/components/ai-job-requests.js.map +1 -1
- package/src/lib/components/ai-logic-zones.d.ts +64 -0
- package/src/lib/components/ai-logic-zones.js +18 -0
- package/src/lib/components/ai-logic-zones.js.map +1 -0
- package/src/lib/components/ai-logic.component.d.ts +77 -0
- package/src/lib/components/ai-logic.component.js +553 -0
- package/src/lib/components/ai-logic.component.js.map +1 -0
- package/src/lib/components/ai-marketing-insight.component.d.ts +30 -0
- package/src/lib/components/ai-marketing-insight.component.js +80 -0
- package/src/lib/components/ai-marketing-insight.component.js.map +1 -0
- package/src/lib/components/ai-media-create.component.d.ts +55 -0
- package/src/lib/components/ai-media-create.component.js +433 -0
- package/src/lib/components/ai-media-create.component.js.map +1 -0
- package/src/lib/components/ai-overlay-cards.component.d.ts +83 -0
- package/src/lib/components/ai-overlay-cards.component.js +505 -0
- package/src/lib/components/ai-overlay-cards.component.js.map +1 -0
- package/src/lib/components/ai-permissions-on-host.component.d.ts +3 -46
- package/src/lib/components/ai-permissions-on-host.component.js +5 -53
- package/src/lib/components/ai-permissions-on-host.component.js.map +1 -1
- package/src/lib/components/ai-product-zones.d.ts +5 -0
- package/src/lib/components/ai-product-zones.js +1 -1
- package/src/lib/components/ai-product-zones.js.map +1 -1
- package/src/lib/components/ai-products-create-button.component.d.ts +42 -0
- package/src/lib/components/ai-products-create-button.component.js +67 -0
- package/src/lib/components/ai-products-create-button.component.js.map +1 -0
- package/src/lib/components/ai-products-hub-card.component.js +100 -81
- package/src/lib/components/ai-products-hub-card.component.js.map +1 -1
- package/src/lib/components/ai-revise-automation.component.d.ts +16 -0
- package/src/lib/components/ai-revise-automation.component.js +207 -0
- package/src/lib/components/ai-revise-automation.component.js.map +1 -0
- package/src/lib/components/ai-site-build-page.component.js +160 -24
- package/src/lib/components/ai-site-build-page.component.js.map +1 -1
- package/src/lib/components/ai-upsell-dialog.component.d.ts +53 -0
- package/src/lib/components/ai-upsell-dialog.component.js +177 -0
- package/src/lib/components/ai-upsell-dialog.component.js.map +1 -0
- package/src/lib/components/assist-build-card.component.d.ts +42 -0
- package/src/lib/components/assist-build-card.component.js +183 -0
- package/src/lib/components/assist-build-card.component.js.map +1 -0
- package/src/lib/components/assist-edit-canvas.d.ts +2 -0
- package/src/lib/components/assist-edit-canvas.js +56 -1
- package/src/lib/components/assist-edit-canvas.js.map +1 -1
- package/src/lib/components/assist-jobs-drawer.component.js +48 -3
- package/src/lib/components/assist-jobs-drawer.component.js.map +1 -1
- package/src/lib/components/assist-panel.component.js +51 -2
- package/src/lib/components/assist-panel.component.js.map +1 -1
- package/src/lib/components/use-ai-job-run.d.ts +3 -14
- package/src/lib/components/use-ai-job-run.js +0 -50
- package/src/lib/components/use-ai-job-run.js.map +1 -1
- package/src/lib/jobs/ai-build-capabilities.d.ts +58 -0
- package/src/lib/jobs/ai-build-capabilities.js +256 -0
- package/src/lib/jobs/ai-build-capabilities.js.map +1 -0
- package/src/lib/jobs/ai-build-unit-outcome.d.ts +52 -0
- package/src/lib/jobs/ai-build-unit-outcome.js +140 -0
- package/src/lib/jobs/ai-build-unit-outcome.js.map +1 -0
- package/src/lib/jobs/ai-job-auto-confirm.d.ts +8 -0
- package/src/lib/jobs/ai-job-auto-confirm.js +30 -6
- package/src/lib/jobs/ai-job-auto-confirm.js.map +1 -1
- package/src/lib/jobs/ai-job-build-step.d.ts +144 -0
- package/src/lib/jobs/ai-job-build-step.js +668 -0
- package/src/lib/jobs/ai-job-build-step.js.map +1 -0
- package/src/lib/jobs/ai-job-draft-ids.js +9 -1
- package/src/lib/jobs/ai-job-draft-ids.js.map +1 -1
- package/src/lib/jobs/ai-job-drafts.d.ts +14 -4
- package/src/lib/jobs/ai-job-drafts.js +25 -4
- package/src/lib/jobs/ai-job-drafts.js.map +1 -1
- package/src/lib/jobs/ai-job-generation.d.ts +8 -0
- package/src/lib/jobs/ai-job-generation.js +13 -2
- package/src/lib/jobs/ai-job-generation.js.map +1 -1
- package/src/lib/jobs/ai-job-insight-step.js +8 -1
- package/src/lib/jobs/ai-job-insight-step.js.map +1 -1
- package/src/lib/jobs/ai-job-layout-language.d.ts +73 -0
- package/src/lib/jobs/ai-job-layout-language.js +194 -0
- package/src/lib/jobs/ai-job-layout-language.js.map +1 -0
- package/src/lib/jobs/ai-job-layout-site-pages.d.ts +13 -2
- package/src/lib/jobs/ai-job-layout-site-pages.js +18 -2
- package/src/lib/jobs/ai-job-layout-site-pages.js.map +1 -1
- package/src/lib/jobs/ai-job-layout-step.d.ts +5 -0
- package/src/lib/jobs/ai-job-layout-step.js +105 -5
- package/src/lib/jobs/ai-job-layout-step.js.map +1 -1
- package/src/lib/jobs/ai-job-logic-step.d.ts +107 -0
- package/src/lib/jobs/ai-job-logic-step.js +395 -0
- package/src/lib/jobs/ai-job-logic-step.js.map +1 -0
- package/src/lib/jobs/ai-job-overlay-copy.d.ts +70 -0
- package/src/lib/jobs/ai-job-overlay-copy.js +178 -0
- package/src/lib/jobs/ai-job-overlay-copy.js.map +1 -0
- package/src/lib/jobs/ai-job-page-language.d.ts +149 -0
- package/src/lib/jobs/ai-job-page-language.js +355 -0
- package/src/lib/jobs/ai-job-page-language.js.map +1 -0
- package/src/lib/jobs/ai-job-page-sections.d.ts +37 -1
- package/src/lib/jobs/ai-job-page-sections.js +93 -11
- package/src/lib/jobs/ai-job-page-sections.js.map +1 -1
- package/src/lib/jobs/ai-job-page-step.d.ts +4 -4
- package/src/lib/jobs/ai-job-page-step.js +111 -20
- package/src/lib/jobs/ai-job-page-step.js.map +1 -1
- package/src/lib/jobs/ai-job-plan-step.d.ts +27 -2
- package/src/lib/jobs/ai-job-plan-step.js +87 -13
- package/src/lib/jobs/ai-job-plan-step.js.map +1 -1
- package/src/lib/jobs/ai-job-site-step.d.ts +19 -1
- package/src/lib/jobs/ai-job-site-step.js +220 -61
- package/src/lib/jobs/ai-job-site-step.js.map +1 -1
- package/src/lib/jobs/ai-job-text-step.d.ts +22 -1
- package/src/lib/jobs/ai-job-text-step.js +12 -0
- package/src/lib/jobs/ai-job-text-step.js.map +1 -1
- package/src/lib/jobs/ai-job-workflow-step.d.ts +54 -4
- package/src/lib/jobs/ai-job-workflow-step.js +320 -15
- package/src/lib/jobs/ai-job-workflow-step.js.map +1 -1
- package/src/lib/jobs/ai-jobs.d.ts +80 -2
- package/src/lib/jobs/ai-jobs.js +391 -18
- package/src/lib/jobs/ai-jobs.js.map +1 -1
- package/src/lib/jobs/ai-layout-full-height.d.ts +40 -0
- package/src/lib/jobs/ai-layout-full-height.js +82 -0
- package/src/lib/jobs/ai-layout-full-height.js.map +1 -0
- package/src/lib/jobs/ai-layout-site-facts.d.ts +54 -0
- package/src/lib/jobs/ai-layout-site-facts.js +153 -0
- package/src/lib/jobs/ai-layout-site-facts.js.map +1 -0
- package/src/lib/jobs/ai-logic-records.d.ts +40 -0
- package/src/lib/jobs/ai-logic-records.js +55 -0
- package/src/lib/jobs/ai-logic-records.js.map +1 -0
- package/src/lib/jobs/ai-site-publish.d.ts +7 -0
- package/src/lib/jobs/ai-site-publish.js +9 -0
- package/src/lib/jobs/ai-site-publish.js.map +1 -1
- package/src/lib/jobs/ai-workflow-records.d.ts +4 -0
- package/src/lib/jobs/ai-workflow-records.js +40 -1
- package/src/lib/jobs/ai-workflow-records.js.map +1 -1
- package/src/lib/layout-language/ai-layout-compiler.d.ts +145 -0
- package/src/lib/layout-language/ai-layout-compiler.js +1148 -0
- package/src/lib/layout-language/ai-layout-compiler.js.map +1 -0
- package/src/lib/layout-language/ai-layout-copy.d.ts +73 -0
- package/src/lib/layout-language/ai-layout-copy.js +137 -0
- package/src/lib/layout-language/ai-layout-copy.js.map +1 -0
- package/src/lib/layout-language/ai-layout-frame.d.ts +52 -0
- package/src/lib/layout-language/ai-layout-frame.js +457 -0
- package/src/lib/layout-language/ai-layout-frame.js.map +1 -0
- package/src/lib/layout-language/ai-layout-gaps.d.ts +63 -0
- package/src/lib/layout-language/ai-layout-gaps.js +345 -0
- package/src/lib/layout-language/ai-layout-gaps.js.map +1 -0
- package/src/lib/layout-language/ai-layout-language.d.ts +161 -0
- package/src/lib/layout-language/ai-layout-language.js +446 -0
- package/src/lib/layout-language/ai-layout-language.js.map +1 -0
- package/src/lib/layout-language/ai-layout-links.d.ts +80 -0
- package/src/lib/layout-language/ai-layout-links.js +109 -0
- package/src/lib/layout-language/ai-layout-links.js.map +1 -0
- package/src/lib/layout-language/ai-layout-store.d.ts +39 -0
- package/src/lib/layout-language/ai-layout-store.js +69 -0
- package/src/lib/layout-language/ai-layout-store.js.map +1 -0
- package/src/lib/layout-language/ai-layout-tree.d.ts +59 -0
- package/src/lib/layout-language/ai-layout-tree.js +84 -0
- package/src/lib/layout-language/ai-layout-tree.js.map +1 -0
- package/src/lib/lazy-widget.d.ts +45 -0
- package/src/lib/lazy-widget.js +53 -0
- package/src/lib/lazy-widget.js.map +1 -0
- package/src/lib/model/ai-automation-draft.d.ts +18 -0
- package/src/lib/model/ai-automation-draft.js +86 -0
- package/src/lib/model/ai-automation-draft.js.map +1 -1
- package/src/lib/model/ai-build-job.d.ts +201 -0
- package/src/lib/model/ai-build-job.js +472 -0
- package/src/lib/model/ai-build-job.js.map +1 -0
- package/src/lib/model/ai-build-plan.d.ts +61 -0
- package/src/lib/model/ai-build-plan.js +154 -9
- package/src/lib/model/ai-build-plan.js.map +1 -1
- package/src/lib/model/ai-build-progress.d.ts +73 -0
- package/src/lib/model/ai-build-progress.js +170 -0
- package/src/lib/model/ai-build-progress.js.map +1 -0
- package/src/lib/model/ai-host-publish-context.d.ts +51 -0
- package/src/lib/model/ai-host-publish-context.js +104 -0
- package/src/lib/model/ai-host-publish-context.js.map +1 -0
- package/src/lib/model/ai-insight.d.ts +20 -10
- package/src/lib/model/ai-insight.js +72 -9
- package/src/lib/model/ai-insight.js.map +1 -1
- package/src/lib/model/ai-job-activity.d.ts +22 -0
- package/src/lib/model/ai-job-activity.js +25 -2
- package/src/lib/model/ai-job-activity.js.map +1 -1
- package/src/lib/model/ai-job-failure-copy.d.ts +38 -1
- package/src/lib/model/ai-job-failure-copy.js +56 -1
- package/src/lib/model/ai-job-failure-copy.js.map +1 -1
- package/src/lib/model/ai-job-notice.d.ts +3 -1
- package/src/lib/model/ai-job-notice.js +31 -9
- package/src/lib/model/ai-job-notice.js.map +1 -1
- package/src/lib/model/ai-jobs.types.d.ts +99 -2
- package/src/lib/model/ai-jobs.types.js +3 -1
- package/src/lib/model/ai-jobs.types.js.map +1 -1
- package/src/lib/model/ai-logic-job.d.ts +108 -0
- package/src/lib/model/ai-logic-job.js +327 -0
- package/src/lib/model/ai-logic-job.js.map +1 -0
- package/src/lib/model/ai-media-credits.d.ts +52 -0
- package/src/lib/model/ai-media-credits.js +61 -0
- package/src/lib/model/ai-media-credits.js.map +1 -0
- package/src/lib/model/ai-overlay-copy.d.ts +114 -0
- package/src/lib/model/ai-overlay-copy.js +175 -0
- package/src/lib/model/ai-overlay-copy.js.map +1 -0
- package/src/lib/model/ai-site-build-progress.d.ts +25 -4
- package/src/lib/model/ai-site-build-progress.js +194 -11
- package/src/lib/model/ai-site-build-progress.js.map +1 -1
- package/src/lib/model/ai-site-job.d.ts +8 -0
- package/src/lib/model/ai-site-job.js +9 -0
- package/src/lib/model/ai-site-job.js.map +1 -1
- package/src/lib/model/ai-site-start-seo.d.ts +1 -1
- package/src/lib/model/ai-site-start.d.ts +5 -2
- package/src/lib/model/ai-site-start.js +5 -2
- package/src/lib/model/ai-site-start.js.map +1 -1
- package/src/lib/model/ai-svg.d.ts +69 -0
- package/src/lib/model/ai-svg.js +265 -0
- package/src/lib/model/ai-svg.js.map +1 -0
- package/src/lib/model/ai-usage-by-user.d.ts +3 -2
- package/src/lib/model/ai-usage-by-user.js.map +1 -1
- package/src/lib/model/ai-workflow-job.d.ts +92 -4
- package/src/lib/model/ai-workflow-job.js +124 -7
- package/src/lib/model/ai-workflow-job.js.map +1 -1
- package/src/lib/model/assist-build.d.ts +58 -0
- package/src/lib/model/assist-build.js +52 -0
- package/src/lib/model/assist-build.js.map +1 -0
- package/src/lib/model/assist-edit.d.ts +48 -3
- package/src/lib/model/assist-edit.js +48 -4
- package/src/lib/model/assist-edit.js.map +1 -1
- package/src/lib/plugin-config.js +2 -0
- package/src/lib/plugin-config.js.map +1 -1
- package/src/lib/plugin.js +308 -47
- package/src/lib/plugin.js.map +1 -1
- package/src/lib/providers/catalog.d.ts +82 -5
- package/src/lib/providers/catalog.js +83 -12
- package/src/lib/providers/catalog.js.map +1 -1
- package/src/lib/providers/image-contract.d.ts +116 -0
- package/src/lib/providers/image-contract.js +74 -0
- package/src/lib/providers/image-contract.js.map +1 -0
- package/src/lib/providers/model-choice.js +11 -0
- package/src/lib/providers/model-choice.js.map +1 -1
- package/src/lib/providers/routing.js +18 -0
- package/src/lib/providers/routing.js.map +1 -1
- package/src/lib/providers/vertex-image.d.ts +121 -0
- package/src/lib/providers/vertex-image.js +312 -0
- package/src/lib/providers/vertex-image.js.map +1 -0
- package/src/lib/runtime/ai-doctrine-validators.d.ts +101 -0
- package/src/lib/runtime/ai-doctrine-validators.js +525 -4
- package/src/lib/runtime/ai-doctrine-validators.js.map +1 -1
- package/src/lib/runtime/ai-doctrine.js +21 -6
- package/src/lib/runtime/ai-doctrine.js.map +1 -1
- package/src/lib/runtime/ai-eval-live.js +4 -0
- package/src/lib/runtime/ai-eval-live.js.map +1 -1
- package/src/lib/runtime/ai-eval.d.ts +15 -1
- package/src/lib/runtime/ai-eval.js +52 -1
- package/src/lib/runtime/ai-eval.js.map +1 -1
- package/src/lib/runtime/ai-icon-library.d.ts +257 -0
- package/src/lib/runtime/ai-icon-library.js +254 -0
- package/src/lib/runtime/ai-icon-library.js.map +1 -0
- package/src/lib/runtime/ai-node-tree.d.ts +9 -0
- package/src/lib/runtime/ai-node-tree.js +30 -4
- package/src/lib/runtime/ai-node-tree.js.map +1 -1
- package/src/lib/runtime/ai-palette.d.ts +6 -0
- package/src/lib/runtime/ai-palette.generated.js +70 -0
- package/src/lib/runtime/ai-palette.generated.js.map +1 -1
- package/src/lib/runtime/ai-palette.js.map +1 -1
- package/src/lib/runtime/experiment-variant-copy.d.ts +34 -0
- package/src/lib/runtime/experiment-variant-copy.js +102 -0
- package/src/lib/runtime/experiment-variant-copy.js.map +1 -0
- package/src/lib/server/ai-experiment-versions.d.ts +51 -0
- package/src/lib/server/ai-experiment-versions.js +270 -0
- package/src/lib/server/ai-experiment-versions.js.map +1 -0
- package/src/lib/server/ai-jobs-resume.js +74 -4
- package/src/lib/server/ai-jobs-resume.js.map +1 -1
- package/src/lib/server/ai-media-image.d.ts +66 -0
- package/src/lib/server/ai-media-image.js +521 -0
- package/src/lib/server/ai-media-image.js.map +1 -0
- package/src/lib/server/ai-media-svg.d.ts +91 -0
- package/src/lib/server/ai-media-svg.js +186 -0
- package/src/lib/server/ai-media-svg.js.map +1 -0
- package/src/lib/server/assist-build.d.ts +54 -0
- package/src/lib/server/assist-build.js +121 -0
- package/src/lib/server/assist-build.js.map +1 -0
- package/src/lib/server/assist-chat.js +108 -12
- package/src/lib/server/assist-chat.js.map +1 -1
- package/src/lib/server/assist-edit.js +213 -3
- package/src/lib/server/assist-edit.js.map +1 -1
- package/src/lib/server/assist-view-context.js +242 -4
- package/src/lib/server/assist-view-context.js.map +1 -1
- package/src/lib/server.js +26 -0
- package/src/lib/server.js.map +1 -1
- package/src/lib/tools/ai-logic-tool.d.ts +27 -0
- package/src/lib/tools/ai-logic-tool.js +207 -0
- package/src/lib/tools/ai-logic-tool.js.map +1 -0
- package/src/lib/tools/ai-overlay-tool.d.ts +35 -0
- package/src/lib/tools/ai-overlay-tool.js +107 -0
- package/src/lib/tools/ai-overlay-tool.js.map +1 -0
- package/src/lib/tools/ai-workflow-tool.d.ts +17 -2
- package/src/lib/tools/ai-workflow-tool.js +47 -14
- package/src/lib/tools/ai-workflow-tool.js.map +1 -1
- package/src/lib/usage/assist-job-refund.d.ts +28 -1
- package/src/lib/usage/assist-job-refund.js +44 -9
- package/src/lib/usage/assist-job-refund.js.map +1 -1
- package/src/lib/usage/assist-usage.d.ts +5 -0
- package/src/lib/usage/assist-usage.js +2 -0
- package/src/lib/usage/assist-usage.js.map +1 -1
|
@@ -17,7 +17,9 @@ import { _ as _extends } from "@swc/helpers/_/_extends";
|
|
|
17
17
|
*/ import { resolveEffectivePlan } from "@aglyn/aglyn/app-utils/plan-entitlements";
|
|
18
18
|
import { resolveOrgIdForHost } from "@aglyn/tenant-data-admin/server/organizations";
|
|
19
19
|
import { isAiPlanNewRef } from "../model/ai-build-plan.js";
|
|
20
|
-
import {
|
|
20
|
+
import { aiBuildDegradation, aiBuildInitialLedger, aiBuildItemDelivered, aiBuildItemOpen, aiBuildNextUnit } from "../model/ai-build-job.js";
|
|
21
|
+
import { aiBuildBuiltRefs, aiUnitErrorRetryable, aiUnitFailure, aiUnitSpend } from "./ai-build-unit-outcome.js";
|
|
22
|
+
import { AI_SITE_EMAIL_TYPE, AI_SITE_MAX_SECTIONS, AI_SITE_PAGES, aiSiteNameSentence, aiSitePagesRefusal, aiSitePlanRefusal, aiSiteSubmissions, aiSiteWords, parseAiSiteJobInputs } from "../model/ai-site-job.js";
|
|
21
23
|
import { AI_SITE_SEO_OUTPUT_ID, aiSiteSeoProposalForInputs } from "../model/ai-site-start-seo.js";
|
|
22
24
|
import { aiModelForStep } from "../providers/routing.js";
|
|
23
25
|
import { registerAiJobAdmission } from "./ai-job-admission.js";
|
|
@@ -25,6 +27,7 @@ import { aiOriginJobId, aiRecordedJobDraftId } from "./ai-job-draft-ids.js";
|
|
|
25
27
|
import { readAiDraftNodes } from "./ai-job-drafts.js";
|
|
26
28
|
import { AI_LAYOUT_SITE_PAGES_INPUT, aiLayoutSitePagesOfPlan } from "./ai-job-layout-site-pages.js";
|
|
27
29
|
import { aiPageSectionNodeId } from "./ai-job-page-sections.js";
|
|
30
|
+
import { AI_LAYOUT_FORM_PAGE_INPUT, AI_LAYOUT_LANGUAGE_INPUT, aiLayoutFormPageOfPlan } from "./ai-job-page-language.js";
|
|
28
31
|
import { aiJobPublishesSite, aiPublishGuidedSite } from "./ai-site-publish.js";
|
|
29
32
|
import { aiConfirmedPlan, aiUnspentOutcome } from "./ai-job-generation.js";
|
|
30
33
|
import { AI_JOB_BRIEF_MAX_CHARS } from "./ai-job-text-step.js";
|
|
@@ -232,6 +235,10 @@ export const AI_SITE_NO_PLAN_COPY = 'This site job has no confirmed plan to buil
|
|
|
232
235
|
* guided start writes it into the brief itself, but an agency batch's brief
|
|
233
236
|
* is a member's own sentence and may never mention it, and a theme, a layout
|
|
234
237
|
* or a form asked to serve nobody in particular serves nobody in particular.
|
|
238
|
+
*
|
|
239
|
+
* The name is said twice (AGL-3596): as a field, and as the instruction to use
|
|
240
|
+
* it as written. A layout told only "a dog groomer in Austin" put a business
|
|
241
|
+
* name of its own in the header and the footer.
|
|
235
242
|
*/ export function aiSiteBriefLines(brief, inputs) {
|
|
236
243
|
const lines = [
|
|
237
244
|
brief.trim()
|
|
@@ -244,6 +251,7 @@ export const AI_SITE_NO_PLAN_COPY = 'This site job has no confirmed plan to buil
|
|
|
244
251
|
inputs.brand ? `brand: ${inputs.brand}` : ''
|
|
245
252
|
].filter(Boolean);
|
|
246
253
|
lines.push(`Site — ${site.join('; ')}.`);
|
|
254
|
+
if (inputs.businessName) lines.push(aiSiteNameSentence(inputs.businessName));
|
|
247
255
|
return lines;
|
|
248
256
|
}
|
|
249
257
|
/**
|
|
@@ -373,10 +381,21 @@ export const AI_SITE_NO_PLAN_COPY = 'This site job has no confirmed plan to buil
|
|
|
373
381
|
});
|
|
374
382
|
// The layout is built before the pages, so it is told them (AGL-3596): their
|
|
375
383
|
// ids are minted on the plan, and the platform writes the header's links.
|
|
376
|
-
|
|
377
|
-
|
|
384
|
+
// A page is told them too, so its buttons may go to a page built after it.
|
|
385
|
+
if (job.kind === 'site' && (unit.kind === 'layout' || unit.kind === 'page')) {
|
|
386
|
+
// A guided start links every page the person asked for (AGL-3660).
|
|
387
|
+
const pages = aiLayoutSitePagesOfPlan(plan.screens, {
|
|
388
|
+
guided: true
|
|
389
|
+
});
|
|
378
390
|
if (pages.length) unitInputs[AI_LAYOUT_SITE_PAGES_INPUT] = pages;
|
|
379
391
|
}
|
|
392
|
+
// A site's pages and its layout are designed in the layout language and
|
|
393
|
+
// compiled (AGL-3660), and a page is told which page places the site's form.
|
|
394
|
+
if (unit.kind === 'layout' || unit.kind === 'page') {
|
|
395
|
+
unitInputs[AI_LAYOUT_LANGUAGE_INPUT] = true;
|
|
396
|
+
const formPage = aiLayoutFormPageOfPlan(plan);
|
|
397
|
+
if (formPage) unitInputs[AI_LAYOUT_FORM_PAGE_INPUT] = formPage;
|
|
398
|
+
}
|
|
380
399
|
return _extends({}, job, {
|
|
381
400
|
$id: aiSiteUnitJobId(job, unit),
|
|
382
401
|
kind: unit.jobKind,
|
|
@@ -518,37 +537,63 @@ export const AI_SITE_NO_PLAN_COPY = 'This site job has no confirmed plan to buil
|
|
|
518
537
|
if (!stored) return false;
|
|
519
538
|
return input.screen.sections.every((_, index)=>aiPageSectionNodeId(input.unitJobId, index) in stored.nodes);
|
|
520
539
|
}
|
|
540
|
+
/**
|
|
541
|
+
* A scaffold's units as a build's (AGL-3616): the same slots, each unit's
|
|
542
|
+
* kind as its operation, and every page built after the layout and the form
|
|
543
|
+
* it renders inside and places. What the build's ledger, degradation and
|
|
544
|
+
* Try again read, so a site is settled item by item exactly as a build is.
|
|
545
|
+
*/ export function aiSiteLedgerUnits(units) {
|
|
546
|
+
const creations = units.filter((unit)=>unit.kind === 'layout' || unit.kind === 'form').map((unit)=>unit.slot);
|
|
547
|
+
return units.map((unit)=>_extends({
|
|
548
|
+
slot: unit.slot,
|
|
549
|
+
op: unit.kind === 'theme' ? 'theme' : unit.jobKind,
|
|
550
|
+
label: unit.label
|
|
551
|
+
}, unit.creation ? {
|
|
552
|
+
creation: unit.creation
|
|
553
|
+
} : {}, unit.screen ? {
|
|
554
|
+
screen: unit.screen
|
|
555
|
+
} : {}, {
|
|
556
|
+
deps: unit.kind === 'page' ? creations : []
|
|
557
|
+
}));
|
|
558
|
+
}
|
|
559
|
+
/**
|
|
560
|
+
* A scaffold's ledger to start from (AGL-3616): every unit pending, except
|
|
561
|
+
* the units a job already running when the ledger arrived had built, read
|
|
562
|
+
* off its outputs as the scaffold always read them, which stand as built.
|
|
563
|
+
*/ export function aiSiteInitialLedger(units, outputs) {
|
|
564
|
+
var _byResource_get;
|
|
565
|
+
const pending = new Set(aiSitePendingUnits(units, outputs).map((unit)=>unit.slot));
|
|
566
|
+
const byResource = new Map();
|
|
567
|
+
for (const output of outputs)byResource.set(output.resource, [
|
|
568
|
+
...(_byResource_get = byResource.get(output.resource)) != null ? _byResource_get : [],
|
|
569
|
+
output.id
|
|
570
|
+
]);
|
|
571
|
+
return aiBuildInitialLedger(aiSiteLedgerUnits(units)).map((row, index)=>{
|
|
572
|
+
var _byResource_get;
|
|
573
|
+
const unit = units[index];
|
|
574
|
+
if (pending.has(unit.slot)) return row;
|
|
575
|
+
const id = (_byResource_get = byResource.get(unit.resource)) == null ? void 0 : _byResource_get.shift();
|
|
576
|
+
return _extends({}, row, {
|
|
577
|
+
status: 'succeeded',
|
|
578
|
+
outputs: id ? [
|
|
579
|
+
id
|
|
580
|
+
] : []
|
|
581
|
+
});
|
|
582
|
+
});
|
|
583
|
+
}
|
|
584
|
+
/** The units a scaffold owes on this job: what its plan implies that this deployment can build. */ function aiSiteOwedUnits(job, plan, inputs, freeTaste, runnerFor) {
|
|
585
|
+
return aiSiteJobUnits(plan, {
|
|
586
|
+
welcomeEmail: aiSiteWelcomeEmail(inputs, freeTaste)
|
|
587
|
+
}).filter((unit)=>runnerFor(unit.jobKind));
|
|
588
|
+
}
|
|
521
589
|
export function createAiJobSiteStep(deps = {}) {
|
|
522
590
|
var _deps_runnerFor, _deps_readNodes, _deps_publish;
|
|
523
591
|
const runnerFor = (_deps_runnerFor = deps.runnerFor) != null ? _deps_runnerFor : aiJobStepRunnerFor;
|
|
524
592
|
const readNodes = (_deps_readNodes = deps.readNodes) != null ? _deps_readNodes : readAiDraftNodes;
|
|
525
593
|
const publish = (_deps_publish = deps.publish) != null ? _deps_publish : aiPublishGuidedSite;
|
|
526
|
-
/** A guided start's last pass puts what it built on the site, once (AGL-3596). */ const published = async (context, outcome)=>{
|
|
527
|
-
var _job_outputs;
|
|
528
|
-
const { job } = context;
|
|
529
|
-
if (!aiJobPublishesSite(job) || job.sitePublish || !job.hostId) return outcome;
|
|
530
|
-
const sitePublish = await publish(context.firestore, {
|
|
531
|
-
job,
|
|
532
|
-
outputs: [
|
|
533
|
-
...(_job_outputs = job.outputs) != null ? _job_outputs : [],
|
|
534
|
-
...outcome.outputs
|
|
535
|
-
],
|
|
536
|
-
now: context.now
|
|
537
|
-
}).catch((error)=>{
|
|
538
|
-
// The site is built either way; the pages stay drafts and say so.
|
|
539
|
-
console.error('ai site publish threw', {
|
|
540
|
-
orgId: job.orgId,
|
|
541
|
-
jobId: job.$id,
|
|
542
|
-
error
|
|
543
|
-
});
|
|
544
|
-
return null;
|
|
545
|
-
});
|
|
546
|
-
return sitePublish ? _extends({}, outcome, {
|
|
547
|
-
sitePublish
|
|
548
|
-
}) : outcome;
|
|
549
|
-
};
|
|
550
594
|
return async (context)=>{
|
|
551
|
-
var _ref, _job_outputs;
|
|
595
|
+
var _ref, _job_outputs, _job_outputs1;
|
|
596
|
+
var _job_items;
|
|
552
597
|
const { job } = context;
|
|
553
598
|
// The scaffold asks no model of its own. What it names where it spends
|
|
554
599
|
// nothing is the model its plan ran on, which is the one exchange this
|
|
@@ -573,35 +618,131 @@ export function createAiJobSiteStep(deps = {}) {
|
|
|
573
618
|
});
|
|
574
619
|
// A kind this deployment has not loaded is not among the units at all, so
|
|
575
620
|
// a scaffold owes only what something can build.
|
|
576
|
-
const units =
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
const
|
|
581
|
-
|
|
582
|
-
const
|
|
621
|
+
const units = aiSiteOwedUnits(job, plan, inputs, freeTaste, runnerFor);
|
|
622
|
+
const ledgerUnits = aiSiteLedgerUnits(units);
|
|
623
|
+
// Settled item by item, like a build (AGL-3616): the ledger, not the
|
|
624
|
+
// outputs, says where the scaffold stands once it has one.
|
|
625
|
+
const starting = !((_job_items = job.items) == null ? void 0 : _job_items.length);
|
|
626
|
+
const ledger = starting ? aiSiteInitialLedger(units, (_job_outputs = job.outputs) != null ? _job_outputs : []) : job.items;
|
|
627
|
+
const init = starting ? {
|
|
628
|
+
items: ledger
|
|
629
|
+
} : {};
|
|
630
|
+
const rows = new Map(ledger.map((row)=>[
|
|
631
|
+
row.slot,
|
|
632
|
+
row
|
|
633
|
+
]));
|
|
634
|
+
const next = aiBuildNextUnit(ledgerUnits, ledger);
|
|
635
|
+
/** A guided start's last pass puts what it built on the site, once (AGL-3596): only its pages that were built. */ const finish = async (outcome, pages)=>{
|
|
636
|
+
if (!aiJobPublishesSite(job) || job.sitePublish || !job.hostId || !pages.length) return outcome;
|
|
637
|
+
const sitePublish = await publish(context.firestore, {
|
|
638
|
+
job,
|
|
639
|
+
outputs: pages,
|
|
640
|
+
now: context.now
|
|
641
|
+
}).catch((error)=>{
|
|
642
|
+
// The site is built either way; the pages stay drafts and say so.
|
|
643
|
+
console.error('ai site publish threw', {
|
|
644
|
+
orgId: job.orgId,
|
|
645
|
+
jobId: job.$id,
|
|
646
|
+
error
|
|
647
|
+
});
|
|
648
|
+
return null;
|
|
649
|
+
});
|
|
650
|
+
return sitePublish ? _extends({}, outcome, {
|
|
651
|
+
sitePublish
|
|
652
|
+
}) : outcome;
|
|
653
|
+
};
|
|
654
|
+
/** The pages built so far, as the job reported them. */ const builtPages = (extra = [])=>{
|
|
655
|
+
var _job_outputs;
|
|
656
|
+
const ids = new Set(units.filter((unit)=>{
|
|
657
|
+
var _rows_get;
|
|
658
|
+
return unit.kind === 'page' && aiBuildItemDelivered((_rows_get = rows.get(unit.slot)) != null ? _rows_get : {
|
|
659
|
+
status: 'pending'
|
|
660
|
+
});
|
|
661
|
+
}).flatMap((unit)=>{
|
|
662
|
+
var _ref;
|
|
663
|
+
var _rows_get;
|
|
664
|
+
return (_ref = (_rows_get = rows.get(unit.slot)) == null ? void 0 : _rows_get.outputs) != null ? _ref : [];
|
|
665
|
+
}));
|
|
666
|
+
return [
|
|
667
|
+
...((_job_outputs = job.outputs) != null ? _job_outputs : []).filter((output)=>output.resource === 'screen' && ids.has(output.id)),
|
|
668
|
+
...extra
|
|
669
|
+
];
|
|
670
|
+
};
|
|
671
|
+
if (!next) return finish(_extends({}, aiUnspentOutcome(model), init), builtPages());
|
|
672
|
+
const unit = units.find((one)=>one.slot === next.slot);
|
|
583
673
|
const runner = runnerFor(unit.jobKind);
|
|
584
|
-
if (!runner) return aiUnspentOutcome(model);
|
|
585
|
-
const
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
674
|
+
if (!runner) return _extends({}, aiUnspentOutcome(model), init);
|
|
675
|
+
const othersOpen = ledgerUnits.some((one)=>{
|
|
676
|
+
var _rows_get;
|
|
677
|
+
return one.slot !== unit.slot && aiBuildItemOpen((_rows_get = rows.get(one.slot)) != null ? _rows_get : {
|
|
678
|
+
status: 'pending'
|
|
679
|
+
});
|
|
590
680
|
});
|
|
591
681
|
// The site's own listing rides out beside the first unit's output, once
|
|
592
682
|
// (AGL-2918): it is derived from the answers rather than generated, so it
|
|
593
683
|
// is ready before anything is built and costs the pass nothing.
|
|
594
|
-
const
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
684
|
+
const listing = aiSiteSeoOutputs(job);
|
|
685
|
+
const settle = (item, spent = aiUnspentOutcome(model))=>_extends({}, spent, {
|
|
686
|
+
outputs: [
|
|
687
|
+
...listing,
|
|
688
|
+
...spent.outputs
|
|
689
|
+
]
|
|
690
|
+
}, init, {
|
|
691
|
+
item
|
|
692
|
+
}, item.status === 'running' || othersOpen ? {
|
|
693
|
+
continue: true
|
|
694
|
+
} : {});
|
|
695
|
+
// A page whose layout or form failed is built without it, and says so.
|
|
696
|
+
const degradation = aiBuildDegradation(next, {
|
|
697
|
+
units: ledgerUnits,
|
|
698
|
+
ledger
|
|
599
699
|
});
|
|
700
|
+
const degraded = degradation.degradedBy.length > 0;
|
|
701
|
+
const note = degradation.notes.length ? degradation.notes.join(' ') : null;
|
|
702
|
+
const built = aiBuildBuiltRefs(ledgerUnits, ledger, (_job_outputs1 = job.outputs) != null ? _job_outputs1 : []);
|
|
703
|
+
const derived = aiSiteUnitJob(job, unit, built);
|
|
704
|
+
const handed = degradation.briefLines.length ? _extends({}, derived, {
|
|
705
|
+
brief: [
|
|
706
|
+
derived.brief,
|
|
707
|
+
...degradation.briefLines
|
|
708
|
+
].join('\n').slice(0, AI_JOB_BRIEF_MAX_CHARS)
|
|
709
|
+
}) : derived;
|
|
710
|
+
let outcome;
|
|
711
|
+
try {
|
|
712
|
+
outcome = await runner(_extends({}, context, {
|
|
713
|
+
job: handed
|
|
714
|
+
}));
|
|
715
|
+
} catch (error) {
|
|
716
|
+
if (aiUnitErrorRetryable(error)) throw error;
|
|
717
|
+
console.error('ai site unit threw', {
|
|
718
|
+
orgId: job.orgId,
|
|
719
|
+
jobId: job.$id,
|
|
720
|
+
slot: unit.slot,
|
|
721
|
+
error
|
|
722
|
+
});
|
|
723
|
+
return settle({
|
|
724
|
+
slot: unit.slot,
|
|
725
|
+
status: 'failed',
|
|
726
|
+
failure: {
|
|
727
|
+
ours: true,
|
|
728
|
+
reason: 'provider',
|
|
729
|
+
message: AI_SITE_UNIT_EMPTY_COPY
|
|
730
|
+
}
|
|
731
|
+
});
|
|
732
|
+
}
|
|
733
|
+
const spent = aiUnitSpend(outcome);
|
|
734
|
+
const stopped = aiUnitFailure(unit.slot, outcome);
|
|
735
|
+
if (stopped) {
|
|
736
|
+
return settle(stopped.status === 'failed' && stopped.failure && !outcome.failure && !outcome.refused && !outcome.review ? _extends({}, stopped, {
|
|
737
|
+
failure: _extends({}, stopped.failure, {
|
|
738
|
+
message: AI_SITE_UNIT_EMPTY_COPY
|
|
739
|
+
})
|
|
740
|
+
}) : stopped, spent);
|
|
741
|
+
}
|
|
600
742
|
// A page counts as built only when its plan's sections are in it
|
|
601
|
-
// (AGL-3596): otherwise the
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
const page = pass.outcome.outputs.find((output)=>output.resource === 'screen');
|
|
743
|
+
// (AGL-3596): otherwise the page fails, on our side, and is not reported.
|
|
744
|
+
if (unit.kind === 'page' && unit.screen && job.hostId) {
|
|
745
|
+
const page = outcome.outputs.find((output)=>output.resource === 'screen');
|
|
605
746
|
const written = page !== undefined && await aiSitePageWritten(context.firestore, {
|
|
606
747
|
hostId: job.hostId,
|
|
607
748
|
unitJobId: aiSiteUnitJobId(job, unit),
|
|
@@ -609,17 +750,32 @@ export function createAiJobSiteStep(deps = {}) {
|
|
|
609
750
|
draftId: page.id
|
|
610
751
|
}, readNodes);
|
|
611
752
|
if (!written) {
|
|
612
|
-
return
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
753
|
+
return settle({
|
|
754
|
+
slot: unit.slot,
|
|
755
|
+
status: 'failed',
|
|
756
|
+
failure: {
|
|
757
|
+
ours: true,
|
|
758
|
+
reason: 'step-failure',
|
|
759
|
+
message: AI_SITE_PAGE_NOT_WRITTEN_COPY
|
|
760
|
+
}
|
|
761
|
+
}, _extends({}, spent, {
|
|
762
|
+
outputs: spent.outputs.filter((output)=>output.resource !== 'screen')
|
|
763
|
+
}));
|
|
616
764
|
}
|
|
617
765
|
}
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
766
|
+
const done = settle(_extends({
|
|
767
|
+
slot: unit.slot,
|
|
768
|
+
status: degraded ? 'degraded' : 'succeeded',
|
|
769
|
+
outputs: outcome.outputs.map((output)=>output.id),
|
|
770
|
+
note
|
|
771
|
+
}, degraded ? {
|
|
772
|
+
degradedBy: degradation.degradedBy
|
|
773
|
+
} : {}), spent);
|
|
774
|
+
if (done.continue) return done;
|
|
775
|
+
rows.set(unit.slot, _extends({}, rows.get(unit.slot), {
|
|
776
|
+
status: degraded ? 'degraded' : 'succeeded'
|
|
777
|
+
}));
|
|
778
|
+
return finish(done, builtPages(unit.kind === 'page' ? outcome.outputs.filter((output)=>output.resource === 'screen') : []));
|
|
623
779
|
};
|
|
624
780
|
}
|
|
625
781
|
export const runAiJobSiteStep = createAiJobSiteStep();
|
|
@@ -632,6 +788,7 @@ export const runAiJobSiteStep = createAiJobSiteStep();
|
|
|
632
788
|
* build, spends nothing, and a page pass's time covers it.
|
|
633
789
|
*/ export function aiSiteJobRunMinimumMs(job) {
|
|
634
790
|
var _job_outputs;
|
|
791
|
+
var _job_items;
|
|
635
792
|
const plan = aiConfirmedPlan(job);
|
|
636
793
|
const inputs = parseAiSiteJobInputs(job.inputs);
|
|
637
794
|
if (!plan || typeof inputs === 'string') return AI_JOB_PAGE_STEP_MINIMUM_MS;
|
|
@@ -639,9 +796,11 @@ export const runAiJobSiteStep = createAiJobSiteStep();
|
|
|
639
796
|
welcomeEmail: inputs.welcomeEmail
|
|
640
797
|
}).filter((unit)=>aiJobStepRunnerFor(unit.jobKind));
|
|
641
798
|
const outputs = (_job_outputs = job.outputs) != null ? _job_outputs : [];
|
|
642
|
-
const
|
|
799
|
+
const ledger = ((_job_items = job.items) == null ? void 0 : _job_items.length) ? job.items : aiSiteInitialLedger(units, outputs);
|
|
800
|
+
const next = aiBuildNextUnit(aiSiteLedgerUnits(units), ledger);
|
|
801
|
+
const unit = next ? units.find((one)=>one.slot === next.slot) : undefined;
|
|
643
802
|
if (!unit) return AI_JOB_PAGE_STEP_MINIMUM_MS;
|
|
644
|
-
return aiJobStepRunMinimumMs(aiSiteUnitJob(job, unit,
|
|
803
|
+
return aiJobStepRunMinimumMs(aiSiteUnitJob(job, unit, aiBuildBuiltRefs(aiSiteLedgerUnits(units), ledger, outputs)));
|
|
645
804
|
}
|
|
646
805
|
/**
|
|
647
806
|
* Registers the site scaffold with the least time a pass needs — every
|