@prenta/core 6.0.0 → 7.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +39 -0
- package/dist/ai/brand-voice-analyze.d.ts +1 -4
- package/dist/ai/brand-voice-analyze.d.ts.map +1 -1
- package/dist/ai/brand-voice-analyze.js +1 -2
- package/dist/ai/brand-voice-analyze.js.map +1 -1
- package/dist/ai/brand-voice-sources.d.ts +0 -2
- package/dist/ai/brand-voice-sources.d.ts.map +1 -1
- package/dist/ai/brand-voice-sources.js +2 -2
- package/dist/ai/brand-voice-sources.js.map +1 -1
- package/dist/ai/brand-voice-structured.d.ts +6 -6
- package/dist/ai/brand-voice-structured.d.ts.map +1 -1
- package/dist/ai/catalog.d.ts +8 -0
- package/dist/ai/catalog.d.ts.map +1 -1
- package/dist/ai/catalog.js +22 -0
- package/dist/ai/catalog.js.map +1 -1
- package/dist/ai/config-store.d.ts +18 -4
- package/dist/ai/config-store.d.ts.map +1 -1
- package/dist/ai/config-store.js +115 -20
- package/dist/ai/config-store.js.map +1 -1
- package/dist/ai/content-writing-generate.d.ts +10 -8
- package/dist/ai/content-writing-generate.d.ts.map +1 -1
- package/dist/ai/content-writing-generate.js +24 -56
- package/dist/ai/content-writing-generate.js.map +1 -1
- package/dist/ai/embeddings.d.ts +28 -0
- package/dist/ai/embeddings.d.ts.map +1 -0
- package/dist/ai/embeddings.js +36 -0
- package/dist/ai/embeddings.js.map +1 -0
- package/dist/ai/feature-defaults.d.ts +3 -3
- package/dist/ai/feature-defaults.d.ts.map +1 -1
- package/dist/ai/feature-defaults.js +24 -14
- package/dist/ai/feature-defaults.js.map +1 -1
- package/dist/ai/index.d.ts +15 -16
- package/dist/ai/index.d.ts.map +1 -1
- package/dist/ai/index.js +14 -15
- package/dist/ai/index.js.map +1 -1
- package/dist/ai/models.d.ts +7 -3
- package/dist/ai/models.d.ts.map +1 -1
- package/dist/ai/models.js +10 -5
- package/dist/ai/models.js.map +1 -1
- package/dist/ai/plugin-errors.d.ts +9 -3
- package/dist/ai/plugin-errors.d.ts.map +1 -1
- package/dist/ai/plugin-errors.js +9 -3
- package/dist/ai/plugin-errors.js.map +1 -1
- package/dist/ai/plugin-import.d.ts +9 -1
- package/dist/ai/plugin-import.d.ts.map +1 -1
- package/dist/ai/plugin-import.js +9 -1
- package/dist/ai/plugin-import.js.map +1 -1
- package/dist/ai/prompt-safety.d.ts +23 -0
- package/dist/ai/prompt-safety.d.ts.map +1 -0
- package/dist/ai/prompt-safety.js +34 -0
- package/dist/ai/prompt-safety.js.map +1 -0
- package/dist/ai/providers/anthropic.d.ts.map +1 -1
- package/dist/ai/providers/anthropic.js +16 -1
- package/dist/ai/providers/anthropic.js.map +1 -1
- package/dist/ai/providers/http.d.ts +7 -2
- package/dist/ai/providers/http.d.ts.map +1 -1
- package/dist/ai/providers/http.js +13 -2
- package/dist/ai/providers/http.js.map +1 -1
- package/dist/ai/providers/index.d.ts +0 -7
- package/dist/ai/providers/index.d.ts.map +1 -1
- package/dist/ai/providers/index.js +1 -1
- package/dist/ai/providers/index.js.map +1 -1
- package/dist/ai/resolve.d.ts +7 -1
- package/dist/ai/resolve.d.ts.map +1 -1
- package/dist/ai/resolve.js +36 -3
- package/dist/ai/resolve.js.map +1 -1
- package/dist/ai/runtime-response.d.ts +27 -0
- package/dist/ai/runtime-response.d.ts.map +1 -0
- package/dist/ai/runtime-response.js +75 -0
- package/dist/ai/runtime-response.js.map +1 -0
- package/dist/ai/runtime.d.ts +9 -7
- package/dist/ai/runtime.d.ts.map +1 -1
- package/dist/ai/runtime.js +14 -19
- package/dist/ai/runtime.js.map +1 -1
- package/dist/ai/tasks/alt-text.d.ts +82 -0
- package/dist/ai/tasks/alt-text.d.ts.map +1 -0
- package/dist/ai/tasks/alt-text.js +171 -0
- package/dist/ai/tasks/alt-text.js.map +1 -0
- package/dist/ai/tasks/document-generation.d.ts +102 -0
- package/dist/ai/tasks/document-generation.d.ts.map +1 -0
- package/dist/ai/tasks/document-generation.js +321 -0
- package/dist/ai/tasks/document-generation.js.map +1 -0
- package/dist/ai/tasks/link-embeddings.d.ts +55 -0
- package/dist/ai/tasks/link-embeddings.d.ts.map +1 -0
- package/dist/ai/tasks/link-embeddings.js +160 -0
- package/dist/ai/tasks/link-embeddings.js.map +1 -0
- package/dist/ai/types.d.ts +15 -19
- package/dist/ai/types.d.ts.map +1 -1
- package/dist/ai/types.js +6 -7
- package/dist/ai/types.js.map +1 -1
- package/dist/ai/usage.d.ts +6 -4
- package/dist/ai/usage.d.ts.map +1 -1
- package/dist/ai/usage.js +6 -4
- package/dist/ai/usage.js.map +1 -1
- package/dist/ai/vector.d.ts +8 -0
- package/dist/ai/vector.d.ts.map +1 -0
- package/dist/ai/vector.js +24 -0
- package/dist/ai/vector.js.map +1 -0
- package/dist/api/responses.d.ts +1 -1
- package/dist/api/responses.d.ts.map +1 -1
- package/dist/api/responses.js +1 -1
- package/dist/api/responses.js.map +1 -1
- package/dist/api/route-helpers.d.ts +2 -19
- package/dist/api/route-helpers.d.ts.map +1 -1
- package/dist/api/route-helpers.js +11 -22
- package/dist/api/route-helpers.js.map +1 -1
- package/dist/api/routes/ai-authoring.d.ts.map +1 -1
- package/dist/api/routes/ai-authoring.js +132 -144
- package/dist/api/routes/ai-authoring.js.map +1 -1
- package/dist/api/routes/ai-seo.d.ts.map +1 -1
- package/dist/api/routes/ai-seo.js +44 -120
- package/dist/api/routes/ai-seo.js.map +1 -1
- package/dist/api/routes/ai-settings.d.ts.map +1 -1
- package/dist/api/routes/ai-settings.js +76 -28
- package/dist/api/routes/ai-settings.js.map +1 -1
- package/dist/api/routes/security-center.d.ts.map +1 -1
- package/dist/api/routes/security-center.js +5 -39
- package/dist/api/routes/security-center.js.map +1 -1
- package/dist/api/routes/seo-public.d.ts +7 -5
- package/dist/api/routes/seo-public.d.ts.map +1 -1
- package/dist/api/routes/seo-public.js +16 -1
- package/dist/api/routes/seo-public.js.map +1 -1
- package/dist/api/routes/seo.d.ts.map +1 -1
- package/dist/api/routes/seo.js +11 -10
- package/dist/api/routes/seo.js.map +1 -1
- package/dist/api/routes/url-resolution.d.ts.map +1 -1
- package/dist/api/routes/url-resolution.js +2 -1
- package/dist/api/routes/url-resolution.js.map +1 -1
- package/dist/api/security-headers.d.ts +8 -0
- package/dist/api/security-headers.d.ts.map +1 -0
- package/dist/api/security-headers.js +13 -0
- package/dist/api/security-headers.js.map +1 -0
- package/dist/appearance/favicon-icon.d.ts +1 -1
- package/dist/appearance/favicon-icon.d.ts.map +1 -1
- package/dist/appearance/favicon-icon.js +1 -1
- package/dist/appearance/favicon-icon.js.map +1 -1
- package/dist/auth/index.d.ts +0 -6
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/auth/index.js +0 -3
- package/dist/auth/index.js.map +1 -1
- package/dist/auth/invites.d.ts +0 -5
- package/dist/auth/invites.d.ts.map +1 -1
- package/dist/auth/invites.js +3 -3
- package/dist/auth/invites.js.map +1 -1
- package/dist/auth/team.d.ts +4 -3
- package/dist/auth/team.d.ts.map +1 -1
- package/dist/auth/user-admin.d.ts +2 -1
- package/dist/auth/user-admin.d.ts.map +1 -1
- package/dist/billing/stripe-meter.d.ts +2 -1
- package/dist/billing/stripe-meter.d.ts.map +1 -1
- package/dist/cache/http.d.ts +0 -11
- package/dist/cache/http.d.ts.map +1 -1
- package/dist/cache/http.js +1 -1
- package/dist/cache/http.js.map +1 -1
- package/dist/cache/index.d.ts +0 -5
- package/dist/cache/index.d.ts.map +1 -1
- package/dist/collections/presets.d.ts +21 -3
- package/dist/collections/presets.d.ts.map +1 -1
- package/dist/collections/presets.js +64 -12
- package/dist/collections/presets.js.map +1 -1
- package/dist/config/types.d.ts +26 -19
- package/dist/config/types.d.ts.map +1 -1
- package/dist/content/index.d.ts +2 -3
- package/dist/content/index.d.ts.map +1 -1
- package/dist/content/index.js +1 -2
- package/dist/content/index.js.map +1 -1
- package/dist/content/structured-data.d.ts +0 -14
- package/dist/content/structured-data.d.ts.map +1 -1
- package/dist/content/structured-data.js +3 -14
- package/dist/content/structured-data.js.map +1 -1
- package/dist/cron/index.d.ts +2 -3
- package/dist/cron/index.d.ts.map +1 -1
- package/dist/cron/index.js +0 -2
- package/dist/cron/index.js.map +1 -1
- package/dist/db/client-types.d.ts +2 -1
- package/dist/db/client-types.d.ts.map +1 -1
- package/dist/db.d.ts +0 -2
- package/dist/db.d.ts.map +1 -1
- package/dist/db.js +0 -1
- package/dist/db.js.map +1 -1
- package/dist/diagnostics/env.d.ts +1 -1
- package/dist/diagnostics/env.d.ts.map +1 -1
- package/dist/diagnostics/logger.d.ts +0 -24
- package/dist/diagnostics/logger.d.ts.map +1 -1
- package/dist/fields/presets.d.ts +7 -0
- package/dist/fields/presets.d.ts.map +1 -1
- package/dist/fields/presets.js +17 -0
- package/dist/fields/presets.js.map +1 -1
- package/dist/forms/entries.d.ts +0 -7
- package/dist/forms/entries.d.ts.map +1 -1
- package/dist/forms/entries.js +1 -19
- package/dist/forms/entries.js.map +1 -1
- package/dist/forms/files.d.ts +1 -1
- package/dist/forms/files.d.ts.map +1 -1
- package/dist/forms/index.d.ts +4 -6
- package/dist/forms/index.d.ts.map +1 -1
- package/dist/forms/index.js +3 -5
- package/dist/forms/index.js.map +1 -1
- package/dist/forms/prefetch.d.ts +0 -6
- package/dist/forms/prefetch.d.ts.map +1 -1
- package/dist/forms/service.d.ts +0 -4
- package/dist/forms/service.d.ts.map +1 -1
- package/dist/forms/service.js +2 -8
- package/dist/forms/service.js.map +1 -1
- package/dist/forms/webmcp.d.ts +0 -2
- package/dist/forms/webmcp.d.ts.map +1 -1
- package/dist/forms/webmcp.js +1 -1
- package/dist/forms/webmcp.js.map +1 -1
- package/dist/media/denormalize.d.ts +0 -7
- package/dist/media/denormalize.d.ts.map +1 -1
- package/dist/media/index.d.ts +0 -8
- package/dist/media/index.d.ts.map +1 -1
- package/dist/media/index.js +0 -5
- package/dist/media/index.js.map +1 -1
- package/dist/media/optimize.d.ts +0 -4
- package/dist/media/optimize.d.ts.map +1 -1
- package/dist/media/optimize.js +4 -4
- package/dist/media/optimize.js.map +1 -1
- package/dist/media/reoptimize.d.ts +2 -3
- package/dist/media/reoptimize.d.ts.map +1 -1
- package/dist/media/reoptimize.js +2 -2
- package/dist/media/reoptimize.js.map +1 -1
- package/dist/media/seo.d.ts +3 -8
- package/dist/media/seo.d.ts.map +1 -1
- package/dist/media/seo.js +1 -1
- package/dist/media/seo.js.map +1 -1
- package/dist/plan/features.d.ts +0 -1
- package/dist/plan/features.d.ts.map +1 -1
- package/dist/plan/features.js +0 -16
- package/dist/plan/features.js.map +1 -1
- package/dist/preview/event-bus.d.ts +2 -1
- package/dist/preview/event-bus.d.ts.map +1 -1
- package/dist/preview/index.d.ts +2 -1
- package/dist/preview/index.d.ts.map +1 -1
- package/dist/preview/sse-stream.d.ts +0 -13
- package/dist/preview/sse-stream.d.ts.map +1 -1
- package/dist/preview/sse-stream.js +2 -2
- package/dist/preview/sse-stream.js.map +1 -1
- package/dist/realtime/notifications.d.ts +4 -3
- package/dist/realtime/notifications.d.ts.map +1 -1
- package/dist/redirects/index.d.ts +4 -16
- package/dist/redirects/index.d.ts.map +1 -1
- package/dist/redirects/index.js +2 -9
- package/dist/redirects/index.js.map +1 -1
- package/dist/redirects/match.d.ts +0 -2
- package/dist/redirects/match.d.ts.map +1 -1
- package/dist/redirects/match.js +1 -1
- package/dist/redirects/match.js.map +1 -1
- package/dist/redirects/recovery.d.ts +0 -2
- package/dist/redirects/recovery.d.ts.map +1 -1
- package/dist/redirects/recovery.js +1 -1
- package/dist/redirects/recovery.js.map +1 -1
- package/dist/redirects/rerank.d.ts +4 -3
- package/dist/redirects/rerank.d.ts.map +1 -1
- package/dist/redirects/rerank.js +3 -18
- package/dist/redirects/rerank.js.map +1 -1
- package/dist/sections/validate.d.ts +0 -2
- package/dist/sections/validate.d.ts.map +1 -1
- package/dist/sections/validate.js +1 -1
- package/dist/sections/validate.js.map +1 -1
- package/dist/security/access.d.ts +0 -9
- package/dist/security/access.d.ts.map +1 -1
- package/dist/security/access.js +1 -1
- package/dist/security/access.js.map +1 -1
- package/dist/security/audit.d.ts +0 -20
- package/dist/security/audit.d.ts.map +1 -1
- package/dist/security/audit.js.map +1 -1
- package/dist/security/index.d.ts +2 -20
- package/dist/security/index.d.ts.map +1 -1
- package/dist/security/index.js +2 -7
- package/dist/security/index.js.map +1 -1
- package/dist/security/internal-keys.d.ts +0 -10
- package/dist/security/internal-keys.d.ts.map +1 -1
- package/dist/security/internal-keys.js +2 -2
- package/dist/security/internal-keys.js.map +1 -1
- package/dist/security/rate-limit-policy.d.ts +0 -2
- package/dist/security/rate-limit-policy.d.ts.map +1 -1
- package/dist/security/rate-limit-policy.js +1 -1
- package/dist/security/rate-limit-policy.js.map +1 -1
- package/dist/security/rate-limit.d.ts +2 -5
- package/dist/security/rate-limit.d.ts.map +1 -1
- package/dist/security/rate-limit.js +2 -2
- package/dist/security/rate-limit.js.map +1 -1
- package/dist/security/sanitize.d.ts +0 -3
- package/dist/security/sanitize.d.ts.map +1 -1
- package/dist/security/sanitize.js +0 -1
- package/dist/security/sanitize.js.map +1 -1
- package/dist/security/upload.d.ts +0 -3
- package/dist/security/upload.d.ts.map +1 -1
- package/dist/security/upload.js +0 -1
- package/dist/security/upload.js.map +1 -1
- package/dist/seo/ai-crawler-log.d.ts +0 -2
- package/dist/seo/ai-crawler-log.d.ts.map +1 -1
- package/dist/seo/ai-crawler-log.js +1 -1
- package/dist/seo/ai-crawler-log.js.map +1 -1
- package/dist/seo/audit-engine.d.ts +5 -5
- package/dist/seo/audit-engine.d.ts.map +1 -1
- package/dist/seo/audit-engine.js +1 -2
- package/dist/seo/audit-engine.js.map +1 -1
- package/dist/seo/audit-runner.d.ts +0 -7
- package/dist/seo/audit-runner.d.ts.map +1 -1
- package/dist/seo/audit-runner.js +1 -1
- package/dist/seo/audit-runner.js.map +1 -1
- package/dist/seo/audit-signals.d.ts +0 -2
- package/dist/seo/audit-signals.d.ts.map +1 -1
- package/dist/seo/audit-signals.js +1 -1
- package/dist/seo/audit-signals.js.map +1 -1
- package/dist/seo/autopilot-gate.d.ts +0 -1
- package/dist/seo/autopilot-gate.d.ts.map +1 -1
- package/dist/seo/autopilot-gate.js +1 -1
- package/dist/seo/autopilot-gate.js.map +1 -1
- package/dist/seo/autopilot-ledger.d.ts +2 -1
- package/dist/seo/autopilot-ledger.d.ts.map +1 -1
- package/dist/seo/autopilot-outcome.d.ts +0 -2
- package/dist/seo/autopilot-outcome.d.ts.map +1 -1
- package/dist/seo/autopilot-outcome.js +1 -1
- package/dist/seo/autopilot-outcome.js.map +1 -1
- package/dist/seo/autopilot-policy.d.ts +3 -38
- package/dist/seo/autopilot-policy.d.ts.map +1 -1
- package/dist/seo/autopilot-policy.js +3 -3
- package/dist/seo/autopilot-policy.js.map +1 -1
- package/dist/seo/autopilot.d.ts +4 -12
- package/dist/seo/autopilot.d.ts.map +1 -1
- package/dist/seo/autopilot.js +3 -3
- package/dist/seo/autopilot.js.map +1 -1
- package/dist/seo/config-store.d.ts +0 -2
- package/dist/seo/config-store.d.ts.map +1 -1
- package/dist/seo/config-store.js +1 -1
- package/dist/seo/config-store.js.map +1 -1
- package/dist/seo/digest.d.ts +8 -7
- package/dist/seo/digest.d.ts.map +1 -1
- package/dist/seo/faq-signals.d.ts +0 -4
- package/dist/seo/faq-signals.d.ts.map +1 -1
- package/dist/seo/faq-signals.js +4 -4
- package/dist/seo/faq-signals.js.map +1 -1
- package/dist/seo/fix-brief-export.d.ts +0 -2
- package/dist/seo/fix-brief-export.d.ts.map +1 -1
- package/dist/seo/fix-brief-export.js +1 -1
- package/dist/seo/fix-brief-export.js.map +1 -1
- package/dist/seo/geo-record.d.ts +0 -4
- package/dist/seo/geo-record.d.ts.map +1 -1
- package/dist/seo/geo-record.js +2 -2
- package/dist/seo/geo-record.js.map +1 -1
- package/dist/seo/geo-report.d.ts +4 -3
- package/dist/seo/geo-report.d.ts.map +1 -1
- package/dist/seo/geo-report.js +1 -1
- package/dist/seo/geo-report.js.map +1 -1
- package/dist/seo/index-status.d.ts +6 -5
- package/dist/seo/index-status.d.ts.map +1 -1
- package/dist/seo/index-status.js.map +1 -1
- package/dist/seo/index.d.ts +15 -90
- package/dist/seo/index.d.ts.map +1 -1
- package/dist/seo/index.js +10 -49
- package/dist/seo/index.js.map +1 -1
- package/dist/seo/issue-batch-briefs.d.ts +2 -3
- package/dist/seo/issue-batch-briefs.d.ts.map +1 -1
- package/dist/seo/issue-batch-briefs.js +2 -2
- package/dist/seo/issue-batch-briefs.js.map +1 -1
- package/dist/seo/issue-content-brief.d.ts +2 -1
- package/dist/seo/issue-content-brief.d.ts.map +1 -1
- package/dist/seo/issue-content-research.d.ts +2 -2
- package/dist/seo/issue-content-research.d.ts.map +1 -1
- package/dist/seo/issue-content-research.js +1 -1
- package/dist/seo/issue-content-research.js.map +1 -1
- package/dist/seo/issue-fix-ai.d.ts +5 -4
- package/dist/seo/issue-fix-ai.d.ts.map +1 -1
- package/dist/seo/issue-fix-ai.js +4 -19
- package/dist/seo/issue-fix-ai.js.map +1 -1
- package/dist/seo/issue-fix-apply.d.ts +2 -11
- package/dist/seo/issue-fix-apply.d.ts.map +1 -1
- package/dist/seo/issue-fix-apply.js +4 -4
- package/dist/seo/issue-fix-apply.js.map +1 -1
- package/dist/seo/issue-fix-faq.d.ts +4 -7
- package/dist/seo/issue-fix-faq.d.ts.map +1 -1
- package/dist/seo/issue-fix-faq.js +4 -4
- package/dist/seo/issue-fix-faq.js.map +1 -1
- package/dist/seo/issue-fix-link-insert.d.ts +4 -14
- package/dist/seo/issue-fix-link-insert.d.ts.map +1 -1
- package/dist/seo/issue-fix-link-insert.js +5 -4
- package/dist/seo/issue-fix-link-insert.js.map +1 -1
- package/dist/seo/issue-fix-redirect.d.ts +0 -1
- package/dist/seo/issue-fix-redirect.d.ts.map +1 -1
- package/dist/seo/issue-fix.d.ts.map +1 -1
- package/dist/seo/issue-fix.js +1 -0
- package/dist/seo/issue-fix.js.map +1 -1
- package/dist/seo/link-graph.d.ts +2 -3
- package/dist/seo/link-graph.d.ts.map +1 -1
- package/dist/seo/link-graph.js +0 -0
- package/dist/seo/link-graph.js.map +1 -1
- package/dist/seo/link-suggest.d.ts +8 -2
- package/dist/seo/link-suggest.d.ts.map +1 -1
- package/dist/seo/link-suggest.js +38 -50
- package/dist/seo/link-suggest.js.map +1 -1
- package/dist/seo/page-meta.d.ts +15 -10
- package/dist/seo/page-meta.d.ts.map +1 -1
- package/dist/seo/page-meta.js +31 -9
- package/dist/seo/page-meta.js.map +1 -1
- package/dist/seo/proposals-bulk-apply.d.ts +3 -2
- package/dist/seo/proposals-bulk-apply.d.ts.map +1 -1
- package/dist/seo/proposals.d.ts +2 -2
- package/dist/seo/proposals.d.ts.map +1 -1
- package/dist/seo/rendered-fetch.d.ts +2 -1
- package/dist/seo/rendered-fetch.d.ts.map +1 -1
- package/dist/seo/score.d.ts +3 -7
- package/dist/seo/score.d.ts.map +1 -1
- package/dist/seo/score.js.map +1 -1
- package/dist/seo/search-console/client.d.ts +0 -4
- package/dist/seo/search-console/client.d.ts.map +1 -1
- package/dist/seo/search-console/client.js +2 -2
- package/dist/seo/search-console/client.js.map +1 -1
- package/dist/seo/search-console/sync.d.ts +0 -4
- package/dist/seo/search-console/sync.d.ts.map +1 -1
- package/dist/seo/search-console/sync.js +2 -2
- package/dist/seo/search-console/sync.js.map +1 -1
- package/dist/seo/search-console/types.d.ts +2 -1
- package/dist/seo/search-console/types.d.ts.map +1 -1
- package/dist/seo/sitemap-notify.d.ts +0 -8
- package/dist/seo/sitemap-notify.d.ts.map +1 -1
- package/dist/seo/sitemap-notify.js +1 -1
- package/dist/seo/sitemap-notify.js.map +1 -1
- package/dist/seo/title-templates.d.ts +2 -5
- package/dist/seo/title-templates.d.ts.map +1 -1
- package/dist/seo/title-templates.js +2 -2
- package/dist/seo/title-templates.js.map +1 -1
- package/dist/server-site.d.ts +0 -1
- package/dist/server-site.d.ts.map +1 -1
- package/dist/server-site.js +0 -1
- package/dist/server-site.js.map +1 -1
- package/dist/storage/index.d.ts +0 -2
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/index.js +0 -4
- package/dist/storage/index.js.map +1 -1
- package/dist/upgrade/version-check.d.ts +0 -2
- package/dist/upgrade/version-check.d.ts.map +1 -1
- package/dist/upgrade/version-check.js +1 -1
- package/dist/upgrade/version-check.js.map +1 -1
- package/dist/webhooks/index.d.ts +0 -8
- package/dist/webhooks/index.d.ts.map +1 -1
- package/dist/webhooks/index.js +1 -16
- package/dist/webhooks/index.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,44 @@
|
|
|
1
1
|
# @actuate-media/cms-core
|
|
2
2
|
|
|
3
|
+
## 7.1.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 2a46f45: The dynamic Open Graph card fallback was composed as `${siteUrl}/api/cms/og.png?title=…`, but `siteUrl` is the public site origin and the route is served by the CMS — on a decoupled frontend (site on `www`, CMS on `cms.`) every page without an uploaded `ogImage` published an `og:image` that 404d. `composePageMeta` and `resolveEffectiveMeta` now accept a `cmsOrigin` input and compose the card against the CMS origin with precedence `seo.cmsUrl` → request origin → `siteUrl`; `/resolve` and `/seo/meta/:id` pass the request origin. New optional `seo.cmsUrl` in `SiteSEOConfig` pins the CMS origin explicitly. Canonical, `og:url` and `metadataBase` stay on `siteUrl`, and the generated card keeps its `width`/`height`. Coupled deploys (one origin) are unchanged. Fixes #904
|
|
8
|
+
- 2a46f45: `mergeCollection` composed preset fields with a spread, so a `blogPostCollection` override could add or replace a field but never remove one — jobs and help types built from the blog preset kept `relatedPosts`, `authorName`, `tags`, etc. and had to retarget them. `CollectionPresetOverrides.fields` now accepts `FieldDefinition | null`: an own-property `null` drops the key from the merged collection (`blogPostCollection({ fields: { relatedPosts: null } })`), a definition still replaces it, and `undefined` is not an omit token (the default is kept and no `undefined`-valued key is emitted). `type: 'post'` presets refuse to drop the fields the admin Post Editor requires (`sections`, `excerpt`, `body`, …) and throw an error naming the key. Fixes #922
|
|
9
|
+
|
|
10
|
+
## 7.0.0
|
|
11
|
+
|
|
12
|
+
### Major Changes
|
|
13
|
+
|
|
14
|
+
- 075cce2: Governed-runtime convergence (SEO AI audit roadmap item 8, Spec B). Every AI model call now runs through the Settings > AI runtime — feature toggles, daily caps, monthly budget, brand voice, and usage metering apply uniformly.
|
|
15
|
+
|
|
16
|
+
**Breaking**
|
|
17
|
+
- The legacy `@prenta/plugin-ai` provider fallback is gone. Hosts need either a provider connection in Settings > AI **or** a provider API key env var (`OPENAI_API_KEY`, `ANTHROPIC_API_KEY`, `XAI_API_KEY`). With an env var set, an env-managed connection and the provider's curated default model are used automatically (zero-config). Hosts that passed a literal key to `aiPlugin({ apiKey })` without an env var must set the env var or add a connection; otherwise AI routes return 503 with a setup hint.
|
|
18
|
+
- `GET /ai/status` removed (no callers; Settings > AI has its own status).
|
|
19
|
+
- `POST /collections/:slug/ai-create` (MCP create tools) is governed by the new **Document generation (MCP)** feature: toggle, daily cap (default 50), budget, brand voice, and an `ai_usage` metering row per call. Invalid model output now returns 502 `invalid_output` after one retry instead of 500. The response's `generation.usage` now has the runtime shape `{ promptTokens, completionTokens, totalTokens }` (a superset of the old `{ promptTokens, completionTokens }`), and the `settings_changed` audit row no longer carries `tokensUsed`. The route no longer forces `temperature: 0.7` — the provider default applies unless the request supplies one — and `maxTokens` (integer, 64–6000) / `temperature` (0–2) are validated: out-of-range or non-numeric values return 400 before any model call. `tone` / `targetAudience` are clamped to 200 chars and flattened to one line before entering the system prompt.
|
|
20
|
+
- `POST /ai/providers/:id/sync-models` stamps the acting admin (not the env row's `system` placeholder) on the config row, so syncing an `env:*` connection works on Postgres (the `createdById` / `updatedById` FKs). `syncModels(db, connectionId, userId?)` gains the optional third argument.
|
|
21
|
+
- `PUT /ai/settings` no longer rejects a `defaultProviderId` that is no longer connected (e.g. a stale `env:*` row after the env var was removed): the default provider — and the default model, when it is no longer resolvable — are cleared and reported in a new `warnings: string[]` on the response (empty on a clean save). `putAIConfig` prunes `catalog` entries whose connection id is neither stored nor env-visible.
|
|
22
|
+
- Internal-link embeddings are chunked (≤ 256 inputs per request, the query on the first), each item clamped to 2000 chars, and corpora above 1000 items are pre-trimmed by query-token overlap then recency. `/seo/links/suggest` threads the session user into the `ai_usage` row.
|
|
23
|
+
- `generateContentWriting` failures now carry `code` (and `hint` for 503) alongside `httpStatus` / `message`; `POST /ai/brand-voice/analyze` emits `{ error, code, hint }` like every other AI route (previously the hint was concatenated into `error`).
|
|
24
|
+
- `getAIConfig` fails closed: when the config read throws (or the client has no `document` model) it returns no providers - env-key bootstrap applies only after a successful read - so a transient DB failure yields `no_model` instead of running governed features on default settings. `POST /ai/brand-voice/fix` keeps its deterministic 200 but adds `data.aiUnavailable: { code, message, hint? }` (and `aiRefusalCode` in the audit row) when `useAi` was requested and the runtime refused.
|
|
25
|
+
- Alt-text prompts fence `surroundingText` as untrusted content and clamp `pageTitle` to 200 chars.
|
|
26
|
+
- `isAiFeatureEnabled` (internal, never root-exported) removed; the runtime enforces toggles itself.
|
|
27
|
+
- `POST /ai/media-metadata` uses the feature's Settings > AI model; a non-vision model yields the text heuristic (confidence ≤ 0.4). 501 responses are now 503 with `code` + `hint`. The request body is validated: `purpose` must be one of `decorative` / `informative` / `functional` (other values are dropped rather than forwarded to the prompt) and `pageTitle` / `surroundingText` must be strings.
|
|
28
|
+
- `POST /ai/coauthor`: the plugin fallback and 501 branch are gone; refusals map through `runtimeErrorToResponse` (403 / 429 / 503 + hint / 502). The `proofread` action now always returns `changes: []` — the structured diff came from the removed plugin path; the governed path returns corrected text only.
|
|
29
|
+
- Removed never-read settings fields: `AIFeatureConfig.maxMonthlyTokens/rolesAllowed/permissionsRequired/dataPolicyKey`, `AIBudgetSettings.monthlyCostLimit/alertAtPercentages/perFeatureLimits/perUserLimits`, `AISettings.logsRetentionDays/defaultEmbeddingModelId`. Stored config JSON is untouched; the keys are ignored.
|
|
30
|
+
- `generateContentWritingWithFallback` → `generateContentWriting` (no fallback).
|
|
31
|
+
- `AI_PLUGIN_NOT_INSTALLED_MEDIA_ALT` removed; `AI_PLUGIN_NOT_INSTALLED` copy no longer mentions API keys (only the deterministic `/ai/audit-document` and `/ai/suggest-internal-links` routes still require the plugin).
|
|
32
|
+
|
|
33
|
+
**Added**
|
|
34
|
+
- Vision input: `GenerateTextOptions.images`, `GenerateForFeatureInput.images`, `RuntimeErrorCode 'unsupported_input'`, `ResolvedFeatureRuntime.capabilities`.
|
|
35
|
+
- `runtimeErrorToResponse` / `setupHint` — one HTTP mapping for every runtime refusal (`ai/runtime-response.ts`); `SECURITY_HEADERS` moved to the leaf module `api/security-headers.ts` (still re-exported from `route-helpers`).
|
|
36
|
+
- Env-key bootstrap: `getAIConfig` synthesizes an enabled `env:<provider>` connection (`ENV_CONNECTION_PREFIX`, `isEnvConnectionId`) when the provider env var is set and no stored connection exists. These rows show `status: unknown` and epoch timestamps, are never persisted, and reject PUT / DELETE with 400. `POST /ai/providers/:id/test` on an env connection returns the tested row without writing.
|
|
37
|
+
- `resolveFeatureModel` gains the `'provider-default'` source (`curatedDefaultModelId`): a connection with no default model resolves to the provider's curated default (`openai:gpt-4o-mini`, `anthropic:claude-sonnet-4-6`, `xai:grok-4-fast`; vision features pick the vision-flagged entry).
|
|
38
|
+
- Features `ai.features.documentGeneration` and `ai.features.seoInternalLinks` (appear automatically on existing sites via `mergeFeatures`).
|
|
39
|
+
- Internal-link suggestions embed the query + corpus in one governed `embedForFeature` call and fall back to deterministic phrase matching (`matchKind: 'phrase'`) instead of returning nothing. `POST /seo/links/ai-index` reports `aiAvailable` from a real runtime probe that also requires an embeddings-capable provider (`embeddingsAvailableForProvider`); Anthropic/xAI-only sites report `false` and stay on phrase matching.
|
|
40
|
+
- `ai/tasks/*` provider-free prompt builders and parsers (document generation, alt text, link embeddings), moved from `@prenta/plugin-ai`.
|
|
41
|
+
|
|
3
42
|
## 6.0.0
|
|
4
43
|
|
|
5
44
|
### Major Changes
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
* Brand voice analysis — gathers published content samples and turns them into
|
|
3
3
|
* a draft profile for the Settings > AI form fields.
|
|
4
4
|
*/
|
|
5
|
-
import { BRAND_VOICE_LIMITS } from './brand-voice.js';
|
|
6
5
|
import type { BrandVoiceProfile } from './types.js';
|
|
7
6
|
/** A single content sample fed to the analyzer. */
|
|
8
7
|
export interface BrandVoiceSample {
|
|
@@ -22,8 +21,6 @@ export interface BrandVoiceAnalyzeResult {
|
|
|
22
21
|
}>;
|
|
23
22
|
sampleCount: number;
|
|
24
23
|
}
|
|
25
|
-
declare const DEFAULT_MAX_SAMPLES = 10;
|
|
26
|
-
declare const MAX_SAMPLES_CAP = 15;
|
|
27
24
|
/** Fence untrusted CMS content before it is interpolated into an analysis prompt. */
|
|
28
25
|
export declare function fenceBrandVoiceSample(text: string, maxLen?: number): string;
|
|
29
26
|
/**
|
|
@@ -67,5 +64,5 @@ export declare function gatherBrandVoiceSamples(db: {
|
|
|
67
64
|
};
|
|
68
65
|
}, options: GatherBrandVoiceSamplesOptions): Promise<BrandVoiceSample[]>;
|
|
69
66
|
export declare function toBrandVoiceAnalyzeResult(draft: BrandVoiceAnalysisDraft, samples: BrandVoiceSample[]): BrandVoiceAnalyzeResult;
|
|
70
|
-
export {
|
|
67
|
+
export {};
|
|
71
68
|
//# sourceMappingURL=brand-voice-analyze.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"brand-voice-analyze.d.ts","sourceRoot":"","sources":["../../src/ai/brand-voice-analyze.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"brand-voice-analyze.d.ts","sourceRoot":"","sources":["../../src/ai/brand-voice-analyze.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAEnD,mDAAmD;AACnD,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;CACb;AAED,yEAAyE;AACzE,MAAM,MAAM,uBAAuB,GAAG,IAAI,CACxC,iBAAiB,EACjB,MAAM,GAAG,MAAM,GAAG,UAAU,GAAG,YAAY,GAAG,YAAY,CAC3D,CAAA;AAED,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,uBAAuB,CAAA;IAC9B,OAAO,EAAE,KAAK,CAAC;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACzE,WAAW,EAAE,MAAM,CAAA;CACpB;AAWD,qFAAqF;AACrF,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,SAAmB,GAAG,MAAM,CAGrF;AAED;;;GAGG;AACH,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,gBAAgB,EAAE,GAAG;IAC1E,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;CACf,CAsBA;AAED,sEAAsE;AACtE,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAMpD;AAED;;;GAGG;AACH,wBAAgB,+BAA+B,CAAC,IAAI,EAAE,MAAM,GAAG,uBAAuB,GAAG,IAAI,CAyB5F;AAED,MAAM,WAAW,8BAA8B;IAC7C,WAAW,EAAE,MAAM,EAAE,CAAA;IACrB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,KAAK,WAAW,GAAG;IACjB,EAAE,EAAE,MAAM,CAAA;IACV,UAAU,EAAE,MAAM,CAAA;IAClB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,IAAI,EAAE,OAAO,CAAA;CACd,CAAA;AAgBD;;;GAGG;AACH,wBAAsB,uBAAuB,CAC3C,EAAE,EAAE;IACF,QAAQ,EAAE;QACR,QAAQ,EAAE,CAAC,IAAI,EAAE;YACf,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;YAC9B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;YAC5B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;YAC/B,IAAI,EAAE,MAAM,CAAA;SACb,KAAK,OAAO,CAAC,WAAW,EAAE,CAAC,CAAA;KAC7B,CAAA;CACF,EACD,OAAO,EAAE,8BAA8B,GACtC,OAAO,CAAC,gBAAgB,EAAE,CAAC,CA0C7B;AAED,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,uBAAuB,EAC9B,OAAO,EAAE,gBAAgB,EAAE,GAC1B,uBAAuB,CAUzB"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Brand voice analysis — gathers published content samples and turns them into
|
|
3
3
|
* a draft profile for the Settings > AI form fields.
|
|
4
4
|
*/
|
|
5
|
-
import {
|
|
5
|
+
import { normalizeBrandVoice } from './brand-voice.js';
|
|
6
6
|
const DEFAULT_MAX_SAMPLES = 10;
|
|
7
7
|
const MAX_SAMPLES_CAP = 15;
|
|
8
8
|
const PER_SAMPLE_CHARS = 1500;
|
|
@@ -148,5 +148,4 @@ export function toBrandVoiceAnalyzeResult(draft, samples) {
|
|
|
148
148
|
sampleCount: samples.length,
|
|
149
149
|
};
|
|
150
150
|
}
|
|
151
|
-
export { DEFAULT_MAX_SAMPLES as BRAND_VOICE_ANALYZE_DEFAULT_SAMPLES, MAX_SAMPLES_CAP as BRAND_VOICE_ANALYZE_MAX_SAMPLES, BRAND_VOICE_LIMITS, };
|
|
152
151
|
//# sourceMappingURL=brand-voice-analyze.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"brand-voice-analyze.js","sourceRoot":"","sources":["../../src/ai/brand-voice-analyze.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"brand-voice-analyze.js","sourceRoot":"","sources":["../../src/ai/brand-voice-analyze.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,8 +5,6 @@ import type { BrandVoiceSample } from './brand-voice-analyze.js';
|
|
|
5
5
|
export declare const MAX_ANALYZE_URLS = 5;
|
|
6
6
|
export declare const MAX_ANALYZE_UPLOADS = 5;
|
|
7
7
|
export declare const MAX_UPLOAD_TEXT_CHARS = 15000;
|
|
8
|
-
export declare const MAX_URL_FETCH_CHARS = 8000;
|
|
9
|
-
export declare const MAX_URL_FETCH_BYTES: number;
|
|
10
8
|
export declare class BrandVoiceSourceError extends Error {
|
|
11
9
|
constructor(message: string);
|
|
12
10
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"brand-voice-sources.d.ts","sourceRoot":"","sources":["../../src/ai/brand-voice-sources.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAEhE,eAAO,MAAM,gBAAgB,IAAI,CAAA;AACjC,eAAO,MAAM,mBAAmB,IAAI,CAAA;AACpC,eAAO,MAAM,qBAAqB,QAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"brand-voice-sources.d.ts","sourceRoot":"","sources":["../../src/ai/brand-voice-sources.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAEhE,eAAO,MAAM,gBAAgB,IAAI,CAAA;AACjC,eAAO,MAAM,mBAAmB,IAAI,CAAA;AACpC,eAAO,MAAM,qBAAqB,QAAS,CAAA;AAuB3C,qBAAa,qBAAsB,SAAQ,KAAK;gBAClC,OAAO,EAAE,MAAM;CAI5B;AAED,mFAAmF;AACnF,wBAAsB,wBAAwB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA4DrF;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,gBAAgB,CAgBrF"}
|
|
@@ -6,8 +6,8 @@ import { stripHtmlTags } from '../seo/analysis.js';
|
|
|
6
6
|
export const MAX_ANALYZE_URLS = 5;
|
|
7
7
|
export const MAX_ANALYZE_UPLOADS = 5;
|
|
8
8
|
export const MAX_UPLOAD_TEXT_CHARS = 15_000;
|
|
9
|
-
|
|
10
|
-
|
|
9
|
+
const MAX_URL_FETCH_CHARS = 8_000;
|
|
10
|
+
const MAX_URL_FETCH_BYTES = 512 * 1024;
|
|
11
11
|
function clampText(text, max) {
|
|
12
12
|
return text.replace(/\s+/g, ' ').trim().slice(0, max);
|
|
13
13
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"brand-voice-sources.js","sourceRoot":"","sources":["../../src/ai/brand-voice-sources.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AACvE,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAGlD,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAA;AACjC,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAA;AACpC,MAAM,CAAC,MAAM,qBAAqB,GAAG,MAAM,CAAA;AAC3C,MAAM,
|
|
1
|
+
{"version":3,"file":"brand-voice-sources.js","sourceRoot":"","sources":["../../src/ai/brand-voice-sources.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
* Structured brand voice rules — parsed from profile frontmatter and used for
|
|
3
3
|
* deterministic alignment scoring and the Phase 3 admin editors.
|
|
4
4
|
*/
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
5
|
+
type ContractionsRule = 'allow' | 'avoid' | 'require';
|
|
6
|
+
type ExclamationRule = 'allow' | 'avoid' | 'forbid';
|
|
7
|
+
type EmojiRule = 'allow' | 'sparingly' | 'forbid';
|
|
8
|
+
type CaseRule = 'sentence' | 'title';
|
|
9
|
+
type NumbersRule = 'spell_all' | 'numerals_all' | 'numerals_for_10_plus';
|
|
10
|
+
type SpellingRule = 'us' | 'uk';
|
|
11
11
|
export interface BrandVoiceToneScales {
|
|
12
12
|
formalCasual: number;
|
|
13
13
|
seriousPlayful: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"brand-voice-structured.d.ts","sourceRoot":"","sources":["../../src/ai/brand-voice-structured.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,
|
|
1
|
+
{"version":3,"file":"brand-voice-structured.d.ts","sourceRoot":"","sources":["../../src/ai/brand-voice-structured.ts"],"names":[],"mappings":"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"}
|
package/dist/ai/catalog.d.ts
CHANGED
|
@@ -12,6 +12,14 @@
|
|
|
12
12
|
* resolves to its own entry.
|
|
13
13
|
*/
|
|
14
14
|
import type { AIModel, AIProviderKey } from './types.js';
|
|
15
|
+
/**
|
|
16
|
+
* The model a provider should use when the operator has configured nothing
|
|
17
|
+
* (env-key bootstrap). Prefers the entry flagged `defaultFor` the requested
|
|
18
|
+
* modality; otherwise `text` picks the first curated chat model and `vision`
|
|
19
|
+
* the first curated entry with `vision: true`. Deprecated and non-fallback
|
|
20
|
+
* entries are never chosen.
|
|
21
|
+
*/
|
|
22
|
+
export declare function curatedDefaultModelId(provider: AIProviderKey, want: 'text' | 'vision'): string | undefined;
|
|
15
23
|
export interface NormalizeInput {
|
|
16
24
|
provider: AIProviderKey;
|
|
17
25
|
providerModelId: string;
|
package/dist/ai/catalog.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../../src/ai/catalog.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAuC,aAAa,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../../src/ai/catalog.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAuC,aAAa,EAAE,MAAM,YAAY,CAAA;AA6Q7F;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,aAAa,EACvB,IAAI,EAAE,MAAM,GAAG,QAAQ,GACtB,MAAM,GAAG,SAAS,CAUpB;AAmDD,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,aAAa,CAAA;IACvB,eAAe,EAAE,MAAM,CAAA;IACvB,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAA;IACzB,YAAY,EAAE,MAAM,CAAA;IACpB,8DAA8D;IAC9D,MAAM,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAA;IAC1B,8CAA8C;IAC9C,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,iFAAiF;AACjF,wBAAgB,cAAc,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CA4B7D;AAkBD,mFAAmF;AACnF,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAGlF;AAED,sEAAsE;AACtE,wBAAgB,kBAAkB,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM,CAElE;AAED,qFAAqF;AACrF,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAGzD;AAED,2EAA2E;AAC3E,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,EAAE,CAc/F"}
|
package/dist/ai/catalog.js
CHANGED
|
@@ -29,6 +29,7 @@ const CURATED = {
|
|
|
29
29
|
canonicalId: 'gpt-4o-mini',
|
|
30
30
|
displayName: 'GPT-4o mini (fast)',
|
|
31
31
|
description: 'Low-cost multimodal model for high-volume tasks.',
|
|
32
|
+
defaultFor: ['text', 'vision'],
|
|
32
33
|
capabilities: {
|
|
33
34
|
text: true,
|
|
34
35
|
vision: true,
|
|
@@ -172,6 +173,7 @@ const CURATED = {
|
|
|
172
173
|
canonicalId: 'claude-sonnet-4-6',
|
|
173
174
|
displayName: 'Claude Sonnet (balanced)',
|
|
174
175
|
description: 'Balanced Claude model for everyday content and reasoning.',
|
|
176
|
+
defaultFor: ['text', 'vision'],
|
|
175
177
|
capabilities: {
|
|
176
178
|
text: true,
|
|
177
179
|
vision: true,
|
|
@@ -193,6 +195,7 @@ const CURATED = {
|
|
|
193
195
|
canonicalId: 'grok-4-fast',
|
|
194
196
|
displayName: 'Grok (fast)',
|
|
195
197
|
description: 'Low-latency Grok model for high-volume tasks.',
|
|
198
|
+
defaultFor: ['text'],
|
|
196
199
|
capabilities: {
|
|
197
200
|
text: true,
|
|
198
201
|
toolCalling: true,
|
|
@@ -211,6 +214,7 @@ const CURATED = {
|
|
|
211
214
|
canonicalId: 'grok-vision',
|
|
212
215
|
displayName: 'Grok Vision',
|
|
213
216
|
description: 'Multimodal Grok model with image understanding.',
|
|
217
|
+
defaultFor: ['vision'],
|
|
214
218
|
capabilities: {
|
|
215
219
|
text: true,
|
|
216
220
|
vision: true,
|
|
@@ -246,6 +250,24 @@ const CURATED = {
|
|
|
246
250
|
},
|
|
247
251
|
],
|
|
248
252
|
};
|
|
253
|
+
/**
|
|
254
|
+
* The model a provider should use when the operator has configured nothing
|
|
255
|
+
* (env-key bootstrap). Prefers the entry flagged `defaultFor` the requested
|
|
256
|
+
* modality; otherwise `text` picks the first curated chat model and `vision`
|
|
257
|
+
* the first curated entry with `vision: true`. Deprecated and non-fallback
|
|
258
|
+
* entries are never chosen.
|
|
259
|
+
*/
|
|
260
|
+
export function curatedDefaultModelId(provider, want) {
|
|
261
|
+
if (provider === 'custom')
|
|
262
|
+
return undefined;
|
|
263
|
+
const entries = CURATED[provider].filter((e) => !e.deprecated && e.fallback !== false);
|
|
264
|
+
const capable = (e) => want === 'vision'
|
|
265
|
+
? e.capabilities.vision === true
|
|
266
|
+
: e.capabilities.text === true && !e.capabilities.embeddings;
|
|
267
|
+
const flagged = entries.find((e) => e.defaultFor?.includes(want) && capable(e));
|
|
268
|
+
const pick = flagged ?? entries.find(capable);
|
|
269
|
+
return pick ? `${provider}:${pick.canonicalId}` : undefined;
|
|
270
|
+
}
|
|
249
271
|
/** Find the curated entry whose longest `match` prefix applies to the id. */
|
|
250
272
|
function findCurated(provider, providerModelId) {
|
|
251
273
|
if (provider === 'custom')
|
package/dist/ai/catalog.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../src/ai/catalog.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../src/ai/catalog.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,13 +12,17 @@
|
|
|
12
12
|
* providers through {@link toPublicProvider}.
|
|
13
13
|
* - When a provider's env var is set, that key wins and the UI shows it as
|
|
14
14
|
* env-managed/read-only.
|
|
15
|
+
* - A provider env var with no stored connection yields a read-time
|
|
16
|
+
* `env:<provider>` connection (zero-config bootstrap); it is never
|
|
17
|
+
* persisted and cannot be edited or deleted through the API.
|
|
15
18
|
*/
|
|
16
|
-
import type { AIBudgetSettings, AIConfigDocument,
|
|
19
|
+
import type { AIBudgetSettings, AIConfigDocument, AIProviderConnection, AIProviderConnectionPublic, AIProviderKey, AISettings } from './types.js';
|
|
17
20
|
export declare const AI_CONFIG_COLLECTION = "__ai_config__";
|
|
18
21
|
export declare const DEFAULT_AI_BUDGET: AIBudgetSettings;
|
|
19
22
|
export declare function defaultAISettings(): AISettings;
|
|
20
23
|
/** Read the env-managed key for a provider, if present and non-empty. */
|
|
21
24
|
export declare function getEnvApiKey(provider: AIProviderKey): string | null;
|
|
25
|
+
export declare function isEnvConnectionId(id: string): boolean;
|
|
22
26
|
/** Last 4 chars of a key for masked display (never the full value). */
|
|
23
27
|
export declare function last4(key: string | undefined | null): string | undefined;
|
|
24
28
|
/**
|
|
@@ -27,8 +31,6 @@ export declare function last4(key: string | undefined | null): string | undefine
|
|
|
27
31
|
* Returns null when neither exists.
|
|
28
32
|
*/
|
|
29
33
|
export declare function resolveProviderKey(conn: Pick<AIProviderConnection, 'provider' | 'apiKeyEncrypted'>): Promise<string | null>;
|
|
30
|
-
/** Determine where a connection's key comes from for UI display. */
|
|
31
|
-
export declare function resolveKeySource(conn: AIProviderConnection): AIKeySource;
|
|
32
34
|
/** Strip key material and add UI-facing source metadata. */
|
|
33
35
|
export declare function toPublicProvider(conn: AIProviderConnection): AIProviderConnectionPublic;
|
|
34
36
|
/** Encrypt a plaintext key for storage and compute its masked suffix. */
|
|
@@ -40,11 +42,23 @@ export declare function encryptProviderKey(plaintext: string): Promise<{
|
|
|
40
42
|
* Read the AI config document. Returns a fully-populated object (defaults +
|
|
41
43
|
* merged feature flags) even when no row exists yet, so callers never special-
|
|
42
44
|
* case the empty state.
|
|
45
|
+
*
|
|
46
|
+
* Fail closed: env connections are bootstrapped only when the read succeeded
|
|
47
|
+
* (a row was found, or the store genuinely has none). When the read throws —
|
|
48
|
+
* or the client has no `document` model at all — the stored governance
|
|
49
|
+
* (feature toggles, caps, budget, brand voice) is unknown, so returning
|
|
50
|
+
* default settings *plus* an env-bootstrapped provider would let a transient
|
|
51
|
+
* DB failure run governed features ungoverned. Instead the result carries no
|
|
52
|
+
* providers, and the runtime refuses with `no_model`.
|
|
43
53
|
*/
|
|
44
54
|
export declare function getAIConfig(db: unknown): Promise<AIConfigDocument>;
|
|
45
55
|
/**
|
|
46
56
|
* Upsert the AI config document. Caller is responsible for auth/role checks.
|
|
47
|
-
* Stamps `updatedAt`/`updatedBy`.
|
|
57
|
+
* Stamps `updatedAt`/`updatedBy`. Env-synthesized connections (`env:*`) are
|
|
58
|
+
* stripped before the write so the zero-config bootstrap never leaks into
|
|
59
|
+
* storage; the returned document re-applies them so it matches what
|
|
60
|
+
* {@link getAIConfig} would read back. Catalog entries keyed by a connection
|
|
61
|
+
* id that is neither stored nor env-visible are pruned in the same write.
|
|
48
62
|
*/
|
|
49
63
|
export declare function putAIConfig(db: unknown, next: AIConfigDocument, userId: string): Promise<AIConfigDocument>;
|
|
50
64
|
/** Serialize a full config doc for the client (providers masked). */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-store.d.ts","sourceRoot":"","sources":["../../src/ai/config-store.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"config-store.d.ts","sourceRoot":"","sources":["../../src/ai/config-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAIH,OAAO,KAAK,EACV,gBAAgB,EAChB,gBAAgB,EAEhB,oBAAoB,EACpB,0BAA0B,EAC1B,aAAa,EACb,UAAU,EACX,MAAM,YAAY,CAAA;AAEnB,eAAO,MAAM,oBAAoB,kBAAkB,CAAA;AAUnD,eAAO,MAAM,iBAAiB,EAAE,gBAE/B,CAAA;AAED,wBAAgB,iBAAiB,IAAI,UAAU,CAK9C;AAED,yEAAyE;AACzE,wBAAgB,YAAY,CAAC,QAAQ,EAAE,aAAa,GAAG,MAAM,GAAG,IAAI,CAKnE;AAKD,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAErD;AAmCD,uEAAuE;AACvE,wBAAgB,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,MAAM,GAAG,SAAS,CAIxE;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,IAAI,CAAC,oBAAoB,EAAE,UAAU,GAAG,iBAAiB,CAAC,GAC/D,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAWxB;AASD,4DAA4D;AAC5D,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,oBAAoB,GAAG,0BAA0B,CAcvF;AAED,yEAAyE;AACzE,wBAAsB,kBAAkB,CACtC,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC;IAAE,eAAe,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC,CAG3D;AAkCD;;;;;;;;;;;;GAYG;AACH,wBAAsB,WAAW,CAAC,EAAE,EAAE,OAAO,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA0BxE;AAiBD;;;;;;;GAOG;AACH,wBAAsB,WAAW,CAC/B,EAAE,EAAE,OAAO,EACX,IAAI,EAAE,gBAAgB,EACtB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,gBAAgB,CAAC,CA+B3B;AAED,qEAAqE;AACrE,wBAAgB,cAAc,CAAC,GAAG,EAAE,gBAAgB,GAAG;IACrD,SAAS,EAAE,0BAA0B,EAAE,CAAA;IACvC,QAAQ,EAAE,UAAU,CAAA;CACrB,CAKA"}
|
package/dist/ai/config-store.js
CHANGED
|
@@ -12,6 +12,9 @@
|
|
|
12
12
|
* providers through {@link toPublicProvider}.
|
|
13
13
|
* - When a provider's env var is set, that key wins and the UI shows it as
|
|
14
14
|
* env-managed/read-only.
|
|
15
|
+
* - A provider env var with no stored connection yields a read-time
|
|
16
|
+
* `env:<provider>` connection (zero-config bootstrap); it is never
|
|
17
|
+
* persisted and cannot be edited or deleted through the API.
|
|
15
18
|
*/
|
|
16
19
|
import { decryptSecret, encryptSecret } from '../security/secret-storage.js';
|
|
17
20
|
import { cloneFeatureDefaults, mergeFeatures } from './feature-defaults.js';
|
|
@@ -24,14 +27,12 @@ const ENV_KEY_BY_PROVIDER = {
|
|
|
24
27
|
custom: null,
|
|
25
28
|
};
|
|
26
29
|
export const DEFAULT_AI_BUDGET = {
|
|
27
|
-
alertAtPercentages: [50, 80, 100],
|
|
28
30
|
disableWhenExceeded: false,
|
|
29
31
|
};
|
|
30
32
|
export function defaultAISettings() {
|
|
31
33
|
return {
|
|
32
34
|
features: cloneFeatureDefaults(),
|
|
33
|
-
budget: { ...DEFAULT_AI_BUDGET
|
|
34
|
-
logsRetentionDays: 30,
|
|
35
|
+
budget: { ...DEFAULT_AI_BUDGET },
|
|
35
36
|
};
|
|
36
37
|
}
|
|
37
38
|
/** Read the env-managed key for a provider, if present and non-empty. */
|
|
@@ -42,6 +43,43 @@ export function getEnvApiKey(provider) {
|
|
|
42
43
|
const val = process.env[envVar];
|
|
43
44
|
return val && val.trim() ? val.trim() : null;
|
|
44
45
|
}
|
|
46
|
+
/** Id prefix for connections synthesized from a provider env var at read time. */
|
|
47
|
+
const ENV_CONNECTION_PREFIX = 'env:';
|
|
48
|
+
export function isEnvConnectionId(id) {
|
|
49
|
+
return id.startsWith(ENV_CONNECTION_PREFIX);
|
|
50
|
+
}
|
|
51
|
+
const ENV_DISPLAY_NAME = {
|
|
52
|
+
openai: 'OpenAI (environment)',
|
|
53
|
+
anthropic: 'Anthropic (environment)',
|
|
54
|
+
xai: 'xAI (environment)',
|
|
55
|
+
};
|
|
56
|
+
/**
|
|
57
|
+
* Zero-config path: a host that only set `OPENAI_API_KEY` (or Anthropic / xAI)
|
|
58
|
+
* gets an enabled, env-managed connection without visiting Settings > AI.
|
|
59
|
+
* Synthesized at read time only — {@link putAIConfig} strips these so they are
|
|
60
|
+
* never persisted, and a stored connection for the same provider suppresses
|
|
61
|
+
* the synthetic one.
|
|
62
|
+
*/
|
|
63
|
+
function withEnvConnections(stored) {
|
|
64
|
+
const present = new Set(stored.map((p) => p.provider));
|
|
65
|
+
const out = [...stored];
|
|
66
|
+
for (const provider of ['openai', 'anthropic', 'xai']) {
|
|
67
|
+
if (present.has(provider) || !getEnvApiKey(provider))
|
|
68
|
+
continue;
|
|
69
|
+
const now = '1970-01-01T00:00:00.000Z';
|
|
70
|
+
out.push({
|
|
71
|
+
id: `${ENV_CONNECTION_PREFIX}${provider}`,
|
|
72
|
+
provider,
|
|
73
|
+
displayName: ENV_DISPLAY_NAME[provider],
|
|
74
|
+
enabled: true,
|
|
75
|
+
status: 'unknown',
|
|
76
|
+
createdAt: now,
|
|
77
|
+
updatedAt: now,
|
|
78
|
+
updatedBy: 'system',
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
return out;
|
|
82
|
+
}
|
|
45
83
|
/** Last 4 chars of a key for masked display (never the full value). */
|
|
46
84
|
export function last4(key) {
|
|
47
85
|
if (!key)
|
|
@@ -69,7 +107,7 @@ export async function resolveProviderKey(conn) {
|
|
|
69
107
|
return null;
|
|
70
108
|
}
|
|
71
109
|
/** Determine where a connection's key comes from for UI display. */
|
|
72
|
-
|
|
110
|
+
function resolveKeySource(conn) {
|
|
73
111
|
if (getEnvApiKey(conn.provider))
|
|
74
112
|
return 'environment';
|
|
75
113
|
if (conn.apiKeyEncrypted)
|
|
@@ -97,51 +135,108 @@ export async function encryptProviderKey(plaintext) {
|
|
|
97
135
|
const apiKeyEncrypted = await encryptSecret(plaintext);
|
|
98
136
|
return { apiKeyEncrypted, apiKeyLast4: last4(plaintext) ?? '' };
|
|
99
137
|
}
|
|
138
|
+
/**
|
|
139
|
+
* Hydrate `settings` field by field from the stored partial. Explicit on
|
|
140
|
+
* purpose: a stored document that predates Spec B may still carry removed keys
|
|
141
|
+
* (`logsRetentionDays`, `defaultEmbeddingModelId`, `budget.alertAtPercentages`,
|
|
142
|
+
* …); spreading it would leak them back into the runtime object.
|
|
143
|
+
*/
|
|
144
|
+
function hydrateSettings(stored) {
|
|
145
|
+
const budget = (stored.budget ?? {});
|
|
146
|
+
const settings = {
|
|
147
|
+
features: mergeFeatures(stored.features),
|
|
148
|
+
budget: {
|
|
149
|
+
...DEFAULT_AI_BUDGET,
|
|
150
|
+
...(typeof budget.monthlyTokenLimit === 'number'
|
|
151
|
+
? { monthlyTokenLimit: budget.monthlyTokenLimit }
|
|
152
|
+
: {}),
|
|
153
|
+
disableWhenExceeded: budget.disableWhenExceeded ?? DEFAULT_AI_BUDGET.disableWhenExceeded,
|
|
154
|
+
},
|
|
155
|
+
};
|
|
156
|
+
if (stored.defaultProviderId !== undefined)
|
|
157
|
+
settings.defaultProviderId = stored.defaultProviderId;
|
|
158
|
+
if (stored.defaultModelId !== undefined)
|
|
159
|
+
settings.defaultModelId = stored.defaultModelId;
|
|
160
|
+
if (stored.defaultTextModelId !== undefined)
|
|
161
|
+
settings.defaultTextModelId = stored.defaultTextModelId;
|
|
162
|
+
if (stored.defaultReasoningModelId !== undefined)
|
|
163
|
+
settings.defaultReasoningModelId = stored.defaultReasoningModelId;
|
|
164
|
+
if (stored.defaultVisionModelId !== undefined)
|
|
165
|
+
settings.defaultVisionModelId = stored.defaultVisionModelId;
|
|
166
|
+
if (stored.defaultImageGenerationModelId !== undefined)
|
|
167
|
+
settings.defaultImageGenerationModelId = stored.defaultImageGenerationModelId;
|
|
168
|
+
if (stored.brandVoice !== undefined)
|
|
169
|
+
settings.brandVoice = stored.brandVoice;
|
|
170
|
+
return settings;
|
|
171
|
+
}
|
|
100
172
|
/**
|
|
101
173
|
* Read the AI config document. Returns a fully-populated object (defaults +
|
|
102
174
|
* merged feature flags) even when no row exists yet, so callers never special-
|
|
103
175
|
* case the empty state.
|
|
176
|
+
*
|
|
177
|
+
* Fail closed: env connections are bootstrapped only when the read succeeded
|
|
178
|
+
* (a row was found, or the store genuinely has none). When the read throws —
|
|
179
|
+
* or the client has no `document` model at all — the stored governance
|
|
180
|
+
* (feature toggles, caps, budget, brand voice) is unknown, so returning
|
|
181
|
+
* default settings *plus* an env-bootstrapped provider would let a transient
|
|
182
|
+
* DB failure run governed features ungoverned. Instead the result carries no
|
|
183
|
+
* providers, and the runtime refuses with `no_model`.
|
|
104
184
|
*/
|
|
105
185
|
export async function getAIConfig(db) {
|
|
106
186
|
const d = db;
|
|
107
|
-
const
|
|
187
|
+
const closed = () => ({ providers: [], settings: defaultAISettings() });
|
|
108
188
|
if (!d?.document?.findFirst)
|
|
109
|
-
return
|
|
189
|
+
return closed();
|
|
110
190
|
try {
|
|
111
191
|
const doc = await d.document.findFirst({
|
|
112
192
|
where: { collection: AI_CONFIG_COLLECTION, deletedAt: null },
|
|
113
193
|
select: { data: true },
|
|
114
194
|
});
|
|
115
|
-
if (!doc?.data || typeof doc.data !== 'object')
|
|
116
|
-
|
|
195
|
+
if (!doc?.data || typeof doc.data !== 'object') {
|
|
196
|
+
// Read succeeded and no config row exists yet: zero-config bootstrap.
|
|
197
|
+
return { providers: withEnvConnections([]), settings: defaultAISettings() };
|
|
198
|
+
}
|
|
117
199
|
const data = doc.data;
|
|
118
|
-
const settings = (data.settings ?? {});
|
|
119
200
|
return {
|
|
120
|
-
providers: Array.isArray(data.providers) ? data.providers : [],
|
|
121
|
-
settings: {
|
|
122
|
-
...defaultAISettings(),
|
|
123
|
-
...settings,
|
|
124
|
-
features: mergeFeatures(settings.features),
|
|
125
|
-
budget: { ...DEFAULT_AI_BUDGET, ...(settings.budget ?? {}) },
|
|
126
|
-
logsRetentionDays: settings.logsRetentionDays ?? 30,
|
|
127
|
-
},
|
|
201
|
+
providers: withEnvConnections(Array.isArray(data.providers) ? data.providers : []),
|
|
202
|
+
settings: hydrateSettings((data.settings ?? {})),
|
|
128
203
|
catalog: data.catalog,
|
|
129
204
|
updatedAt: data.updatedAt,
|
|
130
205
|
updatedBy: data.updatedBy,
|
|
131
206
|
};
|
|
132
207
|
}
|
|
133
208
|
catch {
|
|
134
|
-
return
|
|
209
|
+
return closed();
|
|
135
210
|
}
|
|
136
211
|
}
|
|
212
|
+
/**
|
|
213
|
+
* Drop catalog entries for connections that are no longer visible. `visible`
|
|
214
|
+
* is what {@link getAIConfig} would return for the persisted providers — so
|
|
215
|
+
* `catalog['env:openai']` survives while the env row is the only OpenAI
|
|
216
|
+
* connection and is pruned once a stored OpenAI connection suppresses it.
|
|
217
|
+
*/
|
|
218
|
+
function pruneCatalog(catalog, visible) {
|
|
219
|
+
if (!catalog)
|
|
220
|
+
return catalog;
|
|
221
|
+
const ids = new Set(visible.map((p) => p.id));
|
|
222
|
+
return Object.fromEntries(Object.entries(catalog).filter(([id]) => ids.has(id)));
|
|
223
|
+
}
|
|
137
224
|
/**
|
|
138
225
|
* Upsert the AI config document. Caller is responsible for auth/role checks.
|
|
139
|
-
* Stamps `updatedAt`/`updatedBy`.
|
|
226
|
+
* Stamps `updatedAt`/`updatedBy`. Env-synthesized connections (`env:*`) are
|
|
227
|
+
* stripped before the write so the zero-config bootstrap never leaks into
|
|
228
|
+
* storage; the returned document re-applies them so it matches what
|
|
229
|
+
* {@link getAIConfig} would read back. Catalog entries keyed by a connection
|
|
230
|
+
* id that is neither stored nor env-visible are pruned in the same write.
|
|
140
231
|
*/
|
|
141
232
|
export async function putAIConfig(db, next, userId) {
|
|
142
233
|
const d = db;
|
|
234
|
+
const providers = next.providers.filter((p) => !isEnvConnectionId(p.id));
|
|
235
|
+
const visible = withEnvConnections(providers);
|
|
143
236
|
const data = {
|
|
144
237
|
...next,
|
|
238
|
+
providers,
|
|
239
|
+
catalog: pruneCatalog(next.catalog, visible),
|
|
145
240
|
updatedAt: new Date().toISOString(),
|
|
146
241
|
updatedBy: userId,
|
|
147
242
|
};
|
|
@@ -165,7 +260,7 @@ export async function putAIConfig(db, next, userId) {
|
|
|
165
260
|
},
|
|
166
261
|
});
|
|
167
262
|
}
|
|
168
|
-
return data;
|
|
263
|
+
return { ...data, providers: visible };
|
|
169
264
|
}
|
|
170
265
|
/** Serialize a full config doc for the client (providers masked). */
|
|
171
266
|
export function toPublicConfig(doc) {
|