Commit Graph

6 Commits

Author SHA1 Message Date
Maxim Dolgolyov ccfb151eca fix(reliability): дневной лимит imggen в БД + ретеншн error_log (Спринт3)
- imggen: дневной счётчик генераций перенесён из in-memory Map в таблицу
  imggen_usage (миграция 070) — переживает рестарт. Cooldown остаётся в памяти,
  но добавлена периодическая чистка Map + старых строк imggen_usage (>7 дн).
- classroom-cleanup: ретеншн error_log (app_settings.error_log_retention_days,
  по умолч. 30; 0 = выкл) в том же суточном джобе.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-12 23:00:36 +03:00
Maxim Dolgolyov 107ca2220c feat(imggen): feature-gate «imggen» с контролем по классам/ученикам (Спринт2)
- server: requireFeature('imggen') на /api/imggen (глобальный гейт).
- imggenController: enforcement через isFeatureEnabledForUser в status()/generate()
  — учитывает глобальный флаг + оверлей класса + free_student (403 если выкл.).
- admin «games/features» + free-student: тумблер «Генерация картинок (ИИ)».
- classes.html: переключатель модуля imggen в настройках класса (per-class).
Дефолт — ON (opt-in disable), как у остальных фич. Проверено на features-движке.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-12 22:15:54 +03:00
Maxim Dolgolyov ddc260e114 feat(admin): тумблер вкл/выкл генерации картинок
Главный выключатель в разделе «Генерация картинок» (флаг on в конфиге,
независим от наличия токена). Выключено → /api/imggen отдаёт 503
«временно выключена». Админ-тест работает и при выключенном тумблере
(generateImage проверяет только наличие конфига). Бейдж различает
«Включена / Выключена / Не настроена».

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-12 12:00:05 +03:00
Maxim Dolgolyov 88651d85ab feat(admin): раздел «Генерация картинок» — управление провайдером и тест
Новый админ-раздел: Account ID / токен (маскируется) / модель Cloudflare,
лимиты (пауза, дневной лимит) из БД, статистика, кнопка теста генерации.
imggenController: лимиты и модель теперь из конфига, поддержка JSON и
бинарного ответа CF, переиспользуемые generateImage() и stats().
Бэкенд GET/PUT /api/admin/imggen + POST /api/admin/imggen/test (admin-only).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-12 11:37:47 +03:00
Maxim Dolgolyov 4e8c0841db feat(imggen): авто-перевод промпта на английский перед FLUX
FLUX лучше понимает английский. Если в промпте есть кириллица — прогоняем
через тот же LLM-провайдер ассистента (callLLMFailover, с failover) и
отправляем перевод. При сбое перевода — исходный текст. callLLMFailover
теперь экспортируется из assistantController.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-12 11:20:05 +03:00
Maxim Dolgolyov d6faf6b22c feat(imggen): генерация картинок ИИ (FLUX.1) — ассистент, флэшкарты, редактор уроков
Бэкенд /api/imggen (status/generate, CF Workers AI, cooldown+дневной лимит).
Переиспользуемый модал LS.imagePromptModal (js/imggen.js).
Квантик: режим «Нарисовать» в чате (inline).
Флэшкарты: кнопка «ИИ» в блоке картинки карточки.
Редактор уроков: кнопка «Сгенерировать» в блоке изображения.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-12 10:41:59 +03:00