This commit is contained in:
雷雨
2025-12-15 22:05:56 +08:00
commit 8635b84b2d
230 changed files with 53888 additions and 0 deletions

View File

@@ -0,0 +1,117 @@
#!/usr/bin/env python3
"""
最小验证脚本:基于官方 /open/v1 端点,跑通创建→更新→完成→删除 闭环。
前置:已完成 OAuth 认证,存在 oauth_config.json。
步骤:
1) 创建临时项目
2) 在项目下创建任务(含 desc、reminders、items、timeZone/日期)
3) 更新任务(修改 desc/priority/reminders
4) 完成任务
5) 删除任务
6) 删除临时项目
"""
from __future__ import annotations
import sys
import time
from datetime import datetime, timedelta
from tools.official_api import init_api, APIError
from tools.adapter import adapter
def ts() -> str:
return datetime.now().strftime("%Y-%m-%d %H:%M:%S")
def main() -> int:
print(f"[{ts()}] 初始化 OAuth 客户端…")
try:
init_api(config_path="oauth_config.json")
except Exception as e:
print("初始化失败:请先运行 `python scripts/oauth_authenticate.py --port 38000` 完成认证。")
print(f"详情: {e}")
return 1
# 1) 创建临时项目
demo_name = f"MCP Demo {int(time.time())}"
print(f"[{ts()}] 创建演示项目: {demo_name}")
project = adapter.create_project(name=demo_name, color="#F18181")
project_id = project.get("id")
if not project_id:
print("创建项目失败:未返回 id")
return 1
print(f"[{ts()}] 项目ID: {project_id}")
try:
# 2) 创建任务
start_local = (datetime.now() + timedelta(minutes=5)).strftime("%Y-%m-%d %H:%M:%S")
due_local = (datetime.now() + timedelta(hours=1)).strftime("%Y-%m-%d %H:%M:%S")
print(f"[{ts()}] 创建任务…")
task = adapter.create_task({
"title": "Demo Task",
"projectId": project_id,
"content": "Demo content",
"desc": "Checklist description",
"isAllDay": False,
"startDate": start_local,
"dueDate": due_local,
"timeZone": "Asia/Shanghai",
"reminders": ["TRIGGER:PT0S"],
"repeatFlag": "RRULE:FREQ=DAILY;INTERVAL=1",
"priority": 1,
"sortOrder": 12345,
"items": [
{
"title": "Subtask A",
"isAllDay": False,
"startDate": start_local,
"sortOrder": 1
}
]
})
task_id = task.get("id")
if not task_id:
print("创建任务失败:未返回 id")
return 1
print(f"[{ts()}] 任务ID: {task_id}")
# 3) 更新任务
print(f"[{ts()}] 更新任务…")
task = adapter.update_task(task_id, {
"projectId": project_id,
"desc": "Checklist description (updated)",
"priority": 3,
"reminders": ["TRIGGER:P0DT9H0M0S"],
})
print(f"[{ts()}] 更新后 priority={task.get('priority')} reminders={task.get('reminders')}")
# 4) 完成任务
print(f"[{ts()}] 完成任务…")
adapter.complete_task(project_id, task_id)
tasks_after = adapter.list_tasks(project_id=project_id, completed=True)
done = next((t for t in tasks_after if t.get('id') == task_id), None)
print(f"[{ts()}] 完成校验 isCompleted={done.get('isCompleted') if done else None}")
# 5) 删除任务
print(f"[{ts()}] 删除任务…")
adapter.delete_task(project_id, task_id)
print(f"[{ts()}] 任务已删除")
finally:
# 6) 清理项目
print(f"[{ts()}] 删除项目…")
try:
adapter.delete_project(project_id)
print(f"[{ts()}] 项目已删除")
except APIError as e:
print(f"删除项目失败(可忽略):{e}")
print(f"[{ts()}] 演示完毕 ✅")
return 0
if __name__ == "__main__":
sys.exit(main())