修复: AI工具调用健壮性+审批卡片可读化+任务工具补全

- AC1/AC2 anthropic_compat tool_use_id None/空时跳过或占位(防GLM端500卡死)
- AR-3 审批卡片 id→项目名回显(前端白名单特化) + 后端查不到友好提示
- FR-D6 补 delete_task/update_task 工具(防误用 delete_project 清理孤儿任务)
- FR-D7 抽 bind_dir_to_project 消除 create_project/bind_directory 重复
- FR-D8 create_idea schema 补 priority 契约对齐
- FR-S4 SKILL.md 注入加头尾隔离标注防 prompt injection 混淆
- FR-R4 complete() 加 60s 单请求超时(不影响 stream)
This commit is contained in:
2026-06-14 22:48:04 +08:00
parent 49ac0601e1
commit 36d68ddb26
8 changed files with 207 additions and 70 deletions

View File

@@ -38,9 +38,10 @@ pub(crate) fn risk_from_str(s: &str) -> Option<RiskLevel> {
}
}
/// 查项目可读标签id → "「项目名」(id=x)",查不到回退 "(id=x)",空 id 返回空串。
/// 查项目可读标签id → "「项目名」(id=x)",查不到回退友好提示,空 id 返回空串。
///
/// AR-3审批卡片需显示对象名而非裸 id用户反馈"只返回 ID 不知道是什么数据")。
/// 查不到(项目已被彻底清除/外部 id)时给"项目已不存在"提示而非裸 id,避免用户困惑。
async fn resolve_project_label(db: &Arc<Database>, id: &str) -> String {
if id.is_empty() {
return String::new();
@@ -48,7 +49,7 @@ async fn resolve_project_label(db: &Arc<Database>, id: &str) -> String {
let repo = ProjectRepo::new(db);
match repo.get_by_id(id).await {
Ok(Some(p)) => format!("{}」(id={})", p.name, id),
_ => format!("(id={})", id),
_ => format!("(项目已不存在, id={})", id),
}
}