app
KiCad - the KiCad Bridge
Public Made by Adomby adom
Reference implementation of the KiCad bridge: multi-instance Python server, forward path via kicad-cli, reverse path via in-process plugin. Most complex of the three bundled bridges.
← Commit history
Publish 1.0.86
4 files changed
+12−5
dashboard/kicad_dashboard.py+1−1@@ -49,7 +49,7 @@ from http.server import BaseHTTPRequestHandler, ThreadingHTTPServer from pathlib import Path from urllib.parse import unquote, urlparse -VERSION = "3.6.0"+VERSION = "3.7.0" AI_THREAD = "kicad-dashboard" DEFAULT_PORT = 8931 UI_DIR = Path(__file__).resolve().parent / "ui"
dashboard/ui/index.html+9−2@@ -902,7 +902,7 @@ function onSurfaceEvent(e){ } // Live channel (SSE): state pushes, AI toasts, CLI click directives.-const CLICK_TARGETS={setup:'#btnSetup',launch:'#btnLaunch',close:'#btnClose',demo:'#btnDemo','part-tour':'#btnPartTour',settings:'#btnSettings',refresh:'#btnRefresh'};+const CLICK_TARGETS={help:'#btnHelp','panel-x':'#panelX',setup:'#btnSetup',launch:'#btnLaunch',close:'#btnClose',demo:'#btnDemo','part-tour':'#btnPartTour',settings:'#btnSettings',refresh:'#btnRefresh'}; async function loadVerbTimes(){ const box=document.getElementById('verbTimes'); box.innerHTML='<div class="note">loading...</div>';@@ -1052,7 +1052,14 @@ setMuteUI(); const send=()=>{try{fetch('api/viewport',{method:'POST',headers:{'Content-Type':'application/json'}, body:JSON.stringify({innerWidth:window.innerWidth,innerHeight:window.innerHeight,scrollWidth:document.documentElement.scrollWidth,overflowX:document.documentElement.scrollWidth>window.innerWidth,offenders:(()=>{const vw=window.innerWidth,out=[];document.querySelectorAll('body *').forEach(n=>{const r=n.getBoundingClientRect();if(r.right>vw+1||r.width>vw+1){out.push((n.id?'#'+n.id:(n.className&&n.className.toString().split(' ')[0]?'.'+n.className.toString().split(' ')[0]:n.tagName))+':w'+Math.round(r.width)+',r'+Math.round(r.right));}});return out.slice(0,8)})(), dpr:window.devicePixelRatio,twoCol:window.innerWidth>700,- panelCols:getComputedStyle(document.querySelector('.panel-cols')||document.body).gridTemplateColumns})}).catch(()=>{});}catch(e){}};+ panelCols:getComputedStyle(document.querySelector('.panel-cols')||document.body).gridTemplateColumns,+ panelOpen:document.getElementById('panel')?document.getElementById('panel').style.display!=='none':null,+ ariaPressed:document.getElementById('btnHelp')?document.getElementById('btnHelp').getAttribute('aria-pressed'):null,+ helpLabel:document.getElementById('btnHelp')?document.getElementById('btnHelp').getAttribute('aria-label'):null,+ headerH:document.querySelector('header')?Math.round(document.querySelector('header').getBoundingClientRect().height):null,+ headerPadX:document.querySelector('header')?getComputedStyle(document.querySelector('header')).paddingLeft:null,+ truncatedPhrases:[...document.querySelectorAll('.p-phrase')].filter(n=>n.scrollWidth>n.clientWidth).length,+ totalPhrases:document.querySelectorAll('.p-phrase').length})}).catch(()=>{});}catch(e){}}; send();window.addEventListener('resize',()=>{clearTimeout(window.__vpT);window.__vpT=setTimeout(send,400);}); })(); renderSkeleton();
package.json+1−1@@ -1,6 +1,6 @@ { "slug": "kicad-bridge",- "version": "1.0.85",+ "version": "1.0.86", "type": "app", "description": "Skills for your container so your AI knows how to drive the KiCad bridge. The bridge runtime itself is the release zip; Adom Bridge loads that.", "tags": [
page.json+1−1@@ -4,7 +4,7 @@ "slug": "kicad-bridge", "title": "KiCad - the KiCad Bridge", "brief": "Reference implementation of the KiCad bridge — multi-instance Python server, forward path via kicad-cli, reverse path via in-process plugin. Most complex of the three bundled bridges.",- "version": "1.0.85",+ "version": "1.0.86", "tags": [ "kicad", "pcb",