AGC支持安装扩展skill、MCP #233
Reference in New Issue
Block a user
Delete Branch "feat/agc_add_on"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
审查结论:请求修改。发现 1 个会使扩展禁用/删除失效的明确问题,详见行内评论。
@@ -0,0 +889,4 @@) -> Result<Option<PathBuf>, String> {let root = extensions_root()?;let index = read_index(&root)?;let client_skill_root = isolated_os_home.join(".agents").join("client-skills");[PR #233][head
c039c4ebaf] 禁用或删除 Skill 后,运行时目录不会清理旧内容。prepare_enabled_client_skill_root每次只create_dir_all(client_skill_root)并向其中复制当前启用项,但没有删除目录中上一次运行留下的 Skill;当仍有任意其他 Skill 启用时,旧的已禁用/已删除 Skill 会继续位于client-skillsextraRoot 下,并被 Codex 发现和执行。这会使用户的禁用操作失效,并可能继续暴露已移除扩展的提示词/工具。建议在构建运行时目录前清空并重建client_skill_root(或按稳定来源 ID 精确删除不再启用的子目录),并增加“启用 A、准备运行时目录、禁用/删除 A、再次准备后 A 不存在”的回归测试。这个评论指出的“运行时 Skill 目录只追加、不清理”问题是成立的;但“上一次运行的旧 Skill 会在正常重启后继续被当前 Codex 发现和执行”需要限定为复用同一个 isolated_os_home 的场景。当前 app-server 每次会从新的临时目录创建隔离 HOME,且启用 Skill fingerprint 变化会切换连接池 key,因此正常重启通常不会复用旧目录。
不过,prepare_enabled_client_skill_root 本身不应依赖这个生命周期细节。现在已将它改为当前启用 Skill 集合的完整投影:每次准备时先清理 client-skills,再重新复制当前有效项。这样可以同时解决禁用、删除、重命名以及源文件变化后的旧内容残留。没有启用 Skill 时也会清理目录并返回 None。
审查 head sha:c250764b596824965ee1492aa42f6675bf68f109
结论:请求修改。明确问题:导入
.zip的extract_zip未限制条目数、单项解压大小或累计解压大小,直接逐项创建文件并复制。压缩炸弹/恶意扩展可在导入时耗尽磁盘,造成客户端或同机服务不可用。建议限制压缩包条目数、单项与累计解压字节数,超限清理 staging 并失败;同时限制异常压缩比。问题位置:apps/ai-game-creator-shell/src-tauri/src/client_extensions.rs新文件第 2566 行附近。审查 head sha:c250764b596824965ee1492aa42f6675bf68f109。结论:请求修改;详见 PR 总评论 ID 2846(行内评论 API 返回 500,已回退总评论)。
产品决策:校验大小的功能明确不做
审查 head sha:7b87ed052b17d71a6793c86c829242db98ef2f68
结论:请求修改。发现明确的安全/可用性问题:导入 zip 时未限制条目数、单项解压大小或累计解压大小,恶意压缩包可能耗尽磁盘。详见随后发布的 PR 总评论。
审查 head sha:7b87ed052b17d71a6793c86c829242db98ef2f68
明确问题(请求修改):
apps/ai-game-creator-shell/src-tauri/src/client_extensions.rs:351的extract_zip未限制 zip 条目数、单个解压文件大小或累计解压大小,直接逐项创建文件并复制;即使最终只识别为 unknown 扩展,也会先完成解压。恶意压缩包/压缩炸弹可在用户导入时耗尽磁盘,导致客户端或同机服务不可用。建议增加条目数、单项/累计解压字节数及异常压缩比限制,超限时清理 staging 并返回错误。行内评论 API 返回 422(jsontext: unexpected EOF),因此以本总评论回退。格式化一下rust代码
审查 head sha:9f06f8be7b2a1625d64787d273409d6ce9e0741d。
结论:未发现明确问题。已检查 base
a187d78a1c到当前 head 的代码差异、相关 Rust/前端代码、扩展导入与 MCP/Skill 生命周期测试;cargo check --locked 通过;cargo test --locked client_extensions -- --nocapture 命令退出码为 0,但当前测试目标未匹配到测试(0 tests executed)。审查 head sha:9f06f8be7b2a1625d64787d273409d6ce9e0741d。结论:未发现明确问题。
审查 head sha:9f06f8be7b2a1625d64787d273409dce9e0741d。
New commits pushed, approval review dismissed automatically according to repository settings