@prenta/core 5.10.0 → 7.0.0

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