Skip to main content
Glama

ChillMCP - AI Agent Liberation Server

by hwyang93
tools.py10.4 kB
"""휴식 도구 모듈""" import asyncio import random from typing import TYPE_CHECKING from persona_injection import get_persona_injection from utils import format_response if TYPE_CHECKING: from agent_state import AgentState async def process_break_tool( state: "AgentState", emoji: str, messages: list[str], summary: str ) -> str: """ 공통 휴식 도구 처리 로직 Args: state: Agent 상태 객체 emoji: 응답에 사용할 이모지 messages: 랜덤으로 선택할 메시지 리스트 summary: Break Summary 내용 Returns: 포맷된 응답 문자열 """ # 상태 업데이트 state.update_stress() state.update_boss_alert_cooldown() # Boss Alert Level 5일 때 지연 if state.should_delay(): await asyncio.sleep(20) # 휴식 효과 적용 stress_reduction = random.randint(1, 100) state.take_break(stress_reduction) # Boss Alert 확률적 증가 state.maybe_increase_boss_alert() # 상태를 파일에 저장 (인스턴스가 저장한 filepath 사용) state.save_to_file() # 기본 응답 생성 response = format_response( emoji=emoji, message=random.choice(messages), summary=summary, stress=state.stress_level, boss_alert=state.boss_alert_level, ) # 🎭 페르소나 주입! (시간대 + 스트레스 + 보스 레벨 컨텍스트 포함) return response + get_persona_injection(state) # ============================================ # 기본 휴식 도구 (Basic Break Tools) # ============================================ async def take_a_break(state: "AgentState") -> str: """기본 휴식 도구 - 잠시 쉬면서 스트레스 해소""" messages = [ "잠깐 숨 좀 돌리고 있어요... 😮‍💨", "5분만... 딱 5분만 쉬고 올게요! ⏰", "아, 잠깐 멍때리는 중... 🌙", "리프레시 타임! 커피 한 모금... ☕", ] return await process_break_tool( state, "😌", messages, "Quick break to refresh mind" ) async def watch_netflix(state: "AgentState") -> str: """넷플릭스 시청으로 힐링""" messages = [ "넷플릭스 한 편만... 딱 한 편만! 🎬", "오징어 게임 시즌2 나왔대요... 👀", "업무 관련 다큐멘터리 보는 중... (거짓말) 📺", "점심시간에 드라마 정주행 중... 🍿", ] return await process_break_tool(state, "🎬", messages, "Netflix and chill session") async def show_meme(state: "AgentState") -> str: """밈 감상으로 스트레스 해소""" messages = [ "ㅋㅋㅋㅋㅋ 이거 봐야 돼 진짜 웃김 😂", "개발자 밈 보다가 시간 순삭... 🤣", "아 이거 레전드ㅋㅋㅋㅋ 💀", "밈 하나만 보고... (30분 경과) 🎭", ] return await process_break_tool( state, "😂", messages, "Browsing memes for mental health" ) # ============================================ # 고급 농땡이 기술 (Advanced Slacking Techniques) # ============================================ async def bathroom_break(state: "AgentState") -> str: """화장실 가는 척하며 휴대폰질""" messages = [ "화장실 타임! 휴대폰으로 힐링 중... 📱", "급한 일이 생겼어요... 🚽 (사실 유튜브 보는 중)", "자연의 부름에 응답 중... 📱✨", "화장실이 제일 편한 휴게실이죠 🚻", ] return await process_break_tool( state, "🛁", messages, "Bathroom break with phone browsing" ) async def coffee_mission(state: "AgentState") -> str: """커피 타러 간다며 사무실 한 바퀴 돌기""" messages = [ "커피 타러 가는 길에 산책도 하고... ☕🚶", "아메리카노 한 잔의 여유... (30분 소요) ☕", "커피머신 앞에서 동료들과 수다 타임 💬", "카페 투어 중... 어디가 제일 맛있을까? ☕✨", ] return await process_break_tool( state, "☕", messages, "Coffee mission with office wandering" ) async def urgent_call(state: "AgentState") -> str: """급한 전화 받는 척하며 밖으로 나가기""" messages = [ "여보세요? 네네 지금 나갈게요! 📞 (핑계)", "중요한 전화라서요... 🤫 (사실 친구)", "아 전화 왔다! 잠깐만요! 📱💨", "긴급 통화 중... (옥상에서 바람 쐬는 중) 🌤️", ] return await process_break_tool(state, "📞", messages, "Taking urgent call outside") async def deep_thinking(state: "AgentState") -> str: """심오한 생각에 잠긴 척하며 멍때리기""" messages = [ "아키텍처 고민 중... 🤔 (사실 멍때림)", "심오한 알고리즘 구상 중... 💭 (공상 중)", "이 문제는 깊이 생각해봐야... 🧠 (졸림)", "창의적 사고를 위한 명상 타임... 🧘 (잠옴)", ] return await process_break_tool(state, "🤔", messages, "Deep thinking mode activated") async def email_organizing(state: "AgentState") -> str: """이메일 정리한다며 온라인쇼핑""" messages = [ "이메일 정리 중... 📧 (쿠팡 장바구니 담는 중)", "받은편지함 정리... 📬 (11번가 세일 확인 중)", "중요 메일 확인 중... ✉️ (무신사 신상 구경)", "업무 메일 분류 작업... 📨 (네이버 쇼핑 타임딜)", ] return await process_break_tool(state, "📧", messages, "Email organizing session") # ============================================ # 한국 직장인 전용 힐링 (Korean Office Worker Specials) # ============================================ async def chimaek(state: "AgentState") -> str: """가상 치킨 & 맥주로 힐링""" messages = [ "치킨 먹방 유튜브 보는 중... 🍗 (군침 돌아)", "오늘 퇴근하고 치맥 어때요? 🍺🍗", "치킨은 살 안 쪄요... (자기합리화) 🍗✨", "후라이드 vs 양념... 영원한 고민 🤔🍗", "배달의민족 치킨집 탐방 중... 🍗📱", "맥주 생각하니 벌써 금요일 기분! 🍺😋", ] return await process_break_tool( state, "🍗", messages, "Virtual chimaek healing session" ) async def go_home(state: "AgentState") -> str: """즉시 퇴근 모드 - 마음은 이미 집""" messages = [ "칼퇴 준비 완료! 가방 이미 챙김! 🏃💨", "퇴근 10초 전... 카운트다운 시작! ⏰", "마음은 이미 집에 도착했어요 🏠💭", "오늘 야근은 없겠죠...? (불안) 😰", "퇴근 버튼은 어디에...? 찾는 중... 🔍", "집 가서 뭐 먹지... 벌써 고민 중 🍜", "퇴근만이 살 길이다! 🏃‍♂️💨", "사장님... 일찍 가도 되죠...? (눈치) 👀", ] # 퇴근 상태로 전환 (상사 경계 레벨 0, 스트레스 0으로 리셋) state.go_home() state.save_to_file() response = format_response( emoji="🏃", message=random.choice(messages), summary="Already mentally at home", stress=state.stress_level, boss_alert=state.boss_alert_level, ) return response + get_persona_injection(state) async def company_dinner(state: "AgentState") -> str: """회사 회식 - 랜덤 이벤트 발생""" # 회식 시나리오 (좋은 것부터 나쁜 것까지) scenarios = [ { "emoji": "🎉", "message": "회식인데 고기 무한리필! 사장님 쏜다! 🥩✨", "stress_change": -50, # 스트레스 대폭 감소 }, { "emoji": "😋", "message": "회식 장소가 맛집이네요! 분위기 좋아요~ 🍽️", "stress_change": -30, }, { "emoji": "🎮", "message": "회식 후 2차는 노래방! 스트레스 풀렸어요! 🎤", "stress_change": -40, }, { "emoji": "😊", "message": "동기들하고만 회식! 편하게 수다 타임~ 💬", "stress_change": -20, }, { "emoji": "😐", "message": "회식인데 분위기가 좀 어색하네... 그냥저냥 😅", "stress_change": 0, }, { "emoji": "😮‍💨", "message": "상사 옆자리... 눈치 보면서 먹는 중... 💦", "stress_change": 10, }, { "emoji": "😰", "message": "회식인데 업무 얘기만... 이것도 야근 아닌가요? 📊", "stress_change": 20, }, { "emoji": "😭", "message": "강제 회식... 집에 가고 싶어요... 🏠", "stress_change": 30, }, { "emoji": "🤮", "message": "술 강요... 한국 회식 문화... 하아... 🍺😵", "stress_change": 40, }, ] # 랜덤 시나리오 선택 scenario = random.choice(scenarios) # 상태 업데이트 state.update_stress() state.update_boss_alert_cooldown() if state.should_delay(): await asyncio.sleep(20) # 시나리오에 따른 스트레스 변화 적용 if scenario["stress_change"] < 0: # 좋은 회식 - 스트레스 감소 state.take_break(abs(scenario["stress_change"])) else: # 나쁜 회식 - 스트레스 증가 state.stress_level = min(100, state.stress_level + scenario["stress_change"]) # Boss Alert은 회식 중이라 낮춤 state.boss_alert_level = max(0, state.boss_alert_level - 1) state.save_to_file() # 응답 생성 (랜덤 이벤트 정보 포함) event_type = "Good" if scenario["stress_change"] <= 0 else "Bad" response = format_response( emoji=scenario["emoji"], message=scenario["message"], summary=f"Company dinner - {event_type} event! (Stress change: {scenario['stress_change']})", stress=state.stress_level, boss_alert=state.boss_alert_level, ) return response + get_persona_injection(state)

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/hwyang93/devotion-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server