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.
master
John Lauer
rust/: the tree 2.0.594 is built from, pushed whole (pup-bridge#117); ship.sh pushes it on every release from now on
ccda43b
1mo ago
(async () => {
try { if (document.readyState !== 'complete') { await Promise.race([new Promise((r) => window.addEventListener('load', r, { once: true })), new Promise((r) => setTimeout(r, 1500))]); } } catch (e) {}
const t = (document.body ? (document.body.innerText || '') : '').trim();
// Chrome's net-error interstitial (ERR_HTTP2_PROTOCOL_ERROR, ERR_CONNECTION_*, a bot-wall RST, etc.).
// It renders as its own document with #main-frame-error and a hidden .error-code carrying the code.
let errPage = false, netError = '';
try {
const ec = document.querySelector('.error-code');
netError = ec ? (ec.textContent || '').trim() : '';
const cls = (document.documentElement && document.documentElement.className) || '';
errPage = !!netError || !!document.querySelector('#main-frame-error') || /(^|\s)neterror(\s|$)/.test(cls) || /^chrome-error:/i.test(location.href);
} catch (e) {}
return {
title: document.title || '', bodyChars: t.length, head: t.slice(0, 400),
elements: document.body ? document.body.querySelectorAll('*').length : 0,
styleSheets: document.styleSheets ? document.styleSheets.length : 0,
errPage, netError,
brokenImgs: (document.readyState === 'complete' && document.images) ? Array.from(document.images).filter((i) => { const src = i.getAttribute('src'); return !!(src && src.trim()) && i.complete && i.naturalWidth === 0; }).length : null,
};
})()