@prenta/core 7.3.0 → 7.4.1
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 +18 -0
- package/dist/api/handler-factory.d.ts.map +1 -1
- package/dist/api/handler-factory.js +10 -2
- package/dist/api/handler-factory.js.map +1 -1
- package/dist/api/route-helpers.d.ts.map +1 -1
- package/dist/api/route-helpers.js +5 -5
- package/dist/api/route-helpers.js.map +1 -1
- package/dist/api/routes/seo.d.ts.map +1 -1
- package/dist/api/routes/seo.js +5 -1
- package/dist/api/routes/seo.js.map +1 -1
- package/dist/diagnostics/logger.d.ts +13 -1
- package/dist/diagnostics/logger.d.ts.map +1 -1
- package/dist/diagnostics/logger.js +25 -3
- package/dist/diagnostics/logger.js.map +1 -1
- package/dist/generated/internal/class.js +1 -1
- package/dist/seo/autopilot-policy.d.ts +2 -4
- package/dist/seo/autopilot-policy.d.ts.map +1 -1
- package/dist/seo/autopilot-policy.js +2 -13
- package/dist/seo/autopilot-policy.js.map +1 -1
- package/dist/seo/issue-content-brief.d.ts +2 -2
- package/dist/seo/issue-content-brief.d.ts.map +1 -1
- package/dist/seo/issue-content-brief.js +2 -7
- package/dist/seo/issue-content-brief.js.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 +2 -1
- package/dist/seo/issue-content-research.js.map +1 -1
- package/dist/seo/issue-fix-ai.d.ts +2 -1
- package/dist/seo/issue-fix-ai.d.ts.map +1 -1
- package/dist/seo/issue-fix-ai.js +2 -10
- package/dist/seo/issue-fix-ai.js.map +1 -1
- package/dist/seo/issue-fix-link-insert.d.ts +2 -2
- package/dist/seo/issue-fix-link-insert.d.ts.map +1 -1
- package/dist/seo/issue-fix-link-insert.js +2 -1
- package/dist/seo/issue-fix-link-insert.js.map +1 -1
- package/dist/seo/issue-fix-redirect.d.ts +2 -1
- package/dist/seo/issue-fix-redirect.d.ts.map +1 -1
- package/dist/seo/issue-fix-redirect.js +2 -1
- package/dist/seo/issue-fix-redirect.js.map +1 -1
- package/dist/seo/issue-fix.d.ts +2 -2
- package/dist/seo/issue-fix.d.ts.map +1 -1
- package/dist/seo/issue-fix.js +2 -10
- package/dist/seo/issue-fix.js.map +1 -1
- package/dist/seo/issue-types.d.ts +25 -0
- package/dist/seo/issue-types.d.ts.map +1 -0
- package/dist/seo/issue-types.js +63 -0
- package/dist/seo/issue-types.js.map +1 -0
- package/package.json +6 -1
- package/prisma/migrations/0020_hot_query_indexes/migration.sql +11 -0
- package/prisma/schema.prisma +3 -0
|
@@ -18,7 +18,7 @@ const config = {
|
|
|
18
18
|
"clientVersion": "7.8.0",
|
|
19
19
|
"engineVersion": "3c6e192761c0362d496ed980de936e2f3cebcd3a",
|
|
20
20
|
"activeProvider": "postgresql",
|
|
21
|
-
"inlineSchema": "generator client {\n provider = \"prisma-client\"\n output = \"../generated\"\n // `relationJoins` is the Preview-feature flag that makes\n // `relationLoadStrategy: 'join'` a recognised argument on\n // findUnique / findMany / findFirst. Without it the option is\n // silently rejected as an \"Unknown argument\" by Prisma — which\n // is how the optimisation in PR #132 (dashboard recent-docs +\n // versions list + bench `doc_get`) went unnoticed in production:\n // `safeFindMany` swallowed the rejection and returned `[]`, the\n // versions endpoint returned 500, and the bench reported \"100/100\n // errors\" with no attached cause. Phase 5.5 #5 surfaced the\n // failure once the bench harness started recording the first\n // error message.\n //\n // The feature has been Preview since Prisma 5.7 and is documented\n // at https://www.prisma.io/docs/orm/prisma-client/queries/relation-queries#relation-load-strategies\n previewFeatures = [\"fullTextSearchPostgres\", \"relationJoins\"]\n}\n\ndatasource db {\n provider = \"postgresql\"\n}\n\n// ─── Enums ──────────────────────────────────────────────────────────\n\nenum DocumentStatus {\n DRAFT\n PUBLISHED\n ARCHIVED\n SCHEDULED\n SCHEDULED_UNPUBLISH\n}\n\nenum UserRole {\n ADMIN\n EDITOR\n AUTHOR\n CLIENT\n OWNER\n VIEWER\n}\n\nenum InviteStatus {\n PENDING\n ACCEPTED\n EXPIRED\n CANCELLED\n}\n\nenum ChangeType {\n CREATE\n UPDATE\n PUBLISH\n RESTORE\n DELETE\n}\n\nenum ContentIssueType {\n // Document is published but missing a `metaDescription` /\n // `seoDescription` field — the dashboard surfaces these so editors\n // can fix the SERP snippet before a competitor outranks them.\n MISSING_META_DESCRIPTION\n // Document HTML contains <img> tags without alt attributes. Hurts\n // both a11y and SEO. Counted per *document* not per image — so a\n // page with 5 alt-less images is 1 row, not 5, with `details.count`\n // capturing the per-document count.\n MISSING_ALT_TEXT\n // Internal link (same-origin URL or relative path) returned 404 /\n // 410 / DNS-failure when the link checker probed it. `details.url`\n // holds the offending URL.\n BROKEN_INTERNAL_LINK\n // Published document not touched in >90 days. Encourages refresh\n // of stale content — particularly important for \"best of YEAR\"\n // posts that decay rapidly.\n OUTDATED_CONTENT\n}\n\nenum WorkflowStage {\n DRAFT\n IN_REVIEW\n APPROVED\n PUBLISHED\n ARCHIVED\n}\n\n// ─── Models ─────────────────────────────────────────────────────────\n\nmodel User {\n id String @id @default(cuid())\n email String @unique\n name String\n avatarUrl String?\n role UserRole @default(AUTHOR)\n passwordHash String?\n totpSecret String?\n totpEnabled Boolean @default(false)\n // Last consumed TOTP time-step — enforces single-use so a captured code can't\n // be replayed within its validity window (#565). Null until the first TOTP login.\n lastTotpStep Int?\n backupCodes Json?\n authProvider String?\n isActive Boolean @default(true)\n isApproved Boolean @default(false)\n emailVerified Boolean @default(false)\n lastLoginAt DateTime?\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n // Access-control lifecycle (Users management subsystem). All additive and\n // nullable/defaulted so existing rows migrate cleanly.\n suspendedAt DateTime?\n lockedAt DateTime?\n forcePasswordReset Boolean @default(false)\n mfaRequired Boolean @default(false)\n failedLoginCount Int @default(0)\n lastActiveAt DateTime?\n invitedById String?\n acceptedInviteAt DateTime?\n\n sessions Session[]\n oauthAccounts OAuthAccount[]\n apiKeys ApiKey[]\n documents Document[] @relation(\"CreatedDocuments\")\n updatedDocuments Document[] @relation(\"UpdatedDocuments\")\n versions Version[]\n media Media[]\n contentLocks ContentLock[]\n notifications InAppNotification[]\n contentTemplates ContentTemplate[]\n passwordResetTokens PasswordResetToken[]\n documentComments DocumentComment[]\n documentNotifications DocumentNotification[]\n\n @@map(\"prenta_users\")\n}\n\nmodel OAuthAccount {\n id String @id @default(cuid())\n userId String\n provider String\n providerAccountId String\n accessToken String?\n refreshToken String?\n expiresAt DateTime?\n createdAt DateTime @default(now())\n\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n\n @@unique([provider, providerAccountId])\n @@map(\"prenta_oauth_accounts\")\n}\n\nmodel Session {\n id String @id @default(cuid())\n userId String\n token String @unique\n expiresAt DateTime\n revokedAt DateTime?\n ipAddress String?\n userAgent String?\n fingerprintHash String?\n createdAt DateTime @default(now())\n\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n\n @@index([userId])\n @@index([expiresAt])\n @@map(\"prenta_sessions\")\n}\n\nmodel ApiKey {\n id String @id @default(cuid())\n name String\n keyHash String @unique\n keyPrefix String\n userId String\n scopes Json\n ipRestrictions Json?\n expiresAt DateTime?\n lastUsedAt DateTime?\n revokedAt DateTime?\n createdAt DateTime @default(now())\n\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n\n @@index([userId])\n @@map(\"prenta_api_keys\")\n}\n\nmodel AuditLog {\n id String @id @default(cuid())\n event String\n userId String?\n ipAddress String?\n userAgent String?\n details Json?\n timestamp DateTime @default(now())\n\n @@index([event])\n @@index([userId])\n @@index([timestamp])\n @@map(\"prenta_audit_logs\")\n}\n\nmodel Folder {\n id String @id @default(cuid())\n name String\n scope String\n parentId String?\n position Int @default(0)\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n parent Folder? @relation(\"FolderTree\", fields: [parentId], references: [id], onDelete: Cascade)\n children Folder[] @relation(\"FolderTree\")\n\n documents Document[]\n media Media[]\n\n @@index([scope])\n @@index([parentId])\n @@map(\"prenta_folders\")\n}\n\nmodel Document {\n id String @id @default(cuid())\n collection String\n title String?\n slug String?\n data Json\n status DocumentStatus @default(DRAFT)\n locale String?\n localeGroupId String?\n createdById String\n updatedById String\n publishedAt DateTime?\n scheduledAt DateTime?\n scheduledUnpublishAt DateTime?\n deletedAt DateTime?\n plainText String?\n contentHash String?\n structuredData Json?\n templateId String?\n workflowStage WorkflowStage @default(DRAFT)\n reviewerId String?\n reviewNote String?\n folderId String?\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n createdBy User @relation(\"CreatedDocuments\", fields: [createdById], references: [id])\n updatedBy User @relation(\"UpdatedDocuments\", fields: [updatedById], references: [id])\n folder Folder? @relation(fields: [folderId], references: [id], onDelete: SetNull)\n versions Version[]\n mediaUsages MediaUsage[]\n contentLocks ContentLock[]\n contentIssues ContentIssue[]\n\n @@unique([collection, slug])\n @@index([collection])\n @@index([status])\n @@index([deletedAt])\n @@index([publishedAt])\n @@index([folderId])\n @@index([scheduledAt])\n @@index([localeGroupId])\n @@index([createdById])\n @@map(\"prenta_documents\")\n}\n\nmodel Version {\n id String @id @default(cuid())\n documentId String\n data Json\n changedById String\n changeType ChangeType\n createdAt DateTime @default(now())\n\n document Document @relation(fields: [documentId], references: [id], onDelete: Cascade)\n changedBy User @relation(fields: [changedById], references: [id])\n\n @@index([documentId])\n @@map(\"prenta_versions\")\n}\n\nenum MediaStatus {\n PROCESSING\n READY\n FAILED\n}\n\nmodel Media {\n id String @id @default(cuid())\n filename String\n storageKey String @unique\n mimeType String\n fileSize Int\n width Int?\n height Int?\n altText String?\n title String?\n uploadedById String\n focalPointX Float?\n focalPointY Float?\n blurHash String?\n aiAltText String?\n aiTags Json?\n aiDescription String?\n folderId String?\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n // ── Media Center additions ──────────────────────────────────────\n // All nullable / defaulted so they're safe to add to a populated DB\n // with no backfill. SEO score/issues are intentionally NOT stored —\n // they're derived on read by `calculateMediaSeoScore()` so they can\n // never drift from the metadata below.\n originalFileName String?\n caption String?\n description String?\n focusKeyword String?\n // WCAG decorative images use alt=\"\" intentionally. Persisted so the\n // media SEO scorer awards the alt weight instead of flagging missing-alt\n // (#714). Cleared automatically when a non-empty alt is saved.\n isDecorative Boolean @default(false)\n tags Json?\n // SHA-256 hex of the final stored bytes (post-optimize). Used to make\n // re-uploads / seed re-runs idempotent instead of creating byte-identical\n // twins (#718). Nullable so legacy rows need no backfill.\n contentHash String?\n // `storageKey` historically held the public URL; `publicUrl` splits\n // that concern out. New uploads populate both; legacy rows keep the\n // URL in `storageKey` and `mediaUrl()` still resolves it.\n publicUrl String?\n storageProvider String?\n durationSeconds Float?\n thumbnailUrl String?\n responsiveVariants Json?\n status MediaStatus @default(READY)\n deletedAt DateTime?\n\n uploadedBy User @relation(fields: [uploadedById], references: [id])\n folder Folder? @relation(fields: [folderId], references: [id], onDelete: SetNull)\n mediaUsages MediaUsage[]\n\n @@index([folderId])\n @@index([deletedAt])\n @@index([mimeType])\n @@index([contentHash])\n @@map(\"prenta_media\")\n}\n\nmodel MediaUsage {\n id String @id @default(cuid())\n mediaId String\n documentId String\n fieldPath String\n createdAt DateTime @default(now())\n\n media Media @relation(fields: [mediaId], references: [id], onDelete: Cascade)\n document Document @relation(fields: [documentId], references: [id], onDelete: Cascade)\n\n @@unique([mediaId, documentId, fieldPath])\n @@index([documentId])\n @@map(\"prenta_media_usages\")\n}\n\nmodel ContentLock {\n id String @id @default(cuid())\n documentId String\n userId String\n lockedAt DateTime @default(now())\n expiresAt DateTime\n\n document Document @relation(fields: [documentId], references: [id], onDelete: Cascade)\n user User @relation(fields: [userId], references: [id])\n\n @@unique([documentId])\n @@map(\"prenta_content_locks\")\n}\n\nmodel InAppNotification {\n id String @id @default(cuid())\n userId String\n type String\n title String\n message String?\n link String?\n read Boolean @default(false)\n createdAt DateTime @default(now())\n\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n\n @@index([userId])\n @@map(\"prenta_notifications\")\n}\n\nmodel ContentTemplate {\n id String @id @default(cuid())\n name String\n collection String\n templateData Json\n createdById String\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n createdBy User @relation(fields: [createdById], references: [id])\n\n @@map(\"prenta_content_templates\")\n}\n\nmodel Redirect {\n id String @id @default(cuid())\n source String\n destination String\n statusCode Int @default(301)\n isRegex Boolean @default(false)\n notes String?\n // Runtime + management metadata (added in 0009_seo). All defaulted so the\n // migration is safe to apply to a populated table with no backfill.\n enabled Boolean @default(true)\n priority Int @default(0)\n preserveQuery Boolean @default(false)\n // \"manual\" | \"import\" | \"ai-404-recovery\" | \"chain-flatten\"\n source_kind String @default(\"manual\")\n hits Int @default(0)\n lastHitAt DateTime?\n createdById String?\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@unique([source])\n @@index([enabled])\n @@index([lastHitAt])\n @@map(\"prenta_redirects\")\n}\n\n// ─── SEO module (0009_seo) ──────────────────────────────────────────\n\nenum SeoAuditStatus {\n RUNNING\n COMPLETED\n FAILED\n}\n\nenum SeoIssueSeverity {\n critical\n warning\n info\n}\n\nenum SeoIssueStatus {\n open\n ignored\n resolved\n recurring\n}\n\nenum SeoIssueCategory {\n content\n technical\n redirects\n media\n performance\n schema\n social\n indexing\n}\n\n/// One execution of the SEO audit engine. Holds a snapshot of the site\n/// score and issue counts so the Audit tab can show run history without\n/// recomputing. Issues belong to a run via SEOIssue.auditRunId.\nmodel SeoAuditRun {\n id String @id @default(cuid())\n status SeoAuditStatus @default(RUNNING)\n scope String @default(\"full\")\n startedById String?\n startedAt DateTime @default(now())\n finishedAt DateTime?\n siteScoreBefore Int?\n siteScoreAfter Int?\n pagesScanned Int @default(0)\n issuesFound Int @default(0)\n criticalCount Int @default(0)\n warningCount Int @default(0)\n infoCount Int @default(0)\n errorMessage String?\n metadata Json?\n\n issues SeoIssue[]\n\n @@index([status])\n @@index([startedAt])\n @@map(\"prenta_seo_audit_runs\")\n}\n\n/// A single SEO problem detected by an audit run. `issueKey` is a stable\n/// hash of (type + entityId/url) used to carry status across runs so a\n/// resolved/ignored issue stays resolved/ignored when re-detected.\nmodel SeoIssue {\n id String @id @default(cuid())\n auditRunId String?\n issueKey String\n entityType String?\n entityId String?\n entityTitle String?\n url String?\n severity SeoIssueSeverity\n category SeoIssueCategory\n type String\n title String\n description String?\n impact String?\n recommendation String?\n status SeoIssueStatus @default(open)\n fixable Boolean @default(false)\n fixActionType String?\n relatedEntityIds Json?\n source String @default(\"audit\")\n firstDetectedAt DateTime @default(now())\n lastDetectedAt DateTime @default(now())\n resolvedAt DateTime?\n resolvedById String?\n metadata Json?\n\n auditRun SeoAuditRun? @relation(fields: [auditRunId], references: [id], onDelete: SetNull)\n\n @@index([auditRunId])\n @@index([status])\n @@index([severity])\n @@index([category])\n @@index([issueKey])\n @@map(\"prenta_seo_issues\")\n}\n\n/// A 404 hit observed by the redirect middleware. Aggregated per path so\n/// the Redirects tab can surface \"broken URLs still getting traffic\".\nmodel Redirect404Hit {\n id String @id @default(cuid())\n path String\n hits Int @default(1)\n referrer String?\n resolvedAt DateTime?\n firstSeenAt DateTime @default(now())\n lastSeenAt DateTime @default(now())\n\n @@unique([path])\n @@index([lastSeenAt])\n @@map(\"prenta_redirect_404_hits\")\n}\n\n/// Aggregated AI-crawler activity for the admin \"AI crawler activity\" panel.\n/// One row per (bot token, surface), upserted on each hit so the table stays\n/// bounded (~known bots × surfaces) and needs no periodic pruning.\n/// `surface` ∈ \"llms\" | \"llms-full\" | \"md\" | \"honeypot\".\n/// `category` mirrors the ai-bots taxonomy: \"training\" | \"retrieval\" | \"other\".\nmodel AiCrawlerHit {\n id String @id @default(cuid())\n bot String\n surface String\n category String @default(\"other\")\n hits Int @default(1)\n firstSeenAt DateTime @default(now())\n lastSeenAt DateTime @default(now())\n\n @@unique([bot, surface])\n @@index([lastSeenAt])\n @@map(\"prenta_ai_crawler_hits\")\n}\n\n/// One row per (page path, day) of Google Search Console search analytics,\n/// written by the nightly search sync. Dates are stored exactly as GSC\n/// reports them (property timezone) — never converted to UTC. Rolling\n/// 90-day window, pruned during sync.\nmodel SearchPerfDaily {\n id String @id @default(cuid())\n date DateTime @db.Date\n path String\n clicks Int @default(0)\n impressions Int @default(0)\n ctr Float @default(0)\n position Float @default(0)\n createdAt DateTime @default(now())\n\n @@unique([date, path])\n @@index([path])\n @@map(\"prenta_search_perf_daily\")\n}\n\n/// Per-page search insight snapshot: trailing-28-day totals + prior-window\n/// deltas (computed from SearchPerfDaily), top queries from GSC, and CrUX\n/// Core Web Vitals p75s. One row per normalized path, upserted by the sync.\n/// `cwvStatus` null means CrUX has no field data for the URL (normal for\n/// low-traffic pages), never an error.\nmodel SearchPageInsight {\n id String @id @default(cuid())\n path String @unique\n entityId String?\n entityType String?\n topQueries Json?\n clicks28d Int @default(0)\n impressions28d Int @default(0)\n avgPosition28d Float?\n clicksPrev28d Int @default(0)\n impressionsPrev28d Int @default(0)\n avgPositionPrev28d Float?\n lcpMs Int?\n inpMs Int?\n cls Float?\n cwvStatus String?\n cwvCollectedAt DateTime?\n createdAt DateTime @default(now())\n lastSyncedAt DateTime @updatedAt\n\n @@index([impressions28d])\n @@index([entityId])\n @@map(\"prenta_search_page_insights\")\n}\n\n/// GEO measurement: one row per (UTC day, crawler token, path) for known AI\n/// training / AI retrieval / search crawlers observed by the site middleware\n/// (spec 2026-09-08-geo-measurement-design.md §4). Distinct paths per\n/// (date, bot) are capped at GEO_CRAWL_PATH_CAP; overflow rolls into a\n/// single \"(other)\" row. Pruned by the cleanup cron after geoRetentionDays.\nmodel GeoCrawlDaily {\n id String @id @default(cuid())\n date DateTime @db.Date\n bot String\n category String\n path String\n hits Int @default(0)\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@unique([date, bot, path])\n @@index([date])\n @@index([bot, date])\n @@map(\"prenta_geo_crawl_daily\")\n}\n\n/// GEO measurement: one row per (UTC day, AI engine name, path) for visits\n/// referred by an answer engine (Referer host or utm_source). Distinct paths\n/// per (day, engine) are capped like GeoCrawlDaily — overflow rolls into a\n/// single path = \"(other)\" row — since the public beacon cannot prove a path\n/// exists on the site. Pruned with GeoCrawlDaily.\nmodel GeoReferralDaily {\n id String @id @default(cuid())\n date DateTime @db.Date\n engine String\n path String\n visits Int @default(0)\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@unique([date, engine, path])\n @@index([date])\n @@index([engine, date])\n @@map(\"prenta_geo_referral_daily\")\n}\n\n/// An AI/heuristic suggestion for a 404 destination. Confidence-scored and\n/// never auto-applied below the configured threshold.\nmodel RedirectSuggestion {\n id String @id @default(cuid())\n fromPath String\n toPath String\n confidence Int @default(0)\n reason String?\n // \"open\" | \"accepted\" | \"dismissed\"\n status String @default(\"open\")\n source String @default(\"ai-404-recovery\")\n metadata Json?\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@index([status])\n @@index([fromPath])\n @@map(\"prenta_redirect_suggestions\")\n}\n\n/// One row per change SEO Autopilot wrote (spec 2026-09-07-auto-apply-policy-engine §4).\n/// `before`/`after` hold the field-level diff for issue fixes, or the created\n/// redirect (after) for redirects. `before` is null for redirects: autopilot\n/// never overwrites an existing redirect. Rows are never deleted; revert flips `status`.\nmodel SeoAutoApply {\n id String @id @default(cuid())\n // 'issue-fix' | 'redirect'\n kind String\n issueId String?\n // AutopilotIssueType\n issueType String\n entityId String?\n collection String?\n // Public path at apply time — outcome-watch key into prenta_search_perf_daily.\n path String?\n redirectId String?\n before Json?\n after Json\n // { source, brandAlignment, confidence, checks }\n gate Json\n // 'applied' | 'verify_failed' | 'reverted' | 'outcome_reverted'\n status String\n // 'pending' | 'held' | 'regressed' | 'insufficient_data' | 'skipped'\n outcome String @default(\"pending\")\n outcomeMetrics Json?\n outcomeCheckedAt DateTime?\n versionId String?\n appliedById String\n appliedAt DateTime @default(now())\n revertedAt DateTime?\n revertedById String?\n // 'verify_failed' | 'outcome_regression' | 'manual'\n revertReason String?\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@index([status, appliedAt])\n @@index([entityId])\n @@index([outcome, appliedAt])\n @@index([issueId])\n @@map(\"prenta_seo_auto_applies\")\n}\n\n// A versioned snapshot of a form's field schema. Saving a form's schema in\n// the admin creates a new row here; submissions reference the version they\n// were captured against so historical entries always render with the fields\n// that existed at submit time, even after the live form schema changes.\nmodel FormSchemaVersion {\n id String @id @default(cuid())\n formId String\n version Int\n fields Json\n notes String?\n createdById String?\n createdAt DateTime @default(now())\n\n @@unique([formId, version])\n @@index([formId])\n @@map(\"prenta_form_schema_versions\")\n}\n\nmodel FormSubmission {\n id String @id @default(cuid())\n // Per-instance sequential number shown in the UI (e.g. #00001). Assigned by\n // the submission service inside a transaction; nullable for legacy rows.\n entryNumber Int?\n formId String\n schemaVersionId String?\n data Json\n // Server-derived, type-coerced view of `data` (e.g. checkbox -> bool,\n // number -> number) used for export/search. `data` keeps the raw payload.\n normalizedData Json?\n attribution Json?\n senderName String?\n senderEmail String?\n senderPhone String?\n preview String?\n // Legacy free-form status ('new'); superseded by the booleans below but\n // retained so existing rows/integrations keep working.\n status String @default(\"new\")\n unread Boolean @default(true)\n starred Boolean @default(false)\n archived Boolean @default(false)\n spamStatus String @default(\"clean\")\n ipAddressHash String?\n userAgent String?\n referrer String?\n pageUrl String?\n utmSource String?\n utmMedium String?\n utmCampaign String?\n submittedAt DateTime @default(now())\n readAt DateTime?\n archivedAt DateTime?\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n files FormSubmissionFile[]\n deliveries FormDeliveryAttempt[]\n\n @@index([formId])\n @@index([submittedAt])\n @@index([senderEmail])\n @@index([formId, submittedAt])\n @@map(\"prenta_form_submissions\")\n}\n\n// File attachments for a submission. Files are stored via the configured\n// storage adapter (never inline in the DB); this row tracks metadata and the\n// storage key needed to mint a secure download link.\nmodel FormSubmissionFile {\n id String @id @default(cuid())\n submissionId String\n fieldKey String\n mediaAssetId String?\n fileName String\n mimeType String\n sizeBytes Int\n storageKey String\n publicUrl String?\n secureDownloadUrl String?\n createdAt DateTime @default(now())\n\n submission FormSubmission @relation(fields: [submissionId], references: [id], onDelete: Cascade)\n\n @@index([submissionId])\n @@map(\"prenta_form_submission_files\")\n}\n\n// Per-form outbound webhook configuration. Distinct from the global\n// WebhookEndpoint registry so form owners can wire delivery without admin\n// access to site-wide webhooks.\nmodel FormWebhook {\n id String @id @default(cuid())\n formId String\n url String\n secret String\n /// Previous signing secret (encrypted) kept during rotation grace (#679).\n previousSecret String?\n previousSecretValidUntil DateTime?\n enabled Boolean @default(true)\n events Json\n retryCount Int @default(0)\n lastDeliveryAt DateTime?\n lastDeliveryStatus String?\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@index([formId])\n @@map(\"prenta_form_webhooks\")\n}\n\n/// Per-submission notify/webhook/email delivery attempts (#675).\n/// Fail-open: the lead is always persisted; this table tracks best-effort fan-out.\nmodel FormDeliveryAttempt {\n id String @id @default(cuid())\n submissionId String\n formId String\n /// email_notify | email_autoresponder | form_webhook\n channel String\n /// Recipient email or webhook URL (never secrets).\n destination String\n webhookId String?\n /// pending | retrying | success | failed | skipped\n status String @default(\"pending\")\n attempts Int @default(0)\n maxAttempts Int @default(3)\n lastAttemptAt DateTime?\n nextRetryAt DateTime?\n error String?\n responseStatus Int?\n skippedReason String?\n /// Webhook payload (or email meta) for retry without re-submitting.\n payload Json?\n /// When an operator alert email was sent for a permanent failure.\n alertedAt DateTime?\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n submission FormSubmission @relation(fields: [submissionId], references: [id], onDelete: Cascade)\n\n @@index([formId, status])\n @@index([submissionId])\n @@index([status, nextRetryAt])\n @@map(\"prenta_form_delivery_attempts\")\n}\n\nmodel WebhookEndpoint {\n id String @id @default(cuid())\n url String\n events Json\n secret String\n /// Previous signing secret (encrypted) kept during rotation grace (#679).\n previousSecret String?\n previousSecretValidUntil DateTime?\n active Boolean @default(true)\n name String?\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n deliveries WebhookDeliveryLog[]\n\n @@map(\"prenta_webhook_endpoints\")\n}\n\nmodel WebhookDeliveryLog {\n id String @id @default(cuid())\n endpointId String\n event String\n payload Json\n status String @default(\"pending\")\n attempts Int @default(0)\n maxAttempts Int @default(3)\n lastAttemptAt DateTime?\n nextRetryAt DateTime?\n responseStatus Int?\n responseBody String?\n createdAt DateTime @default(now())\n\n endpoint WebhookEndpoint @relation(fields: [endpointId], references: [id], onDelete: Cascade)\n\n @@index([endpointId])\n @@index([status])\n @@index([nextRetryAt])\n @@map(\"prenta_webhook_deliveries\")\n}\n\nmodel PasswordResetToken {\n id String @id @default(cuid())\n userId String\n tokenHash String\n expiresAt DateTime\n usedAt DateTime?\n createdAt DateTime @default(now())\n\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n\n @@index([tokenHash])\n @@index([userId])\n @@map(\"prenta_password_reset_tokens\")\n}\n\nmodel Invite {\n id String @id @default(cuid())\n email String\n role UserRole\n status InviteStatus @default(PENDING)\n tokenHash String\n message String?\n // Stored as a bare id (not an FK relation) to mirror AuditLog: an inviter\n // being removed must never cascade-delete the invite history.\n invitedByUserId String?\n acceptedUserId String?\n expiresAt DateTime\n acceptedAt DateTime?\n cancelledAt DateTime?\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@index([email])\n @@index([tokenHash])\n @@index([status])\n @@map(\"prenta_invites\")\n}\n\nmodel ScriptTag {\n id String @id @default(cuid())\n name String\n code String @db.Text\n placement String\n scope String\n targetPaths String[]\n priority Int @default(100)\n enabled Boolean @default(true)\n /// Inject `async` into external <script src> tags so they don't block render.\n loadAsync Boolean @default(false)\n /// Skip this tag when the page is rendered inside CMS preview mode.\n disableInPreview Boolean @default(true)\n /// Cookie-consent category gate: none | analytics | marketing | functional | preferences.\n consentCategory String @default(\"none\")\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@index([enabled])\n @@index([placement])\n @@map(\"prenta_script_tags\")\n}\n\n// ─── Dashboard metrics ─────────────────────────────────────────────────────\n\n/// Per-minute pre-aggregated request counters that power the\n/// \"Delivery API\" dashboard tiles (request volume, error rate,\n/// average latency, p95). One row per (bucketStart × route × statusBucket).\n///\n/// Why pre-aggregated minute buckets and not per-request rows:\n/// - 24h of traffic at 10 req/s on 20 routes ≈ 17M raw rows; the\n/// equivalent minute-bucketed table is ≤ 28,800 rows (1440 × 20).\n/// - Vercel Functions are concurrency-bounded; an O(1) UPSERT per\n/// request is cheaper than O(write+query) per dashboard load.\n/// - 7-day retention is enforced by the\n/// `/api/cms/cron/api-metrics-prune` cron, so the table stays\n/// bounded.\n///\n/// `latencyHistogram` is a fixed 12-bucket log-scale array (ms):\n/// [<1, 1-2, 2-4, 4-8, 8-16, 16-32, 32-64, 64-128, 128-256,\n/// 256-512, 512-1024, >1024]\n/// Cumulative-sum to estimate p95 with ~10% accuracy without\n/// per-request samples. The `delivery-stats` reader merges\n/// histograms across buckets before estimating.\nmodel ApiRequestMetric {\n id String @id @default(cuid())\n /// UTC minute boundary (`floor(time, '1 minute')`). The unique\n /// constraint on `(bucketStart, route, statusBucket)` lets the\n /// request logger UPSERT in one round-trip per request.\n bucketStart DateTime\n /// Normalised request route (e.g. `/collections/posts` — never\n /// the per-document `/collections/posts/abc123`). Normalisation\n /// happens in `instrumentation.ts` so the cardinality stays\n /// bounded.\n route String\n /// HTTP status family — one of `2xx`, `3xx`, `4xx`, `5xx`,\n /// `other`. Storing the bucket rather than the raw status lets\n /// us answer \"error rate?\" with a single GROUP BY.\n statusBucket String\n count Int @default(0)\n /// Sum of `responseMs` across `count` requests. Average latency\n /// = `sum(sumLatencyMs) / sum(count)` over the window.\n sumLatencyMs Float @default(0)\n /// Max single-request latency in this bucket. Useful as a\n /// fast-path tail-latency indicator and as a sanity check on\n /// the histogram estimator.\n maxLatencyMs Float @default(0)\n /// 12-bucket log-scale histogram (see model doc). Stored as\n /// `Json` so the schema doesn't have to change when we revise\n /// bucket boundaries.\n latencyHistogram Json\n updatedAt DateTime @updatedAt\n\n @@unique([bucketStart, route, statusBucket])\n @@index([bucketStart])\n @@map(\"prenta_api_request_metrics\")\n}\n\n/// Persisted content-quality issues surfaced by the nightly\n/// content-health scan. The Dashboard's \"Content Health\" card\n/// aggregates these rows by `type` to produce the issue list.\n///\n/// Upsert key is `(documentId, type)` so the scanner is\n/// idempotent — re-running yields the same row count, and a row\n/// \"self-resolves\" by being absent from the next scan (the\n/// scanner uses a `firstScanAt`-watermark + delete pattern).\nmodel ContentIssue {\n id String @id @default(cuid())\n documentId String\n type ContentIssueType\n /// Per-issue count (e.g. 5 alt-less images = `count: 5` even\n /// though it's 1 row). Lets the dashboard show real numbers\n /// without re-scanning the document HTML on each page load.\n count Int @default(1)\n /// Type-specific payload — the broken URL, the page's\n /// `updatedAt`, the offending image src, etc. JSON so each\n /// issue type can carry its own shape without schema churn.\n details Json?\n firstSeenAt DateTime @default(now())\n lastSeenAt DateTime @default(now())\n\n document Document @relation(fields: [documentId], references: [id], onDelete: Cascade)\n\n @@unique([documentId, type])\n @@index([type])\n @@index([documentId])\n @@map(\"prenta_content_issues\")\n}\n\n/// Persisted Yjs state for a document (`@prenta/realtime`). Optional: empty\n/// when collaboration is unused. Cms-core queries this from `/realtime/sync`.\nmodel DocumentCRDT {\n documentId String @id\n state Bytes\n stateVector Bytes\n version Int @default(0)\n lastUpdatedAt DateTime @default(now()) @updatedAt\n lastUpdatedById String?\n createdAt DateTime @default(now())\n\n @@index([lastUpdatedAt])\n @@map(\"prenta_document_crdts\")\n}\n\n/// Threaded inline comment. Soft-deletes keep replies attached. Optional.\nmodel DocumentComment {\n id String @id @default(cuid())\n documentId String\n parentId String?\n parent DocumentComment? @relation(\"CommentThread\", fields: [parentId], references: [id], onDelete: Cascade)\n replies DocumentComment[] @relation(\"CommentThread\")\n userId String?\n user User? @relation(fields: [userId], references: [id], onDelete: SetNull)\n body String @db.Text\n anchor Json?\n resolvedAt DateTime?\n resolvedById String?\n deletedAt DateTime?\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@index([documentId])\n @@index([documentId, resolvedAt])\n @@index([parentId])\n @@index([userId])\n @@index([createdAt])\n @@map(\"prenta_document_comments\")\n}\n\n/// Per-user notification feed for collaboration events.\nmodel DocumentNotification {\n id String @id @default(cuid())\n userId String\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n kind String\n documentId String?\n commentId String?\n payload Json\n readAt DateTime?\n createdAt DateTime @default(now())\n\n @@index([userId, readAt])\n @@index([userId, createdAt])\n @@index([documentId])\n @@index([commentId])\n @@map(\"prenta_document_notifications\")\n}\n",
|
|
21
|
+
"inlineSchema": "generator client {\n provider = \"prisma-client\"\n output = \"../generated\"\n // `relationJoins` is the Preview-feature flag that makes\n // `relationLoadStrategy: 'join'` a recognised argument on\n // findUnique / findMany / findFirst. Without it the option is\n // silently rejected as an \"Unknown argument\" by Prisma — which\n // is how the optimisation in PR #132 (dashboard recent-docs +\n // versions list + bench `doc_get`) went unnoticed in production:\n // `safeFindMany` swallowed the rejection and returned `[]`, the\n // versions endpoint returned 500, and the bench reported \"100/100\n // errors\" with no attached cause. Phase 5.5 #5 surfaced the\n // failure once the bench harness started recording the first\n // error message.\n //\n // The feature has been Preview since Prisma 5.7 and is documented\n // at https://www.prisma.io/docs/orm/prisma-client/queries/relation-queries#relation-load-strategies\n previewFeatures = [\"fullTextSearchPostgres\", \"relationJoins\"]\n}\n\ndatasource db {\n provider = \"postgresql\"\n}\n\n// ─── Enums ──────────────────────────────────────────────────────────\n\nenum DocumentStatus {\n DRAFT\n PUBLISHED\n ARCHIVED\n SCHEDULED\n SCHEDULED_UNPUBLISH\n}\n\nenum UserRole {\n ADMIN\n EDITOR\n AUTHOR\n CLIENT\n OWNER\n VIEWER\n}\n\nenum InviteStatus {\n PENDING\n ACCEPTED\n EXPIRED\n CANCELLED\n}\n\nenum ChangeType {\n CREATE\n UPDATE\n PUBLISH\n RESTORE\n DELETE\n}\n\nenum ContentIssueType {\n // Document is published but missing a `metaDescription` /\n // `seoDescription` field — the dashboard surfaces these so editors\n // can fix the SERP snippet before a competitor outranks them.\n MISSING_META_DESCRIPTION\n // Document HTML contains <img> tags without alt attributes. Hurts\n // both a11y and SEO. Counted per *document* not per image — so a\n // page with 5 alt-less images is 1 row, not 5, with `details.count`\n // capturing the per-document count.\n MISSING_ALT_TEXT\n // Internal link (same-origin URL or relative path) returned 404 /\n // 410 / DNS-failure when the link checker probed it. `details.url`\n // holds the offending URL.\n BROKEN_INTERNAL_LINK\n // Published document not touched in >90 days. Encourages refresh\n // of stale content — particularly important for \"best of YEAR\"\n // posts that decay rapidly.\n OUTDATED_CONTENT\n}\n\nenum WorkflowStage {\n DRAFT\n IN_REVIEW\n APPROVED\n PUBLISHED\n ARCHIVED\n}\n\n// ─── Models ─────────────────────────────────────────────────────────\n\nmodel User {\n id String @id @default(cuid())\n email String @unique\n name String\n avatarUrl String?\n role UserRole @default(AUTHOR)\n passwordHash String?\n totpSecret String?\n totpEnabled Boolean @default(false)\n // Last consumed TOTP time-step — enforces single-use so a captured code can't\n // be replayed within its validity window (#565). Null until the first TOTP login.\n lastTotpStep Int?\n backupCodes Json?\n authProvider String?\n isActive Boolean @default(true)\n isApproved Boolean @default(false)\n emailVerified Boolean @default(false)\n lastLoginAt DateTime?\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n // Access-control lifecycle (Users management subsystem). All additive and\n // nullable/defaulted so existing rows migrate cleanly.\n suspendedAt DateTime?\n lockedAt DateTime?\n forcePasswordReset Boolean @default(false)\n mfaRequired Boolean @default(false)\n failedLoginCount Int @default(0)\n lastActiveAt DateTime?\n invitedById String?\n acceptedInviteAt DateTime?\n\n sessions Session[]\n oauthAccounts OAuthAccount[]\n apiKeys ApiKey[]\n documents Document[] @relation(\"CreatedDocuments\")\n updatedDocuments Document[] @relation(\"UpdatedDocuments\")\n versions Version[]\n media Media[]\n contentLocks ContentLock[]\n notifications InAppNotification[]\n contentTemplates ContentTemplate[]\n passwordResetTokens PasswordResetToken[]\n documentComments DocumentComment[]\n documentNotifications DocumentNotification[]\n\n @@map(\"prenta_users\")\n}\n\nmodel OAuthAccount {\n id String @id @default(cuid())\n userId String\n provider String\n providerAccountId String\n accessToken String?\n refreshToken String?\n expiresAt DateTime?\n createdAt DateTime @default(now())\n\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n\n @@unique([provider, providerAccountId])\n @@map(\"prenta_oauth_accounts\")\n}\n\nmodel Session {\n id String @id @default(cuid())\n userId String\n token String @unique\n expiresAt DateTime\n revokedAt DateTime?\n ipAddress String?\n userAgent String?\n fingerprintHash String?\n createdAt DateTime @default(now())\n\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n\n @@index([userId])\n @@index([expiresAt])\n @@map(\"prenta_sessions\")\n}\n\nmodel ApiKey {\n id String @id @default(cuid())\n name String\n keyHash String @unique\n keyPrefix String\n userId String\n scopes Json\n ipRestrictions Json?\n expiresAt DateTime?\n lastUsedAt DateTime?\n revokedAt DateTime?\n createdAt DateTime @default(now())\n\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n\n @@index([userId])\n @@map(\"prenta_api_keys\")\n}\n\nmodel AuditLog {\n id String @id @default(cuid())\n event String\n userId String?\n ipAddress String?\n userAgent String?\n details Json?\n timestamp DateTime @default(now())\n\n @@index([event])\n @@index([userId])\n @@index([timestamp])\n @@map(\"prenta_audit_logs\")\n}\n\nmodel Folder {\n id String @id @default(cuid())\n name String\n scope String\n parentId String?\n position Int @default(0)\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n parent Folder? @relation(\"FolderTree\", fields: [parentId], references: [id], onDelete: Cascade)\n children Folder[] @relation(\"FolderTree\")\n\n documents Document[]\n media Media[]\n\n @@index([scope])\n @@index([parentId])\n @@map(\"prenta_folders\")\n}\n\nmodel Document {\n id String @id @default(cuid())\n collection String\n title String?\n slug String?\n data Json\n status DocumentStatus @default(DRAFT)\n locale String?\n localeGroupId String?\n createdById String\n updatedById String\n publishedAt DateTime?\n scheduledAt DateTime?\n scheduledUnpublishAt DateTime?\n deletedAt DateTime?\n plainText String?\n contentHash String?\n structuredData Json?\n templateId String?\n workflowStage WorkflowStage @default(DRAFT)\n reviewerId String?\n reviewNote String?\n folderId String?\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n createdBy User @relation(\"CreatedDocuments\", fields: [createdById], references: [id])\n updatedBy User @relation(\"UpdatedDocuments\", fields: [updatedById], references: [id])\n folder Folder? @relation(fields: [folderId], references: [id], onDelete: SetNull)\n versions Version[]\n mediaUsages MediaUsage[]\n contentLocks ContentLock[]\n contentIssues ContentIssue[]\n\n @@unique([collection, slug])\n @@index([collection, deletedAt, status])\n @@index([collection])\n @@index([status])\n @@index([deletedAt])\n @@index([publishedAt])\n @@index([folderId])\n @@index([scheduledAt])\n @@index([localeGroupId])\n @@index([createdById])\n @@map(\"prenta_documents\")\n}\n\nmodel Version {\n id String @id @default(cuid())\n documentId String\n data Json\n changedById String\n changeType ChangeType\n createdAt DateTime @default(now())\n\n document Document @relation(fields: [documentId], references: [id], onDelete: Cascade)\n changedBy User @relation(fields: [changedById], references: [id])\n\n @@index([documentId])\n @@index([createdAt])\n @@map(\"prenta_versions\")\n}\n\nenum MediaStatus {\n PROCESSING\n READY\n FAILED\n}\n\nmodel Media {\n id String @id @default(cuid())\n filename String\n storageKey String @unique\n mimeType String\n fileSize Int\n width Int?\n height Int?\n altText String?\n title String?\n uploadedById String\n focalPointX Float?\n focalPointY Float?\n blurHash String?\n aiAltText String?\n aiTags Json?\n aiDescription String?\n folderId String?\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n // ── Media Center additions ──────────────────────────────────────\n // All nullable / defaulted so they're safe to add to a populated DB\n // with no backfill. SEO score/issues are intentionally NOT stored —\n // they're derived on read by `calculateMediaSeoScore()` so they can\n // never drift from the metadata below.\n originalFileName String?\n caption String?\n description String?\n focusKeyword String?\n // WCAG decorative images use alt=\"\" intentionally. Persisted so the\n // media SEO scorer awards the alt weight instead of flagging missing-alt\n // (#714). Cleared automatically when a non-empty alt is saved.\n isDecorative Boolean @default(false)\n tags Json?\n // SHA-256 hex of the final stored bytes (post-optimize). Used to make\n // re-uploads / seed re-runs idempotent instead of creating byte-identical\n // twins (#718). Nullable so legacy rows need no backfill.\n contentHash String?\n // `storageKey` historically held the public URL; `publicUrl` splits\n // that concern out. New uploads populate both; legacy rows keep the\n // URL in `storageKey` and `mediaUrl()` still resolves it.\n publicUrl String?\n storageProvider String?\n durationSeconds Float?\n thumbnailUrl String?\n responsiveVariants Json?\n status MediaStatus @default(READY)\n deletedAt DateTime?\n\n uploadedBy User @relation(fields: [uploadedById], references: [id])\n folder Folder? @relation(fields: [folderId], references: [id], onDelete: SetNull)\n mediaUsages MediaUsage[]\n\n @@index([folderId])\n @@index([deletedAt])\n @@index([mimeType])\n @@index([contentHash])\n @@map(\"prenta_media\")\n}\n\nmodel MediaUsage {\n id String @id @default(cuid())\n mediaId String\n documentId String\n fieldPath String\n createdAt DateTime @default(now())\n\n media Media @relation(fields: [mediaId], references: [id], onDelete: Cascade)\n document Document @relation(fields: [documentId], references: [id], onDelete: Cascade)\n\n @@unique([mediaId, documentId, fieldPath])\n @@index([documentId])\n @@map(\"prenta_media_usages\")\n}\n\nmodel ContentLock {\n id String @id @default(cuid())\n documentId String\n userId String\n lockedAt DateTime @default(now())\n expiresAt DateTime\n\n document Document @relation(fields: [documentId], references: [id], onDelete: Cascade)\n user User @relation(fields: [userId], references: [id])\n\n @@unique([documentId])\n @@map(\"prenta_content_locks\")\n}\n\nmodel InAppNotification {\n id String @id @default(cuid())\n userId String\n type String\n title String\n message String?\n link String?\n read Boolean @default(false)\n createdAt DateTime @default(now())\n\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n\n @@index([userId])\n @@map(\"prenta_notifications\")\n}\n\nmodel ContentTemplate {\n id String @id @default(cuid())\n name String\n collection String\n templateData Json\n createdById String\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n createdBy User @relation(fields: [createdById], references: [id])\n\n @@map(\"prenta_content_templates\")\n}\n\nmodel Redirect {\n id String @id @default(cuid())\n source String\n destination String\n statusCode Int @default(301)\n isRegex Boolean @default(false)\n notes String?\n // Runtime + management metadata (added in 0009_seo). All defaulted so the\n // migration is safe to apply to a populated table with no backfill.\n enabled Boolean @default(true)\n priority Int @default(0)\n preserveQuery Boolean @default(false)\n // \"manual\" | \"import\" | \"ai-404-recovery\" | \"chain-flatten\"\n source_kind String @default(\"manual\")\n hits Int @default(0)\n lastHitAt DateTime?\n createdById String?\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@unique([source])\n @@index([enabled])\n @@index([lastHitAt])\n @@map(\"prenta_redirects\")\n}\n\n// ─── SEO module (0009_seo) ──────────────────────────────────────────\n\nenum SeoAuditStatus {\n RUNNING\n COMPLETED\n FAILED\n}\n\nenum SeoIssueSeverity {\n critical\n warning\n info\n}\n\nenum SeoIssueStatus {\n open\n ignored\n resolved\n recurring\n}\n\nenum SeoIssueCategory {\n content\n technical\n redirects\n media\n performance\n schema\n social\n indexing\n}\n\n/// One execution of the SEO audit engine. Holds a snapshot of the site\n/// score and issue counts so the Audit tab can show run history without\n/// recomputing. Issues belong to a run via SEOIssue.auditRunId.\nmodel SeoAuditRun {\n id String @id @default(cuid())\n status SeoAuditStatus @default(RUNNING)\n scope String @default(\"full\")\n startedById String?\n startedAt DateTime @default(now())\n finishedAt DateTime?\n siteScoreBefore Int?\n siteScoreAfter Int?\n pagesScanned Int @default(0)\n issuesFound Int @default(0)\n criticalCount Int @default(0)\n warningCount Int @default(0)\n infoCount Int @default(0)\n errorMessage String?\n metadata Json?\n\n issues SeoIssue[]\n\n @@index([status])\n @@index([startedAt])\n @@map(\"prenta_seo_audit_runs\")\n}\n\n/// A single SEO problem detected by an audit run. `issueKey` is a stable\n/// hash of (type + entityId/url) used to carry status across runs so a\n/// resolved/ignored issue stays resolved/ignored when re-detected.\nmodel SeoIssue {\n id String @id @default(cuid())\n auditRunId String?\n issueKey String\n entityType String?\n entityId String?\n entityTitle String?\n url String?\n severity SeoIssueSeverity\n category SeoIssueCategory\n type String\n title String\n description String?\n impact String?\n recommendation String?\n status SeoIssueStatus @default(open)\n fixable Boolean @default(false)\n fixActionType String?\n relatedEntityIds Json?\n source String @default(\"audit\")\n firstDetectedAt DateTime @default(now())\n lastDetectedAt DateTime @default(now())\n resolvedAt DateTime?\n resolvedById String?\n metadata Json?\n\n auditRun SeoAuditRun? @relation(fields: [auditRunId], references: [id], onDelete: SetNull)\n\n @@index([auditRunId])\n @@index([status])\n @@index([severity])\n @@index([category])\n @@index([issueKey])\n @@index([entityId])\n @@map(\"prenta_seo_issues\")\n}\n\n/// A 404 hit observed by the redirect middleware. Aggregated per path so\n/// the Redirects tab can surface \"broken URLs still getting traffic\".\nmodel Redirect404Hit {\n id String @id @default(cuid())\n path String\n hits Int @default(1)\n referrer String?\n resolvedAt DateTime?\n firstSeenAt DateTime @default(now())\n lastSeenAt DateTime @default(now())\n\n @@unique([path])\n @@index([lastSeenAt])\n @@map(\"prenta_redirect_404_hits\")\n}\n\n/// Aggregated AI-crawler activity for the admin \"AI crawler activity\" panel.\n/// One row per (bot token, surface), upserted on each hit so the table stays\n/// bounded (~known bots × surfaces) and needs no periodic pruning.\n/// `surface` ∈ \"llms\" | \"llms-full\" | \"md\" | \"honeypot\".\n/// `category` mirrors the ai-bots taxonomy: \"training\" | \"retrieval\" | \"other\".\nmodel AiCrawlerHit {\n id String @id @default(cuid())\n bot String\n surface String\n category String @default(\"other\")\n hits Int @default(1)\n firstSeenAt DateTime @default(now())\n lastSeenAt DateTime @default(now())\n\n @@unique([bot, surface])\n @@index([lastSeenAt])\n @@map(\"prenta_ai_crawler_hits\")\n}\n\n/// One row per (page path, day) of Google Search Console search analytics,\n/// written by the nightly search sync. Dates are stored exactly as GSC\n/// reports them (property timezone) — never converted to UTC. Rolling\n/// 90-day window, pruned during sync.\nmodel SearchPerfDaily {\n id String @id @default(cuid())\n date DateTime @db.Date\n path String\n clicks Int @default(0)\n impressions Int @default(0)\n ctr Float @default(0)\n position Float @default(0)\n createdAt DateTime @default(now())\n\n @@unique([date, path])\n @@index([path])\n @@map(\"prenta_search_perf_daily\")\n}\n\n/// Per-page search insight snapshot: trailing-28-day totals + prior-window\n/// deltas (computed from SearchPerfDaily), top queries from GSC, and CrUX\n/// Core Web Vitals p75s. One row per normalized path, upserted by the sync.\n/// `cwvStatus` null means CrUX has no field data for the URL (normal for\n/// low-traffic pages), never an error.\nmodel SearchPageInsight {\n id String @id @default(cuid())\n path String @unique\n entityId String?\n entityType String?\n topQueries Json?\n clicks28d Int @default(0)\n impressions28d Int @default(0)\n avgPosition28d Float?\n clicksPrev28d Int @default(0)\n impressionsPrev28d Int @default(0)\n avgPositionPrev28d Float?\n lcpMs Int?\n inpMs Int?\n cls Float?\n cwvStatus String?\n cwvCollectedAt DateTime?\n createdAt DateTime @default(now())\n lastSyncedAt DateTime @updatedAt\n\n @@index([impressions28d])\n @@index([entityId])\n @@map(\"prenta_search_page_insights\")\n}\n\n/// GEO measurement: one row per (UTC day, crawler token, path) for known AI\n/// training / AI retrieval / search crawlers observed by the site middleware\n/// (spec 2026-09-08-geo-measurement-design.md §4). Distinct paths per\n/// (date, bot) are capped at GEO_CRAWL_PATH_CAP; overflow rolls into a\n/// single \"(other)\" row. Pruned by the cleanup cron after geoRetentionDays.\nmodel GeoCrawlDaily {\n id String @id @default(cuid())\n date DateTime @db.Date\n bot String\n category String\n path String\n hits Int @default(0)\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@unique([date, bot, path])\n @@index([date])\n @@index([bot, date])\n @@map(\"prenta_geo_crawl_daily\")\n}\n\n/// GEO measurement: one row per (UTC day, AI engine name, path) for visits\n/// referred by an answer engine (Referer host or utm_source). Distinct paths\n/// per (day, engine) are capped like GeoCrawlDaily — overflow rolls into a\n/// single path = \"(other)\" row — since the public beacon cannot prove a path\n/// exists on the site. Pruned with GeoCrawlDaily.\nmodel GeoReferralDaily {\n id String @id @default(cuid())\n date DateTime @db.Date\n engine String\n path String\n visits Int @default(0)\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@unique([date, engine, path])\n @@index([date])\n @@index([engine, date])\n @@map(\"prenta_geo_referral_daily\")\n}\n\n/// An AI/heuristic suggestion for a 404 destination. Confidence-scored and\n/// never auto-applied below the configured threshold.\nmodel RedirectSuggestion {\n id String @id @default(cuid())\n fromPath String\n toPath String\n confidence Int @default(0)\n reason String?\n // \"open\" | \"accepted\" | \"dismissed\"\n status String @default(\"open\")\n source String @default(\"ai-404-recovery\")\n metadata Json?\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@index([status])\n @@index([fromPath])\n @@map(\"prenta_redirect_suggestions\")\n}\n\n/// One row per change SEO Autopilot wrote (spec 2026-09-07-auto-apply-policy-engine §4).\n/// `before`/`after` hold the field-level diff for issue fixes, or the created\n/// redirect (after) for redirects. `before` is null for redirects: autopilot\n/// never overwrites an existing redirect. Rows are never deleted; revert flips `status`.\nmodel SeoAutoApply {\n id String @id @default(cuid())\n // 'issue-fix' | 'redirect'\n kind String\n issueId String?\n // AutopilotIssueType\n issueType String\n entityId String?\n collection String?\n // Public path at apply time — outcome-watch key into prenta_search_perf_daily.\n path String?\n redirectId String?\n before Json?\n after Json\n // { source, brandAlignment, confidence, checks }\n gate Json\n // 'applied' | 'verify_failed' | 'reverted' | 'outcome_reverted'\n status String\n // 'pending' | 'held' | 'regressed' | 'insufficient_data' | 'skipped'\n outcome String @default(\"pending\")\n outcomeMetrics Json?\n outcomeCheckedAt DateTime?\n versionId String?\n appliedById String\n appliedAt DateTime @default(now())\n revertedAt DateTime?\n revertedById String?\n // 'verify_failed' | 'outcome_regression' | 'manual'\n revertReason String?\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@index([status, appliedAt])\n @@index([entityId])\n @@index([outcome, appliedAt])\n @@index([issueId])\n @@map(\"prenta_seo_auto_applies\")\n}\n\n// A versioned snapshot of a form's field schema. Saving a form's schema in\n// the admin creates a new row here; submissions reference the version they\n// were captured against so historical entries always render with the fields\n// that existed at submit time, even after the live form schema changes.\nmodel FormSchemaVersion {\n id String @id @default(cuid())\n formId String\n version Int\n fields Json\n notes String?\n createdById String?\n createdAt DateTime @default(now())\n\n @@unique([formId, version])\n @@index([formId])\n @@map(\"prenta_form_schema_versions\")\n}\n\nmodel FormSubmission {\n id String @id @default(cuid())\n // Per-instance sequential number shown in the UI (e.g. #00001). Assigned by\n // the submission service inside a transaction; nullable for legacy rows.\n entryNumber Int?\n formId String\n schemaVersionId String?\n data Json\n // Server-derived, type-coerced view of `data` (e.g. checkbox -> bool,\n // number -> number) used for export/search. `data` keeps the raw payload.\n normalizedData Json?\n attribution Json?\n senderName String?\n senderEmail String?\n senderPhone String?\n preview String?\n // Legacy free-form status ('new'); superseded by the booleans below but\n // retained so existing rows/integrations keep working.\n status String @default(\"new\")\n unread Boolean @default(true)\n starred Boolean @default(false)\n archived Boolean @default(false)\n spamStatus String @default(\"clean\")\n ipAddressHash String?\n userAgent String?\n referrer String?\n pageUrl String?\n utmSource String?\n utmMedium String?\n utmCampaign String?\n submittedAt DateTime @default(now())\n readAt DateTime?\n archivedAt DateTime?\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n files FormSubmissionFile[]\n deliveries FormDeliveryAttempt[]\n\n @@index([formId])\n @@index([submittedAt])\n @@index([senderEmail])\n @@index([formId, submittedAt])\n @@map(\"prenta_form_submissions\")\n}\n\n// File attachments for a submission. Files are stored via the configured\n// storage adapter (never inline in the DB); this row tracks metadata and the\n// storage key needed to mint a secure download link.\nmodel FormSubmissionFile {\n id String @id @default(cuid())\n submissionId String\n fieldKey String\n mediaAssetId String?\n fileName String\n mimeType String\n sizeBytes Int\n storageKey String\n publicUrl String?\n secureDownloadUrl String?\n createdAt DateTime @default(now())\n\n submission FormSubmission @relation(fields: [submissionId], references: [id], onDelete: Cascade)\n\n @@index([submissionId])\n @@map(\"prenta_form_submission_files\")\n}\n\n// Per-form outbound webhook configuration. Distinct from the global\n// WebhookEndpoint registry so form owners can wire delivery without admin\n// access to site-wide webhooks.\nmodel FormWebhook {\n id String @id @default(cuid())\n formId String\n url String\n secret String\n /// Previous signing secret (encrypted) kept during rotation grace (#679).\n previousSecret String?\n previousSecretValidUntil DateTime?\n enabled Boolean @default(true)\n events Json\n retryCount Int @default(0)\n lastDeliveryAt DateTime?\n lastDeliveryStatus String?\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@index([formId])\n @@map(\"prenta_form_webhooks\")\n}\n\n/// Per-submission notify/webhook/email delivery attempts (#675).\n/// Fail-open: the lead is always persisted; this table tracks best-effort fan-out.\nmodel FormDeliveryAttempt {\n id String @id @default(cuid())\n submissionId String\n formId String\n /// email_notify | email_autoresponder | form_webhook\n channel String\n /// Recipient email or webhook URL (never secrets).\n destination String\n webhookId String?\n /// pending | retrying | success | failed | skipped\n status String @default(\"pending\")\n attempts Int @default(0)\n maxAttempts Int @default(3)\n lastAttemptAt DateTime?\n nextRetryAt DateTime?\n error String?\n responseStatus Int?\n skippedReason String?\n /// Webhook payload (or email meta) for retry without re-submitting.\n payload Json?\n /// When an operator alert email was sent for a permanent failure.\n alertedAt DateTime?\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n submission FormSubmission @relation(fields: [submissionId], references: [id], onDelete: Cascade)\n\n @@index([formId, status])\n @@index([submissionId])\n @@index([status, nextRetryAt])\n @@map(\"prenta_form_delivery_attempts\")\n}\n\nmodel WebhookEndpoint {\n id String @id @default(cuid())\n url String\n events Json\n secret String\n /// Previous signing secret (encrypted) kept during rotation grace (#679).\n previousSecret String?\n previousSecretValidUntil DateTime?\n active Boolean @default(true)\n name String?\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n deliveries WebhookDeliveryLog[]\n\n @@map(\"prenta_webhook_endpoints\")\n}\n\nmodel WebhookDeliveryLog {\n id String @id @default(cuid())\n endpointId String\n event String\n payload Json\n status String @default(\"pending\")\n attempts Int @default(0)\n maxAttempts Int @default(3)\n lastAttemptAt DateTime?\n nextRetryAt DateTime?\n responseStatus Int?\n responseBody String?\n createdAt DateTime @default(now())\n\n endpoint WebhookEndpoint @relation(fields: [endpointId], references: [id], onDelete: Cascade)\n\n @@index([endpointId])\n @@index([status])\n @@index([nextRetryAt])\n @@map(\"prenta_webhook_deliveries\")\n}\n\nmodel PasswordResetToken {\n id String @id @default(cuid())\n userId String\n tokenHash String\n expiresAt DateTime\n usedAt DateTime?\n createdAt DateTime @default(now())\n\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n\n @@index([tokenHash])\n @@index([userId])\n @@map(\"prenta_password_reset_tokens\")\n}\n\nmodel Invite {\n id String @id @default(cuid())\n email String\n role UserRole\n status InviteStatus @default(PENDING)\n tokenHash String\n message String?\n // Stored as a bare id (not an FK relation) to mirror AuditLog: an inviter\n // being removed must never cascade-delete the invite history.\n invitedByUserId String?\n acceptedUserId String?\n expiresAt DateTime\n acceptedAt DateTime?\n cancelledAt DateTime?\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@index([email])\n @@index([tokenHash])\n @@index([status])\n @@map(\"prenta_invites\")\n}\n\nmodel ScriptTag {\n id String @id @default(cuid())\n name String\n code String @db.Text\n placement String\n scope String\n targetPaths String[]\n priority Int @default(100)\n enabled Boolean @default(true)\n /// Inject `async` into external <script src> tags so they don't block render.\n loadAsync Boolean @default(false)\n /// Skip this tag when the page is rendered inside CMS preview mode.\n disableInPreview Boolean @default(true)\n /// Cookie-consent category gate: none | analytics | marketing | functional | preferences.\n consentCategory String @default(\"none\")\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@index([enabled])\n @@index([placement])\n @@map(\"prenta_script_tags\")\n}\n\n// ─── Dashboard metrics ─────────────────────────────────────────────────────\n\n/// Per-minute pre-aggregated request counters that power the\n/// \"Delivery API\" dashboard tiles (request volume, error rate,\n/// average latency, p95). One row per (bucketStart × route × statusBucket).\n///\n/// Why pre-aggregated minute buckets and not per-request rows:\n/// - 24h of traffic at 10 req/s on 20 routes ≈ 17M raw rows; the\n/// equivalent minute-bucketed table is ≤ 28,800 rows (1440 × 20).\n/// - Vercel Functions are concurrency-bounded; an O(1) UPSERT per\n/// request is cheaper than O(write+query) per dashboard load.\n/// - 7-day retention is enforced by the\n/// `/api/cms/cron/api-metrics-prune` cron, so the table stays\n/// bounded.\n///\n/// `latencyHistogram` is a fixed 12-bucket log-scale array (ms):\n/// [<1, 1-2, 2-4, 4-8, 8-16, 16-32, 32-64, 64-128, 128-256,\n/// 256-512, 512-1024, >1024]\n/// Cumulative-sum to estimate p95 with ~10% accuracy without\n/// per-request samples. The `delivery-stats` reader merges\n/// histograms across buckets before estimating.\nmodel ApiRequestMetric {\n id String @id @default(cuid())\n /// UTC minute boundary (`floor(time, '1 minute')`). The unique\n /// constraint on `(bucketStart, route, statusBucket)` lets the\n /// request logger UPSERT in one round-trip per request.\n bucketStart DateTime\n /// Normalised request route (e.g. `/collections/posts` — never\n /// the per-document `/collections/posts/abc123`). Normalisation\n /// happens in `instrumentation.ts` so the cardinality stays\n /// bounded.\n route String\n /// HTTP status family — one of `2xx`, `3xx`, `4xx`, `5xx`,\n /// `other`. Storing the bucket rather than the raw status lets\n /// us answer \"error rate?\" with a single GROUP BY.\n statusBucket String\n count Int @default(0)\n /// Sum of `responseMs` across `count` requests. Average latency\n /// = `sum(sumLatencyMs) / sum(count)` over the window.\n sumLatencyMs Float @default(0)\n /// Max single-request latency in this bucket. Useful as a\n /// fast-path tail-latency indicator and as a sanity check on\n /// the histogram estimator.\n maxLatencyMs Float @default(0)\n /// 12-bucket log-scale histogram (see model doc). Stored as\n /// `Json` so the schema doesn't have to change when we revise\n /// bucket boundaries.\n latencyHistogram Json\n updatedAt DateTime @updatedAt\n\n @@unique([bucketStart, route, statusBucket])\n @@index([bucketStart])\n @@map(\"prenta_api_request_metrics\")\n}\n\n/// Persisted content-quality issues surfaced by the nightly\n/// content-health scan. The Dashboard's \"Content Health\" card\n/// aggregates these rows by `type` to produce the issue list.\n///\n/// Upsert key is `(documentId, type)` so the scanner is\n/// idempotent — re-running yields the same row count, and a row\n/// \"self-resolves\" by being absent from the next scan (the\n/// scanner uses a `firstScanAt`-watermark + delete pattern).\nmodel ContentIssue {\n id String @id @default(cuid())\n documentId String\n type ContentIssueType\n /// Per-issue count (e.g. 5 alt-less images = `count: 5` even\n /// though it's 1 row). Lets the dashboard show real numbers\n /// without re-scanning the document HTML on each page load.\n count Int @default(1)\n /// Type-specific payload — the broken URL, the page's\n /// `updatedAt`, the offending image src, etc. JSON so each\n /// issue type can carry its own shape without schema churn.\n details Json?\n firstSeenAt DateTime @default(now())\n lastSeenAt DateTime @default(now())\n\n document Document @relation(fields: [documentId], references: [id], onDelete: Cascade)\n\n @@unique([documentId, type])\n @@index([type])\n @@index([documentId])\n @@map(\"prenta_content_issues\")\n}\n\n/// Persisted Yjs state for a document (`@prenta/realtime`). Optional: empty\n/// when collaboration is unused. Cms-core queries this from `/realtime/sync`.\nmodel DocumentCRDT {\n documentId String @id\n state Bytes\n stateVector Bytes\n version Int @default(0)\n lastUpdatedAt DateTime @default(now()) @updatedAt\n lastUpdatedById String?\n createdAt DateTime @default(now())\n\n @@index([lastUpdatedAt])\n @@map(\"prenta_document_crdts\")\n}\n\n/// Threaded inline comment. Soft-deletes keep replies attached. Optional.\nmodel DocumentComment {\n id String @id @default(cuid())\n documentId String\n parentId String?\n parent DocumentComment? @relation(\"CommentThread\", fields: [parentId], references: [id], onDelete: Cascade)\n replies DocumentComment[] @relation(\"CommentThread\")\n userId String?\n user User? @relation(fields: [userId], references: [id], onDelete: SetNull)\n body String @db.Text\n anchor Json?\n resolvedAt DateTime?\n resolvedById String?\n deletedAt DateTime?\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@index([documentId])\n @@index([documentId, resolvedAt])\n @@index([parentId])\n @@index([userId])\n @@index([createdAt])\n @@map(\"prenta_document_comments\")\n}\n\n/// Per-user notification feed for collaboration events.\nmodel DocumentNotification {\n id String @id @default(cuid())\n userId String\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n kind String\n documentId String?\n commentId String?\n payload Json\n readAt DateTime?\n createdAt DateTime @default(now())\n\n @@index([userId, readAt])\n @@index([userId, createdAt])\n @@index([documentId])\n @@index([commentId])\n @@map(\"prenta_document_notifications\")\n}\n",
|
|
22
22
|
"runtimeDataModel": {
|
|
23
23
|
"models": {},
|
|
24
24
|
"enums": {},
|
|
@@ -4,9 +4,8 @@
|
|
|
4
4
|
* `SeoModuleSettings.autopilot` (spec §1). The AI layer's governance flags
|
|
5
5
|
* (`approvalRequired` / `allowBulkApply`) remain a separate veto.
|
|
6
6
|
*/
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
export type AutopilotIssueType = (typeof AUTOPILOT_ISSUE_TYPES)[number];
|
|
7
|
+
import { AUTOPILOT_METADATA_TYPES, type AutopilotIssueType } from './issue-types.js';
|
|
8
|
+
export { AUTOPILOT_METADATA_TYPES, type AutopilotIssueType };
|
|
10
9
|
export declare function isAutopilotIssueType(value: unknown): value is AutopilotIssueType;
|
|
11
10
|
type AutopilotPauseReason = 'outcome_regression' | 'owner_unavailable' | 'manual';
|
|
12
11
|
export interface AutopilotOutcomeWatch {
|
|
@@ -130,5 +129,4 @@ export type PolicyPatchResult = {
|
|
|
130
129
|
* never taken from the body — the route derives them (spec §1 Settings API).
|
|
131
130
|
*/
|
|
132
131
|
export declare function parseAutopilotPolicyPatch(body: unknown): PolicyPatchResult;
|
|
133
|
-
export {};
|
|
134
132
|
//# sourceMappingURL=autopilot-policy.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"autopilot-policy.d.ts","sourceRoot":"","sources":["../../src/seo/autopilot-policy.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,
|
|
1
|
+
{"version":3,"file":"autopilot-policy.d.ts","sourceRoot":"","sources":["../../src/seo/autopilot-policy.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAEL,wBAAwB,EACxB,KAAK,kBAAkB,EACxB,MAAM,kBAAkB,CAAA;AAEzB,OAAO,EAAE,wBAAwB,EAAE,KAAK,kBAAkB,EAAE,CAAA;AAI5D,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,kBAAkB,CAEhF;AAED,KAAK,oBAAoB,GAAG,oBAAoB,GAAG,mBAAmB,GAAG,QAAQ,CAAA;AAEjF,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,OAAO,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,CAAA;IACjB,cAAc,EAAE,MAAM,CAAA;CACvB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAA;IAChB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,YAAY,EAAE,oBAAoB,GAAG,IAAI,CAAA;IACzC,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC,CAAA;IACnD,WAAW,EAAE,OAAO,CAAC,MAAM,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC,CAAA;IACxD,iBAAiB,EAAE,MAAM,CAAA;IACzB,qBAAqB,EAAE,MAAM,CAAA;IAC7B,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,oBAAoB,EAAE,MAAM,CAAA;IAC5B,YAAY,EAAE,qBAAqB,CAAA;CACpC;AAED,MAAM,MAAM,UAAU,GAClB,iBAAiB,GACjB,eAAe,GACf,kBAAkB,GAClB,aAAa,GACb,8BAA8B,GAC9B,6BAA6B,GAC7B,aAAa,GACb,aAAa,GACb,OAAO,GACP,WAAW,GACX,UAAU,GACV,uBAAuB,GACvB,gBAAgB,GAChB,aAAa,GACb,kBAAkB,GAClB,iBAAiB,GACjB,yBAAyB,GACzB,wBAAwB,GACxB,aAAa,CAAA;AAEjB,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,MAAM,CAAA;IACf,YAAY,EAAE,MAAM,CAAA;IACpB,uCAAuC;IACvC,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAA;IAC1C;;;;;;;;;;;;;OAaG;IACH,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACrC;;;;OAIG;IACH,SAAS,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAA;IAC9F,MAAM,EAAE,OAAO,CAAA;IACf;;;;;;;;OAQG;IACH,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;CAC5B;AAED,eAAO,MAAM,wBAAwB,EAAE,kBAatC,CAAA;AAaD,qEAAqE;AACrE,eAAO,MAAM,uBAAuB,KAAK,CAAA;AACzC,0EAA0E;AAC1E,eAAO,MAAM,0BAA0B,IAAI,CAAA;AAC3C,2FAA2F;AAC3F,eAAO,MAAM,kBAAkB,KAAK,CAAA;AA4BpC,MAAM,WAAW,oBAAoB;IACnC,yBAAyB,CAAC,EAAE,OAAO,CAAA;IACnC,sCAAsC,CAAC,EAAE,MAAM,CAAA;IAC/C;;;;;OAKG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAWD;;;;;;;;;;;;GAYG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,OAAO,CAAC,kBAAkB,CAAC,GAAG,SAAS,GAAG,IAAI,EACtD,MAAM,EAAE,oBAAoB,GAC3B,kBAAkB,CAsDpB;AAED;;;;GAIG;AACH,MAAM,MAAM,oBAAoB,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,EAAE,cAAc,CAAC,GAAG;IACrF,YAAY,CAAC,EAAE,OAAO,CAAC,qBAAqB,CAAC,CAAA;CAC9C,CAAA;AAED,MAAM,MAAM,iBAAiB,GACzB;IACE,EAAE,EAAE,IAAI,CAAA;IACR,KAAK,EAAE,oBAAoB,CAAA;IAC3B,MAAM,EAAE,OAAO,CAAA;IACf,WAAW,EAAE,kBAAkB,EAAE,CAAA;CAClC,GACD;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAA;AAShC;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,OAAO,GAAG,iBAAiB,CA6G1E"}
|
|
@@ -4,19 +4,8 @@
|
|
|
4
4
|
* `SeoModuleSettings.autopilot` (spec §1). The AI layer's governance flags
|
|
5
5
|
* (`approvalRequired` / `allowBulkApply`) remain a separate veto.
|
|
6
6
|
*/
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
'meta-title-length',
|
|
10
|
-
'duplicate-meta-title',
|
|
11
|
-
'missing-meta-description',
|
|
12
|
-
'meta-description-length',
|
|
13
|
-
'duplicate-meta-description',
|
|
14
|
-
'missing-canonical',
|
|
15
|
-
'accidental-noindex',
|
|
16
|
-
'missing-structured-data',
|
|
17
|
-
'faq-schema-missing',
|
|
18
|
-
];
|
|
19
|
-
const AUTOPILOT_ISSUE_TYPES = [...AUTOPILOT_METADATA_TYPES, 'redirect'];
|
|
7
|
+
import { AUTOPILOT_ISSUE_TYPES, AUTOPILOT_METADATA_TYPES, } from './issue-types.js';
|
|
8
|
+
export { AUTOPILOT_METADATA_TYPES };
|
|
20
9
|
const TYPE_SET = new Set(AUTOPILOT_ISSUE_TYPES);
|
|
21
10
|
export function isAutopilotIssueType(value) {
|
|
22
11
|
return typeof value === 'string' && TYPE_SET.has(value);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"autopilot-policy.js","sourceRoot":"","sources":["../../src/seo/autopilot-policy.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,
|
|
1
|
+
{"version":3,"file":"autopilot-policy.js","sourceRoot":"","sources":["../../src/seo/autopilot-policy.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import type { AuditEntityInput } from './audit-engine.js';
|
|
2
2
|
import type { AiFixDeps } from './issue-fix-ai.js';
|
|
3
3
|
import type { SeoContentResearch } from './issue-content-research.js';
|
|
4
|
-
|
|
4
|
+
import { CONTENT_BRIEF_ISSUE_TYPES } from './issue-types.js';
|
|
5
|
+
export { CONTENT_BRIEF_ISSUE_TYPES };
|
|
5
6
|
interface SeoContentBriefSection {
|
|
6
7
|
heading: string;
|
|
7
8
|
bullets: string[];
|
|
@@ -48,5 +49,4 @@ export declare function generateContentBrief(issue: ContentBriefIssueInput, ctx:
|
|
|
48
49
|
}): Promise<ContentBriefResult>;
|
|
49
50
|
/** Render a content brief as markdown for export handoff docs. */
|
|
50
51
|
export declare function renderContentBriefMarkdown(brief: SeoContentBrief): string;
|
|
51
|
-
export {};
|
|
52
52
|
//# sourceMappingURL=issue-content-brief.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"issue-content-brief.d.ts","sourceRoot":"","sources":["../../src/seo/issue-content-brief.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAEzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAA;
|
|
1
|
+
{"version":3,"file":"issue-content-brief.d.ts","sourceRoot":"","sources":["../../src/seo/issue-content-brief.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAEzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAA;AAErE,OAAO,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAA;AAE5D,OAAO,EAAE,yBAAyB,EAAE,CAAA;AAKpC,UAAU,sBAAsB;IAC9B,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,EAAE,CAAA;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,QAAQ,EAAE,sBAAsB,EAAE,CAAA;IAClC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAA;IAC/B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,aAAa,CAAC,EAAE,OAAO,CAAA;CACxB;AAED,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CACzB;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,gBAAgB,CAAA;IACxB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;CACzB;AAED,MAAM,MAAM,kBAAkB,GAC1B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,eAAe,CAAA;CAAE,GACpC;IACE,EAAE,EAAE,KAAK,CAAA;IACT,IAAI,EACA,aAAa,GACb,aAAa,GACb,cAAc,GACd,iBAAiB,GACjB,kBAAkB,GAClB,OAAO,CAAA;IACX,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAiFL,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAE/D;AAED,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,OAAO,EACjB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GAAG,IAAI,GACvB,eAAe,GAAG,IAAI,CAqBxB;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEtF;AAiCD,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,sBAAsB,EAC7B,GAAG,EAAE,mBAAmB,EACxB,IAAI,EAAE,SAAS,EACf,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAA;CAAE,GACjD,OAAO,CAAC,kBAAkB,CAAC,CA6G7B;AAED,kEAAkE;AAClE,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,CAkBzE"}
|
|
@@ -3,13 +3,8 @@ import { logEvent } from '../security/audit.js';
|
|
|
3
3
|
import { stripHtmlTags } from './analysis.js';
|
|
4
4
|
import { buildFixFingerprint } from './issue-fix.js';
|
|
5
5
|
import { loadSearchPromptStats, formatSearchPromptBlock } from './search-console/prompt-context.js';
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
'missing-h1',
|
|
9
|
-
'multiple-h1',
|
|
10
|
-
'missing-alt-text',
|
|
11
|
-
'declining-performance',
|
|
12
|
-
]);
|
|
6
|
+
import { CONTENT_BRIEF_ISSUE_TYPES } from './issue-types.js';
|
|
7
|
+
export { CONTENT_BRIEF_ISSUE_TYPES };
|
|
13
8
|
const AI_CONTEXT_MAX = 2000;
|
|
14
9
|
const SEO_FEATURE = 'ai.features.seoMetaGeneration';
|
|
15
10
|
function clampAiContent(text, maxLen = AI_CONTEXT_MAX) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"issue-content-brief.js","sourceRoot":"","sources":["../../src/seo/issue-content-brief.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"issue-content-brief.js","sourceRoot":"","sources":["../../src/seo/issue-content-brief.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAA;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAE7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAA;AAGpD,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAA;AACnG,OAAO,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAA;AAE5D,OAAO,EAAE,yBAAyB,EAAE,CAAA;AAEpC,MAAM,cAAc,GAAG,IAAI,CAAA;AAC3B,MAAM,WAAW,GAAG,+BAA+B,CAAA;AAkDnD,SAAS,cAAc,CAAC,IAAY,EAAE,MAAM,GAAG,cAAc;IAC3D,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAA;AACtC,CAAC;AAED,SAAS,cAAc,CAAC,IAAY,EAAE,MAAM,GAAG,cAAc;IAC3D,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;IAC5C,OAAO,yEAAyE,OAAO,OAAO,CAAA;AAChG,CAAC;AAED,SAAS,aAAa,CAAC,MAAwB;IAC7C,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAA;IACxC,MAAM,IAAI,GAAG,aAAa,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;SAC7C,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;SACpB,IAAI,EAAE,CAAA;IACT,OAAO,GAAG,KAAK,OAAO,IAAI,EAAE,CAAC,IAAI,EAAE,CAAA;AACrC,CAAC;AAED,SAAS,SAAS,CAAC,MAAwB;IACzC,IAAI,OAAO,MAAM,CAAC,SAAS,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,GAAG,CAAC;QAAE,OAAO,MAAM,CAAC,SAAS,CAAA;IACzF,MAAM,IAAI,GAAG,aAAa,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,CAAA;IAChD,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;AAC5D,CAAC;AAED,SAAS,aAAa,CAAC,KAAc,EAAE,QAAQ,GAAG,EAAE;IAClD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,CAAA;IACpC,OAAO,KAAK;SACT,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;SACxE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACpB,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAA;AACvB,CAAC;AAED,SAAS,UAAU,CAAC,KAAc;IAChC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,CAAA;IACpC,MAAM,GAAG,GAA6B,EAAE,CAAA;IACxC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;YAAE,SAAQ;QACtE,MAAM,GAAG,GAAG,IAA+B,CAAA;QAC3C,MAAM,OAAO,GAAG,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;QACzE,IAAI,CAAC,OAAO;YAAE,SAAQ;QACtB,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,CAAA;QAC7D,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC;YAAE,MAAK;IAC5B,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,SAAS,cAAc,CACrB,GAAW;IAEX,MAAM,OAAO,GAAG,GAAG;SAChB,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC;SAC5B,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;SACnB,IAAI,EAAE,CAAA;IACT,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAA4B,CAAA;QAC7D,MAAM,OAAO,GAAG,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;QAC/E,IAAI,CAAC,OAAO;YAAE,OAAO,IAAI,CAAA;QACzB,MAAM,WAAW,GACf,OAAO,MAAM,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAA;QACnF,MAAM,gBAAgB,GACpB,OAAO,MAAM,CAAC,gBAAgB,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAA;QAC7F,MAAM,OAAO,GAAG,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAA;QACzF,IAAI,eAAe,GAAkB,IAAI,CAAA;QACzC,IAAI,OAAO,MAAM,CAAC,eAAe,KAAK,QAAQ,IAAI,MAAM,CAAC,eAAe,GAAG,CAAC,EAAE,CAAC;YAC7E,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,eAAe,CAAC,CAAA;QACtD,CAAC;QACD,OAAO;YACL,OAAO;YACP,WAAW;YACX,eAAe;YACf,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC;YACpC,QAAQ,EAAE,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC;YACrC,gBAAgB;YAChB,OAAO;SACR,CAAA;IACH,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,SAAiB;IACpD,OAAO,yBAAyB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;AACjD,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,QAAiB,EACjB,SAAiB,EACjB,QAAgB,EAChB,SAAwB;IAExB,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAA;IACrF,MAAM,GAAG,GAAI,QAAoC,CAAC,YAAY,CAAA;IAC9D,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAA;IACtE,MAAM,CAAC,GAAG,GAA8B,CAAA;IACxC,IAAI,OAAO,CAAC,CAAC,WAAW,KAAK,QAAQ,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAA;IACnF,MAAM,IAAI,GAAG,mBAAmB,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,CAAC,CAAA;IAChE,IAAI,CAAC,CAAC,WAAW,KAAK,IAAI;QAAE,OAAO,IAAI,CAAA;IACvC,OAAO;QACL,SAAS;QACT,QAAQ;QACR,WAAW,EAAE,CAAC,CAAC,WAAW;QAC1B,WAAW,EAAE,OAAO,CAAC,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACzF,OAAO,EAAE,CAAC,CAAC,OAAO;QAClB,WAAW,EAAE,OAAO,CAAC,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI;QACrE,eAAe,EAAE,OAAO,CAAC,CAAC,eAAe,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI;QACjF,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC;QAC/B,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC;QAChC,gBAAgB,EAAE,OAAO,CAAC,CAAC,gBAAgB,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI;QACpF,OAAO,EAAE,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI;KAC1D,CAAA;AACH,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,KAAsB;IAC3D,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,CAAA;AAChC,CAAC;AAED,SAAS,iBAAiB,CAAC,SAAiB,EAAE,KAAa;IACzD,QAAQ,SAAS,EAAE,CAAC;QAClB,KAAK,cAAc;YACjB,OAAO,sBAAsB,KAAK,0FAA0F,CAAA;QAC9H,KAAK,YAAY;YACf,OAAO,6EAA6E,CAAA;QACtF,KAAK,aAAa;YAChB,OAAO,8FAA8F,CAAA;QACvG,KAAK,kBAAkB;YACrB,OAAO,yIAAyI,CAAA;QAClJ,KAAK,uBAAuB;YAC1B,OAAO,kMAAkM,CAAA;QAC3M;YACE,OAAO,6DAA6D,CAAA;IACxE,CAAC;AACH,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,MAAc,EAAE,OAAe,EAAE,SAAiB;IAC7E,IAAI,CAAC;QACH,MAAM,QAAQ,CAAC;YACb,KAAK,EAAE,iBAAiB;YACxB,MAAM;YACN,OAAO,EAAE,EAAE,MAAM,EAAE,eAAe,EAAE,OAAO,EAAE,SAAS,EAAE;SACzD,CAAC,CAAA;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,eAAe;IACjB,CAAC;IACD,MAAM,EAAE,uBAAuB,EAAE,GAAG,MAAM,MAAM,CAAC,4BAA4B,CAAC,CAAA;IAC9E,uBAAuB,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,OAAO,EAAE,CAAC,CAAA;AACvE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,KAA6B,EAC7B,GAAwB,EACxB,IAAe,EACf,OAAkD;IAElD,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;QACpB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,6CAA6C,EAAE,CAAA;IAC7F,CAAC;IACD,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACtC,OAAO;YACL,EAAE,EAAE,KAAK;YACT,IAAI,EAAE,aAAa;YACnB,OAAO,EAAE,kDAAkD;SAC5D,CAAA;IACH,CAAC;IAED,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;IACnC,MAAM,WAAW,GAAG,mBAAmB,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,SAAS,CAAC,CAAA;IAClF,MAAM,OAAO,GAAG,cAAc,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAA;IACzD,MAAM,QAAQ,GAAG,OAAO,EAAE,QAAQ,CAAA;IAClC,uEAAuE;IACvE,qEAAqE;IACrE,MAAM,WAAW,GAAG,uBAAuB,CACzC,MAAM,qBAAqB,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CACvE,CAAA;IAED,MAAM,aAAa,GAAG,QAAQ;QAC5B,CAAC,CAAC;YACE,0DAA0D;YAC1D,YAAY,cAAc,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE;YACnD,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,kBAAkB,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE;YACtE,QAAQ,CAAC,kBAAkB,CAAC,CAAC,CAAC,iBAAiB,QAAQ,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC,EAAE;YACjF,QAAQ,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;YAC5E,QAAQ,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;YAC1F,QAAQ,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC;gBACnC,CAAC,CAAC,aAAa,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBACtD,CAAC,CAAC,EAAE;SACP;aACE,MAAM,CAAC,OAAO,CAAC;aACf,IAAI,CAAC,IAAI,CAAC;QACf,CAAC,CAAC,EAAE,CAAA;IAEN,MAAM,MAAM,GAAG;QACb,cAAc,KAAK,CAAC,KAAK,EAAE;QAC3B,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,YAAY,cAAc,CAAC,KAAK,CAAC,WAAW,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;QAC7E,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,iBAAiB,cAAc,CAAC,KAAK,CAAC,cAAc,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;QACxF,iBAAiB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC;QACpC,aAAa,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,EAAE,EAAE,GAAG,CAAC,EAAE;QACxD,EAAE;QACF,OAAO;QACP,WAAW,CAAC,CAAC,CAAC,KAAK,WAAW,IAAI,CAAC,CAAC,CAAC,EAAE;QACvC,aAAa,CAAC,CAAC,CAAC,KAAK,aAAa,IAAI,CAAC,CAAC,CAAC,EAAE;QAC3C,iEAAiE;QACjE,GAAG;QACH,iEAAiE;QACjE,oCAAoC;QACpC,sCAAsC;QACtC,qCAAqC;QACrC,uEAAuE;QACvE,oEAAoE;QACpE,yDAAyD;QACzD,GAAG;KACJ;SACE,MAAM,CAAC,OAAO,CAAC;SACf,IAAI,CAAC,IAAI,CAAC,CAAA;IAEb,MAAM,CAAC,GAAG,MAAM,sBAAsB,CAAC,IAAI,CAAC,EAAE,EAAE,WAAW,EAAE;QAC3D,MAAM;QACN,MAAM,EACJ,2GAA2G;YAC3G,4EAA4E;QAC9E,SAAS,EAAE,GAAG;QACd,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,aAAa,EAAE,IAAI;KACpB,CAAC,CAAA;IAEF,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QACV,IAAI,CAAC,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;YAClC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAA;QACpE,CAAC;QACD,IAAI,CAAC,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;YACjC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAA;QACnE,CAAC;QACD,IAAI,CAAC,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;YAC9B,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAA;QAChE,CAAC;QACD,IAAI,CAAC,CAAC,IAAI,KAAK,aAAa,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7E,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,IAAI,EAAE,aAAa;gBACnB,OAAO,EAAE,4DAA4D;aACtE,CAAA;QACH,CAAC;QACD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAA;IACzD,CAAC;IAED,MAAM,MAAM,GAAG,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;IACrC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,kDAAkD,EAAE,CAAA;IAClG,CAAC;IAED,MAAM,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;IAEtD,OAAO;QACL,EAAE,EAAE,IAAI;QACR,KAAK,EAAE;YACL,GAAG,MAAM;YACT,SAAS,EAAE,KAAK,CAAC,IAAI;YACrB,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,WAAW;YACX,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACtC;KACF,CAAA;AACH,CAAC;AAED,kEAAkE;AAClE,MAAM,UAAU,0BAA0B,CAAC,KAAsB;IAC/D,MAAM,KAAK,GAAa,CAAC,4DAA4D,EAAE,EAAE,CAAC,CAAA;IAC1F,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;IACzB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACd,IAAI,KAAK,CAAC,WAAW;QAAE,KAAK,CAAC,IAAI,CAAC,uBAAuB,KAAK,CAAC,WAAW,EAAE,CAAC,CAAA;IAC7E,IAAI,KAAK,CAAC,eAAe;QAAE,KAAK,CAAC,IAAI,CAAC,yBAAyB,KAAK,CAAC,eAAe,QAAQ,CAAC,CAAA;IAC7F,IAAI,KAAK,CAAC,gBAAgB;QAAE,KAAK,CAAC,IAAI,CAAC,uBAAuB,KAAK,CAAC,gBAAgB,EAAE,CAAC,CAAA;IACvF,IAAI,KAAK,CAAC,OAAO;QAAE,KAAK,CAAC,IAAI,CAAC,mBAAmB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAA;IACjE,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAA;QACpC,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM;YAAE,KAAK,CAAC,IAAI,CAAC,OAAO,KAAK,EAAE,CAAC,CAAA;IAC9D,CAAC;IACD,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QACrC,KAAK,CAAC,IAAI,CAAC,OAAO,OAAO,CAAC,OAAO,KAAK,CAAC,CAAA;QACvC,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,OAAO;YAAE,KAAK,CAAC,IAAI,CAAC,OAAO,MAAM,EAAE,CAAC,CAAA;IACnE,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACd,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACzB,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { AuditEntityInput } from './audit-engine.js';
|
|
2
2
|
import type { AiFixDeps } from './issue-fix-ai.js';
|
|
3
|
-
|
|
3
|
+
import { RESEARCH_ISSUE_TYPES } from './issue-types.js';
|
|
4
|
+
export { RESEARCH_ISSUE_TYPES };
|
|
4
5
|
interface SeoContentResearchCompetitor {
|
|
5
6
|
url: string;
|
|
6
7
|
title: string;
|
|
@@ -47,5 +48,4 @@ export declare function generateContentResearch(issue: ContentResearchIssueInput
|
|
|
47
48
|
}): Promise<ContentResearchResult>;
|
|
48
49
|
/** Render topic research as markdown for export handoff docs. */
|
|
49
50
|
export declare function renderContentResearchMarkdown(research: SeoContentResearch): string;
|
|
50
|
-
export {};
|
|
51
51
|
//# sourceMappingURL=issue-content-research.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"issue-content-research.d.ts","sourceRoot":"","sources":["../../src/seo/issue-content-research.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAEzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"issue-content-research.d.ts","sourceRoot":"","sources":["../../src/seo/issue-content-research.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAEzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;AAEvD,OAAO,EAAE,oBAAoB,EAAE,CAAA;AAO/B,UAAU,4BAA4B;IACpC,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAA;IACjC,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,aAAa,EAAE,MAAM,EAAE,CAAA;IACvB,iBAAiB,EAAE,MAAM,EAAE,CAAA;IAC3B,kBAAkB,EAAE,4BAA4B,EAAE,CAAA;IAClD,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,yBAAyB;IACxC,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CACzB;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,gBAAgB,CAAA;IACxB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;CACzB;AAED,MAAM,MAAM,qBAAqB,GAC7B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,EAAE,kBAAkB,CAAA;CAAE,GAC1C;IACE,EAAE,EAAE,KAAK,CAAA;IACT,IAAI,EACA,aAAa,GACb,aAAa,GACb,cAAc,GACd,iBAAiB,GACjB,kBAAkB,GAClB,OAAO,CAAA;IACX,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAyEL,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAElE;AAED,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,OAAO,EACjB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GAAG,IAAI,GACvB,kBAAkB,GAAG,IAAI,CAkC3B;AAED,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,kBAAkB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAE/F;AAoDD,wBAAsB,uBAAuB,CAC3C,KAAK,EAAE,yBAAyB,EAChC,GAAG,EAAE,sBAAsB,EAC3B,IAAI,EAAE,SAAS,EACf,OAAO,CAAC,EAAE;IAAE,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,GACtC,OAAO,CAAC,qBAAqB,CAAC,CAgHhC;AAED,iEAAiE;AACjE,wBAAgB,6BAA6B,CAAC,QAAQ,EAAE,kBAAkB,GAAG,MAAM,CA4BlF"}
|
|
@@ -8,7 +8,8 @@ import { generateTextForFeature } from '../ai/index.js';
|
|
|
8
8
|
import { logEvent } from '../security/audit.js';
|
|
9
9
|
import { stripHtmlTags } from './analysis.js';
|
|
10
10
|
import { buildFixFingerprint } from './issue-fix.js';
|
|
11
|
-
|
|
11
|
+
import { RESEARCH_ISSUE_TYPES } from './issue-types.js';
|
|
12
|
+
export { RESEARCH_ISSUE_TYPES };
|
|
12
13
|
const MAX_COMPETITOR_URLS = 3;
|
|
13
14
|
const AI_CONTEXT_MAX = 2000;
|
|
14
15
|
const SEO_FEATURE = 'ai.features.seoMetaGeneration';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"issue-content-research.js","sourceRoot":"","sources":["../../src/seo/issue-content-research.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"issue-content-research.js","sourceRoot":"","sources":["../../src/seo/issue-content-research.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,7 +10,8 @@ import { fenceUntrusted } from '../ai/prompt-safety.js';
|
|
|
10
10
|
import type { AuditEntityInput } from './audit-engine.js';
|
|
11
11
|
import { type SeoFixFieldChange, type SeoIssueFixContext, type SeoIssueFixInput, type SeoIssueFixSuggestion } from './issue-fix.js';
|
|
12
12
|
import type { BrandVoiceProfile } from '../ai/types.js';
|
|
13
|
-
|
|
13
|
+
import { AI_FIX_TYPES } from './issue-types.js';
|
|
14
|
+
export { AI_FIX_TYPES };
|
|
14
15
|
export interface AiFixDeps {
|
|
15
16
|
db: PrentaDB;
|
|
16
17
|
userId: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"issue-fix-ai.d.ts","sourceRoot":"","sources":["../../src/seo/issue-fix-ai.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,KAAK,CAAA;AAElC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAGrD,OAAO,EAAkB,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAIvE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AACzD,OAAO,EAOL,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACrB,KAAK,qBAAqB,EAC3B,MAAM,gBAAgB,CAAA;AAOvB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;
|
|
1
|
+
{"version":3,"file":"issue-fix-ai.d.ts","sourceRoot":"","sources":["../../src/seo/issue-fix-ai.ts"],"names":[],"mappings":"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"}
|
package/dist/seo/issue-fix-ai.js
CHANGED
|
@@ -10,16 +10,8 @@ import { alignContentWithBrandVoice, seoFieldToBrandChannel } from '../ai/brand-
|
|
|
10
10
|
// Cycle with ./issue-fix-faq.js is intentional and safe: both modules export
|
|
11
11
|
// only functions/consts and neither calls into the other at module-evaluation time.
|
|
12
12
|
import { suggestFaqSectionFix } from './issue-fix-faq.js';
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
'meta-title-length',
|
|
16
|
-
'missing-meta-description',
|
|
17
|
-
'meta-description-length',
|
|
18
|
-
'duplicate-meta-title',
|
|
19
|
-
'duplicate-meta-description',
|
|
20
|
-
'missing-structured-data',
|
|
21
|
-
'missing-faq',
|
|
22
|
-
]);
|
|
13
|
+
import { AI_FIX_TYPES } from './issue-types.js';
|
|
14
|
+
export { AI_FIX_TYPES };
|
|
23
15
|
const SEO_FEATURE = 'ai.features.seoMetaGeneration';
|
|
24
16
|
/** Re-exported from the `ai/prompt-safety` leaf so existing SEO callers keep working. */
|
|
25
17
|
export { fenceUntrusted };
|