=== Blog Style Generator ===
Contributors: blog-style-generator
Tags: writing, ai, gemini, blog, editor
Requires at least: 6.0
Tested up to: 7.0
Requires PHP: 8.2
Stable tag: 1.3.2
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

WordPress管理画面で文章スタイルガイドの作成、ブログ記事の執筆、既存記事のリライトを行います。

== Description ==

Blog Style Generatorは、Google Gemini APIを利用する管理画面専用ツールです。

* 過去記事や参考文章からスタイルガイドを作成
* Markdownの追加コンテキストをユーザーごとに保存・管理し、スタイル分析に自動反映
* Google検索を利用した記事リサーチ
* 下書き作成、批評、最終調整
* 既存記事のリライト
* 生成結果をWordPress下書きとして保存し、そのまま編集画面へ移動
* 独自更新サーバーからの更新通知・自動更新

Gemini APIキーは暗号化してWordPressデータベースへ保存され、ブラウザへ送信されません。

== Installation ==

1. `blog-style-generator`フォルダを`/wp-content/plugins/`へアップロードするか、ZIPファイルを管理画面からインストールします。
2. プラグインを有効化します。
3. 「Blog Style Generator → 設定」でGemini APIキーとモデルを保存します。
4. より強い保存時暗号化を利用する場合は、`wp-config.php`へ64文字以上のランダム値を追加してからAPIキーを保存し直します。

`define( 'BSG_ENCRYPTION_KEY', 'your-long-random-secret' );`

== Xサーバーでの自動実行 ==

Auto-PilotはWordPressの予定イベントを使用します。訪問アクセスの有無にかかわらず実行させるには、サーバーパネルの「Cron設定」に以下を登録してください。

* 実行時間: 5分ごと（分: `*/5`、時: `*`、日: `*`、月: `*`、曜日: `*`）
* コマンド: 設定画面のAuto-Pilot欄に表示されたコマンドをコピーしてください。WordPressをサブディレクトリに設置している場合も、正しい設置先URLを使用します。

サーバー側のCronが正常に動くことを確認してから、`wp-config.php`に次の一行を追加し、アクセス時のWP-Cron実行を停止します。この設定だけを追加すると自動実行が止まります。

`define( 'DISABLE_WP_CRON', true );`

設定画面の「自動実行状況」で次回予定、最終実行日時、処理工程、失敗理由、作成した下書きへのリンクを確認できます。通知メールの送信失敗は下書き作成の失敗とは別に表示します。

予約時刻を過ぎても実行されない場合は、サーバーのCron実行履歴とWordPressの「ツール → サイトヘルス」のループバック通信・予定イベントを確認してください。「中断の可能性あり」と表示された場合はサーバーのPHPエラーログ、実行時間・メモリ制限を確認してください。プラグインはPHPの実行時間を最大900秒に設定しますが、サーバーやプロキシ独自の制限は変更できません。

Auto-Pilotで作成した記事は常に下書きとして保存します。自動公開は行いません。

== External services ==

このプラグインは文章生成のためGoogle Gemini APIへ接続します。

送信される可能性があるデータ:

* ユーザーが入力またはアップロードした文章
* スタイルガイド
* 記事テーマ、読者像、追加指示
* リライト対象の記事本文
* 生成途中の下書きと批評内容

Googleの利用規約とプライバシーポリシー:

* https://ai.google.dev/gemini-api/terms
* https://policies.google.com/privacy

外部URLを入力した場合、その公開ページはプラグインが動作するWordPressサーバーから取得されます。任意URL取得にはWordPressの安全なHTTP APIを使用し、プライベートネットワーク宛てのアクセスを拒否します。

プラグインはバージョン確認のため、既定で`https://gamitaka.com/updates/blog-style-generator/manifest.json`へ接続し、更新時には同JSONで指定されたZIPを取得します。設定画面または`BSG_UPDATE_MANIFEST_URL`定数で配布元を変更できます。

== Security ==

* APIキーはSodiumまたはOpenSSLで暗号化して保存します。
* 専用暗号化キーがない場合はWordPress認証ソルトから暗号化キーを生成します。
* Gemini通信はWordPressサーバー上でのみ実行されます。
* REST APIはWordPress nonceと専用の`bsg_use_ai_tools`権限を要求します。
* APIキー設定は`manage_options`権限を持つ管理者だけが変更できます。
* AI呼び出しとURL取得には、原子的なユーザー単位・サイト全体の回数制限があります。
* 追加コンテキストはユーザーごとに暗号化して保存します。
* 独自更新ZIPはSHA-256に加えてRSA署名済みマニフェストで検証します。

== Frequently Asked Questions ==

= APIキーは編集者に見えますか？ =

見えません。編集者はツールを利用できますが、APIキーはRESTレスポンスやJavaScriptへ出力されません。

= 生成した記事は公開されますか？ =

いいえ。「下書き保存して編集」を押すと、投稿ステータス`draft`で保存されます。

= スタイルガイドはどこに保存されますか？ =

WordPressユーザーごとのユーザーメタデータとして保存されます。

== Changelog ==

= 1.3.2 =

* 期限を過ぎた未実行のAuto-Pilot予約が翌日に移動する問題を修正
* 管理画面以外のアクセスでも予約の欠落を補い、初回設定保存時にも予約を登録
* Auto-Pilot無効時に予約を全件解除し、残ったコールバックからの生成も停止
* 予約保存エラー、最終実行日時、処理工程、生成結果を設定画面に表示
* サブディレクトリ設置時のCronコマンドURLと、Cronから送信する通知の編集リンクを修正
* 通知メールの失敗と下書き作成の結果を分離し、長時間処理の実行時間を調整
* 自動実行時刻を検証。生成記事を下書きで保存する仕様とAIモデル設定は維持

= 1.3.1 =

* 保存済みGemini APIキーを「****」で表示し、変更しない場合は既存キーを維持
* 手動ブログ執筆のリサーチで429エラー時に即時再送する処理を削除
* 批評失敗時は同じ画面・同じ執筆条件で作成済み下書きを再利用し、批評から再開

= 1.3.0 =

* Gemini 3.8 Flashを使用モデルに追加
* noteのプロフィール／記事URLとSubstackのサイト／記事URLから公開記事を取得できるよう改善
* スタイルガイドの生成結果を4,000文字以内に整理するよう改善

= 1.2.8 =

* 記事タイトルに年号や「最新」などの時期表現を入れず、長期運用しやすいタイトルを生成するよう改善
* 比較・まとめ記事で紹介する項目を最大5件に厳選するよう改善
* Auto-Pilotのスラッグを日本語や日付を含まない英数字のハイフン形式に正規化
* Auto-Pilotのテスト生成に適用するリクエスト上限を緩和

= 1.2.7 =

* AI応答を表示する管理画面のDOM XSS対策を追加
* AIツール専用権限、原子的レート制限、サイト全体上限を追加
* 追加コンテキストを暗号化保存し、既存ファイルを読み込み時に自動移行
* Auto-Pilotの多重実行を防止
* 更新マニフェストへRSA署名検証を追加

= 1.2.6 =

* GeminiモデルをGemini 3.7 Flash、Gemini 3.6 Flash、Gemini 3.5 Flash Lite、Gemini 3.1 Flash Liteへ更新
* Gemini 3.7/3.6で非対応になった旧サンプリングパラメータを生成リクエストから削除
* 保存済みのGemini 3.5 Flash設定をGemini 3.7 Flashへ自動移行

= 1.2.5 =

* 記事リライトの出力が空白になる問題を修正
* リライトを「下書き生成、読者目線での校正提案、選択した修正の反映、最終稿出力」の流れに統一
* Gemini APIが空の本文を返した場合にエラーを表示する検証を追加

= 1.2.4 =

* Auto-Pilotの生成結果がJSONのまま記事本文に保存される場合がある問題を修正
* JSONコードフェンスと文字列内の改行を復元できる解析処理を追加
* WordPressの更新確認時にマニフェストのサーバーキャッシュを強制回避するよう改善

= 1.2.3 =

* 更新サーバーをプラグインへ標準設定し、インストール直後からWordPressの更新通知・今すぐ更新・自動更新を利用できるように変更
* Update URIを実際の配布元に統一
* 更新トランジェントへの互換登録経路とマニフェストのキャッシュ回避を追加

= 1.2.2 =

* 管理画面のページタイトルを「Blog Style Generator vバージョン「画面名」」形式に統一

= 1.2.1 =

* gamitaka.comの独自更新サーバー配布に対応
* 必要動作環境をWordPress 6.0以上、PHP 8.2以上に更新

= 1.2.0 =

* HTTPSのJSONマニフェストを使った独自プラグイン更新に対応
* WordPressの更新通知、バージョン詳細、今すぐ更新、自動更新に対応
* 更新ZIPのSHA-256照合を追加

= 1.1.2 =

* リライト画面のファイル選択を、JavaScriptに依存しないネイティブクリック方式に変更

= 1.1.1 =

* リライト画面でファイル選択ダイアログが開かない問題を修正
* ファイルアップロード領域のキーボード操作に対応

= 1.1.0 =

* Markdownの追加コンテキストのアップロード・一覧・削除機能を追加
* 保存済みの追加コンテキストをスタイルガイド分析に自動反映

= 1.0.1 =

* XサーバーのCron設定に対応した自動実行手順を追加
* Auto-Pilot設定保存時に実行予定を即時同期

= 1.0.0 =

* 初回リリース
* 管理画面用の3ツールを追加
* APIキーの暗号化保存
* サーバー経由のGemini通信
* WordPress下書き保存と編集画面への遷移
