169 lines
4.8 KiB
Python
169 lines
4.8 KiB
Python
from __future__ import annotations
|
|
|
|
from .shared import *
|
|
|
|
class CognitiveConflictResponse(BaseModel):
|
|
"""认知冲突响应"""
|
|
id: str
|
|
type: str
|
|
display_type: str
|
|
description: str
|
|
severity: str
|
|
resolution_suggestion: Optional[str] = None
|
|
related_users: List[str]
|
|
|
|
class DailyBriefingResponse(BaseModel):
|
|
"""每日简报响应"""
|
|
date: str
|
|
total_updates: int
|
|
your_updates: int
|
|
relevant_changes: List[Dict[str, Any]]
|
|
risk_alerts: List[Dict[str, Any]]
|
|
alignment_needed: List[Dict[str, Any]]
|
|
|
|
class FeishuCaptureRequest(BaseModel):
|
|
"""飞书信号捕获请求"""
|
|
group_chat_id: str
|
|
message_content: str
|
|
sender: str
|
|
feishu_message_id: Optional[str] = None
|
|
|
|
class BrowserCaptureRequest(BaseModel):
|
|
"""浏览器信号捕获请求"""
|
|
user_id: int
|
|
url: str
|
|
title: str
|
|
content_preview: str
|
|
|
|
class GitHubCaptureRequest(BaseModel):
|
|
"""GitHub信号捕获请求"""
|
|
repo_url: str
|
|
event_type: str
|
|
event_data: Dict[str, Any]
|
|
|
|
class ConflictDetectRequest(BaseModel):
|
|
"""认知冲突检测请求"""
|
|
project_id: int
|
|
detect_type: str = "all" # all, charter, definition
|
|
|
|
class SignalSourceOnboardRequest(BaseModel):
|
|
project_id: int = Field(..., ge=1)
|
|
instruction: str = Field(..., min_length=6, max_length=2000)
|
|
dry_run: bool = False
|
|
response_mode: Literal["fast", "complete"] = "fast"
|
|
|
|
class SignalSourceListResponse(BaseModel):
|
|
items: List[Dict[str, Any]]
|
|
|
|
class SignalSourceRepairRequest(BaseModel):
|
|
project_id: int = Field(..., ge=1)
|
|
registry_ids: List[int] = Field(default_factory=list, min_length=1, max_length=50)
|
|
sender: str = Field(default="PMFlow修复器", min_length=1, max_length=64)
|
|
|
|
class CodeCommentScanRequest(BaseModel):
|
|
"""代码注释扫描请求"""
|
|
code_content: str
|
|
file_path: str
|
|
line_number: int
|
|
project_id: int
|
|
|
|
class BlockerResolveRequest(BaseModel):
|
|
"""阻塞解决请求"""
|
|
blocker_id: int
|
|
resolution_note: str
|
|
|
|
class WorkflowTriggerRequest(BaseModel):
|
|
"""工作流触发请求"""
|
|
event_type: str
|
|
event_data: Dict[str, Any]
|
|
|
|
|
|
class ExecutiveBriefingConfigRequest(BaseModel):
|
|
enabled: bool = True
|
|
send_time: str = Field(default="08:30", pattern=r"^\d{2}:\d{2}$")
|
|
send_cycle: Literal["workdays", "daily"] = "workdays"
|
|
delivery_target_type: Literal["management_group"] = "management_group"
|
|
delivery_target_ref: Optional[str] = Field(default=None, max_length=128)
|
|
timezone: str = Field(default="Asia/Shanghai", min_length=3, max_length=64)
|
|
|
|
|
|
class ExecutiveBriefingMetric(BaseModel):
|
|
label: str
|
|
value: Any
|
|
tone: str
|
|
|
|
|
|
class ExecutiveBriefingItem(BaseModel):
|
|
id: str
|
|
title: str
|
|
display_title: str
|
|
display_subtitle: str
|
|
display_source: str
|
|
technical_identifier: Optional[str] = None
|
|
detail: str
|
|
detail_lines: List[str] = Field(default_factory=list)
|
|
meta: List[Dict[str, str]] = Field(default_factory=list)
|
|
tone: str
|
|
kind: Optional[str] = None
|
|
target: Optional[Dict[str, Any]] = None
|
|
project_id: Optional[int] = None
|
|
project_name: Optional[str] = None
|
|
user_id: Optional[int] = None
|
|
owner_name: Optional[str] = None
|
|
related_user_ids: List[int] = Field(default_factory=list)
|
|
occurred_at: Optional[str] = None
|
|
|
|
|
|
class ExecutiveBriefingSection(BaseModel):
|
|
key: str
|
|
title: str
|
|
summary: str
|
|
metrics: List[ExecutiveBriefingMetric] = Field(default_factory=list)
|
|
items: List[ExecutiveBriefingItem] = Field(default_factory=list)
|
|
drilldown_tab: Optional[str] = None
|
|
|
|
|
|
class ExecutiveBriefingHero(BaseModel):
|
|
title: str
|
|
decision_count: int
|
|
anomaly_count: int
|
|
baseline_generated_at: Optional[str] = None
|
|
live_generated_at: Optional[str] = None
|
|
key_alerts: List[ExecutiveBriefingMetric] = Field(default_factory=list)
|
|
snapshot_state: str = "missing"
|
|
|
|
|
|
class ExecutiveBriefingPayload(BaseModel):
|
|
brief_date: str
|
|
mode: Literal["snapshot", "live"]
|
|
summary: Dict[str, Any]
|
|
hero: ExecutiveBriefingHero
|
|
sections: List[ExecutiveBriefingSection] = Field(default_factory=list)
|
|
delivery: Dict[str, Any] = Field(default_factory=dict)
|
|
|
|
|
|
class DailyBriefingV2PersonalSummary(BaseModel):
|
|
headline: str
|
|
action_count: int = 0
|
|
project_count: int = 0
|
|
|
|
|
|
class DailyBriefingV2PersonalWorkload(BaseModel):
|
|
user_id: int
|
|
user_name: str
|
|
assigned_hours: float = 0
|
|
max_weekly_hours: float = 0
|
|
workload_ratio: int = 0
|
|
tone: str = "info"
|
|
|
|
|
|
class DailyBriefingV2Payload(BaseModel):
|
|
brief_date: str
|
|
mode: Literal["snapshot", "live"]
|
|
viewer_scope: Literal["tenant_full", "personal"]
|
|
hero: ExecutiveBriefingHero
|
|
sections: List[ExecutiveBriefingSection] = Field(default_factory=list)
|
|
personal_summary: Optional[DailyBriefingV2PersonalSummary] = None
|
|
personal_workload: Optional[DailyBriefingV2PersonalWorkload] = None
|
|
export_title: str
|