gazetta 0.7.0 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/admin-dist/assets/index-CBeq0rRb.js +693 -0
- package/admin-dist/assets/index-Dtg1dTZQ.css +1 -0
- package/admin-dist/assets/rolldown-runtime-BYbx6iT9.js +1 -0
- package/admin-dist/assets/{vendor-primevue-C0Q_YTCb.js → vendor-primevue-CBGHkaXv.js} +183 -39
- package/admin-dist/assets/{vendor-react-BipDVGow.js → vendor-react-BdW_kNCG.js} +2 -2
- package/admin-dist/assets/vendor-rjsf-lN2SztQt.js +33 -0
- package/admin-dist/assets/vendor-tiptap-C36yDquB.js +141 -0
- package/admin-dist/assets/vendor-vue-Bt5uR1VW.js +1 -0
- package/admin-dist/assets/workbox-window.prod.es5-DGMtIXHc.js +2 -0
- package/admin-dist/index.html +8 -8
- package/admin-dist/sw.js +1 -0
- package/dist/admin-api/archived-name-conflict.d.ts +31 -0
- package/dist/admin-api/archived-name-conflict.d.ts.map +1 -0
- package/dist/admin-api/archived-name-conflict.js +226 -0
- package/dist/admin-api/archived-name-conflict.js.map +1 -0
- package/dist/admin-api/cache-stats-logger.d.ts +83 -0
- package/dist/admin-api/cache-stats-logger.d.ts.map +1 -0
- package/dist/admin-api/cache-stats-logger.js +59 -0
- package/dist/admin-api/cache-stats-logger.js.map +1 -0
- package/dist/admin-api/hook-audit-emitter.d.ts +38 -0
- package/dist/admin-api/hook-audit-emitter.d.ts.map +1 -0
- package/dist/admin-api/hook-audit-emitter.js +21 -0
- package/dist/admin-api/hook-audit-emitter.js.map +1 -0
- package/dist/admin-api/index.d.ts +84 -0
- package/dist/admin-api/index.d.ts.map +1 -1
- package/dist/admin-api/index.js +254 -9
- package/dist/admin-api/index.js.map +1 -1
- package/dist/admin-api/middleware/audit.d.ts +25 -0
- package/dist/admin-api/middleware/audit.d.ts.map +1 -0
- package/dist/admin-api/middleware/audit.js +65 -0
- package/dist/admin-api/middleware/audit.js.map +1 -0
- package/dist/admin-api/middleware/capability.d.ts +8 -0
- package/dist/admin-api/middleware/capability.d.ts.map +1 -0
- package/dist/admin-api/middleware/capability.js +65 -0
- package/dist/admin-api/middleware/capability.js.map +1 -0
- package/dist/admin-api/middleware/principal.d.ts +18 -0
- package/dist/admin-api/middleware/principal.d.ts.map +1 -0
- package/dist/admin-api/middleware/principal.js +128 -0
- package/dist/admin-api/middleware/principal.js.map +1 -0
- package/dist/admin-api/routes/archive-review.d.ts +80 -0
- package/dist/admin-api/routes/archive-review.d.ts.map +1 -0
- package/dist/admin-api/routes/archive-review.js +70 -0
- package/dist/admin-api/routes/archive-review.js.map +1 -0
- package/dist/admin-api/routes/archive.d.ts +145 -0
- package/dist/admin-api/routes/archive.d.ts.map +1 -0
- package/dist/admin-api/routes/archive.js +540 -0
- package/dist/admin-api/routes/archive.js.map +1 -0
- package/dist/admin-api/routes/assets.d.ts +6 -1
- package/dist/admin-api/routes/assets.d.ts.map +1 -1
- package/dist/admin-api/routes/assets.js +167 -14
- package/dist/admin-api/routes/assets.js.map +1 -1
- package/dist/admin-api/routes/audit.d.ts +71 -0
- package/dist/admin-api/routes/audit.d.ts.map +1 -0
- package/dist/admin-api/routes/audit.js +178 -0
- package/dist/admin-api/routes/audit.js.map +1 -0
- package/dist/admin-api/routes/compare.d.ts.map +1 -1
- package/dist/admin-api/routes/compare.js +3 -2
- package/dist/admin-api/routes/compare.js.map +1 -1
- package/dist/admin-api/routes/fields.d.ts.map +1 -1
- package/dist/admin-api/routes/fields.js +2 -1
- package/dist/admin-api/routes/fields.js.map +1 -1
- package/dist/admin-api/routes/fragments.d.ts +13 -1
- package/dist/admin-api/routes/fragments.d.ts.map +1 -1
- package/dist/admin-api/routes/fragments.js +127 -92
- package/dist/admin-api/routes/fragments.js.map +1 -1
- package/dist/admin-api/routes/health.d.ts +60 -0
- package/dist/admin-api/routes/health.d.ts.map +1 -0
- package/dist/admin-api/routes/health.js +65 -0
- package/dist/admin-api/routes/health.js.map +1 -0
- package/dist/admin-api/routes/history.d.ts +2 -1
- package/dist/admin-api/routes/history.d.ts.map +1 -1
- package/dist/admin-api/routes/history.js +26 -4
- package/dist/admin-api/routes/history.js.map +1 -1
- package/dist/admin-api/routes/pages.d.ts +20 -1
- package/dist/admin-api/routes/pages.d.ts.map +1 -1
- package/dist/admin-api/routes/pages.js +157 -117
- package/dist/admin-api/routes/pages.js.map +1 -1
- package/dist/admin-api/routes/preview.d.ts.map +1 -1
- package/dist/admin-api/routes/preview.js +56 -17
- package/dist/admin-api/routes/preview.js.map +1 -1
- package/dist/admin-api/routes/publish.d.ts +19 -1
- package/dist/admin-api/routes/publish.d.ts.map +1 -1
- package/dist/admin-api/routes/publish.js +508 -92
- package/dist/admin-api/routes/publish.js.map +1 -1
- package/dist/admin-api/routes/rename.d.ts +62 -0
- package/dist/admin-api/routes/rename.d.ts.map +1 -0
- package/dist/admin-api/routes/rename.js +366 -0
- package/dist/admin-api/routes/rename.js.map +1 -0
- package/dist/admin-api/routes/site.d.ts.map +1 -1
- package/dist/admin-api/routes/site.js +6 -18
- package/dist/admin-api/routes/site.js.map +1 -1
- package/dist/admin-api/routes/system.d.ts +23 -0
- package/dist/admin-api/routes/system.d.ts.map +1 -0
- package/dist/admin-api/routes/system.js +115 -0
- package/dist/admin-api/routes/system.js.map +1 -0
- package/dist/admin-api/routes/templates.d.ts +11 -1
- package/dist/admin-api/routes/templates.d.ts.map +1 -1
- package/dist/admin-api/routes/templates.js +36 -3
- package/dist/admin-api/routes/templates.js.map +1 -1
- package/dist/admin-api/routes/validation.d.ts +47 -0
- package/dist/admin-api/routes/validation.d.ts.map +1 -0
- package/dist/admin-api/routes/validation.js +120 -0
- package/dist/admin-api/routes/validation.js.map +1 -0
- package/dist/admin-api/schemas/archive.d.ts +124 -0
- package/dist/admin-api/schemas/archive.d.ts.map +1 -0
- package/dist/admin-api/schemas/archive.js +93 -0
- package/dist/admin-api/schemas/archive.js.map +1 -0
- package/dist/admin-api/schemas/assets.d.ts +16 -0
- package/dist/admin-api/schemas/assets.d.ts.map +1 -1
- package/dist/admin-api/schemas/assets.js +15 -0
- package/dist/admin-api/schemas/assets.js.map +1 -1
- package/dist/admin-api/schemas/audit.d.ts +175 -0
- package/dist/admin-api/schemas/audit.d.ts.map +1 -0
- package/dist/admin-api/schemas/audit.js +91 -0
- package/dist/admin-api/schemas/audit.js.map +1 -0
- package/dist/admin-api/schemas/error.d.ts +94 -0
- package/dist/admin-api/schemas/error.d.ts.map +1 -0
- package/dist/admin-api/schemas/error.js +79 -0
- package/dist/admin-api/schemas/error.js.map +1 -0
- package/dist/admin-api/schemas/fragments.d.ts +2 -0
- package/dist/admin-api/schemas/fragments.d.ts.map +1 -1
- package/dist/admin-api/schemas/fragments.js +4 -0
- package/dist/admin-api/schemas/fragments.js.map +1 -1
- package/dist/admin-api/schemas/index.d.ts +8 -0
- package/dist/admin-api/schemas/index.d.ts.map +1 -1
- package/dist/admin-api/schemas/index.js +8 -0
- package/dist/admin-api/schemas/index.js.map +1 -1
- package/dist/admin-api/schemas/pages.d.ts +2 -0
- package/dist/admin-api/schemas/pages.d.ts.map +1 -1
- package/dist/admin-api/schemas/pages.js +11 -0
- package/dist/admin-api/schemas/pages.js.map +1 -1
- package/dist/admin-api/schemas/rename.d.ts +77 -0
- package/dist/admin-api/schemas/rename.d.ts.map +1 -0
- package/dist/admin-api/schemas/rename.js +75 -0
- package/dist/admin-api/schemas/rename.js.map +1 -0
- package/dist/admin-api/schemas/site.d.ts +3 -2
- package/dist/admin-api/schemas/site.d.ts.map +1 -1
- package/dist/admin-api/schemas/site.js +3 -2
- package/dist/admin-api/schemas/site.js.map +1 -1
- package/dist/admin-api/schemas/system.d.ts +28 -0
- package/dist/admin-api/schemas/system.d.ts.map +1 -0
- package/dist/admin-api/schemas/system.js +35 -0
- package/dist/admin-api/schemas/system.js.map +1 -0
- package/dist/admin-api/schemas/targets.d.ts +55 -0
- package/dist/admin-api/schemas/targets.d.ts.map +1 -1
- package/dist/admin-api/schemas/targets.js +46 -0
- package/dist/admin-api/schemas/targets.js.map +1 -1
- package/dist/admin-api/schemas/templates.d.ts +54 -0
- package/dist/admin-api/schemas/templates.d.ts.map +1 -1
- package/dist/admin-api/schemas/templates.js +21 -0
- package/dist/admin-api/schemas/templates.js.map +1 -1
- package/dist/admin-api/schemas/validation.d.ts +101 -0
- package/dist/admin-api/schemas/validation.d.ts.map +1 -0
- package/dist/admin-api/schemas/validation.js +57 -0
- package/dist/admin-api/schemas/validation.js.map +1 -0
- package/dist/admin-api/source-context.d.ts +66 -10
- package/dist/admin-api/source-context.d.ts.map +1 -1
- package/dist/admin-api/source-context.js +43 -5
- package/dist/admin-api/source-context.js.map +1 -1
- package/dist/ai/adapter-scaffold.d.ts +63 -0
- package/dist/ai/adapter-scaffold.d.ts.map +1 -0
- package/dist/ai/adapter-scaffold.js +89 -0
- package/dist/ai/adapter-scaffold.js.map +1 -0
- package/dist/ai/compose-prompt.d.ts +50 -0
- package/dist/ai/compose-prompt.d.ts.map +1 -0
- package/dist/ai/compose-prompt.js +49 -0
- package/dist/ai/compose-prompt.js.map +1 -0
- package/dist/ai/errors.d.ts +65 -0
- package/dist/ai/errors.d.ts.map +1 -0
- package/dist/ai/errors.js +59 -0
- package/dist/ai/errors.js.map +1 -0
- package/dist/ai/index.d.ts +17 -0
- package/dist/ai/index.d.ts.map +1 -0
- package/dist/ai/index.js +16 -0
- package/dist/ai/index.js.map +1 -0
- package/dist/ai/provider.d.ts +76 -0
- package/dist/ai/provider.d.ts.map +1 -0
- package/dist/ai/provider.js +13 -0
- package/dist/ai/provider.js.map +1 -0
- package/dist/ai/refusal.d.ts +50 -0
- package/dist/ai/refusal.d.ts.map +1 -0
- package/dist/ai/refusal.js +100 -0
- package/dist/ai/refusal.js.map +1 -0
- package/dist/ai/vision-prep.d.ts +32 -0
- package/dist/ai/vision-prep.d.ts.map +1 -0
- package/dist/ai/vision-prep.js +113 -0
- package/dist/ai/vision-prep.js.map +1 -0
- package/dist/alt/adapter.d.ts +140 -0
- package/dist/alt/adapter.d.ts.map +1 -0
- package/dist/alt/adapter.js +7 -0
- package/dist/alt/adapter.js.map +1 -0
- package/dist/alt/anthropic.d.ts +63 -0
- package/dist/alt/anthropic.d.ts.map +1 -0
- package/dist/alt/anthropic.js +147 -0
- package/dist/alt/anthropic.js.map +1 -0
- package/dist/alt/config.d.ts +67 -0
- package/dist/alt/config.d.ts.map +1 -0
- package/dist/alt/config.js +41 -0
- package/dist/alt/config.js.map +1 -0
- package/dist/alt/factory.d.ts +19 -0
- package/dist/alt/factory.d.ts.map +1 -0
- package/dist/alt/factory.js +69 -0
- package/dist/alt/factory.js.map +1 -0
- package/dist/alt/null-adapter.d.ts +3 -0
- package/dist/alt/null-adapter.d.ts.map +1 -0
- package/dist/alt/null-adapter.js +43 -0
- package/dist/alt/null-adapter.js.map +1 -0
- package/dist/alt/ollama.d.ts +40 -0
- package/dist/alt/ollama.d.ts.map +1 -0
- package/dist/alt/ollama.js +139 -0
- package/dist/alt/ollama.js.map +1 -0
- package/dist/alt/openai.d.ts +46 -0
- package/dist/alt/openai.d.ts.map +1 -0
- package/dist/alt/openai.js +118 -0
- package/dist/alt/openai.js.map +1 -0
- package/dist/alt/prompt-policies.d.ts +79 -0
- package/dist/alt/prompt-policies.d.ts.map +1 -0
- package/dist/alt/prompt-policies.js +67 -0
- package/dist/alt/prompt-policies.js.map +1 -0
- package/dist/alt/route-handler.d.ts +56 -0
- package/dist/alt/route-handler.d.ts.map +1 -0
- package/dist/alt/route-handler.js +122 -0
- package/dist/alt/route-handler.js.map +1 -0
- package/dist/alt/suggester.d.ts +57 -0
- package/dist/alt/suggester.d.ts.map +1 -0
- package/dist/alt/suggester.js +133 -0
- package/dist/alt/suggester.js.map +1 -0
- package/dist/app.js +1 -1
- package/dist/app.js.map +1 -1
- package/dist/archive-aliases.d.ts +79 -0
- package/dist/archive-aliases.d.ts.map +1 -0
- package/dist/archive-aliases.js +60 -0
- package/dist/archive-aliases.js.map +1 -0
- package/dist/archive-helpers.d.ts +73 -0
- package/dist/archive-helpers.d.ts.map +1 -0
- package/dist/archive-helpers.js +94 -0
- package/dist/archive-helpers.js.map +1 -0
- package/dist/assets/find-refs.d.ts +1 -1
- package/dist/assets/find-refs.js +1 -1
- package/dist/assets/find-refs.js.map +1 -1
- package/dist/assets/rename.js +1 -1
- package/dist/assets/rename.js.map +1 -1
- package/dist/assets/replace.js +1 -1
- package/dist/assets/replace.js.map +1 -1
- package/dist/assets/resolve.js +4 -4
- package/dist/assets/resolve.js.map +1 -1
- package/dist/assets/serve-route.js +2 -2
- package/dist/assets/serve-route.js.map +1 -1
- package/dist/assets/validate.d.ts +1 -1
- package/dist/assets/validate.js +1 -1
- package/dist/audit/config.d.ts +75 -0
- package/dist/audit/config.d.ts.map +1 -0
- package/dist/audit/config.js +91 -0
- package/dist/audit/config.js.map +1 -0
- package/dist/audit/context.d.ts +98 -0
- package/dist/audit/context.d.ts.map +1 -0
- package/dist/audit/context.js +51 -0
- package/dist/audit/context.js.map +1 -0
- package/dist/audit/errors.d.ts +73 -0
- package/dist/audit/errors.d.ts.map +1 -0
- package/dist/audit/errors.js +78 -0
- package/dist/audit/errors.js.map +1 -0
- package/dist/audit/index.d.ts +16 -0
- package/dist/audit/index.d.ts.map +1 -0
- package/dist/audit/index.js +10 -0
- package/dist/audit/index.js.map +1 -0
- package/dist/audit/provider.d.ts +73 -0
- package/dist/audit/provider.d.ts.map +1 -0
- package/dist/audit/provider.js +2 -0
- package/dist/audit/provider.js.map +1 -0
- package/dist/audit/providers/history.d.ts +66 -0
- package/dist/audit/providers/history.d.ts.map +1 -0
- package/dist/audit/providers/history.js +102 -0
- package/dist/audit/providers/history.js.map +1 -0
- package/dist/audit/pseudonymize.d.ts +26 -0
- package/dist/audit/pseudonymize.d.ts.map +1 -0
- package/dist/audit/pseudonymize.js +86 -0
- package/dist/audit/pseudonymize.js.map +1 -0
- package/dist/audit/recorder.d.ts +102 -0
- package/dist/audit/recorder.d.ts.map +1 -0
- package/dist/audit/recorder.js +55 -0
- package/dist/audit/recorder.js.map +1 -0
- package/dist/audit/retention.d.ts +83 -0
- package/dist/audit/retention.d.ts.map +1 -0
- package/dist/audit/retention.js +142 -0
- package/dist/audit/retention.js.map +1 -0
- package/dist/audit/source-ip.d.ts +32 -0
- package/dist/audit/source-ip.d.ts.map +1 -0
- package/dist/audit/source-ip.js +164 -0
- package/dist/audit/source-ip.js.map +1 -0
- package/dist/audit/types.d.ts +143 -0
- package/dist/audit/types.d.ts.map +1 -0
- package/dist/audit/types.js +33 -0
- package/dist/audit/types.js.map +1 -0
- package/dist/audit/user-agent.d.ts +28 -0
- package/dist/audit/user-agent.d.ts.map +1 -0
- package/dist/audit/user-agent.js +63 -0
- package/dist/audit/user-agent.js.map +1 -0
- package/dist/auth/capabilities.d.ts +28 -0
- package/dist/auth/capabilities.d.ts.map +1 -0
- package/dist/auth/capabilities.js +101 -0
- package/dist/auth/capabilities.js.map +1 -0
- package/dist/auth/config.d.ts +109 -0
- package/dist/auth/config.d.ts.map +1 -0
- package/dist/auth/config.js +221 -0
- package/dist/auth/config.js.map +1 -0
- package/dist/auth/errors.d.ts +72 -0
- package/dist/auth/errors.d.ts.map +1 -0
- package/dist/auth/errors.js +78 -0
- package/dist/auth/errors.js.map +1 -0
- package/dist/auth/factory.d.ts +43 -0
- package/dist/auth/factory.d.ts.map +1 -0
- package/dist/auth/factory.js +48 -0
- package/dist/auth/factory.js.map +1 -0
- package/dist/auth/index.d.ts +21 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +14 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/ip-match.d.ts +29 -0
- package/dist/auth/ip-match.d.ts.map +1 -0
- package/dist/auth/ip-match.js +162 -0
- package/dist/auth/ip-match.js.map +1 -0
- package/dist/auth/provider.d.ts +76 -0
- package/dist/auth/provider.d.ts.map +1 -0
- package/dist/auth/provider.js +2 -0
- package/dist/auth/provider.js.map +1 -0
- package/dist/auth/providers/aws-cognito.d.ts +55 -0
- package/dist/auth/providers/aws-cognito.d.ts.map +1 -0
- package/dist/auth/providers/aws-cognito.js +114 -0
- package/dist/auth/providers/aws-cognito.js.map +1 -0
- package/dist/auth/providers/azure-easy-auth.d.ts +7 -0
- package/dist/auth/providers/azure-easy-auth.d.ts.map +1 -0
- package/dist/auth/providers/azure-easy-auth.js +48 -0
- package/dist/auth/providers/azure-easy-auth.js.map +1 -0
- package/dist/auth/providers/cloudflare-access.d.ts +71 -0
- package/dist/auth/providers/cloudflare-access.d.ts.map +1 -0
- package/dist/auth/providers/cloudflare-access.js +120 -0
- package/dist/auth/providers/cloudflare-access.js.map +1 -0
- package/dist/auth/providers/forwarded-user.d.ts +31 -0
- package/dist/auth/providers/forwarded-user.d.ts.map +1 -0
- package/dist/auth/providers/forwarded-user.js +72 -0
- package/dist/auth/providers/forwarded-user.js.map +1 -0
- package/dist/auth/providers/none.d.ts +6 -0
- package/dist/auth/providers/none.d.ts.map +1 -0
- package/dist/auth/providers/none.js +19 -0
- package/dist/auth/providers/none.js.map +1 -0
- package/dist/auth/providers/tailscale.d.ts +7 -0
- package/dist/auth/providers/tailscale.d.ts.map +1 -0
- package/dist/auth/providers/tailscale.js +30 -0
- package/dist/auth/providers/tailscale.js.map +1 -0
- package/dist/auth/role-resolver.d.ts +38 -0
- package/dist/auth/role-resolver.d.ts.map +1 -0
- package/dist/auth/role-resolver.js +92 -0
- package/dist/auth/role-resolver.js.map +1 -0
- package/dist/auth/types.d.ts +150 -0
- package/dist/auth/types.d.ts.map +1 -0
- package/dist/auth/types.js +60 -0
- package/dist/auth/types.js.map +1 -0
- package/dist/cache/errors.d.ts +41 -0
- package/dist/cache/errors.d.ts.map +1 -0
- package/dist/cache/errors.js +44 -0
- package/dist/cache/errors.js.map +1 -0
- package/dist/cache/factories.d.ts +17 -0
- package/dist/cache/factories.d.ts.map +1 -0
- package/dist/cache/factories.js +17 -0
- package/dist/cache/factories.js.map +1 -0
- package/dist/cache/keys.d.ts +63 -0
- package/dist/cache/keys.d.ts.map +1 -0
- package/dist/cache/keys.js +145 -0
- package/dist/cache/keys.js.map +1 -0
- package/dist/cache/memory.d.ts +51 -0
- package/dist/cache/memory.d.ts.map +1 -0
- package/dist/cache/memory.js +204 -0
- package/dist/cache/memory.js.map +1 -0
- package/dist/cache/per-site.d.ts +22 -0
- package/dist/cache/per-site.d.ts.map +1 -0
- package/dist/cache/per-site.js +114 -0
- package/dist/cache/per-site.js.map +1 -0
- package/dist/cache/types.d.ts +142 -0
- package/dist/cache/types.d.ts.map +1 -0
- package/dist/cache/types.js +33 -0
- package/dist/cache/types.js.map +1 -0
- package/dist/cli/archive.d.ts +44 -0
- package/dist/cli/archive.d.ts.map +1 -0
- package/dist/cli/archive.js +310 -0
- package/dist/cli/archive.js.map +1 -0
- package/dist/cli/bootstrap.d.ts +15 -8
- package/dist/cli/bootstrap.d.ts.map +1 -1
- package/dist/cli/bootstrap.js +59 -23
- package/dist/cli/bootstrap.js.map +1 -1
- package/dist/cli/dev-template-watcher.d.ts +29 -0
- package/dist/cli/dev-template-watcher.d.ts.map +1 -0
- package/dist/cli/dev-template-watcher.js +38 -0
- package/dist/cli/dev-template-watcher.js.map +1 -0
- package/dist/cli/history.d.ts.map +1 -1
- package/dist/cli/history.js +5 -3
- package/dist/cli/history.js.map +1 -1
- package/dist/cli/index.js +712 -395
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/validate-flags.d.ts +29 -0
- package/dist/cli/validate-flags.d.ts.map +1 -0
- package/dist/cli/validate-flags.js +49 -0
- package/dist/cli/validate-flags.js.map +1 -0
- package/dist/compare.d.ts +1 -1
- package/dist/compare.d.ts.map +1 -1
- package/dist/compare.js +25 -23
- package/dist/compare.js.map +1 -1
- package/dist/component-ids.d.ts +25 -0
- package/dist/component-ids.d.ts.map +1 -0
- package/dist/component-ids.js +83 -0
- package/dist/component-ids.js.map +1 -0
- package/dist/config/define.d.ts +61 -0
- package/dist/config/define.d.ts.map +1 -0
- package/dist/config/define.js +64 -0
- package/dist/config/define.js.map +1 -0
- package/dist/config/errors.d.ts +32 -0
- package/dist/config/errors.d.ts.map +1 -0
- package/dist/config/errors.js +40 -0
- package/dist/config/errors.js.map +1 -0
- package/dist/config/index.d.ts +13 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +20 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/loader.d.ts +105 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +265 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/schemas.d.ts +89 -0
- package/dist/config/schemas.d.ts.map +1 -0
- package/dist/config/schemas.js +172 -0
- package/dist/config/schemas.js.map +1 -0
- package/dist/config/types.d.ts +32 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +15 -0
- package/dist/config/types.js.map +1 -0
- package/dist/deploy/cloudflare-workers.d.ts +46 -0
- package/dist/deploy/cloudflare-workers.d.ts.map +1 -0
- package/dist/deploy/cloudflare-workers.js +213 -0
- package/dist/deploy/cloudflare-workers.js.map +1 -0
- package/dist/deploy/errors.d.ts +66 -0
- package/dist/deploy/errors.d.ts.map +1 -0
- package/dist/deploy/errors.js +82 -0
- package/dist/deploy/errors.js.map +1 -0
- package/dist/deploy/index.d.ts +9 -0
- package/dist/deploy/index.d.ts.map +1 -0
- package/dist/deploy/index.js +3 -0
- package/dist/deploy/index.js.map +1 -0
- package/dist/deploy/types.d.ts +162 -0
- package/dist/deploy/types.d.ts.map +1 -0
- package/dist/deploy/types.js +2 -0
- package/dist/deploy/types.js.map +1 -0
- package/dist/fragments/create.d.ts +70 -0
- package/dist/fragments/create.d.ts.map +1 -0
- package/dist/fragments/create.js +93 -0
- package/dist/fragments/create.js.map +1 -0
- package/dist/fragments/publish.d.ts +37 -0
- package/dist/fragments/publish.d.ts.map +1 -0
- package/dist/fragments/publish.js +52 -0
- package/dist/fragments/publish.js.map +1 -0
- package/dist/fragments/save.d.ts +81 -0
- package/dist/fragments/save.d.ts.map +1 -0
- package/dist/fragments/save.js +105 -0
- package/dist/fragments/save.js.map +1 -0
- package/dist/history-recorder.d.ts +5 -5
- package/dist/history-recorder.d.ts.map +1 -1
- package/dist/history-recorder.js +4 -4
- package/dist/history-recorder.js.map +1 -1
- package/dist/history-restorer.js +2 -2
- package/dist/history-restorer.js.map +1 -1
- package/dist/history.d.ts +1 -1
- package/dist/hooks/audit-emitter.d.ts +73 -0
- package/dist/hooks/audit-emitter.d.ts.map +1 -0
- package/dist/hooks/audit-emitter.js +13 -0
- package/dist/hooks/audit-emitter.js.map +1 -0
- package/dist/hooks/context.d.ts +78 -0
- package/dist/hooks/context.d.ts.map +1 -0
- package/dist/hooks/context.js +56 -0
- package/dist/hooks/context.js.map +1 -0
- package/dist/hooks/contribution.d.ts +90 -0
- package/dist/hooks/contribution.d.ts.map +1 -0
- package/dist/hooks/contribution.js +2 -0
- package/dist/hooks/contribution.js.map +1 -0
- package/dist/hooks/dispatch.d.ts +30 -0
- package/dist/hooks/dispatch.d.ts.map +1 -0
- package/dist/hooks/dispatch.js +252 -0
- package/dist/hooks/dispatch.js.map +1 -0
- package/dist/hooks/errors.d.ts +100 -0
- package/dist/hooks/errors.d.ts.map +1 -0
- package/dist/hooks/errors.js +103 -0
- package/dist/hooks/errors.js.map +1 -0
- package/dist/hooks/index.d.ts +15 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +6 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/registry.d.ts +53 -0
- package/dist/hooks/registry.d.ts.map +1 -0
- package/dist/hooks/registry.js +139 -0
- package/dist/hooks/registry.js.map +1 -0
- package/dist/hooks/storage.d.ts +43 -0
- package/dist/hooks/storage.d.ts.map +1 -0
- package/dist/hooks/storage.js +2 -0
- package/dist/hooks/storage.js.map +1 -0
- package/dist/hooks/types.d.ts +324 -0
- package/dist/hooks/types.d.ts.map +1 -0
- package/dist/hooks/types.js +2 -0
- package/dist/hooks/types.js.map +1 -0
- package/dist/index.d.ts +26 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +49 -5
- package/dist/index.js.map +1 -1
- package/dist/locale.d.ts +5 -1
- package/dist/locale.d.ts.map +1 -1
- package/dist/locale.js +6 -2
- package/dist/locale.js.map +1 -1
- package/dist/manifest-save.d.ts +255 -0
- package/dist/manifest-save.d.ts.map +1 -0
- package/dist/manifest-save.js +260 -0
- package/dist/manifest-save.js.map +1 -0
- package/dist/manifest.d.ts +1 -2
- package/dist/manifest.d.ts.map +1 -1
- package/dist/manifest.js +43 -44
- package/dist/manifest.js.map +1 -1
- package/dist/node-floor.d.ts +3 -0
- package/dist/node-floor.d.ts.map +1 -0
- package/dist/node-floor.js +3 -0
- package/dist/node-floor.js.map +1 -0
- package/dist/pages/create.d.ts +103 -0
- package/dist/pages/create.d.ts.map +1 -0
- package/dist/pages/create.js +117 -0
- package/dist/pages/create.js.map +1 -0
- package/dist/pages/publish.d.ts +59 -0
- package/dist/pages/publish.d.ts.map +1 -0
- package/dist/pages/publish.js +78 -0
- package/dist/pages/publish.js.map +1 -0
- package/dist/pages/save.d.ts +97 -0
- package/dist/pages/save.d.ts.map +1 -0
- package/dist/pages/save.js +138 -0
- package/dist/pages/save.js.map +1 -0
- package/dist/providers/factories.d.ts +65 -0
- package/dist/providers/factories.d.ts.map +1 -0
- package/dist/providers/factories.js +189 -0
- package/dist/providers/factories.js.map +1 -0
- package/dist/publish-item.d.ts +225 -0
- package/dist/publish-item.d.ts.map +1 -0
- package/dist/publish-item.js +210 -0
- package/dist/publish-item.js.map +1 -0
- package/dist/publish-rendered.d.ts.map +1 -1
- package/dist/publish-rendered.js +75 -6
- package/dist/publish-rendered.js.map +1 -1
- package/dist/publish-renderers.d.ts +132 -0
- package/dist/publish-renderers.d.ts.map +1 -0
- package/dist/publish-renderers.js +240 -0
- package/dist/publish-renderers.js.map +1 -0
- package/dist/publish-run.d.ts +223 -0
- package/dist/publish-run.d.ts.map +1 -0
- package/dist/publish-run.js +307 -0
- package/dist/publish-run.js.map +1 -0
- package/dist/publish.d.ts.map +1 -1
- package/dist/publish.js +1 -10
- package/dist/publish.js.map +1 -1
- package/dist/render-for-analysis.d.ts +24 -0
- package/dist/render-for-analysis.d.ts.map +1 -0
- package/dist/render-for-analysis.js +146 -0
- package/dist/render-for-analysis.js.map +1 -0
- package/dist/resolver.d.ts.map +1 -1
- package/dist/resolver.js +47 -23
- package/dist/resolver.js.map +1 -1
- package/dist/runtime/archive-marker.d.ts +62 -0
- package/dist/runtime/archive-marker.d.ts.map +1 -0
- package/dist/runtime/archive-marker.js +88 -0
- package/dist/runtime/archive-marker.js.map +1 -0
- package/dist/runtime/capability-gap-warnings.d.ts +42 -0
- package/dist/runtime/capability-gap-warnings.d.ts.map +1 -0
- package/dist/runtime/capability-gap-warnings.js +28 -0
- package/dist/runtime/capability-gap-warnings.js.map +1 -0
- package/dist/runtime/redirects-emit.d.ts +93 -0
- package/dist/runtime/redirects-emit.d.ts.map +1 -0
- package/dist/runtime/redirects-emit.js +89 -0
- package/dist/runtime/redirects-emit.js.map +1 -0
- package/dist/runtime/runtime-capabilities.d.ts +79 -0
- package/dist/runtime/runtime-capabilities.d.ts.map +1 -0
- package/dist/runtime/runtime-capabilities.js +60 -0
- package/dist/runtime/runtime-capabilities.js.map +1 -0
- package/dist/save-etag.d.ts +69 -0
- package/dist/save-etag.d.ts.map +1 -0
- package/dist/save-etag.js +118 -0
- package/dist/save-etag.js.map +1 -0
- package/dist/site-loader.d.ts +42 -4
- package/dist/site-loader.d.ts.map +1 -1
- package/dist/site-loader.js +27 -8
- package/dist/site-loader.js.map +1 -1
- package/dist/targets.d.ts +21 -12
- package/dist/targets.d.ts.map +1 -1
- package/dist/targets.js +27 -95
- package/dist/targets.js.map +1 -1
- package/dist/testing/admin-cache-contract.d.ts +52 -0
- package/dist/testing/admin-cache-contract.d.ts.map +1 -0
- package/dist/testing/admin-cache-contract.js +203 -0
- package/dist/testing/admin-cache-contract.js.map +1 -0
- package/dist/testing/index.d.ts +11 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +11 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/transforms/factories.d.ts +16 -0
- package/dist/transforms/factories.d.ts.map +1 -0
- package/dist/transforms/factories.js +18 -0
- package/dist/transforms/factories.js.map +1 -0
- package/dist/transforms/index.d.ts +10 -17
- package/dist/transforms/index.d.ts.map +1 -1
- package/dist/transforms/index.js +4 -28
- package/dist/transforms/index.js.map +1 -1
- package/dist/transforms/sharp.d.ts +15 -1
- package/dist/transforms/sharp.d.ts.map +1 -1
- package/dist/transforms/sharp.js +34 -20
- package/dist/transforms/sharp.js.map +1 -1
- package/dist/types.d.ts +379 -52
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +20 -1
- package/dist/types.js.map +1 -1
- package/dist/validation/alt-required-walker.d.ts +27 -0
- package/dist/validation/alt-required-walker.d.ts.map +1 -0
- package/dist/validation/alt-required-walker.js +108 -0
- package/dist/validation/alt-required-walker.js.map +1 -0
- package/dist/validation/default-registry.d.ts +12 -0
- package/dist/validation/default-registry.d.ts.map +1 -0
- package/dist/validation/default-registry.js +55 -0
- package/dist/validation/default-registry.js.map +1 -0
- package/dist/validation/publish-audit.d.ts +44 -0
- package/dist/validation/publish-audit.d.ts.map +1 -0
- package/dist/validation/publish-audit.js +64 -0
- package/dist/validation/publish-audit.js.map +1 -0
- package/dist/validation/registry.d.ts +23 -0
- package/dist/validation/registry.d.ts.map +1 -0
- package/dist/validation/registry.js +15 -0
- package/dist/validation/registry.js.map +1 -0
- package/dist/validation/save-delta.d.ts +46 -0
- package/dist/validation/save-delta.d.ts.map +1 -0
- package/dist/validation/save-delta.js +57 -0
- package/dist/validation/save-delta.js.map +1 -0
- package/dist/validation/scanner.d.ts +91 -0
- package/dist/validation/scanner.d.ts.map +1 -0
- package/dist/validation/scanner.js +327 -0
- package/dist/validation/scanner.js.map +1 -0
- package/dist/validation/template-impact.d.ts +52 -0
- package/dist/validation/template-impact.d.ts.map +1 -0
- package/dist/validation/template-impact.js +53 -0
- package/dist/validation/template-impact.js.map +1 -0
- package/dist/validation/types.d.ts +123 -0
- package/dist/validation/types.d.ts.map +1 -0
- package/dist/validation/types.js +7 -0
- package/dist/validation/types.js.map +1 -0
- package/dist/validation/validators/accessibility.d.ts +3 -0
- package/dist/validation/validators/accessibility.d.ts.map +1 -0
- package/dist/validation/validators/accessibility.js +106 -0
- package/dist/validation/validators/accessibility.js.map +1 -0
- package/dist/validation/validators/aliasof-points-to-archived.d.ts +40 -0
- package/dist/validation/validators/aliasof-points-to-archived.d.ts.map +1 -0
- package/dist/validation/validators/aliasof-points-to-archived.js +34 -0
- package/dist/validation/validators/aliasof-points-to-archived.js.map +1 -0
- package/dist/validation/validators/alt-required.d.ts +3 -0
- package/dist/validation/validators/alt-required.d.ts.map +1 -0
- package/dist/validation/validators/alt-required.js +118 -0
- package/dist/validation/validators/alt-required.js.map +1 -0
- package/dist/validation/validators/archive-not-supported-on-target.d.ts +3 -0
- package/dist/validation/validators/archive-not-supported-on-target.d.ts.map +1 -0
- package/dist/validation/validators/archive-not-supported-on-target.js +38 -0
- package/dist/validation/validators/archive-not-supported-on-target.js.map +1 -0
- package/dist/validation/validators/broken-links.d.ts +3 -0
- package/dist/validation/validators/broken-links.d.ts.map +1 -0
- package/dist/validation/validators/broken-links.js +190 -0
- package/dist/validation/validators/broken-links.js.map +1 -0
- package/dist/validation/validators/circular-alias.d.ts +36 -0
- package/dist/validation/validators/circular-alias.d.ts.map +1 -0
- package/dist/validation/validators/circular-alias.js +63 -0
- package/dist/validation/validators/circular-alias.js.map +1 -0
- package/dist/validation/validators/circular-fragment.d.ts +15 -0
- package/dist/validation/validators/circular-fragment.d.ts.map +1 -0
- package/dist/validation/validators/circular-fragment.js +97 -0
- package/dist/validation/validators/circular-fragment.js.map +1 -0
- package/dist/validation/validators/dangling-alias.d.ts +38 -0
- package/dist/validation/validators/dangling-alias.d.ts.map +1 -0
- package/dist/validation/validators/dangling-alias.js +31 -0
- package/dist/validation/validators/dangling-alias.js.map +1 -0
- package/dist/validation/validators/deploy-target-type-supported.d.ts +3 -0
- package/dist/validation/validators/deploy-target-type-supported.d.ts.map +1 -0
- package/dist/validation/validators/deploy-target-type-supported.js +32 -0
- package/dist/validation/validators/deploy-target-type-supported.js.map +1 -0
- package/dist/validation/validators/dynamic-route-conflict.d.ts +18 -0
- package/dist/validation/validators/dynamic-route-conflict.d.ts.map +1 -0
- package/dist/validation/validators/dynamic-route-conflict.js +80 -0
- package/dist/validation/validators/dynamic-route-conflict.js.map +1 -0
- package/dist/validation/validators/html-validity.d.ts +3 -0
- package/dist/validation/validators/html-validity.d.ts.map +1 -0
- package/dist/validation/validators/html-validity.js +89 -0
- package/dist/validation/validators/html-validity.js.map +1 -0
- package/dist/validation/validators/orphaned-locale-file.d.ts +21 -0
- package/dist/validation/validators/orphaned-locale-file.d.ts.map +1 -0
- package/dist/validation/validators/orphaned-locale-file.js +84 -0
- package/dist/validation/validators/orphaned-locale-file.js.map +1 -0
- package/dist/validation/validators/referenced-archived-without-alias.d.ts +3 -0
- package/dist/validation/validators/referenced-archived-without-alias.d.ts.map +1 -0
- package/dist/validation/validators/referenced-archived-without-alias.js +65 -0
- package/dist/validation/validators/referenced-archived-without-alias.js.map +1 -0
- package/dist/validation/validators/referenced-asset-exists.d.ts +13 -0
- package/dist/validation/validators/referenced-asset-exists.d.ts.map +1 -0
- package/dist/validation/validators/referenced-asset-exists.js +80 -0
- package/dist/validation/validators/referenced-asset-exists.js.map +1 -0
- package/dist/validation/validators/referenced-fragment-exists.d.ts +9 -0
- package/dist/validation/validators/referenced-fragment-exists.d.ts.map +1 -0
- package/dist/validation/validators/referenced-fragment-exists.js +52 -0
- package/dist/validation/validators/referenced-fragment-exists.js.map +1 -0
- package/dist/validation/validators/referenced-template-exists.d.ts +10 -0
- package/dist/validation/validators/referenced-template-exists.d.ts.map +1 -0
- package/dist/validation/validators/referenced-template-exists.js +74 -0
- package/dist/validation/validators/referenced-template-exists.js.map +1 -0
- package/dist/validation/validators/schema-conformance.d.ts +17 -0
- package/dist/validation/validators/schema-conformance.d.ts.map +1 -0
- package/dist/validation/validators/schema-conformance.js +94 -0
- package/dist/validation/validators/schema-conformance.js.map +1 -0
- package/dist/validation/validators/target-deploy-coverage.d.ts +3 -0
- package/dist/validation/validators/target-deploy-coverage.d.ts.map +1 -0
- package/dist/validation/validators/target-deploy-coverage.js +37 -0
- package/dist/validation/validators/target-deploy-coverage.js.map +1 -0
- package/dist/validation/validators/unused-fragment.d.ts +16 -0
- package/dist/validation/validators/unused-fragment.d.ts.map +1 -0
- package/dist/validation/validators/unused-fragment.js +86 -0
- package/dist/validation/validators/unused-fragment.js.map +1 -0
- package/package.json +54 -31
- package/admin-dist/assets/index-BO9-CXmW.css +0 -1
- package/admin-dist/assets/index-Ufu8zZH_.js +0 -668
- package/admin-dist/assets/rolldown-runtime-COnpUsM8.js +0 -1
- package/admin-dist/assets/vendor-rjsf-HKBAjOmQ.js +0 -32
- package/admin-dist/assets/vendor-tiptap-IyO99U4R.js +0 -142
- package/admin-dist/assets/vendor-vue-D3wBSmDf.js +0 -1
- package/dist/publish-locale.d.ts +0 -44
- package/dist/publish-locale.d.ts.map +0 -1
- package/dist/publish-locale.js +0 -103
- package/dist/publish-locale.js.map +0 -1
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Alt-text adapter factory — the single seam between configuration
|
|
3
|
+
* (gazetta + site + target manifests) and adapter construction.
|
|
4
|
+
*
|
|
5
|
+
* Per Phase 4 of the Path X migration: operator constructs the
|
|
6
|
+
* `AIProvider` instance via a factory call (`anthropicProvider({...})`)
|
|
7
|
+
* inside `defineSite({...})` or `defineGazetta({...})`. The resolver
|
|
8
|
+
* walks the three-rung chain (target → site → gazetta) and the factory
|
|
9
|
+
* delegates to `provider.altText(taskConfig)` to build the adapter.
|
|
10
|
+
*
|
|
11
|
+
* No env-var reads in this module — operators pass `process.env.X!` to
|
|
12
|
+
* the provider factory at config-eval. No SDK side effects at boot:
|
|
13
|
+
* provider authors document construction-time semantics; convention is
|
|
14
|
+
* that providers build SDK config objects at construction and defer
|
|
15
|
+
* network/auth to first method call.
|
|
16
|
+
*
|
|
17
|
+
* Two functions:
|
|
18
|
+
*
|
|
19
|
+
* - `buildAltAdapter(site, target, gazetta?)` — returns a fully-
|
|
20
|
+
* constructed `AltTextAdapter`. Returns `nullAltAdapter` when no
|
|
21
|
+
* adapter is configured anywhere in the chain.
|
|
22
|
+
*
|
|
23
|
+
* - `isAltAdapterConfigured(site, target, gazetta?)` — pure
|
|
24
|
+
* introspection for the capability check exposed via `/api/targets`.
|
|
25
|
+
* Doesn't construct an adapter.
|
|
26
|
+
*
|
|
27
|
+
* # Why split into two functions
|
|
28
|
+
*
|
|
29
|
+
* The factory and the capability check answer different questions:
|
|
30
|
+
* - Factory: "give me an adapter to call right now"
|
|
31
|
+
* - Capability: "should the UI render AI affordances on this target?"
|
|
32
|
+
*
|
|
33
|
+
* The capability check shouldn't allocate SDK clients (every call to
|
|
34
|
+
* `/api/targets` would). Splitting at this seam is SRP.
|
|
35
|
+
*/
|
|
36
|
+
import { resolveAltConfig } from './config.js';
|
|
37
|
+
import { nullAltAdapter } from './null-adapter.js';
|
|
38
|
+
/**
|
|
39
|
+
* True when the resolved alt-text config has all required pieces.
|
|
40
|
+
* Pure: returns the structural state — does NOT verify the credential
|
|
41
|
+
* works (no network call). Verification surfaces at first use of the route.
|
|
42
|
+
*/
|
|
43
|
+
export function isAltAdapterConfigured(site, target, gazetta) {
|
|
44
|
+
return resolveAltConfig(site, target, gazetta) !== null;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Construct the alt-text adapter for the resolved config. Returns the
|
|
48
|
+
* null adapter when no provider is configured at any layer.
|
|
49
|
+
*
|
|
50
|
+
* Always returns an `AltTextAdapter` — consumers never null-check the
|
|
51
|
+
* factory's return value. The null adapter throws if `generate()` is
|
|
52
|
+
* called, but that only happens if a consumer skips the
|
|
53
|
+
* `supports()` / `available()` capability check.
|
|
54
|
+
*/
|
|
55
|
+
export function buildAltAdapter(site, target, gazetta) {
|
|
56
|
+
const resolved = resolveAltConfig(site, target, gazetta);
|
|
57
|
+
if (!resolved)
|
|
58
|
+
return nullAltAdapter;
|
|
59
|
+
// Build the per-task adapter via the provider's `.altText()` builder.
|
|
60
|
+
// Provider supplies transport (apiKey, baseUrl, etc.) from its
|
|
61
|
+
// construction; we supply per-task config (model, systemPrompt,
|
|
62
|
+
// maxTokens) from the resolver chain.
|
|
63
|
+
return resolved.provider.altText({
|
|
64
|
+
model: resolved.model,
|
|
65
|
+
systemPrompt: resolved.systemPrompt ?? undefined,
|
|
66
|
+
maxTokens: resolved.maxTokens,
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../../src/alt/factory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAIlD;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CACpC,IAA0C,EAC1C,MAAiD,EACjD,OAAiD;IAEjD,OAAO,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAA;AACzD,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,eAAe,CAC7B,IAA0C,EAC1C,MAAiD,EACjD,OAAiD;IAEjD,MAAM,QAAQ,GAAG,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,CAAA;IACxD,IAAI,CAAC,QAAQ;QAAE,OAAO,cAAc,CAAA;IAEpC,sEAAsE;IACtE,+DAA+D;IAC/D,gEAAgE;IAChE,sCAAsC;IACtC,OAAO,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC;QAC/B,KAAK,EAAE,QAAQ,CAAC,KAAK;QACrB,YAAY,EAAE,QAAQ,CAAC,YAAY,IAAI,SAAS;QAChD,SAAS,EAAE,QAAQ,CAAC,SAAS;KAC9B,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"null-adapter.d.ts","sourceRoot":"","sources":["../../src/alt/null-adapter.ts"],"names":[],"mappings":"AAiCA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAElD,eAAO,MAAM,cAAc,EAAE,cAU5B,CAAA"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `nullAltAdapter` — the safe default returned by the factory when no
|
|
3
|
+
* adapter is configured for a target.
|
|
4
|
+
*
|
|
5
|
+
* # Why this exists (vs. the factory returning null)
|
|
6
|
+
*
|
|
7
|
+
* The factory `buildAltAdapter(target)` could return `AltTextAdapter |
|
|
8
|
+
* null`, forcing every consumer to null-check. That would be the
|
|
9
|
+
* stub-on-the-interface anti-pattern in disguise — every caller
|
|
10
|
+
* writes `if (adapter) { ... }`, which is dead code in 99% of cases
|
|
11
|
+
* (the suggester wraps the adapter and handles the unconfigured case
|
|
12
|
+
* via `available()` returning false).
|
|
13
|
+
*
|
|
14
|
+
* Instead, the factory always returns an `AltTextAdapter`. When
|
|
15
|
+
* unconfigured, it returns this null implementation: `supports()`
|
|
16
|
+
* always false, `generate()` throws `AIAdapterUnavailableError` if
|
|
17
|
+
* ever called. The suggester's `available(mime)` checks `supports`
|
|
18
|
+
* first and returns false — so `generate` is never reached on the
|
|
19
|
+
* null adapter in practice. The throw is a defense-in-depth signal
|
|
20
|
+
* that something has gone wrong if it IS reached.
|
|
21
|
+
*
|
|
22
|
+
* This is the LSP validation seam: a real adapter, full contract
|
|
23
|
+
* surface, no nulls in the type system. Tests can substitute it for
|
|
24
|
+
* any consumer and verify the consumer handles "unavailable" correctly
|
|
25
|
+
* via `supports`-returns-false rather than via null-checks.
|
|
26
|
+
*
|
|
27
|
+
* # SOLID
|
|
28
|
+
*
|
|
29
|
+
* - LSP: full contract; `supports`/`generate` return real values
|
|
30
|
+
* - SRP: single concern — represent "no adapter configured"
|
|
31
|
+
* - OCP: not relevant (no extension point here)
|
|
32
|
+
*/
|
|
33
|
+
import { AIAdapterUnavailableError } from '../ai/errors.js';
|
|
34
|
+
export const nullAltAdapter = {
|
|
35
|
+
name: 'null',
|
|
36
|
+
supports() {
|
|
37
|
+
return false;
|
|
38
|
+
},
|
|
39
|
+
async generate() {
|
|
40
|
+
throw new AIAdapterUnavailableError('No AI alt-text adapter is configured. Add `altText:` to site.config.ts or set provider credentials in .env.local.');
|
|
41
|
+
},
|
|
42
|
+
};
|
|
43
|
+
//# sourceMappingURL=null-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"null-adapter.js","sourceRoot":"","sources":["../../src/alt/null-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,OAAO,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAA;AAG3D,MAAM,CAAC,MAAM,cAAc,GAAmB;IAC5C,IAAI,EAAE,MAAM;IACZ,QAAQ;QACN,OAAO,KAAK,CAAA;IACd,CAAC;IACD,KAAK,CAAC,QAAQ;QACZ,MAAM,IAAI,yBAAyB,CACjC,mHAAmH,CACpH,CAAA;IACH,CAAC;CACF,CAAA"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { AIProvider } from '../ai/provider.js';
|
|
2
|
+
import type { AltTextAdapter } from './adapter.js';
|
|
3
|
+
/** Default base URL when running Ollama locally with default settings. */
|
|
4
|
+
export declare const OLLAMA_DEFAULT_BASE_URL = "http://localhost:11434";
|
|
5
|
+
/** Default model. Ollama Library publishes 11B and 90B variants of llama3.2-vision. */
|
|
6
|
+
export declare const OLLAMA_DEFAULT_MODEL = "llama3.2-vision:11b";
|
|
7
|
+
/**
|
|
8
|
+
* Ollama transport-only options. Per Path X (transport-vs-task split).
|
|
9
|
+
* Ollama needs no API key; baseUrl is the only transport knob.
|
|
10
|
+
*/
|
|
11
|
+
export interface OllamaTransportOptions {
|
|
12
|
+
/** Base URL of the Ollama server. Defaults to {@link OLLAMA_DEFAULT_BASE_URL}. */
|
|
13
|
+
baseUrl?: string;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Internal type for `createOllamaAltAdapter` callers (tests). Combines
|
|
17
|
+
* transport with per-task config; new code goes through
|
|
18
|
+
* `ollamaProvider(transport).altText(taskConfig)`.
|
|
19
|
+
*/
|
|
20
|
+
export interface OllamaAltAdapterOptions extends OllamaTransportOptions {
|
|
21
|
+
/** Model ID. Defaults to {@link OLLAMA_DEFAULT_MODEL}. */
|
|
22
|
+
model?: string;
|
|
23
|
+
/** Operator-supplied system prompt; prepended to system-composed prompt. */
|
|
24
|
+
systemPrompt?: string;
|
|
25
|
+
/** Generation token cap. Ollama doesn't expose it directly, but the
|
|
26
|
+
* scaffold passes it through to keep the contract uniform. */
|
|
27
|
+
maxTokens?: number;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Construct the Ollama alt-text adapter. Internal factory — kept public
|
|
31
|
+
* for tests + advanced wiring. Operator-facing config goes through
|
|
32
|
+
* `ollamaProvider(transport).altText(taskConfig)` (Path X).
|
|
33
|
+
*/
|
|
34
|
+
export declare function createOllamaAltAdapter(opts?: OllamaAltAdapterOptions): AltTextAdapter;
|
|
35
|
+
/**
|
|
36
|
+
* Operator-facing Ollama provider. See `anthropicProvider` for the full
|
|
37
|
+
* Path X rationale. Ollama needs no API key; transport is just baseUrl.
|
|
38
|
+
*/
|
|
39
|
+
export declare function ollamaProvider(transport?: OllamaTransportOptions): AIProvider;
|
|
40
|
+
//# sourceMappingURL=ollama.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ollama.d.ts","sourceRoot":"","sources":["../../src/alt/ollama.ts"],"names":[],"mappings":"AAqCA,OAAO,KAAK,EAAE,UAAU,EAAqB,MAAM,mBAAmB,CAAA;AAEtE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAUlD,0EAA0E;AAC1E,eAAO,MAAM,uBAAuB,2BAA2B,CAAA;AAE/D,uFAAuF;AACvF,eAAO,MAAM,oBAAoB,wBAAwB,CAAA;AAIzD;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACrC,kFAAkF;IAClF,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED;;;;GAIG;AACH,MAAM,WAAW,uBAAwB,SAAQ,sBAAsB;IACrE,0DAA0D;IAC1D,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,4EAA4E;IAC5E,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB;mEAC+D;IAC/D,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAQD;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,GAAE,uBAA4B,GAAG,cAAc,CAqEzF;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,SAAS,GAAE,sBAA2B,GAAG,UAAU,CAYjF"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ollama adapter — alt-text via the local `/api/chat` endpoint.
|
|
3
|
+
*
|
|
4
|
+
* # Why no SDK
|
|
5
|
+
*
|
|
6
|
+
* Ollama's API is a single endpoint, no auth, no streaming negotiation,
|
|
7
|
+
* no schema beyond simple JSON. The official `ollama` npm SDK exists
|
|
8
|
+
* but adds little value over raw `fetch` for this single-call use case.
|
|
9
|
+
* Skipping the SDK keeps adapter dependencies minimal.
|
|
10
|
+
*
|
|
11
|
+
* # Defaults
|
|
12
|
+
*
|
|
13
|
+
* - Base URL: `http://localhost:11434` (Ollama's documented default).
|
|
14
|
+
* Operators running Ollama on a different host configure via
|
|
15
|
+
* `baseUrl` on the transport.
|
|
16
|
+
* - Model: `llama3.2-vision:11b`. The 11B variant is the entry-level
|
|
17
|
+
* size; `:90b` is also available for operators who want better
|
|
18
|
+
* description quality at higher GPU/RAM cost.
|
|
19
|
+
*
|
|
20
|
+
* # API contract details (verified against Ollama API docs)
|
|
21
|
+
*
|
|
22
|
+
* - Endpoint: `POST /api/chat` (chat-style fits the system+user pattern).
|
|
23
|
+
* - Images are base64 strings in the per-message `images` array.
|
|
24
|
+
* Different from Anthropic and OpenAI shapes — same adapter
|
|
25
|
+
* abstraction holds via the scaffold.
|
|
26
|
+
* - Response: `{ message: { content: "..." }, done: true, ... }`
|
|
27
|
+
* - Auth: none for local install
|
|
28
|
+
* - AbortSignal: standard fetch — `fetch(url, { signal })`. Errors
|
|
29
|
+
* surface as `Error` with `name: 'AbortError'`.
|
|
30
|
+
*
|
|
31
|
+
* # SOLID
|
|
32
|
+
*
|
|
33
|
+
* - Same lenses as Anthropic / OpenAI — orchestration via
|
|
34
|
+
* `ai/adapter-scaffold.ts`, Ollama-specific request/response/error
|
|
35
|
+
* shape here only.
|
|
36
|
+
*/
|
|
37
|
+
import { AIAdapterFailedError, AIInvalidResponseError } from '../ai/errors.js';
|
|
38
|
+
import { buildAltAdapterFromScaffold } from '../ai/adapter-scaffold.js';
|
|
39
|
+
const OLLAMA_REFUSAL_MARKERS = [
|
|
40
|
+
// llama3.2-vision tends to refuse with these patterns more than
|
|
41
|
+
// saas providers; markers maintained per [refusal.ts] convention.
|
|
42
|
+
"i'm not able to process this image",
|
|
43
|
+
'i am not able to process this image',
|
|
44
|
+
'sorry, i cannot',
|
|
45
|
+
];
|
|
46
|
+
/** Default base URL when running Ollama locally with default settings. */
|
|
47
|
+
export const OLLAMA_DEFAULT_BASE_URL = 'http://localhost:11434';
|
|
48
|
+
/** Default model. Ollama Library publishes 11B and 90B variants of llama3.2-vision. */
|
|
49
|
+
export const OLLAMA_DEFAULT_MODEL = 'llama3.2-vision:11b';
|
|
50
|
+
const OLLAMA_SUPPORTED_MIMES = new Set(['image/jpeg', 'image/png']);
|
|
51
|
+
/**
|
|
52
|
+
* Construct the Ollama alt-text adapter. Internal factory — kept public
|
|
53
|
+
* for tests + advanced wiring. Operator-facing config goes through
|
|
54
|
+
* `ollamaProvider(transport).altText(taskConfig)` (Path X).
|
|
55
|
+
*/
|
|
56
|
+
export function createOllamaAltAdapter(opts = {}) {
|
|
57
|
+
const baseUrl = (opts.baseUrl ?? OLLAMA_DEFAULT_BASE_URL).replace(/\/+$/, '');
|
|
58
|
+
const model = opts.model ?? OLLAMA_DEFAULT_MODEL;
|
|
59
|
+
const endpoint = `${baseUrl}/api/chat`;
|
|
60
|
+
return buildAltAdapterFromScaffold({
|
|
61
|
+
name: 'ollama',
|
|
62
|
+
supportedMimes: OLLAMA_SUPPORTED_MIMES,
|
|
63
|
+
operatorSystemPrompt: opts.systemPrompt,
|
|
64
|
+
operatorMaxTokens: opts.maxTokens,
|
|
65
|
+
refusalMarkers: OLLAMA_REFUSAL_MARKERS,
|
|
66
|
+
isAbortError: err => err instanceof Error && err.name === 'AbortError',
|
|
67
|
+
errorContextSuffix: `Is Ollama running at ${baseUrl}?`,
|
|
68
|
+
async callProvider({ bytes, mime: _mime, systemPrompt, signal }) {
|
|
69
|
+
const imageB64 = Buffer.from(bytes).toString('base64');
|
|
70
|
+
const body = {
|
|
71
|
+
model,
|
|
72
|
+
messages: [
|
|
73
|
+
{ role: 'system', content: systemPrompt },
|
|
74
|
+
{
|
|
75
|
+
role: 'user',
|
|
76
|
+
content: 'Describe this image for use as alt text.',
|
|
77
|
+
images: [imageB64],
|
|
78
|
+
},
|
|
79
|
+
],
|
|
80
|
+
stream: false,
|
|
81
|
+
};
|
|
82
|
+
const res = await fetch(endpoint, {
|
|
83
|
+
method: 'POST',
|
|
84
|
+
headers: { 'Content-Type': 'application/json' },
|
|
85
|
+
body: JSON.stringify(body),
|
|
86
|
+
signal,
|
|
87
|
+
});
|
|
88
|
+
if (!res.ok) {
|
|
89
|
+
// Ollama returns plain-text errors for connection-level issues
|
|
90
|
+
// and JSON `{ error: "..." }` for model-level issues. Surface
|
|
91
|
+
// both as AIAdapterFailedError; the message includes status
|
|
92
|
+
// code so logs can disambiguate (404 → model not pulled, 400
|
|
93
|
+
// → malformed request, etc.).
|
|
94
|
+
let detail = `HTTP ${res.status}`;
|
|
95
|
+
try {
|
|
96
|
+
const errorBody = await res.text();
|
|
97
|
+
if (errorBody)
|
|
98
|
+
detail += `: ${errorBody.slice(0, 200)}`;
|
|
99
|
+
}
|
|
100
|
+
catch {
|
|
101
|
+
// Body unreadable; status code alone is the diagnostic.
|
|
102
|
+
}
|
|
103
|
+
throw new AIAdapterFailedError(`Ollama HTTP error: ${detail}`);
|
|
104
|
+
}
|
|
105
|
+
let parsed;
|
|
106
|
+
try {
|
|
107
|
+
parsed = (await res.json());
|
|
108
|
+
}
|
|
109
|
+
catch (err) {
|
|
110
|
+
throw new AIInvalidResponseError(`Ollama returned non-JSON response: ${err instanceof Error ? err.message : 'unknown'}`);
|
|
111
|
+
}
|
|
112
|
+
if (parsed.error) {
|
|
113
|
+
throw new AIAdapterFailedError(`Ollama: ${parsed.error}`);
|
|
114
|
+
}
|
|
115
|
+
if (typeof parsed.message?.content !== 'string') {
|
|
116
|
+
throw new AIInvalidResponseError('Ollama response had no message.content');
|
|
117
|
+
}
|
|
118
|
+
return parsed.message.content;
|
|
119
|
+
},
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Operator-facing Ollama provider. See `anthropicProvider` for the full
|
|
124
|
+
* Path X rationale. Ollama needs no API key; transport is just baseUrl.
|
|
125
|
+
*/
|
|
126
|
+
export function ollamaProvider(transport = {}) {
|
|
127
|
+
return {
|
|
128
|
+
name: 'ollama',
|
|
129
|
+
altText(taskConfig) {
|
|
130
|
+
return createOllamaAltAdapter({
|
|
131
|
+
...transport,
|
|
132
|
+
model: taskConfig.model,
|
|
133
|
+
systemPrompt: taskConfig.systemPrompt,
|
|
134
|
+
maxTokens: taskConfig.maxTokens,
|
|
135
|
+
});
|
|
136
|
+
},
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=ollama.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ollama.js","sourceRoot":"","sources":["../../src/alt/ollama.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type { AIProvider } from '../ai/provider.js';
|
|
2
|
+
import type { AltTextAdapter } from './adapter.js';
|
|
3
|
+
/**
|
|
4
|
+
* Default model. Vision-capable across OpenAI's gpt-4o family. Sites
|
|
5
|
+
* with high-volume asset libraries should benchmark cost against
|
|
6
|
+
* actual workload.
|
|
7
|
+
*/
|
|
8
|
+
export declare const OPENAI_DEFAULT_MODEL = "gpt-4o-mini";
|
|
9
|
+
/**
|
|
10
|
+
* OpenAI transport-only options. Per Path X (transport-vs-task split).
|
|
11
|
+
*/
|
|
12
|
+
export interface OpenAITransportOptions {
|
|
13
|
+
apiKey: string;
|
|
14
|
+
/** Optional override of the SDK base URL — for tests pointing at msw or proxy setups. */
|
|
15
|
+
baseURL?: string;
|
|
16
|
+
/**
|
|
17
|
+
* Override the SDK's retry count (default 2). Tests pass 0 to keep
|
|
18
|
+
* runs deterministic and fast.
|
|
19
|
+
*/
|
|
20
|
+
maxRetries?: number;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Internal type for `createOpenAIAltAdapter` callers (tests). Combines
|
|
24
|
+
* transport with per-task config; new code goes through
|
|
25
|
+
* `openaiProvider(transport).altText(taskConfig)`.
|
|
26
|
+
*/
|
|
27
|
+
export interface OpenAIAltAdapterOptions extends OpenAITransportOptions {
|
|
28
|
+
/** Model ID; defaults to {@link OPENAI_DEFAULT_MODEL}. */
|
|
29
|
+
model?: string;
|
|
30
|
+
/** Operator-supplied system prompt; prepended to system-composed prompt. */
|
|
31
|
+
systemPrompt?: string;
|
|
32
|
+
/** Generation token cap; provider derives from maxChars when absent. */
|
|
33
|
+
maxTokens?: number;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Construct the OpenAI alt-text adapter. Internal factory — kept public
|
|
37
|
+
* for tests + advanced wiring. Operator-facing config goes through
|
|
38
|
+
* `openaiProvider(transport).altText(taskConfig)` (Path X).
|
|
39
|
+
*/
|
|
40
|
+
export declare function createOpenAIAltAdapter(opts: OpenAIAltAdapterOptions): AltTextAdapter;
|
|
41
|
+
/**
|
|
42
|
+
* Operator-facing OpenAI provider. See `anthropicProvider` for the full
|
|
43
|
+
* Path X rationale.
|
|
44
|
+
*/
|
|
45
|
+
export declare function openaiProvider(transport: OpenAITransportOptions): AIProvider;
|
|
46
|
+
//# sourceMappingURL=openai.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../src/alt/openai.ts"],"names":[],"mappings":"AAoCA,OAAO,KAAK,EAAE,UAAU,EAAqB,MAAM,mBAAmB,CAAA;AAEtE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAYlD;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,gBAAgB,CAAA;AAIjD;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,CAAA;IACd,yFAAyF;IACzF,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED;;;;GAIG;AACH,MAAM,WAAW,uBAAwB,SAAQ,sBAAsB;IACrE,0DAA0D;IAC1D,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,4EAA4E;IAC5E,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,wEAAwE;IACxE,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAMD;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,uBAAuB,GAAG,cAAc,CAwCpF;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,sBAAsB,GAAG,UAAU,CAe5E"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenAI adapter — alt-text via the `chat.completions.create` vision API.
|
|
3
|
+
*
|
|
4
|
+
* # Defaults
|
|
5
|
+
*
|
|
6
|
+
* - Model: `gpt-4o-mini` — vision-capable, well-supported. Note that
|
|
7
|
+
* OpenAI's vision pricing is non-trivial: while gpt-4o-mini is
|
|
8
|
+
* cheaper per text token than gpt-4o, vision token cost differs
|
|
9
|
+
* and the math is workload-dependent. Sites comparing costs
|
|
10
|
+
* should benchmark against their actual asset library.
|
|
11
|
+
*
|
|
12
|
+
* # API contract details (verified against `openai` SDK v6+)
|
|
13
|
+
*
|
|
14
|
+
* - Image content uses `{ type: 'image_url', image_url: { url } }`.
|
|
15
|
+
* The URL is a base64 data URL: `data:{mime};base64,{data}`.
|
|
16
|
+
* - Accepted MIMEs: JPEG, PNG, GIF, WebP. After `prepareForVision`
|
|
17
|
+
* our bytes are JPEG or PNG.
|
|
18
|
+
* - System prompt is a `role: 'system'` message (not a top-level
|
|
19
|
+
* parameter like Anthropic). User message contains the image.
|
|
20
|
+
* - `max_tokens` is optional but the scaffold sets it (operator
|
|
21
|
+
* override OR derived from maxChars).
|
|
22
|
+
*
|
|
23
|
+
* # AbortSignal
|
|
24
|
+
*
|
|
25
|
+
* - Passed via `chat.completions.create(body, { signal })`. SDK throws
|
|
26
|
+
* `APIUserAbortError` on abort; scaffold's `isAbortError` recognizes
|
|
27
|
+
* it so the suggester can return null on cancellation.
|
|
28
|
+
*
|
|
29
|
+
* # SOLID
|
|
30
|
+
*
|
|
31
|
+
* - Same lenses as Anthropic adapter — orchestration via
|
|
32
|
+
* `ai/adapter-scaffold.ts`, OpenAI-specific request/response
|
|
33
|
+
* shape here only.
|
|
34
|
+
*/
|
|
35
|
+
import OpenAI from 'openai';
|
|
36
|
+
import { AIInvalidResponseError } from '../ai/errors.js';
|
|
37
|
+
import { buildAltAdapterFromScaffold } from '../ai/adapter-scaffold.js';
|
|
38
|
+
/**
|
|
39
|
+
* OpenAI-specific refusal phrases. Layered on top of the shared list
|
|
40
|
+
* in `ai/refusal.ts`.
|
|
41
|
+
*/
|
|
42
|
+
const OPENAI_REFUSAL_MARKERS = [
|
|
43
|
+
"i'm sorry, i can't assist",
|
|
44
|
+
"i can't assist with that",
|
|
45
|
+
'i am unable to assist',
|
|
46
|
+
];
|
|
47
|
+
/**
|
|
48
|
+
* Default model. Vision-capable across OpenAI's gpt-4o family. Sites
|
|
49
|
+
* with high-volume asset libraries should benchmark cost against
|
|
50
|
+
* actual workload.
|
|
51
|
+
*/
|
|
52
|
+
export const OPENAI_DEFAULT_MODEL = 'gpt-4o-mini';
|
|
53
|
+
const OPENAI_SUPPORTED_MIMES = new Set(['image/jpeg', 'image/png', 'image/gif', 'image/webp']);
|
|
54
|
+
function toBase64DataUrl(bytes, mime) {
|
|
55
|
+
return `data:${mime};base64,${Buffer.from(bytes).toString('base64')}`;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Construct the OpenAI alt-text adapter. Internal factory — kept public
|
|
59
|
+
* for tests + advanced wiring. Operator-facing config goes through
|
|
60
|
+
* `openaiProvider(transport).altText(taskConfig)` (Path X).
|
|
61
|
+
*/
|
|
62
|
+
export function createOpenAIAltAdapter(opts) {
|
|
63
|
+
const client = new OpenAI({
|
|
64
|
+
apiKey: opts.apiKey,
|
|
65
|
+
baseURL: opts.baseURL,
|
|
66
|
+
maxRetries: opts.maxRetries,
|
|
67
|
+
});
|
|
68
|
+
const model = opts.model ?? OPENAI_DEFAULT_MODEL;
|
|
69
|
+
return buildAltAdapterFromScaffold({
|
|
70
|
+
name: 'openai',
|
|
71
|
+
supportedMimes: OPENAI_SUPPORTED_MIMES,
|
|
72
|
+
operatorSystemPrompt: opts.systemPrompt,
|
|
73
|
+
operatorMaxTokens: opts.maxTokens,
|
|
74
|
+
refusalMarkers: OPENAI_REFUSAL_MARKERS,
|
|
75
|
+
isAbortError: err => err instanceof OpenAI.APIUserAbortError,
|
|
76
|
+
async callProvider({ bytes, mime, systemPrompt, maxTokens, signal }) {
|
|
77
|
+
const response = await client.chat.completions.create({
|
|
78
|
+
model,
|
|
79
|
+
max_tokens: maxTokens,
|
|
80
|
+
messages: [
|
|
81
|
+
{ role: 'system', content: systemPrompt },
|
|
82
|
+
{
|
|
83
|
+
role: 'user',
|
|
84
|
+
content: [{ type: 'image_url', image_url: { url: toBase64DataUrl(bytes, mime) } }],
|
|
85
|
+
},
|
|
86
|
+
],
|
|
87
|
+
}, { signal });
|
|
88
|
+
// Response shape: choices[0].message.content. May be null when
|
|
89
|
+
// the model returns a tool-call instead — defensive against that.
|
|
90
|
+
const content = response.choices[0]?.message.content;
|
|
91
|
+
if (typeof content !== 'string') {
|
|
92
|
+
throw new AIInvalidResponseError('OpenAI response had no text content');
|
|
93
|
+
}
|
|
94
|
+
return content;
|
|
95
|
+
},
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Operator-facing OpenAI provider. See `anthropicProvider` for the full
|
|
100
|
+
* Path X rationale.
|
|
101
|
+
*/
|
|
102
|
+
export function openaiProvider(transport) {
|
|
103
|
+
if (!transport.apiKey) {
|
|
104
|
+
throw new Error('openaiProvider: "apiKey" is required (typically `process.env.OPENAI_API_KEY!`)');
|
|
105
|
+
}
|
|
106
|
+
return {
|
|
107
|
+
name: 'openai',
|
|
108
|
+
altText(taskConfig) {
|
|
109
|
+
return createOpenAIAltAdapter({
|
|
110
|
+
...transport,
|
|
111
|
+
model: taskConfig.model,
|
|
112
|
+
systemPrompt: taskConfig.systemPrompt,
|
|
113
|
+
maxTokens: taskConfig.maxTokens,
|
|
114
|
+
});
|
|
115
|
+
},
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=openai.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/alt/openai.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Alt-text prompt policies — five `AltPromptPolicy` modules that each
|
|
3
|
+
* own one dimension of prompt content.
|
|
4
|
+
*
|
|
5
|
+
* # Why split into five
|
|
6
|
+
*
|
|
7
|
+
* Per [team-preferences rule 18], "structurally correct from the
|
|
8
|
+
* start". A single mega-string would be a god-string with five
|
|
9
|
+
* reasons to change (task framing, style, length, locale, output
|
|
10
|
+
* discipline). Splitting at the SOLID seam means:
|
|
11
|
+
*
|
|
12
|
+
* - WCAG guidance update → edit `styleGuidancePolicy` only
|
|
13
|
+
* - Locale strategy change → edit `localePolicy` only
|
|
14
|
+
* - Length convention change → edit `lengthPolicy` only
|
|
15
|
+
*
|
|
16
|
+
* Each policy is independently testable. The composer assembles them
|
|
17
|
+
* via `composePrompt(req, DEFAULT_POLICIES)`.
|
|
18
|
+
*
|
|
19
|
+
* # Adding a new style
|
|
20
|
+
*
|
|
21
|
+
* Future styles like `'marketing'` or `'technical'` extend the
|
|
22
|
+
* `AltStyle` enum + add a switch arm in `styleGuidancePolicy`. Other
|
|
23
|
+
* policies untouched (OCP).
|
|
24
|
+
*
|
|
25
|
+
* # Locale handling
|
|
26
|
+
*
|
|
27
|
+
* Direct generation: when locale ≠ default, ask the model to write in
|
|
28
|
+
* that locale. Modern vision models are competently multilingual at
|
|
29
|
+
* description tasks. Translation as a separate pipeline was rejected
|
|
30
|
+
* — would require a parallel `TranslationAdapter` system before its
|
|
31
|
+
* second consumer exists.
|
|
32
|
+
*/
|
|
33
|
+
import type { AltPromptPolicy } from './adapter.js';
|
|
34
|
+
/**
|
|
35
|
+
* Policy 1 — frame the task. Sets the model's frame: this is alt
|
|
36
|
+
* text generation following web-accessibility conventions, not
|
|
37
|
+
* caption generation.
|
|
38
|
+
*/
|
|
39
|
+
export declare const taskFramingPolicy: AltPromptPolicy;
|
|
40
|
+
/**
|
|
41
|
+
* Policy 2 — style guidance per `request.style`. Currently only
|
|
42
|
+
* `'descriptive'`; extending the enum adds a switch arm here.
|
|
43
|
+
*
|
|
44
|
+
* The descriptive guidance steers the model away from common
|
|
45
|
+
* caption-style patterns ("Image of...", "A photograph of...") and
|
|
46
|
+
* toward direct description.
|
|
47
|
+
*/
|
|
48
|
+
export declare const styleGuidancePolicy: AltPromptPolicy;
|
|
49
|
+
/**
|
|
50
|
+
* Policy 3 — length cap as model guidance. Soft instruction; the
|
|
51
|
+
* suggester doesn't enforce truncation. WAI-ARIA convention is 125
|
|
52
|
+
* chars; per-call override via `request.maxChars`.
|
|
53
|
+
*/
|
|
54
|
+
export declare const lengthPolicy: AltPromptPolicy;
|
|
55
|
+
/**
|
|
56
|
+
* Policy 4 — locale instruction. Empty string when locale is the
|
|
57
|
+
* default (composer drops empty-string policies; the prompt has one
|
|
58
|
+
* fewer paragraph), non-empty otherwise.
|
|
59
|
+
*
|
|
60
|
+
* When locale ≠ 'en', the model writes the description in that
|
|
61
|
+
* language directly. No translation step.
|
|
62
|
+
*/
|
|
63
|
+
export declare const localePolicy: AltPromptPolicy;
|
|
64
|
+
/**
|
|
65
|
+
* Policy 5 — output discipline. Clamp the model's tendency to add
|
|
66
|
+
* preamble or wrapper quotes around its answer. Last in the order
|
|
67
|
+
* because it's the closing instruction.
|
|
68
|
+
*/
|
|
69
|
+
export declare const outputDisciplinePolicy: AltPromptPolicy;
|
|
70
|
+
/**
|
|
71
|
+
* Default policy set, in composition order. Most prompt-tuning lives
|
|
72
|
+
* in editing the policies above; the order here changes only when
|
|
73
|
+
* paragraph priority changes (rare).
|
|
74
|
+
*
|
|
75
|
+
* Callers can pass a custom array for one-off requests, but the
|
|
76
|
+
* default is what every alt-text generation uses in production.
|
|
77
|
+
*/
|
|
78
|
+
export declare const DEFAULT_ALT_PROMPT_POLICIES: readonly AltPromptPolicy[];
|
|
79
|
+
//# sourceMappingURL=prompt-policies.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt-policies.d.ts","sourceRoot":"","sources":["../../src/alt/prompt-policies.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,OAAO,KAAK,EAAE,eAAe,EAAY,MAAM,cAAc,CAAA;AAQ7D;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,EAAE,eACgD,CAAA;AAEhF;;;;;;;GAOG;AACH,eAAO,MAAM,mBAAmB,EAAE,eAMjC,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,YAAY,EAAE,eAA8D,CAAA;AAEzF;;;;;;;GAOG;AACH,eAAO,MAAM,YAAY,EAAE,eAG1B,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,EAAE,eAA6E,CAAA;AAElH;;;;;;;GAOG;AACH,eAAO,MAAM,2BAA2B,EAAE,SAAS,eAAe,EAMjE,CAAA"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The default locale for which `localePolicy` doesn't add anything.
|
|
3
|
+
* Aligned with the WCAG-grounded prompts being written in English.
|
|
4
|
+
*/
|
|
5
|
+
const DEFAULT_LOCALE = 'en';
|
|
6
|
+
/**
|
|
7
|
+
* Policy 1 — frame the task. Sets the model's frame: this is alt
|
|
8
|
+
* text generation following web-accessibility conventions, not
|
|
9
|
+
* caption generation.
|
|
10
|
+
*/
|
|
11
|
+
export const taskFramingPolicy = () => `You are writing alt text for a webpage image, following WCAG 2.1 guidelines.`;
|
|
12
|
+
/**
|
|
13
|
+
* Policy 2 — style guidance per `request.style`. Currently only
|
|
14
|
+
* `'descriptive'`; extending the enum adds a switch arm here.
|
|
15
|
+
*
|
|
16
|
+
* The descriptive guidance steers the model away from common
|
|
17
|
+
* caption-style patterns ("Image of...", "A photograph of...") and
|
|
18
|
+
* toward direct description.
|
|
19
|
+
*/
|
|
20
|
+
export const styleGuidancePolicy = req => {
|
|
21
|
+
const style = req.style;
|
|
22
|
+
switch (style) {
|
|
23
|
+
case 'descriptive':
|
|
24
|
+
return `Describe what's visually present and meaningful. Be specific and concrete. Don't start with "image of" or "picture of" — write the description directly.`;
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Policy 3 — length cap as model guidance. Soft instruction; the
|
|
29
|
+
* suggester doesn't enforce truncation. WAI-ARIA convention is 125
|
|
30
|
+
* chars; per-call override via `request.maxChars`.
|
|
31
|
+
*/
|
|
32
|
+
export const lengthPolicy = req => `Maximum ${req.maxChars} characters.`;
|
|
33
|
+
/**
|
|
34
|
+
* Policy 4 — locale instruction. Empty string when locale is the
|
|
35
|
+
* default (composer drops empty-string policies; the prompt has one
|
|
36
|
+
* fewer paragraph), non-empty otherwise.
|
|
37
|
+
*
|
|
38
|
+
* When locale ≠ 'en', the model writes the description in that
|
|
39
|
+
* language directly. No translation step.
|
|
40
|
+
*/
|
|
41
|
+
export const localePolicy = req => {
|
|
42
|
+
if (req.locale === DEFAULT_LOCALE)
|
|
43
|
+
return '';
|
|
44
|
+
return `Write the description in ${req.locale}.`;
|
|
45
|
+
};
|
|
46
|
+
/**
|
|
47
|
+
* Policy 5 — output discipline. Clamp the model's tendency to add
|
|
48
|
+
* preamble or wrapper quotes around its answer. Last in the order
|
|
49
|
+
* because it's the closing instruction.
|
|
50
|
+
*/
|
|
51
|
+
export const outputDisciplinePolicy = () => `Output the description only, no preamble or quotes.`;
|
|
52
|
+
/**
|
|
53
|
+
* Default policy set, in composition order. Most prompt-tuning lives
|
|
54
|
+
* in editing the policies above; the order here changes only when
|
|
55
|
+
* paragraph priority changes (rare).
|
|
56
|
+
*
|
|
57
|
+
* Callers can pass a custom array for one-off requests, but the
|
|
58
|
+
* default is what every alt-text generation uses in production.
|
|
59
|
+
*/
|
|
60
|
+
export const DEFAULT_ALT_PROMPT_POLICIES = [
|
|
61
|
+
taskFramingPolicy,
|
|
62
|
+
styleGuidancePolicy,
|
|
63
|
+
lengthPolicy,
|
|
64
|
+
localePolicy,
|
|
65
|
+
outputDisciplinePolicy,
|
|
66
|
+
];
|
|
67
|
+
//# sourceMappingURL=prompt-policies.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt-policies.js","sourceRoot":"","sources":["../../src/alt/prompt-policies.ts"],"names":[],"mappings":"AAkCA;;;GAGG;AACH,MAAM,cAAc,GAAG,IAAI,CAAA;AAE3B;;;;GAIG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAoB,GAAG,EAAE,CACrD,8EAA8E,CAAA;AAEhF;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAoB,GAAG,CAAC,EAAE;IACxD,MAAM,KAAK,GAAa,GAAG,CAAC,KAAK,CAAA;IACjC,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,aAAa;YAChB,OAAO,0JAA0J,CAAA;IACrK,CAAC;AACH,CAAC,CAAA;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,YAAY,GAAoB,GAAG,CAAC,EAAE,CAAC,WAAW,GAAG,CAAC,QAAQ,cAAc,CAAA;AAEzF;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,YAAY,GAAoB,GAAG,CAAC,EAAE;IACjD,IAAI,GAAG,CAAC,MAAM,KAAK,cAAc;QAAE,OAAO,EAAE,CAAA;IAC5C,OAAO,4BAA4B,GAAG,CAAC,MAAM,GAAG,CAAA;AAClD,CAAC,CAAA;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAoB,GAAG,EAAE,CAAC,qDAAqD,CAAA;AAElH;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAA+B;IACrE,iBAAiB;IACjB,mBAAmB;IACnB,YAAY;IACZ,YAAY;IACZ,sBAAsB;CACvB,CAAA"}
|