feat(agents): Phase 7-10 API endpoints for hooks, plugins, skills, sessions
This commit is contained in:
113
backend/app/routers/agent_sessions.py
Normal file
113
backend/app/routers/agent_sessions.py
Normal file
@@ -0,0 +1,113 @@
|
||||
"""Agent Session API 路由 - Phase 10.3"""
|
||||
|
||||
from typing import Any
|
||||
|
||||
from fastapi import APIRouter, HTTPException
|
||||
|
||||
from app.agents.session.manager import AgentSession, create_agent_session, get_agent_session
|
||||
|
||||
router = APIRouter(prefix="/api/agent/sessions", tags=["Agent Sessions"])
|
||||
|
||||
|
||||
@router.post("", response_model=dict[str, Any])
|
||||
async def create_session(
|
||||
user_id: str | None = None,
|
||||
parent_session_id: str | None = None,
|
||||
) -> dict[str, Any]:
|
||||
"""创建新会话"""
|
||||
session = create_agent_session(
|
||||
user_id=user_id,
|
||||
parent_session_id=parent_session_id,
|
||||
)
|
||||
return await session.initialize()
|
||||
|
||||
|
||||
@router.get("/{session_id}", response_model=dict[str, Any])
|
||||
async def get_session(session_id: str) -> dict[str, Any]:
|
||||
"""获取会话信息"""
|
||||
session = get_agent_session(session_id)
|
||||
if not session:
|
||||
raise HTTPException(status_code=404, detail=f"Session '{session_id}' not found")
|
||||
return await session.get_session_summary()
|
||||
|
||||
|
||||
@router.post("/{session_id}/message", response_model=dict[str, str])
|
||||
async def process_message(
|
||||
session_id: str,
|
||||
message: str,
|
||||
response: str,
|
||||
) -> dict[str, str]:
|
||||
"""处理消息"""
|
||||
session = get_agent_session(session_id)
|
||||
if not session:
|
||||
raise HTTPException(status_code=404, detail=f"Session '{session_id}' not found")
|
||||
await session.process_message(message, response)
|
||||
return {"status": "recorded", "session_id": session_id}
|
||||
|
||||
|
||||
@router.post("/{session_id}/spawn", response_model=dict[str, Any])
|
||||
async def spawn_child_session(
|
||||
session_id: str,
|
||||
user_id: str | None = None,
|
||||
) -> dict[str, Any]:
|
||||
"""创建子会话"""
|
||||
session = get_agent_session(session_id)
|
||||
if not session:
|
||||
raise HTTPException(status_code=404, detail=f"Session '{session_id}' not found")
|
||||
child = await session.spawn_child_session(user_id=user_id)
|
||||
return await child.get_session_summary()
|
||||
|
||||
|
||||
@router.get("/{session_id}/history", response_model=dict[str, Any])
|
||||
async def get_session_history(session_id: str) -> dict[str, Any]:
|
||||
"""获取会话历史"""
|
||||
session = get_agent_session(session_id)
|
||||
if not session:
|
||||
raise HTTPException(status_code=404, detail=f"Session '{session_id}' not found")
|
||||
return {
|
||||
"session_id": session_id,
|
||||
"history": session.get_history(),
|
||||
"count": len(session._history),
|
||||
}
|
||||
|
||||
|
||||
@router.post("/{session_id}/persist", response_model=dict[str, str])
|
||||
async def persist_session(session_id: str) -> dict[str, str]:
|
||||
"""持久化会话"""
|
||||
session = get_agent_session(session_id)
|
||||
if not session:
|
||||
raise HTTPException(status_code=404, detail=f"Session '{session_id}' not found")
|
||||
success = await session.persist()
|
||||
if success:
|
||||
return {"status": "persisted", "session_id": session_id}
|
||||
raise HTTPException(status_code=500, detail="Failed to persist session")
|
||||
|
||||
|
||||
@router.post("/{session_id}/metadata", response_model=dict[str, Any])
|
||||
async def set_session_metadata(
|
||||
session_id: str,
|
||||
key: str,
|
||||
value: Any,
|
||||
) -> dict[str, Any]:
|
||||
"""设置会话元数据"""
|
||||
session = get_agent_session(session_id)
|
||||
if not session:
|
||||
raise HTTPException(status_code=404, detail=f"Session '{session_id}' not found")
|
||||
session.add_metadata(key, value)
|
||||
await session.persist()
|
||||
return {"key": key, "value": value}
|
||||
|
||||
|
||||
@router.get("/{session_id}/metadata/{key}", response_model=dict[str, Any])
|
||||
async def get_session_metadata(
|
||||
session_id: str,
|
||||
key: str,
|
||||
) -> dict[str, Any]:
|
||||
"""获取会话元数据"""
|
||||
session = get_agent_session(session_id)
|
||||
if not session:
|
||||
raise HTTPException(status_code=404, detail=f"Session '{session_id}' not found")
|
||||
value = session.get_metadata(key)
|
||||
if value is None:
|
||||
raise HTTPException(status_code=404, detail=f"Metadata key '{key}' not found")
|
||||
return {"key": key, "value": value}
|
||||
Reference in New Issue
Block a user