app
KiCad - the KiCad Bridge
Public Made by Adomby adom
Drive your own KiCad from an AI, in the background: open every editor, read the whole board as data (the EDA Bridge Standard board model), stack-up, part heights, netlists, place, route, pour, DRC and exports.
← Commit history
1.0.47: 1.0.47: KiCad 10's Welcome to KiCad setup wizard no longer pops up. KiCad shows it in every editor start until kicad.json has system.first_run_shown true; cancelling the wizard does not set it and a force-closed KiCad never saves it, so on a machine the bridge drives it came back every time, in front of the user, and the bridge spent about 30 s per editor finding and cancelling it (open_board and open_schematic took 35 s instead of about 5 s on AdomLapper). Before starting any KiCad process, and only when none is running, the bridge now sets that one key, keeping every other; new installs are seeded with it.
3 files changed
+23−4
rust/Cargo.lock+3−3@@ -244,7 +244,7 @@ dependencies = [ [[package]] name = "kicad-bridge"-version = "1.0.46"+version = "1.0.47" dependencies = [ "kicad-core", "kicad-platform",@@ -255,7 +255,7 @@ dependencies = [ [[package]] name = "kicad-core"-version = "1.0.46"+version = "1.0.47" dependencies = [ "kicad-ipc-rs", "kicad-platform",@@ -281,7 +281,7 @@ dependencies = [ [[package]] name = "kicad-platform"-version = "1.0.46"+version = "1.0.47" dependencies = [ "serde", "serde_json",
rust/Cargo.toml+1−1@@ -3,7 +3,7 @@ resolver = "2" members = ["crates/*"] [workspace.package]-version = "1.0.46"+version = "1.0.47" edition = "2021" license = "MIT" publish = false
rust/crates/kicad-bridge/src/verbs_windows.rs+19@@ -508,6 +508,7 @@ fn utc_stamp() -> String { /// Spawn a KiCad GUI without activating its window, stderr captured to a launch log. fn spawn_background(exe: &Path, args: &[String], tag: &str, trace_masks: Option<&str>) -> Result<(u32, Option<PathBuf>), Value> {+ skip_setup_wizard(); let log = bridge_log::log_dir().and_then(|d| bridge_log::new_log_path(&d, &utc_stamp(), tag).ok()); let env = bridge_log::trace_env(trace_masks); let pid = plat("spawn_background", native().spawn_background(exe, args, &env, log.as_deref()))?;@@ -516,6 +517,24 @@ fn spawn_background(exe: &Path, args: &[String], tag: &str, trace_masks: Option< Ok((pid, log)) } +/// Before a KiCad process starts, and only while none runs: mark KiCad's setup wizard as done so+/// it never pops up in front of the user (see kicad_common::mark_first_run_done).+fn skip_setup_wizard() {+ if !native().processes(&["kicad.exe", "pcbnew.exe", "eeschema.exe"]).unwrap_or_default().is_empty() {+ return;+ }+ let versions: Vec<String> = kicad_core::detect::detect().installs.iter().map(|i| i.version.clone()).collect();+ for v in versions {+ if let Some(cfg) = native().config_dir(&v) {+ match kicad_common::mark_first_run_done(&cfg) {+ Ok(true) => eprintln!("[kicad-bridge] KiCad {v}: setup wizard marked done (kicad.json first_run_shown), it will not pop up again"),+ Ok(false) => {}+ Err(e) => eprintln!("[kicad-bridge] KiCad {v}: could not mark the setup wizard done: {e}"),+ }+ }+ }+}+ fn sleep_ms(ms: u64) { std::thread::sleep(Duration::from_millis(ms)); }