W
AI-Wiki
SOURCE

Godot MCP 更新:9天修了129个commit 摘要

文档概览

这是一篇围绕 Godot MCP Enhanced 连续版本更新的来源整理。文章不是泛泛谈“又发新版本了”,而是抓住了两个核心版本之间 9 天内的密集修复:

  • v0.18.2 于 6 月 18 日发布,定位是安全加固版。
  • v0.19.0 于 6 月 27 日发布,定位是修复与增强版。
  • v0.19.1 随后发布,作用是同步版本号。
  • v0.18.2v0.19.0,两个核心版本只间隔 9 天。
  • 这 9 天里共涉及 129 个 commit。

原文将这轮迭代的价值概括为三条主线:

  • 一是 AI 场景编辑可撤销性 有了实质进展,Editor 插件里 AI 创建节点终于可以走 Godot 原生撤销链路。
  • 二是安全补丁不是一次性动作,而是从 v0.18.2v0.19.0 连续两轮推进,包括沙箱、路径校验、同源补漏、限流和命令执行收敛。
  • 三是一些看似零碎的守卫修复,实际决定了工具从“能用”到“好用”的差别。

关键事实

时间线与版本关系

  • v0.18.2:2026-06-18 发布。
  • v0.19.0:2026-06-27 发布。
  • v0.19.1:在 v0.19.0 之后紧跟发布,用于同步版本号。
  • 两个核心版本 v0.18.2v0.19.0 之间只隔 9 天。
  • 这段时间内累计 129 个 commit,且原文强调 CI 全绿。

v0.19.0 最重要的工作流改进:撤销能力接入

原文认为,这次更新里最有分量的工作流改进,是 Editor 插件终于接入 Godot 的 undo_manager

具体包括:

  • navparticleanimtreeui 四组 commands 全部接入 undo_manager
  • 共 7 处 add_child + set_owner 操作被统一包装进 create_action_mixed
  • 直接结果是:AI 在场景里创建的节点,现在可以通过 Ctrl+Z 撤销。

这件事的重要性在于,它解决的是实际工作流里的高频痛点:过去 AI 往场景里加错节点或加错位置时,用户不能直接撤销,只能手动删除或者重新让 AI 修改;现在 AI 生成的场景操作能够回到 Godot 原生可撤销编辑链路,这正是 AI 场景编辑可撤销性 的关键一步。

GDScript 一致性修复

除了撤销链路接入,v0.19.0 还修了一个兼容性很具体的问题:

  • plugin.gdwebsocket_server.gdstatus_panel.gd 三个文件,共 6 处补上了 super() 调用。
  • 之前缺少这些 super() 时,某些 Godot 版本会报 Parse error

原文特别提醒,这和 v0.18.2 里“删 super()”并不矛盾:

  • v0.18.2 删除的是 bridge 层里 extends Node 虚函数上多余的 super(),因为 Godot 4.6.2 在那个位置会报 Parse error
  • v0.19.0 补上的则是 plugin 生命周期相关位置中“本该有却漏掉的 super()”。

也就是说,两次改动不是互相推翻,而是在不同上下文里做正确的 GDScript 一致性修复。

重要细节

3 个 CRITICAL 问题:2 个真修,1 个证伪后退回

原文对 v0.19.0 处理 CRITICAL 问题的评价很高,不是因为“全修了”,而是因为维护者区分了真实漏洞与 审查误报证伪

1. detachInstance 双 parent 属性问题:真实修复

  • 对应审查编号:@748
  • 问题根源:场景里部分子节点的 parent="" 是空串;detach 时原来的正则匹配不到空串,于是代码落入 else 分支,再叠加出一个新的 parent 属性。
  • 后果:单个节点出现两个 parent 属性,Godot 会报错。
  • 修复方式:把正则改成 [^\"]*,并增加空串守卫。

这类问题的关键不只是“有 bug”,而是边界值非常具体:并不是所有节点都出错,而是 parent 为空串时原有匹配逻辑失效。

2. recording 录制事件无限增长:真实修复

  • 问题表现:录制功能保存事件列表时没有上限,持续录制会导致事件不断堆积,最终内存爆涨。
  • 修复方式:在 TS 回放侧与 GDScript 录制侧同时加上 MAX_EVENTS 上限。

这个修法说明维护者没有只堵一边,而是从“录制”和“消费/回放”两侧同时收口,避免单边补丁留下新缺口。

3. scene-merge 字面量篡改:经 TDD 证伪,标记 wontfix

  • 对应审查编号:@739
  • 审查报告原先声称:scene-merge 在合并场景时,正则可能篡改字面量中的 ExtResource / SubResource 引用。
  • 维护者没有直接照单全收,而是先写 TDD 做实测。
  • 实测结果:.tscn 字面量里的引号是被转义的 \",正则根本匹配不到这些位置。
  • 结论:该漏洞不成立,因此被标记为 wontfix
  • 但为了把结论固化下来,维护者仍然补了双侧回归测试。

这是一个标准的 审查误报证伪 案例:不是逞强不修,而是通过可重复测试说明“这里其实不会触发”,再用回归测试把证伪结果固定住。

4 个安全同源补漏点

v0.19.0 除了处理 3 个 CRITICAL,还修了 4 个“同一类漏洞之前修过一处、别处又漏掉”的补漏点。原文把它们归为 安全同源补漏

1. UI BLOCKED_PROPS

  • findBlockedProps 被抽到 shared 模块。
  • 拦截逻辑前移到 handler 层,做前置硬拒绝。

这意味着不再依赖后面分散调用点各自记得检查,而是把规则提升为共享能力,并尽量在入口处拒绝。

2. audio stream_path

  • stream_path 统一使用 sanitizeResPath 校验。
  • 目标是统一约束 res:// 路径。

重点不是“又加了一个 if”,而是把路径校验收敛到统一函数上,减少不同调用点各写一套校验导致的漏网情况。

  • 使用 lstatSync 检测符号链接。
  • 配合 unlink,避免 writeFileSync 跟踪 symlink 写入到不该写的位置。

这是典型的文件系统写入安全细节:不是简单判断路径字符串,而是先看目标对象本身是不是符号链接。

4. instance-manager 路径遍历判断修正

  • 旧逻辑使用 includes('..'),过于粗暴。
  • 问题在于它会误拒合法路径,因为只要字符串里包含 .. 就可能被挡下。
  • 新逻辑改为段级判断:seg === '..'

这类修改体现的是“既要拦恶意输入,也不能误伤正常输入”的工程取舍。

触屏支持补齐的范围

原文指出,触屏支持不是一句“支持 touch 了”那么简单,而是补齐了录制和回放两侧的事件链路。

此前的情况是:

  • 触屏设备上的 touch 事件会被 silently skip。
  • 结果就是录制时等于没录到,回放时也不会触发对应动作。

本次补齐包括:

  • TS 回放侧加入 touch 分支。
  • bridge 层补上 _cmd_send_touch
  • bridge 层补上 dispatch 录制点。
  • bridge 层补上 _input 录制点。

因此,这次更新并不是只修“回放不能点”,而是把触摸事件从输入采集到回放执行的关键节点都补齐了。对手游或触屏交互开发者来说,这是明确的能力扩展。

v0.18.2 的安全加固回顾

v0.18.2 是比 v0.19.0 早 9 天发布的安全加固版。原文把这部分作为“补课”,但实际信息量很大。

GDScript 沙箱加固

  • 拼接窗口从 4 扩大到 8,即 MAX_CONCAT_WINDOW 从原先范围扩大为 8。