AI Rewriter — плагин рерайта новостей

[!] Версия 0.1.2: Добавлена интеграция ng-helpers v0.2.2 для улучшения безопасности и логирования

Кратко
- Делает рерайт текста прямо в форме добавления/редактирования новости без сохранения.
- Кнопка в тулбаре редактора вызывает ИИ (OpenAI‑совместимые или Anthropic) и заменяет текст в поле.
- Настраивается через админку: провайдер, API ключ, модель, оригинальность, температура, таймаут.
- ✅ CSRF защита административных функций и RPC вызовов
- ✅ Расширенное логирование с уровнями важности (info/warning/error)

Установка
1. Откройте Админка → Плагины → `ai_rewriter` → Установить.
2. После установки зайдите в Настройки плагина и заполните параметры (см. ниже).

Требования
- NGCMS >= 0.9.3
- PHP >= 7.0
- ng-helpers >= 0.2.2 (для CSRF защиты)
- cURL включен
Настройки
- Провайдер ИИ:
  - `OpenAI` — официальный API OpenAI.
  - `Совместимый (кастомный API Base)` — любой OpenAI‑совместимый API/прокси (OpenRouter, Together, LM Studio, Ollama).
  - `Anthropic (Claude)` — официальное API Anthropic.
- Модель:
  - Для OpenAI: `gpt-4o-mini`, `gpt-4.1` и др.
  - Для совместимого API: точный slug модели вашего провайдера (см. их каталог).
  - Для Anthropic: семейство `claude-*` (например, `claude-3-5-sonnet-20240620`, `claude-3-haiku-20240307`).
- API Key: ключ доступа к выбранному провайдеру.
  - OpenAI: https://platform.openai.com/api-keys
  - Anthropic: https://console.anthropic.com/settings/keys
  - OpenRouter: https://openrouter.ai/keys
  - Together: https://api.together.xyz/settings/keys
  - LM Studio / Ollama: ключ не нужен.
- API Base (опционально): базовый URL для совместимого/прокси API.
  - Официальный OpenAI: `https://api.openai.com/v1` (можно оставить пустым).
  - OpenRouter: `https://openrouter.ai/api/v1`
  - Together: `https://api.together.xyz/v1`
  - LM Studio: `http://127.0.0.1:1234/v1`
  - Ollama: `http://127.0.0.1:11434/v1`
- Процент оригинальности: целевая уникальность рерайта (0–100, по умолчанию 60).
- Тональность: опционально задаёт стиль (например: нейтральный, информационный).
- Temperature: 0.0–1.0, степень креативности (по умолчанию 0.7).
- Таймаут запроса (сек): HTTP таймаут к API (по умолчанию 20; при медленном соединении поставьте 45–60).
- Автоприменение: рерайт при сохранении (добавлении/редактировании). По умолчанию выключено.
Как использовать
1. Откройте админку → Новости → Добавить или Редактировать.
2. В редакторе найдите кнопку с «волшебной палочкой» в верхнем тулбаре.
3. Нажмите кнопку — плагин отправит текущий текст поля в ИИ и после ответа заменит содержимое поля на отредактированный текст. Сохранение новости при этом не производится.
4. Проверьте результат, при необходимости отредактируйте вручную и нажмите обычную кнопку Сохранить.
Поддержка разметки
- Плагин формирует инструкции для ИИ так, чтобы сохранялись HTML/BBCode, абзацы, заголовки, ссылки и спецсимволы.
- ИИ не должен добавлять новые факты или терять смысл. Тем не менее, проверяйте результат перед публикацией.
Типовые ошибки
- `You exceeded your current quota` — у OpenAI закончилась квота/нет биллинга. Пополните баланс или используйте другой провайдер/прокси.
- `AI ключ не задан` — заполните API Key в настройках плагина.
- `Провайдер/модель не совпадают` — вы выбрали Anthropic, но указали модель `gpt-*`, или наоборот. Выберите совместимую модель.
- `cURL error: Operation timed out` — увеличьте таймаут до 45–60 сек, проверьте сеть/прокси, попробуйте другой провайдер.
Примеры конфигурации
- Официальный OpenAI:
  - Провайдер: OpenAI
  - API Base: пусто (или `https://api.openai.com/v1`)
  - API Key: ваш ключ
  - Модель: `gpt-4o-mini`
- OpenRouter (прокси):
  - Провайдер: Совместимый (кастомный API Base)
  - API Base: `https://openrouter.ai/api/v1`
  - API Key: ваш ключ OpenRouter
  - Модель: точный slug модели на OpenRouter
- Ollama (локально):
  - Провайдер: Совместимый (кастомный API Base)
  - API Base: `http://127.0.0.1:11434/v1`
  - API Key: пусто
  - Модель: имя запущенной модели, напр. `llama3`, `mistral`
FAQ
- Можно рерайтить без сохранения? — Да, кнопка в тулбаре меняет текст поля, но не отправляет форму.
- Можно включить авто‑рерайт при сохранении? — Да, в настройках плагина есть флаги для добавления/редактирования.
- Где лог/диагностика? — Ошибки показываются тостами. При необходимости смотрите сетевые логи веб‑сервера и PHP.
Технические детали
- Кнопка тулбара вызывает RPC `ai_rewriter.rewrite` через `engine/rpc.php` (`methodName=...`).
- Серверная часть плагина:
  - `ai_rewriter.php` — провайдеры и логика рерайта, NewsFilter хуки, RPC.
  - `lib/librpc.php` — загрузчик RPC для движка.
  - `config.php` — страница настроек с CSRF защитой.
  - `install.php` — установка и значения по умолчанию.
  - `CHANGELOG_NGHELPERS.md` — документация интеграции ng-helpers.
- UI кнопка добавлена в шаблон `engine/skins/default/tpl/qt_news.tpl`.

Безопасность (v0.1.2)
- ✅ Требование авторизации администратора для RPC
- ✅ Административные функции защищены встроенной системой NGCMS
- ✅ Валидация URL API перед запросами (validate_url)
- ✅ Санитизация пользовательских данных (sanitize)
- ✅ Расширенное логирование операций

Логирование (v0.1.2)
- Файл логов: `engine/logs/ai_rewriter.log`
- Уровни логирования:
  - [INFO] - успешные операции, информационные сообщения
  - [WARNING] - попытки CSRF атак, некритичные ошибки
  - [ERROR] - критичные ошибки API, таймауты, недоступность провайдера
- Примеры логов:
  ```
  [2025-01-15 14:32:11] [INFO] RPC rewrite request: length=1250 chars
  [2025-01-15 14:33:05] [WARNING] RPC error: CSRF validation failed
  [2025-01-15 14:35:22] [ERROR] RPC error: OpenAI API error: 429 Too Many Requests
  ```

Документация ng-helpers
Полная документация интеграции ng-helpers доступна в файле:
`engine/plugins/ai_rewriter/CHANGELOG_NGHELPERS.md`

Содержит:
- Подробное описание всех функций ng-helpers (10 функций)
- Примеры кода с объяснениями
- Рекомендации по дальнейшей оптимизации (кеширование, benchmark)
- Сравнение кода до/после интеграции
Поддержка
- Если требуется настроить под конкретный провайдер/прокси, сообщите его название и желаемую модель — можно добавить пресеты.
