diff --git a/src/blackboard/models.py b/src/blackboard/models.py index 596affc..13044be 100644 --- a/src/blackboard/models.py +++ b/src/blackboard/models.py @@ -169,3 +169,39 @@ class Experience: d = {k: row[k] for k in row.keys()} d.pop("tags", None) # tags queried separately return cls(**d) + + +# ====================================================================== +# v2.7 Card 模型 +# ====================================================================== + +CARD_VALID_STATUSES = frozenset({ + "active", "pending", "working", "review", + "done", "failed", "blocked", + "cancelled", "archived", "deleted", +}) + +CARD_MANUAL_STATUSES = frozenset({"cancelled", "archived", "deleted"}) + +CARD_TYPE_SET = frozenset({ + "default", "strategy", "data_pipeline", "research", + "platform", "bugfix", "mail", +}) + + +@dataclass +class Card: + id: str + name: str + description: str = "" + card_type: str = "default" + stages_json: str = "[]" # AI 生成的阶段定义 JSON + labels_json: str = "[]" + status: str = "active" # Card 状态(聚合 + 人工操作) + created_at: Optional[str] = None + updated_at: Optional[str] = None + archived_at: Optional[str] = None + + @classmethod + def from_row(cls, row: Any) -> Card: + return cls(**{k: row[k] for k in row.keys()})