From a723d10ce3c03d864fb6e3977e8c6bfa772ccd27 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=BE=B7=E5=AE=87?= Date: Thu, 1 Oct 2026 15:56:49 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9B=9E=E9=80=80=E5=88=97=E8=A1=A8=E5=B7=A5?= =?UTF-8?q?=E5=85=B7=20offset=20=E4=B8=8A=E9=99=90=E7=9A=84=E6=94=B6?= =?UTF-8?q?=E7=AA=84=EF=BC=8Cagc=5Flist=5Fregistered=5Fassets=20=E6=81=A2?= =?UTF-8?q?=E5=A4=8D=E6=97=A0=E4=B8=8A=E9=99=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 回退 4e5adb2a3:page 的 max_offset 恢复成 Option,删掉 TOOL_PAGE_MAX_OFFSET 常量 - agc_list_registered_assets 传 None(offset 无上限,与它原本的行为一致),agc_list_project_files / agc_list_account_assets 仍传原来的 Some(500) - agc_list_registered_assets 的 inputSchema offset 去掉 maximum: 500,恢复到原公开入参范围 验证:cargo test --bin genarrative-ai-game-creator-shell -- agent::direct_tool_bridge:: 41 passed / 0 failed --- .../src-tauri/src/agent/direct_tool_bridge.rs | 10 ++++------ .../src-tauri/src/agent/direct_tools_mcp.rs | 2 +- .../src-tauri/src/agent/tool/arguments.rs | 15 +++------------ 3 files changed, 8 insertions(+), 19 deletions(-) diff --git a/apps/ai-game-creator-shell/src-tauri/src/agent/direct_tool_bridge.rs b/apps/ai-game-creator-shell/src-tauri/src/agent/direct_tool_bridge.rs index d35ae9383..fefb925df 100644 --- a/apps/ai-game-creator-shell/src-tauri/src/agent/direct_tool_bridge.rs +++ b/apps/ai-game-creator-shell/src-tauri/src/agent/direct_tool_bridge.rs @@ -1,8 +1,6 @@ use super::*; use crate::agent::tool::apply_patch::error::ApplyPatchError; -use crate::agent::tool::arguments::{ - optional_text, page, required_text, ToolPage, ToolTextField, TOOL_PAGE_MAX_OFFSET, -}; +use crate::agent::tool::arguments::{optional_text, page, required_text, ToolPage, ToolTextField}; use crate::agent::tool::browser_playtest::error::BrowserPlaytestError; #[cfg(all(windows, feature = "cocos-editor-execute"))] use crate::agent::tool::cocos_execute::error::CocosExecuteError; @@ -1212,7 +1210,7 @@ pub(in crate::agent) fn list_registered_assets_input( arguments, 50, DIRECT_TOOL_BRIDGE_MAX_RESOURCE_PAGE_SIZE, - TOOL_PAGE_MAX_OFFSET, + None, )?; Ok(ListRegisteredAssetsInput { kind, @@ -1566,7 +1564,7 @@ pub(in crate::agent) fn list_project_files_input( arguments, 100, DIRECT_TOOL_BRIDGE_MAX_RESOURCE_PAGE_SIZE, - TOOL_PAGE_MAX_OFFSET, + Some(500), )?; Ok(ListProjectFilesInput { path, @@ -1991,7 +1989,7 @@ pub(in crate::agent) fn list_account_assets_input( arguments, 100, DIRECT_TOOL_BRIDGE_MAX_RESOURCE_PAGE_SIZE, - TOOL_PAGE_MAX_OFFSET, + Some(500), )?; Ok(ListAccountAssetsInput { folder_id, diff --git a/apps/ai-game-creator-shell/src-tauri/src/agent/direct_tools_mcp.rs b/apps/ai-game-creator-shell/src-tauri/src/agent/direct_tools_mcp.rs index a0693b1ff..61e78b727 100644 --- a/apps/ai-game-creator-shell/src-tauri/src/agent/direct_tools_mcp.rs +++ b/apps/ai-game-creator-shell/src-tauri/src/agent/direct_tools_mcp.rs @@ -405,7 +405,7 @@ fn direct_tools_mcp_specs_for_plugins( "default": false, "description": prompt_text!("directTools.agc_list_registered_assets.parameters.includeSequenceFrames") }, - "offset": { "type": "integer", "minimum": 0, "maximum": 500, "default": 0 }, + "offset": { "type": "integer", "minimum": 0, "default": 0 }, "limit": { "type": "integer", "minimum": 1, "maximum": 100, "default": 50 } }, "additionalProperties": false diff --git a/apps/ai-game-creator-shell/src-tauri/src/agent/tool/arguments.rs b/apps/ai-game-creator-shell/src-tauri/src/agent/tool/arguments.rs index 1460a49ea..2ab9fdf38 100644 --- a/apps/ai-game-creator-shell/src-tauri/src/agent/tool/arguments.rs +++ b/apps/ai-game-creator-shell/src-tauri/src/agent/tool/arguments.rs @@ -57,18 +57,12 @@ pub(crate) struct ToolPage { pub limit: usize, } -/// 三个列表工具共用的 `offset` 上限:每个调用点都必须显式传值,避免某一路悄悄不设上限。 -/// -/// 取值与 `agc_list_project_files` / `agc_list_account_assets` 的 inputSchema -/// `offset.maximum` 一致;`agc_list_registered_assets` 的 schema 同步为同一个值。 -pub(crate) const TOOL_PAGE_MAX_OFFSET: usize = 500; - /// 解析 `offset`/`limit`。分页规则在三个列表工具之间一致,只有默认值与上限不同。 pub(crate) fn page( arguments: &Value, default_limit: usize, max_limit: usize, - max_offset: usize, + max_offset: Option, ) -> Result { let offset = arguments .get("offset") @@ -83,11 +77,8 @@ pub(crate) fn page( }) .transpose()? .unwrap_or(0); - if offset > max_offset { - return Err(ToolPageRejection::OffsetTooLarge { - got: offset, - max: max_offset, - }); + if let Some(max) = max_offset.filter(|max| offset > *max) { + return Err(ToolPageRejection::OffsetTooLarge { got: offset, max }); } let limit = arguments .get("limit")