lazyshell

Développement

lazyshell est un projet Go sans génération de code ni étape de build exotique : go build, go test, golangci-lint.

Construire et tester

$ make build   # go build -o bin/lazyshell ./cmd/lazyshell
$ make test    # go test -race ./...
$ make lint    # golangci-lint run

L'intégration continue exécute les mêmes commandes sur ubuntu-latest et macos-latest, plus un budget de performance (go test -run TestPerfBudget ./...). La version de golangci-lint est épinglée dans le workflow, pour que la CI et make lint ne puissent pas diverger.

Structure des paquets

cmd/
  lazyshell/      point d'entrée
  spike-pty/      spike pty de la phase 1 (référence, hors binaire livré)
pkg/
  app/            amorçage : charge la config, construit le SessionManager, lance gui.Run()
  session/        SessionManager : CRUD (New, Kill, List) ; Session{cmd, ptmx, scrollback,
                  status} ; Env() (au lancement) et Stats() (CPU/RSS/disque par OS)
  screen/         émulateur de terminal derrière le panneau de sortie (vim/htop/less)
  gui/            init gocui, layout, raccourcis, souris, panneaux, onglets, aide, thème,
                  notifications, stats
  tasks/          TaskManager (goroutines d'affichage et de lecture uniquement)
  agent/          détection d'état des agents IA (sans config + par hooks)
  hook/           canal de hooks autoritaire pour les sessions d'agent
  config/         config utilisateur et config de projet (lazyshell.yml)
  keys/           définition des raccourcis
  i18n/           chaînes et traductions
  version/        métadonnées --version (injectées par goreleaser)
docs/
  adr/            décisions d'architecture
  repports/       rapports d'analyse historiques

Décisions d'architecture

ADR

ROADMAP.md raconte l'histoire phase par phase : ce qui est construit, ce qui reste ouvert, et pourquoi.

Contribuer