Repository navigation
X-agent v0.5.3
X-agent v0.5.3
改进
- Diff 显示:Agent 每回合结束(Shadow 检查点可用时)在回复下方折叠展示本轮改动的高亮 diff(
+/-行着色、文件数与增删统计(+N绿 /-N红)、超长截断);撤回确认弹窗新增「将被还原的内容」diff 预览(pre→HEAD统一 diff),与「涉及文件」列表并列,撤回前可逐行确认影响范围。 - Diff 显示(无 Git 降级):本机未安装 Git 时不再完全缺失 diff——基于
write/edit工具执行前记录的字节基线,与当前文件内容对比(jsdiff)生成同样的高亮 diff;回合 diff 与撤回预览「write/edit 改动预览(无 Git 降级)」均可用。bash 改盘等无基线的改动仍无法追踪(与"无法还原"的降级语义一致)。 - Clarify 问答每题支持自行输入答案:Plan 模式 AI 追问(
<clarify>多选块)每题新增「自行输入答案」选项——点选展开输入框填写自由文本,与选项互斥(选选项会清掉自定义、开自定义会取消选项);已填文本计入作答进度,提交时自定义答案与选项同格式(问题 → 答案)发送给模型。
安全(项目整体审查后修复)
- Godot 项目设置硬闸:
godot_set_project_setting经shared/godot-project-setting.ts校验——敏感前缀(autoload/*/input/*/debug/file_logging/*/debug/shapes/*/project_settings_override/*/editor_plugins/enabled/network/tls/certificate_bundle_override等)拒绝写入;value 收窄为 string / number / boolean 或简单嵌套(最多 1 层);key 限 ASCII 字母数字+/_,避免project.godot注入。 - Provider baseUrl DNS 闸:保存供应商档案时
upsertProviderProfile经validateUpsertAsync双重校验(静态 host 黑名单 + 异步 DNS rebinding 解析),拒绝私网 /localtest.me/*.nip.io等。 - Godot RPC 客户端与项目绑定:
GodotRpcBridge新增setCurrentCwd——已绑定时仅当前会话项目下的客户端合法;显式clientId与 cwd 不匹配直接拒绝(不静默改道);切换项目时若原 active 不匹配则重置为首个匹配客户端。 - shellPath 真 Bash 闸:
applyBashShellPath要求--version输出包含 GNU bash 特征;非可信目录会同时返回warning,由 renderer 横幅提示。 - Godot 资源清理:RPC 启动期
server.unref()、stop()强制 1s 超时降级;编辑器子进程 spawn 失败路径也unref();auto-updater 启动检查unref()。 - 持久化原子化:
plan-journal/goal-journal改走atomic-write.ts的writeJsonAtomicSync(tmp + rename),不再写半截;package-managerregistry 同步入口加 per-key 自旋锁,避免 install / prune 并发互相覆盖。 - 启动失败摘要:recover / bridge / package install 失败写入
getStartupReport通道并 dbgLog,renderer 经 ReadyChecklist 提示用户。 - abort 失败状态修正:abort 抛错时不再盲目
setStatus('idle')——重读isStreaming,仍 streaming 时保留error状态并 emit notice。 - usage 写入失败:error-bridge 内 catch 改为 dbgWarn,便于诊断。
- orphan 清理:启动期清理残留
.tmp/ bash-liveness probe / 90 天未用的 godot-rpc endpoint。
测试 & 质量
- Vitest 覆盖扩展:新增
bash-readonly/external-url/secret-codec/atomic-write/provider-persist五套 vitest 单元测试(与godot-project-setting/godot-rpc-bridge合计 24 套 323 测试 92% 覆盖率);新增setSkipDnsForTests/setSkipPiSyncForTests用于隔离外部依赖。 - E2E 契约扩展:从 2 个扩到 6 个(
contracts/mode-flow/mode-attestation/ipc-validation/startup-report)——锁定 facade 行为、IPC 校验、状态机契约。 - CI 加固:新增
concurrency与lint步骤;e2ejob 加 Playwright 浏览器缓存;releaseworkflow 加lint与test-extract-changelog校验。
完整变更记录见仓库 CHANGELOG.md。