@prenta/core 5.10.0 → 7.0.0
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/CHANGELOG.md +43 -0
- package/dist/actions.d.ts.map +1 -1
- package/dist/actions.js +5 -15
- package/dist/actions.js.map +1 -1
- package/dist/ai/brand-voice-analyze.d.ts +1 -4
- package/dist/ai/brand-voice-analyze.d.ts.map +1 -1
- package/dist/ai/brand-voice-analyze.js +1 -2
- package/dist/ai/brand-voice-analyze.js.map +1 -1
- package/dist/ai/brand-voice-sources.d.ts +0 -2
- package/dist/ai/brand-voice-sources.d.ts.map +1 -1
- package/dist/ai/brand-voice-sources.js +2 -2
- package/dist/ai/brand-voice-sources.js.map +1 -1
- package/dist/ai/brand-voice-structured.d.ts +6 -6
- package/dist/ai/brand-voice-structured.d.ts.map +1 -1
- package/dist/ai/catalog.d.ts +8 -0
- package/dist/ai/catalog.d.ts.map +1 -1
- package/dist/ai/catalog.js +22 -0
- package/dist/ai/catalog.js.map +1 -1
- package/dist/ai/config-store.d.ts +18 -4
- package/dist/ai/config-store.d.ts.map +1 -1
- package/dist/ai/config-store.js +115 -20
- package/dist/ai/config-store.js.map +1 -1
- package/dist/ai/content-writing-generate.d.ts +10 -8
- package/dist/ai/content-writing-generate.d.ts.map +1 -1
- package/dist/ai/content-writing-generate.js +24 -59
- package/dist/ai/content-writing-generate.js.map +1 -1
- package/dist/ai/embeddings.d.ts +28 -0
- package/dist/ai/embeddings.d.ts.map +1 -0
- package/dist/ai/embeddings.js +36 -0
- package/dist/ai/embeddings.js.map +1 -0
- package/dist/ai/feature-defaults.d.ts +3 -3
- package/dist/ai/feature-defaults.d.ts.map +1 -1
- package/dist/ai/feature-defaults.js +24 -14
- package/dist/ai/feature-defaults.js.map +1 -1
- package/dist/ai/index.d.ts +15 -16
- package/dist/ai/index.d.ts.map +1 -1
- package/dist/ai/index.js +14 -15
- package/dist/ai/index.js.map +1 -1
- package/dist/ai/models.d.ts +7 -3
- package/dist/ai/models.d.ts.map +1 -1
- package/dist/ai/models.js +10 -5
- package/dist/ai/models.js.map +1 -1
- package/dist/ai/plugin-errors.d.ts +9 -3
- package/dist/ai/plugin-errors.d.ts.map +1 -1
- package/dist/ai/plugin-errors.js +9 -3
- package/dist/ai/plugin-errors.js.map +1 -1
- package/dist/ai/plugin-import.d.ts +20 -0
- package/dist/ai/plugin-import.d.ts.map +1 -0
- package/dist/ai/plugin-import.js +24 -0
- package/dist/ai/plugin-import.js.map +1 -0
- package/dist/ai/prompt-safety.d.ts +23 -0
- package/dist/ai/prompt-safety.d.ts.map +1 -0
- package/dist/ai/prompt-safety.js +34 -0
- package/dist/ai/prompt-safety.js.map +1 -0
- package/dist/ai/providers/anthropic.d.ts.map +1 -1
- package/dist/ai/providers/anthropic.js +16 -1
- package/dist/ai/providers/anthropic.js.map +1 -1
- package/dist/ai/providers/http.d.ts +7 -2
- package/dist/ai/providers/http.d.ts.map +1 -1
- package/dist/ai/providers/http.js +13 -2
- package/dist/ai/providers/http.js.map +1 -1
- package/dist/ai/providers/index.d.ts +0 -7
- package/dist/ai/providers/index.d.ts.map +1 -1
- package/dist/ai/providers/index.js +1 -1
- package/dist/ai/providers/index.js.map +1 -1
- package/dist/ai/resolve.d.ts +7 -1
- package/dist/ai/resolve.d.ts.map +1 -1
- package/dist/ai/resolve.js +36 -3
- package/dist/ai/resolve.js.map +1 -1
- package/dist/ai/runtime-response.d.ts +27 -0
- package/dist/ai/runtime-response.d.ts.map +1 -0
- package/dist/ai/runtime-response.js +75 -0
- package/dist/ai/runtime-response.js.map +1 -0
- package/dist/ai/runtime.d.ts +9 -7
- package/dist/ai/runtime.d.ts.map +1 -1
- package/dist/ai/runtime.js +14 -19
- package/dist/ai/runtime.js.map +1 -1
- package/dist/ai/tasks/alt-text.d.ts +82 -0
- package/dist/ai/tasks/alt-text.d.ts.map +1 -0
- package/dist/ai/tasks/alt-text.js +171 -0
- package/dist/ai/tasks/alt-text.js.map +1 -0
- package/dist/ai/tasks/document-generation.d.ts +102 -0
- package/dist/ai/tasks/document-generation.d.ts.map +1 -0
- package/dist/ai/tasks/document-generation.js +321 -0
- package/dist/ai/tasks/document-generation.js.map +1 -0
- package/dist/ai/tasks/link-embeddings.d.ts +55 -0
- package/dist/ai/tasks/link-embeddings.d.ts.map +1 -0
- package/dist/ai/tasks/link-embeddings.js +160 -0
- package/dist/ai/tasks/link-embeddings.js.map +1 -0
- package/dist/ai/types.d.ts +15 -19
- package/dist/ai/types.d.ts.map +1 -1
- package/dist/ai/types.js +6 -7
- package/dist/ai/types.js.map +1 -1
- package/dist/ai/usage.d.ts +6 -4
- package/dist/ai/usage.d.ts.map +1 -1
- package/dist/ai/usage.js +6 -4
- package/dist/ai/usage.js.map +1 -1
- package/dist/ai/vector.d.ts +8 -0
- package/dist/ai/vector.d.ts.map +1 -0
- package/dist/ai/vector.js +24 -0
- package/dist/ai/vector.js.map +1 -0
- package/dist/api/responses.d.ts +1 -1
- package/dist/api/responses.d.ts.map +1 -1
- package/dist/api/responses.js +1 -1
- package/dist/api/responses.js.map +1 -1
- package/dist/api/route-helpers.d.ts +3 -20
- package/dist/api/route-helpers.d.ts.map +1 -1
- package/dist/api/route-helpers.js +12 -26
- package/dist/api/route-helpers.js.map +1 -1
- package/dist/api/routes/ai-authoring.d.ts.map +1 -1
- package/dist/api/routes/ai-authoring.js +132 -144
- package/dist/api/routes/ai-authoring.js.map +1 -1
- package/dist/api/routes/ai-seo.d.ts.map +1 -1
- package/dist/api/routes/ai-seo.js +44 -120
- package/dist/api/routes/ai-seo.js.map +1 -1
- package/dist/api/routes/ai-settings.d.ts.map +1 -1
- package/dist/api/routes/ai-settings.js +76 -28
- package/dist/api/routes/ai-settings.js.map +1 -1
- package/dist/api/routes/security-center.d.ts.map +1 -1
- package/dist/api/routes/security-center.js +5 -39
- package/dist/api/routes/security-center.js.map +1 -1
- package/dist/api/routes/seo-public.d.ts +0 -5
- package/dist/api/routes/seo-public.d.ts.map +1 -1
- package/dist/api/routes/seo-public.js +1 -1
- package/dist/api/routes/seo-public.js.map +1 -1
- package/dist/api/routes/seo.d.ts.map +1 -1
- package/dist/api/routes/seo.js +21 -48
- package/dist/api/routes/seo.js.map +1 -1
- package/dist/api/security-headers.d.ts +8 -0
- package/dist/api/security-headers.d.ts.map +1 -0
- package/dist/api/security-headers.js +13 -0
- package/dist/api/security-headers.js.map +1 -0
- package/dist/appearance/favicon-icon.d.ts +1 -1
- package/dist/appearance/favicon-icon.d.ts.map +1 -1
- package/dist/appearance/favicon-icon.js +1 -1
- package/dist/appearance/favicon-icon.js.map +1 -1
- package/dist/auth/index.d.ts +0 -6
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/auth/index.js +0 -3
- package/dist/auth/index.js.map +1 -1
- package/dist/auth/invites.d.ts +0 -5
- package/dist/auth/invites.d.ts.map +1 -1
- package/dist/auth/invites.js +3 -3
- package/dist/auth/invites.js.map +1 -1
- package/dist/auth/team.d.ts +4 -3
- package/dist/auth/team.d.ts.map +1 -1
- package/dist/auth/user-admin.d.ts +2 -1
- package/dist/auth/user-admin.d.ts.map +1 -1
- package/dist/billing/stripe-meter.d.ts +2 -1
- package/dist/billing/stripe-meter.d.ts.map +1 -1
- package/dist/cache/http.d.ts +0 -11
- package/dist/cache/http.d.ts.map +1 -1
- package/dist/cache/http.js +1 -1
- package/dist/cache/http.js.map +1 -1
- package/dist/cache/index.d.ts +0 -5
- package/dist/cache/index.d.ts.map +1 -1
- package/dist/config/types.d.ts +19 -19
- package/dist/config/types.d.ts.map +1 -1
- package/dist/content/index.d.ts +2 -5
- package/dist/content/index.d.ts.map +1 -1
- package/dist/content/index.js +1 -3
- package/dist/content/index.js.map +1 -1
- package/dist/content/structured-data.d.ts +0 -14
- package/dist/content/structured-data.d.ts.map +1 -1
- package/dist/content/structured-data.js +3 -14
- package/dist/content/structured-data.js.map +1 -1
- package/dist/cron/index.d.ts +2 -3
- package/dist/cron/index.d.ts.map +1 -1
- package/dist/cron/index.js +0 -2
- package/dist/cron/index.js.map +1 -1
- package/dist/db/client-types.d.ts +2 -1
- package/dist/db/client-types.d.ts.map +1 -1
- package/dist/db/model-types.d.ts +0 -1
- package/dist/db/model-types.d.ts.map +1 -1
- package/dist/db.d.ts +0 -2
- package/dist/db.d.ts.map +1 -1
- package/dist/db.js +0 -1
- package/dist/db.js.map +1 -1
- package/dist/diagnostics/env.d.ts +1 -1
- package/dist/diagnostics/env.d.ts.map +1 -1
- package/dist/diagnostics/logger.d.ts +0 -24
- package/dist/diagnostics/logger.d.ts.map +1 -1
- package/dist/forms/entries.d.ts +0 -7
- package/dist/forms/entries.d.ts.map +1 -1
- package/dist/forms/entries.js +1 -19
- package/dist/forms/entries.js.map +1 -1
- package/dist/forms/files.d.ts +1 -1
- package/dist/forms/files.d.ts.map +1 -1
- package/dist/forms/index.d.ts +4 -6
- package/dist/forms/index.d.ts.map +1 -1
- package/dist/forms/index.js +3 -5
- package/dist/forms/index.js.map +1 -1
- package/dist/forms/prefetch.d.ts +0 -6
- package/dist/forms/prefetch.d.ts.map +1 -1
- package/dist/forms/service.d.ts +0 -4
- package/dist/forms/service.d.ts.map +1 -1
- package/dist/forms/service.js +2 -8
- package/dist/forms/service.js.map +1 -1
- package/dist/forms/webmcp.d.ts +0 -2
- package/dist/forms/webmcp.d.ts.map +1 -1
- package/dist/forms/webmcp.js +1 -1
- package/dist/forms/webmcp.js.map +1 -1
- package/dist/generated/internal/class.js +4 -4
- package/dist/generated/internal/prismaNamespace.d.ts +0 -1
- package/dist/generated/internal/prismaNamespace.js +0 -1
- package/dist/generated/internal/prismaNamespaceBrowser.d.ts +0 -1
- package/dist/generated/internal/prismaNamespaceBrowser.js +0 -1
- package/dist/generated/models/Document.d.ts +1 -58
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/media/denormalize.d.ts +0 -7
- package/dist/media/denormalize.d.ts.map +1 -1
- package/dist/media/index.d.ts +0 -8
- package/dist/media/index.d.ts.map +1 -1
- package/dist/media/index.js +0 -5
- package/dist/media/index.js.map +1 -1
- package/dist/media/optimize.d.ts +0 -4
- package/dist/media/optimize.d.ts.map +1 -1
- package/dist/media/optimize.js +4 -4
- package/dist/media/optimize.js.map +1 -1
- package/dist/media/reoptimize.d.ts +2 -3
- package/dist/media/reoptimize.d.ts.map +1 -1
- package/dist/media/reoptimize.js +2 -2
- package/dist/media/reoptimize.js.map +1 -1
- package/dist/media/seo.d.ts +3 -8
- package/dist/media/seo.d.ts.map +1 -1
- package/dist/media/seo.js +1 -1
- package/dist/media/seo.js.map +1 -1
- package/dist/plan/features.d.ts +0 -1
- package/dist/plan/features.d.ts.map +1 -1
- package/dist/plan/features.js +0 -16
- package/dist/plan/features.js.map +1 -1
- package/dist/preview/event-bus.d.ts +2 -1
- package/dist/preview/event-bus.d.ts.map +1 -1
- package/dist/preview/index.d.ts +2 -1
- package/dist/preview/index.d.ts.map +1 -1
- package/dist/preview/sse-stream.d.ts +0 -13
- package/dist/preview/sse-stream.d.ts.map +1 -1
- package/dist/preview/sse-stream.js +2 -2
- package/dist/preview/sse-stream.js.map +1 -1
- package/dist/realtime/notifications.d.ts +4 -3
- package/dist/realtime/notifications.d.ts.map +1 -1
- package/dist/redirects/index.d.ts +4 -16
- package/dist/redirects/index.d.ts.map +1 -1
- package/dist/redirects/index.js +2 -9
- package/dist/redirects/index.js.map +1 -1
- package/dist/redirects/match.d.ts +0 -2
- package/dist/redirects/match.d.ts.map +1 -1
- package/dist/redirects/match.js +1 -1
- package/dist/redirects/match.js.map +1 -1
- package/dist/redirects/recovery.d.ts +0 -2
- package/dist/redirects/recovery.d.ts.map +1 -1
- package/dist/redirects/recovery.js +1 -1
- package/dist/redirects/recovery.js.map +1 -1
- package/dist/redirects/rerank.d.ts +4 -3
- package/dist/redirects/rerank.d.ts.map +1 -1
- package/dist/redirects/rerank.js +3 -18
- package/dist/redirects/rerank.js.map +1 -1
- package/dist/sections/validate.d.ts +0 -2
- package/dist/sections/validate.d.ts.map +1 -1
- package/dist/sections/validate.js +1 -1
- package/dist/sections/validate.js.map +1 -1
- package/dist/security/access.d.ts +0 -9
- package/dist/security/access.d.ts.map +1 -1
- package/dist/security/access.js +1 -3
- package/dist/security/access.js.map +1 -1
- package/dist/security/audit.d.ts +0 -20
- package/dist/security/audit.d.ts.map +1 -1
- package/dist/security/audit.js.map +1 -1
- package/dist/security/index.d.ts +2 -20
- package/dist/security/index.d.ts.map +1 -1
- package/dist/security/index.js +2 -7
- package/dist/security/index.js.map +1 -1
- package/dist/security/internal-keys.d.ts +0 -12
- package/dist/security/internal-keys.d.ts.map +1 -1
- package/dist/security/internal-keys.js +10 -12
- package/dist/security/internal-keys.js.map +1 -1
- package/dist/security/rate-limit-policy.d.ts +0 -2
- package/dist/security/rate-limit-policy.d.ts.map +1 -1
- package/dist/security/rate-limit-policy.js +1 -1
- package/dist/security/rate-limit-policy.js.map +1 -1
- package/dist/security/rate-limit.d.ts +2 -5
- package/dist/security/rate-limit.d.ts.map +1 -1
- package/dist/security/rate-limit.js +2 -2
- package/dist/security/rate-limit.js.map +1 -1
- package/dist/security/sanitize.d.ts +0 -3
- package/dist/security/sanitize.d.ts.map +1 -1
- package/dist/security/sanitize.js +0 -1
- package/dist/security/sanitize.js.map +1 -1
- package/dist/security/upload.d.ts +0 -3
- package/dist/security/upload.d.ts.map +1 -1
- package/dist/security/upload.js +0 -1
- package/dist/security/upload.js.map +1 -1
- package/dist/seo/ai-crawler-log.d.ts +0 -2
- package/dist/seo/ai-crawler-log.d.ts.map +1 -1
- package/dist/seo/ai-crawler-log.js +1 -1
- package/dist/seo/ai-crawler-log.js.map +1 -1
- package/dist/seo/audit-engine.d.ts +5 -5
- package/dist/seo/audit-engine.d.ts.map +1 -1
- package/dist/seo/audit-engine.js +1 -2
- package/dist/seo/audit-engine.js.map +1 -1
- package/dist/seo/audit-runner.d.ts +0 -7
- package/dist/seo/audit-runner.d.ts.map +1 -1
- package/dist/seo/audit-runner.js +1 -1
- package/dist/seo/audit-runner.js.map +1 -1
- package/dist/seo/audit-signals.d.ts +0 -2
- package/dist/seo/audit-signals.d.ts.map +1 -1
- package/dist/seo/audit-signals.js +1 -1
- package/dist/seo/audit-signals.js.map +1 -1
- package/dist/seo/autopilot-gate.d.ts +0 -1
- package/dist/seo/autopilot-gate.d.ts.map +1 -1
- package/dist/seo/autopilot-gate.js +1 -1
- package/dist/seo/autopilot-gate.js.map +1 -1
- package/dist/seo/autopilot-ledger.d.ts +2 -1
- package/dist/seo/autopilot-ledger.d.ts.map +1 -1
- package/dist/seo/autopilot-outcome.d.ts +0 -2
- package/dist/seo/autopilot-outcome.d.ts.map +1 -1
- package/dist/seo/autopilot-outcome.js +1 -1
- package/dist/seo/autopilot-outcome.js.map +1 -1
- package/dist/seo/autopilot-policy.d.ts +3 -38
- package/dist/seo/autopilot-policy.d.ts.map +1 -1
- package/dist/seo/autopilot-policy.js +3 -3
- package/dist/seo/autopilot-policy.js.map +1 -1
- package/dist/seo/autopilot.d.ts +4 -12
- package/dist/seo/autopilot.d.ts.map +1 -1
- package/dist/seo/autopilot.js +3 -3
- package/dist/seo/autopilot.js.map +1 -1
- package/dist/seo/config-store.d.ts +0 -2
- package/dist/seo/config-store.d.ts.map +1 -1
- package/dist/seo/config-store.js +1 -1
- package/dist/seo/config-store.js.map +1 -1
- package/dist/seo/digest.d.ts +8 -7
- package/dist/seo/digest.d.ts.map +1 -1
- package/dist/seo/faq-signals.d.ts +0 -4
- package/dist/seo/faq-signals.d.ts.map +1 -1
- package/dist/seo/faq-signals.js +4 -4
- package/dist/seo/faq-signals.js.map +1 -1
- package/dist/seo/fix-brief-export.d.ts +0 -2
- package/dist/seo/fix-brief-export.d.ts.map +1 -1
- package/dist/seo/fix-brief-export.js +1 -1
- package/dist/seo/fix-brief-export.js.map +1 -1
- package/dist/seo/geo-record.d.ts +0 -4
- package/dist/seo/geo-record.d.ts.map +1 -1
- package/dist/seo/geo-record.js +2 -2
- package/dist/seo/geo-record.js.map +1 -1
- package/dist/seo/geo-report.d.ts +4 -3
- package/dist/seo/geo-report.d.ts.map +1 -1
- package/dist/seo/geo-report.js +1 -1
- package/dist/seo/geo-report.js.map +1 -1
- package/dist/seo/index-status.d.ts +6 -5
- package/dist/seo/index-status.d.ts.map +1 -1
- package/dist/seo/index-status.js.map +1 -1
- package/dist/seo/index.d.ts +15 -90
- package/dist/seo/index.d.ts.map +1 -1
- package/dist/seo/index.js +10 -49
- package/dist/seo/index.js.map +1 -1
- package/dist/seo/issue-batch-briefs.d.ts +2 -3
- package/dist/seo/issue-batch-briefs.d.ts.map +1 -1
- package/dist/seo/issue-batch-briefs.js +2 -2
- package/dist/seo/issue-batch-briefs.js.map +1 -1
- package/dist/seo/issue-content-brief.d.ts +2 -1
- package/dist/seo/issue-content-brief.d.ts.map +1 -1
- package/dist/seo/issue-content-research.d.ts +2 -2
- package/dist/seo/issue-content-research.d.ts.map +1 -1
- package/dist/seo/issue-content-research.js +1 -1
- package/dist/seo/issue-content-research.js.map +1 -1
- package/dist/seo/issue-fix-ai.d.ts +5 -4
- package/dist/seo/issue-fix-ai.d.ts.map +1 -1
- package/dist/seo/issue-fix-ai.js +4 -19
- package/dist/seo/issue-fix-ai.js.map +1 -1
- package/dist/seo/issue-fix-apply.d.ts +2 -11
- package/dist/seo/issue-fix-apply.d.ts.map +1 -1
- package/dist/seo/issue-fix-apply.js +4 -4
- package/dist/seo/issue-fix-apply.js.map +1 -1
- package/dist/seo/issue-fix-faq.d.ts +4 -7
- package/dist/seo/issue-fix-faq.d.ts.map +1 -1
- package/dist/seo/issue-fix-faq.js +4 -4
- package/dist/seo/issue-fix-faq.js.map +1 -1
- package/dist/seo/issue-fix-link-insert.d.ts +4 -14
- package/dist/seo/issue-fix-link-insert.d.ts.map +1 -1
- package/dist/seo/issue-fix-link-insert.js +5 -4
- package/dist/seo/issue-fix-link-insert.js.map +1 -1
- package/dist/seo/issue-fix-redirect.d.ts +0 -1
- package/dist/seo/issue-fix-redirect.d.ts.map +1 -1
- package/dist/seo/issue-fix.d.ts.map +1 -1
- package/dist/seo/issue-fix.js +1 -0
- package/dist/seo/issue-fix.js.map +1 -1
- package/dist/seo/link-graph.d.ts +2 -3
- package/dist/seo/link-graph.d.ts.map +1 -1
- package/dist/seo/link-graph.js +0 -0
- package/dist/seo/link-graph.js.map +1 -1
- package/dist/seo/link-suggest.d.ts +8 -2
- package/dist/seo/link-suggest.d.ts.map +1 -1
- package/dist/seo/link-suggest.js +38 -53
- package/dist/seo/link-suggest.js.map +1 -1
- package/dist/seo/page-meta.d.ts +1 -10
- package/dist/seo/page-meta.d.ts.map +1 -1
- package/dist/seo/page-meta.js +1 -1
- package/dist/seo/page-meta.js.map +1 -1
- package/dist/seo/proposals-bulk-apply.d.ts +3 -2
- package/dist/seo/proposals-bulk-apply.d.ts.map +1 -1
- package/dist/seo/proposals.d.ts +2 -2
- package/dist/seo/proposals.d.ts.map +1 -1
- package/dist/seo/rendered-fetch.d.ts +2 -1
- package/dist/seo/rendered-fetch.d.ts.map +1 -1
- package/dist/seo/score.d.ts +3 -7
- package/dist/seo/score.d.ts.map +1 -1
- package/dist/seo/score.js.map +1 -1
- package/dist/seo/search-console/client.d.ts +0 -4
- package/dist/seo/search-console/client.d.ts.map +1 -1
- package/dist/seo/search-console/client.js +2 -2
- package/dist/seo/search-console/client.js.map +1 -1
- package/dist/seo/search-console/sync.d.ts +0 -4
- package/dist/seo/search-console/sync.d.ts.map +1 -1
- package/dist/seo/search-console/sync.js +2 -2
- package/dist/seo/search-console/sync.js.map +1 -1
- package/dist/seo/search-console/types.d.ts +2 -1
- package/dist/seo/search-console/types.d.ts.map +1 -1
- package/dist/seo/sitemap-notify.d.ts +0 -8
- package/dist/seo/sitemap-notify.d.ts.map +1 -1
- package/dist/seo/sitemap-notify.js +1 -1
- package/dist/seo/sitemap-notify.js.map +1 -1
- package/dist/seo/title-templates.d.ts +2 -5
- package/dist/seo/title-templates.d.ts.map +1 -1
- package/dist/seo/title-templates.js +2 -2
- package/dist/seo/title-templates.js.map +1 -1
- package/dist/server-site.d.ts +0 -1
- package/dist/server-site.d.ts.map +1 -1
- package/dist/server-site.js +0 -1
- package/dist/server-site.js.map +1 -1
- package/dist/storage/index.d.ts +0 -2
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/index.js +0 -4
- package/dist/storage/index.js.map +1 -1
- package/dist/upgrade/version-check.d.ts +0 -2
- package/dist/upgrade/version-check.d.ts.map +1 -1
- package/dist/upgrade/version-check.js +1 -1
- package/dist/upgrade/version-check.js.map +1 -1
- package/dist/webhooks/index.d.ts +0 -8
- package/dist/webhooks/index.d.ts.map +1 -1
- package/dist/webhooks/index.js +1 -16
- package/dist/webhooks/index.js.map +1 -1
- package/package.json +1 -1
- package/prisma/migrations/0019_drop_content_graph/migration.sql +4 -0
- package/prisma/schema.prisma +0 -1
- package/dist/api/auth-context.d.ts +0 -3
- package/dist/api/auth-context.d.ts.map +0 -1
- package/dist/api/auth-context.js +0 -3
- package/dist/api/auth-context.js.map +0 -1
- package/dist/api/limiters.d.ts +0 -3
- package/dist/api/limiters.d.ts.map +0 -1
- package/dist/api/limiters.js +0 -3
- package/dist/api/limiters.js.map +0 -1
- package/dist/content/content-graph.d.ts +0 -25
- package/dist/content/content-graph.d.ts.map +0 -1
- package/dist/content/content-graph.js +0 -40
- package/dist/content/content-graph.js.map +0 -1
- package/dist/db/index.d.ts +0 -9
- package/dist/db/index.d.ts.map +0 -1
- package/dist/db/index.js +0 -5
- package/dist/db/index.js.map +0 -1
- package/dist/next/preview.d.ts +0 -10
- package/dist/next/preview.d.ts.map +0 -1
- package/dist/next/preview.js +0 -17
- package/dist/next/preview.js.map +0 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { logEvent } from '../../security/audit.js';
|
|
2
2
|
import { guardedDb } from '../guarded-db.js';
|
|
3
3
|
import { sortIssuesBySeverity } from './seo.js';
|
|
4
|
-
import {
|
|
4
|
+
import { json, errorResponse, internalError, hasModel, modelNotAvailable, requireAuth, ADMIN_ROLES, requireRole, aiGenerateLimiter, checkRateLimitAsync, } from '../route-helpers.js';
|
|
5
5
|
import { getPrentaConfig } from '../../config/runtime.js';
|
|
6
6
|
import { applySeoOverrides, getSeoOverrides } from '../../seo/config-store.js';
|
|
7
7
|
import { maxPageTitleLengthForTemplate, stripSiteSuffixFromPageTitle, } from '../../seo/title-templates.js';
|
|
@@ -11,18 +11,11 @@ export function registerAiSeoRoutes(router) {
|
|
|
11
11
|
const db = guardedDb;
|
|
12
12
|
// ---------------------------------------------------------------------------
|
|
13
13
|
// AI SEO Copilot — approval-gated assistance for the SEO Operations Center.
|
|
14
|
-
// Every endpoint
|
|
15
|
-
//
|
|
16
|
-
//
|
|
17
|
-
//
|
|
18
|
-
// configured (missing API key, etc.) — a transient/ops condition.
|
|
19
|
-
// The AI never writes directly: it returns suggestions the editor must approve.
|
|
14
|
+
// Every endpoint routes through the governed runtime; refusals map to HTTP
|
|
15
|
+
// via `runtimeErrorToResponse` (403 disabled, 429 budget/cap, 503 not
|
|
16
|
+
// configured with a setup hint, 502 provider/output error). The AI never
|
|
17
|
+
// writes directly: it returns suggestions the editor must approve.
|
|
20
18
|
// ---------------------------------------------------------------------------
|
|
21
|
-
/** Returns true for errors that mean "AI provider isn't set up" (=> 503). */
|
|
22
|
-
function isAiUnconfigured(err) {
|
|
23
|
-
const msg = (err instanceof Error ? err.message : String(err)).toLowerCase();
|
|
24
|
-
return msg.includes('not configured') || msg.includes('missing') || msg.includes('api key');
|
|
25
|
-
}
|
|
26
19
|
// Hard cap on how much document text we ever send to the model. Bounds token
|
|
27
20
|
// cost regardless of document size and is applied to EVERY interpolation.
|
|
28
21
|
const AI_CONTEXT_MAX = 2000;
|
|
@@ -55,25 +48,15 @@ export function registerAiSeoRoutes(router) {
|
|
|
55
48
|
issueId: typeof details.issueId === 'string' ? details.issueId : undefined,
|
|
56
49
|
});
|
|
57
50
|
}
|
|
58
|
-
/** True when @prenta/plugin-ai isn't installed (dynamic import failed). */
|
|
59
|
-
function isPluginMissing(err) {
|
|
60
|
-
const msg = (err instanceof Error ? err.message : String(err)).toLowerCase();
|
|
61
|
-
return (msg.includes('plugin-ai') ||
|
|
62
|
-
msg.includes('cannot find package') ||
|
|
63
|
-
msg.includes('cannot find module') ||
|
|
64
|
-
msg.includes('err_module_not_found'));
|
|
65
|
-
}
|
|
66
51
|
/**
|
|
67
|
-
* Governed
|
|
68
|
-
*
|
|
69
|
-
*
|
|
70
|
-
*
|
|
71
|
-
*
|
|
72
|
-
* text or a ready Response carrying the correct status: 403 (feature
|
|
73
|
-
* disabled), 429 (budget), 502 (provider error), 503 (nothing configured).
|
|
52
|
+
* Governed text generation for the SEO assistant endpoints. Routes through
|
|
53
|
+
* the connection + per-feature model configured in Settings > AI (enforcing
|
|
54
|
+
* the feature toggle, budget and daily cap and recording real token usage).
|
|
55
|
+
* Returns either the generated text or a ready Response from
|
|
56
|
+
* `runtimeErrorToResponse`.
|
|
74
57
|
*/
|
|
75
58
|
async function governedSeoText(opts) {
|
|
76
|
-
const { generateTextForFeature } = await import('../../ai/index.js');
|
|
59
|
+
const { generateTextForFeature, runtimeErrorToResponse } = await import('../../ai/index.js');
|
|
77
60
|
const r = await generateTextForFeature(db(), opts.featureKey, {
|
|
78
61
|
prompt: opts.prompt,
|
|
79
62
|
system: opts.system,
|
|
@@ -83,27 +66,7 @@ export function registerAiSeoRoutes(router) {
|
|
|
83
66
|
});
|
|
84
67
|
if (r.ok)
|
|
85
68
|
return { text: r.text };
|
|
86
|
-
|
|
87
|
-
return { response: errorResponse(r.message, 403) };
|
|
88
|
-
if (r.code === 'budget_exceeded')
|
|
89
|
-
return { response: errorResponse(r.message, 429) };
|
|
90
|
-
if (r.code === 'rate_limited')
|
|
91
|
-
return { response: errorResponse(r.message, 429) };
|
|
92
|
-
if (r.code === 'provider_error') {
|
|
93
|
-
return { response: errorResponse(`AI provider error: ${r.message}`, 502) };
|
|
94
|
-
}
|
|
95
|
-
// no_provider / no_model / no_key → legacy plugin-ai fallback.
|
|
96
|
-
try {
|
|
97
|
-
return { text: await opts.fallback() };
|
|
98
|
-
}
|
|
99
|
-
catch (err) {
|
|
100
|
-
if (isAiUnconfigured(err) || isPluginMissing(err)) {
|
|
101
|
-
return {
|
|
102
|
-
response: errorResponse('AI is not configured. Connect a provider in Settings > AI.', 503),
|
|
103
|
-
};
|
|
104
|
-
}
|
|
105
|
-
throw err;
|
|
106
|
-
}
|
|
69
|
+
return { response: runtimeErrorToResponse(r) };
|
|
107
70
|
}
|
|
108
71
|
async function loadSiteSeoContext() {
|
|
109
72
|
const overrides = await getSeoOverrides(db()).catch(() => null);
|
|
@@ -201,14 +164,6 @@ export function registerAiSeoRoutes(router) {
|
|
|
201
164
|
prompt: withSearchBlock(fenceUntrusted(entity.content)),
|
|
202
165
|
maxTokens: 256,
|
|
203
166
|
useBrandVoice: true,
|
|
204
|
-
fallback: async () => {
|
|
205
|
-
const ai = await importAIPlugin();
|
|
206
|
-
const titles = await ai.generateTitle(clampAiContent(entity.content), {
|
|
207
|
-
count: 4,
|
|
208
|
-
style: 'seo-optimized',
|
|
209
|
-
});
|
|
210
|
-
return titles.join('\n');
|
|
211
|
-
},
|
|
212
167
|
});
|
|
213
168
|
if ('response' in out)
|
|
214
169
|
return out.response;
|
|
@@ -250,10 +205,6 @@ export function registerAiSeoRoutes(router) {
|
|
|
250
205
|
prompt: withSearchBlock(fenceUntrusted(entity.content)),
|
|
251
206
|
maxTokens: 128,
|
|
252
207
|
useBrandVoice: true,
|
|
253
|
-
fallback: async () => {
|
|
254
|
-
const ai = await importAIPlugin();
|
|
255
|
-
return (await ai.generateMetaDescription(clampAiContent(entity.content), META_DESC_MAX));
|
|
256
|
-
},
|
|
257
208
|
});
|
|
258
209
|
if ('response' in out)
|
|
259
210
|
return out.response;
|
|
@@ -286,10 +237,6 @@ export function registerAiSeoRoutes(router) {
|
|
|
286
237
|
prompt: withSearchBlock(fenceUntrusted(entity.content)),
|
|
287
238
|
maxTokens: 160,
|
|
288
239
|
useBrandVoice: true,
|
|
289
|
-
fallback: async () => {
|
|
290
|
-
const ai = await importAIPlugin();
|
|
291
|
-
return (await ai.generateKeyTakeaway(clampAiContent(entity.content), 240));
|
|
292
|
-
},
|
|
293
240
|
});
|
|
294
241
|
if ('response' in out)
|
|
295
242
|
return out.response;
|
|
@@ -311,10 +258,6 @@ export function registerAiSeoRoutes(router) {
|
|
|
311
258
|
userId: auth.session.userId,
|
|
312
259
|
prompt: keywordPrompt,
|
|
313
260
|
maxTokens: 32,
|
|
314
|
-
fallback: async () => {
|
|
315
|
-
const ai = await importAIPlugin();
|
|
316
|
-
return (await ai.generate(keywordPrompt));
|
|
317
|
-
},
|
|
318
261
|
});
|
|
319
262
|
if ('response' in out)
|
|
320
263
|
return out.response;
|
|
@@ -353,10 +296,6 @@ export function registerAiSeoRoutes(router) {
|
|
|
353
296
|
userId: auth.session.userId,
|
|
354
297
|
prompt,
|
|
355
298
|
maxTokens: 400,
|
|
356
|
-
fallback: async () => {
|
|
357
|
-
const ai = await importAIPlugin();
|
|
358
|
-
return (await ai.generate(prompt));
|
|
359
|
-
},
|
|
360
299
|
});
|
|
361
300
|
if ('response' in out)
|
|
362
301
|
return out.response;
|
|
@@ -386,52 +325,41 @@ export function registerAiSeoRoutes(router) {
|
|
|
386
325
|
if (!entity)
|
|
387
326
|
return errorResponse('Content not found', 404);
|
|
388
327
|
const schemaPrompt = `Generate valid Schema.org JSON-LD of type "${body.schemaType}" for the content below. Return ONLY a JSON object (no markdown fences), starting with {"@context":"https://schema.org","@type":"${body.schemaType}"}.\n\nTitle: ${clampAiContent(entity.title, 300)}\nContent: ${fenceUntrusted(entity.content)}`;
|
|
328
|
+
const gen = await governedSeoText({
|
|
329
|
+
featureKey: 'ai.features.seoMetaGeneration',
|
|
330
|
+
userId: auth.session.userId,
|
|
331
|
+
prompt: schemaPrompt,
|
|
332
|
+
maxTokens: 800,
|
|
333
|
+
});
|
|
334
|
+
if ('response' in gen)
|
|
335
|
+
return gen.response;
|
|
336
|
+
const cleaned = gen.text
|
|
337
|
+
.replace(/```json?\n?/g, '')
|
|
338
|
+
.replace(/```/g, '')
|
|
339
|
+
.trim();
|
|
340
|
+
let structuredData;
|
|
389
341
|
try {
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
const cleaned = gen.text
|
|
403
|
-
.replace(/```json?\n?/g, '')
|
|
404
|
-
.replace(/```/g, '')
|
|
405
|
-
.trim();
|
|
406
|
-
let structuredData;
|
|
407
|
-
try {
|
|
408
|
-
structuredData = JSON.parse(cleaned);
|
|
409
|
-
}
|
|
410
|
-
catch {
|
|
411
|
-
return errorResponse('AI returned invalid JSON-LD. Please try again.', 422);
|
|
412
|
-
}
|
|
413
|
-
// Minimal validation: must be an object carrying an @type. Never trust
|
|
414
|
-
// raw model output for structured data.
|
|
415
|
-
if (!structuredData ||
|
|
416
|
-
typeof structuredData !== 'object' ||
|
|
417
|
-
Array.isArray(structuredData) ||
|
|
418
|
-
!('@type' in structuredData)) {
|
|
419
|
-
return errorResponse('AI output did not contain valid structured data.', 422);
|
|
420
|
-
}
|
|
421
|
-
if (!('@context' in structuredData)) {
|
|
422
|
-
structuredData['@context'] = 'https://schema.org';
|
|
423
|
-
}
|
|
424
|
-
await logAiSeoEvent(auth.session.userId, 'generate-schema', {
|
|
425
|
-
entityId: body.entityId,
|
|
426
|
-
schemaType: body.schemaType,
|
|
427
|
-
});
|
|
428
|
-
return json({ data: { structuredData } });
|
|
342
|
+
structuredData = JSON.parse(cleaned);
|
|
343
|
+
}
|
|
344
|
+
catch {
|
|
345
|
+
return errorResponse('AI returned invalid JSON-LD. Please try again.', 422);
|
|
346
|
+
}
|
|
347
|
+
// Minimal validation: must be an object carrying an @type. Never trust
|
|
348
|
+
// raw model output for structured data.
|
|
349
|
+
if (!structuredData ||
|
|
350
|
+
typeof structuredData !== 'object' ||
|
|
351
|
+
Array.isArray(structuredData) ||
|
|
352
|
+
!('@type' in structuredData)) {
|
|
353
|
+
return errorResponse('AI output did not contain valid structured data.', 422);
|
|
429
354
|
}
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
return errorResponse('AI provider is not configured.', 503);
|
|
433
|
-
throw err;
|
|
355
|
+
if (!('@context' in structuredData)) {
|
|
356
|
+
structuredData['@context'] = 'https://schema.org';
|
|
434
357
|
}
|
|
358
|
+
await logAiSeoEvent(auth.session.userId, 'generate-schema', {
|
|
359
|
+
entityId: body.entityId,
|
|
360
|
+
schemaType: body.schemaType,
|
|
361
|
+
});
|
|
362
|
+
return json({ data: { structuredData } });
|
|
435
363
|
}
|
|
436
364
|
catch (err) {
|
|
437
365
|
return internalError(err, 'ai seo generate-schema');
|
|
@@ -472,10 +400,6 @@ export function registerAiSeoRoutes(router) {
|
|
|
472
400
|
userId: auth.session.userId,
|
|
473
401
|
prompt,
|
|
474
402
|
maxTokens: 512,
|
|
475
|
-
fallback: async () => {
|
|
476
|
-
const ai = await importAIPlugin();
|
|
477
|
-
return (await ai.generate(prompt));
|
|
478
|
-
},
|
|
479
403
|
});
|
|
480
404
|
if ('response' in out)
|
|
481
405
|
return out.response;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-seo.js","sourceRoot":"","sources":["../../../src/api/routes/ai-seo.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ai-seo.js","sourceRoot":"","sources":["../../../src/api/routes/ai-seo.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-settings.d.ts","sourceRoot":"","sources":["../../../src/api/routes/ai-settings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AA0B7C,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"ai-settings.d.ts","sourceRoot":"","sources":["../../../src/api/routes/ai-settings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AA0B7C,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAi2ChE"}
|
|
@@ -70,17 +70,31 @@ export function registerAiSettingsRoutes(router) {
|
|
|
70
70
|
const { getAIConfig, putAIConfig, getModels, normalizeBrandVoice, prepareBrandVoiceForSave } = await import('../../ai/index.js');
|
|
71
71
|
const config = await getAIConfig(db());
|
|
72
72
|
const catalog = await getModels(db());
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
73
|
+
const warnings = [];
|
|
74
|
+
// A default provider that no longer exists (typically a stale `env:*`
|
|
75
|
+
// row after the host removed the env var, or a deleted connection) is
|
|
76
|
+
// cleared with a warning rather than rejected: the admin is usually
|
|
77
|
+
// sending the whole settings form back and could not otherwise save.
|
|
78
|
+
let nextDefaultProviderId = body.defaultProviderId;
|
|
79
|
+
let nextDefaultModelId = body.defaultModelId;
|
|
80
|
+
const staleProvider = typeof body.defaultProviderId === 'string' &&
|
|
81
|
+
body.defaultProviderId !== '' &&
|
|
82
|
+
!config.providers.some((p) => p.id === body.defaultProviderId);
|
|
83
|
+
if (staleProvider) {
|
|
84
|
+
warnings.push(`Default provider "${body.defaultProviderId}" is no longer connected; the default provider was cleared.`);
|
|
85
|
+
nextDefaultProviderId = null;
|
|
77
86
|
}
|
|
78
87
|
// Validate the selected default model is in the catalog and available.
|
|
79
88
|
if (body.defaultModelId) {
|
|
80
89
|
const model = catalog.find((m) => m.id === body.defaultModelId || m.providerModelId === body.defaultModelId);
|
|
81
|
-
if (!model)
|
|
82
|
-
|
|
83
|
-
|
|
90
|
+
if (!model) {
|
|
91
|
+
if (!staleProvider)
|
|
92
|
+
return errorResponse('Selected model is not in the catalog', 400);
|
|
93
|
+
// The model is unresolvable because its provider is gone: clear it too.
|
|
94
|
+
warnings.push(`Default model "${body.defaultModelId}" belonged to the removed provider; the default model was cleared.`);
|
|
95
|
+
nextDefaultModelId = null;
|
|
96
|
+
}
|
|
97
|
+
else if (model.status === 'unavailable') {
|
|
84
98
|
return errorResponse('Selected model is currently unavailable', 400);
|
|
85
99
|
}
|
|
86
100
|
}
|
|
@@ -215,12 +229,12 @@ export function registerAiSettingsRoutes(router) {
|
|
|
215
229
|
}
|
|
216
230
|
const nextSettings = {
|
|
217
231
|
...config.settings,
|
|
218
|
-
defaultProviderId:
|
|
232
|
+
defaultProviderId: nextDefaultProviderId === null
|
|
219
233
|
? undefined
|
|
220
|
-
: (
|
|
221
|
-
defaultModelId:
|
|
234
|
+
: (nextDefaultProviderId ?? config.settings.defaultProviderId),
|
|
235
|
+
defaultModelId: nextDefaultModelId === null
|
|
222
236
|
? undefined
|
|
223
|
-
: (
|
|
237
|
+
: (nextDefaultModelId ?? config.settings.defaultModelId),
|
|
224
238
|
features: nextFeatures,
|
|
225
239
|
budget: {
|
|
226
240
|
...config.settings.budget,
|
|
@@ -248,7 +262,7 @@ export function registerAiSettingsRoutes(router) {
|
|
|
248
262
|
// Audit must never block the write.
|
|
249
263
|
}
|
|
250
264
|
const { toPublicConfig } = await import('../../ai/index.js');
|
|
251
|
-
return json({ data: toPublicConfig(saved) });
|
|
265
|
+
return json({ data: toPublicConfig(saved), warnings });
|
|
252
266
|
}
|
|
253
267
|
catch (err) {
|
|
254
268
|
return internalError(err, 'ai/settings PUT');
|
|
@@ -354,12 +368,15 @@ export function registerAiSettingsRoutes(router) {
|
|
|
354
368
|
if (!body || typeof body !== 'object') {
|
|
355
369
|
return errorResponse('Request body must be an object', 400);
|
|
356
370
|
}
|
|
357
|
-
const { getAIConfig, putAIConfig, encryptProviderKey, getEnvApiKey, toPublicProvider } = await import('../../ai/index.js');
|
|
371
|
+
const { getAIConfig, putAIConfig, encryptProviderKey, getEnvApiKey, isEnvConnectionId, toPublicProvider, } = await import('../../ai/index.js');
|
|
358
372
|
const config = await getAIConfig(db());
|
|
359
373
|
const idx = config.providers.findIndex((p) => p.id === params.id);
|
|
360
374
|
if (idx === -1)
|
|
361
375
|
return errorResponse('Provider connection not found', 404);
|
|
362
376
|
const prev = config.providers[idx];
|
|
377
|
+
if (isEnvConnectionId(prev.id)) {
|
|
378
|
+
return errorResponse('This connection comes from a provider API key environment variable and cannot be edited here. Change or remove the env var on your host, or add a stored connection for this provider to override it.', 400);
|
|
379
|
+
}
|
|
363
380
|
if (prev.provider === 'custom' && typeof body.baseUrl === 'string') {
|
|
364
381
|
const { validateWebhookUrl } = await import('../../security/webhook.js');
|
|
365
382
|
const check = validateWebhookUrl(body.baseUrl);
|
|
@@ -439,11 +456,14 @@ export function registerAiSettingsRoutes(router) {
|
|
|
439
456
|
const id = params.id;
|
|
440
457
|
if (!id)
|
|
441
458
|
return errorResponse('Provider connection not found', 404);
|
|
442
|
-
const { getAIConfig, putAIConfig } = await import('../../ai/index.js');
|
|
459
|
+
const { getAIConfig, putAIConfig, isEnvConnectionId } = await import('../../ai/index.js');
|
|
443
460
|
const config = await getAIConfig(db());
|
|
444
461
|
const exists = config.providers.some((p) => p.id === id);
|
|
445
462
|
if (!exists)
|
|
446
463
|
return errorResponse('Provider connection not found', 404);
|
|
464
|
+
if (isEnvConnectionId(id)) {
|
|
465
|
+
return errorResponse('This connection comes from a provider API key environment variable and cannot be deleted here. Remove the env var on your host.', 400);
|
|
466
|
+
}
|
|
447
467
|
const nextCatalog = { ...(config.catalog ?? {}) };
|
|
448
468
|
delete nextCatalog[id];
|
|
449
469
|
// Clear default selectors that pointed at the removed provider.
|
|
@@ -481,13 +501,16 @@ export function registerAiSettingsRoutes(router) {
|
|
|
481
501
|
const adminErr = requireAdminScope(auth.session);
|
|
482
502
|
if (adminErr)
|
|
483
503
|
return adminErr;
|
|
484
|
-
const { getAIConfig, putAIConfig, resolveProviderKey, toPublicProvider } = await import('../../ai/index.js');
|
|
504
|
+
const { getAIConfig, putAIConfig, resolveProviderKey, toPublicProvider, isEnvConnectionId } = await import('../../ai/index.js');
|
|
485
505
|
const { testConnection } = await import('../../ai/providers/index.js');
|
|
486
506
|
const config = await getAIConfig(db());
|
|
487
507
|
const idx = config.providers.findIndex((p) => p.id === params.id);
|
|
488
508
|
if (idx === -1)
|
|
489
509
|
return errorResponse('Provider connection not found', 404);
|
|
490
510
|
const conn = config.providers[idx];
|
|
511
|
+
// Env-synthesized connections are never persisted, so their test result
|
|
512
|
+
// is returned but not stored (status is re-derived on every read).
|
|
513
|
+
const envSynthesized = isEnvConnectionId(conn.id);
|
|
491
514
|
const key = await resolveProviderKey(conn);
|
|
492
515
|
const result = await testConnection(conn.provider, {
|
|
493
516
|
apiKey: key ?? '',
|
|
@@ -495,10 +518,18 @@ export function registerAiSettingsRoutes(router) {
|
|
|
495
518
|
organizationId: conn.organizationId,
|
|
496
519
|
projectId: conn.projectId,
|
|
497
520
|
});
|
|
498
|
-
const updated = {
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
521
|
+
const updated = {
|
|
522
|
+
...conn,
|
|
523
|
+
status: result.status,
|
|
524
|
+
lastTestedAt: result.testedAt,
|
|
525
|
+
};
|
|
526
|
+
let out = updated;
|
|
527
|
+
if (!envSynthesized) {
|
|
528
|
+
const nextProviders = [...config.providers];
|
|
529
|
+
nextProviders[idx] = updated;
|
|
530
|
+
const saved = await putAIConfig(db(), { ...config, providers: nextProviders }, auth.session.userId);
|
|
531
|
+
out = saved.providers.find((p) => p.id === conn.id) ?? updated;
|
|
532
|
+
}
|
|
502
533
|
try {
|
|
503
534
|
await logEvent({
|
|
504
535
|
event: 'test_ai_provider',
|
|
@@ -514,7 +545,6 @@ export function registerAiSettingsRoutes(router) {
|
|
|
514
545
|
catch {
|
|
515
546
|
/* never block on audit */
|
|
516
547
|
}
|
|
517
|
-
const out = saved.providers.find((p) => p.id === conn.id);
|
|
518
548
|
return json({ data: { provider: toPublicProvider(out), result } });
|
|
519
549
|
}
|
|
520
550
|
catch (err) {
|
|
@@ -533,7 +563,7 @@ export function registerAiSettingsRoutes(router) {
|
|
|
533
563
|
if (!id)
|
|
534
564
|
return errorResponse('Provider connection not found', 404);
|
|
535
565
|
const { syncModels } = await import('../../ai/index.js');
|
|
536
|
-
const result = await syncModels(db(), id).catch((err) => {
|
|
566
|
+
const result = await syncModels(db(), id, auth.session.userId).catch((err) => {
|
|
537
567
|
if (err instanceof Error && /not found/i.test(err.message))
|
|
538
568
|
return null;
|
|
539
569
|
throw err;
|
|
@@ -672,8 +702,8 @@ export function registerAiSettingsRoutes(router) {
|
|
|
672
702
|
return errorResponse('No readable content found in the selected sources. Publish content, check URLs, or try different uploads.', 404);
|
|
673
703
|
}
|
|
674
704
|
const { system, prompt } = buildBrandVoiceAnalysisPrompt(samples);
|
|
675
|
-
const {
|
|
676
|
-
const generated = await
|
|
705
|
+
const { generateContentWriting } = await import('../../ai/index.js');
|
|
706
|
+
const generated = await generateContentWriting(db(), {
|
|
677
707
|
system,
|
|
678
708
|
prompt,
|
|
679
709
|
maxTokens: 2048,
|
|
@@ -682,7 +712,13 @@ export function registerAiSettingsRoutes(router) {
|
|
|
682
712
|
useBrandVoice: false,
|
|
683
713
|
});
|
|
684
714
|
if (!generated.ok) {
|
|
685
|
-
|
|
715
|
+
// Same body shape as `runtimeErrorToResponse`: the admin reads `code`
|
|
716
|
+
// and `hint` to render the setup call-to-action.
|
|
717
|
+
return json({
|
|
718
|
+
error: generated.message,
|
|
719
|
+
code: generated.code,
|
|
720
|
+
...(generated.hint !== undefined ? { hint: generated.hint } : {}),
|
|
721
|
+
}, generated.httpStatus);
|
|
686
722
|
}
|
|
687
723
|
const draft = parseBrandVoiceAnalysisResponse(generated.text);
|
|
688
724
|
if (!draft) {
|
|
@@ -780,7 +816,7 @@ export function registerAiSettingsRoutes(router) {
|
|
|
780
816
|
}
|
|
781
817
|
const channel = typeof body?.channel === 'string' && body.channel.trim() ? body.channel.trim() : undefined;
|
|
782
818
|
const useAi = body?.useAi !== false;
|
|
783
|
-
const { getAIConfig, ensureBrandVoiceDocument, parseStructuredProfile, runDeterministicBrandFix, needsAiBrandFix, buildBrandVoiceFixPrompt, scoreBrandAlignment,
|
|
819
|
+
const { getAIConfig, ensureBrandVoiceDocument, parseStructuredProfile, runDeterministicBrandFix, needsAiBrandFix, buildBrandVoiceFixPrompt, scoreBrandAlignment, generateContentWriting, } = await import('../../ai/index.js');
|
|
784
820
|
const config = await getAIConfig(db());
|
|
785
821
|
const profile = config.settings.brandVoice;
|
|
786
822
|
if (!profile?.document?.trim() && !profile?.tone?.trim() && !profile?.guidelines?.trim()) {
|
|
@@ -794,9 +830,12 @@ export function registerAiSettingsRoutes(router) {
|
|
|
794
830
|
}
|
|
795
831
|
let outcome = runDeterministicBrandFix(content, structured, channel);
|
|
796
832
|
let text = outcome.text;
|
|
833
|
+
// Set only when an AI pass was wanted and the governed runtime refused,
|
|
834
|
+
// so the caller can tell "rules were enough" from "AI is not available".
|
|
835
|
+
let aiUnavailable;
|
|
797
836
|
if (useAi && needsAiBrandFix(outcome.afterScore)) {
|
|
798
837
|
const { system, prompt } = buildBrandVoiceFixPrompt(text, outcome.afterScore.issues, structured);
|
|
799
|
-
const aiResult = await
|
|
838
|
+
const aiResult = await generateContentWriting(db(), {
|
|
800
839
|
system,
|
|
801
840
|
prompt,
|
|
802
841
|
maxTokens: 1024,
|
|
@@ -804,8 +843,8 @@ export function registerAiSettingsRoutes(router) {
|
|
|
804
843
|
userId: auth.session.userId,
|
|
805
844
|
useBrandVoice: true,
|
|
806
845
|
});
|
|
807
|
-
if (aiResult.ok
|
|
808
|
-
text = aiResult.text
|
|
846
|
+
if (aiResult.ok) {
|
|
847
|
+
text = aiResult.text;
|
|
809
848
|
outcome = {
|
|
810
849
|
...outcome,
|
|
811
850
|
text,
|
|
@@ -813,6 +852,13 @@ export function registerAiSettingsRoutes(router) {
|
|
|
813
852
|
usedAi: true,
|
|
814
853
|
};
|
|
815
854
|
}
|
|
855
|
+
else {
|
|
856
|
+
aiUnavailable = {
|
|
857
|
+
code: aiResult.code,
|
|
858
|
+
message: aiResult.message,
|
|
859
|
+
...(aiResult.hint !== undefined ? { hint: aiResult.hint } : {}),
|
|
860
|
+
};
|
|
861
|
+
}
|
|
816
862
|
}
|
|
817
863
|
try {
|
|
818
864
|
await logEvent({
|
|
@@ -821,6 +867,7 @@ export function registerAiSettingsRoutes(router) {
|
|
|
821
867
|
details: {
|
|
822
868
|
channel,
|
|
823
869
|
usedAi: outcome.usedAi,
|
|
870
|
+
...(aiUnavailable ? { aiRefusalCode: aiUnavailable.code } : {}),
|
|
824
871
|
beforeScore: outcome.beforeScore.score,
|
|
825
872
|
afterScore: outcome.afterScore.score,
|
|
826
873
|
deterministicFixCount: outcome.deterministicFixes.length,
|
|
@@ -837,6 +884,7 @@ export function registerAiSettingsRoutes(router) {
|
|
|
837
884
|
beforeScore: outcome.beforeScore,
|
|
838
885
|
afterScore: outcome.afterScore,
|
|
839
886
|
usedAi: outcome.usedAi,
|
|
887
|
+
...(aiUnavailable ? { aiUnavailable } : {}),
|
|
840
888
|
},
|
|
841
889
|
});
|
|
842
890
|
}
|