package stream import ( "time" ) // EventType 定义流式事件类型 type EventType string const ( EventTurnAck EventType = "turn_ack" // 回合确认:用户消息已落库,携带 user_message_id EventPhase EventType = "phase" // 阶段性状态跃迁(组建小队、法规筛选、初稿撰写、门禁审核) EventStatus EventType = "status" // 意图识别结果、成熟度状态机更新 EventSummary EventType = "summary" // 提炼的核心进展摘要(低认知负荷) EventBriefing EventType = "briefing" // 贴身业务参谋决策锦囊(B轨赋能) EventDelta EventType = "delta" // 对话自然语言逐字/逐句流式吐出 EventDetail EventType = "detail" // 详细推演草稿或思考链(按需显示,默认折叠) EventDeliverable EventType = "deliverable" // A轨正式合规文档生成通知 EventGovernance EventType = "governance" // 受控文档治理与认领/变更提案拦截通知 EventError EventType = "error" // 运行异常警报 EventDone EventType = "done" // 会话流完成 ) // GovernancePayload 文档治理生命周期与认领变更载荷 type GovernancePayload struct { DocID string `json:"doc_id"` Action string `json:"action"` // claimed, proposal_required, proposal_decided, submitted_review, rejected, approved CurrentState string `json:"current_state"` // drafting, reviewing, approving, approved IsLocked bool `json:"is_locked"` AuthorClaimed bool `json:"author_claimed"` ProposalID string `json:"proposal_id,omitempty"` ProposedChanges string `json:"proposed_changes,omitempty"` ImpactSummary string `json:"impact_summary,omitempty"` RiskSummary string `json:"risk_summary,omitempty"` AuthorDecision string `json:"author_decision,omitempty"` NotificationTitle string `json:"notification_title"` // 用户前台高亮简报标题 NotificationMsg string `json:"notification_msg"` // 用户前台高亮简报内容 } // PhasePayload 阶段性任务状态更新载荷 type PhasePayload struct { PhaseID string `json:"phase_id"` // 如 squad_assembly, knowledge_retrieval, step_executing, quality_gate Message string `json:"message"` // 用户友好的自然语言进度说明 Role string `json:"role,omitempty"` // 角色 (如 regulatory, writer, leader) StepIndex int `json:"step_index,omitempty"` // 当前步骤索引 (如 1) TotalSteps int `json:"total_steps,omitempty"` // 总步骤数 (如 3) Progress int `json:"progress,omitempty"` // 百分比估算 (0-100) } // StatusPayload 意图与状态机更新载荷 type StatusPayload struct { Intent string `json:"intent,omitempty"` Branch string `json:"branch,omitempty"` CurrentStage string `json:"current_stage,omitempty"` Patches map[string]string `json:"patches,omitempty"` Message string `json:"message,omitempty"` } // SummaryPayload 核心进展摘要载荷 (低认知负荷) type SummaryPayload struct { Title string `json:"title"` Content string `json:"content"` MaturityScore int `json:"maturity_score,omitempty"` MaturityLevel string `json:"maturity_level,omitempty"` } // DetailPayload 详细执行与推演过程载荷 (按需显示,默认折叠) type DetailPayload struct { Category string `json:"category"` // agent_thought, step_output, tool_call, log StepID string `json:"step_id,omitempty"` // 步骤标识 (如 tasks/01_regulatory) Role string `json:"role,omitempty"` // 对应角色 Title string `json:"title"` // 详情标题 Content string `json:"content"` // 完整推演正文或技术草稿 Collapsible bool `json:"collapsible"` // 客户端是否应当默认折叠显示 } // DeliverablePayload A轨正式合规文档交付载荷 type DeliverablePayload struct { TaskKey string `json:"task_key"` Title string `json:"title"` FilePath string `json:"file_path"` WordCount int `json:"word_count,omitempty"` QualityScore float64 `json:"quality_score,omitempty"` } // TurnAckPayload 回合确认载荷(用户消息落库后立即回传) type TurnAckPayload struct { ClientTurnID string `json:"client_turn_id,omitempty"` UserMessageID int64 `json:"user_message_id,omitempty"` Status string `json:"status,omitempty"` // processing | completed | duplicate Duplicate bool `json:"duplicate,omitempty"` } // DonePayload 流结束载荷 type DonePayload struct { SessionID string `json:"session_id,omitempty"` ClientTurnID string `json:"client_turn_id,omitempty"` DurationMs int64 `json:"duration_ms"` TotalEvents int `json:"total_events"` WorkspaceID string `json:"workspace_id,omitempty"` // P2: 任务工作区目录(供前端「继续任务」续跑) UserMessageID int64 `json:"user_message_id,omitempty"` MessageID int64 `json:"message_id,omitempty"` Status string `json:"status,omitempty"` ContentRevision int `json:"content_revision,omitempty"` ContentSha256 string `json:"content_sha256,omitempty"` ExportCapability any `json:"export_capability,omitempty"` } type ErrorClass string const ( ErrorClassTransient ErrorClass = "transient" ErrorClassResumable ErrorClass = "resumable" ErrorClassFatal ErrorClass = "fatal" ErrorClassCancelled ErrorClass = "cancelled" ) type ErrorInfo struct { UserMessage string `json:"user_message"` Message string `json:"message,omitempty"` Code string `json:"code"` Class ErrorClass `json:"class"` Guide string `json:"guide,omitempty"` PhaseID string `json:"phase_id,omitempty"` Upstream string `json:"upstream,omitempty"` RequestID string `json:"request_id,omitempty"` SessionID string `json:"session_id,omitempty"` WorkspaceID string `json:"workspace_id,omitempty"` Actions []string `json:"actions"` } // StreamEvent 统一多层级流式事件 type StreamEvent struct { ID string `json:"id"` Type EventType `json:"type"` Timestamp time.Time `json:"timestamp"` Phase *PhasePayload `json:"phase,omitempty"` Status *StatusPayload `json:"status,omitempty"` Summary *SummaryPayload `json:"summary,omitempty"` Briefing any `json:"briefing,omitempty"` Detail *DetailPayload `json:"detail,omitempty"` Delta string `json:"delta,omitempty"` Deliverable *DeliverablePayload `json:"deliverable,omitempty"` Governance *GovernancePayload `json:"governance,omitempty"` Error string `json:"error,omitempty"` ErrorInfo *ErrorInfo `json:"error_info,omitempty"` Turn *TurnAckPayload `json:"turn,omitempty"` Done *DonePayload `json:"done,omitempty"` }