Godot MCP 更新:9天修了129个commit 摘要
文档概览
这是一篇围绕 Godot MCP Enhanced 连续版本更新的来源整理。文章不是泛泛谈“又发新版本了”,而是抓住了两个核心版本之间 9 天内的密集修复:
v0.18.2于 6 月 18 日发布,定位是安全加固版。v0.19.0于 6 月 27 日发布,定位是修复与增强版。v0.19.1随后发布,作用是同步版本号。- 从
v0.18.2到v0.19.0,两个核心版本只间隔 9 天。 - 这 9 天里共涉及 129 个 commit。
原文将这轮迭代的价值概括为三条主线:
- 一是 AI 场景编辑可撤销性 有了实质进展,Editor 插件里 AI 创建节点终于可以走 Godot 原生撤销链路。
- 二是安全补丁不是一次性动作,而是从
v0.18.2到v0.19.0连续两轮推进,包括沙箱、路径校验、同源补漏、限流和命令执行收敛。 - 三是一些看似零碎的守卫修复,实际决定了工具从“能用”到“好用”的差别。
关键事实
时间线与版本关系
v0.18.2:2026-06-18 发布。v0.19.0:2026-06-27 发布。v0.19.1:在v0.19.0之后紧跟发布,用于同步版本号。- 两个核心版本
v0.18.2与v0.19.0之间只隔 9 天。 - 这段时间内累计 129 个 commit,且原文强调 CI 全绿。
v0.19.0 最重要的工作流改进:撤销能力接入
原文认为,这次更新里最有分量的工作流改进,是 Editor 插件终于接入 Godot 的 undo_manager。
具体包括:
nav、particle、animtree、ui四组 commands 全部接入undo_manager。- 共 7 处
add_child + set_owner操作被统一包装进create_action_mixed。 - 直接结果是:AI 在场景里创建的节点,现在可以通过 Ctrl+Z 撤销。
这件事的重要性在于,它解决的是实际工作流里的高频痛点:过去 AI 往场景里加错节点或加错位置时,用户不能直接撤销,只能手动删除或者重新让 AI 修改;现在 AI 生成的场景操作能够回到 Godot 原生可撤销编辑链路,这正是 AI 场景编辑可撤销性 的关键一步。
GDScript 一致性修复
除了撤销链路接入,v0.19.0 还修了一个兼容性很具体的问题:
plugin.gd、websocket_server.gd、status_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”,而是把路径校验收敛到统一函数上,减少不同调用点各写一套校验导致的漏网情况。
3. instance-api-auth 的 symlink 风险
- 使用
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。