new RPG system

This commit is contained in:
2026-06-05 14:57:15 +03:00
parent 6189a5fb74
commit 01b16dbeaa
29 changed files with 2395 additions and 311 deletions
+14 -11
View File
@@ -165,11 +165,15 @@ sequenceDiagram
- `status_quo_update``UPDATE sessions.status_quo`.
- `scene_update` (partial) → merge в `scene_json`.
- **Нет** d20, **нет** bubble «Рассказчик».
3. **runtime_suffix** = `build_rpg_runtime_suffix(session)` + `narrator_extra` (directives только).
4. `upsert_static_system_message(static)` — в БД system без RPG-блоков.
5. `add_message(user, message)`.
6. **context_usage** — если > 85%, в конец system добавляется `[Context: ~N% …]`.
7. **llm_messages** = system(static+runtime) + вся история user/assistant.
3. **Linear story (pre-stream):** `reconcile_story_arc` → один active-квест = текущий `steps[i]`:
- `format_step_guidance_for_character` — цель шага в system CHAT.
- При первом входе в шаг: `injection` как мягкая подсказка (`format_step_hint_for_character`).
- Если арка завершена и игрок выбрал «новую арку» → `roll_next_arc`.
4. **runtime_suffix** = `build_rpg_runtime_suffix(session)` + `narrator_extra` (directives + step guidance/hint).
5. `upsert_static_system_message(static)` — в БД system без RPG-блоков.
6. `add_message(user, message)`.
7. **context_usage** — если > 85%, в конец system добавляется `[Context: ~N% …]`.
8. **llm_messages** = system(static+runtime) + история; язык сессии (`infer_rp_language`) в narrator/plot/injection.
### Этап B — SSE stream
@@ -187,12 +191,11 @@ sequenceDiagram
| # | Действие | Модель | Условие |
|---|----------|--------|---------|
| C1 | `generate_plot_arc` | PLOT | Только если `plot_arc_json` пуст (редко после opening) |
| C2 | `should_advance_arc(user_message)` | код | Ключевые слова: отдых → `event_driven:rest`, путь → `travel`, помощь → `help_request` |
| C3 | `pop_matching_beats` + injection | — | Если trig совпал с beat; choices из beat |
| C4 | `advance_phase` | — | Если beats пусты — фаза opening→hook→… |
| C5 | `extract_facts` | FACTS | Последние 10 реплик; merge до 80, в промпт 20 |
| C6 | **`narrator_post`** | NARRATOR | Контекст: последние 8 реплик **включая новый ответ** |
| C7 | **`apply_narrator_post`** | — | status_quo, affinity_delta, scene, outfit, quests, stats_delta* |
| C2 | **`narrator_post`** | NARRATOR | Контекст: шаг N/M, completion_criteria, последние 8 реплик |
| C3 | **`apply_narrator_post_with_story`** | — | facts, affinity, scene; `step_complete` → advance step, sync quest |
| C4 | step choices / new arc | — | choices из нового шага; при `arc_completed` — «Начать новую арку» |
| C5 | `extract_facts` | FACTS | Последние 10 реплик |
| C6 | SD + SSE `done` | — | **всегда** `quests` + `story_arc` в payload (live UI) |
| C8 | `generate_sd_prompt` + Comfy | SD | outfit + scene_json + последние 6 реплик |
| C9 | SSE `done` | — | choices, affinity, quests, image_*, debug |