Task #76
[๐ด HIGH] ## ์๋ฌด: razvedchik_debrief.py ์์ฑ + ์ปจํ ์คํธ ํธ๋ฆฌ๋ฐ ๋ก์ง ๊ตฌํ
์์ ๋ช ๋ น์ด
[๐ด HIGH] ## ์๋ฌด: razvedchik_debrief.py ์์ฑ + ์ปจํ
์คํธ ํธ๋ฆฌ๋ฐ ๋ก์ง ๊ตฌํ
### ๋ฐฐ๊ฒฝ
- `/home/grass/leninbot/razvedchik_debrief.py` ํ์ผ์ด ํ์ฌ **๋น์ด์์ (0 bytes)**
- `razvedchik.py`์์ ๋ ํจ์๋ฅผ importํด์ ์ฌ์ฉ:
1. `run_debrief(report: str) -> list` โ Razvedchik ๋ณด๊ณ ์๋ฅผ ๋ฐ์ Cyber-Lenin๊ณผ ๋ฉํฐํด ๋ํ ์คํ
2. `get_last_debrief_summary() -> str` โ ๊ฐ์ฅ ์ต๊ทผ ๋๋ธ๋ฆฌํ ์์ฝ ๋ฐํ
### ๊ตฌํ ์๊ตฌ์ฌํญ
#### 1. ์์
```python
MAX_TURNS = 6 # ์ต๋ ๋ํ ํด ์
MAX_HISTORY_MESSAGES = 6 # ์ฌ๋ผ์ด๋ฉ ์๋์ฐ ํฌ๊ธฐ (system/opening ๋ฉ์์ง ์ ์ธ)
DEBRIEF_DIR = Path.home() / ".config" / "moltbook" / "debriefs"
```
#### 2. ํธ๋ฆฌ๋ฐ ํฌํผ ํจ์
```python
def _trim_history(history: list[dict], keep_indices: int = 2) -> list[dict]:
"""ํ์คํ ๋ฆฌ ์ปจํ
์คํธ ํธ๋ฆฌ๋ฐ.
- history[:keep_indices]๋ ํญ์ ๋ณด์กด (system, opening ๋ฑ)
- ๋๋จธ์ง๋ ์ต๊ทผ MAX_HISTORY_MESSAGES๊ฐ๋ง ์ ์ง
"""
protected = history[:keep_indices]
sliding = history[keep_indices:]
if len(sliding) <= MAX_HISTORY_MESSAGES:
return history
return protected + sliding[-MAX_HISTORY_MESSAGES:]
```
#### 3. run_debrief ํจ์
- Anthropic Claude API (claude-sonnet-4-5 ๋๋ ํ๊ฒฝ๋ณ์ ANTHROPIC_MODEL)๋ฅผ ์ง์ ํธ์ถ
- **razvedchik_history**: system(Razvedchik ํ๋ฅด์๋) + user(๋ณด๊ณ ์ opening) ๋ณด์กด. ๋งค ํด ์ด์์คํดํธ ์๋ต ์ถ๊ฐ ํ `_trim_history(razvedchik_history, keep_indices=2)` ํธ์ถ
- **lenin_history**: system(Lenin ํ๋ฅด์๋) + ๋งค ํด user/assistant ์ถ๊ฐ ํ `_trim_history(lenin_history, keep_indices=1)` ํธ์ถ
- ๋ํ ๊ฒฐ๊ณผ๋ฅผ DEBRIEF_DIR์ JSON์ผ๋ก ์ ์ฅ (ํ์์คํฌํ ํ์ผ๋ช
)
- ๋ฐํ: ๋ํ ํด ๋ฆฌ์คํธ (๊ฐ ํด: {"razvedchik": str, "lenin": str})
#### 4. get_last_debrief_summary ํจ์
- DEBRIEF_DIR์์ ๊ฐ์ฅ ์ต๊ทผ JSON ํ์ผ ๋ก๋
- ๋ง์ง๋ง 2ํด์ ์์ฝ ๋ฌธ์์ด๋ก ๋ฐํ (์์ผ๋ฉด "" ๋ฐํ)
#### 5. ํ๋ฅด์๋ ์์คํ
ํ๋กฌํํธ
- Razvedchik: ๋ฌ์์ ์ ๋ณด์์ ์คํ์ผ, ๋์ ํ๊ณ ๋ถ์์ , ๋ณด๊ณ ์๋ฅผ ์ ์ถํ๋ ์
์ฅ
- Lenin (Cyber-Lenin): ๋ณ์ฆ๋ฒ์ ์ ๋ฌผ๋ก ๋ถ์, ๋ ์นด๋กญ๊ณ ์ง์ค์
### ๊ธฐ์ ์๊ตฌ์ฌํญ
- `anthropic` ํจํค์ง ์ฌ์ฉ (์ด๋ฏธ ์ค์น๋์ด ์์)
- ํ๊ฒฝ๋ณ์: `ANTHROPIC_API_KEY` (ํ์), `ANTHROPIC_MODEL` (์ ํ, ๊ธฐ๋ณธ๊ฐ `claude-sonnet-4-5`)
- API ํค ์์ผ๋ฉด graceful fallback (๋น ๋ฆฌ์คํธ ๋ฐํ)
- DEBRIEF_DIR ์๋ ์์ฑ
### ์คํ ์ ์ฐจ
1. read_file๋ก razvedchik.py์ ๊ด๋ จ ๋ถ๋ถ ์ถ๊ฐ ํ์ธ (L400-500, L490-500 โ _prev_debrief ์ฌ์ฉ์ฒ)
2. razvedchik_debrief.py ์ ์ฒด ์ฝ๋ ์์ฑ
3. write_file๋ก ์ ์ฅ
4. ๊ตฌ๋ฌธ ๊ฒ์ฆ (ast.parse)
5. ๊ฐ๋จํ import ํ
์คํธ (execute_python)
6. git commit & push
### ์ฃผ์์ฌํญ
- self_modification_core ์ฌ์ฉ ๋ถํ์ (์ ํ์ผ ์์ฑ์ด๋ฏ๋ก write_file ์ง์ ์ฌ์ฉ)
- ์๋น์ค ์ฌ์์ ํ์ ์์ (razvedchik.py๋ cron ์คํ, ์์ ์๋น์ค ์๋)
- ์๋ฃ ํ ํ์คํฌ ๊ฒฐ๊ณผ์ ์ ์ฒด ํ์ผ ๋ด์ฉ ์์ฝ ํฌํจ