AGC 账户素材超过 500 项后,分页查询与指定素材导入均被全库上限阻断 #549

Closed
opened 2026-09-30 15:53:38 +08:00 by lhk229 · 1 comment
Member

问题

工具提供 folderId/query/offset/limit,但先拉取并校验整个账户素材库;原始数组超过 500 项就直接失败,筛选与分页尚未执行。即使只查询一张图片,或已经知道要导入的 assetId,也无法继续。

现场证据

RescueGirl_work_20260924_20260930-070441 于 2026-09-25 09:44:14 UTC 调用 agc_list_account_assets,返回「账户素材库数量超过 500 项安全上限」。

  • .agent/runtime/errors/error-1790329454399731100-2.json:4 为具体错误,metadata.tool 对应查询工具。
  • 客户端回合为 23768731-bc9f-46b8-9520-6b46957261d6。
  • 现场直接证明一次全库上限拒绝;不能将后续所有生成失败都归因此项。

当前代码

  • commands.rs:3505:在筛选静态图片之前,按整个 library.assets 长度返回 Err。
  • agent/direct_tool_bridge.rs:1523:先解析分页参数,但第 1524 行先读取全库,第 1532 行以后才按文件夹、query 和分页处理。
  • commands.rs:4542:指定 ID 导入也依赖同一全库读取;这是静态确认的共同阻断路径,非本次已经远端复现的所有入口。

预期与验收

  • 账户含 501 项或更多素材时,limit=1、指定文件夹、query、后续分页均能按有界合同正常使用。
  • 导入一个有效且属于当前账号的指定 assetId,不因无关素材总量超过 500 失败。
  • 删除、跨账号、无权限或非支持媒体仍按原规则拒绝。
  • 保留响应大小与资源消耗边界,通过真正有界查询解决;不以无限提高全库上限代替分页。
  • 同步工具 schema/说明与实际分页能力,覆盖 500/501 项边界。

核查范围

2026-09-30 对九份项目导出做只读审计,代码基线 3540c5660fd294b70e054810b5384a2855908df5。本 Issue 仅登记问题,尚未实施修复。未重放项目付费操作,不提交原始会话、凭据或本地私密绝对路径。已排除 #529、#525、#518;偶发 Provider/网络错误不作为新增缺陷。

## 问题 工具提供 folderId/query/offset/limit,但先拉取并校验整个账户素材库;原始数组超过 500 项就直接失败,筛选与分页尚未执行。即使只查询一张图片,或已经知道要导入的 assetId,也无法继续。 ## 现场证据 `RescueGirl_work_20260924_20260930-070441` 于 2026-09-25 09:44:14 UTC 调用 `agc_list_account_assets`,返回「账户素材库数量超过 500 项安全上限」。 - `.agent/runtime/errors/error-1790329454399731100-2.json:4` 为具体错误,metadata.tool 对应查询工具。 - 客户端回合为 `23768731-bc9f-46b8-9520-6b46957261d6`。 - 现场直接证明一次全库上限拒绝;不能将后续所有生成失败都归因此项。 ## 当前代码 - [`commands.rs:3505`](https://git.genarrative.world/git/GenarrativeAI/Genarrative/src/commit/3540c5660fd294b70e054810b5384a2855908df5/apps/ai-game-creator-shell/src-tauri/src/commands.rs#L3505):在筛选静态图片之前,按整个 `library.assets` 长度返回 Err。 - [`agent/direct_tool_bridge.rs:1523`](https://git.genarrative.world/git/GenarrativeAI/Genarrative/src/commit/3540c5660fd294b70e054810b5384a2855908df5/apps/ai-game-creator-shell/src-tauri/src/agent/direct_tool_bridge.rs#L1523):先解析分页参数,但第 1524 行先读取全库,第 1532 行以后才按文件夹、query 和分页处理。 - [`commands.rs:4542`](https://git.genarrative.world/git/GenarrativeAI/Genarrative/src/commit/3540c5660fd294b70e054810b5384a2855908df5/apps/ai-game-creator-shell/src-tauri/src/commands.rs#L4542):指定 ID 导入也依赖同一全库读取;这是静态确认的共同阻断路径,非本次已经远端复现的所有入口。 ## 预期与验收 - [ ] 账户含 501 项或更多素材时,limit=1、指定文件夹、query、后续分页均能按有界合同正常使用。 - [ ] 导入一个有效且属于当前账号的指定 assetId,不因无关素材总量超过 500 失败。 - [ ] 删除、跨账号、无权限或非支持媒体仍按原规则拒绝。 - [ ] 保留响应大小与资源消耗边界,通过真正有界查询解决;不以无限提高全库上限代替分页。 - [ ] 同步工具 schema/说明与实际分页能力,覆盖 500/501 项边界。 ## 核查范围 2026-09-30 对九份项目导出做只读审计,代码基线 `3540c5660fd294b70e054810b5384a2855908df5`。本 Issue 仅登记问题,尚未实施修复。未重放项目付费操作,不提交原始会话、凭据或本地私密绝对路径。已排除 #529、#525、#518;偶发 Provider/网络错误不作为新增缺陷。
lhk229 added the
Priority
High
2
Kind/Bug
labels 2026-09-30 15:53:38 +08:00
Author
Member

经本次核查与讨论,将本 issue 的客户端功能阻断与后端全库读取问题分开处理。

后端改进已另建 #574「编辑器素材库 OpenAPI 增加服务端分页筛选与按 ID 读取,减少 AGC 全库拉取」,标记为 Kind/Enhancement、Priority/Low。#574 不作为本 issue 修复或关闭的前置条件。

核查结论:

  • 当前 OpenAPI 返回完整素材库快照,没有服务端分页;500 项拒绝门槛来自 AGC 客户端,并非后端业务配额。
  • 全库已下载并解析后,客户端才按原始条数拒绝;Agent 实际只收到筛选分页后的安全元数据(每页最多 100 项),不是全库 JSON 附件。
  • 源码仅称其为“安全上限”;未在相关文档和引入提交中找到账户必须限制为 500 项的具体依据。
  • 另有 offset > 500 的工具参数校验,解除全库门槛时需一并核对,避免后续翻页仍被阻断;该参数解析也被项目文件查询复用,修改需保持各工具契约一致并避免扩大范围。

本 issue 的实施与验收口径据此调整为:

  1. 解除账户素材总量超过 500 导致的查询和指定 ID 导入拒绝,暂时允许沿用现有全库读取及客户端筛选分页。
  2. 501 项及更多素材时,limit=1、folderId、query、后续翻页和有效 assetId 导入可用;覆盖分页偏移超过 500 的场景,同步工具 schema、MCP/桥接参数校验和说明。
  3. 保留单页最多 100 项、导入批次数量、下载体积、账号归属、权限、删除状态、媒体类型与会话校验等有效边界;不把 500 换成另一个更大的全库拒绝阈值。
  4. 核对共用读取函数的 UI 素材列表/预览和绑定项目画布资源调用,避免仍被同一账户总量门槛阻断。

原验收中“通过真正有界查询解决”的后端部分移交 #574;本 issue 保留工具返回分页与导入边界,不再要求先完成服务端分页。全库传输和解析开销是暂存的已知问题,由 #574 后续处理。

本次仅拆分 issue、补充范围说明,尚未修改代码或验证修复。

经本次核查与讨论,将本 issue 的客户端功能阻断与后端全库读取问题分开处理。 后端改进已另建 #574「编辑器素材库 OpenAPI 增加服务端分页筛选与按 ID 读取,减少 AGC 全库拉取」,标记为 Kind/Enhancement、Priority/Low。#574 不作为本 issue 修复或关闭的前置条件。 核查结论: - 当前 OpenAPI 返回完整素材库快照,没有服务端分页;500 项拒绝门槛来自 AGC 客户端,并非后端业务配额。 - 全库已下载并解析后,客户端才按原始条数拒绝;Agent 实际只收到筛选分页后的安全元数据(每页最多 100 项),不是全库 JSON 附件。 - 源码仅称其为“安全上限”;未在相关文档和引入提交中找到账户必须限制为 500 项的具体依据。 - 另有 offset > 500 的工具参数校验,解除全库门槛时需一并核对,避免后续翻页仍被阻断;该参数解析也被项目文件查询复用,修改需保持各工具契约一致并避免扩大范围。 本 issue 的实施与验收口径据此调整为: 1. 解除账户素材总量超过 500 导致的查询和指定 ID 导入拒绝,暂时允许沿用现有全库读取及客户端筛选分页。 2. 501 项及更多素材时,limit=1、folderId、query、后续翻页和有效 assetId 导入可用;覆盖分页偏移超过 500 的场景,同步工具 schema、MCP/桥接参数校验和说明。 3. 保留单页最多 100 项、导入批次数量、下载体积、账号归属、权限、删除状态、媒体类型与会话校验等有效边界;不把 500 换成另一个更大的全库拒绝阈值。 4. 核对共用读取函数的 UI 素材列表/预览和绑定项目画布资源调用,避免仍被同一账户总量门槛阻断。 原验收中“通过真正有界查询解决”的后端部分移交 #574;本 issue 保留工具返回分页与导入边界,不再要求先完成服务端分页。全库传输和解析开销是暂存的已知问题,由 #574 后续处理。 本次仅拆分 issue、补充范围说明,尚未修改代码或验证修复。
lhk229 self-assigned this 2026-10-01 19:05:33 +08:00
lhk229 referenced this issue from a commit 2026-10-01 20:55:29 +08:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: GenarrativeAI/Genarrative#549