Files

4.7 KiB
Raw Permalink Blame History

Pi Session Launcher

Piccola applicazione GUI (GTK3) per elencare, riprendere e rinominare le sessioni di Pi Agent.

Elenco tutte le sessioni salvate in ~/.pi/agent/sessions/ e, selezionandone una:

  • apre un terminale (Konsole) nella cartella di lavoro (cwd) in cui la sessione era stata avviata;
  • riprende la sessione con pi --session <file sessione>.

icona

Funzionalità

  • Elenco di tutte le sessioni, ordinate per ultima modifica (più recenti prima)
  • Per ogni sessione: primo messaggio (o nome se impostato, in grassetto), cartella di avvio, ultima modifica (tempo relativo)
  • Ripresa con doppio clic / Invio / pulsante: apre Konsole nella cwd della sessione e lancia pi --session
  • Rinomina sessione (F2): il nome è quello che pi mostra nel suo selettore (/resume)
  • Ricerca per messaggio o cartella
  • Apertura della cartella della sessione in Dolphin
  • Aggiornamento dell'elenco (Ctrl+R)
  • Eseguibile portabile singolo (vedi sotto) con icona integrata

Requisiti

  • Python 3 + PyGObject GTK3 (python3-gi, gir1.2-gtk-3.0)
  • Konsole (KDE) — fallback: xterm
  • pi nel PATH
  • Per il menu applicazioni: un ambiente desktop con supporto .desktop (es. KDE Plasma)

Installazione

./install.sh        # installa la voce di menu KDE + icone hicolor (48512 px)
./install.sh --uninstall   # rimuove la voce di menu

L'installer crea:

  • ~/.local/share/applications/it.enne2.pi-session-launcher.desktop (con StartupWMClass)
  • ~/.local/share/icons/hicolor/{48,64,128,256,512}x*/apps/it.enne2.pi-session-launcher.png

KDE Plasma/Wayland: l'icona di finestra/taskbar viene associata tramite l'app-id GTK, che deve coincidere con lo stem del file .desktop e con il nome dell'icona hicolor (it.enne2.pi-session-launcher). set_icon_from_file() da solo non basta su Wayland. Vedere main() in pi-session-launcher.py.

Avvio manuale:

python3 pi-session-launcher.py

Uso

Azione Come
Selezionare una sessione clic sulla riga
Riprendere la sessione doppio clic, Invio o pulsante Riprendi sessione
Rinominare la sessione pulsante Rinomina o F2 (nome vuoto = cancella)
Cercare digitare nel campo di ricerca (filtra per messaggio e cartella)
Aprire la cartella della sessione pulsante Apri cartella (Dolphin)
Aggiornare l'elenco pulsante Aggiorna o Ctrl+R

Le sessioni con nome (/name in pi) sono mostrate in grassetto.

Eseguibile portabile

È disponibile un eseguibile singolo Linux x86-64 (~33 MB, GTK/Python inclusi) nella release v0.1.0:

curl -L -o pi-session-launcher \
  https://git.enne2.net/attachments/513a5f44-378e-4fc7-9f9e-89f25a082d66
chmod +x pi-session-launcher
./pi-session-launcher

Build da sorgente

python3 -m pip install --user --break-system-packages pyinstaller
python3 -m PyInstaller --clean --noconfirm pi-session-launcher.spec
./dist/pi-session-launcher

Il file pi-session-launcher.spec include la potatura post-analisi, che riduce il binario da ~244 MB a ~33 MB (86%):

  • rimuove share/icons/*: l'hook PyGObject raccoglie tutti i temi icona installati sul sistema (Papirus, Breeze, Adwaita…), ma a runtime GTK usa i temi di sistema — i bundlati sono peso morto;
  • mantiene solo le lingue it/en in share/locale/ (122 → 2).

Nota: Nuitka richiede gli header python3-dev (non installabili senza sudo); PyInstaller è la via raccomandata dalla documentazione PyGObject per app GTK.

Come funziona

  • Ogni sessione è un file JSONL in ~/.pi/agent/sessions/--<percorso>--/<timestamp>_<uuid>.jsonl.
  • L'header della prima riga contiene il campo cwd (cartella di avvio).
  • Il primo messaggio utente e il nome (session_info) vengono letti dal file.
  • La rinomina appende una entry session_info al file: pi legge l'ultima entry (walk inverso), quindi l'ultima rinomina vince e un nome vuoto cancella.
  • Il lancio usa: konsole --workdir <cwd> --hold --separate -e bash -c 'pi --session "$1"; exec bash' _ <file> — il wrapper bash -c è più affidabile del passaggio diretto degli argomenti a Konsole; exec bash mantiene la shell aperta quando pi termina.

Repository

L'icona (terminale + freccia di ripristino) è stata generata con AI e verificata; è usata come icona dell'app, icona hicolor e avatar del repository.