3.4 KiB
AGENTS.md
Operational guide for AI agents working on this repository.
Remote machine
The plugin runs on jozz (vini@jozz). SSH access is pre-configured; no password needed.
ssh vini@jozz "some command"
Deploy cycle
After editing any file under plugin/, commit, push, then run on jozz:
git push && ssh vini@jozz "bash -s" <<'EOF'
git -C "$HOME/skeledance" pull
cp -r "$HOME/skeledance/plugin/." "$HOME/.local/share/plasma/wallpapers/com.vini.dancingcharacter/"
export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus
qdbus6 org.kde.plasmashell /PlasmaShell org.kde.PlasmaShell.refreshCurrentShell 2>&1
echo "done"
EOF
The qdbus6 call hot-reloads QML. For HTML/CSS/JS changes the page reloads automatically. If visuals look wrong after deploy, wait a few seconds — WebEngine takes a moment to reinitialize.
Services on jozz
music-light
Reads the current track via playerctl, extracts the dominant album color, and exposes it over HTTP.
# Status
ssh vini@jozz "systemctl --user status music-light.service"
# Restart (needed after updating luz-musica.py)
ssh vini@jozz "systemctl --user restart music-light.service"
# Logs
ssh vini@jozz "journalctl --user -u music-light.service -n 30 --no-pager"
Endpoints (all on 127.0.0.1:8765):
| Path | Description |
|---|---|
GET /current |
Returns {"art_url": "...", "rgb": [r, g, b]} for the playing track |
GET /art?t= |
Proxies the album art image bytes (use query string for cache-busting) |
CORS: Access-Control-Allow-Origin: * is set on all responses. Required because dancer.html is loaded from file://.
Deploying changes to luz-musica.py: scp the file, then restart the service. The repo at ~/music-light on jozz may be behind; always scp directly.
scp /home/ltadeu6/Projetos/Codigo/music-light/luz-musica.py vini@jozz:~/music-light/luz-musica.py
ssh vini@jozz "systemctl --user restart music-light.service"
cava-server
Started automatically by the wallpaper via cava-start.sh on load. Reads CAVA audio bars from stdin and streams them as SSE on 127.0.0.1:5555.
# Check if running
ssh vini@jozz "pgrep -a python | grep cava"
# Restart manually if bars stop animating
ssh vini@jozz "bash ~/.local/share/plasma/wallpapers/com.vini.dancingcharacter/contents/ui/cava-start.sh &"
Debugging JS errors
Add a onJavaScriptConsoleMessage handler to main.qml to capture JS errors to a file:
onJavaScriptConsoleMessage: function(level, message, lineNumber, sourceID) {
var logDs = Qt.createQmlObject('import org.kde.plasma.plasma5support as P5S; P5S.DataSource { engine: "executable" }', webView)
logDs.connectSource("echo '[skeledance] " + message.replace(/'/g, '') + " :" + lineNumber + "' >> /tmp/skeledance_console.log")
}
Then read on jozz: ssh vini@jozz "cat /tmp/skeledance_console.log".
Remove the handler after debugging — it creates a new QmlObject per message and causes performance issues.
Known WebEngine constraints
fetch()tohttp://works fromfile://pages whenlocalContentCanAccessRemoteUrls: trueis set in QML.<img src="http://...">also works withlocalContentCanAccessRemoteUrls: true, but the server must includeAccess-Control-Allow-Origin: *.CSS background-image: url('http://...')is blocked — use<img>orfetch()+blob URLinstead.img.srcwithfile:///paths works whenlocalContentCanAccessFileUrls: trueis set.