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 ์‹คํ–‰, ์ƒ์‹œ ์„œ๋น„์Šค ์•„๋‹˜) - ์™„๋ฃŒ ํ›„ ํƒœ์Šคํฌ ๊ฒฐ๊ณผ์— ์ „์ฒด ํŒŒ์ผ ๋‚ด์šฉ ์š”์•ฝ ํฌํ•จ