← Commit history

Publish 2.0.330

John Lauer ·9041583a12 ·1mo ago ·parent c3bcd1d
3 files changed +8−4
package.json+1−1
@@ -1,6 +1,6 @@ {   "slug": "pup-bridge",-  "version": "2.0.329",+  "version": "2.0.330",   "type": "app",   "description": "The pup SKILL PACK \u2014 the AI skills that teach a cloud/container AI how to drive the Adom Desktop Puppeteer (pup) bridge (browser_* verbs): the everyday `pup` skill plus focused sub-skills for windows/sessions/tabs, screenshots+recording, browsers+Chrome install, and driving the Adom wiki. Installs into ~/.claude/skills + ~/.codex/skills. DOCS ONLY \u2014 this is NOT the bridge runtime. The bridge itself (the Node program that drives the browser) runs on the DESKTOP: Adom Desktop bundles it and auto-installs/updates it, and it's published separately on the Releases tab as adom-bridge-puppeteer-v<ver>.zip. The pkg version is kept in lockstep with the Release version so the page's max version row always carries BOTH a pkg tarball (skills) and a runtime zip (bridge) \u2014 a skills-only or runtime-only bump on the top row breaks constraint installs. TL;DR: pkg install = the skills for your AI; the bridge = the Release zip, which Adom Desktop manages for you.",   "keywords": [
page.json+1−1
@@ -4,7 +4,7 @@   "slug": "pup-bridge",   "title": "Pup - Puppeteer Bridge",   "brief": "pup is the AI's own browser: a real, full Chrome on the user's desktop that the AI fully controls (a sandbox, not the user's signed-in browser). Rides Bridge; pup_* verbs open windows and tabs, navigate, screenshot, and eval JS.",-  "version": "2.0.329",+  "version": "2.0.330",   "tags": [     "skills",     "pup",
tools/pup-dashboard+6−2
@@ -245,6 +245,10 @@ async function buildStatus() { }  // ── page ────────────────────────────────────────────────────────────────────────────────────────+// NOTE: PAGE is a TEMPLATE LITERAL. Every regex escape inside it must be DOUBLED (\\b, \\d,+// \\s), or JS consumes them as string escapes before the browser ever sees the regex: \\b becomes a+// backspace char, \\d becomes 'd', \\s becomes 's'. That shipped live (2.0.326-2.0.329): the status+// pills rendered 'pup 2' / 'in talled and pinned' and the say-chip teal noun highlight never applied. const PAGE = `<!doctype html><meta charset="utf-8"><title>pup</title> <style> :root{--surface:#161b22;--surface2:#21262d;--line:#30363d;--teal:#00b8b1;--muted:#8b949e;--text:#e6edf3;--body:#c9d1d9;--led-green:#3fb950;--led-amber:#d29922;--led-red:#f85149;--sans:"Familjen Grotesk",system-ui,sans-serif;color-scheme:dark}@@ -362,7 +366,7 @@ function copyPhrase(text){var done=function(){toast('success','Copied to clipboa // ── say strip ── (function(){   var chips=document.getElementById('saychips');-  chips.innerHTML=SAY.map(function(p){var q=p.replace(/\bpup\b/,'<em>pup</em>');return '<span class="say-chip" data-say="'+p.replace(/"/g,'&quot;')+'">&ldquo;'+q+'&rdquo; <button class="copy">Copy</button><button class="send">Send to AI</button></span>';}).join('');+  chips.innerHTML=SAY.map(function(p){var q=p.replace(/\\bpup\\b/,'<em>pup</em>');return '<span class="say-chip" data-say="'+p.replace(/"/g,'&quot;')+'">&ldquo;'+q+'&rdquo; <button class="copy">Copy</button><button class="send">Send to AI</button></span>';}).join('');   chips.querySelectorAll('.say-chip').forEach(function(c){     c.addEventListener('click',function(ev){ if(ev.target.closest('.send'))return; copyPhrase(c.dataset.say); });     c.querySelector('.send').addEventListener('click',async function(ev){@@ -390,7 +394,7 @@ async function load(){     var leds=d.leds||[];     document.getElementById('leds').innerHTML=leds.map(function(l,i){       var st=ledState(l.state);-      var short=(l.detail||'').replace(/\b\d[\d.]*\b/g,'').replace(/ on [^.,;(]+/i,'').replace(/[.—(].*$/,'').replace(/\s+/g,' ').trim().slice(0,26);+      var short=(l.detail||'').replace(/\\b\\d[\\d.]*\\b/g,'').replace(/ on [^.,;(]+/i,'').replace(/[.—(].*$/,'').replace(/\\s+/g,' ').trim().slice(0,26);       return '<span class="led-pill" data-state="'+st+'" data-i="'+i+'"><span class="dot"></span><b>'+l.label+'</b> <span class="st">'+short+'</span></span>';     }).join('');     document.querySelectorAll('.led-pill').forEach(function(pill){