auto-sync: 2026-05-17 13:05:16
This commit is contained in:
@@ -38,12 +38,28 @@ async def list_tasks(project_id: str,
|
||||
|
||||
|
||||
@router.get("/tasks/{task_id}")
|
||||
async def get_task(project_id: str, task_id: str):
|
||||
async def get_task(project_id: str, task_id: str,
|
||||
expand: Optional[str] = None):
|
||||
bb = _bb(project_id)
|
||||
task = bb.get_task(task_id)
|
||||
if not task:
|
||||
raise HTTPException(404, f"Task not found: {task_id}")
|
||||
return _task_to_dict(task)
|
||||
result = _task_to_dict(task)
|
||||
if expand == "all":
|
||||
q = _q(project_id)
|
||||
detail = q.task_detail(task_id)
|
||||
if detail:
|
||||
result["comments_count"] = detail.get("comments_count", 0)
|
||||
result["outputs_count"] = detail.get("outputs_count", 0)
|
||||
result["review_status"] = detail.get("review_status")
|
||||
result["latest_event_detail"] = detail.get("latest_event_detail")
|
||||
result["comments"] = [dict(c.__dict__) for c in bb.get_comments(task_id)]
|
||||
result["outputs"] = [dict(o.__dict__) for o in bb.get_outputs(task_id)]
|
||||
result["reviews"] = [dict(r.__dict__) for r in bb.get_reviews(task_id)]
|
||||
result["decisions"] = [dict(d.__dict__) for d in bb.get_decisions(task_id)]
|
||||
result["events"] = q.task_events(task_id)
|
||||
result["experiences"] = q.task_experiences(task_id)
|
||||
return result
|
||||
|
||||
|
||||
@router.post("/tasks")
|
||||
@@ -104,11 +120,13 @@ async def add_comment(project_id: str, task_id: str, body: Dict[str, Any]):
|
||||
@router.get("/tasks/{task_id}/outputs")
|
||||
async def get_outputs(project_id: str, task_id: str):
|
||||
bb = _bb(project_id)
|
||||
return {"outputs": [dict(o.__dict__) for o in bb.get_outputs(task_id)]}
|
||||
return {"decisions": [dict(d.__dict__) for d in bb.get_decisions(task_id)]}
|
||||
|
||||
|
||||
@router.post("/tasks/{task_id}/outputs")
|
||||
async def write_output(project_id: str, task_id: str, body: Dict[str, Any]):
|
||||
# --- Per-task Decisions (POST) ---
|
||||
|
||||
@router.post("/tasks/{task_id}/decisions")
|
||||
async def add_decision(project_id: str, task_id: str, body: Dict[str, Any]):
|
||||
bb = _bb(project_id)
|
||||
oid = bb.write_output(task_id, body["agent"], body["type"],
|
||||
body["title"], content_path=body.get("path"),
|
||||
@@ -161,6 +179,19 @@ async def add_review(project_id: str, task_id: str, body: Dict[str, Any]):
|
||||
|
||||
# --- Events ---
|
||||
|
||||
@router.get("/tasks/{task_id}/events")
|
||||
async def get_task_events(project_id: str, task_id: str,
|
||||
limit: int = Query(50, le=200)):
|
||||
q = _q(project_id)
|
||||
return {"events": q.task_events(task_id, limit)}
|
||||
|
||||
|
||||
@router.get("/tasks/{task_id}/experiences")
|
||||
async def get_task_experiences(project_id: str, task_id: str):
|
||||
q = _q(project_id)
|
||||
return {"experiences": q.task_experiences(task_id)}
|
||||
|
||||
|
||||
@router.get("/events")
|
||||
async def get_events(project_id: str, limit: int = Query(50, le=200)):
|
||||
q = _q(project_id)
|
||||
|
||||
Reference in New Issue
Block a user