package bizdev import ( "context" "time" "chat-agent-system/internal/ctxmgr" "chat-agent-system/internal/docgov" "chat-agent-system/internal/kb" "chat-agent-system/internal/squad" "chat-agent-system/internal/storage" ) type TaskMeta = squad.TaskMeta type AdvisorBriefing = squad.AdvisorBriefing // MaturityStage 定义商务对接成熟度螺旋收敛阶段 type MaturityStage string const ( StageV01_Triage MaturityStage = "V0.1_triage" // 闪电摸底与盲区探测 StageV05_Feasibility MaturityStage = "V0.5_feasibility" // 方案成型与法规对齐 StageV10_Quoting MaturityStage = "V1.0_quoting" // 工程拆解与商业锁定 ) // StageMeta 商务对接阶段元数据说明 type StageMeta struct { Stage MaturityStage `json:"stage"` Title string `json:"title"` Description string `json:"description"` Tasks []string `json:"tasks"` } type MaterialInput struct { Filename string `json:"filename"` Content []byte `json:"content"` AssetID int64 `json:"asset_id,omitempty"` } type Attachment = squad.Attachment type CaseSearchOptions = ctxmgr.CaseSearchOptions type TaskRunRequest struct { TaskKey string `json:"task_key"` Title string `json:"title,omitempty"` // 自由任务人类可读标题(非标任务自主规划使用) ProjectName string `json:"project_name"` CustomerName string `json:"customer_name"` DeviceType string `json:"device_type"` IntendedUse string `json:"intended_use"` TargetMarket string `json:"target_market"` Fields map[string]string `json:"fields"` Materials []MaterialInput `json:"materials"` Backend string `json:"backend"` Timeout time.Duration `json:"timeout"` WorkDir string `json:"work_dir"` CustomSteps []squad.StepSpec `json:"custom_steps,omitempty"` AutoRepair bool `json:"auto_repair,omitempty"` KnowledgeHits []squad.KnowledgeHit `json:"knowledge_hits,omitempty"` PriorDocs []squad.PriorDocItem `json:"prior_docs,omitempty"` SessionID string `json:"session_id,omitempty"` UserID int64 `json:"user_id,omitempty"` ProjectID int64 `json:"project_id,omitempty"` ClientTurnID string `json:"client_turn_id,omitempty"` RunID string `json:"run_id,omitempty"` UserContext string `json:"user_context,omitempty"` MemoryBankFiles map[string]string `json:"memory_bank_files,omitempty"` DocID string `json:"doc_id,omitempty"` AuthorID int64 `json:"author_id,omitempty"` AuthorName string `json:"author_name,omitempty"` ReviewerID int64 `json:"reviewer_id,omitempty"` ReviewerName string `json:"reviewer_name,omitempty"` ApproverID int64 `json:"approver_id,omitempty"` ApproverName string `json:"approver_name,omitempty"` ForceDirectEdit bool `json:"force_direct_edit,omitempty"` } type TaskRunResult struct { TaskKey string `json:"task_key"` ArtifactTitle string `json:"artifact_title"` MarkdownBody string `json:"markdown_body"` ExtractedData map[string]string `json:"extracted_data"` Attachments []Attachment `json:"attachments"` WorkDir string `json:"work_dir"` BackendUsed string `json:"backend_used"` Duration time.Duration `json:"duration"` Success bool `json:"success"` ErrorReason string `json:"error_reason,omitempty"` QualityReport *squad.QualityReport `json:"quality_report,omitempty"` Manifest *squad.Manifest `json:"manifest,omitempty"` AdvisorBrief *AdvisorBriefing `json:"advisor_brief,omitempty"` DocRecord *docgov.DocumentRecord `json:"doc_record,omitempty"` PendingProposal *docgov.ChangeProposal `json:"pending_proposal,omitempty"` // RequiresAuthorApproval: human must decide. Disambiguate: // - PendingProposal != nil → DocGov claimed-doc change proposal // - PendingAgentCandidateID > 0 → high-risk revision candidate (ledger not committed) RequiresAuthorApproval bool `json:"requires_author_approval,omitempty"` // Pending agent revision confirmation (high/critical): fact source stays on ledger head. PendingAgentCandidateID int64 `json:"pending_agent_candidate_id,omitempty"` PendingChangeReportID int64 `json:"pending_change_report_id,omitempty"` PendingRiskLevel string `json:"pending_risk_level,omitempty"` PendingConfirmationNote string `json:"pending_confirmation_note,omitempty"` } // StageRunRequest 运行指定成熟度阶段请求 type StageRunRequest struct { Stage MaturityStage `json:"stage"` ProjectName string `json:"project_name"` CustomerName string `json:"customer_name"` DeviceType string `json:"device_type"` IntendedUse string `json:"intended_use"` TargetMarket string `json:"target_market"` Fields map[string]string `json:"fields,omitempty"` Materials []MaterialInput `json:"materials,omitempty"` Backend string `json:"backend,omitempty"` Timeout time.Duration `json:"timeout,omitempty"` WorkDir string `json:"work_dir,omitempty"` AutoRepair bool `json:"auto_repair,omitempty"` PriorDocs []squad.PriorDocItem `json:"prior_docs,omitempty"` KnowledgeHits []squad.KnowledgeHit `json:"knowledge_hits,omitempty"` SessionID string `json:"session_id,omitempty"` UserID int64 `json:"user_id,omitempty"` ProjectID int64 `json:"project_id,omitempty"` ClientTurnID string `json:"client_turn_id,omitempty"` RunID string `json:"run_id,omitempty"` DocID string `json:"doc_id,omitempty"` AuthorID int64 `json:"author_id,omitempty"` AuthorName string `json:"author_name,omitempty"` ReviewerID int64 `json:"reviewer_id,omitempty"` ReviewerName string `json:"reviewer_name,omitempty"` ApproverID int64 `json:"approver_id,omitempty"` ApproverName string `json:"approver_name,omitempty"` ForceDirectEdit bool `json:"force_direct_edit,omitempty"` } // StageRunResult 成熟度阶段执行结果(双轨交付:A轨合规文档 + B轨业务参谋锦囊) type StageRunResult struct { Stage MaturityStage `json:"stage"` StageTitle string `json:"stage_title"` PrimaryArtifact *TaskRunResult `json:"primary_artifact"` SubArtifacts []*TaskRunResult `json:"sub_artifacts,omitempty"` AdvisorBrief *AdvisorBriefing `json:"advisor_brief,omitempty"` Duration time.Duration `json:"duration"` Success bool `json:"success"` WorkDir string `json:"work_dir"` ErrorReason string `json:"error_reason,omitempty"` // Pending* mirror the blocking high-risk candidate that stopped the stage chain // (no ExtractedData / PriorDoc absorption from that candidate). PendingAgentCandidateID int64 `json:"pending_agent_candidate_id,omitempty"` PendingChangeReportID int64 `json:"pending_change_report_id,omitempty"` PendingRiskLevel string `json:"pending_risk_level,omitempty"` } type BizdevService interface { ListTasks() []TaskMeta ListStages() []StageMeta ExecuteTask(ctx context.Context, req TaskRunRequest) (*TaskRunResult, error) ExecuteStage(ctx context.Context, req StageRunRequest) (*StageRunResult, error) InspectWorkspace(ctx context.Context, workDir string) (*squad.WorkspaceState, error) ResumeOrModifyWorkspace(ctx context.Context, req squad.ModifyWorkflowRequest) (*squad.SquadRunResult, error) ContextManager() *ctxmgr.ContextManager CAS() *storage.CAS DocGov() *docgov.GovernanceEngine KB() *kb.Client }