重构: DRY截断正典改名收尾
- audit/utils.rs truncate_chars→truncate_chars_ellipsis 正典改名(补…语义),re-export 链同步 - record.rs/generate_image.rs/knowledge_inject.rs/tools/knowledge.rs 调用点全链更新 - df-ai context_helpers.rs 私有版跨 crate 不引依赖保留原名,加正典标注注释 - DRY #11 收口,同名不同义陷阱消除
This commit is contained in:
@@ -18,10 +18,10 @@ use super::tools::entity_resolve;
|
||||
|
||||
// utils(audit/utils.rs):RiskLevel ↔ 字符串转换 + 字符串安全截断纯 helper。
|
||||
// 第五批从本文件抽离,行为零变更。pub(crate) use 保持 finalize / restore 子模块
|
||||
// super::risk_str / super::risk_from_str 引用路径不变;truncate_chars 供本文件 process_tool_calls
|
||||
// super::risk_str / super::risk_from_str 引用路径不变;truncate_chars_ellipsis 供本文件 process_tool_calls
|
||||
// DTO 装配 + record.rs 审计面板 IPC 共用。
|
||||
mod utils;
|
||||
pub(crate) use utils::{risk_from_str, risk_str, truncate_chars};
|
||||
pub(crate) use utils::{risk_from_str, risk_str, truncate_chars_ellipsis};
|
||||
|
||||
// diff(audit/diff.rs):write_file 审批预览 diff 生成。
|
||||
// 第五批从本文件抽离,行为零变更。
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
//! - `ToolExecutionDto`:传给前端的精简审计视图
|
||||
//! - `list_tool_executions`:审批历史面板查询 IPC
|
||||
//!
|
||||
//! 依赖 audit/utils.rs 的 `truncate_chars` 做参数/结果截断,通过 `super::truncate_chars` 引用。
|
||||
//! 依赖 audit/utils.rs 的 `truncate_chars_ellipsis` 做参数/结果截断,通过 `super::truncate_chars_ellipsis` 引用。
|
||||
|
||||
use serde::{Deserialize, Serialize};
|
||||
use std::collections::{HashMap, HashSet};
|
||||
@@ -233,8 +233,8 @@ pub async fn list_tool_executions(
|
||||
// ToolCallId → String(DTO 边界,前端按字符串消费)
|
||||
tool_call_id: r.tool_call_id.into(),
|
||||
tool_name: r.tool_name,
|
||||
arguments_brief: super::truncate_chars(&r.arguments, 120),
|
||||
result_brief: r.result.map(|s| super::truncate_chars(&s, 160)),
|
||||
arguments_brief: super::truncate_chars_ellipsis(&r.arguments, 120),
|
||||
result_brief: r.result.map(|s| super::truncate_chars_ellipsis(&s, 160)),
|
||||
status: r.status,
|
||||
risk_level: r.risk_level,
|
||||
requested_at: r.requested_at,
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
//! - `risk_str` / `risk_from_str`:finalize / restore 通过 `super::` 引用(pub(crate))。
|
||||
//! - `truncate_chars`:mod.rs 的 process_tool_calls DTO 装配用 + record.rs 审计面板 IPC 用(pub(crate))。
|
||||
//!
|
||||
//! re-export 维持原路径透明:`super::risk_str` / `super::risk_from_str` / `super::truncate_chars`
|
||||
//! re-export 维持原路径透明:`super::risk_str` / `super::risk_from_str` / `super::truncate_chars_ellipsis`
|
||||
//! 在 audit/mod.rs 内通过 `pub(crate) use` 引入后裸名可用,外部子模块的 `super::risk_*` 引用不变。
|
||||
|
||||
use df_ai::ai_tools::RiskLevel;
|
||||
@@ -29,7 +29,7 @@ pub(crate) fn risk_from_str(s: &str) -> Option<RiskLevel> {
|
||||
}
|
||||
|
||||
/// 截断字符串到 max 字符(按 char_indices 边界切,避免切坏中文/emoji)
|
||||
pub(crate) fn truncate_chars(s: &str, max: usize) -> String {
|
||||
pub(crate) fn truncate_chars_ellipsis(s: &str, max: usize) -> String {
|
||||
if s.chars().count() <= max {
|
||||
return s.to_string();
|
||||
}
|
||||
|
||||
@@ -49,7 +49,7 @@ use df_storage::db::Database;
|
||||
use df_storage::models::AiProviderRecord;
|
||||
use df_storage::secret::resolve_provider_secret;
|
||||
|
||||
use crate::commands::ai::audit::truncate_chars;
|
||||
use crate::commands::ai::audit::truncate_chars_ellipsis;
|
||||
use crate::commands::ai::http::{
|
||||
build_client, execute_with_redirects, resolve_and_check_host, validate_url, MAX_REDIRECTS,
|
||||
};
|
||||
@@ -184,7 +184,7 @@ pub(crate) async fn execute_generate_image(
|
||||
if !status.is_success() {
|
||||
// 错误响应读 body 摘要(截断 500 chars,截断时尾部补 …)帮助定位
|
||||
let err_text = resp.text().await.unwrap_or_default();
|
||||
let snippet: String = truncate_chars(&err_text, 500);
|
||||
let snippet: String = truncate_chars_ellipsis(&err_text, 500);
|
||||
anyhow::bail!(
|
||||
"图像生成端点返回 HTTP {}: {}",
|
||||
status.as_u16(),
|
||||
@@ -459,7 +459,7 @@ async fn write_atomic(output_path: &str, data: &[u8]) -> anyhow::Result<()> {
|
||||
/// 走 audit truncate_chars 正典(截断时尾部补 …);错误文案无硬长度约束,允许多 1 字符。
|
||||
fn body_snippet(v: &Value) -> String {
|
||||
let s = v.to_string();
|
||||
truncate_chars(&s, 500)
|
||||
truncate_chars_ellipsis(&s, 500)
|
||||
}
|
||||
|
||||
// ============================================================
|
||||
|
||||
@@ -21,7 +21,7 @@ use df_types::types::new_id;
|
||||
|
||||
use crate::state::{AppState, ExtractTrigger, LlmConcurrency, log_slow_lock};
|
||||
|
||||
use crate::commands::ai::audit::truncate_chars;
|
||||
use crate::commands::ai::audit::truncate_chars_ellipsis;
|
||||
use crate::commands::err_str;
|
||||
|
||||
use super::{AiSession};
|
||||
@@ -562,7 +562,7 @@ pub(crate) async fn build_knowledge_context(
|
||||
let kind = r.kind.clone();
|
||||
let title = r.title.clone();
|
||||
// 截断 content 防膨胀(注入侧最多 500 字符;走 audit 正典,截断时尾部补 … 提示有省略)
|
||||
let snippet: String = truncate_chars(&r.content, 500);
|
||||
let snippet: String = truncate_chars_ellipsis(&r.content, 500);
|
||||
out.push_str(&format!("- [{}] {}: {} (复用 {} 次)\n", kind, title, snippet, r.reuse_count));
|
||||
}
|
||||
out
|
||||
|
||||
@@ -30,7 +30,7 @@ use df_storage::db::Database;
|
||||
use df_storage::models::KnowledgeRecord;
|
||||
use df_types::types::new_id;
|
||||
|
||||
use crate::commands::ai::audit::truncate_chars;
|
||||
use crate::commands::ai::audit::truncate_chars_ellipsis;
|
||||
use crate::commands::ai::knowledge_inject::{extract_query_keywords, spawn_embedding_for_record};
|
||||
use crate::commands::knowledge_timeline::KnowledgeTimeline;
|
||||
use crate::commands::now_millis;
|
||||
@@ -81,7 +81,7 @@ pub fn register(registry: &mut AiToolRegistry, db: &Arc<Database>) {
|
||||
serde_json::json!({
|
||||
"title": k.title,
|
||||
"kind": k.kind,
|
||||
"content": truncate_chars(&k.content, SEARCH_CONTENT_SNIPPET_LEN),
|
||||
"content": truncate_chars_ellipsis(&k.content, SEARCH_CONTENT_SNIPPET_LEN),
|
||||
"status": k.status,
|
||||
"reuse_count": k.reuse_count,
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user