远端告警给模型前恢复每条长度收口

- 新增 DIRECT_TOOL_BRIDGE_WARNING_MAX_CHARS=480 与 bounded_remote_warning(s) helper

- createOrDerive/PrepareGameArt/GenerateImage 三个完成回执的 warnings/sliceWarnings 逐条收口
This commit is contained in:
2026-10-02 15:07:19 +08:00
parent e7adefb0a1
commit 87414fd248
@@ -77,6 +77,26 @@ const DIRECT_TOOL_BRIDGE_MAX_RESOURCE_PAGE_SIZE: usize = 100;
const DIRECT_TOOL_BRIDGE_MAX_ACCOUNT_ASSET_ID_CHARS: usize = 512;
const DIRECT_TOOL_BRIDGE_MAX_LOCAL_ASSET_PATH_CHARS: usize = 512;
/// 远端服务告警给模型时每条允许保留的字符数:原文保留,只做长度收口
/// (与旧 `redact_agent_runtime_error(..., 480)` 的预算一致)。
const DIRECT_TOOL_BRIDGE_WARNING_MAX_CHARS: usize = 480;
/// 告警原文给模型,只做长度收口。
fn bounded_remote_warning(warning: &str) -> String {
crate::agent::redaction::truncate_agent_runtime_text(
warning,
DIRECT_TOOL_BRIDGE_WARNING_MAX_CHARS,
)
}
/// 逐条给远端告警做长度收口,顺序与原文一致。
fn bounded_remote_warnings(warnings: &[String]) -> Vec<String> {
warnings
.iter()
.map(|warning| bounded_remote_warning(warning))
.collect()
}
pub(crate) fn reject_command_output_wrapper(content: &str) -> Result<(), String> {
let mut lines = content.trim_start_matches('\u{feff}').lines();
let exit_line = lines.next().map(str::trim).unwrap_or_default();
@@ -2189,6 +2209,8 @@ fn bridge_completed_resource_result(
let (warnings, slice_warnings) =
local_project_resource_edit_warnings_at(root, &result.operation_id)
.map_err(|cause| ResourceCompletionRejection::WarningsUnreadable { cause })?;
let warnings = bounded_remote_warnings(&warnings);
let slice_warnings = bounded_remote_warnings(&slice_warnings);
Ok(json!({
"status": "completed",
"operationId": result.operation_id,
@@ -2649,8 +2671,8 @@ async fn bridge_prepare_game_art_validated(
"mode": mode.as_str(),
"assetPaths": package.asset_paths,
"slicePaths": package.slice_paths,
"warnings": package.warnings,
"sliceWarnings": package.slice_warnings,
"warnings": bounded_remote_warnings(&package.warnings),
"sliceWarnings": bounded_remote_warnings(&package.slice_warnings),
"resources": resources,
"derivativePolicy": "新建或重生成的标准图集必须包含四张 canonical 切片;旧可信图集缺少切片时只能按 warning 使用完整图集,不得伪造衍生素材",
"next": "读取这些相对路径并把合适素材接入核心游戏画面"
@@ -3168,8 +3190,14 @@ async fn bridge_generate_image(
"taskId": generated.task_id,
},
"resources": resources,
"warnings": generated.warning.map(|warning| vec![warning]).unwrap_or_default(),
"sliceWarnings": generated.slice_warning.map(|warning| vec![warning]).unwrap_or_default(),
"warnings": generated
.warning
.map(|warning| vec![bounded_remote_warning(&warning)])
.unwrap_or_default(),
"sliceWarnings": generated
.slice_warning
.map(|warning| vec![bounded_remote_warning(&warning)])
.unwrap_or_default(),
"sliceMode": generated.slice_mode,
"gridX": generated.grid_x,
"gridY": generated.grid_y,