← Commit history

Update 4 file(s)

John Lauer ·1e1809ec72 ·1mo ago ·parent b3615e9
4 files changed +40−11
BRIDGE_VERSION+1−1
@@ -1 +1 @@-0.9.212\ No newline at end of file+0.9.213\ No newline at end of file
adom-bridge-kicad-manifest.json+5−5
@@ -1,15 +1,15 @@ {   "manifest_version": 1,   "name": "kicad",-  "version": "0.9.212",-  "url": "https://wiki.adom.inc/download/adom/kicad-bridge/0.9.212/adom-bridge-kicad-v0.9.212.zip",-  "sha256": "5f73136782c85ddbbf12e5bab254b6c345f663d9b40b2d1733efc282baaf1b16",-  "size": 481679,+  "version": "0.9.213",+  "url": "https://wiki.adom.inc/download/adom/kicad-bridge/0.9.213/adom-bridge-kicad-v0.9.213.zip",+  "sha256": "ae143664eab5074d0eef9c509936f08f0283f1de88f8e445a7a280897befb10b",+  "size": 482152,   "verbPrefixes": [     "kicad_"   ],   "healthEndpoint": "/status",-  "released_at": "2026-08-20T15:45:00Z",+  "released_at": "2026-08-20T15:55:00Z",   "hero": "https://wiki.adom.inc/blob/app/kicad-bridge/kicad-hero.png",   "languages": [     "Python",
bridge.json+1−1
@@ -2,7 +2,7 @@   "manifest_version": 1,   "name": "kicad",   "displayName": "KiCad EDA",-  "version": "0.9.212",+  "version": "0.9.213",   "description": "Reverse bridge for KiCad \u2014 board/schematic introspection, lint via kicad-cli, plugin install, multi-instance probe, in-process DRC.",   "homepage": "https://wiki.adom.inc/adom/adom-bridge",   "author": "Adom Inc.",
plugin_payload/adom_bridge.py+33−4
@@ -2825,10 +2825,39 @@ def _ui_probe_footprint(library: str, footprint: str) -> dict:     import pcbnew  # available only inside a KiCad process      out = {"library": library, "footprint": footprint}-    try:-        tbl = pcbnew.GetGlobalFootprintTable()-    except Exception as e:-        out["error"] = f"no footprint table: {type(e).__name__}: {e}"++    # KiCad moves this API between versions, and guessing one name gave a dead+    # end on 10.0 ("module 'pcbnew' has no attribute 'GetGlobalFootprintTable'").+    # Try the known spellings in order, record which one answered, and if none+    # do, report the candidate attribute names this build actually exposes so+    # the next attempt is informed rather than another guess.+    tbl, via, errs = None, None, []+    for name, getter in (+        ("GetGlobalFootprintTable", lambda: pcbnew.GetGlobalFootprintTable()),+        ("FP_LIB_TABLE.GetGlobalLibTable", lambda: pcbnew.FP_LIB_TABLE.GetGlobalLibTable()),+        ("GetFootprintLibraryTable", lambda: pcbnew.GetFootprintLibraryTable()),+        ("Frame.Prj.PcbFootprintLibs", lambda: pcbnew.GetBoard().GetProject().PcbFootprintLibs()),+    ):+        try:+            tbl = getter()+            if tbl is not None:+                via = name+                break+        except Exception as e:+            errs.append(f"{name}: {type(e).__name__}: {e}")+    out["apiVia"] = via+    if tbl is None:+        out["apiTried"] = errs+        try:+            out["apiCandidates"] = sorted(+                n for n in dir(pcbnew)+                if ("footprintlib" in n.lower() or "fp_lib" in n.lower()+                    or "footprinttable" in n.lower()))[:20]+        except Exception:+            pass+        out["error"] = "could not reach KiCad's footprint library table on this build"+        out["verdict"] = ("PROBE UNAVAILABLE on this KiCad build - see apiTried/apiCandidates. "+                          "This says nothing about the footprint itself.")         return out      try: