easyeda-agent v0.14.0
[0.14.0] - 2026-07-18
「真机可信化」版:一天内 16 个 issue 闭环的集中发布。三大主题:
① via/导入可信化——EPAD 内嵌热过孔的删除欺骗与赋网易失被彻底摸清(删不掉:
假成功+立即 getAll 也骗+reload 原 id 复活;赋网只活到 reload),pcb.route.delete
前置拒删、pcb.add_component 放置即键合、CLI 新增 pcb via-bond 幂等重键合 +
pcb check netless-via-in-pad 触发器;import-changes 十七天误诊破案——它从来
不是 no-op,是「确认导入信息」对话框没人点,现在 handler 自动点「应用修改」,
clear→reimport 往返打通。② 布线器硬否决——异网走线/slot 从代价升级为
hopFeasible 硬门(R2 两条真交叉短路的根治),mount-holes 反查既有铜皮。
③ 门禁与工具诚实化——power-not-poured 对 GND 内电层死锁解除(PlanePouredNets
状态互通)、--force 分级放行(零确认机械骨架要 --force-unsafe)、pcb clear
默认 verify 复合流程、高 pin 连接器不再抢 main、陶瓷贴片天线 keepout、
根级 easyeda health 别名。
Fixed
pcb.import_changes假 no-op 根因修复(#124,订正 #20 诊断):importChanges 一直
都能正确算出变更清单——它弹「确认导入信息」对话框等人点「应用修改」,API 返回 true 只
代表对话框弹出;headless 没人点,看起来就是静默 no-op(「不支持增量导入」是误诊)。
真机实证:点击后 20 件全部落板。handler 现在自动等待对话框并点「应用修改」
(confirm:false保留人工审查),且 importChanges 的 promise 不再串行 await
(实测某些状态下永不 resolve,会卡死连接器整个动作队列)——改为并发点击 + 12s 超时
兜底,以器件计数差(componentsBefore/After)为落板真值。pcb.route.delete假报成功修复(#120,真机订正):SDK 的delete()对封装内嵌
via(QFN EPAD 热过孔是 component 的一部分)返回true且立即 getAll 也显示已删,
但 save/reload 后从封装定义原 id 复活(ceshi 真机实证)——纯 readback 会被骗。handler
现在前置结构判定:via id 以某器件 primitiveId 为前缀 = 内嵌,直接拒删进
notDeletable[](附父器件 + 指引pcb via-bond),ok:false;其余照常删除并
readback 兜底(removed/count只统计真正消失的,不可归因的幸存者进notDeleted)。pcb.add_component内嵌 via 赋网(#118):封装内嵌的 EPAD 热过孔net="",
EPAD 永远焊不上 GND 平面且每颗报一条 same-footprint SMD Pad to Via。现在赋完
pad 网后,枚举落在本器件已赋网 pad 铜皮矩形内的无网 via,用
pcb_PrimitiveVia.modify(@beta)赋成该 pad 的网,并 readback 验证(#120 教训:
SDK 布尔不可信);结果新增embeddedVias {assigned, verified, failed}。
⚠️ 真机实证:该赋网不能活过 doc reload(平台每次都把内嵌 via 重物化为无网)——
CLI 侧配套pcb via-bond(exec_js 路线,旧连接器即可用)负责 reload 后重键合,
pcb check新规则 netless-via-in-pad 是触发器。
One-line install/update:
curl -fsSL https://raw.githubusercontent.com/zhoushoujianwork/easyeda-agent/main/install.sh | sh
Installs/updates:
- easyeda CLI/daemon
- easyeda-agent skill for Codex (
/.codex/skills) and/or Claude Code (/.claude/skills) when detected - prints EasyEDA connector .eext import URL
Skill targets: set EASYEDA_INSTALL_SKILLS=codex,claude to force targets, none to skip, or EASYEDA_SKILL_PRESERVE=1 to keep local edits.