""" 通讯录子图状态定义 Contact Subgraph State Definition """ from enum import Enum, auto from typing import Optional, Dict, List, Any from dataclasses import dataclass, field class ContactAction(Enum): """通讯录操作类型""" NONE = auto() CONTACT_LIST = auto() # 联系人列表 CONTACT_ADD = auto() # 添加联系人 CONTACT_UPDATE = auto() # 更新联系人 CONTACT_DELETE = auto() # 删除联系人 EMAIL_LIST = auto() # 邮件列表 EMAIL_READ = auto() # 读取邮件 EMAIL_SEND = auto() # 发送邮件 SNIFF_CONTACTS = auto() # 智能嗅探 @dataclass class Contact: """联系人数据结构""" id: Optional[str] = None name: str = "" phone: str = "" email: str = "" company: str = "" position: str = "" notes: str = "" created_at: Optional[str] = None updated_at: Optional[str] = None metadata: Dict[str, Any] = field(default_factory=dict) @dataclass class Email: """邮件数据结构""" id: Optional[str] = None subject: str = "" sender: str = "" recipients: List[str] = field(default_factory=list) date: Optional[str] = None body: str = "" is_read: bool = False mailbox: str = "" metadata: Dict[str, Any] = field(default_factory=dict) @dataclass class ContactState: """通讯录子图状态""" # ========== 输入 ========== user_query: str = "" # 用户查询 user_id: str = "" # 用户ID # 操作控制 action: ContactAction = ContactAction.NONE action_params: Dict[str, Any] = field(default_factory=dict) # ========== 执行过程 ========== # 当前阶段 current_phase: str = "init" # init, processing, reviewing, done # 联系人相关 contacts: List[Contact] = field(default_factory=list) current_contact: Optional[Contact] = None # 邮件相关 emails: List[Email] = field(default_factory=list) current_email: Optional[Email] = None # 邮件草稿(用于审核) draft_subject: str = "" draft_recipient: str = "" draft_body: str = "" # ========== 人工审核相关 ========== pending_review: bool = False review_type: str = "" # email_send, contact_delete review_prompt: str = "" review_approved: Optional[bool] = None review_comment: str = "" review_modified_content: str = "" # ========== 智能嗅探 ========== sniff_result: Optional[Dict[str, Any]] = None sniffed_contacts: List[Contact] = field(default_factory=list) sniff_confirmation_pending: bool = False # ========== 结果 ========== success: bool = False error_message: str = "" final_result: str = "" result_data: Dict[str, Any] = field(default_factory=dict) # ========== 元数据 ========== start_time: Optional[str] = None end_time: Optional[str] = None duration: float = 0.0 debug_info: Dict[str, Any] = field(default_factory=dict)