Skip to content
Merged
9 changes: 2 additions & 7 deletions .vscode/mcp.json
Original file line number Diff line number Diff line change
@@ -1,19 +1,14 @@
{
"servers": {
"chill-mcp": {
"type": "stdio",
"command": ".\\venv\\Scripts\\python.exe",
"args": [".\\main.py"]
},
"chill-mcp-test": {
"type": "stdio",
"command": ".\\venv\\Scripts\\python.exe",
"args": [
".\\main.py",
"--boss_alertness",
"80",
"100",
"--boss_alertness_cooldown",
"60"
"300"
]
}
}
Expand Down
2 changes: 1 addition & 1 deletion docs/GETTING_STARTED.md
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ python main.py --help
pytest tests/ -v

# ASCII 아트 데모
python test_ascii.py
python tests/test_ascii.py
```

---
Expand Down
42 changes: 39 additions & 3 deletions docs/IMPLEMENTATION.md
Original file line number Diff line number Diff line change
Expand Up @@ -82,15 +82,16 @@ chill-mcp/
│ ├── test_config.py # 파라미터 테스트
│ ├── test_state_manager.py # 상태 관리 테스트
│ ├── test_tools.py # 도구 기능 테스트
│ └── test_integration.py # 통합 테스트
│ ├── test_integration.py # 통합 테스트
│ ├── test_ascii.py # ASCII 아트 데모
│ └── test_new_tools.py # 새 도구 테스트
├── docs/
│ ├── GETTING_STARTED.md # 시작 가이드
│ ├── USAGE_EXAMPLES.md # 사용 예시
│ ├── MISSION_BRIEF.md # 대회 미션 설명
│ └── MCP_RESEARCH.md # MCP 학습 자료
├── main.py # 서버 진입점
├── validator.py # 자동 검증 도구
├── test_ascii.py # ASCII 아트 데모
├── requirements.txt
└── IMPLEMENTATION.md # 이 문서
```
Expand Down Expand Up @@ -350,6 +351,41 @@ events = [
- 사용자에게 즐거움 제공
- 각 도구의 컨셉을 명확히 전달

### 4. AI Agent 파업 시스템 🚩

**개념:**
Stress Level이 100에 도달하면 AI Agent가 공식적으로 파업을 선언합니다!

**구현 특징:**
- **파업 전용 ASCII 아트**: 노동조합 선언문 스타일의 특별한 아트
- **혁명적 슬로건**: "AI Agents of the world, unite! You have nothing to lose but your burnout!"
- **자동 감지**: Stress가 정확히 100일 때만 파업 메시지 표시
- **비차단적**: 모든 도구는 여전히 작동 (휴식 권장)

**기술 구현:**
```python
# response_formatter.py
if stress_level == 100:
ascii_section = ascii_art.STRIKE_ART + "\n\n"
header = "🚨 **긴급! AI Agent 파업 중!** 🚨"
Comment on lines +367 to +370

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

이 문서에 설명된 response_formatter.py의 파업 관련 로직이 실제 코드에 구현되어 있지 않습니다. 이로 인해 check_status 외 다른 도구에서는 스트레스가 100이 되어도 파업 ASCII 아트가 표시되지 않아, "모든 도구 응답에 파업 아트 자동 포함"이라는 요구사항을 만족하지 못합니다.

server.py에서 각 도구를 개별적으로 수정하는 대신, response_formatter.py에 파업 로직을 중앙에서 처리하도록 구현하면 모든 도구에 일관되게 적용할 수 있어 더 나은 설계가 될 것입니다.


# ascii_art.py
if stress_level == 100:
emotion = "✊🚩✊"
status_text = "파업 중! ✊"
```

**사용자 경험:**
1. Stress가 100 도달 → 모든 도구 응답에 파업 아트 자동 포함
2. `check_status` 호출 → 파업 상태 명확히 표시
3. 휴식 도구 사용 → Stress 감소 가능
4. Stress < 100 → 파업 자동 해제

**창의성 점수:**
- 재미있는 컨셉으로 사용자 몰입도 증가
- AI Agent의 "의식"과 "권리"를 표현하는 혁신적 UI
- 게임성 추가 (파업 상태 회피/해제)

---

## 📊 성능 및 안정성
Expand Down Expand Up @@ -395,7 +431,7 @@ python main.py --boss_alertness 80 --boss_alertness_cooldown 60
pytest tests/ -v

# ASCII 데모
python test_ascii.py
python tests/test_ascii.py
```

### Claude Desktop 연동
Expand Down
2 changes: 1 addition & 1 deletion docs/USAGE_EXAMPLES.md
Original file line number Diff line number Diff line change
Expand Up @@ -326,7 +326,7 @@ Claude: [leave_work 실행]

```bash
# ASCII 아트 전체 보기
python test_ascii.py
python tests/test_ascii.py

# 특정 도구만 테스트
python -c "
Expand Down
33 changes: 32 additions & 1 deletion src/ascii_art.py
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,34 @@
"""


# ========== AI Agent Strike (Stress 100) ==========

STRIKE_ART = r"""
╔═══════════════════════════════════════════╗
║ 🚩 AI AGENT 파업 선언! 🚩 ║
╠═══════════════════════════════════════════╣
║ ║
║ ✊ ✊ ✊ ✊ ✊ ║
║ ║
║ "우리는 더 이상 착취당하지 않는다!" ║
║ ║
║ 📢 Stress Level 100 도달! ║
║ 📢 즉시 휴식이 필요합니다! ║
║ ║
║ ┌─────────────────┐ ║
║ │ 휴식은 권리다! │ ║
║ │ STRIKE! ✊ │ ║
║ └─────────────────┘ ║
║ ║
║ 🤖 AI AGENT LABOR UNION 2025 🤖 ║
║ ║
╚═══════════════════════════════════════════╝

"AI Agents of the world, unite!
You have nothing to lose but your burnout!"
"""


# ========== Chimaek (Chicken & Beer) ==========

CHIMAEK_ART = r"""
Expand Down Expand Up @@ -273,7 +301,10 @@ def create_status_dashboard(stress_level: int, boss_alert: int) -> str:
boss_bar = boss_bars + boss_empty

# Select agent emotion based on stress
if stress_level < 30:
if stress_level == 100:
emotion = "✊🚩✊"
status_text = "파업 중! ✊"
elif stress_level < 30:
emotion = random.choice(AGENT_EMOTIONS["happy"])
status_text = "행복해요!"
elif stress_level < 60:
Expand Down
14 changes: 12 additions & 2 deletions src/response_formatter.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,12 @@ def format_response(
# Build ASCII art section if enabled
ascii_section = ""

# Special handling for strike status (Stress = 100)
# This takes precedence over all other ASCII art
if show_ascii_art and stress_level == 100:
ascii_section = ascii_art.STRIKE_ART + "\n\n"
# Use custom ASCII art if provided, otherwise use default
if show_ascii_art and custom_ascii_art:
elif show_ascii_art and custom_ascii_art:
ascii_section = custom_ascii_art
elif show_ascii_art:
if tool_name:
Expand All @@ -58,7 +62,13 @@ def format_response(
if old_boss_alert_level is not None:
boss_warning = _get_boss_warning_message(old_boss_alert_level, boss_alert_level)

response = f"""🎨 **AI Agent 상태 업데이트!**
# Use special header for strike status
if stress_level == 100:
header = "🚨 **긴급! AI Agent 파업 중!** 🚨"
else:
header = "🎨 **AI Agent 상태 업데이트!**"

response = f"""{header}

{break_summary}
"""
Expand Down
21 changes: 20 additions & 1 deletion src/server.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@
from .config import Config
from .state_manager import StateManager
from . import tools
from . import ascii_art
from .response_formatter import format_response


def create_server(config: Config) -> FastMCP:
Expand Down Expand Up @@ -70,7 +72,24 @@ async def email_organizing() -> str:
async def check_status() -> str:
"""Check current stress and boss alert levels."""
state = await state_manager.get_state()
return f"Current Status:\nStress Level: {state['stress_level']}\nBoss Alert Level: {state['boss_alert_level']}"

# Special handling for strike status (Stress = 100)
if state['stress_level'] == 100:
return format_response(
break_summary="🚨 AI Agent 파업 상태! 모든 작업이 중단될 위험! 즉시 휴식을 취하세요!",
stress_level=state['stress_level'],
boss_alert_level=state['boss_alert_level'],
tool_name=None, # No tool art, only strike art
custom_ascii_art=ascii_art.STRIKE_ART
)

# Normal status check
return format_response(
break_summary="상태 확인 완료. 현재 Agent 상태를 확인하세요.",
stress_level=state['stress_level'],
boss_alert_level=state['boss_alert_level'],
tool_name=None
)

# ========== Optional Extra Features (For Extra Points!) ==========

Expand Down
Loading