app
Shotlog - Screenshot Log
Public Made by Adomby adom
See the shots your AI never showed you, and know it actually SAW them. adom-shotlog streams every screenshot the AI gathers into a live gallery (webview/pup/browser/phone), reports whether a human is really watching and on which surface, and ingests Adom Bridge child-window arrays via --meta.
← Commit history
Publish 0.13.1
7 files changed
+21−10
Cargo.lock+1−1@@ -10,7 +10,7 @@ checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" [[package]] name = "adom-shotlog"-version = "0.13.0"+version = "0.13.1" dependencies = [ "axum", "base64",
Cargo.toml+1−1@@ -1,6 +1,6 @@ [package] name = "adom-shotlog"-version = "0.13.0"+version = "0.13.1" edition = "2021" description = "Screenshot log viewer and CLI for Adom" license = "MIT"
VERSION+1−1@@ -1 +1 @@-0.13.0+0.13.1
bin/adom-shotlog⋯ 1 unchanged line ⋯
package.json+1−1@@ -1,6 +1,6 @@ { "slug": "adom-shotlog",- "version": "0.13.0",+ "version": "0.13.1", "type": "app", "title": "Adom Shotlog", "description": "See the shots your AI never showed you, and know it actually SAW them. adom-shotlog streams every screenshot the AI gathers into a live gallery (webview/pup/browser/phone), reports whether a human is really watching and on which surface, and ingests Adom Desktop child-window arrays via --meta.",
page.json+1−1@@ -1,6 +1,6 @@ { "slug": "adom-shotlog",- "version": "0.13.0",+ "version": "0.13.1", "type": "app", "title": "Adom Shotlog", "description": "See the shots your AI never showed you, and know it actually SAW them. adom-shotlog streams every screenshot the AI gathers into a live gallery (webview/pup/browser/phone), reports whether a human is really watching and on which surface, and ingests Adom Desktop child-window arrays via --meta.",
src/html/index.html+16−5@@ -94,6 +94,7 @@ header { .subject-meta { display: none; } .actions { gap: 5px; } #canvasBtn span { display: none; } /* actions go icon-only when tight (canonical: icon-buttons) */+ #canvasBtn.busy span { display: inline; } /* progress text ALWAYS visible while switching */ } /* Header action buttons + LED (adom-app-header). These were the raw-<button> ugliness: clean pills, subtle until hover, icon+label capable. */@@ -108,6 +109,10 @@ header { .hdr-btn:disabled { opacity: .55; cursor: default; transform: none; } .hdr-btn svg { width: 13px; height: 13px; flex-shrink: 0; } .hdr-btn.icon-only { padding: 0; width: 26px; justify-content: center; }+/* Busy spinner for in-flight actions (canvas switch). */+@keyframes hdr-spin { to { transform: rotate(360deg); } }+.hdr-btn.busy svg.spin { animation: hdr-spin .8s linear infinite; }+.hdr-btn.busy { color: var(--accent-bright); border-color: rgba(0,184,176,.55); } /* Canvas toggle: the primary affordance, tinted with the accent. */ .hdr-btn.accent { color: var(--accent); border-color: rgba(0,184,176,.35); } .hdr-btn.accent:hover { background: rgba(0,184,176,.12); color: var(--accent-bright); border-color: rgba(0,184,176,.6); }@@ -611,8 +616,9 @@ header { : '<div class="tt-title">Show in webview</div>'+ '<div class="tt-p">The slim panel docked in Hydrogen. Closes this pup tab.</div>'+ '<div class="tt-prompt"><span class="lbl">say to your AI</span>show me shotlog in webview</div>';- const busy=(t)=>{ btn.disabled=true; btn.innerHTML='<span>'+esc(t)+'</span>'; };- const restore=()=>{ render(); btn.disabled=false; };+ const SPINNER='<svg class="spin" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round"><path d="M21 12a9 9 0 1 1-6.2-8.56"/></svg>';+ const busy=(t)=>{ btn.disabled=true; btn.classList.add('busy'); btn.innerHTML=SPINNER+'<span>'+esc(t)+'</span>'; };+ const restore=()=>{ btn.classList.remove('busy'); render(); btn.disabled=false; }; const dest = toPup ? 'pup' : 'webview'; const src = toPup ? 'webview' : 'pup'; @@ -631,11 +637,16 @@ header { btn.disabled=true; let opened=false; try{- // Stage 0: availability (pup needs Adom Desktop).+ showToast(toPup?'Opening the pup window…':'Opening the webview panel…', 3500);+ // Stage 0: availability (pup needs Adom Desktop). `?simulate=no-pup` in+ // the viewer URL demos the not-installed path without touching anything. if(toPup){ busy('checking pup…');- const chk=await fetch('api/canvas-check').then(r=>r.json());- if(!chk.available){ showToast(chk.hint||'pup is not available on this machine yet.', 9000); restore(); return; }+ const sim=new URLSearchParams(location.search).get('simulate');+ const chk = sim==='no-pup'+ ? {available:false, hint:'(simulated) pup needs Adom Desktop. Install it on your computer from wiki.adom.inc/adom/adom-desktop - the pup bridge is a default bridge that auto-installs right after it.'}+ : await fetch('api/canvas-check').then(r=>r.json());+ if(!chk.available){ showToast(chk.hint||'pup is not available on this machine yet.', 12000); restore(); return; } } const baseline=await surfaceCount(); if(baseline<0){ showToast('cannot reach the shotlog broker - switch aborted, nothing changed.', 7000); restore(); return; }