script-ai.js A developer published script-ai.js, a browser bookmarklet that injects a draggable "QX AI V16.2" overlay panel into any web page. The script cycles through a hardcoded list of local and LAN server addresses on port 5050, suggesting it connects to a self-hosted AI backend rather than a cloud service. | | javascript: function { | | | var old=document.getElementById 'qx-ai-root' ; | | | if old old.remove ; | | | var SERVERS= | | | 'http://127.0.0.1:5050', | | | 'http://192.168.0.103:5050', | | | 'http://10.254.60.18:5050', | | | 'http://192.168.0.100:5050', | | | 'http://192.168.0.117:5050', | | | 'http://192.168.0.205:5050' | | | ; | | | var serverIndex=0; | | | var host=document.createElement 'div' ; | | | host.id='qx-ai-root'; | | | host.style.cssText='position:fixed;top:0;left:0;width:0;height:0;z-index:999999999'; | | | document.documentElement.appendChild host ; | | | var css=document.createElement 'style' ; | | | css.textContent= | | | ' qx-ai-root {box-sizing:border-box;font-family:system-ui,sans-serif;user-select:none;-webkit-tap-highlight-color:transparent}'+ | | | '.qx-i{position:fixed;top:70px;right:12px;width:54px;height:54px;border-radius:50%;background: 0f172a;border:2px solid 38bdf8;color: 38bdf8;font-weight:800;font-size:11px;display:flex;align-items:center;justify-content:center;cursor:grab;z-index:999999999;box-shadow:0 0 16px rgba 56,189,248,.45 ;touch-action:none}'+ | | | '.qx-p{position:fixed;top:80px;left:8px;width:min 420px,96vw ;min-height:200px;background:rgba 7,18,36,.98 ;color: e2e8f0;border:1px solid 334155;border-radius:16px;display:none;overflow:hidden;z-index:999999998;box-shadow:0 20px 50px 000;flex-direction:column}'+ | | | '.qx-p.show{display:flex}'+ | | | '.qx-h{background:linear-gradient 90deg, 0ea5e9, 6366f1 ;padding:12px 14px;font-weight:700;font-size:13px;display:flex;justify-content:space-between;align-items:center;cursor:move;touch-action:none}'+ | | | '.qx-b{padding:12px;overflow-y:auto;flex:1;max-height:78vh}'+ | | | '.qx-res{text-align:center;padding:12px;background: 1e293b;border-radius:12px;font-size:14px;font-weight:700;margin-bottom:8px;border:1px solid 334155}'+ | | | '.qx-meta{font-size:11px;color: 94a3b8;line-height:1.45;margin-bottom:8px}'+ | | | '.qx-row{display:flex;gap:6px;flex-wrap:wrap;margin:6px 0}'+ | | | '.qx-row label{font-size:11px;color: 94a3b8;display:flex;flex-direction:column;gap:3px;flex:1;min-width:90px}'+ | | | '.qx-row select,.qx-row input{background: 0f172a;border:1px solid 334155;color: e2e8f0;border-radius:8px;padding:6px 8px;font-size:12px}'+ | | | '.qx-btn{flex:1;padding:10px;border:0;border-radius:10px;font-weight:700;font-size:12px;cursor:pointer}'+ | | | '.qx-scan{background:linear-gradient 90deg, 0ea5e9, 6366f1 ;color: fff}'+ | | | '.qx-stop{background: 7f1d1d;color: fecaca}'+ | | | '.qx-tog{background: 1e293b;color: 94a3b8;border:1px solid 334155}'+ | | | '.qx-tog.on{background: 14532d;color: 86efac;border-color: 22c55e}'+ | | | '.qx-ov{position:fixed;inset:0;background:rgba 15,23,42,.28 ;backdrop-filter:blur 2px ;z-index:999999990;display:none;pointer-events:none}'+ | | | '.qx-ov.on{display:block}'+ | | | '.qx-laser{position:absolute;left:0;width:100%;height:3px;background:linear-gradient 90deg,transparent, 38bdf8, 818cf8,transparent ;box-shadow:0 0 14px 38bdf8;animation:qxScan 1.1s ease-in-out infinite alternate}'+ | | | '@keyframes qxScan{from{top:4%}to{top:96%}}'+ | | | '.qx-rs{position:absolute;right:0;bottom:0;width:18px;height:18px;cursor:nwse-resize;background:linear-gradient 135deg,transparent 50%, 38bdf8 50% ;opacity:.7}'; | | | host.appendChild css ; | | | var overlay=document.createElement 'div' ; | | | overlay.className='qx-ov'; | | | overlay.innerHTML='