feat: Agent Office — AI 에이전트 가상 오피스 #2

Merged
gahusb merged 15 commits from feat/agent-office into main 2026-04-11 13:35:25 +09:00
4 changed files with 16 additions and 9 deletions
Showing only changes of commit 6922217da6 - Show all commits

View File

@@ -63,7 +63,9 @@ class MusicAgent(BaseAgent):
approve_task(task_id, via="telegram")
await self.transition("working", "작곡 중...", task_id)
asyncio.create_task(self._poll_composition(task_id, task))
async def _poll_composition(self, task_id: str, task: dict) -> None:
try:
input_data = task["input_data"]
payload = {

View File

@@ -45,12 +45,16 @@ class StockAgent(BaseAgent):
return {"ok": True, "message": "뉴스 수집 시작"}
if command == "add_alert":
symbol = params.get("symbol")
target_price = params.get("target_price")
if not symbol or target_price is None:
return {"ok": False, "message": "symbol과 target_price는 필수입니다"}
config = get_agent_config(self.agent_id)
alerts = config["custom_config"].get("alerts", [])
alerts.append({
"symbol": params["symbol"],
"name": params.get("name", params["symbol"]),
"target_price": params["target_price"],
"symbol": symbol,
"name": params.get("name", symbol),
"target_price": target_price,
"direction": params.get("direction", "above"),
})
from ..db import update_agent_config

View File

@@ -1,6 +1,6 @@
import os
import json
from fastapi import FastAPI, WebSocket, WebSocketDisconnect
from fastapi import FastAPI, HTTPException, WebSocket, WebSocketDisconnect
from fastapi.middleware.cors import CORSMiddleware
from .config import CORS_ALLOW_ORIGINS
@@ -48,7 +48,10 @@ async def websocket_endpoint(ws: WebSocket):
}, ensure_ascii=False))
while True:
data = await ws.receive_text()
msg = json.loads(data)
try:
msg = json.loads(data)
except json.JSONDecodeError:
continue
await _handle_ws_message(msg)
except WebSocketDisconnect:
pass
@@ -86,7 +89,7 @@ def list_agents():
def agent_detail(agent_id: str):
config = get_agent_config(agent_id)
if not config:
return {"error": "Agent not found"}, 404
raise HTTPException(status_code=404, detail="Agent not found")
agent = get_agent(agent_id)
state_info = {"state": agent.state, "detail": agent.state_detail} if agent else {}
return {**config, **state_info}
@@ -114,7 +117,7 @@ def pending_tasks():
def task_detail(task_id: str):
task = get_task(task_id)
if not task:
return {"error": "Task not found"}, 404
raise HTTPException(status_code=404, detail="Task not found")
return task
@app.post("/api/agent-office/command")

View File

@@ -1,7 +1,5 @@
fastapi==0.115.6
uvicorn[standard]==0.30.6
requests==2.32.3
apscheduler==3.10.4
python-telegram-bot==21.5
websockets>=12.0
httpx>=0.27