修复 agc_tools 媒体资源提示词上限并按 kind 暴露 #398

Merged
kdletters merged 1 commits from codex/agc-agent-resource-prompt-limits into master 2026-09-17 14:56:57 +08:00
Member

改动

  • 提示词上限收敛为 resource_edit_prompt_max_chars 单一权威:agc_tools MCP 工具层、客户端受控工具桥与提交校验共用同一数字与拒绝文案,不再出现「schema 写 4000、真实上限按 kind 分」的分叉。
  • agc_create_or_derive_resource 的 schema 逐 kind 声明 prompt.maxLength(background-music / sound-effect / video 与 character-animation),prompt 描述写明每个数字;agc_edit_image 继续用图片口径 32000。
  • 工具桥不再用通用 4000 校验 prompt:图片编辑 4000~32000 的提示词不再被误报成「超出安全边界」。
  • 源资源未登记时的错误文案补上可执行两步:先用 agc_list_registered_assets 选已有 localAssetId;只在项目里的文件先 agc_list_project_files 确认 assetImportable=true,再用 agc_import_account_assets.localPaths 登记后重试。agc_remove_background 复用同一条文案。
  • skill 包 agc-client-projection 的 SKILL.md 与 projection-contract.md 写明四个上限,并说明超限要在本地收敛而不是原样重发;清单指纹同步到 2026-08-26.18(已合并 master 的抠图文案)。
  • 前端 resourceEditModel.ts 补注释指向 Rust 权威函数,数字未动。
  • decision-log、pitfalls 与《AI游戏创作智能体App实施计划》记录本轮口径;未改 External v1 契约 / OpenAPI、SpacetimeDB schema 与客户端 UI 行为。

问题

编号 问题 本 PR 状态
P1 背景音乐提示词真实上限 140,但 schema 只写 4000、skill 未写明,agent 写一句正常长度描述必被硬拒 已修复:口径单源 + 逐 kind 暴露 + skill 写明
P2 音效 1900 与图片编辑 32000 的上限只在 Rust 内部生效,MCP 与工具桥各自硬编码或误报 已修复:三处共用同一函数,图片编辑不再误报安全边界
P3 源资源未登记时只报「不属于当前项目已登记资源」,模型会原地重试 已修复:文案给出 agc_list_registered_assets 与登记工具两步动作
P4 这两个工具此前没有端到端用例,同类漂移无法被门禁拦住 已补:MCP 工具层 → 真实工具桥 → 假平台的契约用例 + 两条按 kind 上限门禁

验证

  • agent::direct_tools_mcp::tests 23 passed / 0 failed:含新增的按 kind 上限门禁、图片快速编辑契约(断言 POST /api/editor/images/edits 的路径、Bearer、Idempotency-Key、正文且不得回填 assetKind)、背景音乐契约(断言 POST /api/editor/audios/background-music/generationsgptDescriptionPromptmakeInstrumental)、超限零桥请求、未登记源资源提示。
  • agent::direct_tool_bridge::tests 18 passed / 7 failed;agent::skill_pack 4 passed;npm run agc:skill-pack:checkskill-pack:test 通过(version 2026-08-26.18)。
  • AGC typecheck(tsc + skill-pack check + check-config)、resourceEditModel 6 项前端测试、npm run check:encodingnpm run check:doc-indexcargo fmt --checkgit diff --check 通过。
  • 那 7 条(以及 project::resource_editor 45 条)失败与本 PR 无关:全部是 tempfile::tempdir()Windows 安全对象不属于当前用户,已 stash 改动并用基线复跑确认失败集合一致。
  • 未跑整包 AGC Rust 全量分片、npm run lint 聚合门禁与 CI;未做任何付费生成。工具 schema 与 skill 文案都在应用内,终端用户需重新构建客户端才能看到修复效果。
## 改动 - 提示词上限收敛为 `resource_edit_prompt_max_chars` 单一权威:`agc_tools` MCP 工具层、客户端受控工具桥与提交校验共用同一数字与拒绝文案,不再出现「schema 写 4000、真实上限按 kind 分」的分叉。 - `agc_create_or_derive_resource` 的 schema 逐 kind 声明 `prompt.maxLength`(background-music / sound-effect / video 与 character-animation),`prompt` 描述写明每个数字;`agc_edit_image` 继续用图片口径 32000。 - 工具桥不再用通用 4000 校验 prompt:图片编辑 4000~32000 的提示词不再被误报成「超出安全边界」。 - 源资源未登记时的错误文案补上可执行两步:先用 `agc_list_registered_assets` 选已有 localAssetId;只在项目里的文件先 `agc_list_project_files` 确认 `assetImportable=true`,再用 `agc_import_account_assets.localPaths` 登记后重试。`agc_remove_background` 复用同一条文案。 - skill 包 `agc-client-projection` 的 SKILL.md 与 projection-contract.md 写明四个上限,并说明超限要在本地收敛而不是原样重发;清单指纹同步到 `2026-08-26.18`(已合并 master 的抠图文案)。 - 前端 `resourceEditModel.ts` 补注释指向 Rust 权威函数,数字未动。 - decision-log、pitfalls 与《AI游戏创作智能体App实施计划》记录本轮口径;未改 External v1 契约 / OpenAPI、SpacetimeDB schema 与客户端 UI 行为。 ## 问题 | 编号 | 问题 | 本 PR 状态 | | --- | --- | --- | | P1 | 背景音乐提示词真实上限 140,但 schema 只写 4000、skill 未写明,agent 写一句正常长度描述必被硬拒 | 已修复:口径单源 + 逐 kind 暴露 + skill 写明 | | P2 | 音效 1900 与图片编辑 32000 的上限只在 Rust 内部生效,MCP 与工具桥各自硬编码或误报 | 已修复:三处共用同一函数,图片编辑不再误报安全边界 | | P3 | 源资源未登记时只报「不属于当前项目已登记资源」,模型会原地重试 | 已修复:文案给出 `agc_list_registered_assets` 与登记工具两步动作 | | P4 | 这两个工具此前没有端到端用例,同类漂移无法被门禁拦住 | 已补:MCP 工具层 → 真实工具桥 → 假平台的契约用例 + 两条按 kind 上限门禁 | ## 验证 - `agent::direct_tools_mcp::tests` 23 passed / 0 failed:含新增的按 kind 上限门禁、图片快速编辑契约(断言 `POST /api/editor/images/edits` 的路径、Bearer、Idempotency-Key、正文且不得回填 assetKind)、背景音乐契约(断言 `POST /api/editor/audios/background-music/generations` 的 `gptDescriptionPrompt` 与 `makeInstrumental`)、超限零桥请求、未登记源资源提示。 - `agent::direct_tool_bridge::tests` 18 passed / 7 failed;`agent::skill_pack` 4 passed;`npm run agc:skill-pack:check` 与 `skill-pack:test` 通过(version `2026-08-26.18`)。 - AGC `typecheck`(tsc + skill-pack check + check-config)、`resourceEditModel` 6 项前端测试、`npm run check:encoding`、`npm run check:doc-index`、`cargo fmt --check`、`git diff --check` 通过。 - 那 7 条(以及 `project::resource_editor` 45 条)失败与本 PR 无关:全部是 `tempfile::tempdir()` 的 `Windows 安全对象不属于当前用户`,已 stash 改动并用基线复跑确认失败集合一致。 - 未跑整包 AGC Rust 全量分片、`npm run lint` 聚合门禁与 CI;未做任何付费生成。工具 schema 与 skill 文案都在应用内,终端用户需重新构建客户端才能看到修复效果。
kdletters added 1 commit 2026-09-17 14:52:18 +08:00
修复 agc_tools 媒体资源提示词上限并按 kind 暴露
Project CI / AI game creator shell Rust shard 1/4 (pull_request) Has been cancelled
Project CI / AI game creator shell Rust shard 2/4 (pull_request) Has been cancelled
Project CI / AI game creator shell Rust shard 3/4 (pull_request) Has been cancelled
Project CI / AI game creator shell Rust shard 4/4 (pull_request) Has been cancelled
Project CI / AI game creator shell Rust smoke (pull_request) Has been cancelled
Project CI / AI game creator shell Rust crates (pull_request) Has been cancelled
Project CI / Backend tests (pull_request) Has been cancelled
Project CI / Native shell tests (pull_request) Has been cancelled
Project CI / Frontend tests (pull_request) Has been cancelled
Project CI / Repository checks (pull_request) Has been cancelled
Project CI / AI game creator shell web tests (pull_request) Has been cancelled
efe4eff5df
- 提示词上限收敛为 resource_edit_prompt_max_chars 单一权威,MCP 工具层、客户端受控工具桥与提交校验共用同一数字与拒绝文案
- agc_create_or_derive_resource 的 schema 用 allOf[oneOf] 逐 kind 声明 prompt.maxLength,并在 prompt 描述里写明背景音乐 140 / 音效 1900 / 视频与角色动画 4000
- 工具桥不再用通用 4000 校验 prompt,图片编辑 32000 的上限不再被误报成安全边界错误
- 源资源未登记时的错误文案补上 agc_list_registered_assets 与 agc_list_project_files 到 agc_import_account_assets 的两步后续动作
- 新增 MCP 工具层经真实工具桥到假平台的图片快速编辑与背景音乐生成契约用例,以及两条按 kind 上限的门禁用例
- skill 包 agc-client-projection 的 SKILL.md 与 projection-contract.md 写明四个提示词上限,清单指纹同步到 2026-08-26.18
- 前端 resourceEditModel.ts 补注释指向 Rust 权威函数
- decision-log、pitfalls 与 AI 游戏创作智能体 App 实施计划记录本轮口径
kdletters merged commit cd9faae9b2 into master 2026-09-17 14:56:57 +08:00
kdletters deleted branch codex/agc-agent-resource-prompt-limits 2026-09-17 14:56:57 +08:00
Sign in to join this conversation.