Execute o Alembic como serviço: API harness, eventos SSE e cockpit web atrás do Caddy.
Este lab conecta @alembic/harness, @alembic/web e @alembic/infra. Você irá:
alembic serve --data-dir ~/.alembic em um droplet ou máquina local.alembic cockpit --data-dir ~/.alembic no mesmo host ou em outro.curl -X POST http://host:port/api/runs ...Pense assim… transformar um eletrodoméstico de cozinha em um restaurante: o motor permanece o mesmo, mas agora várias pessoas podem pedir e ver sua refeição sendo preparada.
createHarnessServer expõe POST /api/runs, GET /api/runs, GET /api/runs/:id e GET /api/runs/:id/events (SSE). createCockpitServer serve assets estáticos e proxy SSE para o harness. O pacote infra fornece um template Caddyfile e um exemplo Docker Compose. Nunca exponha o plano host diretamente; apenas o plano droplet deve ser público.
# iniciar serviços alembic serve --data-dir ~/.alembic & alembic cockpit --data-dir ~/.alembic & # criar uma run curl -X POST http://localhost:8787/api/runs -H 'Content-Type: application/json' -d '{"goal":"Add a /health endpoint","plan":"./alembic.plan.ts","offline":true}' # stream de eventos curl -N http://localhost:8787/api/runs/<id>/events
O servidor harness armazena o estado da run nos mesmos arquivos JSONL append-only da CLI, então cockpit e TUI podem lê-los sem banco de dados. O template Caddy em packages/infra/caddy roteia /api e /events para o harness e todo o resto para o cockpit, mais HTTPS automático.
Inicie alembic serve e alembic cockpit localmente, crie uma run com curl e assista os eventos no navegador e com curl -N.