Files
pi-session-launcher/README.md
T

117 lines
4.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 <file sessione>`.
![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 (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:
```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/--<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
- 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.