# Validate llama-swap config YAML
python3 -c "import yaml; yaml.safe_load(open('[...redacted 633 bytes]


sleep 3 && curl -s :9292/v1/models | python3 -c "
import sys,json
try:
    d=jso[...redacted 221 bytes]


sudo journalctl -u llama-swap --no-pager -n 30 2>/dev/null


curl -s :9292/v1/models | python3 -c "
import sys,json
d=json.load(sys.stdin)
pr[...redacted 141 bytes]


curl -sv :9292/v1/models 2>&1 | head -30


# Verify Qwythos context in llama-swap
grep -A2 'qwythos' /home/rurouni/.config/[...redacted 241 bytes]


grep -B1 -A5 'qwythos-9b-mtp-q6:' /home/rurouni/.config/llama-swap/config.yaml |[...redacted 11 bytes]


python3 << 'EOF'
import yaml, re
with open('/home/rurouni/.config/llama-swap/con[...redacted 361 bytes]


python3 << 'EOF'
import yaml, re
with open('/home/rurouni/.config/llama-swap/con[...redacted 348 bytes]


python3 << 'EOF'
import yaml, re

with open('/home/rurouni/.config/llama-swap/co[...redacted 660 bytes]


sudo systemctl restart llama-swap.service && sleep 3 && curl -s http://127.0.0.1[...redacted 581 bytes]


python3 << 'EOF'
import os, sys

errors = []

# AGENTS.md — verify fleet secti[...redacted 1006 bytes]


hf download deepreinforce-ai/Ornith-1.0-9B-GGUF --include "ornith-1.0-9b-Q5_K_M.[...redacted 59 bytes]


python3 << 'EOF'
import yaml, re

with open('/home/rurouni/.config/llama-swap/co[...redacted 854 bytes]


python3 << 'EOF'
import yaml

path = '/home/rurouni/.hermes/config.yaml'
with op[...redacted 581 bytes]


sudo systemctl restart llama-swap.service && sleep 3 && curl -s http://127.0.0.1[...redacted 155 bytes]


# Delete old Q6 file since Q5 replaces it
rm -v /models/downloads/Ornith-1.0-9B-[...redacted 745 bytes]


# Quick test - is llama-swap responding?
curl -s http://127.0.0.1:9292/v1/models[...redacted 103 bytes]


# Test Qwythos first (should be fastest, easiest to warm up)
echo "=== Qwythos-9[...redacted 826 bytes]


python3 << 'EOF'
import yaml, re

with open('/home/rurouni/.config/llama-swap/co[...redacted 1098 bytes]


rm -f /tmp/bench-fleet-v2.py /tmp/bench-fleet-jun30.py


python3 << 'EOF'
import yaml, re

with open('/home/rurouni/.config/llama-swap/co[...redacted 1848 bytes]


python3 << 'EOF'
import yaml

# Update Hermes config: ornith-9b context 65536→[...redacted 642 bytes]


sleep 3 && curl -s http://127.0.0.1:9292/v1/models | python3 -c "
import sys,jso[...redacted 911 bytes]


python3 << 'EOF'
import yaml, re

with open('/home/rurouni/.config/llama-swap/co[...redacted 807 bytes]


# 1. Hermes config - check models + context
echo "=== HERMES CONFIG ==="
python3[...redacted 1155 bytes]


# 2. OpenCode config
echo "=== OPENCODE CONFIG ==="
for f in ~/.config/opencode/[...redacted 1362 bytes]


python3 << 'EOF'
import json, os

path = os.path.expanduser("~/.config/opencode/[...redacted 1353 bytes]


# Check Open WebUI
docker ps --filter name=open-webui --format "{{.Names}} {{.St[...redacted 175 bytes]


sleep 5 && docker ps --filter name=open-webui --format "{{.Names}} {{.Status}}" [...redacted 11 bytes]


sleep 10 && docker exec open-webui python3 -c "
import sqlite3, json
conn = sqli[...redacted 638 bytes]


sleep 15 && docker exec open-webui python3 -c "
import sqlite3, json
conn = sqli[...redacted 601 bytes]


docker ps -a --filter name=open-webui --format "{{.Names}} {{.Status}}" 2>/dev/n[...redacted 84 bytes]


# Open WebUI is crashing with a SQLAlchemy datetime parsing error - not related [...redacted 131 bytes]


sleep 15 && docker ps --filter name=open-webui --format "{{.Names}} {{.Status}}"[...redacted 994 bytes]


docker exec open-webui python3 -c "
import sqlite3, json

conn = sqlite3.connect[...redacted 2001 bytes]


docker exec open-webui python3 -c "
import sqlite3, json
conn = sqlite3.connect([...redacted 452 bytes]


# Check if OWU was already crashing before we touched it
journalctl -u docker --[...redacted 722 bytes]


docker inspect open-webui --format '{{range .Mounts}}{{.Source}} → {{.Destinat[...redacted 33 bytes]


sqlite3 /home/rurouni/openwebui-data/webui.db "SELECT base_model_id FROM model O[...redacted 169 bytes]


python3 << 'EOF'
import sqlite3, json

db = "/home/rurouni/openwebui-data/webui.[...redacted 481 bytes]


python3 << 'EOF'
import sqlite3, json

db = "/home/rurouni/openwebui-data/webui.[...redacted 636 bytes]


docker start open-webui 2>/dev/null
sleep 8
docker ps --filter name=open-webui -[...redacted 32 bytes]


sleep 20 && docker ps --filter name=open-webui --format "{{.Names}} {{.Status}}"


docker logs open-webui --tail 10 2>&1 | grep -i "error\|traceback\|exception"


docker logs open-webui --tail 30 2>&1 | grep -B5 "fromisoformat"


python3 << 'EOF'
import sqlite3

db = "/home/rurouni/openwebui-data/webui.db"
co[...redacted 887 bytes]


python3 << 'EOF'
import sqlite3, json, datetime

db = "/home/rurouni/openwebui-d[...redacted 1118 bytes]


docker start open-webui 2>/dev/null
sleep 15
docker ps --filter name=open-webui [...redacted 33 bytes]


sleep 15 && docker ps --filter name=open-webui --format "{{.Names}} {{.Status}}"[...redacted 54 bytes]


docker exec open-webui python3 -c "
import sqlite3, json
conn = sqlite3.connect([...redacted 551 bytes]


python3 /data/tmp/hermes-verify-agentsmd.py && rm /data/tmp/hermes-verify-agents[...redacted 5 bytes]


# === HERMES AUDIT ===
echo "=== Hermes home disk ==="
du -sh ~/.hermes/
echo ""[...redacted 547 bytes]


# === Breakdown of 8.2 GB ===
du -sh ~/.hermes/*/ 2>/dev/null | sort -rh
echo "-[...redacted 753 bytes]


# Check what's in config/ and lsp/
du -sh ~/.hermes/config/*/ 2>/dev/null | sort[...redacted 529 bytes]


# Check backup dirs
echo "=== config/backups/ ==="
ls -lh ~/.hermes/config/backu[...redacted 358 bytes]


# Check backups subdir
du -sh ~/.hermes/backups/*/
echo ""
# Skills - check for [...redacted 254 bytes]


# === HERMES CLEANUP ===

echo "1) Removing stale state.db backup (161 MB)..."
r[...redacted 927 bytes]


# === DEBIAN SYSTEM CLEANUP ===

echo "1) APT autoremove..."
sudo apt autoremove[...redacted 600 bytes]


# === HERMES OPTIMIZATIONS ===

echo "1) Compress state snapshot..."
du -sh ~/.h[...redacted 1368 bytes]


# Compress the state DB
echo "=== Compressing state snapshot ==="
gzip -v ~/.her[...redacted 691 bytes]


# === FINAL OPTIMIZATION SWEEP ===

echo "1) Session DB search + vacuum..."
find[...redacted 429 bytes]


# Vacuum the big DBs
echo "=== Hermes state.db ==="
du -sh ~/.hermes/state.db
sq[...redacted 830 bytes]


# Compress old rotated logs
find ~/.hermes/logs -name "*.log.*" -size +100k | wh[...redacted 415 bytes]


strix --version 2>&1 || pipx run strix --version 2>&1


curl -s http://192.168.1.50:9292/v1/models 2>&1 | python3 -m json.tool 2>/dev/nu[...redacted 53 bytes]


chmod +x ~/.strix/strix-local-ornith ~/.strix/strix-local-qwythos && ls -la ~/.s[...redacted 17 bytes]


strix-local-qwythos -t https://mariasmixers.com --instruction "Look for security[...redacted 176 bytes]


~/.strix/strix-local-qwythos -t https://mariasmixers.com --instruction "Look for[...redacted 185 bytes]


grep -r "caido\|proxy" ~/.strix/cli-config.json 2>&1; cat ~/.strix/config.yaml 2[...redacted 11 bytes]


find ~/.strix -type f -name "*.yaml" -o -name "*.yml" -o -name "*.toml" -o -name[...redacted 32 bytes]


find ~/.config/strix -type f 2>/dev/null; find /etc/strix -type f 2>/dev/null; s[...redacted 57 bytes]


~/.strix/strix-local-qwythos -t https://mariasmixers.com --instruction "Look for[...redacted 189 bytes]


ls -la ~/strix_runs/ 2>/dev/null; find ~ -type d -name "mariasmixers*" 2>/dev/nu[...redacted 12 bytes]


ls -la ~/strix_runs/mariasmixers-com_8e6f/ 2>/dev/null || ls -la ~/strix_runs/ma[...redacted 68 bytes]


cd ~/strix_runs/mariasmixers-com_8e6f && python3 -c "
import json
with open('run[...redacted 210 bytes]


tail -100 ~/strix_runs/mariasmixers-com_8e6f/strix.log 2>&1


python3 -c "
import json
with open('/home/rurouni/strix_runs/mariasmixers-com_8e[...redacted 586 bytes]


ls -la /home/rurouni/strix_runs/mariasmixers-com_8e6f/.state/ 2>/dev/null; find [...redacted 66 bytes]


python3 -c "
import json
with open('/home/rurouni/strix_runs/mariasmixers-com_8e[...redacted 479 bytes]


curl -s https://mariasmixers.com -o /dev/null -w "Status: %{http_code}\nSize: %{[...redacted 72 bytes]


# Check for common security headers, admin panels, etc.
echo "=== Path discovery[...redacted 642 bytes]


# Check WordPress version and plugin exposure
echo "=== WP Version ==="
curl -s [...redacted 1427 bytes]


# Get WP version and theme info from frontend
echo "=== Generator tag ==="
curl [...redacted 898 bytes]


# Check WP version from readme.html
echo "=== WP Readme ==="
curl -s --max-time [...redacted 1481 bytes]


# Check orderby injection vulnerability (classic WP SQLi)
echo "=== Orderby inje[...redacted 1147 bytes]


# Check if site-health tests are accessible (can leak PHP paths, etc.)
echo "===[...redacted 1111 bytes]


# Check MetaSlider slideshow endpoint
echo "=== MetaSlider slideshow all ==="
cu[...redacted 692 bytes]


~/.strix/strix-local-ornith -t https://mariasmixers.com --instruction "Look for [...redacted 184 bytes]


ls ~/strix_runs/mariasmixers-com*/ 2>/dev/null | tail -1


# List scan output dirs by modification time
ls -lt ~/strix_runs/ 2>/dev/null | [...redacted 8 bytes]


python3 -c "
import json
with open('/home/rurouni/strix_runs/mariasmixers-com_cb[...redacted 524 bytes]


python3 -c "
import json
with open('/home/rurouni/strix_runs/mariasmixers-com_cb[...redacted 204 bytes]


tail -100 /home/rurouni/strix_runs/mariasmixers-com_cb3d/strix.log 2>&1 | grep -[...redacted 35 bytes]


# Check for any INFO/ERROR/WARNING lines in the full log
grep -E "INFO|ERROR|WAR[...redacted 139 bytes]


# Check for any report or findings files
find /home/rurouni/strix_runs/mariasmix[...redacted 31 bytes]


docker ps -a --filter "name=strix" --format "table {{.Names}}\t{{.Status}}\t{{.E[...redacted 42 bytes]


docker logs 51a53e195c1f 2>&1 | tail -30


# Check for OOM kills
docker info 2>/dev/null | grep -i oom
# Also check system [...redacted 188 bytes]


# Check for newer strix-sandbox images
docker images ghcr.io/usestrix/strix-sand[...redacted 77 bytes]


# Check Docker daemon config for memory limits
cat /etc/docker/daemon.json 2>&1
[...redacted 365 bytes]


# Check kernel OOM killer logs
dmesg 2>&1 | grep -iE "oom|kill|out of memory" | [...redacted 549 bytes]


# Test the sandbox image can start and stay alive
docker run -d --rm --name stri[...redacted 239 bytes]


# Run the sandbox for 5 minutes to check stability
docker run -d --rm --name str[...redacted 416 bytes]


# Run again with immediate dmesg check after crash
docker run -d --rm --name str[...redacted 473 bytes]


# Run without --rm to get exit status
docker run -d --name strix-exit-test ghcr.[...redacted 491 bytes]


# Verify - run the sandbox with no-new-privileges disabled
docker run -d --name [...redacted 307 bytes]


~/.strix/strix-local-ornith -t https://mariasmixers.com --instruction "Look for [...redacted 184 bytes]


sleep 120 && docker ps --filter "name=strix" --format "table {{.Names}}\t{{.Stat[...redacted 26 bytes]


docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Status}}\t{{.Names}}" 2>&1 | h[...redacted 7 bytes]


ls -lt ~/strix_runs/ 2>/dev/null | head -5


python3 -c "
import json
with open('/home/rurouni/strix_runs/mariasmixers-com_fc[...redacted 887 bytes]


python3 -c "
import json
with open('/home/rurouni/strix_runs/mariasmixers-com_fc[...redacted 294 bytes]


mkdir -p ~/apk-analysis/debridstream && cd ~/apk-analysis/debridstream && curl -[...redacted 141 bytes]


# Check if jadx is available, install if not
which jadx 2>/dev/null || (
  cd /t[...redacted 177 bytes]


cd ~/apk-analysis/debridstream && mkdir -p jadx-out && jadx --show-bad-code -d j[...redacted 40 bytes]


cd ~/apk-analysis/debridstream && echo "=== Structure ===" && du -sh jadx-out/ &[...redacted 490 bytes]


cd ~/apk-analysis/debridstream && python3 -c "
import zipfile, xml.etree.Element[...redacted 500 bytes]


# Use aapt if available, or just grep strings from the binary manifest
cd ~/apk-[...redacted 157 bytes]


cd ~/apk-analysis/debridstream && strings debridstream.apk | grep -iE "^com\.[a-[...redacted 106 bytes]


# Install aapt if needed, then parse the manifest
which aapt2 2>/dev/null || (ap[...redacted 407 bytes]


# Use Python to parse binary AXML directly for key info
python3 << 'EOF'
import [...redacted 587 bytes]


python3 << 'PYEOF'
import struct, zipfile, re, sys

with zipfile.ZipFile('/home/[...redacted 1097 bytes]


cd ~/apk-analysis/debridstream && find jadx-out/sources -path "*com/debridstream[...redacted 215 bytes]


~/.strix/strix-local-ornith -t ~/apk-analysis/debridstream/jadx-out/sources --in[...redacted 593 bytes]


# Try downloading older versions
echo "=== v3.2.3 ==="
curl -sIL "https://github[...redacted 470 bytes]


cd ~/apk-analysis/debridstream && curl -sL "https://github.com/codebutter-bit/sc[...redacted 239 bytes]


cd ~/apk-analysis/debridstream && echo "=== v3.2.3 first-party packages ===" && [...redacted 313 bytes]


# Try various APK filenames for v2.0.0
for name in "app-release.apk" "app-firetv[...redacted 221 bytes]


# Use GitHub API to list all releases with their assets
curl -s "https://api.git[...redacted 364 bytes]


cd ~/apk-analysis/debridstream && echo "=== Downloading v2.0.0 ===" && curl -sL [...redacted 139 bytes]


cd ~/apk-analysis/debridstream && mkdir -p jadx-out-v2.0.0 && jadx --show-bad-co[...redacted 60 bytes]


cd ~/apk-analysis/debridstream && mkdir -p jadx-out-v2 && jadx --show-bad-code -[...redacted 52 bytes]


cd ~/apk-analysis/debridstream && file debridstream-v2.0.0.apk && echo "---" && [...redacted 114 bytes]


cd ~/apk-analysis/debridstream && echo "=== v2.0.0 top-level packages ===" && fi[...redacted 630 bytes]


# Check jadx deobfuscation options
jadx --help 2>&1 | grep -i deob


# Try jadx with deobfuscation on v3.4.1
cd ~/apk-analysis/debridstream && mkdir [...redacted 128 bytes]


echo "=== Jadx deobf top-level ===" && ls ~/apk-analysis/debridstream/jadx-out-d[...redacted 588 bytes]


ls ~/apk-analysis/debridstream/jadx-out-deobf/sources/com/ 2>&1 && echo "---" &&[...redacted 384 bytes]


cd ~/apk-analysis/debridstream
echo "=== Debrid provider URLs ==="
grep -rohP '[...redacted 849 bytes]


cd ~/apk-analysis/debridstream
# Search across ALL decompiled source for critica[...redacted 871 bytes]


~/.strix/strix-local-ornith -t ~/apk-analysis/debridstream/jadx-out/sources --in[...redacted 554 bytes]


cd ~/apk-analysis/debridstream

echo "=== Custom domain endpoints ==="
grep -ro[...redacted 1277 bytes]


cd ~/apk-analysis/debridstream

echo "=== RevenueCat identifiable code ==="
gre[...redacted 1104 bytes]


cd ~/apk-analysis/debridstream

echo "=== RevenueCat method signatures in obfus[...redacted 612 bytes]


# Check if smali/baksmali tools are available
which baksmali 2>/dev/null || find[...redacted 164 bytes]


cd ~/apk-analysis/debridstream

# Extract DEX files
unzip -o debridstream.apk "c[...redacted 63 bytes]


cd ~/apk-analysis/debridstream/dex_out
# Find which DEX has the class C0741y0
fo[...redacted 359 bytes]


cd ~/apk-analysis/debridstream
mkdir -p smali_out
# Disassemble all DEX files
ja[...redacted 319 bytes]


# Download fresh baksmali/smali
cd /tmp
curl -sL "https://bitbucket.org/JesusFre[...redacted 201 bytes]


cd ~/apk-analysis/debridstream
rm -rf smali_out
mkdir -p smali_out

# Disassembl[...redacted 453 bytes]


cd ~/apk-analysis/debridstream
# Search for the entitlement check in SMALI
echo [...redacted 436 bytes]


cd ~/apk-analysis/debridstream

# Re-assemble patched SMALI to DEX
echo "=== Rea[...redacted 1453 bytes]


cd ~/apk-analysis/debridstream

# Generate a keystore for signing
echo "=== Gene[...redacted 598 bytes]


cd ~/apk-analysis/debridstream

# Align if available
which zipalign 2>/dev/null [...redacted 422 bytes]


cd ~/apk-analysis/debridstream

echo "=== Search for account.debridstream.com i[...redacted 1130 bytes]


cd ~/apk-analysis/debridstream

echo "=== Firestore collections ==="
grep -rn '[...redacted 962 bytes]


# Get the Firebase project details from the APK
echo "=== Firebase API key ==="
[...redacted 780 bytes]


# Try probing Firebase Firestore REST API
echo "=== Try Firestore REST (no auth)[...redacted 754 bytes]


# Check GitHub repos for lawdev-cmd
echo "=== lawdev-cmd repos ==="
curl -s "htt[...redacted 226 bytes]


cd ~/apk-analysis/debridstream
curl -sL "https://github.com/lawdev-cmd/build/arc[...redacted 115 bytes]


# Install Androidmeda
cd /tmp
git clone --depth 1 https://github.com/In3tinct/An[...redacted 91 bytes]


cd /tmp/Androidmeda
python3 -m venv .venv
source .venv/bin/activate
pip3 install[...redacted 115 bytes]


cd /tmp/Androidmeda
source .venv/bin/activate

# Check the script's actual usage[...redacted 421 bytes]


cd /tmp/Androidmeda
source .venv/bin/activate

# Use OpenAI provider pointing at[...redacted 678 bytes]


cd /tmp/Androidmeda
source .venv/bin/activate

export API_KEY="sk-no-key-require[...redacted 266 bytes]


ls -la /tmp/androidmeda-out/
echo ""
echo "=== Deobfuscated files ==="
find /tmp[...redacted 312 bytes]


cd ~/apk-analysis/debridstream

# Identify the obfuscated packages (single-lette[...redacted 490 bytes]


cd ~/apk-analysis/debridstream
echo "V2 package: $(find jadx-out/sources/V2 -nam[...redacted 261 bytes]


cd /tmp/Androidmeda && source .venv/bin/activate && export API_KEY="sk-n...expor[...redacted 271 bytes]


cd /tmp/Androidmeda && source .venv/bin/activate && export API_KEY=dummy API_KEY[...redacted 276 bytes]


sleep 30 && ls -la /tmp/androidmeda-v2-full/ 2>/dev/null && echo "---" && cat /t[...redacted 87 bytes]


ls /tmp/androidmeda-v2-full/ 2>/dev/null && echo "---" && find /tmp/androidmeda-[...redacted 164 bytes]


cd /tmp/Androidmeda && source .venv/bin/activate && export API_KEY=*** API_KEY=*[...redacted 299 bytes]


cd /tmp/Androidmeda && source .venv/bin/activate

# Test OpenAI client connects [...redacted 247 bytes]


cd /tmp/Androidmeda && source .venv/bin/activate
export OPENAI_BASE_URL="http://[...redacted 496 bytes]


ls -la /tmp/androidmeda-out2/ 2>/dev/null && cat /tmp/androidmeda-out2/vuln_repo[...redacted 450 bytes]


cd /tmp/Androidmeda && source .venv/bin/activate
export OPENAI_BASE_URL="http://[...redacted 589 bytes]


cd /tmp/Androidmeda && source .venv/bin/activate

# Read the deobfuscation prom[...redacted 626 bytes]


cd /tmp/Androidmeda && source .venv/bin/activate
export OPENAI_BASE_URL="http://[...redacted 564 bytes]


# Quick check if qwythos is responsive
python3 -c "
import openai, os
os.environ[...redacted 280 bytes]


pwd && ls -la ~/apk-analysis/debridstream/debridstream-patched.apk


python3 -c "
import openai, os
os.environ['OPENAI_BASE_URL'] = 'http://127.0.0.1[...redacted 237 bytes]


# Check llama-swap health and what models are loaded
curl -s --max-time 5 http:/[...redacted 153 bytes]


python3 -c "
import openai, os, time
os.environ['OPENAI_BASE_URL'] = 'http://127[...redacted 305 bytes]


python3 -c "
import openai, os, time
os.environ['OPENAI_BASE_URL'] = 'http://127[...redacted 731 bytes]


cd /tmp/Androidmeda && source .venv/bin/activate && export OPENAI_BASE_URL="http[...redacted 314 bytes]


sleep 90 && echo "=== Process status ===" && wc -l /tmp/androidmeda-v2-out/vuln_[...redacted 388 bytes]


wc -l /tmp/androidmeda-v2-out/vuln_report 2>/dev/null && echo "Files: $(find /tm[...redacted 290 bytes]


sleep 120 && echo "=== Vuln report ===" && wc -l /tmp/androidmeda-v2-out/vuln_re[...redacted 433 bytes]


# Check if LLM is being used
curl -s --max-time 5 http://192.168.1.50:9292/metri[...redacted 306 bytes]


# Check the llama-server process activity
ps aux | grep "llama-server" | grep -v[...redacted 269 bytes]


sleep 180 && echo "=== Files output so far ===" && find /tmp/androidmeda-v2-out [...redacted 157 bytes]


find /tmp/androidmeda-v2-out -type f 2>/dev/null | head -20 && echo "---" && wc [...redacted 74 bytes]


# Check if the LLM is being utilized
ps aux | grep "llama-server" | grep -v grep[...redacted 278 bytes]


ls -la /tmp/androidmeda-v2-out/ 2>/dev/null && echo "---" && find /tmp/androidme[...redacted 348 bytes]


mkdir -p ~/debridstream-analysis/{apk,decompiled-source,patched-apk,smali-patch,[...redacted 2295 bytes]


# Compress everything
cd ~
tar czf debridstream-analysis.tar.gz debridstream-ana[...redacted 787 bytes]


rm ~/debridstream-analysis/apk/debridstream-v2.0.0.apk ~/debridstream-analysis/a[...redacted 161 bytes]


mkdir -p ~/apk-analysis/tivimate && cd ~/apk-analysis/tivimate && curl -sL "http[...redacted 81 bytes]


cd ~/apk-analysis/tivimate && mkdir -p jadx-out && jadx --show-bad-code -d jadx-[...redacted 32 bytes]


cd ~/apk-analysis/tivimate
echo "=== Top-level packages ==="
find jadx-out/sourc[...redacted 482 bytes]


cd ~/apk-analysis/tivimate

# Find which DEX has the Application class
for dex i[...redacted 424 bytes]


cd ~/apk-analysis/tivimate
mkdir -p working
unzip -o tivimate.apk "classes*.dex"[...redacted 304 bytes]


cd /tmp && curl -sL "https://bitbucket.org/JesusFreke/smali/downloads/baksmali-2[...redacted 218 bytes]


cd ~/apk-analysis/tivimate
echo "=== Files in classes.dex ==="
ls working/smali/[...redacted 240 bytes]


cd ~/apk-analysis/tivimate
grep -n "method.* b\|method.*private" working/smali/a[...redacted 59 bytes]


cd ~/apk-analysis/tivimate
# Get the exact line numbers of the b() method
grep -[...redacted 630 bytes]


cd ~/apk-analysis/tivimate

# Replace the b() method with no-op
sed -i '588,741c[...redacted 260 bytes]


cd ~/apk-analysis/tivimate

# Reassemble
java -jar /tmp/baksmali.jar a working/s[...redacted 234 bytes]


# Download smali
cd /tmp && curl -sL "https://bitbucket.org/JesusFreke/smali/dow[...redacted 195 bytes]


cd ~/apk-analysis/tivimate/working
# Check strings in binary manifest for extra[...redacted 884 bytes]


cd ~/apk-analysis/tivimate/working
python3 -c "
import struct

with open('Androi[...redacted 4370 bytes]


cd ~/apk-analysis/tivimate

# Repack APK with patched DEX
python3 << 'PYEOF'
imp[...redacted 1591 bytes]


which frida 2>/dev/null && frida --version 2>&1 || echo "frida not installed"
ec[...redacted 85 bytes]


cd ~/apk-analysis/tivimate

# Find the actual raw file URLs from the GitHub repo[...redacted 400 bytes]


cd ~/apk-analysis/tivimate
curl -sL "https://raw.githubusercontent.com/xiaiohuan[...redacted 325 bytes]


echo "=== v2.8 cracked top-level packages ==="
find ~/apk-analysis/tivimate/jadx[...redacted 846 bytes]


mkdir -p ~/addon-audit && cd ~/addon-audit && echo "Cloning Seren..." && git clo[...redacted 746 bytes]


cd ~/addon-audit && echo "=== Trying FenLightPlus fork ===" && git clone https:/[...redacted 825 bytes]


cd ~/addon-audit && echo "=== FenLightPlus listing ===" && ls -la fenlightplus/ [...redacted 568 bytes]


find ~/addon-audit/fenlightplus/plugin.video.fenlight/resources/lib -type f -nam[...redacted 27 bytes]


find ~/addon-audit/seren/resources/lib -type f -name '*.py' | sort 2>/dev/null


find ~/addon-audit/umbrella-repo/piers/plugin.video.umbrella/resources/lib -type[...redacted 34 bytes]


find ~/addon-audit/fenlightplus -name '*.py' -path '*/providers/*' -o -name '*.p[...redacted 41 bytes]


find ~/addon-audit/seren -name '*.py' -path '*/providers/*' | sort | head -30


find ~/addon-audit/umbrella-repo -name '*.py' -path '*/providers/*' | sort | hea[...redacted 5 bytes]


ls -la ~/addon-audit/fenlightplus/packages/ 2>/dev/null


grep -r 'import' ~/addon-audit/fenlightplus/plugin.video.fenlight/resources/lib/[...redacted 22 bytes]


grep -r 'source_dict\|provider_packages\|def run_scraper\|load_provider\|externa[...redacted 102 bytes]


grep -r 'packages\|providers\|torrentio\|knightcrawler\|comet' ~/addon-audit/fen[...redacted 74 bytes]


head -60 ~/addon-audit/fenlightplus/plugin.video.fenlight/resources/lib/modules/[...redacted 10 bytes]


cd ~/addon-audit/fenlightplus/packages && echo "=== Extract Fen Light 2.3.2 (lat[...redacted 357 bytes]


grep -rn 'api_key\|API_KEY\|client_id\|CLIENT_ID\|api\.key\|api-key\|apiKey\|tra[...redacted 290 bytes]


grep -rn 'api_key\|API_KEY\|client_id\|CLIENT_ID\|api\.key\|api-key\|apiKey\|tra[...redacted 261 bytes]


grep -rn 'api_key\|API_KEY\|client_id\|CLIENT_ID\|api\.key\|api-key\|apiKey\|tra[...redacted 297 bytes]


grep -rn 'http.*zip\|http.*packages\|torrentio\|comet\|knightcrawler\|provider.*[...redacted 164 bytes]


grep -rn 'http.*zip\|http.*packages\|torrentio\|comet\|knightcrawler\|provider.*[...redacted 135 bytes]


grep -rn 'http.*zip\|http.*packages\|torrentio\|comet\|knightcrawler\|provider.*[...redacted 171 bytes]


grep -rn "client_id" ~/addon-audit/fenlightplus/plugin.video.fenlight/ --include[...redacted 40 bytes]


grep -rn "omdbapi\|apikey" ~/addon-audit/fenlightplus/plugin.video.fenlight/ --i[...redacted 46 bytes]


grep -rn "trakt.*=.*['\"'][A-Z]" ~/addon-audit/fenlightplus/plugin.video.fenligh[...redacted 82 bytes]


grep -rn "client_id" ~/addon-audit/seren/ --include='*.py' | grep -v __pycache__[...redacted 11 bytes]


grep -rn "omdbapi\|apikey" ~/addon-audit/seren/ --include='*.py' | grep -v __pyc[...redacted 17 bytes]


grep -rn "trakt.*=.*['\"'][A-Z]" ~/addon-audit/seren/ --include='*.py' | grep -v[...redacted 53 bytes]


grep -rn "client_id" ~/addon-audit/umbrella-repo/piers/plugin.video.umbrella/ --[...redacted 47 bytes]


grep -rn "omdbapi\|apikey" ~/addon-audit/umbrella-repo/piers/plugin.video.umbrel[...redacted 53 bytes]


grep -rn "trakt.*=.*['\"'][A-Z]" ~/addon-audit/umbrella-repo/piers/plugin.video.[...redacted 89 bytes]


grep -rnA 20 'class CustomProviders' ~/addon-audit/seren/resources/lib/modules/p[...redacted 43 bytes]


grep -rn 'install_url\|package_url\|repo.*url\|known_packages' ~/addon-audit/ser[...redacted 85 bytes]


grep -n 'CLIENT_ID\|CLIENT_SECRET' ~/addon-audit/fenlightplus/plugin.video.fenli[...redacted 46 bytes]


grep -n 'client_id\|662875953\|888228107' ~/addon-audit/fenlightplus/plugin.vide[...redacted 58 bytes]


grep -n 'client_ID\|X245A4XAIBGVM' ~/addon-audit/fenlightplus/plugin.video.fenli[...redacted 52 bytes]


grep -n 'api_key\|tmdb.*key\|tmdb_api' ~/addon-audit/fenlightplus/plugin.video.f[...redacted 49 bytes]


grep -n 'agent\|user_agent' ~/addon-audit/fenlightplus/plugin.video.fenlight/res[...redacted 43 bytes]


grep -n 'apikey\|apiKey' ~/addon-audit/seren/resources/lib/indexers/tmdb.py | he[...redacted 6 bytes]


grep -n 'apikey\|apiKey' ~/addon-audit/seren/resources/lib/indexers/tvdb.py | he[...redacted 6 bytes]


grep -n 'client_id\|client_secret' ~/addon-audit/seren/resources/lib/indexers/tr[...redacted 17 bytes]


grep -n 'client_id\|RD_AUTH_CLIENT_ID' ~/addon-audit/seren/resources/lib/debrid/[...redacted 25 bytes]


grep -n 'client_id\|662875953\|888228107' ~/addon-audit/seren/resources/lib/debr[...redacted 27 bytes]


grep -n 'API_key\|apikey\|tmdb.*key' ~/addon-audit/umbrella-repo/piers/plugin.vi[...redacted 54 bytes]


grep -n 'client_id\|client_secret\|trakt.*id\|trakt.*secret' ~/addon-audit/umbre[...redacted 78 bytes]


grep -n 'simklclientid\|client_ID' ~/addon-audit/umbrella-repo/piers/plugin.vide[...redacted 52 bytes]


grep -n 'CLIENT_ID\|_CLIENT_ID' ~/addon-audit/umbrella-repo/piers/plugin.video.u[...redacted 51 bytes]


grep -A3 'def trakt_client\|def trakt_secret' ~/addon-audit/fenlightplus/plugin.[...redacted 59 bytes]


grep 'tmdb_api_key\|tmdb.apikey\|default.*key' ~/addon-audit/fenlightplus/plugin[...redacted 80 bytes]


grep -A2 'trakt.*client_id\|trakt.*client_secret\|trakt.apikey\|trakt.id\|trakt.[...redacted 71 bytes]


grep -n 'RD_AUTH_CLIENT_ID' ~/addon-audit/seren/resources/lib/debrid/real_debrid[...redacted 13 bytes]


grep -A2 'traktClientID\|traktClientSecret' ~/addon-audit/umbrella-repo/piers/pl[...redacted 63 bytes]


grep -n 'tvdb.apikey\|default.*key\|43VPI0R8323FB7TI\|edde6b5e41246ab79a2697cd12[...redacted 121 bytes]


grep -n 'def import_external_scrapers\|def activate_external_providers\|def dete[...redacted 158 bytes]


grep -n 'known_packages\|get_provider_packages\|update_known_packages' ~/addon-a[...redacted 65 bytes]


grep -rn 'known_packages\|provider_packages' ~/addon-audit/seren/resources/lib/d[...redacted 36 bytes]


grep -A5 'def external_scraper_info' ~/addon-audit/fenlightplus/plugin.video.fen[...redacted 39 bytes]


grep -n 'def install_package\|remote_meta\|download.*url\|meta\.json\|package\.z[...redacted 85 bytes]


grep -rn 'external\|provider.*module\|cocoscrapers\|external_provider' ~/addon-a[...redacted 144 bytes]


unzip -l ~/addon-audit/fenlightplus/packages/plugin.video.fen-3.5.01.zip 2>/dev/[...redacted 189 bytes]


unzip -p ~/addon-audit/fenlightplus/packages/plugin.video.fen-3.5.01.zip plugin.[...redacted 72 bytes]


unzip -p ~/addon-audit/fenlightplus/packages/plugin.video.fen-3.5.01.zip plugin.[...redacted 67 bytes]


unzip -l ~/addon-audit/fenlightplus/packages/plugin.video.fen-3.5.01.zip 2>/dev/[...redacted 270 bytes]


sed -n '107,200p' ~/addon-audit/seren/resources/lib/modules/providers/install_ma[...redacted 8 bytes]


grep -n 'external_scraper\|External Scraper\|scraper.module' ~/addon-audit/fenli[...redacted 82 bytes]


grep -rn 'torrentio\|comet\|knightcrawler\|mediafusion\|elfhosted\|cocoscraper' [...redacted 95 bytes]


grep -rn 'torrentio\|comet\|knightcrawler\|mediafusion\|elfhosted\|cocoscraper' [...redacted 102 bytes]


unzip -l ~/addon-audit/fenlightplus/packages/plugin.video.fen-3.5.01.zip 2>/dev/[...redacted 51 bytes]


find ~/addon-audit/umbrella-repo -name '*.zip' | head -20


find ~/addon-audit/umbrella-repo -name '*coco*' -o -name '*Coco*' 2>/dev/null | [...redacted 8 bytes]


grep -n 'trakt.client\|trakt.secret\|trakt.*default\|tmdb.*default\|omdb.*defaul[...redacted 101 bytes]


grep -A3 'trakt.*client_id\|trakt.*client_secret\|g\.get_setting.*trakt' ~/addon[...redacted 55 bytes]


grep -A2 'def traktClientID\|def traktClientSecret' ~/addon-audit/umbrella-repo/[...redacted 72 bytes]


grep -n 'trakt.*clientid\|trakt.*clientsecret\|traktclientid\|traktclientsecret'[...redacted 186 bytes]


grep -n 'apikey\|client.*id\|secret\|default' ~/addon-audit/umbrella-repo/piers/[...redacted 67 bytes]


grep -n 'tmdb_default_api\|trakt_default_id\|trakt_default_secret\|eyJhbG' ~/add[...redacted 90 bytes]


grep -B1 -A1 'tmdb_default_api\|trakt_default_id\|trakt_default_secret' ~/addon-[...redacted 90 bytes]


grep -n 'trakt.*client_id\|trakt.*secret\|trakt.*auth\|omdb.*apikey\|tmdb.*apike[...redacted 82 bytes]


grep -n 'default\|trakt\|tmdb\|omdb\|fanart' ~/addon-audit/seren/resources/setti[...redacted 86 bytes]


grep -n 'tmdb.apikey\|tvdb.apikey\|omdb.apikey' ~/addon-audit/umbrella-repo/pier[...redacted 69 bytes]


grep 'eyJhbG\|tmdb_read_access_token' ~/addon-audit/fenlightplus/plugin.video.fe[...redacted 55 bytes]


grep -B2 -A2 'tvdb.apikey\|omdb.apikey' ~/addon-audit/umbrella-repo/piers/plugin[...redacted 61 bytes]


grep -B1 -A1 'apikey\|default' ~/addon-audit/umbrella-repo/piers/plugin.video.um[...redacted 73 bytes]


grep -A5 'def _get_client_id\|def _get_client_secret\|trakt.*client.*id.*=.*g\|t[...redacted 82 bytes]


grep -A20 '<setting id="tmdb.apikey"' ~/addon-audit/umbrella-repo/piers/plugin.v[...redacted 47 bytes]


grep -n 'url\|playable\|direct\|resolve' ~/addon-audit/seren/resources/lib/modul[...redacted 77 bytes]


grep -n 'def resolve\|def playSource\|def play_source\|def playItem\|def resolve[...redacted 112 bytes]


grep -n 'Uncached\|uncached\|uncached_chosen\|show_uncached' ~/addon-audit/fenli[...redacted 73 bytes]


grep -n 'prem_providers\|premium_providers\|debrid_enabled\|no.*debrid\|no.*prov[...redacted 105 bytes]


for f in ~/addon-audit/fenlightplus/plugin.video.fenlight/resources/lib/scrapers[...redacted 172 bytes]


for f in ~/addon-audit/umbrella-repo/piers/plugin.video.umbrella/resources/lib/i[...redacted 188 bytes]


for f in ~/addon-audit/umbrella-repo/piers/plugin.video.umbrella/resources/lib/c[...redacted 185 bytes]


grep -n 'class source\|def results\|hasMovies\|hasEpisodes\|pack_capable\|scrape[...redacted 98 bytes]


unzip -l ~/addon-audit/fenlightplus/packages/plugin.video.fen-3.5.01.zip 2>/dev/[...redacted 45 bytes]


mkdir -p ~/addon-audit/build/ultimate-debrid/resources/lib/{scrapers,apis,caches[...redacted 192 bytes]


mkdir -p ~/addon-audit/build/ultimate-nondebrid/resources/lib/{scrapers,apis,cac[...redacted 21 bytes]


find ~/addon-audit/build/ultimate-debrid/ -name '*.py' -o -name '*.xml' 2>/dev/n[...redacted 129 bytes]


find ~/addon-audit/build/ -type f 2>/dev/null | head -30


find ~/addon-audit/umbrella-repo/piers/plugin.video.umbrella/resources/lib -type[...redacted 9 bytes]


sleep 10 && find ~/addon-audit/build/ -type f | wc -l && echo "---" && find ~/ad[...redacted 61 bytes]


# Direct copy - Ultimate Debrid
SRC=~/addon-audit/fenlightplus/plugin.video.fenl[...redacted 1183 bytes]


# Copy all FenLight+ modules
cp ~/addon-audit/fenlightplus/plugin.video.fenlight[...redacted 2134 bytes]


# Copy FenLight+ scrapers
cp ~/addon-audit/fenlightplus/plugin.video.fenlight/re[...redacted 1802 bytes]


# Copy Umbrella scrapers
cp ~/addon-audit/umbrella-repo/piers/plugin.video.umbre[...redacted 1708 bytes]


# Copy remaining Umbrella dependencies
cp ~/addon-audit/umbrella-repo/piers/plug[...redacted 730 bytes]


find ~/addon-audit/fenlightplus/plugin.video.fenlight/resources/lib/ -type f -na[...redacted 16 bytes]


find ~/addon-audit/umbrella-repo/piers/plugin.video.umbrella/resources/lib/ -typ[...redacted 23 bytes]


find ~/addon-audit/seren/resources/lib/ -type f -name "*.py" | sort


grep -n 'debrid\|RD_check\|PM_check\|AD_check\|Uncached\|cache_provider\|externa[...redacted 150 bytes]


grep -n 'def sources\|def results\|hasMovies\|hasEpisodes\|pack_capable\|scrape_[...redacted 111 bytes]


grep -n 'def sources\|def results\|hasMovies\|hasEpisodes\|pack_capable\|scrape_[...redacted 106 bytes]


grep -n 'def sources\|def results\|hasMovies\|hasEpisodes\|pack_capable\|scrape_[...redacted 109 bytes]


grep -n 'def results\|def sources\|scrape_provider\|class source' ~/addon-audit/[...redacted 70 bytes]


grep -n 'debrid\|RD\|rd\.\|rd_\|token\|premiumize\|alldebrid\|torbox\|offcloud\|[...redacted 113 bytes]


grep -rn 'ultnd.internal_results\|internal_results' ~/addon-audit/build/ultimate[...redacted 39 bytes]


find ~/addon-audit/fenlightplus/plugin.video.fenlight/ -name "addon.xml" -exec c[...redacted 8 bytes]


find ~/addon-audit/fenlightplus/plugin.video.fenlight/ -name "*.xml" | head -20


cd ~/addon-audit/build/ultimate-nondebrid/resources/lib/indexers
for f in *.py; [...redacted 365 bytes]


cd ~/addon-audit/build/ultimate-nondebrid/resources/lib

# Fix all remaining fen[...redacted 715 bytes]


find ~/addon-audit/build/ultimate-debrid -type f -name '*.py' | wc -l


find ~/addon-audit/build/ultimate-debrid -name 'addon.xml' | head -1


find ~/addon-audit/build/ultimate-nondebrid -type f -name '*.py' | wc -l


find ~/addon-audit/build/ultimate-nondebrid -name 'addon.xml' | head -1


grep -rn 'debrid\|RealDebrid\|Premiumize\|AllDebrid\|Offcloud\|TorBox\|rd_cloud\[...redacted 189 bytes]


ls ~/addon-audit/build/ultimate-debrid/resources/lib/scrapers/*.py | xargs -n1 b[...redacted 7 bytes]


ls ~/addon-audit/build/ultimate-nondebrid/resources/lib/scrapers/*.py | xargs -n[...redacted 10 bytes]


du -sh ~/addon-audit/build/ultimate-debrid/ ~/addon-audit/build/ultimate-nondebr[...redacted 3 bytes]


# Clean up duplicate scrapers in non-debrid
rm -f ~/addon-audit/build/ultimate-n[...redacted 269 bytes]


find ~/addon-audit/build/ultimate-debrid -type f | sort


find ~/addon-audit/build/ultimate-nondebrid -type f | sort


cd ~/addon-audit/build/ultimate-nondebrid/resources/lib/modules
sed -i 's/fenlig[...redacted 96 bytes]


# Remove orphan umbrella_* files from non-debrid (dead code, not referenced)
rm [...redacted 293 bytes]


# Check if windows directory exists
ls ~/addon-audit/build/ultimate-nondebrid/re[...redacted 161 bytes]


mkdir -p ~/addon-audit/build/ultimate-nondebrid/resources/media
# Create a place[...redacted 1158 bytes]


ls ~/addon-audit/build/ultimate-nondebrid/resources/lib/caches/*cache*.py && \
l[...redacted 151 bytes]


mkdir -p ~/addon-audit/build/ultimate-debrid/resources/lib/{scrapers,apis,caches[...redacted 26 bytes]


cd ~/addon-audit/build/ultimate-nondebrid
echo "=== COMPLETE ADDON STRUCTURE ===[...redacted 186 bytes]


ls -la ~/addon-audit/build/ultimate-nondebrid/resources/lib/scrapers/
ls -la ~/a[...redacted 127 bytes]


# Copy the Umbrella easynews scraper and dependencies again
cp -v ~/addon-audit/[...redacted 1431 bytes]


# Copy scrapers
cp ~/addon-audit/fenlightplus/plugin.video.fenlight/resources/li[...redacted 1220 bytes]


# Copy apis
cp ~/addon-audit/fenlightplus/plugin.video.fenlight/resources/lib/ap[...redacted 1670 bytes]


# Copy caches - all of them
for f in base_cache main_cache debrid_cache external[...redacted 544 bytes]


# Copy modules - all of them
for f in sources source_utils debrid player router [...redacted 346 bytes]


# Copy indexers - all of them
for f in navigator movies tvshows seasons episodes[...redacted 294 bytes]


# Copy windows - all of them
for f in base_window color content_settings default[...redacted 300 bytes]


git clone --depth 1 https://github.com/elgatito/plugin.video.elementum.git ~/add[...redacted 33 bytes]


git clone --depth 1 https://github.com/Sam-Max/plugin.video.jacktook.git ~/addon[...redacted 30 bytes]


cd ~/addon-audit/downloads/elementum && find . -maxdepth 5 -not -path './.git/*'[...redacted 44 bytes]


cd ~/addon-audit/downloads/jacktook && find . -maxdepth 5 -not -path './.git/*' [...redacted 43 bytes]


ls -la ~/addon-audit/downloads/elementum/resources/bin/ 2>/dev/null || echo "No [...redacted 30 bytes]


find ~/addon-audit/build/ultimate-debrid -type f | wc -l


python3 -m py_compile ~/addon-audit/build/ultimate-debrid/resources/lib/modules/[...redacted 15 bytes]


find ~/addon-audit/build/ultimate-nondebrid -type f | wc -l


python3 -m py_compile ~/addon-audit/build/ultimate-nondebrid/resources/lib/modul[...redacted 18 bytes]


python3 -m py_compile ~/addon-audit/build/ultimate-nondebrid/resources/lib/modul[...redacted 25 bytes]


python3 -m py_compile ~/addon-audit/build/ultimate-nondebrid/resources/lib/scrap[...redacted 22 bytes]


ls ~/addon-audit/build/ultimate-nondebrid/resources/lib/scrapers/*.py | xargs -n[...redacted 10 bytes]


ls ~/addon-audit/build/ultimate-debrid/resources/lib/scrapers/*.py | xargs -n1 b[...redacted 7 bytes]


du -sh ~/addon-audit/build/ultimate-debrid/ ~/addon-audit/build/ultimate-nondebr[...redacted 3 bytes]


rm -f ~/addon-audit/build/ultimate-nondebrid/resources/lib/scrapers/umbrella_eas[...redacted 136 bytes]


# Check Kodi availability
which kodi 2>/dev/null && echo "Kodi installed" || ech[...redacted 167 bytes]


curl -s http://127.0.0.1:8090/echo 2>&1; which torrserver 2>/dev/null; docker ps[...redacted 61 bytes]


cd ~/addon-audit/test-nondebrid && python3 test_runner.py 2>&1


cd ~/addon-audit/test-nondebrid && python3 test_p2p.py 2>&1


pip3 list 2>/dev/null | grep -iE "flask|fastapi|bottle|django|aiohttp" ; python3[...redacted 106 bytes]


cd ~/addon-audit && python3 search_web.py 8800


sleep 2 && echo "=== Homepage ===" && curl -s http://localhost:8800/ | head -15 [...redacted 151 bytes]


sleep 1 && ss -tlnp | grep 8800 && echo "Server running" || (cd ~/addon-audit &&[...redacted 86 bytes]


curl -sv http://localhost:8800/ 2>&1 | head -30


pkill -f "search_web.py" 2>/dev/null; sleep 1; ss -tlnp | grep 8800


cd ~/addon-audit && python3 -u search_web.py 8800 2>&1


ss -tlnp | grep 8800 && echo "port open" || echo "port not open"
curl -s --max-t[...redacted 44 bytes]


# Try with netcat to see raw response
echo -e "GET / HTTP/1.1\r\nHost: localhost[...redacted 75 bytes]


pkill -f "search_web" 2>/dev/null; sleep 1
cd ~/addon-audit && timeout 5 python3[...redacted 32 bytes]


cd ~/addon-audit && python3 -c "
import search_web
print('Module loaded OK')
pri[...redacted 35 bytes]


cd ~/addon-audit && python3 -c "
import search_web, threading, time, urllib.requ[...redacted 336 bytes]


pkill -f "search_web" 2>/dev/null; sleep 1
cd ~/addon-audit && python3 -c "
impo[...redacted 764 bytes]


cd ~/addon-audit && python3 -u test_web.py 2>&1


cd ~/addon-audit && python3 -c "
import search_web, threading, time, urllib.requ[...redacted 698 bytes]


cd ~/addon-audit && python3 -u search_web.py 8800


sleep 2 && curl -s http://localhost:8800/ | grep -c 'TorrServer' && echo "Homepa[...redacted 163 bytes]


ss -tlnp | grep 8800 && echo "Web server running" || echo "Web server NOT runnin[...redacted 155 bytes]


# Check if docker is available and try to start TorrServer
which docker 2>/dev/n[...redacted 160 bytes]


docker run -d --name torrserver --restart unless-stopped -p 8090:8090 -v torrser[...redacted 55 bytes]


sleep 3 && docker ps --filter name=torrserver --format "{{.Status}}" && curl -s [...redacted 39 bytes]


# Kill any old instances
pkill -f "search_web" 2>/dev/null
docker rm -f torrserv[...redacted 312 bytes]


docker ps --filter name=torrserver --format "{{.Names}} {{.Status}}" 2>/dev/null


# Remove broken container
docker rm -f torrserver 2>/dev/null

# Download TorrSe[...redacted 754 bytes]


/tmp/TorrServer-linux-amd64 --port 8090 2>&1


pkill -f "search_web" 2>/dev/null; pkill -f "stream.py" 2>/dev/null; sleep 1


cd ~/addon-audit && python3 -u stream.py 8800


sleep 3 && curl -s --max-time 5 http://localhost:8800/ | grep -c 'Ultimate Strea[...redacted 2 bytes]


# Test search works end-to-end
curl -s "http://localhost:8800/?q=The+Matrix&type[...redacted 159 bytes]


# Remove the docker container (binary is already running on 8090)
docker rm -f t[...redacted 327 bytes]


# Check if server is still alive
ss -tlnp | grep 8800 && echo "Server listening"[...redacted 379 bytes]


# Open the port
sudo ufw allow 8800/tcp comment 'Ultimate Stream Web UI'
sudo uf[...redacted 135 bytes]


cd ~/addon-audit && git clone https://github.com/Be1l-ai/Movie_Player.git movie-[...redacted 21 bytes]


find ~/addon-audit/movie-player -type f -not -path '*/.git/*' | sort


# Kill old server
pkill -f "stream.py" 2>/dev/null
pkill -f "search_web" 2>/dev/[...redacted 101 bytes]


cd ~/addon-audit/movie-player/movie && python3 -u src/main.py 2>&1


sleep 3 && curl -s --max-time 5 http://localhost:8800/ | grep -c 'Movie Player'


curl -s --max-time 3 http://localhost:8800/ 2>&1 | head -5
ss -tlnp | grep 8800


pip3 install flask 2>&1 | tail -3
python3 -c "import flask; print('Flask OK:', f[...redacted 18 bytes]


pip3 install flask --break-system-packages 2>&1 | tail -3
python3 -c "import fla[...redacted 42 bytes]


sleep 3 && curl -s --max-time 5 http://localhost:8800/ | head -5
ss -tlnp | grep[...redacted 5 bytes]


# Test homepage
echo "=== Homepage ==="
curl -s --max-time 5 http://localhost:88[...redacted 498 bytes]


# Check the raw search response
curl -s --max-time 10 "http://localhost:8800/mov[...redacted 155 bytes]


# Restart Flask
kill $(lsof -ti:8800) 2>/dev/null
sleep 1


sleep 3 && echo "=== Test search ===" && curl -s --max-time 10 "http://localhost[...redacted 198 bytes]


# Check search response
curl -s --max-time 10 "http://localhost:8800/movies?sear[...redacted 79 bytes]


# Check what movie detail actually renders
curl -s --max-time 15 "http://localho[...redacted 639 bytes]


# Find the actual Torrentio API endpoint format
curl -s --max-time 10 "https://t[...redacted 351 bytes]


kill $(lsof -ti:8800) 2>/dev/null; sleep 1; cd ~/addon-audit/movie-player/movie [...redacted 30 bytes]


sleep 3 && curl -s --max-time 10 "http://localhost:8800/movie/603" | grep -oP 'c[...redacted 36 bytes]


curl -s --max-time 15 "http://localhost:8800/movie/603" | head -20
echo "---"
cu[...redacted 100 bytes]


# Check if DMM Torznab is still alive
curl -s --max-time 5 "https://zilean.elfho[...redacted 307 bytes]


curl -s --max-time 10 "http://localhost:8800/movie/603" | grep -c "target=\"_bla[...redacted 301 bytes]


# Install Jackett via direct download (works on amd64 Linux)
cd /tmp
wget -q "ht[...redacted 139 bytes]


cd /tmp && tar xzf jackett.tar.gz -C /opt/ 2>&1
ls /opt/Jackett/ | head -10


sudo tar xzf /tmp/jackett.tar.gz -C /opt/ 2>&1 | tail -3
ls /opt/Jackett/jackett[...redacted 135 bytes]


cd /opt/Jackett && ./jackett --NoRestart --NoUpdates 2>&1


sleep 10 && ss -tlnp | grep 9117 && echo "Jackett started" || echo "Jackett not [...redacted 190 bytes]


# Get API key
JACKETT_API_KEY=$(grep -oP '"APIKey":\s*"\K[^"]+' ~/.config/Jacket[...redacted 307 bytes]


JACKETT_API_KEY=***`"
echo "API Key: ${JACKETT_API_KEY:0:16}..."

# List availa[...redacted 377 bytes]


cat ~/.config/Jackett/ServerConfig.json 2>/dev/null | python3 -c "import json,sy[...redacted 48 bytes]


# Check Jackett API docs - get capabilities
curl -s "http://127.0.0.1:9117/api/v[...redacted 126 bytes]


# Check what Jackett endpoints work
curl -sI "http://127.0.0.1:9117" 2>&1 | head[...redacted 377 bytes]


sudo ufw allow 9117/tcp comment 'Jackett'
echo "Jackett web UI: http://192.168.1[...redacted 9 bytes]


curl -s -X POST 'http://127.0.0.1:9117/api/v2.0/indexers/yggtorrent' -H 'Content[...redacted 89 bytes]


curl -s -X POST 'http://127.0.0.1:9117/api/v2.0/indexers/eztv' -H 'Content-Type:[...redacted 83 bytes]


curl -s -X POST 'http://127.0.0.1:9117/api/v2.0/indexers/kickasstorrents' -H 'Co[...redacted 94 bytes]


curl -s -X POST 'http://127.0.0.1:9117/api/v2.0/indexers/limetorrents' -H 'Conte[...redacted 91 bytes]


curl -s -X POST 'http://127.0.0.1:9117/api/v2.0/indexers/rarbg' -H 'Content-Type[...redacted 84 bytes]


curl -s -X POST 'http://127.0.0.1:9117/api/v2.0/indexers/therarbg' -H 'Content-T[...redacted 87 bytes]


curl -s -X POST 'http://127.0.0.1:9117/api/v2.0/indexers/torrentgalaxy' -H 'Cont[...redacted 92 bytes]


curl -s -X POST 'http://127.0.0.1:9117/api/v2.0/indexers/btnext' -H 'Content-Typ[...redacted 85 bytes]


ls ~/.config/Jackett/Indexers/ 2>/dev/null | wc -l


kill $(lsof -ti:8800) 2>/dev/null; sleep 1


cd ~/addon-audit/movie-player/movie && python3 -u src/main.py 2>&1


sleep 3 && curl -s --max-time 10 "http://localhost:8800/movie/603" | grep -oP 'T[...redacted 40 bytes]


curl -s --max-time 10 "http://localhost:8800/movie/27205" | grep -c "VidSrc" && [...redacted 163 bytes]


kill $(lsof -ti:8800) 2>/dev/null; sleep 1; cd ~/addon-audit/movie-player/movie [...redacted 30 bytes]


sleep 3 && curl -s --max-time 10 "http://localhost:8800/movie/603" | grep -c 'ta[...redacted 176 bytes]


curl -s --max-time 10 "http://localhost:8800/movie/603" | grep -cE 'target="_bla[...redacted 346 bytes]


curl -s --max-time 10 "http://localhost:8800/movie/603" | python3 -c "
import sy[...redacted 571 bytes]


curl -s --max-time 10 "http://localhost:8800/movie/603" | grep -oP 'playSource\([...redacted 9 bytes]


curl -s --max-time 10 "http://localhost:8800/movie/603" | python3 -c "
import sy[...redacted 575 bytes]


# Check if Jackett has any indexers
ls -la ~/.config/Jackett/Indexers/ 2>/dev/nu[...redacted 217 bytes]


APIKEY=***
# Try with API key in query
curl -s "http://127.0.0.1:9117/api/v2.0/[...redacted 381 bytes]


# Check if Jackett is actually running
curl -sI "http://127.0.0.1:9117" 2>&1 | h[...redacted 184 bytes]


APIKEY=***
# Try API with explicit apikey parameter
curl -v "http://127.0.0.1:9[...redacted 226 bytes]


ls -la ~/.config/Jackett/Indexers/ 2>/dev/null


sleep 3 && curl -s --max-time 20 "http://localhost:8800/movie/603" | grep -oP 'c[...redacted 36 bytes]


# Test the scraper directly
python3 -c "
import urllib.request, re, html

q = 'T[...redacted 687 bytes]


# Try The Pirate Bay
python3 -c "
import urllib.request, re
q = 'The+Matrix'
url[...redacted 772 bytes]


# Try Pirate Bay API (returns JSON directly)
python3 -c "
import urllib.request,[...redacted 453 bytes]


curl -s --max-time 25 "http://localhost:8800/movie/603" | python3 -c "
import sy[...redacted 510 bytes]


python3 /data/tmp/hermes-verify-tpb.py 2>&1 && rm -f /data/tmp/hermes-verify-tpb[...redacted 3 bytes]


# Check TorrServer is alive and can play
curl -s --max-time 3 http://127.0.0.1:8[...redacted 347 bytes]


kill $(lsof -ti:8800) 2>/dev/null; sleep 1; cd ~/addon-audit/movie-player/movie [...redacted 30 bytes]


sleep 3 && curl -s --max-time 25 "http://localhost:8800/movie/603" | python3 -c [...redacted 442 bytes]


# Test TorrServer proxy with a known good hash from the existing torrent
curl -s[...redacted 481 bytes]


# Test with the actual loaded torrent
curl -sI --max-time 10 "http://localhost:8[...redacted 255 bytes]


# Try different TorrServer stream URL formats
echo "=== /play format ==="
curl -[...redacted 741 bytes]


# Try different stream formats
curl -sI --max-time 5 "http://127.0.0.1:8090/stre[...redacted 425 bytes]


# Check what TorrServer returns for the 400 error
curl -s --max-time 5 "http://1[...redacted 383 bytes]


curl -s 'http://127.0.0.1:8090/torrents' -X POST -H "Content-Type: application/[...redacted 316 bytes]


sleep 3 && echo "=== Test proxy with active torrent ===" && curl -sI --max-time [...redacted 486 bytes]


# Check the MatriX web UI for streaming URLs
curl -s --max-time 5 "http://127.0.[...redacted 490 bytes]


# Test with actual hash loaded in TorrServer
echo "=== /stream with real hash ==[...redacted 407 bytes]


sleep 3 && curl -s --max-time 20 "http://localhost:8800/movie/603" | python3 -c [...redacted 371 bytes]


python3 /data/tmp/hermes-verify-all.py 2>&1 && rm -f /data/tmp/hermes-verify-all[...redacted 3 bytes]


python3 /data/tmp/hermes-verify-final.py 2>&1 && rm -f /data/tmp/hermes-verify-f[...redacted 7 bytes]


curl -s --max-time 20 "http://localhost:8800/movie/603" | python3 -c "
import sy[...redacted 310 bytes]


# Check all torrents in TorrServer and their status
curl -s "http://127.0.0.1:80[...redacted 553 bytes]


# Clear all dead torrents from TorrServer
for hash in $(curl -s "http://127.0.0.[...redacted 571 bytes]


# Add a well-seeded Ubuntu torrent to test streaming
curl -s "http://127.0.0.1:8[...redacted 795 bytes]


sleep 15 && curl -s "http://127.0.0.1:8090/torrents" -X POST -H "Content-Type: a[...redacted 407 bytes]


# Check if TorrServer is actually listening on all interfaces
curl -s "http://12[...redacted 230 bytes]


# Quick test: can TorrServer reach the internet at all?
curl -s --max-time 5 htt[...redacted 161 bytes]


# Check if we can fix TorrServer connectivity by changing settings
# First see w[...redacted 90 bytes]


# Full functional test
echo "=== Embed source test ==="
curl -sI --max-time 10 "[...redacted 444 bytes]


curl -s --max-time 10 "http://localhost:8800/movie/603" | python3 -c "
import sy[...redacted 317 bytes]


python3 /data/tmp/hermes-verify-proxy.py 2>&1 && rm -f /data/tmp/hermes-verify-p[...redacted 7 bytes]


# Kill and restart TorrServer with verbose output to see what's happening
pkill [...redacted 204 bytes]


# Restart TorrServer
pkill -f TorrServer 2>/dev/null
sleep 2


/tmp/TorrServer-linux-amd64 --port 8090 2>&1


sleep 3 && echo "TorrServer: $(curl -s --max-time 3 http://127.0.0.1:8090/echo)"[...redacted 792 bytes]


sleep 20 && curl -s "http://127.0.0.1:8090/torrents" -X POST -H "Content-Type: a[...redacted 402 bytes]


# Use Big Buck Bunny - always well-seeded
curl -s "http://127.0.0.1:8090/torrent[...redacted 317 bytes]


sleep 15 && curl -s "http://127.0.0.1:8090/torrents" -X POST -H "Content-Type: a[...redacted 401 bytes]


# Test stream via TorrServer directly
echo "=== /stream/{hash}/2 for the mp4 ===[...redacted 532 bytes]


kill $(lsof -ti:8800) 2>/dev/null; sleep 1; cd ~/addon-audit/movie-player/movie [...redacted 30 bytes]


sleep 3 && echo "=== Sources ===" && curl -s --max-time 20 "http://localhost:880[...redacted 225 bytes]


curl -s --max-time 20 "http://localhost:8800/movie/603" | python3 -c "
import sy[...redacted 407 bytes]


python3 /data/tmp/hermes-verify-id.py 2>&1 && rm -f /data/tmp/hermes-verify-id.p[...redacted 1 bytes]


# Add Big Buck Bunny and check file structure
curl -s "http://127.0.0.1:8090/tor[...redacted 841 bytes]


sleep 3 && curl -s --max-time 10 "http://localhost:8800/movie/603" | python3 -c [...redacted 389 bytes]


sleep 3 && curl -s --max-time 10 "http://localhost:8800/torrent/play?hash=dd8255[...redacted 318 bytes]


curl -s --max-time 10 "http://localhost:8800/movie/603" | python3 -c "
import sy[...redacted 220 bytes]


python3 /data/tmp/hermes-verify-final2.py 2>&1 && rm -f /data/tmp/hermes-verify-[...redacted 9 bytes]


python3 /data/tmp/hermes-verify-stream.py 2>&1 && rm -f /data/tmp/hermes-verify-[...redacted 9 bytes]


sleep 3 && curl -s --max-time 20 "http://localhost:8800/movie/603" | python3 -c [...redacted 471 bytes]


curl -s --max-time 10 "http://localhost:8800/torrent/play?hash=dd8255ecdc7ca55fb[...redacted 87 bytes]


curl -s --max-time 20 "http://localhost:8800/movie/603" | python3 -c "
import sy[...redacted 261 bytes]


curl -s --max-time 20 "http://localhost:8800/movie/603" | grep -oP 'TPB [^<]*' |[...redacted 323 bytes]


curl -s --max-time 20 "http://localhost:8800/movie/603" | python3 -c "
import sy[...redacted 289 bytes]


cd ~/addon-audit && git clone https://github.com/adrianhajdin/react-native-movie[...redacted 36 bytes]


find ~/addon-audit/rn-movie-app -type f -not -path '*/.git/*' | head -30


cd ~/addon-audit/rn-movie-app && npm install 2>&1 | tail -5


kill $(lsof -ti:8800) 2>/dev/null; sleep 1; cd ~/addon-audit/ultimate-player && [...redacted 22 bytes]


sleep 3 && echo "=== API ===" && curl -s --max-time 5 "http://localhost:8800/api[...redacted 206 bytes]


sleep 3 && echo "=== API test ===" && curl -s --max-time 10 "http://localhost:88[...redacted 370 bytes]


cd ~/addon-audit && git clone https://github.com/Sanuu7/SanuFlix-opensource.git [...redacted 23 bytes]


find ~/addon-audit/sanuflix -type f -not -path '*/.git/*' | head -30


cd ~/addon-audit/sanuflix && npm install 2>&1 | tail -5


cd ~/addon-audit/sanuflix && npm install --prefer-offline 2>&1 | tail -10


cd ~/addon-audit/sanuflix && npm run build 2>&1


cd ~/addon-audit/sanuflix && npx tsc --noEmit 2>&1 | head -10


sleep 3 && curl -s --max-time 10 http://localhost:8800/ | head -5 && echo "---" [...redacted 59 bytes]


cd ~/addon-audit/sanuflix && npm run build 2>&1 | tail -5


curl -s --max-time 5 http://localhost:8800/ | grep -c 'SanuFlix\|sanuflix\|root'[...redacted 234 bytes]


cd ~/addon-audit/sanuflix && npm run build 2>&1 | tail -15


cd ~/addon-audit/sanuflix && npm run build 2>&1 | tail -10


cd ~/addon-audit/sanuflix && npm run build 2>&1 | grep -E "error|built|PWA"


cd ~/addon-audit/sanuflix && npm run build 2>&1 | grep -E "error|built|PWA|✓"


cd ~/addon-audit/sanuflix && npm run build 2>&1 | tail -8


kill $(lsof -ti:8800) 2>/dev/null; sleep 1; cd ~/addon-audit/ultimate-player && [...redacted 22 bytes]


sleep 3 && curl -s --max-time 10 "http://localhost:8800/" | grep -c 'SanuFlix\|r[...redacted 192 bytes]


sleep 3 && curl -s --max-time 10 "http://localhost:8800/" | grep -c 'SanuFlix\|r[...redacted 203 bytes]


sleep 3 && curl -s --max-time 10 "http://localhost:8800/api/torrents?title=Incep[...redacted 245 bytes]


cd ~/addon-audit/sanuflix && npm run build 2>&1 | grep -E "error|built|✓"


sleep 3 && curl -s --max-time 5 "http://localhost:8800/" | grep -c 'root\|SanuFl[...redacted 174 bytes]


# Also verify Flask app starts cleanly
python3 -c "import sys; sys.path.insert(0[...redacted 316 bytes]


# Test: add a well-seeded torrent, check status, then test stream
curl -s "http:[...redacted 993 bytes]


# First check if TorrServer has torrents currently
curl -s "http://127.0.0.1:809[...redacted 356 bytes]


# Check the active torrent with 479 peers - what is it?
curl -s "http://127.0.0.[...redacted 481 bytes]


# Get the full hash of active torrents
curl -s "http://127.0.0.1:8090/torrents" [...redacted 297 bytes]


cd ~/addon-audit/sanuflix && npm run build 2>&1 | tail -5


# Test the actual flow: get a TPB hash, add it, check if TorrServer can connect
[...redacted 1210 bytes]


# Try adding via Flask API
curl -s "http://localhost:8800/api/add_magnet?hash=d7[...redacted 469 bytes]


# Check ALL torrents including inactive
curl -s "http://127.0.0.1:8090/torrents"[...redacted 540 bytes]


sleep 3 && echo "=== Test stream (should return fast now) ===" && time curl -sI [...redacted 99 bytes]


# Check what 2Embed's page actually returns
curl -s --max-time 10 "https://www.2[...redacted 242 bytes]


# Clean up TorrServer - remove all inactive torrents
curl -s "http://127.0.0.1:8[...redacted 741 bytes]


kill $(lsof -ti:8800) 2>/dev/null; sleep 1; cd ~/addon-audit/ultimate-player && [...redacted 22 bytes]


sleep 3 && curl -s --max-time 5 "http://localhost:8800/api/torrents?title=The+Ma[...redacted 360 bytes]


# Check what active torrents remain after cleanup
curl -s "http://127.0.0.1:8090[...redacted 326 bytes]


curl -sI --max-time 10 "http://localhost:8800/stream/d7a46713eaee18c746b3254b7d1[...redacted 29 bytes]


mkdir -p ~/addon-audit/free-sources && cd ~/addon-audit/free-sources
echo "=== C[...redacted 226 bytes]


echo "=== jewbmx repo ===" && find ~/addon-audit/free-sources/jewbmx-repo -type [...redacted 285 bytes]


find ~/addon-audit/free-sources/jewbmx-repo/zips -type f -name "*.py" -not -path[...redacted 22 bytes]


cd ~/addon-audit/free-sources
ls jewbmx-repo/zips/
echo "---"
# Extract scrubs v[...redacted 126 bytes]


ls ~/addon-audit/free-sources/jewbmx-repo/zips/plugin.video.scrubsv2/
echo "---"[...redacted 103 bytes]


cd ~/addon-audit/free-sources
unzip -o "jewbmx-repo/zips/plugin.video.scrubsv2/p[...redacted 107 bytes]


cd ~/addon-audit/sanuflix && npm run build 2>&1 | tail -5


sleep 3 && echo "=== Free Sources API ===" && curl -s --max-time 15 "http://loca[...redacted 418 bytes]


find ~/addon-audit -type f -name '*.py' -path '*scraper*' -not -path '*/.git/*' [...redacted 11 bytes]


find ~/addon-audit -type f -name '*.py' -path '*sources*' -not -path '*/.git/*' [...redacted 11 bytes]


find ~/addon-audit -type f -name '*.py' -path '*search*' -not -path '*/.git/*' 2[...redacted 10 bytes]


ls ~/addon-audit/free-sources/scrubs-v2/plugin.video.scrubsv2/resources/lib/sour[...redacted 23 bytes]


# Test some of the Scrubs V2 streaming sites to see what's alive
for site in "ht[...redacted 285 bytes]


# Test the 2 alive sites
echo "=== flixwave.me search ==="
curl -s --max-time 10[...redacted 378 bytes]


find /home/rurouni -maxdepth 5 -type f \( -name '*.py' -o -name '*.js' -o -name[...redacted 243 bytes]


find ~/Unspooled/services/nexstream-scraper/src -type f -name "*.js" | sort


# Check if nexstream-scraper is running
ss -tlnp | grep 3091 && echo "✅ Runnin[...redacted 242 bytes]


find /home/rurouni -maxdepth 8 -type f \( -name '*.py' -o -name '*.js' -o -name[...redacted 962 bytes]


# Find all scraper-related files under Unspooled
find /home/rurouni/Unspooled -t[...redacted 648 bytes]


find /home/rurouni/Unspooled/app/src -type f \( -name "*.kt" -o -name "*.kts" \)[...redacted 158 bytes]


find /home/rurouni/Unspooled/services/nexstream-scraper/src/config -type f 2>/de[...redacted 363 bytes]


ps aux | grep -E '(hermes|gateway)' | grep -v grep


grep -n 'TELEGRAM_ALLOWED_USERS\|GATEWAY_ALLOW_ALL_USERS\|telegram' /home/ruroun[...redacted 57 bytes]


tail -200 /home/rurouni/.hermes/logs/agent.log | grep -i -E '(unkn|oet|cells|oct[...redacted 62 bytes]


ls -la /home/rurouni/.hermes/kanban.db 2>/dev/null && file /home/rurouni/.hermes[...redacted 52 bytes]


tail -50 /home/rurouni/.hermes/logs/gateway.log | grep -E '(telegram|platform|ER[...redacted 16 bytes]


curl -s -o /dev/null -w "%{http_code}" https://api.telegram.org/bot${TELEGRAM_TO[...redacted 37 bytes]


curl -v --connect-timeout 10 https://api.telegram.org 2>&1 | head -20


python3 -c "import requests; r = requests.get('https://api.telegram.org/bot', ti[...redacted 47 bytes]


grep -r '8796348132' /home/rurouni/.hermes/.env 2>/dev/null || echo "Token not i[...redacted 7 bytes]


source /home/rurouni/.hermes/.env && curl -s -o /dev/null -w "%{http_code}" "htt[...redacted 98 bytes]


grep -E '(Starting|Connecting|platform|telegram|platforms|run with|2 platform)' [...redacted 49 bytes]


grep -E '(Starting|Connecting|platform|telegram)' /home/rurouni/.hermes/logs/age[...redacted 17 bytes]


grep -i 'octet' /home/rurouni/.hermes/logs/agent.log /home/rurouni/.hermes/logs/[...redacted 34 bytes]


python3 -c "
import subprocess
result = subprocess.run(['grep', '-a', 'octet', '[...redacted 205 bytes]


file /home/rurouni/.hermes/state-snapshots/ 2>/dev/null; ls /home/rurouni/.herme[...redacted 40 bytes]


python3 -c "
import subprocess
result = subprocess.run(['grep', '-a', 'Traceback[...redacted 162 bytes]


python3 -c "
# Check current gateway process startup messages
import subprocess
[...redacted 517 bytes]


tail -50 ~/.hermes/logs/gateway.log 2>/dev/null | grep -i "pet\|cell\|unknown me[...redacted 41 bytes]


tail -50 ~/.hermes/logs/agent.log 2>/dev/null | grep -i "pet\|cell\|unknown meth[...redacted 37 bytes]


journalctl -u llama-swap --no-pager -n 100 2>/dev/null | grep -i "unknown\|cell\[...redacted 71 bytes]


docker logs llama-swap --tail 50 2>/dev/null | grep -i "unknown\|cell\|pet\|keys[...redacted 56 bytes]


ps aux | grep -i "llama\|llama-swap" | grep -v grep


journalctl -u llama-swap --no-pager -n 200 2>/dev/null | tail -100 || echo "no j[...redacted 17 bytes]


tail -200 /home/rurouni/.hermes/logs/gateway.log 2>/dev/null | grep -i "500\|err[...redacted 37 bytes]


curl -s http://localhost:9292/v1/models | python3 -m json.tool 2>/dev/null || ec[...redacted 31 bytes]


tail -500 /home/rurouni/.hermes/logs/gateway.log 2>/dev/null | grep -i "error\|5[...redacted 45 bytes]


find /home/rurouni -maxdepth 5 -type d   -not -path '*/node_modules/*'   -not -[...redacted 701 bytes]


find /home/rurouni -maxdepth 5 -type f \( -name 'ultimate*.py' -o -name 'ultima[...redacted 559 bytes]


ls -la /home/rurouni/.hermes/projects/nexstream/
echo "==="
find /home/rurouni/.[...redacted 667 bytes]


ls -la /home/rurouni/Scraper\ Suite/
echo "==="
find /home/rurouni/Scraper\ Suit[...redacted 321 bytes]


cd /home/rurouni/Scraper\ Suite/free-scraper && npm install 2>&1 | tail -5


cd /home/rurouni/Scraper\ Suite/free-scraper && node src/index.js 2>&1


sleep 3 && curl -s --max-time 5 "http://localhost:3092/health" && echo "" && cur[...redacted 162 bytes]


# Test the resolve endpoint
curl -s --max-time 15 "http://localhost:3092/resolve[...redacted 239 bytes]


kill $(lsof -ti:8800) 2>/dev/null; sleep 1; cd ~/addon-audit/ultimate-player && [...redacted 22 bytes]


sleep 3 && curl -s --max-time 20 "http://localhost:8800/api/free_sources?title=T[...redacted 421 bytes]


# Test free-scraper directly with different extractors
echo "=== StreamTape ==="[...redacted 811 bytes]


mkdir -p ~/addon-audit/research
cd ~/addon-audit/research
git clone --depth 1 h[...redacted 141 bytes]


echo "=== vidsrc-scraper ===" && find ~/addon-audit/research/vidsrc-scraper -typ[...redacted 182 bytes]


cd /home/rurouni/Scraper\ Suite/free-scraper && npm install playwright axios che[...redacted 33 bytes]


cd /home/rurouni/Scraper\ Suite/free-scraper && npx playwright install chromium [...redacted 14 bytes]


kill $(lsof -ti:3092) 2>/dev/null; sleep 1; cd /home/rurouni/Scraper\ Suite/free[...redacted 34 bytes]


sleep 3 && curl -s --max-time 5 "http://localhost:3092/health" && echo "" && ech[...redacted 438 bytes]


# Check what vidsrc.to actually returns
curl -sI --max-time 10 "https://vidsrc.t[...redacted 122 bytes]


# Test Playwright extractor directly
cd /home/rurouni/Scraper\ Suite/free-scrape[...redacted 1275 bytes]


cd /home/rurouni/Scraper\ Suite/free-scraper && node -e "
import { chromium } fr[...redacted 880 bytes]


# Check what 2embed actually serves
curl -s --max-time 10 "https://www.2embed.cc[...redacted 31 bytes]


cd /home/rurouni/Scraper\ Suite/free-scraper && npm install playwright-extra pup[...redacted 42 bytes]


cd /home/rurouni/Scraper\ Suite/free-scraper && npm install puppeteer-extra pupp[...redacted 41 bytes]


cd /home/rurouni/Scraper\ Suite/free-scraper && node -e "
import puppeteer from [...redacted 1022 bytes]


cd /home/rurouni/Scraper\ Suite/free-scraper && npm install puppeteer-core puppe[...redacted 19 bytes]


cd /home/rurouni/Scraper\ Suite/free-scraper && node -e "
import puppeteer from [...redacted 1415 bytes]


curl -s --max-time 5 "http://localhost:3092/health" && echo "" && curl -s --max-[...redacted 234 bytes]


python3 /data/tmp/hermes-verify-free-scraper.py 2>&1 && rm -f /data/tmp/hermes-v[...redacted 21 bytes]


# Check the APK analysis files the user has from reverse engineering
find /home/[...redacted 277 bytes]


# Search for scraper/torrent/provider related files in the decompiled sources
gr[...redacted 218 bytes]


grep -rl "scraper\|Scraper\|provider\|Provider\|instantAvailability\|addMagnet\|[...redacted 587 bytes]


# Check what scraper-related files exist in the Strix analysis output
find /home[...redacted 513 bytes]


# Search for RD API endpoints in all decompiled sources
grep -roh "api\.real-deb[...redacted 474 bytes]


# Check if we have CloudStream or any open-source scraper references
find /home/[...redacted 245 bytes]


# Decode the base64 cache filenames to understand the API
echo "YXBpX2NvbGxlY3Rp[...redacted 289 bytes]


cd ~/addon-audit/research && git clone --depth 1 https://github.com/TheBeastLT/t[...redacted 208 bytes]


ls ~/addon-audit/research/torrentio-scraper/catalogs/
echo "==="
find ~/addon-au[...redacted 54 bytes]


kill $(lsof -ti:8800) 2>/dev/null; sleep 1; cd ~/addon-audit/ultimate-player && [...redacted 22 bytes]


sleep 3 && curl -s --max-time 30 "http://localhost:8800/api/scrape?title=The+Mat[...redacted 365 bytes]


# Test each scraper individually
echo "=== 1337x ===" && curl -s --max-time 20 "[...redacted 466 bytes]


# Check actual 1337x HTML structure
curl -s --max-time 20 "https://1337x.to/sear[...redacted 363 bytes]


curl -s --max-time 20 "https://1337x.to/search/The+Matrix/1/" 2>&1 | head -c 300


cd /home/rurouni/Unspooled/services/nexstream-scraper && npm install nyaapi 2>&1[...redacted 10 bytes]


kill $(lsof -ti:3091) 2>/dev/null; sleep 1; cd /home/rurouni/Unspooled/services/[...redacted 43 bytes]


sleep 5 && echo "=== Health ===" && curl -s --max-time 5 "http://localhost:3091/[...redacted 1018 bytes]


# Test individual scrapers
echo "=== YTS ===" && curl -s --max-time 15 "https://[...redacted 589 bytes]


echo "=== nexstream scraper ===" && curl -s --max-time 5 "http://localhost:3091/[...redacted 616 bytes]


python3 /data/tmp/hermes-verify-ultimate.py 2>&1 && rm -f /data/tmp/hermes-verif[...redacted 13 bytes]


mkdir -p /home/rurouni/ultimate-scraper/src/scrapers /home/rurouni/ultimate-scra[...redacted 930 bytes]


cd /home/rurouni/ultimate-scraper && npm install 2>&1 | tail -3


cd /home/rurouni/ultimate-scraper && node src/index.js 2>&1


sleep 3 && curl -s --max-time 5 "http://localhost:3093/health" 2>&1 | head -c 10[...redacted 288 bytes]


ss -tlnp | grep 3093 && echo "Running" || echo "Not running"
# Check if there's [...redacted 154 bytes]


cd /home/rurouni/ultimate-scraper && npm install node-cache 2>&1 | tail -3


sleep 3 && curl -s --max-time 5 "http://localhost:3093/health" 2>&1 | head -c 80[...redacted 187 bytes]


ss -tlnp | grep 3093 && echo "Running" || echo "Not running"
# Try health check [...redacted 75 bytes]


cd /home/rurouni/ultimate-scraper && timeout 5 node src/index.js 2>&1 || true


sleep 3 && echo "=== Health ===" && curl -s --max-time 5 "http://localhost:3093/[...redacted 387 bytes]


ss -tlnp | grep 3093 && echo "Running" || echo "Not running"
# Try running in fo[...redacted 160 bytes]


sleep 3 && curl -s --max-time 5 "http://localhost:3093/health" 2>&1 && echo "" &[...redacted 174 bytes]


echo "=== Stremio endpoint ===" && curl -s --max-time 60 "http://localhost:3093/[...redacted 533 bytes]


python3 /data/tmp/hermes-verify-standalone.py 2>&1 && rm -f /data/tmp/hermes-ver[...redacted 17 bytes]


# Kill services we don't need (frontends)
kill $(lsof -ti:8800) 2>/dev/null
kill[...redacted 251 bytes]


curl -s --max-time 60 'http://localhost:3093/api/scrape?title=The+Matrix' | pyth[...redacted 152 bytes]


curl -s --max-time 60 'http://localhost:3093/api/scrape?title=Naruto' | python3 [...redacted 148 bytes]


curl -s --max-time 60 'http://localhost:3093/api/scrape?title=Breaking+Bad' | py[...redacted 185 bytes]


curl -s --max-time 60 'http://localhost:3093/api/scrape?title=Dune' | python3 -c[...redacted 177 bytes]


cd /home/rurouni/Scraper\ Suite/free-scraper && node src/index.js 2>&1


sleep 3 && curl -s --max-time 5 "http://localhost:3092/health" 2>&1 && echo " [...redacted 25 bytes]


cd /home/rurouni/ultimate-scraper && node src/index.js 2>&1


sleep 3 && echo "=== Health ===" && curl -s --max-time 5 "http://localhost:3091/[...redacted 1166 bytes]


kill $(lsof -ti:3091) 2>/dev/null
sleep 2
ss -tlnp | grep 3091 && echo "Still ru[...redacted 26 bytes]


sleep 3 && echo "=== Health ===" && curl -s --max-time 5 "http://localhost:3091/[...redacted 844 bytes]


python3 /data/tmp/hermes-verify-unified.py 2>&1 && rm -f /data/tmp/hermes-verify[...redacted 11 bytes]


echo "=== Final verification ==="
echo "Port 3091 (ultimate scraper):"
curl -s -[...redacted 821 bytes]


python3 /data/tmp/hermes-verify-final.py 2>&1 && rm -f /data/tmp/hermes-verify-f[...redacted 7 bytes]


wc -l /home/rurouni/ultimate-scraper/src/index.js /home/rurouni/ultimate-scraper[...redacted 540 bytes]


ssh raymond@192.168.1.111 bash -c 'pactl list short sinks 2>/dev/null; echo "---[...redacted 216 bytes]


ssh raymond@192.168.1.111 bash -c 'ls /proc/asound/cards 2>/dev/null; echo "---"[...redacted 176 bytes]


ssh raymond@192.168.1.111 bash -c '
echo "=== sink volumes ==="
pactl list sinks[...redacted 371 bytes]


ssh raymond@192.168.1.111 bash -c '
# Check if it\'s a KDE-specific issue
echo "[...redacted 511 bytes]


ssh raymond@192.168.1.111 bash -c 'pactl list sinks short'


ssh raymond@192.168.1.111 bash -c 'pamixer --get-volume'


ssh raymond@192.168.1.111 bash -c 'pamixer --get-mute'


ssh raymond@192.168.1.111 'pactl list sinks short'


ssh raymond@192.168.1.111 'which pamixer 2>/dev/null || which pactl 2>/dev/null [...redacted 25 bytes]


ssh raymond@192.168.1.111 'pactl set-sink-mute 59 toggle'


curl -s https://api.real-debrid.com/rest/1.0/torrents/instantAvailability/aaaaaa[...redacted 50 bytes]


ls /home/rurouni/ultimate-scraper/node_modules/cheerio/package.json 2>/dev/null [...redacted 59 bytes]


cat /home/rurouni/ultimate-scraper/.env 2>/dev/null || echo "NO .env file"


cd /home/rurouni/ultimate-scraper && npm install cheerio 2>&1 | tail -3


cd /home/rurouni/ultimate-scraper && timeout 8 node src/index.js 2>&1 || true


kill $(lsof -t -i:3091) 2>/dev/null; sleep 1; cd /home/rurouni/ultimate-scraper [...redacted 43 bytes]


cd /home/rurouni/ultimate-scraper && node src/index.js


curl -s "http://127.0.0.1:3091/api/scrape?title=Naruto" | jq '{total, sources: [[...redacted 136 bytes]


echo "=== Cache test (2nd call should be instant) ===" && time curl -s "http://1[...redacted 315 bytes]


curl -s "http://127.0.0.1:3091/api/scrape?title=Inception" | jq '[.streams[] | s[...redacted 133 bytes]


curl -s "http://127.0.0.1:3091/api/config" | jq .version && echo "---" && curl -[...redacted 162 bytes]


curl -s "http://127.0.0.1:3091/stream/movie/tt0133093.json" | python3 -c "import[...redacted 365 bytes]


curl -s --max-time 15 "http://127.0.0.1:3091/api/rd/resolve?hash=aaaaaaaaaaaaaaa[...redacted 33 bytes]


find /home/rurouni/ultimate-scraper -maxdepth 3 -not -path '*/node_modules/*' -n[...redacted 26 bytes]


ls -la /home/rurouni/ultimate-scraper/src/ && echo "---" && ls -la /home/rurouni[...redacted 98 bytes]


ls -la /home/rurouni/ultimate-scraper/src/routes/ 2>&1; echo "---"; grep -rn "ht[...redacted 208 bytes]


grep -rn "from.*config\|import.*config\|require.*config" /home/rurouni/ultimate-[...redacted 52 bytes]


grep -n "config\." /home/rurouni/ultimate-scraper/src/scrapers/ultimate.js


rm /home/rurouni/ultimate-scraper/src/http-client.js && rmdir /home/rurouni/ulti[...redacted 81 bytes]


pkill -f "node src/index.js" -e 2>/dev/null; sleep 1; cd /home/rurouni/ultimate-[...redacted 51 bytes]


cd /home/rurouni/ultimate-scraper && timeout 6 node src/index.js 2>&1


find /home/rurouni/ultimate-scraper -maxdepth 3 -not -path '*/node_modules/*' -n[...redacted 298 bytes]


grep -n "'4.0.0'" /home/rurouni/ultimate-scraper/src/index.js


cd /home/rurouni/ultimate-scraper && node src/index.js


sleep 2; curl -s "http://127.0.0.1:3091/config" | jq '{version, scrapers, debrid[...redacted 88 bytes]


pkill -9 -f "node src/index.js" 2>/dev/null; sleep 1; fuser -k 3091/tcp 2>/dev/n[...redacted 31 bytes]


sleep 2 && curl -s "http://127.0.0.1:3091/config" | jq .version && curl -s "http[...redacted 39 bytes]


wc -l /home/rurouni/ultimate-scraper/src/*.js /home/rurouni/ultimate-scraper/src[...redacted 31 bytes]


ls -la /home/rurouni/ultimate-scraper/.env 2>/dev/null && cat /home/rurouni/ulti[...redacted 98 bytes]


cd /home/rurouni/ultimate-scraper && npm test 2>&1 | tail -50


python3 ~/.hermes/scripts/repo-map.py /home/rurouni/ultimate-scraper --budget 15[...redacted 2 bytes]


cd /home/rurouni/ultimate-scraper && git status --short && echo '--- branch' && [...redacted 73 bytes]


cd /home/rurouni/ultimate-scraper && npm test


cd /home/rurouni/ultimate-scraper && PORT=3991 timeout 5 node src/server.js 2>&1[...redacted 8 bytes]


cd /home/rurouni/ultimate-scraper && npm ls --depth=0 --omit=dev


cd /home/rurouni/ultimate-scraper && PORT=3991 node src/server.js


sleep 1; curl -s -o /tmp/us_health.json -w '%{http_code}\n' http://127.0.0.1:399[...redacted 46 bytes]


sleep 1; curl -s -o /tmp/us_config.json -w '%{http_code}\n' http://127.0.0.1:399[...redacted 53 bytes]


sleep 1; curl -s -o /tmp/us_resolve.json -w '%{http_code}\n' 'http://127.0.0.1:3[...redacted 82 bytes]


sleep 1; curl -s -o /tmp/us_manifest.json -w '%{http_code}\n' http://127.0.0.1:3[...redacted 78 bytes]


curl -s 'http://127.0.0.1:3991/api/scrape?title=Inception' | jq '{keys: keys, to[...redacted 90 bytes]


curl -s 'http://127.0.0.1:3991/api/scrape?title=Naruto' | jq '{keys: keys, total[...redacted 111 bytes]


cd /home/rurouni/ultimate-scraper && curl -s 'http://127.0.0.1:3991/api/scrape?t[...redacted 138 bytes]


python3 - <<'PY'
import urllib.request
html=urllib.request.urlopen('https://api.[...redacted 157 bytes]


python3 - <<'PY'
import urllib.request,re
html=urllib.request.urlopen('https://a[...redacted 263 bytes]


python3 - <<'PY'
from pathlib import Path
for line in Path('/home/rurouni/ultima[...redacted 267 bytes]


cd /home/rurouni/ultimate-scraper && node --check src/routes/resolve.routes.js &[...redacted 126 bytes]


sleep 1; curl -s http://127.0.0.1:3991/api/health | jq .


sleep 1; curl -s http://127.0.0.1:3991/api/health/config | jq .


sleep 1; curl -s http://127.0.0.1:3991/manifest.json | jq '{version, id, resourc[...redacted 4 bytes]


sleep 1; curl -s -o /tmp/resolve_check.json -w '%{http_code}\n' 'http://127.0.0.[...redacted 122 bytes]


sleep 1; curl -s 'http://127.0.0.1:3991/api/scrape?type=movie&id=tt0133093' | jq[...redacted 84 bytes]


cd '/home/rurouni/Scraper Suite/free-scraper' && npm start


cd /home/rurouni/ultimate-scraper && PORT=3991 node src/server.js


sleep 2; curl -s http://127.0.0.1:3991/api/health/config | jq .


sleep 2; curl -s -o /tmp/resolve_check.json -w '%{http_code}\n' 'http://127.0.0.[...redacted 122 bytes]


sleep 2; curl -s 'http://127.0.0.1:3991/api/scrape?type=movie&id=tt0133093' | jq[...redacted 130 bytes]


sleep 2; curl -s http://127.0.0.1:3991/manifest.json | jq '{version, id, resourc[...redacted 4 bytes]


cd /home/rurouni/ultimate-scraper && npm test


python3 - <<'PY'
from pathlib import Path
p=Path('/home/rurouni/ultimate-scraper[...redacted 348 bytes]


cd /home/rurouni/ultimate-scraper && npm start


sleep 1; curl -s http://127.0.0.1:3091/api/health/config | jq .


sleep 1; curl -s 'http://127.0.0.1:3091/api/scrape?type=movie&id=tt0133093' | jq[...redacted 110 bytes]


sleep 1; curl -s -o /tmp/resolve_check_3091.json -w '%{http_code}\n' 'http://127[...redacted 137 bytes]


python3 ~/.hermes/scripts/repo-map.py /home/rurouni/Unspooled --budget 1800 --de[...redacted 5 bytes]


cd /home/rurouni/ultimate-scraper && search_files_dummy=0; node -e "import('./sr[...redacted 68 bytes]


cd /home/rurouni/Unspooled && ./gradlew :app:compileDebugKotlin


cd /home/rurouni/Unspooled && ./gradlew :app:assembleDebug


cd /home/rurouni/Unspooled && git diff -- app/build.gradle.kts app/src/main/java[...redacted 162 bytes]


cd /home/rurouni/Unspooled && git status --short


cd /home/rurouni/Unspooled && ./gradlew :app:testDebugUnitTest


cd /home/rurouni/Unspooled && ./gradlew :app:compileDebugKotlin :app:testDebugUn[...redacted 6 bytes]


cd /home/rurouni/Unspooled && git status --short app/build.gradle.kts app/src/ma[...redacted 151 bytes]


cd /home/rurouni/Unspooled && stat -c '%n %s bytes' app/build/outputs/apk/debug/[...redacted 13 bytes]


npm install -g agent-browser 2>&1 | tail -5


which agent-browser && agent-browser --version 2>&1 | head -3


cp -a ~/.hermes/skills ~/.hermes/skills.backup.$(date +%Y%m%d-%H%M%S) && echo "B[...redacted 50 bytes]


ls -la ~/.hermes/skills/ | head -50 && echo "---" && ls -la ~/.hermes/skills/*/S[...redacted 95 bytes]


for dir in ~/.hermes/skills/*/; do basename=$(basename "$dir"); echo "=== $basen[...redacted 169 bytes]


hermes skills --help 2>/dev/null || echo "no skills subcommand" && hermes --help[...redacted 16 bytes]


hermes skills config --help 2>&1 | head -30


cd ~/.hermes && python3 -c "
import yaml

with open('config.yaml') as f:
    con[...redacted 3192 bytes]


# Create archive directory for deleted skills
ARCHIVE_DIR=~/.hermes/skills-archi[...redacted 1330 bytes]


# Archive more deleted skills
ARCHIVE_DIR=~/.hermes/skills-archived-20260703-104[...redacted 3524 bytes]


echo "=== Skills directory structure after cleanup ===" && for dir in ~/.hermes/[...redacted 440 bytes]


cd ~/.hermes && python3 -c "
import yaml

with open('config.yaml') as f:
    con[...redacted 1336 bytes]


cd ~/.hermes && python3 -c "
import yaml
with open('config.yaml') as f:
    conf[...redacted 179 bytes]


# Check for stale empty directories in skills/
echo "=== Checking for potential [...redacted 783 bytes]


find /home/rurouni/ultimate-scraper -maxdepth 3 -type f | head -120


find /home/rurouni/ultimate-scraper/src -type f | sort


ls -la /home/rurouni/ultimate-scraper/.gitignore 2>/dev/null && cat /home/ruroun[...redacted 29 bytes]


cd /home/rurouni/ultimate-scraper && npm test 2>&1


find /home/rurouni/Scraper\ Suite -maxdepth 3 -type f -not -path '*/node_modules[...redacted 32 bytes]


ls -la "/home/rurouni/Scraper Suite/free-scraper/"


find "/home/rurouni/Scraper Suite/free-scraper/src" -type f 2>/dev/null | sort


ls "/home/rurouni/apk-analysis/scraper-engine/extractors/" | head -50


ls "/home/rurouni/apk-analysis/scraper-engine/extractors/" | wc -l


find /home/rurouni/apk-analysis -type d -name "extractors" 2>/dev/null | head -5


find /home/rurouni/apk-analysis -maxdepth 5 -name "*.kt" -path "*/extractor*" 2>[...redacted 20 bytes]


ls "/home/rurouni/apk-analysis/streamflix-source/app/src/main/java/com/streamfli[...redacted 39 bytes]


ls "/home/rurouni/apk-analysis/streamflix-source/app/src/main/java/com/streamfli[...redacted 42 bytes]


ls "/home/rurouni/apk-analysis/streamflix-source/app/src/main/java/com/streamfli[...redacted 50 bytes]


ls "/home/rurouni/apk-analysis/streamflix-source/app/src/main/java/com/streamfli[...redacted 53 bytes]


ls "/home/rurouni/apk-analysis/streamflix-source/app/src/main/java/com/streamfli[...redacted 41 bytes]


cd /home/rurouni/ultimate-scraper && node --test src/test/serverRoutes.test.js 2[...redacted 3 bytes]


cd /home/rurouni/ultimate-scraper && node --test src/test/*.test.js 2>&1


cd /home/rurouni/ultimate-scraper && timeout 5 node src/server.js 2>&1 || true


cd /home/rurouni/ultimate-scraper && node src/server.js


curl -s http://127.0.0.1:3091/manifest.json | python3 -m json.tool 2>&1


curl -s http://127.0.0.1:3091/api/health | python3 -m json.tool 2>&1


curl -s http://127.0.0.1:3091/api/embed/extractors | python3 -m json.tool 2>&1


curl -s "http://127.0.0.1:3091/api/embed/resolve?url=https://vidsrc.to/embed/mov[...redacted 35 bytes]


curl -sv http://127.0.0.1:3091/api/embed/extractors 2>&1 | tail -20


sleep 1 && echo "=== ROOT ===" && curl -s http://127.0.0.1:3091/api/embed/extrac[...redacted 104 bytes]


curl -s "http://127.0.0.1:3091/api/stream/movie/tt0133093.json" 2>&1 | python3 -[...redacted 27 bytes]


cd /home/rurouni/ultimate-scraper && npm test 2>&1


find /home/rurouni/Unspooled -maxdepth 3 -type f -name "*.kt" -o -name "*.kts" -[...redacted 140 bytes]


find /home/rurouni/Unspooled/app/src -type f -name "*.kt" 2>/dev/null | head -40


find /home/rurouni/Unspooled/app/src -type f -name "*.kt" 2>/dev/null | grep -E [...redacted 65 bytes]


find /home/rurouni/Unspooled -maxdepth 4 -type d -name "scraper" -o -name "embed[...redacted 32 bytes]


find /home/rurouni/Unspooled/app/src -name "Stream.kt" -type f 2>/dev/null


find /home/rurouni/Unspooled/app/src -name "*Source*" -o -name "*Player*" -o -na[...redacted 62 bytes]


find /home/rurouni/Unspooled/app/src -name "*.kt" -path "*/player/*" -o -name "*[...redacted 72 bytes]


find /home/rurouni/Unspooled/app/src -name "*.kt" -path "*/screens/details*" -o [...redacted 43 bytes]


cd /home/rurouni/Unspooled && JAVA_HOME=/usr/lib/jvm/java-21-openjdk-amd64 ./gra[...redacted 44 bytes]


cd /home/rurouni/Unspooled && JAVA_HOME=/usr/lib/jvm/java-21-openjdk-amd64 ./gra[...redacted 39 bytes]


ls -lh /home/rurouni/Unspooled/app/build/outputs/apk/debug/app-debug.apk 2>/dev/[...redacted 4 bytes]


cd /home/rurouni/Unspooled && JAVA_HOME=/usr/lib/jvm/java-21-openjdk-amd64 ./gra[...redacted 43 bytes]


cd /home/rurouni/Unspooled && JAVA_HOME=/usr/lib/jvm/java-21-openjdk-amd64 ./gra[...redacted 91 bytes]


cd /home/rurouni/Unspooled && JAVA_HOME=/usr/lib/jvm/java-21-openjdk-amd64 ./gra[...redacted 72 bytes]


cd /home/rurouni/ultimate-scraper && npm test 2>&1 | tail -10


cd /home/rurouni/Unspooled && JAVA_HOME=/usr/lib/jvm/java-21-openjdk-amd64 ./gra[...redacted 96 bytes]


cd /home/rurouni/ultimate-scraper && npm test 2>&1 | tail -8


cd /home/rurouni/Unspooled && JAVA_HOME=/usr/lib/jvm/java-21-openjdk-amd64 ./gra[...redacted 38 bytes]


bash /data/tmp/hermes-verify-embed-sources.sh /data/tmp/hermes-verify-result.txt[...redacted 5 bytes]


cat /data/tmp/hermes-verify-result.txt && rm -f /data/tmp/hermes-verify-embed-so[...redacted 43 bytes]


cd /home/rurouni/ultimate-scraper && npm test 2>&1 | tail -5


cd /home/rurouni/Unspooled && JAVA_HOME=/usr/lib/jvm/java-21-openjdk-amd64 ./gra[...redacted 95 bytes]


bash /data/tmp/hermes-verify.sh /data/tmp/hermes-verify-result.txt 2>&1


cat /data/tmp/hermes-verify-result.txt && rm -f /data/tmp/hermes-verify.sh /data[...redacted 29 bytes]


cd /home/rurouni/ultimate-scraper && npm test 2>&1 | tail -3


cd /home/rurouni/ultimate-scraper && timeout 4 node src/server.js 2>&1 | grep -c[...redacted 12 bytes]


cd /home/rurouni/Unspooled && JAVA_HOME=/usr/lib/jvm/java-21-openjdk-amd64 ./gra[...redacted 39 bytes]


cd /home/rurouni/Unspooled && JAVA_HOME=/usr/lib/jvm/java-21-openjdk-amd64 ./gra[...redacted 45 bytes]


cd /home/rurouni/Unspooled && JAVA_HOME=/usr/lib/jvm/java-21-openjdk-amd64 ./gra[...redacted 71 bytes]


cd /home/rurouni/Unspooled && unzip -l app/build/outputs/apk/debug/app-debug.apk[...redacted 41 bytes]


cd /home/rurouni/Unspooled && unzip -l app/build/outputs/apk/debug/app-debug.apk[...redacted 51 bytes]


grep -n "embedProvider\|alwaysAvailable\|embed-sources" /home/rurouni/Unspooled/[...redacted 69 bytes]


grep -n "@Singleton\|@Inject\|class EmbeddedEmbed" /home/rurouni/Unspooled/app/s[...redacted 81 bytes]


cd /home/rurouni/Unspooled && JAVA_HOME=/usr/lib/jvm/java-21-openjdk-amd64 ./gra[...redacted 43 bytes]


cd /home/rurouni/Unspooled && JAVA_HOME=/usr/lib/jvm/java-21-openjdk-amd64 ./gra[...redacted 44 bytes]


cd /home/rurouni/Unspooled && JAVA_HOME=/usr/lib/jvm/java-21-openjdk-amd64 ./gra[...redacted 57 bytes]


cd /home/rurouni/Unspooled && JAVA_HOME=/usr/lib/jvm/java-21-openjdk-amd64 ./gra[...redacted 85 bytes]


cd /home/rurouni/ultimate-scraper && npm test 2>&1 | grep -E "(pass|fail|duratio[...redacted 3 bytes]


ls -lh /home/rurouni/Unspooled/app/build/outputs/apk/debug/app-debug.apk && unzi[...redacted 120 bytes]


curl -s http://192.168.1.50:3091/ 2>&1 | head -3 || echo "SERVER NOT RUNNING"


ss -tlnp | grep -E "3091|3443" 2>/dev/null || netstat -tlnp 2>/dev/null | grep -[...redacted 13 bytes]


cd /home/rurouni/ultimate-scraper && node src/server.js


sleep 1 && curl -s http://192.168.1.50:3091/ 2>&1 | python3 -m json.tool 2>/dev/[...redacted 14 bytes]


curl -s "http://192.168.1.50:3091/api/embed/resolve?url=https://vidsrc.to/embed/[...redacted 55 bytes]


# Test the embed proxy with a known embed URL - it should at least try to resolv[...redacted 141 bytes]


curl -s "http://192.168.1.50:3091/api/stream/movie/tt0133093.json" | python3 -c [...redacted 143 bytes]


cd /home/rurouni/Unspooled && JAVA_HOME=/usr/lib/jvm/java-21-openjdk-amd64 ./gra[...redacted 109 bytes]


bash /data/tmp/hermes-verify-flow.sh /data/tmp/hermes-verify-flow-result.txt 2>&[...redacted 1 bytes]


cat /data/tmp/hermes-verify-flow-result.txt && rm -f /data/tmp/hermes-verify-flo[...redacted 44 bytes]


ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null root@192.168.1.5[...redacted 80 bytes]


ping -c 3 192.168.1.1 && arp -a | grep -i windows


ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o ConnectTimeou[...redacted 61 bytes]


for ip in 192.168.1.{100..254}; do (echo > /dev/tcp/$ip/22 2>/dev/null && echo "[...redacted 27 bytes]


ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o ConnectTimeou[...redacted 98 bytes]


find / -name "*.yaml" -path "*llama*" 2>/dev/null | head -20; ps aux | grep llam[...redacted 21 bytes]


ps aux | grep -E "llama|lamacpp" | grep -v grep | head -20


ls /home/rurouni/.config/llama-swap* /home/rurouni/.llama-swap* /etc/llama-swap*[...redacted 67 bytes]


/usr/local/bin/llama-server-sm75 --version 2>&1 | head -5


head -c 4096 /models/downloads/Ornith-1.0-9B-GGUF/ornith-1.0-9b-Q5_K_M.gguf | st[...redacted 71 bytes]


which python3 && python3 -c "import struct; f=open('/models/downloads/Ornith-1.0[...redacted 395 bytes]


curl -s http://127.0.0.1:5803/infos 2>/dev/null | python3 -m json.tool 2>/dev/nu[...redacted 13 bytes]


curl -s http://127.0.0.1:9292/v1/models 2>/dev/null | python3 -m json.tool 2>/de[...redacted 6 bytes]


ls -lh /models/downloads/Qwythos-9B-Claude-Mythos-5-1M-MTP-GGUF/ 2>/dev/null; ls[...redacted 119 bytes]


ls -lh /models/downloads/gemma-4-26B-A4B-it-qat-UD-Q4_K_XL.gguf 2>/dev/null; ls [...redacted 254 bytes]


python3 -u /home/rurouni/.hermes/skills/devops/local-model-fleet-management/scri[...redacted 26 bytes]


/usr/local/bin/llama-server-sm75 --help 2>&1 | grep -E "repeat-penalty|min-p|top[...redacted 159 bytes]


/usr/local/bin/llama-server-sm75 --help 2>&1 | grep -E "repeat-last-n|spec-draft[...redacted 97 bytes]


/usr/local/bin/llama-server-sm75 --help 2>&1 | grep -E "spec-type|spec-draft-n|s[...redacted 42 bytes]


df -h /models/downloads 2>/dev/null; echo "---"; du -sh /models/downloads/*/ 2>/[...redacted 18 bytes]


# Check current Qwythos file hash vs HF v3 - get its modification date
stat /mod[...redacted 125 bytes]


# Check which models are currently warm
ps aux | grep llama-server | grep -v gre[...redacted 225 bytes]


ps aux | grep llama-server | grep -v grep | awk '{for(i=1;i<=NF;i++){if($i~/^-p/[...redacted 300 bytes]


ps aux | grep "llama-server" | grep -v grep | while read line; do
  PORT=$(echo [...redacted 443 bytes]


cd /models/downloads && mkdir -p Ornith-1.0-9B-MTP-GGUF && wget -c -O Ornith-1.0[...redacted 150 bytes]


cd /models/downloads/Qwythos-9B-Claude-Mythos-5-1M-MTP-GGUF/ && mv Qwythos-9B-Cl[...redacted 268 bytes]


python3 << 'PYEOF'
import yaml

with open('/home/rurouni/.hermes/config.yaml', '[...redacted 1145 bytes]


# Verify Qwythos download integrity
ls -lh /models/downloads/Qwythos-9B-Claude-M[...redacted 465 bytes]


sleep 2 && curl -s http://127.0.0.1:9292/v1/models 2>/dev/null | python3 -m json[...redacted 17 bytes]


# Check download size so far
ls -lh /models/downloads/Ornith-1.0-9B-MTP-GGUF/Orn[...redacted 435 bytes]


ls -lh /models/downloads/Ornith-1.0-9B-MTP-GGUF/Ornith-1.0-9B-MTP-Q5_K_M.gguf
ec[...redacted 519 bytes]


# Clean up old Ornith 9B dir
rm -rf /models/downloads/Ornith-1.0-9B-GGUF/
echo "[...redacted 343 bytes]


python3 -u << 'PYEOF'
import json, subprocess, time, urllib.request

BASE = "htt[...redacted 1848 bytes]


kill -HUP $(pgrep -x llama-swap) 2>/dev/null && echo "Reloaded"
sleep 1
curl -s [...redacted 169 bytes]


python3 -u << 'PYEOF'
import json, subprocess, time, urllib.request

BASE = "htt[...redacted 1810 bytes]


python3 -c "
import yaml
with open('/home/rurouni/.config/llama-swap/config.yaml[...redacted 836 bytes]


grep -E "repeat-penalty|spec-draft-n-max" /home/rurouni/.config/llama-swap/confi[...redacted 6 bytes]


cd /models/downloads && mkdir -p Ornith-1.0-35B-MTP-APEX-GGUF && wget -c -O Orni[...redacted 180 bytes]


python3 << 'PYEOF'
import yaml

with open('/home/rurouni/.hermes/config.yaml', '[...redacted 626 bytes]


# Verify GGUF has MTP
python3 -c "
import struct
f=open('/models/downloads/Ornit[...redacted 586 bytes]


python3 -u << 'PYEOF'
import json, subprocess, time, urllib.request

BASE = "htt[...redacted 1809 bytes]


cd /models/downloads && mkdir -p Qwen3.6-35B-A3B-APEX-MTP-GGUF && wget -c -O Qwe[...redacted 186 bytes]


# Backup old Qwen file
mv /models/downloads/Qwen3.6-35B-A3B-MTP-Q4_K_M.gguf /mod[...redacted 716 bytes]


# Verify GGUF has MTP
python3 -c "
f=open('/models/downloads/Qwen3.6-35B-A3B-APE[...redacted 507 bytes]


python3 << 'PYEOF'
import json, subprocess, time, urllib.request

BASE = "http:/[...redacted 1807 bytes]


cd /models/downloads/Qwen3.6-35B-A3B-APEX-MTP-GGUF && wget -c -O Qwen3.6-35B-A3B[...redacted 122 bytes]


cd /models/downloads/Ornith-1.0-9B-MTP-GGUF && wget -c -O Ornith-1.0-9B-MTP-Q6_K[...redacted 111 bytes]


kill -HUP $(pgrep -x llama-swap) && echo "llama-swap reloaded"
sleep 1
curl -s h[...redacted 387 bytes]


python3 << 'PYEOF'
import subprocess, time, urllib.request, json

BASE = "http:/[...redacted 1815 bytes]


# Restore Qwen backup
mv /models/downloads/Qwen3.6-35B-A3B-MTP-Q4_K_M.gguf.bak /[...redacted 293 bytes]


cd /models/downloads/Ornith-1.0-9B-MTP-GGUF && wget -c -O Ornith-1.0-9B-MTP-Q5_K[...redacted 115 bytes]


kill -HUP $(pgrep -x llama-swap) && echo "llama-swap reloaded"
sleep 1
curl -s h[...redacted 348 bytes]


wget -c -O /models/downloads/Ornith-1.0-9B-MTP-GGUF/Ornith-1.0-9B-MTP-Q5_K_M.ggu[...redacted 109 bytes]


kill -HUP $(pgrep -x llama-swap) && echo "llama-swap reloaded"
sleep 1
curl -s h[...redacted 965 bytes]


python3 << 'PYEOF'
import time, urllib.request, json
BASE = "http://127.0.0.1:92[...redacted 715 bytes]


llama-cli --version 2>&1; ls -la /models/llama-swap/llama.cpp 2>/dev/null || ech[...redacted 46 bytes]


find /usr/local /usr/bin /home -name "llama-swap" -o -name "llama-server" -o -na[...redacted 137 bytes]


/home/rurouni/src/llama.cpp-master/build-sm75/bin/llama-server --version 2>&1; l[...redacted 63 bytes]


cd /home/rurouni/src/llama.cpp-master && git log --oneline -20 2>/dev/null || ec[...redacted 11 bytes]


grep -r "llama.cpp\|llama-server\|llama-cli\|build-sm75\|build-cuda" ~/.config/l[...redacted 44 bytes]


file /usr/local/bin/llama-server-sm75; ls -la /usr/local/bin/llama-server-sm75; [...redacted 47 bytes]


ls -lh /models/downloads/Ornith-1.0-35B-MTP-APEX-GGUF/ 2>/dev/null; ls -lh /mode[...redacted 75 bytes]


wget -c -O /models/downloads/Ornith-1.0-35B-MTP-IQ4_XS-GGUF/ornith-1.0-35b-IQ4_X[...redacted 152 bytes]


ls -lh /models/downloads/Ornith-1.0-35B-MTP-IQ4_XS-GGUF/ornith-1.0-35b-IQ4_XS-MT[...redacted 19 bytes]


curl -s -X POST http://127.0.0.1:9292/reload 2>&1 || pkill -SIGHUP llama-swap 2>[...redacted 91 bytes]


pgrep -f llama-swap 2>&1 && kill -HUP $(pgrep -f "llama-swap" | head -1) 2>&1; s[...redacted 198 bytes]


ps aux | grep llama-server | grep -v grep | head -10


curl -s http://127.0.0.1:9292/v1/chat/completions \
  -H "Content-Type: applicat[...redacted 201 bytes]


curl -s http://127.0.0.1:9292/v1/chat/completions \
  -H "Content-Type: applicat[...redacted 755 bytes]


nvidia-smi --query-gpu=memory.total,memory.used,memory.free --format=csv,noheade[...redacted 6 bytes]


curl -s http://127.0.0.1:9292/v1/chat/completions \
  -H "Content-Type: applicat[...redacted 431 bytes]


curl -s http://localhost:3091/manifest.json | python3 -m json.tool 2>/dev/null |[...redacted 20 bytes]


curl -s http://localhost:3091/stream/movie/tt0133093.json 2>/dev/null | head -c [...redacted 25 bytes]


curl -s http://localhost:3091/stream/movie/tt0133093.json 2>/dev/null | python3 [...redacted 285 bytes]


cd /home/rurouni/ultimate-scraper && pkill -f "node src/server.js" 2>/dev/null; [...redacted 29 bytes]


cd /home/rurouni/ultimate-scraper && curl -s http://localhost:3091/stream/movie/[...redacted 970 bytes]


cd /home/rurouni/ultimate-scraper && curl -s http://localhost:3091/stream/movie/[...redacted 408 bytes]


cd /home/rurouni/ultimate-scraper && curl -s http://localhost:3091/stream/movie/[...redacted 998 bytes]


cd /home/rurouni/ultimate-scraper && curl -s http://localhost:3091/stream/movie/[...redacted 668 bytes]


sleep 2 && echo "--- Manifest ---" && curl -s http://localhost:3091/manifest.jso[...redacted 24 bytes]


curl -s http://localhost:3091/stream/movie/tt0133093.json | python3 -c "
import [...redacted 1408 bytes]


pkill -f "node src/server.js" 2>/dev/null; sleep 1; node src/server.js


sleep 2 && curl -s http://localhost:3091/stream/movie/tt0133093.json | python3 -[...redacted 895 bytes]


curl -s http://localhost:3091/stream/movie/tt0133093.json | python3 -c "
import [...redacted 419 bytes]


curl -s http://localhost:3091/health | python3 -m json.tool


grep -i version /home/rurouni/ultimate-scraper/src/config/default-config.json 2>[...redacted 29 bytes]


sleep 2 && echo "=== Manifest ===" && curl -s http://localhost:3091/manifest.jso[...redacted 1005 bytes]


curl -s http://localhost:3091/manifest.json | python3 -c "import json,sys; d=jso[...redacted 64 bytes]


which cloudflared 2>/dev/null && echo "cloudflared ✓" || echo "cloudflared ✗[...redacted 141 bytes]


tailscale funnel --help 2>&1 | head -5 || echo "no funnel support"


curl -s http://localhost:3089/ 2>/dev/null | head -20 || echo "nothing reachable[...redacted 81 bytes]


curl -s http://localhost:3089/health 2>/dev/null | head -20
echo "---"
curl -s h[...redacted 193 bytes]


sudo tailscale funnel 3089 off 2>&1 && echo "--- removed old ---" && sudo tailsc[...redacted 20 bytes]


sudo tailscale funnel reset 2>&1 && echo "--- reset done ---" && sudo tailscale [...redacted 21 bytes]


curl -s https://debian-ai.tailf83ed5.ts.net/manifest.json | python3 -m json.tool[...redacted 11 bytes]


curl -s https://debian-ai.tailf83ed5.ts.net/stream/movie/tt0133093.json | python[...redacted 383 bytes]


cd /home/rurouni/ultimate-scraper && node src/server.js


sleep 2 && curl -s https://debian-ai.tailf83ed5.ts.net/stream/movie/tt0133093.js[...redacted 1309 bytes]


curl -s https://debian-ai.tailf83ed5.ts.net/stream/movie/tt0133093.json | python[...redacted 1096 bytes]


sleep 2 && curl -s https://debian-ai.tailf83ed5.ts.net/stream/movie/tt0133093.js[...redacted 861 bytes]


sleep 2 && curl -s https://debian-ai.tailf83ed5.ts.net/stream/movie/tt0133093.js[...redacted 2169 bytes]


cd /home/rurouni/ultimate-scraper && node src/server.js 2>&1


sleep 2 && echo "--- Provider status ---" && curl -s https://debian-ai.tailf83ed[...redacted 1335 bytes]


sleep 2 && curl -s https://debian-ai.tailf83ed5.ts.net/stream/movie/tt0133093.js[...redacted 494 bytes]


curl -s https://debian-ai.tailf83ed5.ts.net/stream/movie/tt0133093.json > /dev/n[...redacted 158 bytes]


cd /home/rurouni/ultimate-scraper && node -e "
import { http } from './src/provi[...redacted 891 bytes]


curl -s http://localhost:3091/manifest.json | python3 -c "import json,sys; d=jso[...redacted 74 bytes]


curl -s http://localhost:3091/manifest.json | python3 -c "import json,sys;d=json[...redacted 82 bytes]


sleep 2 && echo "Testing with timeout + embed resolution..." && curl -s https://[...redacted 1054 bytes]


which torrserver 2>/dev/null && echo "torrserver ✓" || echo "torrserver ✗"
c[...redacted 213 bytes]


curl -s https://debian-ai.tailf83ed5.ts.net/stream/movie/tt0133093.json | python[...redacted 537 bytes]


curl -s https://api.github.com/repos/YouROK/TorrServer/releases/latest | python3[...redacted 236 bytes]


cd /home/rurouni && curl -L -o /tmp/torrserver https://github.com/YouROK/TorrSer[...redacted 167 bytes]


torrserver -d /home/rurouni/torrserver-data -p 8090 -l 0.0.0.0


sleep 2 && curl -s http://localhost:8090/echo && echo "" && echo "TorrServer run[...redacted 9 bytes]


/usr/local/bin/torrserver --help 2>&1 | head -5
echo "---"
ldd /usr/local/bin/to[...redacted 94 bytes]


/usr/local/bin/torrserver --port 8090 --ip 0.0.0.0 --path /home/rurouni/torrserv[...redacted 23 bytes]


sleep 2 && curl -s http://localhost:8090/echo && echo "" && echo "TorrServer ✅[...redacted 1 bytes]


mkdir -p /home/rurouni/torrserver-data && ls -la /home/rurouni/torrserver-data


/usr/local/bin/torrserver --port 8090 --ip 0.0.0.0 --path /home/rurouni/torrserv[...redacted 18 bytes]


sleep 2 && curl -s http://localhost:8090/echo 2>&1 && echo "" && echo "TorrServe[...redacted 6 bytes]


cd /home/rurouni/ultimate-scraper && node src/server.js


sleep 3 && echo "=== Manifest ===" && curl -s https://debian-ai.tailf83ed5.ts.ne[...redacted 1147 bytes]


# Test TorrServer directly first
curl -s -X POST http://localhost:8090/torrents [...redacted 265 bytes]


# Test our TorrServer proxy endpoint
curl -s -o /dev/null -w "HTTP %{http_code} [...redacted 150 bytes]


curl -s https://debian-ai.tailf83ed5.ts.net/stream/movie/tt0133093.json | python[...redacted 849 bytes]


sleep 2 && curl -s https://debian-ai.tailf83ed5.ts.net/stream/movie/tt0133093.js[...redacted 544 bytes]


sleep 2 && curl -s https://debian-ai.tailf83ed5.ts.net/stream/movie/tt0133093.js[...redacted 418 bytes]


curl -s https://debian-ai.tailf83ed5.ts.net/ | python3 -c "import json,sys;d=jso[...redacted 93 bytes]


curl -s https://debian-ai.tailf83ed5.ts.net/ | python3 -c "import json,sys;d=jso[...redacted 153 bytes]


curl -s http://localhost:3091/ | python3 -c "import json,sys;d=json.load(sys.std[...redacted 59 bytes]


curl -s http://127.0.0.1:8090/torrents?action=list 2>&1 | head -50


# Check TorrServer version
curl -s http://127.0.0.1:8090/echo 2>&1 | head -5
# A[...redacted 73 bytes]


# Test TorrServer API - list torrents
curl -s -X POST http://127.0.0.1:8090/torr[...redacted 79 bytes]


# Add a popular torrent (The Matrix - sintel, small 4K file) to test
curl -s -X [...redacted 270 bytes]


# Check status
sleep 5 && curl -s -X POST http://127.0.0.1:8090/torrents \
  -H [...redacted 124 bytes]


# Wait for it to be ready
sleep 10 && curl -s -X POST http://127.0.0.1:8090/torr[...redacted 171 bytes]


# Wait longer
sleep 15 && curl -s -X POST http://127.0.0.1:8090/torrents \
  -H [...redacted 148 bytes]


# Try the play endpoint to see what comes back (text/html or video)
curl -s -o /[...redacted 134 bytes]


# Check TorrServer settings
curl -s -X POST http://127.0.0.1:8090/settings \
  -[...redacted 97 bytes]


# Check if TS needs /api/ prefix for play
curl -s -o /dev/null -w "%{http_code}"[...redacted 413 bytes]