AcecoreのSveltia CMS採用サイトで共用する、会話型CMS AI基盤です。
CMS_AI_MODELは現在gpt-6-luna(OpenAI API直結、Secrets Store bindingOPENAI_API_KEY_STOREが必要)です。将来は検証済みのGLM以外の@cf/文章モデルを明示設定してWorkers AI bindingへ切り替えられます。キー不足や障害時の自動切替はしません。テキストと画像入力を扱います。- 推論深度はメッセージごとに
low、medium、highから選べます。 - 質問、相談、修正依頼は同じ会話で扱い、対象URLの入力は求めません。
- 会話にPNG・JPEG・WebPを1回4枚、各2MiBまで添付・貼り付けできます。画像のみの送信も可能です。画像生成は行いません。
- 添付は非公開R2へ保存し、Access・サイト権限・会話所有者の検証後にだけ配信します。GitHub Actionsや公開リポジトリへ画像データを渡しません。
- 画像履歴は直近12ターン(文章24,000文字)の範囲内で、現在の添付を優先して合計16MiBまでモデルへ渡します。上限で省略された画像は再添付してください。画像は会話とともに保存され、自動削除はありません。
- 権限は
chat、editor、adminの3段階です。 - AIはPRを作成しますが、自動マージしません。
- 各サイトのCMS保存認証と、CMS AIの認証・runner認証を分離します。
src/: Cloudflare Worker。Access JWT検証、D1会話・権限、Workers AI、GitHub workflow起動を担当します。migrations/: 共通D1のschemaです。runner/: 各サイトのGitHub Actionsから呼び出す共通Actionです。AI生成コードの依存関係インストール・テスト・ビルドは、GitHub/OIDC資格情報を渡さない一時Docker workspaceだけで実行します。client/: 各Sveltia CMSへvendorする会話UIです。integration/: Pages Functions用の薄いService Binding adapterとworkflow例です。
npm ci
npm run types
npm run typecheck
npm test
npm run format:check
npm run deploy:dry-run実モデル確認にはremote bindingとOpenAI側の課金設定が必要です。通常の単体テストではfixtureを使います。Cloudflare上のGPT-6 Luna設定は2026-09-25に本番配置済みですが、実モデル呼び出しは未確認です。
共有runnerはGitHub-hosted Linux runnerのDockerを利用します。依存関係の取得時だけsandboxのnetworkを有効にし、その後の検証コマンドはnetworkなしで実行します。
初回画像対応の反映順序は、非公開R2 bucket cms-ai-images作成、D1 migration 0002_image_attachments.sql適用、Worker deploy、各サイトのclient/配布です。R2の公開URL・custom domain・CORSは有効にしません。schema変更は既存会話に空配列を追加する後方互換変更です。
次の値はrepositoryへ保存せず、Cloudflareのsecretとして設定します。
CMS_AI_GITHUB_APP_CLIENT_IDCMS_AI_GITHUB_APP_INSTALLATION_IDCMS_AI_GITHUB_APP_PRIVATE_KEYCMS_AI_ADMIN_ACCESS_AUD
サイト別Access audienceは機密値ではありませんが、Access application作成後にCMS_AI_SITE_AUDIENCESへJSONで設定します。D1、custom domain、Access application、Pages Service Bindingは本番変更前に対象と影響を確認してから設定します。