v2.4.13 更新内容:
【1】修复:MCP「允许外部 Agent 调用特权工具」勾了不生效
- 真因不是没保存,是没下发:cbMcpDangerous 没有任何 toggled 连接,
allow_dangerous 只在 bridge.start() 那一刻被读一次;而专为热更新写好的
MCPBridge.apply_settings() 接口,全仓库只在「重新生成令牌」处被调用过。
- 现在:勾选/取消立即生效,不必再停启服务;令牌编辑同样即时生效。
- 端口是唯一例外(监听端口无法热切换),状态栏会明确提示需「停止服务 → 启动服务」。
- 空令牌防呆:令牌留空会让服务端拒绝一切请求,现被拦下并恢复上一个有效值。
- 状态标签改显【服务实际生效的值】,不再显示复选框的样子——后者会把「下发失败」
伪装成「保存失败」,把排查带偏。
【2】新增工具 compute_area_stats:面积统计终于有了正确入口(共 23 个内置工具)
- 分带规则:逐要素按【质心经度】取 CGCS2000 三度带,CM = 3 * round(lon / 3)。
- CRS 走官方 EPSG:4542 + (CM-99)/3,即 99E→EPSG:4542、102E→4543、105E→4544。
- 双口径互校:三度带投影平面面积(zone)+ QgsDistanceArea/GRS80 椭球大地测量
面积(ellipsoid,与投影无关),正常差异 < 0.03%。
- 支持多级 group_by、carry_fields 附带编码、每级按面积降序、limit 上限,
output_dir 给定即直接落 CSV(UTF-8 带 BOM,Windows Excel 双击可读)。
【3】修复:一个「算出来是 0 却不报错」的隐性坑
- QgsCoordinateReferenceSystem("+proj=tmerc ...") 直接构造得到的是【无效 CRS】
且【不抛任何异常】→ QgsGeometry.transform() 静默跳过 → 面积仍是平方度 →
除以 1e6 四舍五入恰好得 0.0,全程零报错。
- 改为 fromEpsgId / fromProj,并显式校验 isValid(),两头都无效就中止并说明原因,
绝不放行去算 0。
【4】修复:沙箱冷启动缺陷(GitHub issue #1 的真拦路虎)
- mapLayersByName 在进程内首次调用必失败,报
"... returned a result with an exception set"(cold 必失败 / warm 必成功)。
- 真因是 PyQt/sip 惰性 import gc 命中当前帧的受限 __builtins__,异常被 C 层吞掉。
- 执行层新增【宿主专用窄口】(仅 gc),且绝不渗进共用判据 _is_module_allowed
(gc.get_objects() 无需任何 dunder 即可逃逸进程);AST 层补裸名 dunder 检查,
堵死 __builtins__['__import__']('gc') 这条绕过路径。
【5】测试与验收
- 新增 86 例守卫(面积 35 / 沙箱 16 / MCP 热更新 35),全部含反向验证;
单测 524 → 610 全绿。
- 真机 Qt5 + Qt6 部署副本验收:面积 26/26、MCP 热更新 36/36、cold + warm 均可用。
- 反向对照:用 v2.4.12 旧副本跑 cold 探针,成功复现原故障。
【6】文档
- README 与 metadata 的「20 个内置工具」口径已同步为 23 个。
yes
bunkmr
2026-09-29T13:41:42.359021+00:00
3.22.0
4.99.0
None
no
Plugin Tags