Terminal UI sperimentale per controllare XMail da riga di comando con un'interfaccia TUI basata su @pm2/blessed.
Il progetto oggi ha una base funzionante per:
- splash screen iniziale;
- dashboard TUI con area log e input comandi;
- suggerimenti comandi con
Tab; - build del bundle Node con
esbuild; - typecheck JavaScript con TypeScript in modalità
checkJs.
Non è ancora un client completo di produzione: alcuni comandi sono ancora placeholder e l'integrazione Docker/XMail va rifinita.
- Node.js 18+
- npm
Per alcune funzioni runtime:
- Docker attivo;
- accesso al socket Docker se vuoi rilevare lo stato dei container da TUI.
npm installnpm run build
npm run typecheck
npm run packageSignificato:
build: creadist/bundle.jsconesbuild;typecheck: esegue il controllo statico sui file JS senza emettere output;package: crea il binario Linuxxmail-linuxusandopkg.
Durante lo sviluppo puoi avviare l'entrypoint Node del progetto:
node entry.jsOppure:
node index.mjsSe preferisci usare il bundle generato:
npm run build
node dist/bundle.jsComandi attualmente registrati:
/help/clear/test/frontend/exit/quit
mia-tui/
├── index.mjs # entrypoint principale
├── entry.js # loader minimale
├── commands/ # handler dei comandi
├── constants/ # colori e lista comandi
├── lib/ # layout, refresh UI, suggerimenti
├── ui/ # splash e dashboard
├── global.d.ts # tipi globali minimi per checkJs
├── pm2-blessed.d.ts # dichiarazione del modulo @pm2/blessed
└── tsconfig.json # configurazione typecheck
Il progetto usa file JavaScript con:
allowJs: truecheckJs: truenoEmit: true
noEmit: true è importante: evita che TypeScript o l'IDE provino a scrivere file compilati sopra i sorgenti .js, che era la causa degli errori tipo:
Cannot write file ... because it would overwrite input file
- Il controllo stato progetto usa
docker ps. - In ambienti senza permessi Docker, la TUI parte comunque ma il check dello stato può risultare
false. - I file
index2.mjseindex3.mjssono prototipi esclusi dal typecheck.
- implementare comandi reali per
/status,/inite/frontend; - rimuovere o archiviare i prototipi non più usati;
- aggiungere test minimi per i comandi e per la logica di suggerimento;
- documentare il flusso di packaging del binario.