feat(protocol): implement unified protocol_muse package, wheel caching, and rebuild recovery
This commit is contained in:
@@ -0,0 +1,45 @@
|
||||
"""Task queue model for protocol_muse."""
|
||||
from dataclasses import dataclass, field
|
||||
from typing import List, Dict, Any, Optional
|
||||
|
||||
@dataclass
|
||||
class TaskItem:
|
||||
name: str
|
||||
queue: str # "pending", "claimed", "done"
|
||||
owner: Optional[str] = None
|
||||
age_s: Optional[float] = None
|
||||
|
||||
@dataclass
|
||||
class QueueSnapshot:
|
||||
ok: bool
|
||||
tasks: List[TaskItem] = field(default_factory=list)
|
||||
counts: Dict[str, int] = field(default_factory=lambda: {"pending": 0, "claimed": 0, "done": 0})
|
||||
|
||||
@property
|
||||
def pending_count(self) -> int:
|
||||
return self.counts.get("pending", 0)
|
||||
|
||||
@property
|
||||
def claimed_count(self) -> int:
|
||||
return self.counts.get("claimed", 0)
|
||||
|
||||
@property
|
||||
def done_count(self) -> int:
|
||||
return self.counts.get("done", 0)
|
||||
|
||||
@classmethod
|
||||
def from_dict(cls, data: Dict[str, Any]) -> "QueueSnapshot":
|
||||
tasks = []
|
||||
for t in data.get("tasks", []):
|
||||
tasks.append(TaskItem(
|
||||
name=t.get("name", ""),
|
||||
queue=t.get("queue", "pending"),
|
||||
owner=t.get("owner"),
|
||||
age_s=t.get("age_s"),
|
||||
))
|
||||
counts = data.get("counts", {
|
||||
"pending": sum(1 for t in tasks if t.queue == "pending"),
|
||||
"claimed": sum(1 for t in tasks if t.queue == "claimed"),
|
||||
"done": sum(1 for t in tasks if t.queue == "done"),
|
||||
})
|
||||
return cls(ok=bool(data.get("ok", True)), tasks=tasks, counts=counts)
|
||||
Reference in New Issue
Block a user