重构:删 5 零引用 crate(df-evolve/plugin/stages/task/traceability)+ 清死模块、ai.rs 拆 11 子 module、ai.ts 拆 6 composable、i18n 拆目录 功能:知识库全栈(df-project/scan + CRUD + 时间线 + 前端)、Settings 拆分、appSettings KV 迁移、模型池、LLM 并发 Semaphore 修复:审批持久化根治、ConditionEngine 默认拒绝、NodeRegistry unimplemented 清除、promote 补偿删除、工具结果截断 50KB、路径校验防 symlink 逃逸 文档:B-03 人工审批设计、决策记录三分档、规格契约自检、经验记录、todo 看板、PROGRESS 更新 详见 PROGRESS.md。src-tauri/儿童每日打卡应用/ 与本项目无关,已排除。
93 lines
2.7 KiB
Rust
93 lines
2.7 KiB
Rust
//! 想法晋升 — 将想法转为项目
|
||
|
||
use anyhow::Result;
|
||
use serde::Serialize;
|
||
|
||
use df_core::types::{IdeaId, ProjectId};
|
||
|
||
use crate::adversarial::Recommendation;
|
||
use crate::capture::Idea;
|
||
|
||
/// 晋升结果
|
||
#[derive(Debug, Clone, Serialize)]
|
||
pub struct PromotionResult {
|
||
pub idea_id: IdeaId,
|
||
pub project_id: ProjectId,
|
||
pub promoted: bool,
|
||
pub reason: String,
|
||
}
|
||
|
||
/// 晋升策略
|
||
#[derive(Debug, Clone, Copy)]
|
||
pub enum PromotionPolicy {
|
||
/// 自动晋升(评分达标时自动转为项目)
|
||
Auto,
|
||
/// 手动确认(需要人工审批)
|
||
Manual,
|
||
/// 半自动(AI 评估 + 人工确认)
|
||
SemiAuto,
|
||
}
|
||
|
||
/// 想法晋升器
|
||
pub struct IdeaPromoter {
|
||
policy: PromotionPolicy,
|
||
}
|
||
|
||
impl IdeaPromoter {
|
||
/// 创建晋升器
|
||
pub fn new(policy: PromotionPolicy) -> Self {
|
||
Self { policy }
|
||
}
|
||
|
||
/// 评估并尝试晋升想法
|
||
///
|
||
/// TODO: 接入 df-project 创建项目
|
||
pub fn try_promote(&self, idea: &Idea, recommendation: &Recommendation) -> Result<PromotionResult> {
|
||
match self.policy {
|
||
PromotionPolicy::Auto => {
|
||
if matches!(recommendation, Recommendation::ImmediateAction | Recommendation::Soon) {
|
||
self.do_promote(idea)
|
||
} else {
|
||
Ok(PromotionResult {
|
||
idea_id: idea.id.clone(),
|
||
project_id: String::new(),
|
||
promoted: false,
|
||
reason: format!("评估建议 {:?},未达到自动晋升标准", recommendation),
|
||
})
|
||
}
|
||
}
|
||
PromotionPolicy::Manual => {
|
||
Ok(PromotionResult {
|
||
idea_id: idea.id.clone(),
|
||
project_id: String::new(),
|
||
promoted: false,
|
||
reason: "手动模式,等待人工审批".to_string(),
|
||
})
|
||
}
|
||
PromotionPolicy::SemiAuto => {
|
||
// TODO: AI 评估 + 人工确认流程
|
||
Ok(PromotionResult {
|
||
idea_id: idea.id.clone(),
|
||
project_id: String::new(),
|
||
promoted: false,
|
||
reason: "半自动模式,等待确认".to_string(),
|
||
})
|
||
}
|
||
}
|
||
}
|
||
|
||
/// 执行晋升操作
|
||
fn do_promote(&self, idea: &Idea) -> Result<PromotionResult> {
|
||
let project_id = df_core::types::new_id();
|
||
// TODO: 调用 df-project 创建项目
|
||
tracing::info!("想法 {} 晋升为项目 {}", idea.id, project_id);
|
||
|
||
Ok(PromotionResult {
|
||
idea_id: idea.id.clone(),
|
||
project_id,
|
||
promoted: true,
|
||
reason: "评估达标,自动晋升".to_string(),
|
||
})
|
||
}
|
||
}
|