Modo Interativo
O modo interativo (-i / --invk-interactive) executa comandos em um buffer de tela alternativo com suporte completo a PTY (pseudo-terminal), permitindo interações ricas no terminal.
Visão Geral
Quando você executa um comando com -i, o Invowk:
- Cria um pseudo-terminal (PTY) para o comando
- Exibe a saída em um buffer de tela alternativo (terminal fica limpo)
- Encaminha toda entrada de teclado para o comando em execução
- Permite rolar e revisar a saída após a conclusão
- Suporta componentes TUI embutidos como overlays modais
Uso Básico
# Run a command in interactive mode
invowk cmd build --invk-interactive
Quando Usar o Modo Interativo
O modo interativo é especialmente útil para:
# Commands with password prompts
invowk cmd deploy --invk-interactive
# Commands with sudo
invowk cmd system-update --invk-interactive
# SSH sessions
invowk cmd remote-shell --invk-interactive
# Any command with interactive input
invowk cmd database-cli --invk-interactive
Por Que Esses Comandos Precisam Dele
Sem o modo interativo, stdin não está conectado a um TTY, o que quebra:
- Prompts de senha (não conseguem ler sua entrada de forma segura)
sudo(requer um TTY para entrada de senha)- Sessões SSH (precisam de controle total do terminal)
- Qualquer programa usando
readlineou bibliotecas similares
Habilitando por Padrão
Você pode habilitar o modo interativo por padrão na sua configuração:
// In config file: ~/.config/invowk/config.cue
ui: {
interactive: true // Enable by default
}
Isso é equivalente a sempre passar --invk-interactive na linha de comando.
O modo interativo funciona com todos os runtimes: nativo, virtual e container.
Atalhos de Teclado
Durante a Execução do Comando
During command execution:
All keys → Forwarded to running command
Ctrl+\ → Emergency quit (force exit)
Toda entrada de teclado é encaminhada diretamente para o comando em execução, permitindo interação completa com prompts de senha, editores e outros programas interativos.
Após a Conclusão do Comando
Uma vez que o comando termina, você pode revisar a saída:
After command completion:
↑/k → Scroll up one line
↓/j → Scroll down one line
PgUp/b → Scroll up half page
PgDown/f/Space→ Scroll down half page
Home/g → Go to top
End/G → Go to bottom
q/Esc/Enter → Exit and return to terminal
A barra de status mostra:
- Código de saída do comando
- Duração da execução
- Indicador de posição de rolagem
Componentes TUI Embutidos
Ao executar no modo interativo, componentes TUI chamados de seus scripts são renderizados como overlays modais sobre a saída do comando, ao invés de uma tela separada:
{
name: "interactive-setup"
description: "Setup with embedded TUI prompts"
implementations: [{
script: """
# When run with --invk-interactive, TUI components appear as overlays
NAME=$(invowk tui input --title "Project name:")
TYPE=$(invowk tui choose --title "Type:" api cli library)
if invowk tui confirm "Create $TYPE project '$NAME'?"; then
mkdir -p "$NAME"
echo "Created $NAME"
fi
"""
runtimes: [{name: "native"}]
platforms: [{name: "linux"}, {name: "macos"}]
}]
}
Isso cria uma experiência fluida onde:
- Seu script executa na tela alternativa
- Quando um componente TUI é necessário, ele aparece como overlay
- Após o usuário completar a interação, o overlay fecha
- A execução do script continua com o valor capturado
Como Funciona
Quando um comando executa com -i:
- Invowk inicia um servidor TUI local
- Processos filhos detectam a variável de ambiente
INVOWK_TUI_ADDR - Ao invés de renderizar diretamente, componentes TUI enviam requisições ao pai
- O pai os renderiza como overlays modais
- Resultados são enviados de volta ao processo filho
Isso acontece automaticamente - nenhuma mudança necessária nos seus scripts.
Buffer de Tela Alternativo
O buffer de tela alternativo é um recurso do terminal que:
- Fornece uma "tela" separada para o comando
- Preserva seu histórico do terminal
- Restaura automaticamente quando o comando termina
Isso significa que após sair do modo interativo:
- Seu terminal parece exatamente como antes
- Sem poluição de saída no seu scrollback
- Separação limpa entre saída do invowk e uso normal do terminal
Limitações
- Comando único: Não é possível executar múltiplos comandos em paralelo no modo interativo
- PTY necessário: O terminal deve suportar operações PTY
- Apenas containers glibc: Imagens de container devem ser baseadas em glibc (não Alpine/musl)
Suporte ao Runtime Container
O modo interativo funciona perfeitamente com o runtime container. As execuções em container já usam a camada de imagem auto-provisionada (habilitada por padrão) para que invowk esteja disponível dentro do container; o modo interativo adiciona a infraestrutura de TUI. Veja Runtime Container para detalhes. Quando você executa um comando de container com -i:
- Camada de imagem provisionada: Invowk garante que seu binário esteja disponível (mesmo comportamento do modo não interativo)
- Servidor TUI: Um servidor local trata requisições TUI do container
- Overlays modais: Componentes TUI renderizam no seu terminal, não dentro do container
# Executar um comando de container interativamente
invowk cmd myproject build -i -r container
Dentro dos scripts do seu container, você pode usar todos os componentes TUI:
{
name: "deploy"
implementations: [{
script: """
# Componentes TUI funcionam dentro de containers!
ENV=$(invowk tui choose "Selecione o ambiente" "dev" "staging" "prod")
if invowk tui confirm "Deploy em $ENV?"; then
./deploy.sh "$ENV"
fi
"""
runtimes: [{
name: "container"
image: "debian:bookworm-slim"
}]
}]
}
Imagens de container devem usar glibc (não musl). Imagens baseadas em Alpine não são suportadas. Use Debian, Ubuntu, ou imagens sem o sufixo -alpine.
Boas Práticas
-
Use para comandos que precisam de entrada: Scripts de deploy com confirmações, migrações de banco de dados, etc.
-
Não use para comandos simples: Comandos rápidos sem interação não se beneficiam do modo interativo
-
Combine com componentes TUI: Crie fluxos de trabalho interativos ricos com prompts embutidos
-
Considere o padrão de configuração: Se a maioria dos seus comandos precisa de interação, habilite na configuração
Exemplos
Script de Deploy
{
name: "deploy"
description: "Deploy com confirmações"
implementations: [{
script: """
echo "Fazendo deploy em produção..."
# Este prompt de sudo funciona porque estamos no modo interativo
sudo systemctl restart myapp
echo "Deploy concluído!"
"""
runtimes: [{name: "native"}]
}]
}
Execute com: invowk cmd myproject deploy -i
Migração de Banco de Dados
{
name: "db migrate"
description: "Executar migrações do banco de dados"
implementations: [{
script: """
echo "=== Migração de Banco de Dados ==="
# Confirmação interativa
if invowk tui confirm "Aplicar migrações em produção?"; then
# Prompt de senha funciona no modo interativo
psql -h prod-db -U admin -W -f migrations.sql
fi
"""
runtimes: [{name: "native"}]
}]
}
Próximos Passos
- Componentes TUI - Componentes que funcionam com modo interativo
- Opções de Configuração - Habilitar interativo por padrão
- Runtime Nativo - Entendendo o runtime nativo