← Commit history
README.md+1−1
@@ -11,7 +11,7 @@ verbs.  ```bash adom-wiki pkg install barrett-land/adom-desktop-altium-bridge   # the skill, in the container-adom-desktop bridge_install '{"manifestUrl":"https://wiki.adom.inc/download/barrett-land/adom-desktop-altium-bridge/0.0.43/altium-bridge-manifest.json"}'+adom-desktop bridge_install '{"manifestUrl":"https://wiki.adom.inc/download/barrett-land/adom-desktop-altium-bridge/0.0.44/altium-bridge-manifest.json"}' adom-desktop --ai-thread "<your thread>" altium_ping '{}' ``` 
SKILL.md+1−1
@@ -12,7 +12,7 @@ forwards work into the running GUI as DelphiScript via `X2.EXE`. ## Install  ```bash-adom-desktop bridge_install '{"manifestUrl":"https://wiki.adom.inc/download/barrett-land/adom-desktop-altium-bridge/0.0.43/altium-bridge-manifest.json"}'+adom-desktop bridge_install '{"manifestUrl":"https://wiki.adom.inc/download/barrett-land/adom-desktop-altium-bridge/0.0.44/altium-bridge-manifest.json"}' adom-desktop --ai-thread "<your thread>" altium_ping '{}'   # -> {"altiumInstalled": true, "version": "..."} ``` 
altium-bridge-manifest.json+3−3
@@ -1,3 +1,3 @@-{ "manifest_version": 1, "name": "altium", "version": "0.0.43",-  "url": "https://wiki.adom.inc/download/barrett-land/adom-desktop-altium-bridge/0.0.43/altium-bridge-v0.0.43.zip",-  "sha256": "cf4dcef4b76bfc2aec67b919d1450870bab4c04de7cfc96a3c65374e290ebcde", "size": 39197, "released_at": "2026-08-12T15:56:16Z" }+{ "manifest_version": 1, "name": "altium", "version": "0.0.44",+  "url": "https://wiki.adom.inc/download/barrett-land/adom-desktop-altium-bridge/0.0.44/altium-bridge-v0.0.44.zip",+  "sha256": "2ac7ee28448152cb582db2aaaab7f5855cefb58a090c402329d7a61e64c111dc", "size": 40398, "released_at": "2026-08-12T16:39:56Z" }
altium-bridge-v0.0.44.zipadded
⋯ 1 unchanged line ⋯
bridge-src/BRIDGE_VERSION+1−1
@@ -1 +1 @@-0.0.43+0.0.44
bridge-src/__pycache__/server.cpython-312.pyc
⋯ 1 unchanged line ⋯
bridge-src/addin/AdomAltium/AdomAltium.pas+104
@@ -1399,6 +1399,109 @@ begin            ', "saved": ' + SavedStr); end; +{ ---- command: normalise TEXT STYLE (font + colour) across a component's designator,+       comment and every parameter.++       Why this exists: Altium's KiCad importer does not reuse the document's default+       font. It APPENDS its own entries to the library font table -- measured as+       "Yu Gothic UI Light" 8pt -- and carries KiCad's field colour (8650884) across.+       Imported parts therefore render in a different face, size and hue from every+       hand-made part in the same library, which is obvious the moment both are on one+       sheet. Genuine Altium parts use FontID 1 = Times New Roman 10, colour 8388608+       (Altium stores colour as BGR, so 8388608 = $800000 = navy RGB(0,0,128)).++       'component' may be '' or '*' to restyle EVERY component in the library.+       'fontid' defaults to 1 because Altium seeds a new library's font table with its+       default face at index 1; pass an explicit id to target a different table slot. ---- }+procedure CmdSetTextStyle;+var+    SchPath, CompRef, SavedStr : String;+    FontId, Colr, nTxt, nCmp   : Integer;+    Lib   : ISch_Lib;+    Cmp   : ISch_Component;+    It    : ISch_Iterator;+    P     : ISch_Parameter;+    names : TStringList;+    i     : Integer;+    SavedOK : Boolean;+begin+    SchPath := Req.Values['schlib'];+    CompRef := Req.Values['component'];+    FontId  := StrToIntDef(Req.Values['fontid'], 1);+    Colr    := StrToIntDef(Req.Values['color'], 8388608);+    if SchPath = '' then begin RespErr('missing schlib'); Exit; end;++    GStage := 'open schlib';+    Lib := OpenSchLibDoc(SchPath);+    if Lib = nil then begin RespErr('could not open: ' + SchPath); Exit; end;++    nTxt := 0; nCmp := 0;+    names := TStringList.Create;+    try+        GStage := 'collect components';+        if (CompRef = '') or (CompRef = '*') then+        begin+            It := Lib.SchLibIterator_Create;+            It.AddFilter_ObjectSet(MkSet(eSchComponent));+            try+                Cmp := It.FirstSchObject;+                while Cmp <> nil do+                begin+                    names.Add(Cmp.LibReference);+                    Cmp := It.NextSchObject;+                end;+            finally+                Lib.SchIterator_Destroy(It);+            end;+        end+        else+            names.Add(CompRef);++        for i := 0 to names.Count - 1 do+        begin+            Cmp := FindComponent(Lib, names.Strings[i]);+            if Cmp <> nil then+            begin+                Inc(nCmp);++                GStage := 'restyle designator + comment';+                Cmp.Designator.FontID := FontId;+                Cmp.Designator.Color  := Colr;+                Cmp.Comment.FontID    := FontId;+                Cmp.Comment.Color     := Colr;+                nTxt := nTxt + 2;++                GStage := 'restyle parameters';+                It := Cmp.SchIterator_Create;+                It.AddFilter_ObjectSet(MkSet(eParameter));+                try+                    P := It.FirstSchObject;+                    while P <> nil do+                    begin+                        P.FontID := FontId;+                        P.Color  := Colr;+                        Inc(nTxt);+                        P := It.NextSchObject;+                    end;+                finally+                    Cmp.SchIterator_Destroy(It);+                end;+            end;+        end;+    finally+        names.Free;+    end;++    GStage := 'save';+    Lib.GraphicallyInvalidate;+    SavedOK := False;+    if LastServerDoc <> nil then SavedOK := LastServerDoc.DoFileSave('');+    if SavedOK then SavedStr := 'true' else SavedStr := 'false';+    RespOk(', "components": ' + IntToStr(nCmp) + ', "textObjects": ' + IntToStr(nTxt) ++           ', "fontId": ' + IntToStr(FontId) + ', "color": ' + IntToStr(Colr) ++           ', "saved": ' + SavedStr);+end;+ { ---- command: copy a component from one SchLib (src) into another (dst), appending.        Faithful copy (pins + graphics + params); designator + footprint link set fresh.        Enables adding a new part TYPE into an EXISTING library. ---- }@@ -1731,6 +1834,7 @@ begin         else if Cmd = 'copy_footprint'   then CmdCopyFootprint         else if Cmd = 'add_body'         then CmdAddBody         else if Cmd = 'set_visibility'   then CmdSetVisibility+        else if Cmd = 'set_text_style'   then CmdSetTextStyle         else if Cmd = 'export_step'      then CmdExportStep         else if Cmd = 'run_outjob'       then CmdRunOutJob         else RespErr('unknown command: ' + Cmd);
bridge-src/bridge.json+2−1
@@ -2,7 +2,7 @@   "manifest_version": 1,   "name": "altium",   "displayName": "Altium Bridge",-  "version": "0.0.43",+  "version": "0.0.44",   "description": "Drives Altium Designer from a container: build, clone and edit file-based symbol/footprint/Integrated libraries with LCSC/JLCPCB part numbers attached, and generate batch outputs (STEP, PDF, Gerber, BOM, CPL) from an OutJob. Pairs with the container-side altium-jlc orchestrator (adom-jlcpcb + chip-fetcher).",   "homepage": "https://wiki.adom.inc/adom/adom-desktop-altium-bridge",   "author": "Adom Inc.",@@ -43,6 +43,7 @@     "altium_import_part",     "altium_add_body",     "altium_set_visibility",+    "altium_set_text_style",     "altium_copy_sch_component",     "altium_copy_footprint",     "altium_script_state",
bridge-src/server.py+13
@@ -177,6 +177,18 @@ def handle_set_visibility(args: dict) -> dict:                       timeout=args.get("timeout", 90))  +def handle_set_text_style(args: dict) -> dict:+    """Normalise font + colour on a component's designator, comment and parameters.+    Defaults are Altium's own: FontID 1 (Times New Roman 10) and colour 8388608,+    which is navy RGB(0,0,128) -- Altium stores colour as BGR. The KiCad importer+    instead appends its own font (Yu Gothic UI Light 8) and keeps KiCad's field+    colour, so imported parts look nothing like hand-made ones in the same library.+    component='' or '*' restyles every component in the library."""+    keys = ("schlib", "component", "fontid", "color")+    return addin_call("set_text_style", {k: args.get(k) for k in keys},+                      timeout=args.get("timeout", 180))++ def handle_add_body(args: dict) -> dict:     """Attach a simple extruded 3D body (box, sized in mils) to a footprint."""     keys = ("pcblib", "footprint", "bw_mil", "bh_mil", "h_mil", "so_mil")@@ -446,6 +458,7 @@ COMMAND_HANDLERS = {     "altium_import_part": handle_import_part,     "altium_add_body": handle_add_body,     "altium_set_visibility": handle_set_visibility,+    "altium_set_text_style": handle_set_text_style,     "altium_copy_sch_component": handle_copy_sch_component,     "altium_copy_footprint": handle_copy_footprint, }
package.json+1−1
@@ -1,6 +1,6 @@ {   "slug": "adom-desktop-altium-bridge",-  "version": "0.0.43",+  "version": "0.0.44",   "type": "app",   "description": "Adom Desktop bridge for Altium Designer: file-based symbol/footprint/IntLib authoring with LCSC/JLCPCB part numbers, Gerber/BOM/CPL batch output, and an in-process .NET extension adding parameterized headless verbs - STEP export with hole and copper options, and KiCad import with no wizard.",   "tags": [
page.json+11−7
@@ -1,8 +1,8 @@ {   "slug": "adom-desktop-altium-bridge",-  "version": "0.0.43",+  "version": "0.0.44",   "type": "app",-  "description": "Adom Desktop bridge for Altium Designer \u2014 build and edit file-based symbol/footprint/Integrated libraries with LCSC/JLCPCB part numbers attached, and generate batch outputs (STEP, PDF, Gerber, BOM, CPL) from an OutJob, by driving Altium via DelphiScript.",+  "description": "Adom Desktop bridge for Altium Designer: file-based symbol/footprint/IntLib authoring with LCSC/JLCPCB part numbers, Gerber/BOM/CPL batch output, and an in-process .NET extension adding parameterized headless verbs - STEP export with hole and copper options, and KiCad import with no wizard.",   "tags": [     "app",     "adom-desktop",@@ -18,6 +18,7 @@   },   "needs_sudo": false,   "hero": {+    "type": "image",     "path": "docs/hero.png"   },   "author": {@@ -25,13 +26,16 @@     "email": "[email protected]"   },   "discovery_triggers": [-    "add a part to my altium library",     "drive altium from claude",     "altium bridge",-    "export step from altium",+    "export step from altium headless",+    "add a part to my altium library",+    "altium extension",+    "install altium extension",+    "altium step export",     "run an altium outjob",-    "build an altium footprint",-    "altium symbol library"+    "import kicad into altium",+    "altium kicad importer"   ],   "discovery_pitch": "Use when the user wants Claude to author or edit Altium libraries, or to generate STEP/PDF/Gerber/BOM/CPL from an Altium board on their Windows machine.",   "sample_prompts": [@@ -48,4 +52,4 @@       "prompt": "Is the Altium bridge connected and what version is it?"     }   ]-}+}\ No newline at end of file