app
Pup - the AI's own browser
Public Made by Adomby adom
pup gives your AI a real browser on your desktop that it drives completely, in the background, signed in as you: windows that never jump in front of your work, one shared profile that learns your logins, and every window labeled on the taskbar with its AI thread's name.
← Commit history
pup-bridge#66: ship.sh now bumps the skillpack package.json in lockstep and fails LOUDLY on pkg publish errors (17 versions of silent no-op publishes left empty version rows; pkg install 404'd on the tarball-less top row). Published 2.0.294 with a real tarball, install verified. pup-dashboard --print-url now prints the direct http://127.0.0.1:<port>/ form per the dock contract.
2 files changed
+15−2
tools/pup-dashboard+5−1@@ -29,7 +29,11 @@ const BIN = path.join(HOME, '.local', 'bin'); // so a dashboard that omits ADOM_AI_THREAD gets an error back and paints a false "not installed". const ENV = { ...process.env, PATH: `${BIN}:${process.env.PATH || ''}`, ADOM_AI_THREAD: process.env.ADOM_AI_THREAD || 'pup dashboard' }; const STATE = path.join(os.tmpdir(), 'pup-dashboard.state.json');-const PROXY = (port) => `http://localhost:7380/proxy/${port}/`;+// Dock contract (ah build thread, 2026-08-23): print the DIRECT loopback form. The dock's+// readiness gate consumes this URL from a local WSL2 workspace with mirrored networking,+// where the 'localhost' NAME resolves IPv6-first and costs ~800ms; 127.0.0.1 is instant.+// The :7380/proxy/<port>/ hop is unnecessary for a local consumer.+const PROXY = (port) => `http://127.0.0.1:${port}/`; // ── the box's pup bridge, via the ab CLI ──────────────────────────────────────────────────────── // Which desktop are we reporting on? A target-less call FAILS outright when more than one Adom
tools/ship.sh+10−1@@ -36,6 +36,12 @@ d['version'] = v json.dump(d, open(p, 'w'), indent=2) open(p, 'a').write('\n') print(f" src/BRIDGE_VERSION + src/bridge.json -> {v}")+p2 = 'package.json' # the SKILLPACK descriptor — pkg publish reads THIS version. Left unbumped+d2 = json.load(open(p2)) # from 2.0.277-2.0.293, every ship's pkg publish silently no-oped and+d2['version'] = v # `pkg install` 404'd on the empty top version row (pup-bridge#66).+json.dump(d2, open(p2, 'w'), indent=2)+open(p2, 'a').write('\n')+print(f" package.json (skillpack) -> {v}") PY echo "== 2. build the zip (src/ at zip root, no node_modules) =="@@ -83,7 +89,10 @@ adom-wiki repo push "$PAGE" \ if [ "$PUBLISH_PKG" = "1" ]; then echo "== 4b. pkg publish =="- adom-wiki pkg publish --org adom >/dev/null 2>&1 || echo " (pkg publish skipped/failed — non-fatal)"+ # pup-bridge#66: publish VISIBLY and treat failure as failure — the silent || swallow hid 17+ # versions of no-oped publishes (descriptor version never bumped) while release-lockstep created+ # EMPTY pkg version rows, so `pkg install` resolved the top row and 404'd on the missing tarball.+ adom-wiki pkg publish --org adom 2>&1 | tail -3 || { echo "PKG PUBLISH FAILED — the top version row will have no tarball and pkg install will 404 (see pup-bridge#66)"; exit 1; } fi echo "== 5. DIFF-VERIFY (a no-op ship is the classic silent failure) =="