Add SwarmUI settings management and portrait generation enhancements

- Introduced new API endpoints for managing SwarmUI settings, including fetching and saving presets and age rules.
- Updated the portrait generation logic to utilize the new settings structure, allowing for dynamic preset selection based on age.
- Enhanced UI components to support SwarmUI settings, including localization for new strings and improved styling for settings sections.
- Added tests to verify the functionality of new settings endpoints and portrait generation behavior.

This commit lays the groundwork for more flexible and user-friendly portrait generation options.
This commit is contained in:
Leonid Pershin
2026-08-20 06:06:45 +03:00
parent e0b7122f3b
commit 5a400be792
32 changed files with 2178 additions and 184 deletions
+41
View File
@@ -0,0 +1,41 @@
# Фаза 42. Темы и кружки
## Зависимости
- [Фаза 41](41-opinions.md)
- [Фаза 21](21-decisions.md)
## Зачем
`Chat` перестаёт быть соло. В узле говорят 2–4 человека об одной теме. Язык и
`Communication` влияют на исход.
## Задачи
- [ ] `TopicDef`: теги, возраст, роли, шёпот-на-уроке, опциональный язык
- [ ] Ванильный набор тем (учёба, игры, еда, семья, спорт, сплетни, грубое) в `core`
- [ ] Кружок 2–4 в одном узле; пятый не влезает
- [ ] Кого зовут: друзья и одноклассники в узле, врагов не зовут; тихоня/лидер — поля черты
- [ ] Нет общего языка — кружок можно, сдвиг мнения слабый и чаще вниз
- [ ] `Communication` растёт от разговора меньше, чем предмет за урок; язык разговора — капля,
если не у потолка
- [ ] Черты **сплетник** и **общительный** в `core` с полями, не списками в коде
- [ ] Исход пишет мнения всех пар кружка и строку лога
- [ ] На уроке обычный `Chat` не стартует (шёпот — фаза 43)
## Тесты, без которых фаза не закрыта
- [ ] Двое свободных друзей в коридоре на перемене собирают кружок; враги — нет
- [ ] Пятый в узле не входит в тот же кружок
- [ ] Без общего языка мнение почти не растёт при том же `Communication`
- [ ] Высокий `Communication` сильнее двигает число, чем низкий, на одной теме
- [ ] Каталог без `TopicDef` не стартует школу с кружками — или падает загрузка, не молча соло-Chat
## Критерий готовности
- На перемене в коридоре двое «разговаривают», на карточке мнение сдвинулось, в логе тема
- `dotnet test` проходит
## Стоп
Не шёпот на уроке. Не драка. Не менять кадр присутствия (локация может ещё писать «Разговор»).