ADK-agents/mcp_server/task_store.py
2026-07-29 17:21:34 +08:00

57 lines
1.7 KiB
Python

"""
任务持久化存储
使用 JSON 文件存储任务数据
"""
import os
import json
import time
from typing import Dict, List, Optional
class TaskStore:
def __init__(self, store_dir: str):
self.store_dir = os.path.abspath(store_dir)
os.makedirs(self.store_dir, exist_ok=True)
def _task_path(self, task_id: str) -> str:
return os.path.join(self.store_dir, f"{task_id}.json")
def save(self, task: dict) -> None:
task["updated_at"] = time.time()
path = self._task_path(task["id"])
with open(path, "w", encoding="utf-8") as f:
json.dump(task, f, ensure_ascii=False, indent=2)
def load(self, task_id: str) -> Optional[dict]:
path = self._task_path(task_id)
if not os.path.exists(path):
return None
with open(path, "r", encoding="utf-8") as f:
return json.load(f)
def list_all(self) -> List[dict]:
tasks = []
for filename in os.listdir(self.store_dir):
if filename.endswith(".json"):
task_id = filename[:-5]
task = self.load(task_id)
if task:
tasks.append(task)
tasks.sort(key=lambda t: t.get("created_at", 0), reverse=True)
return tasks
def append_log(self, task_id: str, log_line: str) -> None:
task = self.load(task_id)
if not task:
return
if "logs" not in task:
task["logs"] = []
task["logs"].append({
"time": time.strftime("%Y-%m-%d %H:%M:%S"),
"message": log_line,
})
# 日志最多保留 500 条
if len(task["logs"]) > 500:
task["logs"] = task["logs"][-500:]
self.save(task)