#!/bin/bash # artemistest — instaleaza agentul subtire Artemis pe macOS sau Linux. # # curl -fsSL https://artemis2.katolab.ro/artemistest.sh | bash # # Merge la fel de pe http://10.11.90.169:8088/ sau http://vpn.katolab.ro:8088/. # # Pe calculatorul asta raman doar: fereastra, uneltele care ating discul local si # ecranul de aprobare. Bucla agentului, promptul, definitiile uneltelor, conversatiile, # knowledge base-ul, cautarea web, browserul si SSH-ul stau pe serverul de AI. # # Legatura o deschide agentul catre server, deci NU trebuie deschis niciun port aici. # Ruleaz-o din nou oricand ca sa actualizezi. set -u # De unde descarcam (portul 8088) si unde raspunde serverul Artemis (portul 7788), in # ordinea in care le incercam: reteaua (cea mai rapida), DDNS-ul de pe router, apoi # intrarile prin proxy manager (artemis2 -> :8088, artemis1 -> :7788). FISIERE="http://10.11.90.169:8088 http://vpn.katolab.ro:8088 https://artemis2.katolab.ro" SERVERE="http://10.11.90.169:7788 http://vpn.katolab.ro:7788 https://artemis1.katolab.ro" verde() { printf " \033[32m[ok]\033[0m %s\n" "$1"; } rosu() { printf " \033[31m[nu]\033[0m %s\n" "$1"; } info() { printf " \033[90m%s\033[0m\n" "$1"; } SO=$(uname -s) case "$SO" in Darwin) NUME_SO="macOS" ;; Linux) NUME_SO="Linux" ;; *) rosu "sistem necunoscut ($SO). Pe Windows: irm https://artemis2.katolab.ro/artemistest.ps1 | iex"; exit 1 ;; esac printf "\033[36m== Artemis (agent subtire) — %s ==\033[0m\n" "$NUME_SO" # ---- 1. de unde descarcam, si ce adrese raspund ---- SRV="${ARTEMIS_SRV:-}" if [ -z "$SRV" ]; then for g in $FISIERE; do if curl -fsS --max-time 6 -o /dev/null "$g/artemistest.sh" 2>/dev/null; then SRV="$g"; break; fi done fi if [ -z "$SRV" ]; then rosu "nu ajung la serverul de fisiere pe nicio adresa:" for g in $FISIERE; do info "$g"; done info "esti pe VPN, sau merge redirectionarea de pe router?" exit 1 fi active=0 for g in $SERVERE; do if curl -fsS --max-time 6 "$g/sanatate" >/dev/null 2>&1; then verde "serverul Artemis raspunde la $g"; active=$((active+1)) else info "nu ajung la $g" fi done [ "$active" -eq 0 ] && info "agentul se instaleaza oricum si se reconecteaza singur cand serverul revine." info "descarc de la: $SRV" TMP=$(mktemp -d) || exit 1 trap 'rm -rf "$TMP"' EXIT # ================================ macOS ================================ if [ "$SO" = "Darwin" ]; then DEST="/Applications" [ -w "$DEST" ] || DEST="$HOME/Applications" mkdir -p "$DEST" || { rosu "nu pot scrie in $DEST"; exit 1; } if ! curl -fL --progress-bar --max-time 600 -o "$TMP/a.tgz" "$SRV/artemistest-mac.tar.gz"; then rosu "descarcarea a esuat"; exit 1 fi tar xzf "$TMP/a.tgz" -C "$TMP" || { rosu "arhiva nu se despacheteaza"; exit 1; } [ -d "$TMP/Artemis.app" ] || { rosu "arhiva nu contine Artemis.app"; exit 1; } # daca ruleaza, il inchidem ca sa putem inlocui pachetul pkill -x artemis 2>/dev/null && info "am inchis versiunea care rula" sleep 1 rm -rf "$DEST/Artemis.app" mv "$TMP/Artemis.app" "$DEST/Artemis.app" || { rosu "nu pot instala in $DEST"; exit 1; } # Aplicatia e semnata local, nu de Apple. curl nu pune eticheta de carantina, dar daca # arhiva a trecut prin browser ar pune-o si macOS ar refuza pornirea -- deci o scoatem. xattr -dr com.apple.quarantine "$DEST/Artemis.app" 2>/dev/null codesign --force --deep --sign - "$DEST/Artemis.app" >/dev/null 2>&1 MB=$(du -sm "$DEST/Artemis.app" | cut -f1) verde "instalat: $DEST/Artemis.app (${MB} MB)" PORNESTE() { open "$DEST/Artemis.app" 2>/dev/null || info "porneste-l din $DEST"; } fi # ================================ Linux ================================ if [ "$SO" = "Linux" ]; then # WebKitGTK e motorul ferestrei; fara el aplicatia nu porneste. if ! ldconfig -p 2>/dev/null | grep -q "libwebkit2gtk-4\.1\.so\.0"; then info "instalez WebKitGTK 4.1 (cere parola de sudo)..." if command -v apt-get >/dev/null 2>&1; then sudo apt-get update -qq && sudo apt-get install -y libwebkit2gtk-4.1-0 libgtk-3-0 >/dev/null 2>&1 elif command -v dnf >/dev/null 2>&1; then sudo dnf install -y webkit2gtk4.1 gtk3 >/dev/null 2>&1 elif command -v pacman >/dev/null 2>&1; then sudo pacman -S --noconfirm webkit2gtk-4.1 gtk3 >/dev/null 2>&1 else rosu "nu recunosc gestionarul de pachete; instaleaza manual webkit2gtk 4.1 si gtk3" fi fi if ldconfig -p 2>/dev/null | grep -q "libwebkit2gtk-4\.1\.so\.0"; then verde "WebKitGTK 4.1 prezent" else rosu "WebKitGTK 4.1 lipseste — fereastra nu se va deschide" info "pe Ubuntu/Debian: sudo apt install libwebkit2gtk-4.1-0" fi BIN_DIR="$HOME/.local/bin" BIN="$BIN_DIR/artemistest" APP_DIR="$HOME/.local/share/applications" ICON_DIR="$HOME/.local/share/icons/hicolor/256x256/apps" mkdir -p "$BIN_DIR" "$APP_DIR" "$ICON_DIR" if ! curl -fL --progress-bar --max-time 600 -o "$TMP/artemistest" "$SRV/artemistest-linux"; then rosu "descarcarea a esuat"; exit 1 fi chmod +x "$TMP/artemistest" # daca ruleaza, il oprim ca sa putem inlocui fisierul pkill -x artemistest 2>/dev/null && info "am oprit instanta care rula" sleep 1 mv "$TMP/artemistest" "$BIN" || { rosu "nu pot instala in $BIN_DIR"; exit 1; } verde "instalat: $BIN ($(du -h "$BIN" | cut -f1))" ICON="utilities-terminal" if curl -fsS --max-time 30 -o "$ICON_DIR/artemis.png" "$SRV/artemis-icon.png" 2>/dev/null; then ICON="artemis" fi cat > "$APP_DIR/artemistest.desktop" </dev/null 2>&1 verde "adaugat in meniul de aplicatii" case ":$PATH:" in *":$BIN_DIR:"*) ;; *) for rc in "$HOME/.bashrc" "$HOME/.zshrc"; do [ -f "$rc" ] && ! grep -q '.local/bin' "$rc" && \ echo 'export PATH="$HOME/.local/bin:$PATH"' >> "$rc" done info "am adaugat ~/.local/bin in PATH (deschide un terminal nou)" ;; esac PORNESTE() { if [ -n "${DISPLAY:-}${WAYLAND_DISPLAY:-}" ]; then nohup "$BIN" >/dev/null 2>&1 & else info "nu vad o sesiune grafica; porneste Artemis din meniu sau cu: artemistest" fi } fi # ---- pornim ---- printf "\n" verde "gata — pornesc Artemis" info "pe calculatorul asta: fereastra + uneltele locale + aprobarile" info "pe server: bucla, promptul, uneltele de retea, browserul, conversatiile" info "niciun port deschis aici: agentul suna el serverul" printf "\n" info "la fiecare reconectare aplicatia incearca, in ordine: 10.11.90.169:7788," info "vpn.katolab.ro:7788, apoi artemis1.katolab.ro — deci merge din retea, prin VPN" info "si din afara, fara reinstalare." printf "\n" info "la prima pornire te conectezi cu contul tau. Conversatiile sunt criptate" info "cu parola ta, deci nimeni altcineva nu le poate citi — dar nici tu daca" info "pierzi parola, fiindca nu exista recuperare." printf "\n" PORNESTE