# Pi Session Launcher Piccola applicazione GUI (GTK3) per **elencare, riprendere e rinominare le sessioni di [Pi Agent](https://github.com/earendil-works/pi-mono)**. 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 `. ![icona](assets/pi-session-launcher-256.png) ## 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 ```bash ./install.sh # installa la voce di menu KDE + icone hicolor (48–512 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: ```bash 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](https://git.enne2.net/enne2/pi-session-launcher/releases/tag/v0.1.0): ```bash 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 ```bash 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/----/_.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 --hold --separate -e bash -c 'pi --session "$1"; exec bash' _ ` — il wrapper `bash -c` è più affidabile del passaggio diretto degli argomenti a Konsole; `exec bash` mantiene la shell aperta quando pi termina. ## Repository - Gitea (pubblico): https://git.enne2.net/enne2/pi-session-launcher - Release: https://git.enne2.net/enne2/pi-session-launcher/releases/tag/v0.1.0 - Clone SSH: `git clone ssh://git@git.enne2.net:222/enne2/pi-session-launcher.git` L'icona (terminale + freccia di ripristino) è stata generata con AI e verificata; è usata come icona dell'app, icona hicolor e avatar del repository.