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: Phase 3 complete (vault, cards, wiki auto-sign + view flip, annotate, tab + screen recording, highFps lease, down…
4869577
2mo ago
((tx, ty, doClick, lbl, markUri) => {
var id = '__adom_cursor__';
var c = document.getElementById(id);
if (!c) {
c = document.createElement('div');
c.id = id;
c.style.cssText = 'position:fixed;z-index:2147483647;pointer-events:none;transition:left 0.15s,top 0.15s;display:none;';
var g = document.createElement('div'); // pulsing teal glow ring
g.id = '__adom_cursor_ring__';
g.style.cssText = 'position:absolute;top:-16px;left:-16px;width:40px;height:40px;border-radius:50%;background:rgba(0,184,176,0.15);border:2px solid rgba(0,184,176,0.4);animation:adomCurP 1.5s ease-in-out infinite;';
c.appendChild(g);
var a = document.createElement('div'); // the teal Adom arrow (HD's exact SVG)
a.innerHTML = '<svg width="20" height="28" viewBox="0 0 20 28" xmlns="http://www.w3.org/2000/svg"><path d="M1 1L1 22L6.5 16.5L10.5 26L14 24.5L10 15L17 15Z" fill="#00b8b0" stroke="#004d49" stroke-width="1.2" stroke-linejoin="round"/></svg>';
a.style.cssText = 'position:absolute;top:0;left:0;filter:drop-shadow(0 0 6px rgba(0,184,176,0.7));';
c.appendChild(a);
var l = document.createElement('div'); // the intent label (+ Adom mark)
l.id = '__adom_cursor_label__';
l.style.cssText = 'position:absolute;top:32px;left:8px;white-space:nowrap;font-size:11px;color:#00b8b0;background:rgba(13,17,23,0.92);padding:2px 10px;border-radius:4px;border:1px solid rgba(0,184,176,0.6);font-family:monospace;display:flex;align-items:center;gap:6px;';
c.appendChild(l);
(document.body || document.documentElement).appendChild(c);
if (!document.getElementById('__adom_cur_kf__')) {
var s = document.createElement('style'); s.id = '__adom_cur_kf__';
s.textContent = '@keyframes adomCurP{0%{transform:scale(1);opacity:0.7}50%{transform:scale(1.5);opacity:0.2}100%{transform:scale(1);opacity:0.7}}@keyframes adomCurClick{0%{transform:scale(1);opacity:0.85}45%{transform:scale(2.2);opacity:0.05}100%{transform:scale(1);opacity:0.7}}';
document.head.appendChild(s);
}
}
var lab = c.querySelector('#__adom_cursor_label__');
if (lab) {
var txt = (lbl != null ? lbl : 'Adom');
// Adom mark FIRST (so "who is driving" reads before the narration), then the intent text.
lab.innerHTML = '';
if (markUri) {
var im = document.createElement('img');
im.src = markUri;
im.style.cssText = 'width:13px;height:13px;flex:0 0 13px;display:block;';
lab.appendChild(im);
}
var sp = document.createElement('span');
sp.textContent = txt;
lab.appendChild(sp);
var nearRight = (tx != null) && (tx > (window.innerWidth - 250));
if (nearRight) { lab.style.left = 'auto'; lab.style.right = '0px'; lab.style.textAlign = 'right'; }
else { lab.style.left = '8px'; lab.style.right = 'auto'; lab.style.textAlign = 'left'; }
}
if (tx != null && ty != null) { c.style.left = tx + 'px'; c.style.top = ty + 'px'; }
c.style.display = 'block';
if (doClick) {
var ring = c.querySelector('#__adom_cursor_ring__');
if (ring) { ring.style.animation = 'none'; void ring.offsetWidth; ring.style.animation = 'adomCurClick 0.45s ease-out, adomCurP 1.5s ease-in-out infinite 0.45s'; }
}
})(__X__, __Y__, __CLICK__, __LABEL__, __MARK__);