← Commit history

Publish 1.0.86

John Lauer ·54f9b2b38b ·1mo ago ·parent 1eda9a6
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",