AgentProvider: comando, stdin, parser
Percorra a costura TypeScript clean-room do prompt ao resultado parseado da Factory.
Commit upstream fixado: b189869b7755d2b482969acf6c92da3ecfeffd36
- Ler o contrato AgentProvider como uma cintura estreita.
- Explicar por que prompts trafegam por `/dev/stdin`.
- Distinguir opções do provider de routing de modelo em produção.
A grande ideia
O provider tem dois trabalhos. Antes do launch, transforma opções da Factory num comando Grok seguro e envia o prompt por standard input. Durante a execução, traduz cada linha JSONL para o pequeno vocabulário de eventos do Alembic. Todo o resto — sandbox launch, timeout, acumulação e retorno — permanece com a Factory.
Pense como… O provider é um adaptador de tomada: muda a forma na fronteira sem reconstruir o aparelho nem a parede. A analogia quebra porque o adapter também valida comportamento de sessão não suportado e traduz um stream vivo de eventos.
`buildPrintCommand` retorna comando shell mais stdin opcional. O prompt nunca entra em argv, evitando interpretação shell e limites por argumento. Model e flags enumeradas são shell-escaped. O caminho AFK público `run()` da Factory pede bypass de permissões; contenção continua sendo responsabilidade do SandboxProvider.
O provider sempre desabilita a busca web nativa do Grok para manter a pesquisa do Alembic no Bright Data CLI. Effort e ambiente opcionais mapeiam para o CLI; o roster fixo de produção permanece inalterado. No caminho AFK de run, o Orchestrator pede bypass de aprovação e a contenção vem do SandboxProvider.
Evidência: Guia fixado do modo headless
Compare as fronteiras
Seguro: shell-escape model/flags e colocar prompt em stdin.
Arriscado: interpolar prompt do usuário numa string de comando shell.
| Superfície | Upstream | Alembic | Veredito |
|---|---|---|---|
| Prompt transport | Poderia ser argv inline | `--prompt-file /dev/stdin` | STDIN |
| Permissions | CLI suporta modos de aprovação | Run AFK pede bypass; sandbox contém | LAYERED |
| Routing | Provider pode ser construído | Roster fixo inalterado | SEPARATE |
O provider sempre desabilita a busca web nativa do Grok para manter a pesquisa do Alembic no Bright Data CLI. Effort e ambiente opcionais mapeiam para o CLI; o roster fixo de produção permanece inalterado. No caminho AFK de run, o Orchestrator pede bypass de aprovação e a contenção vem do SandboxProvider.
Código e comandos reais
packages/factory/src/GrokAgentProvider.ts
return {
command: `grok --prompt-file /dev/stdin \
--output-format streaming-json --model ${shellEscape(model)} \
--disable-web-search`,
stdin: prompt,
};Como chegar lá
sed -n '1,170p' packages/factory/src/GrokAgentProvider.ts rg -n "export.*grok|GrokOptions" packages/factory/src/index.ts
Evidência: RESOURCES.md
Atlas visual
Prática e feedback
O prompt contém aspas e sintaxe shell. Qual campo deve carregá-lo?
Cartões de recuperação
Monte o comando com segurança
Escolha um conjunto de opções e veja o que muda — e o que fica fora de argv.
Resumo em quatro slides
Teste seu modelo
O que nunca deve ser interpolado no comando?