@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.
Files changed (441) hide show
  1. package/CHANGELOG.md +39 -0
  2. package/dist/ai/brand-voice-analyze.d.ts +1 -4
  3. package/dist/ai/brand-voice-analyze.d.ts.map +1 -1
  4. package/dist/ai/brand-voice-analyze.js +1 -2
  5. package/dist/ai/brand-voice-analyze.js.map +1 -1
  6. package/dist/ai/brand-voice-sources.d.ts +0 -2
  7. package/dist/ai/brand-voice-sources.d.ts.map +1 -1
  8. package/dist/ai/brand-voice-sources.js +2 -2
  9. package/dist/ai/brand-voice-sources.js.map +1 -1
  10. package/dist/ai/brand-voice-structured.d.ts +6 -6
  11. package/dist/ai/brand-voice-structured.d.ts.map +1 -1
  12. package/dist/ai/catalog.d.ts +8 -0
  13. package/dist/ai/catalog.d.ts.map +1 -1
  14. package/dist/ai/catalog.js +22 -0
  15. package/dist/ai/catalog.js.map +1 -1
  16. package/dist/ai/config-store.d.ts +18 -4
  17. package/dist/ai/config-store.d.ts.map +1 -1
  18. package/dist/ai/config-store.js +115 -20
  19. package/dist/ai/config-store.js.map +1 -1
  20. package/dist/ai/content-writing-generate.d.ts +10 -8
  21. package/dist/ai/content-writing-generate.d.ts.map +1 -1
  22. package/dist/ai/content-writing-generate.js +24 -56
  23. package/dist/ai/content-writing-generate.js.map +1 -1
  24. package/dist/ai/embeddings.d.ts +28 -0
  25. package/dist/ai/embeddings.d.ts.map +1 -0
  26. package/dist/ai/embeddings.js +36 -0
  27. package/dist/ai/embeddings.js.map +1 -0
  28. package/dist/ai/feature-defaults.d.ts +3 -3
  29. package/dist/ai/feature-defaults.d.ts.map +1 -1
  30. package/dist/ai/feature-defaults.js +24 -14
  31. package/dist/ai/feature-defaults.js.map +1 -1
  32. package/dist/ai/index.d.ts +15 -16
  33. package/dist/ai/index.d.ts.map +1 -1
  34. package/dist/ai/index.js +14 -15
  35. package/dist/ai/index.js.map +1 -1
  36. package/dist/ai/models.d.ts +7 -3
  37. package/dist/ai/models.d.ts.map +1 -1
  38. package/dist/ai/models.js +10 -5
  39. package/dist/ai/models.js.map +1 -1
  40. package/dist/ai/plugin-errors.d.ts +9 -3
  41. package/dist/ai/plugin-errors.d.ts.map +1 -1
  42. package/dist/ai/plugin-errors.js +9 -3
  43. package/dist/ai/plugin-errors.js.map +1 -1
  44. package/dist/ai/plugin-import.d.ts +9 -1
  45. package/dist/ai/plugin-import.d.ts.map +1 -1
  46. package/dist/ai/plugin-import.js +9 -1
  47. package/dist/ai/plugin-import.js.map +1 -1
  48. package/dist/ai/prompt-safety.d.ts +23 -0
  49. package/dist/ai/prompt-safety.d.ts.map +1 -0
  50. package/dist/ai/prompt-safety.js +34 -0
  51. package/dist/ai/prompt-safety.js.map +1 -0
  52. package/dist/ai/providers/anthropic.d.ts.map +1 -1
  53. package/dist/ai/providers/anthropic.js +16 -1
  54. package/dist/ai/providers/anthropic.js.map +1 -1
  55. package/dist/ai/providers/http.d.ts +7 -2
  56. package/dist/ai/providers/http.d.ts.map +1 -1
  57. package/dist/ai/providers/http.js +13 -2
  58. package/dist/ai/providers/http.js.map +1 -1
  59. package/dist/ai/providers/index.d.ts +0 -7
  60. package/dist/ai/providers/index.d.ts.map +1 -1
  61. package/dist/ai/providers/index.js +1 -1
  62. package/dist/ai/providers/index.js.map +1 -1
  63. package/dist/ai/resolve.d.ts +7 -1
  64. package/dist/ai/resolve.d.ts.map +1 -1
  65. package/dist/ai/resolve.js +36 -3
  66. package/dist/ai/resolve.js.map +1 -1
  67. package/dist/ai/runtime-response.d.ts +27 -0
  68. package/dist/ai/runtime-response.d.ts.map +1 -0
  69. package/dist/ai/runtime-response.js +75 -0
  70. package/dist/ai/runtime-response.js.map +1 -0
  71. package/dist/ai/runtime.d.ts +9 -7
  72. package/dist/ai/runtime.d.ts.map +1 -1
  73. package/dist/ai/runtime.js +14 -19
  74. package/dist/ai/runtime.js.map +1 -1
  75. package/dist/ai/tasks/alt-text.d.ts +82 -0
  76. package/dist/ai/tasks/alt-text.d.ts.map +1 -0
  77. package/dist/ai/tasks/alt-text.js +171 -0
  78. package/dist/ai/tasks/alt-text.js.map +1 -0
  79. package/dist/ai/tasks/document-generation.d.ts +102 -0
  80. package/dist/ai/tasks/document-generation.d.ts.map +1 -0
  81. package/dist/ai/tasks/document-generation.js +321 -0
  82. package/dist/ai/tasks/document-generation.js.map +1 -0
  83. package/dist/ai/tasks/link-embeddings.d.ts +55 -0
  84. package/dist/ai/tasks/link-embeddings.d.ts.map +1 -0
  85. package/dist/ai/tasks/link-embeddings.js +160 -0
  86. package/dist/ai/tasks/link-embeddings.js.map +1 -0
  87. package/dist/ai/types.d.ts +15 -19
  88. package/dist/ai/types.d.ts.map +1 -1
  89. package/dist/ai/types.js +6 -7
  90. package/dist/ai/types.js.map +1 -1
  91. package/dist/ai/usage.d.ts +6 -4
  92. package/dist/ai/usage.d.ts.map +1 -1
  93. package/dist/ai/usage.js +6 -4
  94. package/dist/ai/usage.js.map +1 -1
  95. package/dist/ai/vector.d.ts +8 -0
  96. package/dist/ai/vector.d.ts.map +1 -0
  97. package/dist/ai/vector.js +24 -0
  98. package/dist/ai/vector.js.map +1 -0
  99. package/dist/api/responses.d.ts +1 -1
  100. package/dist/api/responses.d.ts.map +1 -1
  101. package/dist/api/responses.js +1 -1
  102. package/dist/api/responses.js.map +1 -1
  103. package/dist/api/route-helpers.d.ts +2 -19
  104. package/dist/api/route-helpers.d.ts.map +1 -1
  105. package/dist/api/route-helpers.js +11 -22
  106. package/dist/api/route-helpers.js.map +1 -1
  107. package/dist/api/routes/ai-authoring.d.ts.map +1 -1
  108. package/dist/api/routes/ai-authoring.js +132 -144
  109. package/dist/api/routes/ai-authoring.js.map +1 -1
  110. package/dist/api/routes/ai-seo.d.ts.map +1 -1
  111. package/dist/api/routes/ai-seo.js +44 -120
  112. package/dist/api/routes/ai-seo.js.map +1 -1
  113. package/dist/api/routes/ai-settings.d.ts.map +1 -1
  114. package/dist/api/routes/ai-settings.js +76 -28
  115. package/dist/api/routes/ai-settings.js.map +1 -1
  116. package/dist/api/routes/security-center.d.ts.map +1 -1
  117. package/dist/api/routes/security-center.js +5 -39
  118. package/dist/api/routes/security-center.js.map +1 -1
  119. package/dist/api/routes/seo-public.d.ts +7 -5
  120. package/dist/api/routes/seo-public.d.ts.map +1 -1
  121. package/dist/api/routes/seo-public.js +16 -1
  122. package/dist/api/routes/seo-public.js.map +1 -1
  123. package/dist/api/routes/seo.d.ts.map +1 -1
  124. package/dist/api/routes/seo.js +11 -10
  125. package/dist/api/routes/seo.js.map +1 -1
  126. package/dist/api/routes/url-resolution.d.ts.map +1 -1
  127. package/dist/api/routes/url-resolution.js +2 -1
  128. package/dist/api/routes/url-resolution.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/collections/presets.d.ts +21 -3
  158. package/dist/collections/presets.d.ts.map +1 -1
  159. package/dist/collections/presets.js +64 -12
  160. package/dist/collections/presets.js.map +1 -1
  161. package/dist/config/types.d.ts +26 -19
  162. package/dist/config/types.d.ts.map +1 -1
  163. package/dist/content/index.d.ts +2 -3
  164. package/dist/content/index.d.ts.map +1 -1
  165. package/dist/content/index.js +1 -2
  166. package/dist/content/index.js.map +1 -1
  167. package/dist/content/structured-data.d.ts +0 -14
  168. package/dist/content/structured-data.d.ts.map +1 -1
  169. package/dist/content/structured-data.js +3 -14
  170. package/dist/content/structured-data.js.map +1 -1
  171. package/dist/cron/index.d.ts +2 -3
  172. package/dist/cron/index.d.ts.map +1 -1
  173. package/dist/cron/index.js +0 -2
  174. package/dist/cron/index.js.map +1 -1
  175. package/dist/db/client-types.d.ts +2 -1
  176. package/dist/db/client-types.d.ts.map +1 -1
  177. package/dist/db.d.ts +0 -2
  178. package/dist/db.d.ts.map +1 -1
  179. package/dist/db.js +0 -1
  180. package/dist/db.js.map +1 -1
  181. package/dist/diagnostics/env.d.ts +1 -1
  182. package/dist/diagnostics/env.d.ts.map +1 -1
  183. package/dist/diagnostics/logger.d.ts +0 -24
  184. package/dist/diagnostics/logger.d.ts.map +1 -1
  185. package/dist/fields/presets.d.ts +7 -0
  186. package/dist/fields/presets.d.ts.map +1 -1
  187. package/dist/fields/presets.js +17 -0
  188. package/dist/fields/presets.js.map +1 -1
  189. package/dist/forms/entries.d.ts +0 -7
  190. package/dist/forms/entries.d.ts.map +1 -1
  191. package/dist/forms/entries.js +1 -19
  192. package/dist/forms/entries.js.map +1 -1
  193. package/dist/forms/files.d.ts +1 -1
  194. package/dist/forms/files.d.ts.map +1 -1
  195. package/dist/forms/index.d.ts +4 -6
  196. package/dist/forms/index.d.ts.map +1 -1
  197. package/dist/forms/index.js +3 -5
  198. package/dist/forms/index.js.map +1 -1
  199. package/dist/forms/prefetch.d.ts +0 -6
  200. package/dist/forms/prefetch.d.ts.map +1 -1
  201. package/dist/forms/service.d.ts +0 -4
  202. package/dist/forms/service.d.ts.map +1 -1
  203. package/dist/forms/service.js +2 -8
  204. package/dist/forms/service.js.map +1 -1
  205. package/dist/forms/webmcp.d.ts +0 -2
  206. package/dist/forms/webmcp.d.ts.map +1 -1
  207. package/dist/forms/webmcp.js +1 -1
  208. package/dist/forms/webmcp.js.map +1 -1
  209. package/dist/media/denormalize.d.ts +0 -7
  210. package/dist/media/denormalize.d.ts.map +1 -1
  211. package/dist/media/index.d.ts +0 -8
  212. package/dist/media/index.d.ts.map +1 -1
  213. package/dist/media/index.js +0 -5
  214. package/dist/media/index.js.map +1 -1
  215. package/dist/media/optimize.d.ts +0 -4
  216. package/dist/media/optimize.d.ts.map +1 -1
  217. package/dist/media/optimize.js +4 -4
  218. package/dist/media/optimize.js.map +1 -1
  219. package/dist/media/reoptimize.d.ts +2 -3
  220. package/dist/media/reoptimize.d.ts.map +1 -1
  221. package/dist/media/reoptimize.js +2 -2
  222. package/dist/media/reoptimize.js.map +1 -1
  223. package/dist/media/seo.d.ts +3 -8
  224. package/dist/media/seo.d.ts.map +1 -1
  225. package/dist/media/seo.js +1 -1
  226. package/dist/media/seo.js.map +1 -1
  227. package/dist/plan/features.d.ts +0 -1
  228. package/dist/plan/features.d.ts.map +1 -1
  229. package/dist/plan/features.js +0 -16
  230. package/dist/plan/features.js.map +1 -1
  231. package/dist/preview/event-bus.d.ts +2 -1
  232. package/dist/preview/event-bus.d.ts.map +1 -1
  233. package/dist/preview/index.d.ts +2 -1
  234. package/dist/preview/index.d.ts.map +1 -1
  235. package/dist/preview/sse-stream.d.ts +0 -13
  236. package/dist/preview/sse-stream.d.ts.map +1 -1
  237. package/dist/preview/sse-stream.js +2 -2
  238. package/dist/preview/sse-stream.js.map +1 -1
  239. package/dist/realtime/notifications.d.ts +4 -3
  240. package/dist/realtime/notifications.d.ts.map +1 -1
  241. package/dist/redirects/index.d.ts +4 -16
  242. package/dist/redirects/index.d.ts.map +1 -1
  243. package/dist/redirects/index.js +2 -9
  244. package/dist/redirects/index.js.map +1 -1
  245. package/dist/redirects/match.d.ts +0 -2
  246. package/dist/redirects/match.d.ts.map +1 -1
  247. package/dist/redirects/match.js +1 -1
  248. package/dist/redirects/match.js.map +1 -1
  249. package/dist/redirects/recovery.d.ts +0 -2
  250. package/dist/redirects/recovery.d.ts.map +1 -1
  251. package/dist/redirects/recovery.js +1 -1
  252. package/dist/redirects/recovery.js.map +1 -1
  253. package/dist/redirects/rerank.d.ts +4 -3
  254. package/dist/redirects/rerank.d.ts.map +1 -1
  255. package/dist/redirects/rerank.js +3 -18
  256. package/dist/redirects/rerank.js.map +1 -1
  257. package/dist/sections/validate.d.ts +0 -2
  258. package/dist/sections/validate.d.ts.map +1 -1
  259. package/dist/sections/validate.js +1 -1
  260. package/dist/sections/validate.js.map +1 -1
  261. package/dist/security/access.d.ts +0 -9
  262. package/dist/security/access.d.ts.map +1 -1
  263. package/dist/security/access.js +1 -1
  264. package/dist/security/access.js.map +1 -1
  265. package/dist/security/audit.d.ts +0 -20
  266. package/dist/security/audit.d.ts.map +1 -1
  267. package/dist/security/audit.js.map +1 -1
  268. package/dist/security/index.d.ts +2 -20
  269. package/dist/security/index.d.ts.map +1 -1
  270. package/dist/security/index.js +2 -7
  271. package/dist/security/index.js.map +1 -1
  272. package/dist/security/internal-keys.d.ts +0 -10
  273. package/dist/security/internal-keys.d.ts.map +1 -1
  274. package/dist/security/internal-keys.js +2 -2
  275. package/dist/security/internal-keys.js.map +1 -1
  276. package/dist/security/rate-limit-policy.d.ts +0 -2
  277. package/dist/security/rate-limit-policy.d.ts.map +1 -1
  278. package/dist/security/rate-limit-policy.js +1 -1
  279. package/dist/security/rate-limit-policy.js.map +1 -1
  280. package/dist/security/rate-limit.d.ts +2 -5
  281. package/dist/security/rate-limit.d.ts.map +1 -1
  282. package/dist/security/rate-limit.js +2 -2
  283. package/dist/security/rate-limit.js.map +1 -1
  284. package/dist/security/sanitize.d.ts +0 -3
  285. package/dist/security/sanitize.d.ts.map +1 -1
  286. package/dist/security/sanitize.js +0 -1
  287. package/dist/security/sanitize.js.map +1 -1
  288. package/dist/security/upload.d.ts +0 -3
  289. package/dist/security/upload.d.ts.map +1 -1
  290. package/dist/security/upload.js +0 -1
  291. package/dist/security/upload.js.map +1 -1
  292. package/dist/seo/ai-crawler-log.d.ts +0 -2
  293. package/dist/seo/ai-crawler-log.d.ts.map +1 -1
  294. package/dist/seo/ai-crawler-log.js +1 -1
  295. package/dist/seo/ai-crawler-log.js.map +1 -1
  296. package/dist/seo/audit-engine.d.ts +5 -5
  297. package/dist/seo/audit-engine.d.ts.map +1 -1
  298. package/dist/seo/audit-engine.js +1 -2
  299. package/dist/seo/audit-engine.js.map +1 -1
  300. package/dist/seo/audit-runner.d.ts +0 -7
  301. package/dist/seo/audit-runner.d.ts.map +1 -1
  302. package/dist/seo/audit-runner.js +1 -1
  303. package/dist/seo/audit-runner.js.map +1 -1
  304. package/dist/seo/audit-signals.d.ts +0 -2
  305. package/dist/seo/audit-signals.d.ts.map +1 -1
  306. package/dist/seo/audit-signals.js +1 -1
  307. package/dist/seo/audit-signals.js.map +1 -1
  308. package/dist/seo/autopilot-gate.d.ts +0 -1
  309. package/dist/seo/autopilot-gate.d.ts.map +1 -1
  310. package/dist/seo/autopilot-gate.js +1 -1
  311. package/dist/seo/autopilot-gate.js.map +1 -1
  312. package/dist/seo/autopilot-ledger.d.ts +2 -1
  313. package/dist/seo/autopilot-ledger.d.ts.map +1 -1
  314. package/dist/seo/autopilot-outcome.d.ts +0 -2
  315. package/dist/seo/autopilot-outcome.d.ts.map +1 -1
  316. package/dist/seo/autopilot-outcome.js +1 -1
  317. package/dist/seo/autopilot-outcome.js.map +1 -1
  318. package/dist/seo/autopilot-policy.d.ts +3 -38
  319. package/dist/seo/autopilot-policy.d.ts.map +1 -1
  320. package/dist/seo/autopilot-policy.js +3 -3
  321. package/dist/seo/autopilot-policy.js.map +1 -1
  322. package/dist/seo/autopilot.d.ts +4 -12
  323. package/dist/seo/autopilot.d.ts.map +1 -1
  324. package/dist/seo/autopilot.js +3 -3
  325. package/dist/seo/autopilot.js.map +1 -1
  326. package/dist/seo/config-store.d.ts +0 -2
  327. package/dist/seo/config-store.d.ts.map +1 -1
  328. package/dist/seo/config-store.js +1 -1
  329. package/dist/seo/config-store.js.map +1 -1
  330. package/dist/seo/digest.d.ts +8 -7
  331. package/dist/seo/digest.d.ts.map +1 -1
  332. package/dist/seo/faq-signals.d.ts +0 -4
  333. package/dist/seo/faq-signals.d.ts.map +1 -1
  334. package/dist/seo/faq-signals.js +4 -4
  335. package/dist/seo/faq-signals.js.map +1 -1
  336. package/dist/seo/fix-brief-export.d.ts +0 -2
  337. package/dist/seo/fix-brief-export.d.ts.map +1 -1
  338. package/dist/seo/fix-brief-export.js +1 -1
  339. package/dist/seo/fix-brief-export.js.map +1 -1
  340. package/dist/seo/geo-record.d.ts +0 -4
  341. package/dist/seo/geo-record.d.ts.map +1 -1
  342. package/dist/seo/geo-record.js +2 -2
  343. package/dist/seo/geo-record.js.map +1 -1
  344. package/dist/seo/geo-report.d.ts +4 -3
  345. package/dist/seo/geo-report.d.ts.map +1 -1
  346. package/dist/seo/geo-report.js +1 -1
  347. package/dist/seo/geo-report.js.map +1 -1
  348. package/dist/seo/index-status.d.ts +6 -5
  349. package/dist/seo/index-status.d.ts.map +1 -1
  350. package/dist/seo/index-status.js.map +1 -1
  351. package/dist/seo/index.d.ts +15 -90
  352. package/dist/seo/index.d.ts.map +1 -1
  353. package/dist/seo/index.js +10 -49
  354. package/dist/seo/index.js.map +1 -1
  355. package/dist/seo/issue-batch-briefs.d.ts +2 -3
  356. package/dist/seo/issue-batch-briefs.d.ts.map +1 -1
  357. package/dist/seo/issue-batch-briefs.js +2 -2
  358. package/dist/seo/issue-batch-briefs.js.map +1 -1
  359. package/dist/seo/issue-content-brief.d.ts +2 -1
  360. package/dist/seo/issue-content-brief.d.ts.map +1 -1
  361. package/dist/seo/issue-content-research.d.ts +2 -2
  362. package/dist/seo/issue-content-research.d.ts.map +1 -1
  363. package/dist/seo/issue-content-research.js +1 -1
  364. package/dist/seo/issue-content-research.js.map +1 -1
  365. package/dist/seo/issue-fix-ai.d.ts +5 -4
  366. package/dist/seo/issue-fix-ai.d.ts.map +1 -1
  367. package/dist/seo/issue-fix-ai.js +4 -19
  368. package/dist/seo/issue-fix-ai.js.map +1 -1
  369. package/dist/seo/issue-fix-apply.d.ts +2 -11
  370. package/dist/seo/issue-fix-apply.d.ts.map +1 -1
  371. package/dist/seo/issue-fix-apply.js +4 -4
  372. package/dist/seo/issue-fix-apply.js.map +1 -1
  373. package/dist/seo/issue-fix-faq.d.ts +4 -7
  374. package/dist/seo/issue-fix-faq.d.ts.map +1 -1
  375. package/dist/seo/issue-fix-faq.js +4 -4
  376. package/dist/seo/issue-fix-faq.js.map +1 -1
  377. package/dist/seo/issue-fix-link-insert.d.ts +4 -14
  378. package/dist/seo/issue-fix-link-insert.d.ts.map +1 -1
  379. package/dist/seo/issue-fix-link-insert.js +5 -4
  380. package/dist/seo/issue-fix-link-insert.js.map +1 -1
  381. package/dist/seo/issue-fix-redirect.d.ts +0 -1
  382. package/dist/seo/issue-fix-redirect.d.ts.map +1 -1
  383. package/dist/seo/issue-fix.d.ts.map +1 -1
  384. package/dist/seo/issue-fix.js +1 -0
  385. package/dist/seo/issue-fix.js.map +1 -1
  386. package/dist/seo/link-graph.d.ts +2 -3
  387. package/dist/seo/link-graph.d.ts.map +1 -1
  388. package/dist/seo/link-graph.js +0 -0
  389. package/dist/seo/link-graph.js.map +1 -1
  390. package/dist/seo/link-suggest.d.ts +8 -2
  391. package/dist/seo/link-suggest.d.ts.map +1 -1
  392. package/dist/seo/link-suggest.js +38 -50
  393. package/dist/seo/link-suggest.js.map +1 -1
  394. package/dist/seo/page-meta.d.ts +15 -10
  395. package/dist/seo/page-meta.d.ts.map +1 -1
  396. package/dist/seo/page-meta.js +31 -9
  397. package/dist/seo/page-meta.js.map +1 -1
  398. package/dist/seo/proposals-bulk-apply.d.ts +3 -2
  399. package/dist/seo/proposals-bulk-apply.d.ts.map +1 -1
  400. package/dist/seo/proposals.d.ts +2 -2
  401. package/dist/seo/proposals.d.ts.map +1 -1
  402. package/dist/seo/rendered-fetch.d.ts +2 -1
  403. package/dist/seo/rendered-fetch.d.ts.map +1 -1
  404. package/dist/seo/score.d.ts +3 -7
  405. package/dist/seo/score.d.ts.map +1 -1
  406. package/dist/seo/score.js.map +1 -1
  407. package/dist/seo/search-console/client.d.ts +0 -4
  408. package/dist/seo/search-console/client.d.ts.map +1 -1
  409. package/dist/seo/search-console/client.js +2 -2
  410. package/dist/seo/search-console/client.js.map +1 -1
  411. package/dist/seo/search-console/sync.d.ts +0 -4
  412. package/dist/seo/search-console/sync.d.ts.map +1 -1
  413. package/dist/seo/search-console/sync.js +2 -2
  414. package/dist/seo/search-console/sync.js.map +1 -1
  415. package/dist/seo/search-console/types.d.ts +2 -1
  416. package/dist/seo/search-console/types.d.ts.map +1 -1
  417. package/dist/seo/sitemap-notify.d.ts +0 -8
  418. package/dist/seo/sitemap-notify.d.ts.map +1 -1
  419. package/dist/seo/sitemap-notify.js +1 -1
  420. package/dist/seo/sitemap-notify.js.map +1 -1
  421. package/dist/seo/title-templates.d.ts +2 -5
  422. package/dist/seo/title-templates.d.ts.map +1 -1
  423. package/dist/seo/title-templates.js +2 -2
  424. package/dist/seo/title-templates.js.map +1 -1
  425. package/dist/server-site.d.ts +0 -1
  426. package/dist/server-site.d.ts.map +1 -1
  427. package/dist/server-site.js +0 -1
  428. package/dist/server-site.js.map +1 -1
  429. package/dist/storage/index.d.ts +0 -2
  430. package/dist/storage/index.d.ts.map +1 -1
  431. package/dist/storage/index.js +0 -4
  432. package/dist/storage/index.js.map +1 -1
  433. package/dist/upgrade/version-check.d.ts +0 -2
  434. package/dist/upgrade/version-check.d.ts.map +1 -1
  435. package/dist/upgrade/version-check.js +1 -1
  436. package/dist/upgrade/version-check.js.map +1 -1
  437. package/dist/webhooks/index.d.ts +0 -8
  438. package/dist/webhooks/index.d.ts.map +1 -1
  439. package/dist/webhooks/index.js +1 -16
  440. package/dist/webhooks/index.js.map +1 -1
  441. package/package.json +1 -1
@@ -16,15 +16,18 @@
16
16
  */
17
17
  import type { ZodType } from 'zod';
18
18
  import { stripJsonFences } from './brand-voice-analyze.js';
19
- import type { AIProviderKey } from './types.js';
19
+ import { type ImageInput } from './providers/http.js';
20
+ import type { AIModelCapabilities, AIProviderKey } from './types.js';
20
21
  /** Re-exported so JSON callers get the fence stripper from the same module as the helper. */
21
22
  export { stripJsonFences };
22
23
  /**
23
24
  * Why a feature could not run. Distinct codes let callers map to HTTP status.
24
25
  * `invalid_output` is specific to {@link generateJsonForFeature}: the model
25
26
  * answered, but the reply never matched the requested schema.
27
+ * `unsupported_input` means the request carried images but the resolved model
28
+ * is catalogued without the `vision` capability — no provider call was made.
26
29
  */
27
- export type RuntimeErrorCode = 'feature_disabled' | 'no_provider' | 'no_model' | 'no_key' | 'budget_exceeded' | 'rate_limited' | 'provider_error' | 'invalid_output';
30
+ export type RuntimeErrorCode = 'feature_disabled' | 'no_provider' | 'no_model' | 'no_key' | 'budget_exceeded' | 'rate_limited' | 'provider_error' | 'invalid_output' | 'unsupported_input';
28
31
  export interface RuntimeError {
29
32
  ok: false;
30
33
  code: RuntimeErrorCode;
@@ -44,12 +47,9 @@ export interface ResolvedFeatureRuntime {
44
47
  providerModelId: string;
45
48
  /** When true, omit temperature / top_p / top_k on the provider request. */
46
49
  disallowsSampling: boolean;
50
+ /** Catalog capabilities of the resolved model; undefined when uncatalogued. */
51
+ capabilities?: AIModelCapabilities;
47
52
  }
48
- /**
49
- * Is a configured AI feature turned on? Unknown keys default to enabled so that
50
- * callers gating on a key the config doesn't track yet don't silently break.
51
- */
52
- export declare function isAiFeatureEnabled(db: unknown, featureKey: string): Promise<boolean>;
53
53
  /**
54
54
  * Resolve provider + model + key + budget for a feature, enforcing the toggle.
55
55
  * Pure resolution — performs no model call. Returns a discriminated result so
@@ -61,6 +61,8 @@ export interface GenerateForFeatureInput {
61
61
  system?: string;
62
62
  maxTokens?: number;
63
63
  temperature?: number;
64
+ /** Images for vision models. Refused with `unsupported_input` when the model lacks `vision`. */
65
+ images?: ImageInput[];
64
66
  /** Recorded on the usage audit entry so spend is attributable. */
65
67
  userId?: string;
66
68
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/ai/runtime.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/ai/runtime.ts"],"names":[],"mappings":"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"}
@@ -19,6 +19,7 @@ import { stripJsonFences } from './brand-voice-analyze.js';
19
19
  import { resolveWireModelId } from './catalog.js';
20
20
  import { getAIConfig, resolveProviderKey } from './config-store.js';
21
21
  import { getModels } from './models.js';
22
+ import { EMBEDDING_MODELS, embeddingsAvailableForProvider } from './embeddings.js';
22
23
  import { generateEmbeddings as adapterGenerateEmbeddings, generateText as adapterGenerateText, } from './providers/index.js';
23
24
  import { AdapterHttpError } from './providers/http.js';
24
25
  import { resolveFeatureModel } from './resolve.js';
@@ -29,15 +30,6 @@ export { stripJsonFences };
29
30
  function err(code, message) {
30
31
  return { ok: false, code, message };
31
32
  }
32
- /**
33
- * Is a configured AI feature turned on? Unknown keys default to enabled so that
34
- * callers gating on a key the config doesn't track yet don't silently break.
35
- */
36
- export async function isAiFeatureEnabled(db, featureKey) {
37
- const config = await getAIConfig(db);
38
- const feature = config.settings.features.find((f) => f.key === featureKey);
39
- return feature ? feature.enabled : true;
40
- }
41
33
  /**
42
34
  * Resolve provider + model + key + budget for a feature, enforcing the toggle.
43
35
  * Pure resolution — performs no model call. Returns a discriminated result so
@@ -96,6 +88,7 @@ export async function resolveFeatureRuntime(db, featureKey) {
96
88
  modelId: resolved.modelId,
97
89
  providerModelId,
98
90
  disallowsSampling: modelDisallowsSampling(providerModelId, resolved.model?.capabilities),
91
+ capabilities: resolved.model?.capabilities,
99
92
  };
100
93
  }
101
94
  /** `openai:gpt-4o` -> `gpt-4o`; leaves bare ids untouched. */
@@ -114,6 +107,14 @@ export async function generateTextForFeature(db, featureKey, input) {
114
107
  const resolved = await resolveFeatureRuntime(db, featureKey);
115
108
  if (!resolved.ok)
116
109
  return resolved;
110
+ // Vision gate: a catalogued model that explicitly lacks `vision` is refused
111
+ // before any network call. Uncatalogued models (no capabilities) attempt the
112
+ // call and let the provider decide. The message names the model only —
113
+ // never the image bytes.
114
+ const hasImages = Array.isArray(input.images) && input.images.length > 0;
115
+ if (hasImages && resolved.capabilities && resolved.capabilities.vision === false) {
116
+ return err('unsupported_input', `The selected model (${resolved.modelId}) cannot analyze images. Choose a vision-capable model for this feature in Settings > AI.`);
117
+ }
117
118
  // Inject the active brand voice into the system prompt when the caller opts
118
119
  // in (content-writing surfaces do; metadata/structured ones don't).
119
120
  let system = input.system;
@@ -136,6 +137,7 @@ export async function generateTextForFeature(db, featureKey, input) {
136
137
  system,
137
138
  maxTokens: input.maxTokens,
138
139
  temperature,
140
+ images: hasImages ? input.images : undefined,
139
141
  });
140
142
  await recordUsage(db, {
141
143
  featureKey,
@@ -219,15 +221,6 @@ export async function generateJsonForFeature(db, featureKey, input) {
219
221
  }
220
222
  return err('invalid_output', `AI returned output that did not match the expected shape (${lastError}).`);
221
223
  }
222
- /**
223
- * Default embedding model per provider. Providers absent from this map have no
224
- * embeddings API — `embedForFeature` returns a typed `no_model` error for them
225
- * and callers fall back to their non-AI behavior.
226
- */
227
- const EMBEDDING_MODELS = {
228
- openai: 'text-embedding-3-small',
229
- custom: 'text-embedding-3-small',
230
- };
231
224
  /**
232
225
  * Run embeddings for a feature through the governed path: resolve → enforce
233
226
  * (toggle, budget, daily cap) → call → record usage. Same error contract as
@@ -246,7 +239,9 @@ export async function embedForFeature(db, featureKey, texts, input = {}) {
246
239
  const resolved = await resolveFeatureRuntime(db, featureKey);
247
240
  if (!resolved.ok)
248
241
  return resolved;
249
- const embeddingModel = EMBEDDING_MODELS[resolved.providerKey];
242
+ const embeddingModel = embeddingsAvailableForProvider(resolved.providerKey)
243
+ ? EMBEDDING_MODELS[resolved.providerKey]
244
+ : undefined;
250
245
  if (!embeddingModel) {
251
246
  return err('no_model', `The "${resolved.providerKey}" provider does not support embeddings.`);
252
247
  }
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/ai/runtime.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/ai/runtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Provider-free prompt + normalization for accessible alt text. Moved from
3
+ * `@prenta/plugin-ai` (`media/alt-text-generator.ts`, `alt-text-prompt.ts`,
4
+ * `media/json.ts`) in Spec B; the model call runs through
5
+ * `generateJsonForFeature` under the `ai.features.mediaAltText` feature
6
+ * (toggle, daily cap, budget, usage metering), so this module never touches a
7
+ * provider.
8
+ *
9
+ * Vision-then-heuristic: when image bytes are supplied the vision path is
10
+ * tried first. If the resolved model is catalogued without `vision` the
11
+ * runtime refuses with `unsupported_input` *before* any network call, and we
12
+ * rerun text-only with confidence capped at {@link HEURISTIC_MAX_CONFIDENCE}.
13
+ * Every other runtime refusal propagates to the caller.
14
+ *
15
+ * Image bytes (`base64`) only ever travel in the adapter request body — they
16
+ * are never logged, audited, or echoed into an error message.
17
+ */
18
+ import { z } from 'zod';
19
+ import type { ImageInput } from '../providers/http.js';
20
+ import { type RuntimeError } from '../runtime.js';
21
+ export declare const ALT_TEXT_FEATURE = "ai.features.mediaAltText";
22
+ /** Max confidence we'll report for a text-only (no real image) heuristic. */
23
+ export declare const HEURISTIC_MAX_CONFIDENCE = 0.4;
24
+ export interface AltTextContext {
25
+ pageTitle?: string;
26
+ surroundingText?: string;
27
+ purpose?: 'decorative' | 'informative' | 'functional';
28
+ }
29
+ export interface AltTextResult {
30
+ altText: string;
31
+ isDecorative: boolean;
32
+ confidence: number;
33
+ alternatives: string[];
34
+ /** True only when a real vision model analyzed the image bytes. */
35
+ usedVision: boolean;
36
+ }
37
+ /** Lenient on purpose: every key is optional so a partial reply still normalizes. */
38
+ export declare const AltTextSchema: z.ZodObject<{
39
+ altText: z.ZodOptional<z.ZodString>;
40
+ isDecorative: z.ZodOptional<z.ZodBoolean>;
41
+ alternatives: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
42
+ confidence: z.ZodOptional<z.ZodNumber>;
43
+ }, "strip", z.ZodTypeAny, {
44
+ altText?: string | undefined;
45
+ confidence?: number | undefined;
46
+ isDecorative?: boolean | undefined;
47
+ alternatives?: string[] | undefined;
48
+ }, {
49
+ altText?: string | undefined;
50
+ confidence?: number | undefined;
51
+ isDecorative?: boolean | undefined;
52
+ alternatives?: string[] | undefined;
53
+ }>;
54
+ /** Normalize model output to publishing-ready alt text. */
55
+ export declare function normalizeGeneratedAltText(raw: string, isDecorative: boolean): string;
56
+ export declare function buildAltTextPrompt(ctx: AltTextContext, opts: {
57
+ vision: boolean;
58
+ fileName: string;
59
+ }): {
60
+ system: string;
61
+ prompt: string;
62
+ };
63
+ export interface GenerateAltTextArgs {
64
+ /** Used only to derive the file name shown to the text-only heuristic. */
65
+ imageUrl: string;
66
+ /** Image bytes when the caller could fetch them; `null` forces the heuristic. */
67
+ image: ImageInput | null;
68
+ context: AltTextContext;
69
+ /** Recorded on the usage audit entry so spend is attributable. */
70
+ userId?: string;
71
+ /** Injectable fetch for tests; forwarded to the provider adapter. */
72
+ fetchImpl?: typeof fetch;
73
+ }
74
+ /**
75
+ * Governed alt-text generation. Tries the vision path when image bytes are
76
+ * available; if the resolved model is catalogued without `vision`
77
+ * (`unsupported_input`) it reruns text-only with confidence capped at
78
+ * {@link HEURISTIC_MAX_CONFIDENCE}. Every other runtime refusal propagates.
79
+ * A `decorative` purpose short-circuits with no model call.
80
+ */
81
+ export declare function generateAltText(db: unknown, args: GenerateAltTextArgs): Promise<AltTextResult | RuntimeError>;
82
+ //# sourceMappingURL=alt-text.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alt-text.d.ts","sourceRoot":"","sources":["../../../src/ai/tasks/alt-text.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,EAA0B,KAAK,YAAY,EAAE,MAAM,eAAe,CAAA;AAEzE,eAAO,MAAM,gBAAgB,6BAA6B,CAAA;AAC1D,6EAA6E;AAC7E,eAAO,MAAM,wBAAwB,MAAM,CAAA;AAkC3C,MAAM,WAAW,cAAc;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,OAAO,CAAC,EAAE,YAAY,GAAG,aAAa,GAAG,YAAY,CAAA;CACtD;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAA;IACf,YAAY,EAAE,OAAO,CAAA;IACrB,UAAU,EAAE,MAAM,CAAA;IAClB,YAAY,EAAE,MAAM,EAAE,CAAA;IACtB,mEAAmE;IACnE,UAAU,EAAE,OAAO,CAAA;CACpB;AAED,qFAAqF;AACrF,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;EAKxB,CAAA;AAIF,2DAA2D;AAC3D,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,GAAG,MAAM,CAOpF;AAQD,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,cAAc,EACnB,IAAI,EAAE;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAC1C;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAmBpC;AAoCD,MAAM,WAAW,mBAAmB;IAClC,0EAA0E;IAC1E,QAAQ,EAAE,MAAM,CAAA;IAChB,iFAAiF;IACjF,KAAK,EAAE,UAAU,GAAG,IAAI,CAAA;IACxB,OAAO,EAAE,cAAc,CAAA;IACvB,kEAAkE;IAClE,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,qEAAqE;IACrE,SAAS,CAAC,EAAE,OAAO,KAAK,CAAA;CACzB;AAED;;;;;;GAMG;AACH,wBAAsB,eAAe,CACnC,EAAE,EAAE,OAAO,EACX,IAAI,EAAE,mBAAmB,GACxB,OAAO,CAAC,aAAa,GAAG,YAAY,CAAC,CA6BvC"}
@@ -0,0 +1,171 @@
1
+ /**
2
+ * Provider-free prompt + normalization for accessible alt text. Moved from
3
+ * `@prenta/plugin-ai` (`media/alt-text-generator.ts`, `alt-text-prompt.ts`,
4
+ * `media/json.ts`) in Spec B; the model call runs through
5
+ * `generateJsonForFeature` under the `ai.features.mediaAltText` feature
6
+ * (toggle, daily cap, budget, usage metering), so this module never touches a
7
+ * provider.
8
+ *
9
+ * Vision-then-heuristic: when image bytes are supplied the vision path is
10
+ * tried first. If the resolved model is catalogued without `vision` the
11
+ * runtime refuses with `unsupported_input` *before* any network call, and we
12
+ * rerun text-only with confidence capped at {@link HEURISTIC_MAX_CONFIDENCE}.
13
+ * Every other runtime refusal propagates to the caller.
14
+ *
15
+ * Image bytes (`base64`) only ever travel in the adapter request body — they
16
+ * are never logged, audited, or echoed into an error message.
17
+ */
18
+ import { z } from 'zod';
19
+ import { clampAiContent, fenceUntrusted } from '../prompt-safety.js';
20
+ import { generateJsonForFeature } from '../runtime.js';
21
+ export const ALT_TEXT_FEATURE = 'ai.features.mediaAltText';
22
+ /** Max confidence we'll report for a text-only (no real image) heuristic. */
23
+ export const HEURISTIC_MAX_CONFIDENCE = 0.4;
24
+ /** Nearby page copy is clamped + fenced as untrusted so it cannot dominate or instruct. */
25
+ const SURROUNDING_TEXT_MAX_CHARS = 300;
26
+ /** Page titles are caller-supplied; clamp so a hostile title cannot pad the prompt. */
27
+ const PAGE_TITLE_MAX_CHARS = 200;
28
+ const ALT_TEXT_MAX_TOKENS = 512;
29
+ const ALT_TEXT_TEMPERATURE = 0.3;
30
+ /** Default confidence when the model omits one (vision vs. text-only). */
31
+ const DEFAULT_VISION_CONFIDENCE = 0.7;
32
+ const DEFAULT_TEXT_CONFIDENCE = 0.3;
33
+ const MAX_ALTERNATIVES = 2;
34
+ /** WCAG-aligned alt-text guidance shared by vision and heuristic paths. */
35
+ const ALT_TEXT_SYSTEM_PROMPT = `You are an accessibility specialist writing alt text for web images (WCAG 2.1 / W3C best practices).
36
+
37
+ Rules:
38
+ - Describe what matters for the image's purpose in context — not every visual detail.
39
+ - Be concise: target ≤125 characters; never exceed 125.
40
+ - Do NOT start with "image of", "photo of", "picture of", or "graphic of" — screen readers already announce it as an image.
41
+ - Do NOT include file names, dimensions, or SEO keyword stuffing.
42
+ - Include visible text in the image when it is essential to understanding.
43
+ - For people: describe relevant appearance only when needed for context; avoid speculative identity or sensitive traits.
44
+ - If the image is purely decorative (borders, spacers, visual flourish with no informational value), set isDecorative true and altText to "".
45
+ - For functional images (icons/buttons), describe the action or destination, not the pixel art.
46
+ - When page context is provided, prefer alt text that fits the surrounding content.
47
+
48
+ Return valid JSON only.`;
49
+ const ALT_TEXT_JSON_SHAPE = `Return a JSON object with:
50
+ - "altText": string (empty when decorative)
51
+ - "isDecorative": boolean
52
+ - "alternatives": array of exactly 2 alternative alt text options (empty strings when decorative)
53
+ - "confidence": number 0-1`;
54
+ /** Lenient on purpose: every key is optional so a partial reply still normalizes. */
55
+ export const AltTextSchema = z.object({
56
+ altText: z.string().optional(),
57
+ isDecorative: z.boolean().optional(),
58
+ alternatives: z.array(z.string()).optional(),
59
+ confidence: z.number().optional(),
60
+ });
61
+ /** Normalize model output to publishing-ready alt text. */
62
+ export function normalizeGeneratedAltText(raw, isDecorative) {
63
+ if (isDecorative)
64
+ return '';
65
+ let s = raw.trim();
66
+ s = s.replace(/^(an?\s+)?(image|photo|picture|graphic|screenshot)\s+of\s+/i, '');
67
+ s = s.replace(/\s+/g, ' ').trim();
68
+ if (s.length > 125)
69
+ s = `${s.slice(0, 122).trim()}…`;
70
+ return s;
71
+ }
72
+ /** Coerce a model-reported confidence into a finite number in [0, 1]. */
73
+ function clampConfidence(value, fallback) {
74
+ if (typeof value !== 'number' || !Number.isFinite(value))
75
+ return fallback;
76
+ return Math.max(0, Math.min(1, value));
77
+ }
78
+ export function buildAltTextPrompt(ctx, opts) {
79
+ const contextInfo = [
80
+ ctx.pageTitle && `Page title: ${clampAiContent(ctx.pageTitle, PAGE_TITLE_MAX_CHARS)}`,
81
+ ctx.surroundingText &&
82
+ `Nearby text:\n${fenceUntrusted(ctx.surroundingText, SURROUNDING_TEXT_MAX_CHARS)}`,
83
+ ctx.purpose && `Purpose: ${ctx.purpose}`,
84
+ ]
85
+ .filter(Boolean)
86
+ .join('\n');
87
+ const prompt = opts.vision
88
+ ? `Analyze the attached image and generate accessible alt text.\n\n${contextInfo ? `Context:\n${contextInfo}\n\n` : ''}${ALT_TEXT_JSON_SHAPE}`
89
+ : // No vision: infer ONLY from context. Be explicit so the model doesn't
90
+ // fabricate visual detail it cannot possibly know.
91
+ `You CANNOT see the image. Based only on the context below and the file name, suggest plausible accessible alt text, set isDecorative false unless context clearly indicates ornamentation, and report low confidence since the image was not analyzed.\n\n${contextInfo ? `Context:\n${contextInfo}\n` : ''}File: ${opts.fileName}\n\n${ALT_TEXT_JSON_SHAPE}`;
92
+ return { system: ALT_TEXT_SYSTEM_PROMPT, prompt };
93
+ }
94
+ function toResult(parsed, usedVision) {
95
+ const isDecorative = parsed.isDecorative === true;
96
+ const altText = normalizeGeneratedAltText(parsed.altText ?? '', isDecorative);
97
+ const rawConfidence = clampConfidence(parsed.confidence, usedVision ? DEFAULT_VISION_CONFIDENCE : DEFAULT_TEXT_CONFIDENCE);
98
+ const alternatives = isDecorative
99
+ ? []
100
+ : (parsed.alternatives ?? [])
101
+ .map((a) => normalizeGeneratedAltText(a, false))
102
+ .filter(Boolean)
103
+ .slice(0, MAX_ALTERNATIVES);
104
+ return {
105
+ altText,
106
+ isDecorative,
107
+ confidence: isDecorative
108
+ ? 1
109
+ : usedVision
110
+ ? rawConfidence
111
+ : Math.min(rawConfidence, HEURISTIC_MAX_CONFIDENCE),
112
+ alternatives,
113
+ usedVision,
114
+ };
115
+ }
116
+ const DECORATIVE_RESULT = {
117
+ altText: '',
118
+ isDecorative: true,
119
+ confidence: 1,
120
+ alternatives: [],
121
+ usedVision: false,
122
+ };
123
+ /**
124
+ * Governed alt-text generation. Tries the vision path when image bytes are
125
+ * available; if the resolved model is catalogued without `vision`
126
+ * (`unsupported_input`) it reruns text-only with confidence capped at
127
+ * {@link HEURISTIC_MAX_CONFIDENCE}. Every other runtime refusal propagates.
128
+ * A `decorative` purpose short-circuits with no model call.
129
+ */
130
+ export async function generateAltText(db, args) {
131
+ if (args.context.purpose === 'decorative')
132
+ return { ...DECORATIVE_RESULT };
133
+ const fileName = fileNameFromUrl(args.imageUrl);
134
+ const common = {
135
+ maxTokens: ALT_TEXT_MAX_TOKENS,
136
+ temperature: ALT_TEXT_TEMPERATURE,
137
+ userId: args.userId,
138
+ fetchImpl: args.fetchImpl,
139
+ schema: AltTextSchema,
140
+ };
141
+ if (args.image) {
142
+ const vision = buildAltTextPrompt(args.context, { vision: true, fileName });
143
+ const r = await generateJsonForFeature(db, ALT_TEXT_FEATURE, {
144
+ ...common,
145
+ ...vision,
146
+ images: [args.image],
147
+ });
148
+ if (r.ok)
149
+ return toResult(r.value, true);
150
+ if (r.code !== 'unsupported_input')
151
+ return r;
152
+ // Non-vision model: the runtime refused before any network call, so the
153
+ // text-only rerun below is the only metered call.
154
+ }
155
+ const text = buildAltTextPrompt(args.context, { vision: false, fileName });
156
+ const r = await generateJsonForFeature(db, ALT_TEXT_FEATURE, { ...common, ...text });
157
+ if (!r.ok)
158
+ return r;
159
+ return toResult(r.value, false);
160
+ }
161
+ /** Last path segment (query/hash stripped) so the heuristic sees `hero.webp`, not a signed URL. */
162
+ function fileNameFromUrl(url) {
163
+ try {
164
+ const path = new URL(url).pathname;
165
+ return decodeURIComponent(path.split('/').pop() ?? '') || url;
166
+ }
167
+ catch {
168
+ return url.split(/[?#]/)[0]?.split('/').pop() || url;
169
+ }
170
+ }
171
+ //# sourceMappingURL=alt-text.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alt-text.js","sourceRoot":"","sources":["../../../src/ai/tasks/alt-text.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,102 @@
1
+ /**
2
+ * Provider-free prompt + coercion for whole-document generation. Moved from
3
+ * `@prenta/plugin-ai` (`writing/content-generator.ts`) in Spec B; the model
4
+ * call runs through `generateJsonForFeature` under the
5
+ * `ai.features.documentGeneration` feature (toggle, daily cap, budget, brand
6
+ * voice, usage metering), so this module never touches a provider.
7
+ *
8
+ * Given a prompt + a minimal collection schema (slug, labels, fields) it
9
+ * builds the system/user prompts that ask the model for JSON matching the
10
+ * field names and types, and coerces the validated reply into field data
11
+ * ready for `createDocument`.
12
+ *
13
+ * Intentionally pragmatic — it does *not* invent a page `data.sections`
14
+ * list. Author pages with `add_page_section` or `createDocument` using
15
+ * `data.sections`. This is for non-page collections (blog posts, case
16
+ * studies, services, locations, team members, …) with structured field data.
17
+ */
18
+ import { z } from 'zod';
19
+ import type { CollectionDefinition, FieldDefinition } from '../../config/types.js';
20
+ export declare const DOCUMENT_GENERATION_FEATURE = "ai.features.documentGeneration";
21
+ /** Default output cap — enough for ~2000-word posts. */
22
+ export declare const DOCUMENT_GENERATION_MAX_TOKENS = 3000;
23
+ /**
24
+ * Minimal field shape the prompt builder and coercer understand. A structural
25
+ * subset of core's `FieldDefinition` — see {@link toFieldShape}.
26
+ */
27
+ export interface FieldShape {
28
+ type: string;
29
+ label?: string;
30
+ required?: boolean;
31
+ maxLength?: number;
32
+ options?: Array<{
33
+ label: string;
34
+ value: string;
35
+ }>;
36
+ min?: number;
37
+ max?: number;
38
+ step?: number;
39
+ fields?: Record<string, FieldShape>;
40
+ admin?: {
41
+ description?: string;
42
+ };
43
+ features?: string[];
44
+ }
45
+ export interface CollectionShape {
46
+ slug: string;
47
+ labels: {
48
+ singular: string;
49
+ plural: string;
50
+ };
51
+ type?: 'page' | 'post';
52
+ fields: Record<string, FieldShape>;
53
+ seo?: {
54
+ defaultSchemaType?: string;
55
+ };
56
+ }
57
+ export interface DocumentGenerationInput {
58
+ prompt: string;
59
+ collection: CollectionShape;
60
+ /** Existing site content the model can reference for voice / facts (fenced as untrusted). */
61
+ existingContent?: string;
62
+ /** Audience description (`"small business owners"`). */
63
+ targetAudience?: string;
64
+ /** Free-form tone modifier ("conversational", "expert", "playful"). */
65
+ tone?: string;
66
+ }
67
+ export interface CoercedDocument {
68
+ /** Field data ready to merge into a `data` payload. */
69
+ data: Record<string, unknown>;
70
+ /** Suggested document title (also used as the doc record's `title` column). */
71
+ title: string;
72
+ /** URL-safe slug derived from the title unless the model supplied one. */
73
+ slug: string;
74
+ /** SEO bundle extracted from the output (or synthesized). */
75
+ seo: {
76
+ metaTitle?: string;
77
+ metaDescription?: string;
78
+ schemaType?: string;
79
+ };
80
+ }
81
+ /** Any JSON object; field-level coercion happens in {@link coerceDocument}. */
82
+ export declare const DocumentDraftSchema: z.ZodType<Record<string, unknown>>;
83
+ /**
84
+ * Project a core `FieldDefinition` onto {@link FieldShape}. Only the
85
+ * prompt-relevant, serializable subset is carried (no validators, hooks,
86
+ * access functions, or admin conditions), so the shape stays safe to log and
87
+ * cheap to describe to the model.
88
+ */
89
+ export declare function toFieldShape(field: FieldDefinition): FieldShape;
90
+ /** Project a core `CollectionDefinition` onto {@link CollectionShape}. */
91
+ export declare function toCollectionShape(collection: CollectionDefinition): CollectionShape;
92
+ export declare function buildDocumentPrompt(input: DocumentGenerationInput): {
93
+ system: string;
94
+ prompt: string;
95
+ };
96
+ /**
97
+ * Coerce a schema-validated model reply into persisted field data plus the
98
+ * derived title / slug / SEO bundle. Unknown keys (anything the collection
99
+ * doesn't declare) are dropped to keep persisted data clean.
100
+ */
101
+ export declare function coerceDocument(parsed: Record<string, unknown>, collection: CollectionShape): CoercedDocument;
102
+ //# sourceMappingURL=document-generation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"document-generation.d.ts","sourceRoot":"","sources":["../../../src/ai/tasks/document-generation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,OAAO,KAAK,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAGlF,eAAO,MAAM,2BAA2B,mCAAmC,CAAA;AAC3E,wDAAwD;AACxD,eAAO,MAAM,8BAA8B,OAAO,CAAA;AAkBlD;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACjD,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;IACnC,KAAK,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAChC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;IAC5C,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACtB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;IAClC,GAAG,CAAC,EAAE;QAAE,iBAAiB,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CACrC;AAED,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,eAAe,CAAA;IAC3B,6FAA6F;IAC7F,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,wDAAwD;IACxD,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,uEAAuE;IACvE,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,eAAe;IAC9B,uDAAuD;IACvD,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC7B,+EAA+E;IAC/E,KAAK,EAAE,MAAM,CAAA;IACb,0EAA0E;IAC1E,IAAI,EAAE,MAAM,CAAA;IACZ,6DAA6D;IAC7D,GAAG,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,eAAe,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAC3E;AAED,+EAA+E;AAC/E,eAAO,MAAM,mBAAmB,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAI/D,CAAA;AAIJ;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,eAAe,GAAG,UAAU,CA4C/D;AAED,0EAA0E;AAC1E,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,oBAAoB,GAAG,eAAe,CAanF;AAoFD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,uBAAuB,GAAG;IACnE,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;CACf,CASA;AAkFD;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,UAAU,EAAE,eAAe,GAC1B,eAAe,CA+BjB"}