优化: miniapp渲染(图片/checkbox/代码高亮) + MCP规则共享下沉 + 文档重写 + 节点风格对齐
This commit is contained in:
@@ -79,70 +79,39 @@ pub fn register(registry: &mut AiToolRegistry, db: &Arc<Database>) {
|
||||
let title = args["title"].as_str().ok_or_else(|| anyhow::anyhow!("缺少 title"))?;
|
||||
let repo = df_storage::crud::TaskRepo::new(&db);
|
||||
|
||||
// ── 知识图谱 Phase 1:queue/parent_id/content_json 校验(对齐 commands::task::create_task IPC)──
|
||||
// queue:白名单 + 空串默认 todo。create_task 时 status 恒 todo,仅 backlog/todo/decision
|
||||
// 合法(active/done 须经 move_task_queue 流转,新建直接落违反一致性约束)。
|
||||
const TASK_QUEUE_VALUES: &[&str] = &["backlog", "todo", "decision", "active", "done"];
|
||||
let queue = match args.get("queue").and_then(|v| v.as_str()) {
|
||||
None | Some("") => "todo".to_string(),
|
||||
Some(q) => {
|
||||
let q = q.trim();
|
||||
if !TASK_QUEUE_VALUES.contains(&q) {
|
||||
anyhow::bail!("非法 queue 值 {:?},合法值: {:?}", q, TASK_QUEUE_VALUES);
|
||||
}
|
||||
// 一致性:create_task 时 status 恒 todo,仅 backlog/todo/decision 合法
|
||||
match q {
|
||||
"backlog" | "todo" | "decision" => q.to_string(),
|
||||
other => anyhow::bail!(
|
||||
"新建任务 queue 不可直接落 {:?}(须经 move_task_queue 流转),当前仅允许 backlog/todo/decision",
|
||||
other
|
||||
),
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// parent_id:1 级嵌套铁律(对标设计 §2.1 D2)。空串/缺省=None;
|
||||
// 非空时校验父任务存在 + 父任务自身无 parent_id(防孙任务)。
|
||||
let parent_id = args
|
||||
.get("parent_id")
|
||||
.and_then(|v| v.as_str())
|
||||
.map(|s| s.trim().to_string())
|
||||
.filter(|s| !s.is_empty());
|
||||
if let Some(pid) = &parent_id {
|
||||
let parent = repo
|
||||
.get_by_id(pid)
|
||||
.await?
|
||||
.ok_or_else(|| anyhow::anyhow!("父任务 {pid} 不存在,无法创建子任务"))?;
|
||||
if parent.parent_id.is_some() {
|
||||
anyhow::bail!(
|
||||
"违反 1 级嵌套铁律:父任务 {pid} 自身是子任务(parent_id={:?}),不允许在其下创建孙任务",
|
||||
parent.parent_id
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// content_json:轻量 JSON 合法性校验(非空时须是合法 JSON),结构细节由 AI 消费层负责。
|
||||
let content_json = match args.get("content_json").and_then(|v| v.as_str()) {
|
||||
Some(c) if !c.trim().is_empty() => {
|
||||
serde_json::from_str::<serde_json::Value>(c)
|
||||
.map_err(|e| anyhow::anyhow!("content_json 不是合法 JSON: {e}"))?;
|
||||
Some(c.to_string())
|
||||
}
|
||||
_ => None,
|
||||
};
|
||||
// 共享校验(与 MCP/IPC 同源,一处修改全局生效):queue 白名单+create 一致性 /
|
||||
// parent_id 1 级嵌套铁律 / content_json JSON 合法性 / priority 值域(0..=3,默认 2=medium)
|
||||
let queue = df_storage::crud::normalize_queue_for_create(
|
||||
args.get("queue").and_then(|v| v.as_str()),
|
||||
)
|
||||
.map_err(anyhow::Error::msg)?;
|
||||
let parent_id = df_storage::crud::validate_parent_id(
|
||||
&repo,
|
||||
args.get("parent_id").and_then(|v| v.as_str()),
|
||||
)
|
||||
.await
|
||||
.map_err(anyhow::Error::msg)?;
|
||||
let content_json = df_storage::crud::validate_content_json(
|
||||
args.get("content_json").and_then(|v| v.as_str()),
|
||||
)
|
||||
.map_err(anyhow::Error::msg)?;
|
||||
let priority = df_storage::crud::normalize_priority(
|
||||
args.get("priority").and_then(|v| v.as_i64()),
|
||||
)
|
||||
.map_err(anyhow::Error::msg)?;
|
||||
|
||||
let record = TaskRecord {
|
||||
id: new_id(), project_id: project_id.to_string(), title: title.to_string(),
|
||||
description: args["description"].as_str().unwrap_or("").to_string(),
|
||||
// priority 默认 2(medium):与 commands::task::default_priority 一致,新任务默认中优先级(非 high)
|
||||
status: TaskStatus::Todo, priority: args["priority"].as_i64().unwrap_or(2) as i32,
|
||||
status: TaskStatus::Todo, priority,
|
||||
branch_name: None, assignee: None, workflow_def_id: None, base_branch: None,
|
||||
review_rounds: 0,
|
||||
output_json: None,
|
||||
// F-260619-01 可选关联灵感(空字符串/缺省视为不关联)
|
||||
idea_id: args.get("idea_id").and_then(|v| v.as_str()).filter(|s| !s.is_empty()).map(String::from),
|
||||
module_id: args.get("module_id").and_then(|v| v.as_str()).filter(|s| !s.is_empty()).map(String::from),
|
||||
// 知识图谱 Phase 1 V29 三列:经上方校验的 queue / parent_id / content_json
|
||||
// 知识图谱 Phase 1 V29 三列:经上方共享校验的 queue / parent_id / content_json
|
||||
queue,
|
||||
parent_id,
|
||||
content_json,
|
||||
|
||||
Reference in New Issue
Block a user