chore(i18n): refresh pt-BR translations
This commit is contained in:
parent
cd0b286f4f
commit
4cc4b995ed
@ -1,20 +1,20 @@
|
||||
---
|
||||
read_when:
|
||||
- Ao configurar o Slack ou depurar o modo socket/HTTP do Slack
|
||||
summary: Configuração e comportamento em tempo de execução do Slack (Socket Mode + URLs de solicitação HTTP)
|
||||
summary: Configuração do Slack e comportamento em tempo de execução (Socket Mode + URLs de solicitação HTTP)
|
||||
title: Slack
|
||||
x-i18n:
|
||||
generated_at: "2026-04-07T05:27:29Z"
|
||||
generated_at: "2026-04-08T05:27:44Z"
|
||||
model: gpt-5.4
|
||||
provider: openai
|
||||
source_hash: 2b8fd2cc6c638ee82069f0af2c2b6f6f49c87da709b941433a0343724a9907ea
|
||||
source_hash: cad132131ddce688517def7c14703ad314441c67aacc4cc2a2a721e1d1c01942
|
||||
source_path: channels/slack.md
|
||||
workflow: 15
|
||||
---
|
||||
|
||||
# Slack
|
||||
|
||||
Status: pronto para produção para DMs + canais por meio de integrações de apps do Slack. O modo padrão é Socket Mode; URLs de solicitação HTTP também são compatíveis.
|
||||
Status: pronto para produção para DMs + canais por meio de integrações de app do Slack. O modo padrão é Socket Mode; URLs de solicitação HTTP também são compatíveis.
|
||||
|
||||
<CardGroup cols={3}>
|
||||
<Card title="Pareamento" icon="link" href="/pt-BR/channels/pairing">
|
||||
@ -33,7 +33,7 @@ Status: pronto para produção para DMs + canais por meio de integrações de ap
|
||||
<Tabs>
|
||||
<Tab title="Socket Mode (padrão)">
|
||||
<Steps>
|
||||
<Step title="Criar um novo app do Slack">
|
||||
<Step title="Crie um novo app do Slack">
|
||||
Nas configurações do app do Slack, pressione o botão **[Create New App](https://api.slack.com/apps/new)**:
|
||||
|
||||
- escolha **from a manifest** e selecione um workspace para seu app
|
||||
@ -42,7 +42,7 @@ Status: pronto para produção para DMs + canais por meio de integrações de ap
|
||||
- instale o app e copie o **Bot Token** (`xoxb-...`) exibido
|
||||
</Step>
|
||||
|
||||
<Step title="Configurar o OpenClaw">
|
||||
<Step title="Configure o OpenClaw">
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -57,7 +57,7 @@ Status: pronto para produção para DMs + canais por meio de integrações de ap
|
||||
}
|
||||
```
|
||||
|
||||
Fallback por variável de ambiente (somente conta padrão):
|
||||
Fallback por env (somente conta padrão):
|
||||
|
||||
```bash
|
||||
SLACK_APP_TOKEN=xapp-...
|
||||
@ -66,7 +66,7 @@ SLACK_BOT_TOKEN=xoxb-...
|
||||
|
||||
</Step>
|
||||
|
||||
<Step title="Iniciar o gateway">
|
||||
<Step title="Inicie o gateway">
|
||||
|
||||
```bash
|
||||
openclaw gateway
|
||||
@ -79,7 +79,7 @@ openclaw gateway
|
||||
|
||||
<Tab title="URLs de solicitação HTTP">
|
||||
<Steps>
|
||||
<Step title="Criar um novo app do Slack">
|
||||
<Step title="Crie um novo app do Slack">
|
||||
Nas configurações do app do Slack, pressione o botão **[Create New App](https://api.slack.com/apps/new)**:
|
||||
|
||||
- escolha **from a manifest** e selecione um workspace para seu app
|
||||
@ -89,7 +89,7 @@ openclaw gateway
|
||||
|
||||
</Step>
|
||||
|
||||
<Step title="Configurar o OpenClaw">
|
||||
<Step title="Configure o OpenClaw">
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -108,12 +108,12 @@ openclaw gateway
|
||||
<Note>
|
||||
Use caminhos de webhook exclusivos para HTTP com várias contas
|
||||
|
||||
Dê a cada conta um `webhookPath` distinto (o padrão é `/slack/events`) para que os registros não entrem em conflito.
|
||||
Dê a cada conta um `webhookPath` distinto (padrão `/slack/events`) para que os registros não entrem em conflito.
|
||||
</Note>
|
||||
|
||||
</Step>
|
||||
|
||||
<Step title="Iniciar o gateway">
|
||||
<Step title="Inicie o gateway">
|
||||
|
||||
```bash
|
||||
openclaw gateway
|
||||
@ -125,7 +125,7 @@ openclaw gateway
|
||||
</Tab>
|
||||
</Tabs>
|
||||
|
||||
## Lista de verificação de manifesto e escopos
|
||||
## Checklist de manifesto e escopos
|
||||
|
||||
<Tabs>
|
||||
<Tab title="Socket Mode (padrão)">
|
||||
@ -294,9 +294,10 @@ openclaw gateway
|
||||
Adicione o escopo de bot `chat:write.customize` se quiser que as mensagens de saída usem a identidade do agente ativo (nome de usuário e ícone personalizados) em vez da identidade padrão do app do Slack.
|
||||
|
||||
Se você usar um ícone de emoji, o Slack espera a sintaxe `:emoji_name:`.
|
||||
|
||||
</Accordion>
|
||||
<Accordion title="Escopos opcionais de token de usuário (operações de leitura)">
|
||||
Se você configurar `channels.slack.userToken`, os escopos típicos de leitura são:
|
||||
Se você configurar `channels.slack.userToken`, os escopos de leitura típicos são:
|
||||
|
||||
- `channels:history`, `groups:history`, `im:history`, `mpim:history`
|
||||
- `channels:read`, `groups:read`, `im:read`, `mpim:read`
|
||||
@ -304,7 +305,7 @@ openclaw gateway
|
||||
- `reactions:read`
|
||||
- `pins:read`
|
||||
- `emoji:read`
|
||||
- `search:read` (se você depende de leituras da busca do Slack)
|
||||
- `search:read` (se você depender de leituras da pesquisa do Slack)
|
||||
|
||||
</Accordion>
|
||||
</AccordionGroup>
|
||||
@ -315,23 +316,23 @@ openclaw gateway
|
||||
- O modo HTTP exige `botToken` + `signingSecret`.
|
||||
- `botToken`, `appToken`, `signingSecret` e `userToken` aceitam strings
|
||||
em texto simples ou objetos SecretRef.
|
||||
- Tokens na configuração substituem o fallback por variável de ambiente.
|
||||
- O fallback por variável de ambiente `SLACK_BOT_TOKEN` / `SLACK_APP_TOKEN` se aplica apenas à conta padrão.
|
||||
- `userToken` (`xoxp-...`) é somente de configuração (sem fallback por variável de ambiente) e assume por padrão comportamento somente leitura (`userTokenReadOnly: true`).
|
||||
- Os tokens da configuração substituem o fallback por env.
|
||||
- O fallback por env `SLACK_BOT_TOKEN` / `SLACK_APP_TOKEN` se aplica apenas à conta padrão.
|
||||
- `userToken` (`xoxp-...`) é somente de configuração (sem fallback por env) e usa comportamento somente leitura por padrão (`userTokenReadOnly: true`).
|
||||
|
||||
Comportamento do snapshot de status:
|
||||
|
||||
- A inspeção da conta do Slack rastreia campos `*Source` e `*Status`
|
||||
- A inspeção de conta do Slack rastreia campos `*Source` e `*Status`
|
||||
por credencial (`botToken`, `appToken`, `signingSecret`, `userToken`).
|
||||
- O status é `available`, `configured_unavailable` ou `missing`.
|
||||
- `configured_unavailable` significa que a conta está configurada por SecretRef
|
||||
ou outra fonte secreta não inline, mas o caminho atual de comando/runtime
|
||||
ou outra fonte de segredo não inline, mas o caminho atual de comando/tempo de execução
|
||||
não conseguiu resolver o valor real.
|
||||
- No modo HTTP, `signingSecretStatus` é incluído; em Socket Mode, o
|
||||
par obrigatório é `botTokenStatus` + `appTokenStatus`.
|
||||
|
||||
<Tip>
|
||||
Para ações/leituras de diretório, o token de usuário pode ser priorizado quando configurado. Para escritas, o token de bot continua sendo o preferido; escritas com token de usuário só são permitidas quando `userTokenReadOnly: false` e o token de bot não está disponível.
|
||||
Para ações/leituras de diretório, o token de usuário pode ser preferido quando configurado. Para escritas, o token de bot continua sendo preferido; escritas com token de usuário só são permitidas quando `userTokenReadOnly: false` e o token de bot não está disponível.
|
||||
</Tip>
|
||||
|
||||
## Ações e controles
|
||||
@ -366,10 +367,10 @@ As ações atuais de mensagem do Slack incluem `send`, `upload-file`, `download-
|
||||
- `dm.enabled` (padrão true)
|
||||
- `channels.slack.allowFrom` (preferido)
|
||||
- `dm.allowFrom` (legado)
|
||||
- `dm.groupEnabled` (DMs em grupo têm padrão false)
|
||||
- `dm.groupChannels` (lista de permissões opcional para MPIM)
|
||||
- `dm.groupEnabled` (DMs em grupo com padrão false)
|
||||
- `dm.groupChannels` (allowlist opcional de MPIM)
|
||||
|
||||
Precedência de várias contas:
|
||||
Precedência em várias contas:
|
||||
|
||||
- `channels.slack.accounts.default.allowFrom` aplica-se apenas à conta `default`.
|
||||
- Contas nomeadas herdam `channels.slack.allowFrom` quando seu próprio `allowFrom` não está definido.
|
||||
@ -386,15 +387,15 @@ As ações atuais de mensagem do Slack incluem `send`, `upload-file`, `download-
|
||||
- `allowlist`
|
||||
- `disabled`
|
||||
|
||||
A lista de permissões de canal fica em `channels.slack.channels` e deve usar IDs estáveis de canal.
|
||||
A allowlist de canais fica em `channels.slack.channels` e deve usar IDs de canal estáveis.
|
||||
|
||||
Observação de runtime: se `channels.slack` estiver completamente ausente (configuração somente por variável de ambiente), o runtime usa `groupPolicy="allowlist"` como fallback e registra um aviso (mesmo se `channels.defaults.groupPolicy` estiver definido).
|
||||
Observação de tempo de execução: se `channels.slack` estiver totalmente ausente (configuração somente por env), o tempo de execução usa `groupPolicy="allowlist"` como fallback e registra um aviso (mesmo que `channels.defaults.groupPolicy` esteja definido).
|
||||
|
||||
Resolução de nome/ID:
|
||||
|
||||
- entradas da lista de permissões de canal e da lista de permissões de DM são resolvidas na inicialização quando o acesso por token permite
|
||||
- entradas de allowlist de canais e entradas de allowlist de DM são resolvidas na inicialização quando o acesso por token permite
|
||||
- entradas não resolvidas por nome de canal são mantidas como configuradas, mas ignoradas para roteamento por padrão
|
||||
- a autorização de entrada e o roteamento de canal usam IDs primeiro por padrão; correspondência direta por nome de usuário/slug exige `channels.slack.dangerouslyAllowNameMatching: true`
|
||||
- a autorização de entrada e o roteamento de canal usam ID primeiro por padrão; correspondência direta de nome de usuário/slug exige `channels.slack.dangerouslyAllowNameMatching: true`
|
||||
|
||||
</Tab>
|
||||
|
||||
@ -407,16 +408,16 @@ As ações atuais de mensagem do Slack incluem `send`, `upload-file`, `download-
|
||||
- padrões regex de menção (`agents.list[].groupChat.mentionPatterns`, fallback `messages.groupChat.mentionPatterns`)
|
||||
- comportamento implícito de resposta em thread ao bot (desativado quando `thread.requireExplicitMention` é `true`)
|
||||
|
||||
Controles por canal (`channels.slack.channels.<id>`; nomes somente por resolução na inicialização ou `dangerouslyAllowNameMatching`):
|
||||
Controles por canal (`channels.slack.channels.<id>`; nomes somente via resolução na inicialização ou `dangerouslyAllowNameMatching`):
|
||||
|
||||
- `requireMention`
|
||||
- `users` (lista de permissões)
|
||||
- `users` (allowlist)
|
||||
- `allowBots`
|
||||
- `skills`
|
||||
- `systemPrompt`
|
||||
- `tools`, `toolsBySender`
|
||||
- formato de chave de `toolsBySender`: `id:`, `e164:`, `username:`, `name:` ou curinga `"*"`
|
||||
(chaves legadas sem prefixo ainda são mapeadas apenas para `id:`)
|
||||
- formato da chave `toolsBySender`: `id:`, `e164:`, `username:`, `name:` ou coringa `"*"`
|
||||
(chaves legadas sem prefixo ainda são mapeadas somente para `id:`)
|
||||
|
||||
</Tab>
|
||||
</Tabs>
|
||||
@ -428,32 +429,32 @@ As ações atuais de mensagem do Slack incluem `send`, `upload-file`, `download-
|
||||
- Sessões de canal: `agent:<agentId>:slack:channel:<channelId>`.
|
||||
- Respostas em thread podem criar sufixos de sessão de thread (`:thread:<threadTs>`) quando aplicável.
|
||||
- O padrão de `channels.slack.thread.historyScope` é `thread`; o padrão de `thread.inheritParent` é `false`.
|
||||
- `channels.slack.thread.initialHistoryLimit` controla quantas mensagens existentes da thread são buscadas quando uma nova sessão de thread começa (padrão `20`; defina `0` para desativar).
|
||||
- `channels.slack.thread.requireExplicitMention` (padrão `false`): quando `true`, suprime menções implícitas em thread para que o bot responda apenas a menções explícitas `@bot` dentro de threads, mesmo quando o bot já participou da thread. Sem isso, respostas em uma thread com participação do bot ignoram o controle de `requireMention`.
|
||||
- `channels.slack.thread.initialHistoryLimit` controla quantas mensagens existentes da thread são buscadas quando uma nova sessão de thread é iniciada (padrão `20`; defina `0` para desativar).
|
||||
- `channels.slack.thread.requireExplicitMention` (padrão `false`): quando `true`, suprime menções implícitas em thread para que o bot só responda a menções `@bot` explícitas dentro de threads, mesmo quando o bot já participou da thread. Sem isso, respostas em uma thread com participação do bot ignoram o controle `requireMention`.
|
||||
|
||||
Controles de encadeamento de respostas:
|
||||
Controles de encadeamento de resposta:
|
||||
|
||||
- `channels.slack.replyToMode`: `off|first|all|batched` (padrão `off`)
|
||||
- `channels.slack.replyToModeByChatType`: por `direct|group|channel`
|
||||
- fallback legado para chats diretos: `channels.slack.dm.replyToMode`
|
||||
|
||||
Tags manuais de resposta são compatíveis:
|
||||
Há suporte para tags manuais de resposta:
|
||||
|
||||
- `[[reply_to_current]]`
|
||||
- `[[reply_to:<id>]]`
|
||||
|
||||
Observação: `replyToMode="off"` desativa **todo** o encadeamento de respostas no Slack, incluindo tags explícitas `[[reply_to_*]]`. Isso difere do Telegram, onde tags explícitas ainda são respeitadas no modo `"off"`. A diferença reflete os modelos de thread da plataforma: as threads do Slack ocultam mensagens do canal, enquanto as respostas do Telegram permanecem visíveis no fluxo principal do chat.
|
||||
Observação: `replyToMode="off"` desativa **todo** o encadeamento de respostas no Slack, incluindo tags explícitas `[[reply_to_*]]`. Isso difere do Telegram, em que as tags explícitas ainda são respeitadas no modo `"off"`. A diferença reflete os modelos de thread das plataformas: as threads do Slack ocultam mensagens do canal, enquanto as respostas do Telegram continuam visíveis no fluxo principal do chat.
|
||||
|
||||
## Reações de confirmação
|
||||
|
||||
`ackReaction` envia um emoji de confirmação enquanto o OpenClaw está processando uma mensagem de entrada.
|
||||
`ackReaction` envia um emoji de confirmação enquanto o OpenClaw está processando uma mensagem recebida.
|
||||
|
||||
Ordem de resolução:
|
||||
|
||||
- `channels.slack.accounts.<accountId>.ackReaction`
|
||||
- `channels.slack.ackReaction`
|
||||
- `messages.ackReaction`
|
||||
- fallback para emoji da identidade do agente (`agents.list[].identity.emoji`, senão "👀")
|
||||
- fallback para o emoji de identidade do agente (`agents.list[].identity.emoji`, caso contrário "👀")
|
||||
|
||||
Observações:
|
||||
|
||||
@ -462,27 +463,31 @@ Observações:
|
||||
|
||||
## Streaming de texto
|
||||
|
||||
`channels.slack.streaming` controla o comportamento de prévia ao vivo:
|
||||
`channels.slack.streaming` controla o comportamento de visualização ao vivo:
|
||||
|
||||
- `off`: desativa o streaming de prévia ao vivo.
|
||||
- `partial` (padrão): substitui o texto de prévia pela saída parcial mais recente.
|
||||
- `block`: acrescenta atualizações de prévia em blocos.
|
||||
- `off`: desativa o streaming de visualização ao vivo.
|
||||
- `partial` (padrão): substitui o texto da visualização pela saída parcial mais recente.
|
||||
- `block`: acrescenta atualizações de visualização em blocos.
|
||||
- `progress`: mostra texto de status de progresso durante a geração e depois envia o texto final.
|
||||
|
||||
`channels.slack.nativeStreaming` controla o streaming nativo de texto do Slack quando `streaming` é `partial` (padrão: `true`).
|
||||
`channels.slack.streaming.nativeTransport` controla o streaming nativo de texto do Slack quando `channels.slack.streaming.mode` é `partial` (padrão: `true`).
|
||||
|
||||
- Uma thread de resposta precisa estar disponível para que o streaming nativo de texto apareça. A seleção da thread ainda segue `replyToMode`. Sem isso, a prévia normal em rascunho é usada.
|
||||
- Mídia e payloads não textuais voltam para a entrega normal.
|
||||
- Se o streaming falhar no meio da resposta, o OpenClaw volta para a entrega normal para os payloads restantes.
|
||||
- Uma thread de resposta precisa estar disponível para que o streaming nativo de texto e o status da thread do assistente do Slack apareçam. A seleção da thread ainda segue `replyToMode`.
|
||||
- Raízes de canais e chats em grupo ainda podem usar a visualização normal de rascunho quando o streaming nativo não estiver disponível.
|
||||
- DMs do Slack de nível superior permanecem fora de thread por padrão, então não mostram a visualização no estilo de thread; use respostas em thread ou `typingReaction` se quiser progresso visível nelas.
|
||||
- Cargas de mídia e não textuais usam fallback para entrega normal.
|
||||
- Se o streaming falhar no meio da resposta, o OpenClaw usa fallback para entrega normal para as cargas restantes.
|
||||
|
||||
Use prévia em rascunho em vez do streaming nativo de texto do Slack:
|
||||
Use a visualização de rascunho em vez do streaming nativo de texto do Slack:
|
||||
|
||||
```json5
|
||||
{
|
||||
channels: {
|
||||
slack: {
|
||||
streaming: "partial",
|
||||
nativeStreaming: false,
|
||||
streaming: {
|
||||
mode: "partial",
|
||||
nativeTransport: false,
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
@ -490,12 +495,13 @@ Use prévia em rascunho em vez do streaming nativo de texto do Slack:
|
||||
|
||||
Chaves legadas:
|
||||
|
||||
- `channels.slack.streamMode` (`replace | status_final | append`) é migrado automaticamente para `channels.slack.streaming`.
|
||||
- boolean `channels.slack.streaming` é migrado automaticamente para `channels.slack.nativeStreaming`.
|
||||
- `channels.slack.streamMode` (`replace | status_final | append`) é migrado automaticamente para `channels.slack.streaming.mode`.
|
||||
- booleano `channels.slack.streaming` é migrado automaticamente para `channels.slack.streaming.mode` e `channels.slack.streaming.nativeTransport`.
|
||||
- `channels.slack.nativeStreaming` legado é migrado automaticamente para `channels.slack.streaming.nativeTransport`.
|
||||
|
||||
## Fallback de reação de digitação
|
||||
|
||||
`typingReaction` adiciona uma reação temporária à mensagem recebida no Slack enquanto o OpenClaw está processando uma resposta e a remove quando a execução termina. Isso é mais útil fora de respostas em thread, que usam um indicador de status padrão "is typing...".
|
||||
`typingReaction` adiciona uma reação temporária à mensagem recebida no Slack enquanto o OpenClaw processa uma resposta e depois a remove quando a execução termina. Isso é mais útil fora de respostas em thread, que usam um indicador padrão de status "is typing...".
|
||||
|
||||
Ordem de resolução:
|
||||
|
||||
@ -505,23 +511,23 @@ Ordem de resolução:
|
||||
Observações:
|
||||
|
||||
- O Slack espera shortcodes (por exemplo, `"hourglass_flowing_sand"`).
|
||||
- A reação é best-effort e a limpeza é tentada automaticamente depois que a resposta ou o caminho de falha termina.
|
||||
- A reação é de melhor esforço e a limpeza é tentada automaticamente após a conclusão da resposta ou do caminho de falha.
|
||||
|
||||
## Mídia, fragmentação e entrega
|
||||
|
||||
<AccordionGroup>
|
||||
<Accordion title="Anexos de entrada">
|
||||
Anexos de arquivo do Slack são baixados de URLs privadas hospedadas pelo Slack (fluxo de solicitação autenticado por token) e gravados no armazenamento de mídia quando a busca é bem-sucedida e os limites de tamanho permitem.
|
||||
<Accordion title="Anexos recebidos">
|
||||
Os anexos de arquivo do Slack são baixados de URLs privadas hospedadas pelo Slack (fluxo de solicitação autenticado por token) e gravados no armazenamento de mídia quando a busca é bem-sucedida e os limites de tamanho permitem.
|
||||
|
||||
O limite de tamanho de entrada em runtime tem padrão de `20MB`, a menos que seja substituído por `channels.slack.mediaMaxMb`.
|
||||
O limite de tamanho de entrada em tempo de execução tem padrão de `20MB`, a menos que seja substituído por `channels.slack.mediaMaxMb`.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Texto e arquivos de saída">
|
||||
- fragmentos de texto usam `channels.slack.textChunkLimit` (padrão 4000)
|
||||
- `channels.slack.chunkMode="newline"` ativa a divisão priorizando parágrafos
|
||||
- envios de arquivos usam as APIs de upload do Slack e podem incluir respostas em thread (`thread_ts`)
|
||||
- o limite de mídia de saída segue `channels.slack.mediaMaxMb` quando configurado; caso contrário, envios de canal usam os padrões por tipo MIME do pipeline de mídia
|
||||
- `channels.slack.chunkMode="newline"` ativa divisão priorizando parágrafos
|
||||
- envios de arquivo usam APIs de upload do Slack e podem incluir respostas em thread (`thread_ts`)
|
||||
- o limite de mídia de saída segue `channels.slack.mediaMaxMb` quando configurado; caso contrário, os envios do canal usam os padrões por tipo MIME do pipeline de mídia
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Destinos de entrega">
|
||||
@ -530,24 +536,24 @@ Observações:
|
||||
- `user:<id>` para DMs
|
||||
- `channel:<id>` para canais
|
||||
|
||||
As DMs do Slack são abertas pelas APIs de conversa do Slack ao enviar para destinos de usuário.
|
||||
As DMs do Slack são abertas por APIs de conversa do Slack ao enviar para destinos de usuário.
|
||||
|
||||
</Accordion>
|
||||
</AccordionGroup>
|
||||
|
||||
## Comandos e comportamento de slash
|
||||
|
||||
- O modo automático de comando nativo está **desativado** para Slack (`commands.native: "auto"` não ativa comandos nativos do Slack).
|
||||
- Ative os manipuladores nativos de comando do Slack com `channels.slack.commands.native: true` (ou global `commands.native: true`).
|
||||
- Quando os comandos nativos estão ativados, registre os comandos de barra correspondentes no Slack (nomes `/<command>`), com uma exceção:
|
||||
- O modo automático de comando nativo fica **desativado** para Slack (`commands.native: "auto"` não ativa comandos nativos do Slack).
|
||||
- Ative os manipuladores de comando nativo do Slack com `channels.slack.commands.native: true` (ou global `commands.native: true`).
|
||||
- Quando os comandos nativos estão ativados, registre comandos de barra correspondentes no Slack (nomes `/<command>`), com uma exceção:
|
||||
- registre `/agentstatus` para o comando de status (o Slack reserva `/status`)
|
||||
- Se os comandos nativos não estiverem ativados, você pode executar um único comando de barra configurado por meio de `channels.slack.slashCommand`.
|
||||
- Menus nativos de argumentos agora adaptam sua estratégia de renderização:
|
||||
- até 5 opções: blocos de botão
|
||||
- de 6 a 100 opções: menu de seleção estático
|
||||
- mais de 100 opções: seleção externa com filtragem assíncrona de opções quando manipuladores de opções de interatividade estão disponíveis
|
||||
- se valores de opção codificados excederem os limites do Slack, o fluxo volta para botões
|
||||
- Para payloads longos de opção, menus de argumento de comando de barra usam um diálogo de confirmação antes de despachar um valor selecionado.
|
||||
- Se os comandos nativos não estiverem ativados, você pode executar um único comando de barra configurado por `channels.slack.slashCommand`.
|
||||
- Os menus nativos de argumentos agora adaptam sua estratégia de renderização:
|
||||
- até 5 opções: blocos de botões
|
||||
- 6-100 opções: menu de seleção estático
|
||||
- mais de 100 opções: seleção externa com filtragem assíncrona de opções quando os manipuladores de opções de interatividade estão disponíveis
|
||||
- se os valores de opção codificados excederem os limites do Slack, o fluxo usa fallback para botões
|
||||
- Para cargas longas de opções, os menus de argumentos de comando de barra usam um diálogo de confirmação antes de despachar um valor selecionado.
|
||||
|
||||
Configurações padrão de comando de barra:
|
||||
|
||||
@ -556,15 +562,15 @@ Configurações padrão de comando de barra:
|
||||
- `sessionPrefix: "slack:slash"`
|
||||
- `ephemeral: true`
|
||||
|
||||
Sessões de slash usam chaves isoladas:
|
||||
As sessões de slash usam chaves isoladas:
|
||||
|
||||
- `agent:<agentId>:slack:slash:<userId>`
|
||||
|
||||
e ainda roteiam a execução do comando em relação à sessão de conversa de destino (`CommandTargetSessionKey`).
|
||||
e ainda roteiam a execução do comando para a sessão de conversa de destino (`CommandTargetSessionKey`).
|
||||
|
||||
## Respostas interativas
|
||||
|
||||
O Slack pode renderizar controles interativos de resposta criados pelo agente, mas esse recurso está desativado por padrão.
|
||||
O Slack pode renderizar controles interativos de resposta criados pelo agente, mas esse recurso fica desativado por padrão.
|
||||
|
||||
Ative globalmente:
|
||||
|
||||
@ -580,7 +586,7 @@ Ative globalmente:
|
||||
}
|
||||
```
|
||||
|
||||
Ou ative somente para uma conta do Slack:
|
||||
Ou ative para apenas uma conta do Slack:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -598,31 +604,30 @@ Ou ative somente para uma conta do Slack:
|
||||
}
|
||||
```
|
||||
|
||||
Quando ativado, agentes podem emitir diretivas de resposta exclusivas do Slack:
|
||||
Quando ativado, os agentes podem emitir diretivas de resposta exclusivas do Slack:
|
||||
|
||||
- `[[slack_buttons: Approve:approve, Reject:reject]]`
|
||||
- `[[slack_select: Choose a target | Canary:canary, Production:production]]`
|
||||
|
||||
Essas diretivas são compiladas em Slack Block Kit e encaminham cliques ou seleções de volta pelo caminho existente de eventos de interação do Slack.
|
||||
Essas diretivas são compiladas em Slack Block Kit e roteiam cliques ou seleções de volta pelo caminho existente de eventos de interação do Slack.
|
||||
|
||||
Observações:
|
||||
|
||||
- Esta é uma UI específica do Slack. Outros canais não traduzem diretivas do Slack Block Kit para seus próprios sistemas de botões.
|
||||
- Os valores de callback interativo são tokens opacos gerados pelo OpenClaw, não valores brutos criados pelo agente.
|
||||
- Se os blocos interativos gerados excederem os limites do Slack Block Kit, o OpenClaw volta para a resposta de texto original em vez de enviar um payload de blocos inválido.
|
||||
- Se os blocos interativos gerados excederem os limites do Slack Block Kit, o OpenClaw usa fallback para a resposta de texto original em vez de enviar uma carga de blocos inválida.
|
||||
|
||||
## Aprovações de exec no Slack
|
||||
|
||||
O Slack pode atuar como um cliente nativo de aprovação com botões interativos e interações, em vez de recorrer à Web UI ou ao terminal.
|
||||
O Slack pode atuar como um cliente nativo de aprovação com botões interativos e interações, em vez de usar fallback para a Web UI ou terminal.
|
||||
|
||||
- Aprovações de exec usam `channels.slack.execApprovals.*` para roteamento nativo em DM/canal.
|
||||
- Aprovações de plugin ainda podem ser resolvidas pela mesma superfície nativa de botões do Slack quando a solicitação já chega ao Slack e o tipo de id de aprovação é `plugin:`.
|
||||
- A autorização do aprovador ainda é aplicada: somente usuários identificados como aprovadores podem aprovar ou negar solicitações pelo Slack.
|
||||
- As aprovações de exec usam `channels.slack.execApprovals.*` para roteamento nativo em DM/canal.
|
||||
- As aprovações de plugin ainda podem ser resolvidas pela mesma superfície nativa de botões do Slack quando a solicitação já chega ao Slack e o tipo de id de aprovação é `plugin:`.
|
||||
- A autorização do aprovador ainda é aplicada: apenas usuários identificados como aprovadores podem aprovar ou negar solicitações pelo Slack.
|
||||
|
||||
Isso usa a mesma superfície compartilhada de botões de aprovação que outros canais. Quando `interactivity` está ativado nas configurações do seu app do Slack, os prompts de aprovação são renderizados como botões do Block Kit diretamente na conversa.
|
||||
Quando esses botões estão presentes, eles são a UX principal de aprovação; o OpenClaw
|
||||
deve incluir um comando manual `/approve` somente quando o resultado da ferramenta disser que
|
||||
aprovações no chat não estão disponíveis ou que a aprovação manual é o único caminho.
|
||||
deve incluir um comando manual `/approve` apenas quando o resultado da ferramenta indicar que aprovações por chat não estão disponíveis ou que a aprovação manual é o único caminho.
|
||||
|
||||
Caminho de configuração:
|
||||
|
||||
@ -633,7 +638,7 @@ Caminho de configuração:
|
||||
|
||||
O Slack ativa automaticamente aprovações nativas de exec quando `enabled` não está definido ou é `"auto"` e pelo menos um
|
||||
aprovador é resolvido. Defina `enabled: false` para desativar explicitamente o Slack como cliente nativo de aprovação.
|
||||
Defina `enabled: true` para forçar aprovações nativas quando aprovadores forem resolvidos.
|
||||
Defina `enabled: true` para forçar aprovações nativas quando os aprovadores forem resolvidos.
|
||||
|
||||
Comportamento padrão sem configuração explícita de aprovação de exec no Slack:
|
||||
|
||||
@ -646,7 +651,7 @@ Comportamento padrão sem configuração explícita de aprovação de exec no Sl
|
||||
```
|
||||
|
||||
A configuração explícita nativa do Slack só é necessária quando você quer substituir aprovadores, adicionar filtros ou
|
||||
optar pela entrega no chat de origem:
|
||||
optar por entrega no chat de origem:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -662,24 +667,24 @@ optar pela entrega no chat de origem:
|
||||
}
|
||||
```
|
||||
|
||||
O encaminhamento compartilhado de `approvals.exec` é separado. Use-o somente quando prompts de aprovação de exec também precisarem
|
||||
ser encaminhados para outros chats ou destinos explícitos fora de banda. O encaminhamento compartilhado de `approvals.plugin` também é
|
||||
separado; botões nativos do Slack ainda podem resolver aprovações de plugin quando essas solicitações já chegam
|
||||
O encaminhamento compartilhado `approvals.exec` é separado. Use-o somente quando os prompts de aprovação de exec também precisarem
|
||||
ser roteados para outros chats ou destinos explícitos fora de banda. O encaminhamento compartilhado `approvals.plugin` também é
|
||||
separado; os botões nativos do Slack ainda podem resolver aprovações de plugin quando essas solicitações já chegam
|
||||
ao Slack.
|
||||
|
||||
O mesmo chat `/approve` também funciona em canais e DMs do Slack que já oferecem suporte a comandos. Consulte [Aprovações de exec](/pt-BR/tools/exec-approvals) para o modelo completo de encaminhamento de aprovações.
|
||||
O mesmo chat com `/approve` também funciona em canais e DMs do Slack que já oferecem suporte a comandos. Consulte [Aprovações de exec](/pt-BR/tools/exec-approvals) para o modelo completo de encaminhamento de aprovações.
|
||||
|
||||
## Eventos e comportamento operacional
|
||||
|
||||
- Edições/exclusões de mensagem/transmissões de thread são mapeadas para eventos de sistema.
|
||||
- Eventos de adicionar/remover reação são mapeados para eventos de sistema.
|
||||
- Eventos de entrada/saída de membro, canal criado/renomeado e adicionar/remover pin são mapeados para eventos de sistema.
|
||||
- Edições/exclusões de mensagens/transmissões de thread são mapeadas para eventos do sistema.
|
||||
- Eventos de adicionar/remover reação são mapeados para eventos do sistema.
|
||||
- Eventos de entrada/saída de membro, canal criado/renomeado e adicionar/remover pin são mapeados para eventos do sistema.
|
||||
- `channel_id_changed` pode migrar chaves de configuração de canal quando `configWrites` está ativado.
|
||||
- Metadados de tópico/finalidade do canal são tratados como contexto não confiável e podem ser injetados no contexto de roteamento.
|
||||
- O iniciador da thread e a semeadura inicial do contexto do histórico da thread são filtrados pelas listas configuradas de permissões de remetente quando aplicável.
|
||||
- Ações de bloco e interações de modal emitem eventos de sistema estruturados `Slack interaction: ...` com campos ricos de payload:
|
||||
- O autor inicial da thread e a semeadura inicial de contexto do histórico da thread são filtrados por allowlists de remetente configuradas, quando aplicável.
|
||||
- Ações de bloco e interações de modal emitem eventos estruturados de sistema `Slack interaction: ...` com campos ricos de carga:
|
||||
- ações de bloco: valores selecionados, rótulos, valores de seletor e metadados `workflow_*`
|
||||
- eventos de modal `view_submission` e `view_closed` com metadados de canal roteados e entradas de formulário
|
||||
- eventos modais `view_submission` e `view_closed` com metadados de canal roteados e entradas de formulário
|
||||
|
||||
## Ponteiros de referência de configuração
|
||||
|
||||
@ -688,12 +693,12 @@ Referência principal:
|
||||
- [Referência de configuração - Slack](/pt-BR/gateway/configuration-reference#slack)
|
||||
|
||||
Campos de Slack de alto sinal:
|
||||
- modo/auth: `mode`, `botToken`, `appToken`, `signingSecret`, `webhookPath`, `accounts.*`
|
||||
- modo/autenticação: `mode`, `botToken`, `appToken`, `signingSecret`, `webhookPath`, `accounts.*`
|
||||
- acesso a DM: `dm.enabled`, `dmPolicy`, `allowFrom` (legado: `dm.policy`, `dm.allowFrom`), `dm.groupEnabled`, `dm.groupChannels`
|
||||
- alternância de compatibilidade: `dangerouslyAllowNameMatching` (último recurso; mantenha desativado a menos que seja necessário)
|
||||
- alternância de compatibilidade: `dangerouslyAllowNameMatching` (quebra-galho; mantenha desativado, a menos que seja necessário)
|
||||
- acesso a canal: `groupPolicy`, `channels.*`, `channels.*.users`, `channels.*.requireMention`
|
||||
- threading/histórico: `replyToMode`, `replyToModeByChatType`, `thread.*`, `historyLimit`, `dmHistoryLimit`, `dms.*.historyLimit`
|
||||
- entrega: `textChunkLimit`, `chunkMode`, `mediaMaxMb`, `streaming`, `nativeStreaming`
|
||||
- entrega: `textChunkLimit`, `chunkMode`, `mediaMaxMb`, `streaming`, `streaming.nativeTransport`
|
||||
- operações/recursos: `configWrites`, `commands.native`, `slashCommand.*`, `actions.*`, `userToken`, `userTokenReadOnly`
|
||||
|
||||
## Solução de problemas
|
||||
@ -703,9 +708,9 @@ Referência principal:
|
||||
Verifique, nesta ordem:
|
||||
|
||||
- `groupPolicy`
|
||||
- lista de permissões de canal (`channels.slack.channels`)
|
||||
- allowlist de canais (`channels.slack.channels`)
|
||||
- `requireMention`
|
||||
- lista de permissões `users` por canal
|
||||
- allowlist `users` por canal
|
||||
|
||||
Comandos úteis:
|
||||
|
||||
@ -722,7 +727,7 @@ openclaw doctor
|
||||
|
||||
- `channels.slack.dm.enabled`
|
||||
- `channels.slack.dmPolicy` (ou legado `channels.slack.dm.policy`)
|
||||
- aprovações de pareamento / entradas de lista de permissões
|
||||
- aprovações de pareamento / entradas de allowlist
|
||||
|
||||
```bash
|
||||
openclaw pairing list slack
|
||||
@ -730,37 +735,37 @@ openclaw pairing list slack
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="O modo socket não está conectando">
|
||||
<Accordion title="Socket mode não conecta">
|
||||
Valide os tokens de bot + app e a ativação do Socket Mode nas configurações do app do Slack.
|
||||
|
||||
Se `openclaw channels status --probe --json` mostrar `botTokenStatus` ou
|
||||
`appTokenStatus: "configured_unavailable"`, a conta do Slack está
|
||||
configurada, mas o runtime atual não conseguiu resolver o valor
|
||||
configurada, mas o tempo de execução atual não conseguiu resolver o valor
|
||||
respaldado por SecretRef.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="O modo HTTP não está recebendo eventos">
|
||||
<Accordion title="Modo HTTP não recebe eventos">
|
||||
Valide:
|
||||
|
||||
- signing secret
|
||||
- caminho do webhook
|
||||
- URLs de solicitação do Slack (Events + Interactivity + Slash Commands)
|
||||
- URLs de solicitação do Slack (Eventos + Interatividade + Comandos de barra)
|
||||
- `webhookPath` exclusivo por conta HTTP
|
||||
|
||||
Se `signingSecretStatus: "configured_unavailable"` aparecer nos snapshots
|
||||
da conta, a conta HTTP está configurada, mas o runtime atual não conseguiu
|
||||
de conta, a conta HTTP está configurada, mas o tempo de execução atual não conseguiu
|
||||
resolver o signing secret respaldado por SecretRef.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Comandos nativos/slash não estão disparando">
|
||||
Verifique se a sua intenção era:
|
||||
<Accordion title="Comandos nativos/slash não disparam">
|
||||
Verifique se sua intenção era:
|
||||
|
||||
- modo de comando nativo (`channels.slack.commands.native: true`) com comandos de barra correspondentes registrados no Slack
|
||||
- ou modo de comando de barra único (`channels.slack.slashCommand.enabled: true`)
|
||||
|
||||
Verifique também `commands.useAccessGroups` e as listas de permissões de canal/usuário.
|
||||
Verifique também `commands.useAccessGroups` e allowlists de canal/usuário.
|
||||
|
||||
</Accordion>
|
||||
</AccordionGroup>
|
||||
|
||||
@ -1,14 +1,14 @@
|
||||
---
|
||||
read_when:
|
||||
- Você quer entender como a memória funciona
|
||||
- Você quer saber em quais arquivos de memória escrever
|
||||
- Você quer saber quais arquivos de memória escrever
|
||||
summary: Como o OpenClaw se lembra das coisas entre sessões
|
||||
title: Visão geral da memória
|
||||
x-i18n:
|
||||
generated_at: "2026-04-06T03:06:38Z"
|
||||
generated_at: "2026-04-08T05:26:41Z"
|
||||
model: gpt-5.4
|
||||
provider: openai
|
||||
source_hash: d19d4fa9c4b3232b7a97f7a382311d2a375b562040de15e9fe4a0b1990b825e7
|
||||
source_hash: 3bb8552341b0b651609edaaae826a22fdc535d240aed4fad4af4b069454004af
|
||||
source_path: concepts/memory.md
|
||||
workflow: 15
|
||||
---
|
||||
@ -16,19 +16,19 @@ x-i18n:
|
||||
# Visão geral da memória
|
||||
|
||||
O OpenClaw se lembra das coisas gravando **arquivos Markdown simples** no
|
||||
workspace do seu agente. O modelo só "se lembra" do que é salvo em disco -- não
|
||||
workspace do seu agente. O modelo só “se lembra” do que é salvo em disco -- não
|
||||
há estado oculto.
|
||||
|
||||
## Como funciona
|
||||
|
||||
Seu agente tem três arquivos relacionados à memória:
|
||||
|
||||
- **`MEMORY.md`** -- memória de longo prazo. Fatos duráveis, preferências e
|
||||
- **`MEMORY.md`** -- memória de longo prazo. Fatos duradouros, preferências e
|
||||
decisões. Carregado no início de toda sessão de DM.
|
||||
- **`memory/YYYY-MM-DD.md`** -- notas diárias. Contexto em andamento e
|
||||
observações. As notas de hoje e de ontem são carregadas automaticamente.
|
||||
- **`memory/YYYY-MM-DD.md`** -- notas diárias. Contexto contínuo e observações.
|
||||
As notas de hoje e de ontem são carregadas automaticamente.
|
||||
- **`DREAMS.md`** (experimental, opcional) -- Diário de Sonhos e resumos das
|
||||
varreduras de sonho para revisão humana.
|
||||
varreduras de sonhos para revisão humana.
|
||||
|
||||
Esses arquivos ficam no workspace do agente (padrão `~/.openclaw/workspace`).
|
||||
|
||||
@ -41,11 +41,34 @@ eu prefiro TypeScript." Ele gravará isso no arquivo apropriado.
|
||||
|
||||
O agente tem duas ferramentas para trabalhar com memória:
|
||||
|
||||
- **`memory_search`** -- encontra notas relevantes usando busca semântica, mesmo
|
||||
quando a formulação difere da original.
|
||||
- **`memory_get`** -- lê um arquivo de memória específico ou um intervalo de linhas.
|
||||
- **`memory_search`** -- encontra notas relevantes usando busca semântica,
|
||||
mesmo quando a formulação difere da original.
|
||||
- **`memory_get`** -- lê um arquivo de memória específico ou um intervalo de
|
||||
linhas.
|
||||
|
||||
Ambas as ferramentas são fornecidas pelo plugin de memória ativo (padrão: `memory-core`).
|
||||
Ambas as ferramentas são fornecidas pelo plugin de memória ativo (padrão:
|
||||
`memory-core`).
|
||||
|
||||
## Plugin complementar Memory Wiki
|
||||
|
||||
Se você quiser que a memória duradoura se comporte mais como uma base de
|
||||
conhecimento mantida do que apenas notas brutas, use o plugin integrado
|
||||
`memory-wiki`.
|
||||
|
||||
O `memory-wiki` compila o conhecimento duradouro em um cofre wiki com:
|
||||
|
||||
- estrutura de páginas determinística
|
||||
- afirmações e evidências estruturadas
|
||||
- rastreamento de contradições e atualidade
|
||||
- painéis gerados
|
||||
- resumos compilados para consumidores do agente/runtime
|
||||
- ferramentas nativas de wiki como `wiki_search`, `wiki_get`, `wiki_apply` e `wiki_lint`
|
||||
|
||||
Ele não substitui o plugin de memória ativo. O plugin de memória ativo ainda
|
||||
controla recordação, promoção e sonhos. O `memory-wiki` adiciona uma camada de
|
||||
conhecimento rica em procedência ao lado dele.
|
||||
|
||||
Veja [Memory Wiki](/pt-BR/plugins/memory-wiki).
|
||||
|
||||
## Busca de memória
|
||||
|
||||
@ -57,77 +80,88 @@ provedor compatível.
|
||||
|
||||
<Info>
|
||||
O OpenClaw detecta automaticamente seu provedor de embeddings a partir das
|
||||
chaves de API disponíveis. Se você tiver uma chave OpenAI, Gemini, Voyage ou
|
||||
chaves de API disponíveis. Se você tiver uma chave da OpenAI, Gemini, Voyage ou
|
||||
Mistral configurada, a busca de memória será ativada automaticamente.
|
||||
</Info>
|
||||
|
||||
Para detalhes sobre como a busca funciona, opções de ajuste e configuração de
|
||||
provedor, consulte [Busca de memória](/pt-BR/concepts/memory-search).
|
||||
Para detalhes sobre como a busca funciona, opções de ajuste e configuração do
|
||||
provedor, veja [Memory Search](/pt-BR/concepts/memory-search).
|
||||
|
||||
## Backends de memória
|
||||
|
||||
<CardGroup cols={3}>
|
||||
<Card title="Integrado (padrão)" icon="database" href="/pt-BR/concepts/memory-builtin">
|
||||
Baseado em SQLite. Funciona imediatamente com busca por palavra-chave, similaridade vetorial e
|
||||
busca híbrida. Sem dependências extras.
|
||||
Baseado em SQLite. Funciona imediatamente com busca por palavra-chave,
|
||||
similaridade vetorial e busca híbrida. Sem dependências extras.
|
||||
</Card>
|
||||
<Card title="QMD" icon="search" href="/pt-BR/concepts/memory-qmd">
|
||||
Sidecar local-first com reranking, expansão de consulta e a capacidade de indexar
|
||||
diretórios fora do workspace.
|
||||
Sidecar local-first com reranqueamento, expansão de consulta e a capacidade de
|
||||
indexar diretórios fora do workspace.
|
||||
</Card>
|
||||
<Card title="Honcho" icon="brain" href="/pt-BR/concepts/memory-honcho">
|
||||
Memória entre sessões nativa para IA com modelagem de usuário, busca semântica e
|
||||
consciência multiagente. Instalação por plugin.
|
||||
Memória entre sessões nativa de IA com modelagem de usuário, busca semântica e
|
||||
consciência de múltiplos agentes. Instalação por plugin.
|
||||
</Card>
|
||||
</CardGroup>
|
||||
|
||||
## Flush automático da memória
|
||||
## Camada wiki de conhecimento
|
||||
|
||||
<CardGroup cols={1}>
|
||||
<Card title="Memory Wiki" icon="book" href="/pt-BR/plugins/memory-wiki">
|
||||
Compila a memória duradoura em um cofre wiki rico em procedência com
|
||||
afirmações, painéis, modo bridge e fluxos de trabalho compatíveis com Obsidian.
|
||||
</Card>
|
||||
</CardGroup>
|
||||
|
||||
## Descarga automática de memória
|
||||
|
||||
Antes que a [compactação](/pt-BR/concepts/compaction) resuma sua conversa, o OpenClaw
|
||||
executa um turno silencioso que lembra o agente de salvar contexto importante em
|
||||
arquivos de memória. Isso vem ativado por padrão -- você não precisa configurar nada.
|
||||
executa um turno silencioso que lembra o agente de salvar contexto importante
|
||||
em arquivos de memória. Isso vem ativado por padrão -- você não precisa
|
||||
configurar nada.
|
||||
|
||||
<Tip>
|
||||
O flush da memória evita perda de contexto durante a compactação. Se o seu
|
||||
A descarga de memória evita perda de contexto durante a compactação. Se o seu
|
||||
agente tiver fatos importantes na conversa que ainda não foram gravados em um
|
||||
arquivo, eles serão salvos automaticamente antes de o resumo acontecer.
|
||||
arquivo, eles serão salvos automaticamente antes que o resumo aconteça.
|
||||
</Tip>
|
||||
|
||||
## Dreaming (experimental)
|
||||
## Sonhos (experimental)
|
||||
|
||||
Dreaming é uma etapa opcional de consolidação de memória em segundo plano. Ela coleta
|
||||
sinais de curto prazo, pontua candidatos e promove apenas itens qualificados para a
|
||||
memória de longo prazo (`MEMORY.md`).
|
||||
Sonhos é uma etapa opcional de consolidação de memória em segundo plano. Ela
|
||||
coleta sinais de curto prazo, pontua candidatos e promove apenas itens
|
||||
qualificados para a memória de longo prazo (`MEMORY.md`).
|
||||
|
||||
Ela foi projetada para manter a memória de longo prazo com alto sinal:
|
||||
|
||||
- **Opt-in**: desativada por padrão.
|
||||
- **Agendada**: quando ativado, `memory-core` gerencia automaticamente um job cron recorrente
|
||||
para uma varredura completa de dreaming.
|
||||
- **Com limiares**: as promoções precisam passar por critérios de pontuação, frequência de recuperação e
|
||||
diversidade de consultas.
|
||||
- **Revisável**: resumos de fase e entradas de diário são gravados em `DREAMS.md`
|
||||
para revisão humana.
|
||||
- **Opt-in**: desativado por padrão.
|
||||
- **Agendado**: quando ativado, o `memory-core` gerencia automaticamente um job
|
||||
recorrente de cron para uma varredura completa de sonhos.
|
||||
- **Com limiar**: as promoções precisam passar por critérios de pontuação,
|
||||
frequência de recordação e diversidade de consulta.
|
||||
- **Revisável**: resumos de fase e entradas do diário são gravados em
|
||||
`DREAMS.md` para revisão humana.
|
||||
|
||||
Para comportamento por fase, sinais de pontuação e detalhes do Diário de Sonhos, consulte
|
||||
[Dreaming (experimental)](/concepts/dreaming).
|
||||
Para comportamento por fase, sinais de pontuação e detalhes do Diário de
|
||||
Sonhos, veja [Dreaming (experimental)](/pt-BR/concepts/dreaming).
|
||||
|
||||
## CLI
|
||||
|
||||
```bash
|
||||
openclaw memory status # Verifica o status do índice e do provedor
|
||||
openclaw memory search "query" # Pesquisa pela linha de comando
|
||||
openclaw memory index --force # Reconstrói o índice
|
||||
openclaw memory status # Verificar status do índice e do provedor
|
||||
openclaw memory search "query" # Pesquisar pela linha de comando
|
||||
openclaw memory index --force # Reconstruir o índice
|
||||
```
|
||||
|
||||
## Leitura adicional
|
||||
|
||||
- [Builtin Memory Engine](/pt-BR/concepts/memory-builtin) -- backend SQLite padrão
|
||||
- [QMD Memory Engine](/pt-BR/concepts/memory-qmd) -- sidecar local-first avançado
|
||||
- [Honcho Memory](/pt-BR/concepts/memory-honcho) -- memória entre sessões nativa para IA
|
||||
- [Busca de memória](/pt-BR/concepts/memory-search) -- pipeline de busca, provedores e
|
||||
- [Honcho Memory](/pt-BR/concepts/memory-honcho) -- memória nativa de IA entre sessões
|
||||
- [Memory Wiki](/pt-BR/plugins/memory-wiki) -- cofre de conhecimento compilado e ferramentas nativas de wiki
|
||||
- [Memory Search](/pt-BR/concepts/memory-search) -- pipeline de busca, provedores e
|
||||
ajuste
|
||||
- [Dreaming (experimental)](/concepts/dreaming) -- promoção em segundo plano
|
||||
da recuperação de curto prazo para a memória de longo prazo
|
||||
- [Referência de configuração de memória](/pt-BR/reference/memory-config) -- todos os parâmetros de configuração
|
||||
- [Compactação](/pt-BR/concepts/compaction) -- como a compactação interage com a memória
|
||||
- [Dreaming (experimental)](/pt-BR/concepts/dreaming) -- promoção em segundo plano
|
||||
da recordação de curto prazo para a memória de longo prazo
|
||||
- [Memory configuration reference](/pt-BR/reference/memory-config) -- todos os ajustes de configuração
|
||||
- [Compaction](/pt-BR/concepts/compaction) -- como a compactação interage com a memória
|
||||
|
||||
@ -5,10 +5,10 @@ read_when:
|
||||
summary: Visão geral dos provedores de modelos com exemplos de configuração + fluxos da CLI
|
||||
title: Provedores de modelos
|
||||
x-i18n:
|
||||
generated_at: "2026-04-08T02:15:49Z"
|
||||
generated_at: "2026-04-08T05:28:35Z"
|
||||
model: gpt-5.4
|
||||
provider: openai
|
||||
source_hash: 26b36a2bc19a28a7ef39aa8e81a0050fea1d452ac4969122e5cdf8755e690258
|
||||
source_hash: 558ac9e34b67fcc3dd6791a01bebc17e1c34152fa6c5611593d681e8cfa532d9
|
||||
source_path: concepts/model-providers.md
|
||||
workflow: 15
|
||||
---
|
||||
@ -21,20 +21,21 @@ Para regras de seleção de modelos, consulte [/concepts/models](/pt-BR/concepts
|
||||
## Regras rápidas
|
||||
|
||||
- As referências de modelo usam `provider/model` (exemplo: `opencode/claude-opus-4-6`).
|
||||
- Se você definir `agents.defaults.models`, isso se torna a allowlist.
|
||||
- Se você definir `agents.defaults.models`, isso se tornará a lista de permissões.
|
||||
- Auxiliares da CLI: `openclaw onboard`, `openclaw models list`, `openclaw models set <provider/model>`.
|
||||
- As regras de runtime de fallback, sondas de cooldown e persistência de substituição de sessão
|
||||
estão documentadas em [/concepts/model-failover](/pt-BR/concepts/model-failover).
|
||||
- `models.providers.*.models[].contextWindow` é metadado nativo do modelo;
|
||||
`models.providers.*.models[].contextTokens` é o limite efetivo em runtime.
|
||||
- Plugins de provedor podem injetar catálogos de modelos via `registerProvider({ catalog })`;
|
||||
- Regras de fallback em tempo de execução, sondagens de cooldown e persistência
|
||||
de substituição de sessão estão documentadas em
|
||||
[/concepts/model-failover](/pt-BR/concepts/model-failover).
|
||||
- `models.providers.*.models[].contextWindow` são metadados nativos do modelo;
|
||||
`models.providers.*.models[].contextTokens` é o limite efetivo em tempo de execução.
|
||||
- Plugins de provedor podem injetar catálogos de modelos por meio de `registerProvider({ catalog })`;
|
||||
o OpenClaw mescla essa saída em `models.providers` antes de gravar
|
||||
`models.json`.
|
||||
- Manifestos de provedor podem declarar `providerAuthEnvVars` para que sondas genéricas
|
||||
de autenticação baseadas em variáveis de ambiente não precisem carregar o runtime do plugin. O mapa
|
||||
restante de variáveis de ambiente do núcleo agora fica apenas para provedores não baseados em plugin/do núcleo
|
||||
e alguns casos genéricos de precedência, como onboarding Anthropic com prioridade para chave de API.
|
||||
- Plugins de provedor também podem controlar o comportamento de runtime do provedor via
|
||||
- Manifestos de provedor podem declarar `providerAuthEnvVars` para que sondagens
|
||||
genéricas de autenticação baseadas em env não precisem carregar o runtime do plugin. O mapa
|
||||
restante de variáveis de ambiente do core agora é apenas para provedores não-plugin/core e alguns
|
||||
casos genéricos de precedência, como onboarding com prioridade para chave de API da Anthropic.
|
||||
- Plugins de provedor também podem controlar o comportamento do runtime do provedor por meio de
|
||||
`normalizeModelId`, `normalizeTransport`, `normalizeConfig`,
|
||||
`applyNativeStreamingUsageCompat`, `resolveConfigApiKey`,
|
||||
`resolveSyntheticAuth`, `shouldDeferSyntheticProfileAuth`,
|
||||
@ -52,198 +53,198 @@ Para regras de seleção de modelos, consulte [/concepts/models](/pt-BR/concepts
|
||||
`resolveDefaultThinkingLevel`, `applyConfigDefaults`, `isModernModelRef`,
|
||||
`prepareRuntimeAuth`, `resolveUsageAuth`, `fetchUsageSnapshot`, e
|
||||
`onModelSelected`.
|
||||
- Observação: `capabilities` do runtime do provedor são metadados compartilhados do executor (família
|
||||
do provedor, peculiaridades de transcrição/ferramentas, dicas de transporte/cache). Isso não é o
|
||||
mesmo que o [modelo de capacidades públicas](/pt-BR/plugins/architecture#public-capability-model),
|
||||
- Observação: `capabilities` do runtime do provedor são metadados compartilhados do runner (família do provedor,
|
||||
particularidades de transcrição/ferramentas, dicas de transporte/cache). Não é o
|
||||
mesmo que o [modelo público de capacidades](/pt-BR/plugins/architecture#public-capability-model)
|
||||
que descreve o que um plugin registra (inferência de texto, fala etc.).
|
||||
|
||||
## Comportamento de provedor controlado por plugin
|
||||
|
||||
Agora os plugins de provedor podem controlar a maior parte da lógica específica do provedor, enquanto o OpenClaw mantém
|
||||
Os plugins de provedor agora podem controlar a maior parte da lógica específica do provedor, enquanto o OpenClaw mantém
|
||||
o loop genérico de inferência.
|
||||
|
||||
Divisão típica:
|
||||
|
||||
- `auth[].run` / `auth[].runNonInteractive`: o provedor controla os fluxos
|
||||
de onboarding/login para `openclaw onboard`, `openclaw models auth` e configuração headless
|
||||
- `auth[].run` / `auth[].runNonInteractive`: o provedor controla os fluxos de onboarding/login
|
||||
para `openclaw onboard`, `openclaw models auth` e configuração sem interface
|
||||
- `wizard.setup` / `wizard.modelPicker`: o provedor controla rótulos de escolha de autenticação,
|
||||
aliases legados, dicas de allowlist de onboarding e entradas de configuração nos seletores de onboarding/modelo
|
||||
aliases legados, dicas de lista de permissões no onboarding e entradas de configuração nos seletores de onboarding/modelo
|
||||
- `catalog`: o provedor aparece em `models.providers`
|
||||
- `normalizeModelId`: o provedor normaliza IDs de modelo legados/prévia antes da
|
||||
- `normalizeModelId`: o provedor normaliza ids de modelos legados/prévia antes da
|
||||
busca ou canonização
|
||||
- `normalizeTransport`: o provedor normaliza `api` / `baseUrl` da família de transporte
|
||||
antes da montagem genérica do modelo; o OpenClaw verifica primeiro o provedor correspondente,
|
||||
depois outros plugins de provedor com suporte a hooks até que um realmente altere o
|
||||
transporte
|
||||
- `normalizeConfig`: o provedor normaliza a configuração `models.providers.<id>` antes
|
||||
de o runtime usá-la; o OpenClaw verifica primeiro o provedor correspondente, depois outros
|
||||
- `normalizeConfig`: o provedor normaliza a configuração `models.providers.<id>` antes de o
|
||||
runtime usá-la; o OpenClaw verifica primeiro o provedor correspondente, depois outros
|
||||
plugins de provedor com suporte a hooks até que um realmente altere a configuração. Se nenhum
|
||||
hook de provedor reescrever a configuração, os auxiliares agrupados da família Google ainda
|
||||
normalizam as entradas de provedor Google compatíveis.
|
||||
- `applyNativeStreamingUsageCompat`: o provedor aplica regravações de compatibilidade de uso nativo em streaming orientadas por endpoint para provedores de configuração
|
||||
- `resolveConfigApiKey`: o provedor resolve autenticação por marcador de ambiente para provedores de configuração
|
||||
sem forçar o carregamento completo da autenticação de runtime. `amazon-bedrock` também tem um
|
||||
resolvedor interno de marcador de ambiente AWS aqui, embora a autenticação de runtime do Bedrock use
|
||||
a cadeia padrão do AWS SDK.
|
||||
- `resolveSyntheticAuth`: o provedor pode expor disponibilidade de autenticação local/self-hosted ou outra
|
||||
autenticação baseada em configuração sem persistir segredos em texto simples
|
||||
normalizam as entradas compatíveis de provedores Google.
|
||||
- `applyNativeStreamingUsageCompat`: o provedor aplica reescritas de compatibilidade de uso de streaming nativo orientadas por endpoint para provedores de configuração
|
||||
- `resolveConfigApiKey`: o provedor resolve autenticação por marcador env para provedores de configuração
|
||||
sem forçar o carregamento completo da autenticação em runtime. `amazon-bedrock` também tem um
|
||||
resolvedor embutido de marcador env da AWS aqui, embora a autenticação de runtime do Bedrock use
|
||||
a cadeia padrão do SDK da AWS.
|
||||
- `resolveSyntheticAuth`: o provedor pode expor disponibilidade de autenticação
|
||||
local/self-hosted ou outra autenticação baseada em configuração sem persistir segredos em texto simples
|
||||
- `shouldDeferSyntheticProfileAuth`: o provedor pode marcar placeholders sintéticos de perfil armazenados
|
||||
como de precedência inferior à autenticação baseada em ambiente/configuração
|
||||
- `resolveDynamicModel`: o provedor aceita IDs de modelo ainda não presentes no
|
||||
com precedência menor que a autenticação baseada em env/configuração
|
||||
- `resolveDynamicModel`: o provedor aceita ids de modelos ainda não presentes no
|
||||
catálogo estático local
|
||||
- `prepareDynamicModel`: o provedor precisa de uma atualização de metadados antes de tentar
|
||||
novamente a resolução dinâmica
|
||||
- `normalizeResolvedModel`: o provedor precisa de regravações de transporte ou URL base
|
||||
- `contributeResolvedModelCompat`: o provedor contribui com flags de compatibilidade para seus
|
||||
modelos do fornecedor, mesmo quando eles chegam por meio de outro transporte compatível
|
||||
- `capabilities`: o provedor publica peculiaridades de transcrição/ferramentas/família de provedor
|
||||
- `normalizeToolSchemas`: o provedor limpa os esquemas de ferramenta antes que o
|
||||
executor incorporado os veja
|
||||
- `prepareDynamicModel`: o provedor precisa de uma atualização de metadados antes de tentar novamente
|
||||
a resolução dinâmica
|
||||
- `normalizeResolvedModel`: o provedor precisa de reescritas de transporte ou URL base
|
||||
- `contributeResolvedModelCompat`: o provedor contribui flags de compatibilidade para seus
|
||||
modelos do fornecedor mesmo quando eles chegam por outro transporte compatível
|
||||
- `capabilities`: o provedor publica particularidades de transcrição/ferramentas/família do provedor
|
||||
- `normalizeToolSchemas`: o provedor limpa esquemas de ferramentas antes que o
|
||||
runner incorporado os veja
|
||||
- `inspectToolSchemas`: o provedor expõe avisos de esquema específicos do transporte
|
||||
após a normalização
|
||||
- `resolveReasoningOutputMode`: o provedor escolhe contratos de saída de raciocínio
|
||||
nativos ou marcados
|
||||
- `resolveReasoningOutputMode`: o provedor escolhe contratos nativos vs marcados
|
||||
de saída de raciocínio
|
||||
- `prepareExtraParams`: o provedor define padrões ou normaliza parâmetros de requisição por modelo
|
||||
- `createStreamFn`: o provedor substitui o caminho normal de stream por um
|
||||
transporte totalmente personalizado
|
||||
- `wrapStreamFn`: o provedor aplica wrappers de compatibilidade de cabeçalhos/corpo/modelo da requisição
|
||||
- `resolveTransportTurnState`: o provedor fornece cabeçalhos nativos por turno do transporte
|
||||
ou metadados
|
||||
- `resolveWebSocketSessionPolicy`: o provedor fornece cabeçalhos nativos de sessão WebSocket
|
||||
ou política de cooldown da sessão
|
||||
- `wrapStreamFn`: o provedor aplica wrappers de compatibilidade a cabeçalhos/corpo/modelo da requisição
|
||||
- `resolveTransportTurnState`: o provedor fornece
|
||||
cabeçalhos ou metadados nativos de transporte por turno
|
||||
- `resolveWebSocketSessionPolicy`: o provedor fornece
|
||||
cabeçalhos de sessão nativos de WebSocket ou política de cooldown da sessão
|
||||
- `createEmbeddingProvider`: o provedor controla o comportamento de embeddings de memória quando isso
|
||||
pertence ao plugin do provedor em vez do switchboard central de embeddings
|
||||
pertence ao plugin do provedor em vez do comutador central de embeddings do core
|
||||
- `formatApiKey`: o provedor formata perfis de autenticação armazenados para a string
|
||||
`apiKey` de runtime esperada pelo transporte
|
||||
`apiKey` esperada pelo transporte em runtime
|
||||
- `refreshOAuth`: o provedor controla a atualização de OAuth quando os
|
||||
atualizadores compartilhados de `pi-ai` não são suficientes
|
||||
- `buildAuthDoctorHint`: o provedor acrescenta orientações de reparo quando a atualização de OAuth
|
||||
atualizadores compartilhados `pi-ai` não são suficientes
|
||||
- `buildAuthDoctorHint`: o provedor acrescenta orientação de reparo quando a atualização de OAuth
|
||||
falha
|
||||
- `matchesContextOverflowError`: o provedor reconhece erros específicos do provedor
|
||||
de estouro da janela de contexto que heurísticas genéricas deixariam passar
|
||||
- `classifyFailoverReason`: o provedor mapeia erros brutos específicos do provedor de transporte/API
|
||||
para motivos de failover, como limite de taxa ou sobrecarga
|
||||
- `isCacheTtlEligible`: o provedor decide quais IDs de modelo upstream oferecem suporte a TTL de cache de prompt
|
||||
de estouro de janela de contexto que as heurísticas genéricas não detectariam
|
||||
- `classifyFailoverReason`: o provedor mapeia erros brutos específicos do provedor em transporte/API
|
||||
para razões de failover, como limite de taxa ou sobrecarga
|
||||
- `isCacheTtlEligible`: o provedor decide quais ids de modelo upstream suportam TTL de cache de prompt
|
||||
- `buildMissingAuthMessage`: o provedor substitui o erro genérico do armazenamento de autenticação
|
||||
por uma dica de recuperação específica do provedor
|
||||
- `suppressBuiltInModel`: o provedor oculta linhas upstream desatualizadas e pode retornar um
|
||||
erro controlado pelo fornecedor para falhas de resolução direta
|
||||
- `augmentModelCatalog`: o provedor acrescenta linhas sintéticas/finais do catálogo após
|
||||
- `augmentModelCatalog`: o provedor acrescenta linhas sintéticas/finais de catálogo após
|
||||
descoberta e mesclagem de configuração
|
||||
- `isBinaryThinking`: o provedor controla a UX de pensamento binário ligado/desligado
|
||||
- `supportsXHighThinking`: o provedor inclui modelos selecionados em `xhigh`
|
||||
- `supportsXHighThinking`: o provedor habilita `xhigh` para modelos selecionados
|
||||
- `resolveDefaultThinkingLevel`: o provedor controla a política padrão de `/think` para uma
|
||||
família de modelos
|
||||
- `applyConfigDefaults`: o provedor aplica padrões globais específicos do provedor
|
||||
durante a materialização da configuração com base no modo de autenticação, ambiente ou família de modelos
|
||||
- `isModernModelRef`: o provedor controla a correspondência de modelo preferido em live/smoke
|
||||
- `prepareRuntimeAuth`: o provedor transforma uma credencial configurada em um token
|
||||
de runtime de curta duração
|
||||
durante a materialização da configuração com base no modo de autenticação, env ou família de modelo
|
||||
- `isModernModelRef`: o provedor controla a correspondência de modelo preferido para live/smoke
|
||||
- `prepareRuntimeAuth`: o provedor converte uma credencial configurada em um token de runtime
|
||||
de curta duração
|
||||
- `resolveUsageAuth`: o provedor resolve credenciais de uso/cota para `/usage`
|
||||
e superfícies relacionadas de status/relatórios
|
||||
e superfícies relacionadas de status/relatório
|
||||
- `fetchUsageSnapshot`: o provedor controla a busca/análise do endpoint de uso, enquanto
|
||||
o núcleo ainda controla a estrutura de resumo e a formatação
|
||||
o core ainda controla o shell de resumo e a formatação
|
||||
- `onModelSelected`: o provedor executa efeitos colaterais pós-seleção, como
|
||||
telemetria ou bookkeeping de sessão controlado pelo provedor
|
||||
|
||||
Exemplos agrupados atuais:
|
||||
Exemplos agrupados atualmente:
|
||||
|
||||
- `anthropic`: fallback de compatibilidade futura para Claude 4.6, dicas de reparo de autenticação, busca de endpoint
|
||||
de uso, metadados de cache-TTL/família de provedor e padrões globais
|
||||
de configuração sensíveis à autenticação
|
||||
- `amazon-bedrock`: correspondência de estouro de contexto controlada pelo provedor e classificação
|
||||
de motivo de failover para erros Bedrock específicos de throttling/não pronto, além
|
||||
da família compartilhada de replay `anthropic-by-model` para guardas de política de replay somente para Claude
|
||||
em tráfego Anthropic
|
||||
- `anthropic-vertex`: guardas de política de replay somente para Claude em tráfego
|
||||
- `anthropic`: fallback de compatibilidade futura do Claude 4.6, dicas de reparo de autenticação, busca de
|
||||
endpoint de uso, metadados de TTL de cache/família do provedor e padrões globais de
|
||||
configuração sensíveis à autenticação
|
||||
- `amazon-bedrock`: correspondência de estouro de contexto controlada pelo provedor e classificação de
|
||||
motivo de failover para erros específicos do Bedrock de throttling/não pronto, além
|
||||
da família compartilhada `anthropic-by-model` de replay para proteções de política de replay
|
||||
apenas para Claude no tráfego Anthropic
|
||||
- `anthropic-vertex`: proteções de política de replay apenas para Claude no tráfego
|
||||
de mensagens Anthropic
|
||||
- `openrouter`: IDs de modelo pass-through, wrappers de requisição, dicas de capacidade do provedor,
|
||||
sanitização de assinatura de pensamento Gemini em tráfego Gemini por proxy,
|
||||
injeção de raciocínio de proxy por meio da família de stream `openrouter-thinking`,
|
||||
encaminhamento de metadados de roteamento e política de cache-TTL
|
||||
- `github-copilot`: onboarding/login por dispositivo, fallback de modelo compatível com versões futuras,
|
||||
dicas de transcrição de pensamento Claude, troca de token em runtime e busca de endpoint
|
||||
de uso
|
||||
- `openai`: fallback de compatibilidade futura para GPT-5.4, normalização direta do transporte OpenAI,
|
||||
dicas de autenticação ausente sensíveis a Codex, supressão de Spark, linhas sintéticas
|
||||
de catálogo OpenAI/Codex, política de pensamento/modelo live, normalização de aliases
|
||||
de token de uso (`input` / `output` e famílias `prompt` / `completion`), a
|
||||
família compartilhada de stream `openai-responses-defaults` para wrappers nativos OpenAI/Codex,
|
||||
metadados de família de provedor, registro agrupado de provedor de geração de imagens
|
||||
- `openrouter`: ids de modelo pass-through, wrappers de requisição, dicas de capacidade do provedor,
|
||||
sanitização de assinatura de pensamento do Gemini em tráfego Gemini via proxy, injeção de
|
||||
raciocínio do proxy por meio da família de stream `openrouter-thinking`, encaminhamento de
|
||||
metadados de roteamento e política de TTL de cache
|
||||
- `github-copilot`: onboarding/login do dispositivo, fallback de modelo com compatibilidade futura,
|
||||
dicas de transcrição de pensamento do Claude, troca de token em runtime e busca do endpoint de
|
||||
uso
|
||||
- `openai`: fallback de compatibilidade futura do GPT-5.4, normalização direta de
|
||||
transporte OpenAI, dicas de autenticação ausente conscientes de Codex, supressão do Spark, linhas sintéticas de
|
||||
catálogo OpenAI/Codex, política de pensamento/modelo live, normalização de alias de token de uso
|
||||
(`input` / `output` e famílias `prompt` / `completion`), a família compartilhada de stream
|
||||
`openai-responses-defaults` para wrappers nativos OpenAI/Codex,
|
||||
metadados da família do provedor, registro agrupado de provedor de geração de imagem
|
||||
para `gpt-image-1` e registro agrupado de provedor de geração de vídeo
|
||||
para `sora-2`
|
||||
- `google` e `google-gemini-cli`: fallback de compatibilidade futura para Gemini 3.1,
|
||||
validação nativa de replay Gemini, sanitização de replay de bootstrap, modo
|
||||
de saída de raciocínio marcado, correspondência de modelo moderno, registro agrupado de provedor de geração
|
||||
de imagens para modelos Gemini image-preview e registro agrupado de
|
||||
provedor de geração de vídeo para modelos Veo; o OAuth do Gemini CLI também
|
||||
controla formatação de token de perfil de autenticação, análise de token de uso e busca
|
||||
de endpoint de cota para superfícies de uso
|
||||
- `moonshot`: transporte compartilhado, normalização de payload de pensamento controlada por plugin
|
||||
- `kilocode`: transporte compartilhado, cabeçalhos de requisição controlados por plugin, payload de raciocínio
|
||||
normalização, sanitização de assinatura de pensamento proxy-Gemini e política de cache-TTL
|
||||
- `zai`: fallback de compatibilidade futura para GLM-5, padrões de `tool_stream`, política de cache-TTL,
|
||||
política de pensamento binário/modelo live e autenticação de uso + busca de cota;
|
||||
IDs desconhecidos `glm-5*` são sintetizados a partir do modelo agrupado `glm-4.7`
|
||||
- `xai`: normalização nativa do transporte Responses, regravações do alias `/fast` para
|
||||
variantes rápidas de Grok, padrão `tool_stream`, limpeza de esquema de ferramenta /
|
||||
- `google` e `google-gemini-cli`: fallback de compatibilidade futura do Gemini 3.1,
|
||||
validação nativa de replay do Gemini, sanitização de replay no bootstrap, modo marcado
|
||||
de saída de raciocínio, correspondência de modelo moderno, registro agrupado de provedor de geração de imagem
|
||||
para modelos Gemini image-preview e registro agrupado
|
||||
de provedor de geração de vídeo para modelos Veo; o OAuth do Gemini CLI também
|
||||
controla a formatação do token de perfil de autenticação, a análise do token de uso e a busca do endpoint de cota
|
||||
para superfícies de uso
|
||||
- `moonshot`: transporte compartilhado, normalização de payload de pensamento controlada pelo plugin
|
||||
- `kilocode`: transporte compartilhado, cabeçalhos de requisição controlados pelo plugin, normalização de payload
|
||||
de raciocínio, sanitização de assinatura de pensamento do Gemini via proxy e política de TTL de
|
||||
cache
|
||||
- `zai`: fallback de compatibilidade futura do GLM-5, padrões `tool_stream`, política de TTL de
|
||||
cache, política de pensamento binário/modelo live e autenticação de uso + busca de cota;
|
||||
ids desconhecidos `glm-5*` são sintetizados a partir do template agrupado `glm-4.7`
|
||||
- `xai`: normalização nativa do transporte Responses, reescritas de alias `/fast` para
|
||||
variantes rápidas do Grok, padrão `tool_stream`, limpeza de esquema de ferramenta /
|
||||
payload de raciocínio específica do xAI e registro agrupado de provedor de geração de vídeo
|
||||
para `grok-imagine-video`
|
||||
- `mistral`: metadados de capacidade controlados por plugin
|
||||
- `opencode` e `opencode-go`: metadados de capacidade controlados por plugin, além de
|
||||
sanitização de assinatura de pensamento proxy-Gemini
|
||||
- `alibaba`: catálogo de geração de vídeo controlado por plugin para referências diretas a modelos Wan
|
||||
- `mistral`: metadados de capacidade controlados pelo plugin
|
||||
- `opencode` e `opencode-go`: metadados de capacidade controlados pelo plugin, além
|
||||
de sanitização de assinatura de pensamento do Gemini via proxy
|
||||
- `alibaba`: catálogo de geração de vídeo controlado pelo plugin para referências diretas a modelos Wan
|
||||
como `alibaba/wan2.6-t2v`
|
||||
- `byteplus`: catálogos controlados por plugin, além de registro agrupado de provedor de geração de vídeo
|
||||
para modelos Seedance de texto para vídeo/imagem para vídeo
|
||||
- `fal`: registro agrupado de provedor de geração de vídeo para provedor hospedado de terceiros
|
||||
de geração de imagens para modelos de imagem FLUX, além de registro agrupado
|
||||
de provedor de geração de vídeo para modelos de vídeo hospedados de terceiros
|
||||
- `byteplus`: catálogos controlados pelo plugin, além de registro agrupado de provedor de geração de vídeo
|
||||
para modelos Seedance text-to-video/image-to-video
|
||||
- `fal`: registro agrupado de provedor de geração de vídeo para terceiros hospedados
|
||||
e registro agrupado de provedor de geração de imagem para modelos de imagem FLUX, além de registro agrupado
|
||||
de provedor de geração de vídeo para modelos de vídeo de terceiros hospedados
|
||||
- `cloudflare-ai-gateway`, `huggingface`, `kimi`, `nvidia`, `qianfan`,
|
||||
`stepfun`, `synthetic`, `venice`, `vercel-ai-gateway` e `volcengine`:
|
||||
apenas catálogos controlados por plugin
|
||||
- `qwen`: catálogos controlados por plugin para modelos de texto, além de registros compartilhados
|
||||
de provedores de compreensão de mídia e geração de vídeo para suas
|
||||
superfícies multimodais; a geração de vídeo do Qwen usa os endpoints de vídeo Standard DashScope
|
||||
apenas catálogos controlados pelo plugin
|
||||
- `qwen`: catálogos controlados pelo plugin para modelos de texto, além de registros compartilhados
|
||||
de provedores de compreensão de mídia e geração de vídeo para suas superfícies
|
||||
multimodais; a geração de vídeo do Qwen usa os endpoints de vídeo Standard DashScope
|
||||
com modelos Wan agrupados como `wan2.6-t2v` e `wan2.7-r2v`
|
||||
- `runway`: registro controlado por plugin de provedor de geração de vídeo para modelos nativos
|
||||
- `runway`: registro de provedor de geração de vídeo controlado pelo plugin para modelos nativos
|
||||
baseados em tarefas do Runway, como `gen4.5`
|
||||
- `minimax`: catálogos controlados por plugin, registro agrupado de provedor de geração de vídeo
|
||||
- `minimax`: catálogos controlados pelo plugin, registro agrupado de provedor de geração de vídeo
|
||||
para modelos de vídeo Hailuo, registro agrupado de provedor de geração de imagem
|
||||
para `image-01`, seleção híbrida de política de replay Anthropic/OpenAI
|
||||
e lógica de autenticação/snapshot de uso
|
||||
- `together`: catálogos controlados por plugin, além de registro agrupado de provedor de geração de vídeo
|
||||
para `image-01`, seleção híbrida de política de replay Anthropic/OpenAI e lógica de autenticação/snapshot de uso
|
||||
- `together`: catálogos controlados pelo plugin, além de registro agrupado de provedor de geração de vídeo
|
||||
para modelos de vídeo Wan
|
||||
- `xiaomi`: catálogos controlados por plugin, além de lógica de autenticação/snapshot de uso
|
||||
- `xiaomi`: catálogos controlados pelo plugin, além de lógica de autenticação/snapshot de uso
|
||||
|
||||
O plugin agrupado `openai` agora controla ambos os IDs de provedor: `openai` e
|
||||
O plugin agrupado `openai` agora controla ambos os ids de provedor: `openai` e
|
||||
`openai-codex`.
|
||||
|
||||
Isso cobre provedores que ainda se encaixam nos transportes normais do OpenClaw. Um provedor
|
||||
que precise de um executor de requisição totalmente personalizado pertence a uma superfície
|
||||
de extensão separada e mais profunda.
|
||||
que precise de um executor de requisições totalmente personalizado é uma superfície de extensão
|
||||
separada e mais profunda.
|
||||
|
||||
## Rotação de chaves de API
|
||||
|
||||
- Suporta rotação genérica de provedor para provedores selecionados.
|
||||
- Configure múltiplas chaves via:
|
||||
- `OPENCLAW_LIVE_<PROVIDER>_KEY` (única substituição live, prioridade mais alta)
|
||||
- Configure várias chaves por meio de:
|
||||
- `OPENCLAW_LIVE_<PROVIDER>_KEY` (substituição live única, maior prioridade)
|
||||
- `<PROVIDER>_API_KEYS` (lista separada por vírgula ou ponto e vírgula)
|
||||
- `<PROVIDER>_API_KEY` (chave primária)
|
||||
- `<PROVIDER>_API_KEY_*` (lista numerada, por exemplo `<PROVIDER>_API_KEY_1`)
|
||||
- `<PROVIDER>_API_KEY_*` (lista numerada, ex.: `<PROVIDER>_API_KEY_1`)
|
||||
- Para provedores Google, `GOOGLE_API_KEY` também é incluída como fallback.
|
||||
- A ordem de seleção de chaves preserva a prioridade e remove valores duplicados.
|
||||
- As requisições são repetidas com a próxima chave apenas em respostas de limite de taxa (por
|
||||
- As requisições são tentadas novamente com a próxima chave apenas em respostas de limite de taxa (por
|
||||
exemplo `429`, `rate_limit`, `quota`, `resource exhausted`, `Too many
|
||||
concurrent requests`, `ThrottlingException`, `concurrency limit reached`,
|
||||
`workers_ai ... quota limit exceeded` ou mensagens periódicas de limite de uso).
|
||||
- Falhas que não sejam de limite de taxa falham imediatamente; nenhuma rotação de chave é tentada.
|
||||
- Quando todas as chaves candidatas falham, o erro final da última tentativa é retornado.
|
||||
- Falhas que não são de limite de taxa falham imediatamente; nenhuma rotação de chave é tentada.
|
||||
- Quando todas as chaves candidatas falham, o erro final é retornado a partir da última tentativa.
|
||||
|
||||
## Provedores integrados (catálogo pi-ai)
|
||||
|
||||
O OpenClaw vem com o catálogo pi‑ai. Esses provedores não exigem
|
||||
configuração em `models.providers`; basta definir a autenticação + escolher um modelo.
|
||||
configuração `models.providers`; basta definir a autenticação + escolher um modelo.
|
||||
|
||||
### OpenAI
|
||||
|
||||
@ -255,14 +256,14 @@ configuração em `models.providers`; basta definir a autenticação + escolher
|
||||
- O transporte padrão é `auto` (WebSocket primeiro, fallback para SSE)
|
||||
- Substitua por modelo via `agents.defaults.models["openai/<model>"].params.transport` (`"sse"`, `"websocket"` ou `"auto"`)
|
||||
- O aquecimento do WebSocket do OpenAI Responses vem ativado por padrão via `params.openaiWsWarmup` (`true`/`false`)
|
||||
- O processamento prioritário da OpenAI pode ser ativado via `agents.defaults.models["openai/<model>"].params.serviceTier`
|
||||
- O processamento prioritário da OpenAI pode ser ativado por meio de `agents.defaults.models["openai/<model>"].params.serviceTier`
|
||||
- `/fast` e `params.fastMode` mapeiam requisições diretas `openai/*` Responses para `service_tier=priority` em `api.openai.com`
|
||||
- Use `params.serviceTier` quando quiser uma camada explícita em vez do toggle compartilhado `/fast`
|
||||
- Cabeçalhos ocultos de atribuição do OpenClaw (`originator`, `version`,
|
||||
`User-Agent`) se aplicam apenas ao tráfego nativo da OpenAI para `api.openai.com`, não a
|
||||
`User-Agent`) se aplicam apenas ao tráfego nativo OpenAI para `api.openai.com`, não a
|
||||
proxies genéricos compatíveis com OpenAI
|
||||
- As rotas nativas da OpenAI também mantêm `store` do Responses, dicas de cache de prompt e
|
||||
modelagem de payload de compatibilidade de raciocínio da OpenAI; rotas por proxy não
|
||||
- Rotas nativas OpenAI também mantêm `store` do Responses, dicas de cache de prompt e
|
||||
modelagem de payload de compatibilidade de raciocínio OpenAI; rotas proxy não
|
||||
- `openai/gpt-5.3-codex-spark` é intencionalmente suprimido no OpenClaw porque a API live da OpenAI o rejeita; Spark é tratado apenas como Codex
|
||||
|
||||
```json5
|
||||
@ -278,9 +279,9 @@ configuração em `models.providers`; basta definir a autenticação + escolher
|
||||
- Rotação opcional: `ANTHROPIC_API_KEYS`, `ANTHROPIC_API_KEY_1`, `ANTHROPIC_API_KEY_2`, além de `OPENCLAW_LIVE_ANTHROPIC_KEY` (substituição única)
|
||||
- Modelo de exemplo: `anthropic/claude-opus-4-6`
|
||||
- CLI: `openclaw onboard --auth-choice apiKey`
|
||||
- Requisições públicas diretas à Anthropic suportam o toggle compartilhado `/fast` e `params.fastMode`, incluindo tráfego autenticado com chave de API e OAuth enviado a `api.anthropic.com`; o OpenClaw mapeia isso para `service_tier` da Anthropic (`auto` vs `standard_only`)
|
||||
- Observação sobre Anthropic: a equipe da Anthropic nos informou que o uso estilo Claude CLI no OpenClaw é permitido novamente, então o OpenClaw trata a reutilização do Claude CLI e o uso de `claude -p` como autorizados para esta integração, a menos que a Anthropic publique uma nova política.
|
||||
- O token de configuração da Anthropic continua disponível como um caminho de token compatível no OpenClaw, mas o OpenClaw agora prefere a reutilização do Claude CLI e `claude -p` quando disponíveis.
|
||||
- Requisições públicas diretas à Anthropic suportam o toggle compartilhado `/fast` e `params.fastMode`, incluindo tráfego autenticado por chave de API e OAuth enviado para `api.anthropic.com`; o OpenClaw mapeia isso para `service_tier` da Anthropic (`auto` vs `standard_only`)
|
||||
- Observação da Anthropic: a equipe da Anthropic nos informou que o uso do Claude CLI no estilo OpenClaw está novamente permitido, então o OpenClaw trata a reutilização do Claude CLI e o uso de `claude -p` como permitidos para esta integração, a menos que a Anthropic publique uma nova política.
|
||||
- O token de configuração da Anthropic continua disponível como um caminho de token suportado pelo OpenClaw, mas o OpenClaw agora prefere a reutilização do Claude CLI e `claude -p` quando disponíveis.
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -298,11 +299,11 @@ configuração em `models.providers`; basta definir a autenticação + escolher
|
||||
- Substitua por modelo via `agents.defaults.models["openai-codex/<model>"].params.transport` (`"sse"`, `"websocket"` ou `"auto"`)
|
||||
- `params.serviceTier` também é encaminhado em requisições nativas do Codex Responses (`chatgpt.com/backend-api`)
|
||||
- Cabeçalhos ocultos de atribuição do OpenClaw (`originator`, `version`,
|
||||
`User-Agent`) são anexados apenas ao tráfego nativo de Codex para
|
||||
`User-Agent`) são anexados apenas ao tráfego nativo Codex para
|
||||
`chatgpt.com/backend-api`, não a proxies genéricos compatíveis com OpenAI
|
||||
- Compartilha o mesmo toggle `/fast` e a mesma configuração `params.fastMode` de `openai/*` direto; o OpenClaw mapeia isso para `service_tier=priority`
|
||||
- Compartilha o mesmo toggle `/fast` e a configuração `params.fastMode` de `openai/*` direto; o OpenClaw mapeia isso para `service_tier=priority`
|
||||
- `openai-codex/gpt-5.3-codex-spark` continua disponível quando o catálogo OAuth do Codex o expõe; depende de entitlement
|
||||
- `openai-codex/gpt-5.4` mantém `contextWindow = 1050000` nativo e um `contextTokens = 272000` padrão em runtime; substitua o limite de runtime com `models.providers.openai-codex.models[].contextTokens`
|
||||
- `openai-codex/gpt-5.4` mantém `contextWindow = 1050000` nativo e um padrão de runtime `contextTokens = 272000`; substitua o limite de runtime com `models.providers.openai-codex.models[].contextTokens`
|
||||
- Observação de política: o OAuth do OpenAI Codex é explicitamente compatível com ferramentas/fluxos de trabalho externos como o OpenClaw.
|
||||
|
||||
```json5
|
||||
@ -325,9 +326,9 @@ configuração em `models.providers`; basta definir a autenticação + escolher
|
||||
|
||||
### Outras opções hospedadas no estilo assinatura
|
||||
|
||||
- [Qwen Cloud](/pt-BR/providers/qwen): superfície de provedor do Qwen Cloud, além de mapeamento de endpoint Alibaba DashScope e Coding Plan
|
||||
- [MiniMax](/pt-BR/providers/minimax): acesso ao OAuth ou à chave de API do MiniMax Coding Plan
|
||||
- [GLM Models](/pt-BR/providers/glm): Z.AI Coding Plan ou endpoints gerais de API
|
||||
- [Qwen Cloud](/pt-BR/providers/qwen): superfície de provedor Qwen Cloud, além de mapeamento de endpoint do Alibaba DashScope e Coding Plan
|
||||
- [MiniMax](/pt-BR/providers/minimax): acesso ao OAuth ou chave de API do MiniMax Coding Plan
|
||||
- [GLM Models](/pt-BR/providers/glm): endpoints do Z.AI Coding Plan ou API geral
|
||||
|
||||
### OpenCode
|
||||
|
||||
@ -347,9 +348,9 @@ configuração em `models.providers`; basta definir a autenticação + escolher
|
||||
|
||||
- Provedor: `google`
|
||||
- Autenticação: `GEMINI_API_KEY`
|
||||
- Rotação opcional: `GEMINI_API_KEYS`, `GEMINI_API_KEY_1`, `GEMINI_API_KEY_2`, fallback para `GOOGLE_API_KEY` e `OPENCLAW_LIVE_GEMINI_KEY` (substituição única)
|
||||
- Rotação opcional: `GEMINI_API_KEYS`, `GEMINI_API_KEY_1`, `GEMINI_API_KEY_2`, fallback `GOOGLE_API_KEY` e `OPENCLAW_LIVE_GEMINI_KEY` (substituição única)
|
||||
- Modelos de exemplo: `google/gemini-3.1-pro-preview`, `google/gemini-3-flash-preview`
|
||||
- Compatibilidade: configuração legada do OpenClaw que usa `google/gemini-3.1-flash-preview` é normalizada para `google/gemini-3-flash-preview`
|
||||
- Compatibilidade: a configuração legada do OpenClaw usando `google/gemini-3.1-flash-preview` é normalizada para `google/gemini-3-flash-preview`
|
||||
- CLI: `openclaw onboard --auth-choice gemini-api-key`
|
||||
- Execuções diretas do Gemini também aceitam `agents.defaults.models["google/<model>"].params.cachedContent`
|
||||
(ou o legado `cached_content`) para encaminhar um identificador nativo do provedor
|
||||
@ -358,8 +359,8 @@ configuração em `models.providers`; basta definir a autenticação + escolher
|
||||
### Google Vertex e Gemini CLI
|
||||
|
||||
- Provedores: `google-vertex`, `google-gemini-cli`
|
||||
- Autenticação: Vertex usa gcloud ADC; Gemini CLI usa seu fluxo OAuth
|
||||
- Atenção: o OAuth do Gemini CLI no OpenClaw é uma integração não oficial. Alguns usuários relataram restrições em contas Google após usar clientes de terceiros. Revise os termos do Google e use uma conta não crítica se optar por prosseguir.
|
||||
- Autenticação: o Vertex usa gcloud ADC; o Gemini CLI usa seu fluxo OAuth
|
||||
- Cuidado: o OAuth do Gemini CLI no OpenClaw é uma integração não oficial. Alguns usuários relataram restrições de conta Google após usar clientes de terceiros. Revise os termos do Google e use uma conta não crítica se optar por continuar.
|
||||
- O OAuth do Gemini CLI é distribuído como parte do plugin agrupado `google`.
|
||||
- Instale primeiro o Gemini CLI:
|
||||
- `brew install gemini-cli`
|
||||
@ -367,7 +368,7 @@ configuração em `models.providers`; basta definir a autenticação + escolher
|
||||
- Ative: `openclaw plugins enable google`
|
||||
- Login: `openclaw models auth login --provider google-gemini-cli --set-default`
|
||||
- Modelo padrão: `google-gemini-cli/gemini-3-flash-preview`
|
||||
- Observação: você **não** cola um client id nem um secret em `openclaw.json`. O fluxo de login da CLI armazena
|
||||
- Observação: você **não** cola um client id nem secret em `openclaw.json`. O fluxo de login da CLI armazena
|
||||
tokens em perfis de autenticação no host do gateway.
|
||||
- Se as requisições falharem após o login, defina `GOOGLE_CLOUD_PROJECT` ou `GOOGLE_CLOUD_PROJECT_ID` no host do gateway.
|
||||
- Respostas JSON do Gemini CLI são analisadas a partir de `response`; o uso recorre a
|
||||
@ -377,10 +378,10 @@ configuração em `models.providers`; basta definir a autenticação + escolher
|
||||
|
||||
- Provedor: `zai`
|
||||
- Autenticação: `ZAI_API_KEY`
|
||||
- Modelo de exemplo: `zai/glm-5`
|
||||
- Modelo de exemplo: `zai/glm-5.1`
|
||||
- CLI: `openclaw onboard --auth-choice zai-api-key`
|
||||
- Aliases: `z.ai/*` e `z-ai/*` são normalizados para `zai/*`
|
||||
- `zai-api-key` detecta automaticamente o endpoint correspondente da Z.AI; `zai-coding-global`, `zai-coding-cn`, `zai-global` e `zai-cn` forçam uma superfície específica
|
||||
- `zai-api-key` detecta automaticamente o endpoint Z.AI correspondente; `zai-coding-global`, `zai-coding-cn`, `zai-global` e `zai-cn` forçam uma superfície específica
|
||||
|
||||
### Vercel AI Gateway
|
||||
|
||||
@ -399,7 +400,7 @@ configuração em `models.providers`; basta definir a autenticação + escolher
|
||||
- O catálogo estático de fallback inclui `kilocode/kilo/auto`; a descoberta live em
|
||||
`https://api.kilo.ai/api/gateway/models` pode expandir ainda mais o catálogo
|
||||
em runtime.
|
||||
- O roteamento upstream exato por trás de `kilocode/kilo/auto` é controlado pelo Kilo Gateway,
|
||||
- O roteamento exato upstream por trás de `kilocode/kilo/auto` é controlado pelo Kilo Gateway,
|
||||
não codificado diretamente no OpenClaw.
|
||||
|
||||
Consulte [/providers/kilocode](/pt-BR/providers/kilocode) para detalhes de configuração.
|
||||
@ -410,24 +411,24 @@ Consulte [/providers/kilocode](/pt-BR/providers/kilocode) para detalhes de confi
|
||||
- Modelo de exemplo: `openrouter/auto`
|
||||
- O OpenClaw aplica os cabeçalhos documentados de atribuição de aplicativo do OpenRouter apenas quando
|
||||
a requisição realmente tem como destino `openrouter.ai`
|
||||
- Os marcadores `cache_control` específicos do OpenRouter para Anthropic também são limitados a
|
||||
rotas verificadas do OpenRouter, não a URLs arbitrárias de proxy
|
||||
- O OpenRouter continua no caminho compatível com OpenAI em estilo proxy, então a modelagem
|
||||
nativa de requisição exclusiva da OpenAI (`serviceTier`, `store` do Responses,
|
||||
dicas de cache de prompt, payloads de compatibilidade de raciocínio da OpenAI) não é encaminhada
|
||||
- Referências do OpenRouter baseadas em Gemini mantêm apenas a sanitização de assinatura
|
||||
de pensamento proxy-Gemini; validação de replay nativa do Gemini e regravações de bootstrap permanecem desativadas
|
||||
- Marcadores `cache_control` específicos do OpenRouter para Anthropic também são limitados a
|
||||
rotas verificadas do OpenRouter, não a URLs de proxy arbitrárias
|
||||
- O OpenRouter permanece no caminho compatível com OpenAI no estilo proxy, então a modelagem nativa
|
||||
de requisição exclusiva da OpenAI (`serviceTier`, `store` do Responses,
|
||||
dicas de cache de prompt, payloads de compatibilidade de raciocínio OpenAI) não é encaminhada
|
||||
- Referências do OpenRouter baseadas em Gemini mantêm apenas a sanitização de assinatura de pensamento do Gemini via proxy;
|
||||
a validação nativa de replay do Gemini e as reescritas de bootstrap permanecem desativadas
|
||||
- Kilo Gateway: `kilocode` (`KILOCODE_API_KEY`)
|
||||
- Modelo de exemplo: `kilocode/kilo/auto`
|
||||
- Referências Kilo baseadas em Gemini mantêm o mesmo caminho de sanitização de assinatura
|
||||
de pensamento proxy-Gemini; `kilocode/kilo/auto` e outras
|
||||
dicas de proxy sem suporte a raciocínio pulam a injeção de raciocínio por proxy
|
||||
- Referências do Kilo baseadas em Gemini mantêm o mesmo caminho de sanitização de
|
||||
assinatura de pensamento do Gemini via proxy; `kilocode/kilo/auto` e outras dicas
|
||||
de proxy sem suporte a raciocínio ignoram a injeção de raciocínio do proxy
|
||||
- MiniMax: `minimax` (chave de API) e `minimax-portal` (OAuth)
|
||||
- Autenticação: `MINIMAX_API_KEY` para `minimax`; `MINIMAX_OAUTH_TOKEN` ou `MINIMAX_API_KEY` para `minimax-portal`
|
||||
- Modelo de exemplo: `minimax/MiniMax-M2.7` ou `minimax-portal/MiniMax-M2.7`
|
||||
- A configuração de onboarding/chave de API do MiniMax grava definições explícitas do modelo M2.7 com
|
||||
- A configuração do onboarding/chave de API do MiniMax grava definições explícitas de modelo M2.7 com
|
||||
`input: ["text", "image"]`; o catálogo agrupado do provedor mantém as referências de chat
|
||||
apenas como texto até que a configuração desse provedor seja materializada
|
||||
como somente texto até que a configuração do provedor seja materializada
|
||||
- Moonshot: `moonshot` (`MOONSHOT_API_KEY`)
|
||||
- Modelo de exemplo: `moonshot/kimi-k2.5`
|
||||
- Kimi Coding: `kimi` (`KIMI_API_KEY` ou `KIMICODE_API_KEY`)
|
||||
@ -453,10 +454,10 @@ Consulte [/providers/kilocode](/pt-BR/providers/kilocode) para detalhes de confi
|
||||
- BytePlus: `byteplus` (`BYTEPLUS_API_KEY`)
|
||||
- Modelo de exemplo: `byteplus-plan/ark-code-latest`
|
||||
- xAI: `xai` (`XAI_API_KEY`)
|
||||
- Requisições nativas agrupadas do xAI usam o caminho xAI Responses
|
||||
- `/fast` ou `params.fastMode: true` regravam `grok-3`, `grok-3-mini`,
|
||||
- Requisições xAI agrupadas nativas usam o caminho xAI Responses
|
||||
- `/fast` ou `params.fastMode: true` reescreve `grok-3`, `grok-3-mini`,
|
||||
`grok-4` e `grok-4-0709` para suas variantes `*-fast`
|
||||
- `tool_stream` vem ativado por padrão; defina
|
||||
- `tool_stream` fica ativado por padrão; defina
|
||||
`agents.defaults.models["xai/<model>"].params.tool_stream` como `false` para
|
||||
desativá-lo
|
||||
- Mistral: `mistral` (`MISTRAL_API_KEY`)
|
||||
@ -464,14 +465,14 @@ Consulte [/providers/kilocode](/pt-BR/providers/kilocode) para detalhes de confi
|
||||
- CLI: `openclaw onboard --auth-choice mistral-api-key`
|
||||
- Groq: `groq` (`GROQ_API_KEY`)
|
||||
- Cerebras: `cerebras` (`CEREBRAS_API_KEY`)
|
||||
- Modelos GLM no Cerebras usam os IDs `zai-glm-4.7` e `zai-glm-4.6`.
|
||||
- Modelos GLM no Cerebras usam os ids `zai-glm-4.7` e `zai-glm-4.6`.
|
||||
- URL base compatível com OpenAI: `https://api.cerebras.ai/v1`.
|
||||
- GitHub Copilot: `github-copilot` (`COPILOT_GITHUB_TOKEN` / `GH_TOKEN` / `GITHUB_TOKEN`)
|
||||
- Modelo de exemplo do Hugging Face Inference: `huggingface/deepseek-ai/DeepSeek-R1`; CLI: `openclaw onboard --auth-choice huggingface-api-key`. Consulte [Hugging Face (Inference)](/pt-BR/providers/huggingface).
|
||||
|
||||
## Provedores via `models.providers` (customizado/URL base)
|
||||
## Provedores via `models.providers` (personalizado/URL base)
|
||||
|
||||
Use `models.providers` (ou `models.json`) para adicionar provedores **customizados** ou
|
||||
Use `models.providers` (ou `models.json`) para adicionar provedores **personalizados** ou
|
||||
proxies compatíveis com OpenAI/Anthropic.
|
||||
|
||||
Muitos dos plugins de provedor agrupados abaixo já publicam um catálogo padrão.
|
||||
@ -480,7 +481,7 @@ URL base, os cabeçalhos ou a lista de modelos padrão.
|
||||
|
||||
### Moonshot AI (Kimi)
|
||||
|
||||
O Moonshot é fornecido como plugin de provedor agrupado. Use o provedor integrado por
|
||||
O Moonshot é distribuído como um plugin de provedor agrupado. Use o provedor integrado por
|
||||
padrão e adicione uma entrada explícita `models.providers.moonshot` apenas quando
|
||||
precisar substituir a URL base ou os metadados do modelo:
|
||||
|
||||
@ -489,7 +490,7 @@ precisar substituir a URL base ou os metadados do modelo:
|
||||
- Modelo de exemplo: `moonshot/kimi-k2.5`
|
||||
- CLI: `openclaw onboard --auth-choice moonshot-api-key` ou `openclaw onboard --auth-choice moonshot-api-key-cn`
|
||||
|
||||
IDs de modelo do Kimi K2:
|
||||
IDs de modelo Kimi K2:
|
||||
|
||||
[//]: # "moonshot-kimi-k2-model-refs:start"
|
||||
|
||||
@ -521,7 +522,7 @@ IDs de modelo do Kimi K2:
|
||||
|
||||
### Kimi Coding
|
||||
|
||||
O Kimi Coding usa o endpoint compatível com Anthropic da Moonshot AI:
|
||||
O Kimi Coding usa o endpoint compatível com Anthropic do Moonshot AI:
|
||||
|
||||
- Provedor: `kimi`
|
||||
- Autenticação: `KIMI_API_KEY`
|
||||
@ -536,7 +537,7 @@ O Kimi Coding usa o endpoint compatível com Anthropic da Moonshot AI:
|
||||
}
|
||||
```
|
||||
|
||||
O legado `kimi/k2p5` continua aceito como ID de modelo de compatibilidade.
|
||||
O legado `kimi/k2p5` continua aceito como id de modelo de compatibilidade.
|
||||
|
||||
### Volcano Engine (Doubao)
|
||||
|
||||
@ -555,13 +556,13 @@ O Volcano Engine (火山引擎) fornece acesso ao Doubao e outros modelos na Chi
|
||||
}
|
||||
```
|
||||
|
||||
O onboarding usa a superfície de coding por padrão, mas o catálogo geral `volcengine/*`
|
||||
O onboarding usa por padrão a superfície de coding, mas o catálogo geral `volcengine/*`
|
||||
é registrado ao mesmo tempo.
|
||||
|
||||
Nos seletores de onboarding/configuração de modelo, a escolha de autenticação do Volcengine prioriza ambos os
|
||||
itens `volcengine/*` e `volcengine-plan/*`. Se esses modelos ainda não tiverem sido carregados,
|
||||
o OpenClaw volta ao catálogo sem filtro em vez de mostrar um seletor vazio
|
||||
com escopo de provedor.
|
||||
Nos seletores de modelo de onboarding/configuração, a escolha de autenticação do Volcengine
|
||||
prefere linhas `volcengine/*` e `volcengine-plan/*`. Se esses modelos ainda não estiverem carregados,
|
||||
o OpenClaw recorre ao catálogo sem filtro em vez de mostrar um seletor
|
||||
vazio com escopo de provedor.
|
||||
|
||||
Modelos disponíveis:
|
||||
|
||||
@ -579,7 +580,7 @@ Modelos de coding (`volcengine-plan`):
|
||||
- `volcengine-plan/kimi-k2-thinking`
|
||||
- `volcengine-plan/glm-4.7`
|
||||
|
||||
### BytePlus (Internacional)
|
||||
### BytePlus (internacional)
|
||||
|
||||
O BytePlus ARK fornece acesso aos mesmos modelos do Volcano Engine para usuários internacionais.
|
||||
|
||||
@ -596,13 +597,13 @@ O BytePlus ARK fornece acesso aos mesmos modelos do Volcano Engine para usuário
|
||||
}
|
||||
```
|
||||
|
||||
O onboarding usa a superfície de coding por padrão, mas o catálogo geral `byteplus/*`
|
||||
O onboarding usa por padrão a superfície de coding, mas o catálogo geral `byteplus/*`
|
||||
é registrado ao mesmo tempo.
|
||||
|
||||
Nos seletores de onboarding/configuração de modelo, a escolha de autenticação do BytePlus prioriza ambos os
|
||||
itens `byteplus/*` e `byteplus-plan/*`. Se esses modelos ainda não tiverem sido carregados,
|
||||
o OpenClaw volta ao catálogo sem filtro em vez de mostrar um seletor vazio
|
||||
com escopo de provedor.
|
||||
Nos seletores de modelo de onboarding/configuração, a escolha de autenticação do BytePlus
|
||||
prefere linhas `byteplus/*` e `byteplus-plan/*`. Se esses modelos ainda não estiverem carregados,
|
||||
o OpenClaw recorre ao catálogo sem filtro em vez de mostrar um seletor
|
||||
vazio com escopo de provedor.
|
||||
|
||||
Modelos disponíveis:
|
||||
|
||||
@ -648,34 +649,34 @@ O Synthetic fornece modelos compatíveis com Anthropic por trás do provedor `sy
|
||||
|
||||
### MiniMax
|
||||
|
||||
O MiniMax é configurado via `models.providers` porque usa endpoints customizados:
|
||||
O MiniMax é configurado por meio de `models.providers` porque usa endpoints personalizados:
|
||||
|
||||
- MiniMax OAuth (Global): `--auth-choice minimax-global-oauth`
|
||||
- MiniMax OAuth (global): `--auth-choice minimax-global-oauth`
|
||||
- MiniMax OAuth (CN): `--auth-choice minimax-cn-oauth`
|
||||
- Chave de API do MiniMax (Global): `--auth-choice minimax-global-api`
|
||||
- Chave de API do MiniMax (CN): `--auth-choice minimax-cn-api`
|
||||
- Chave de API MiniMax (global): `--auth-choice minimax-global-api`
|
||||
- Chave de API MiniMax (CN): `--auth-choice minimax-cn-api`
|
||||
- Autenticação: `MINIMAX_API_KEY` para `minimax`; `MINIMAX_OAUTH_TOKEN` ou
|
||||
`MINIMAX_API_KEY` para `minimax-portal`
|
||||
|
||||
Consulte [/providers/minimax](/pt-BR/providers/minimax) para detalhes de configuração, opções de modelo e trechos de configuração.
|
||||
|
||||
No caminho de streaming compatível com Anthropic do MiniMax, o OpenClaw desativa thinking por
|
||||
padrão, a menos que você o defina explicitamente, e `/fast on` regrava
|
||||
No caminho de streaming compatível com Anthropic do MiniMax, o OpenClaw desativa o thinking por
|
||||
padrão, a menos que você o defina explicitamente, e `/fast on` reescreve
|
||||
`MiniMax-M2.7` para `MiniMax-M2.7-highspeed`.
|
||||
|
||||
Divisão de capacidades controladas por plugin:
|
||||
Divisão de capacidade controlada por plugin:
|
||||
|
||||
- Os padrões de texto/chat permanecem em `minimax/MiniMax-M2.7`
|
||||
- A geração de imagem é `minimax/image-01` ou `minimax-portal/image-01`
|
||||
- A compreensão de imagem é controlada por plugin com `MiniMax-VL-01` em ambos os caminhos de autenticação do MiniMax
|
||||
- A pesquisa na web permanece no ID de provedor `minimax`
|
||||
- A compreensão de imagem é `MiniMax-VL-01` controlado por plugin em ambos os caminhos de autenticação do MiniMax
|
||||
- A busca na web permanece no id de provedor `minimax`
|
||||
|
||||
### Ollama
|
||||
|
||||
O Ollama é fornecido como plugin de provedor agrupado e usa a API nativa do Ollama:
|
||||
O Ollama é distribuído como um plugin de provedor agrupado e usa a API nativa do Ollama:
|
||||
|
||||
- Provedor: `ollama`
|
||||
- Autenticação: não é necessária (servidor local)
|
||||
- Autenticação: nenhuma obrigatória (servidor local)
|
||||
- Modelo de exemplo: `ollama/llama3.3`
|
||||
- Instalação: [https://ollama.com/download](https://ollama.com/download)
|
||||
|
||||
@ -692,15 +693,15 @@ ollama pull llama3.3
|
||||
}
|
||||
```
|
||||
|
||||
O Ollama é detectado localmente em `http://127.0.0.1:11434` quando você ativa a opção com
|
||||
O Ollama é detectado localmente em `http://127.0.0.1:11434` quando você opta por isso com
|
||||
`OLLAMA_API_KEY`, e o plugin de provedor agrupado adiciona o Ollama diretamente ao
|
||||
`openclaw onboard` e ao seletor de modelo. Consulte [/providers/ollama](/pt-BR/providers/ollama)
|
||||
para onboarding, modo local/nuvem e configuração personalizada.
|
||||
`openclaw onboard` e ao seletor de modelos. Consulte [/providers/ollama](/pt-BR/providers/ollama)
|
||||
para onboarding, modo nuvem/local e configuração personalizada.
|
||||
|
||||
### vLLM
|
||||
|
||||
O vLLM é fornecido como plugin de provedor agrupado para servidores
|
||||
compatíveis com OpenAI locais/self-hosted:
|
||||
O vLLM é distribuído como um plugin de provedor agrupado para servidores locais/self-hosted
|
||||
compatíveis com OpenAI:
|
||||
|
||||
- Provedor: `vllm`
|
||||
- Autenticação: opcional (depende do seu servidor)
|
||||
@ -712,7 +713,7 @@ Para ativar a descoberta automática localmente (qualquer valor funciona se seu
|
||||
export VLLM_API_KEY="vllm-local"
|
||||
```
|
||||
|
||||
Depois defina um modelo (substitua por um dos IDs retornados por `/v1/models`):
|
||||
Em seguida, defina um modelo (substitua por um dos ids retornados por `/v1/models`):
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -726,8 +727,8 @@ Consulte [/providers/vllm](/pt-BR/providers/vllm) para detalhes.
|
||||
|
||||
### SGLang
|
||||
|
||||
O SGLang é fornecido como plugin de provedor agrupado para servidores
|
||||
compatíveis com OpenAI self-hosted rápidos:
|
||||
O SGLang é distribuído como um plugin de provedor agrupado para servidores self-hosted rápidos
|
||||
compatíveis com OpenAI:
|
||||
|
||||
- Provedor: `sglang`
|
||||
- Autenticação: opcional (depende do seu servidor)
|
||||
@ -740,7 +741,7 @@ exigir autenticação):
|
||||
export SGLANG_API_KEY="sglang-local"
|
||||
```
|
||||
|
||||
Depois defina um modelo (substitua por um dos IDs retornados por `/v1/models`):
|
||||
Em seguida, defina um modelo (substitua por um dos ids retornados por `/v1/models`):
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -789,23 +790,23 @@ Exemplo (compatível com OpenAI):
|
||||
|
||||
Observações:
|
||||
|
||||
- Para provedores customizados, `reasoning`, `input`, `cost`, `contextWindow` e `maxTokens` são opcionais.
|
||||
Quando omitidos, o OpenClaw usa estes padrões:
|
||||
- Para provedores personalizados, `reasoning`, `input`, `cost`, `contextWindow` e `maxTokens` são opcionais.
|
||||
Quando omitidos, o OpenClaw usa por padrão:
|
||||
- `reasoning: false`
|
||||
- `input: ["text"]`
|
||||
- `cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }`
|
||||
- `contextWindow: 200000`
|
||||
- `maxTokens: 8192`
|
||||
- Recomendado: defina valores explícitos que correspondam aos limites do seu proxy/modelo.
|
||||
- Para `api: "openai-completions"` em endpoints não nativos (qualquer `baseUrl` não vazia cujo host não seja `api.openai.com`), o OpenClaw força `compat.supportsDeveloperRole: false` para evitar erros 400 do provedor para papéis `developer` não compatíveis.
|
||||
- Rotas compatíveis com OpenAI em estilo proxy também pulam a modelagem nativa de requisição exclusiva da OpenAI:
|
||||
sem `service_tier`, sem `store` do Responses, sem dicas de cache de prompt, sem
|
||||
modelagem de payload de compatibilidade de raciocínio da OpenAI e sem cabeçalhos ocultos
|
||||
de atribuição do OpenClaw.
|
||||
- Se `baseUrl` estiver vazia/omitida, o OpenClaw mantém o comportamento padrão da OpenAI (que resolve para `api.openai.com`).
|
||||
- Por segurança, um `compat.supportsDeveloperRole: true` explícito ainda é sobrescrito em endpoints não nativos `openai-completions`.
|
||||
- Para `api: "openai-completions"` em endpoints não nativos (qualquer `baseUrl` não vazio cujo host não seja `api.openai.com`), o OpenClaw força `compat.supportsDeveloperRole: false` para evitar erros 400 do provedor para papéis `developer` não compatíveis.
|
||||
- Rotas no estilo proxy compatíveis com OpenAI também ignoram a modelagem nativa
|
||||
de requisição exclusiva da OpenAI: sem `service_tier`, sem `store` do Responses, sem
|
||||
dicas de cache de prompt, sem modelagem de payload de compatibilidade de raciocínio OpenAI e sem cabeçalhos
|
||||
ocultos de atribuição do OpenClaw.
|
||||
- Se `baseUrl` estiver vazio/omitido, o OpenClaw mantém o comportamento padrão da OpenAI (que resolve para `api.openai.com`).
|
||||
- Por segurança, um `compat.supportsDeveloperRole: true` explícito ainda é sobrescrito em endpoints `openai-completions` não nativos.
|
||||
|
||||
## Exemplos de CLI
|
||||
## Exemplos da CLI
|
||||
|
||||
```bash
|
||||
openclaw onboard --auth-choice opencode-zen
|
||||
@ -817,7 +818,7 @@ Consulte também: [/gateway/configuration](/pt-BR/gateway/configuration) para ex
|
||||
|
||||
## Relacionado
|
||||
|
||||
- [Models](/pt-BR/concepts/models) — configuração de modelos e aliases
|
||||
- [Model Failover](/pt-BR/concepts/model-failover) — cadeias de fallback e comportamento de repetição
|
||||
- [Models](/pt-BR/concepts/models) — configuração e aliases de modelos
|
||||
- [Model Failover](/pt-BR/concepts/model-failover) — cadeias de fallback e comportamento de nova tentativa
|
||||
- [Configuration Reference](/pt-BR/gateway/configuration-reference#agent-defaults) — chaves de configuração de modelo
|
||||
- [Providers](/pt-BR/providers) — guias de configuração por provedor
|
||||
|
||||
@ -1,37 +1,37 @@
|
||||
---
|
||||
read_when:
|
||||
- Expandindo o qa-lab ou o qa-channel
|
||||
- Adicionando cenários de QA com suporte do repositório
|
||||
- Criando automação de QA com maior realismo em torno do Dashboard do Gateway
|
||||
summary: Estrutura da automação privada de QA para qa-lab, qa-channel, cenários semeados e relatórios de protocolo
|
||||
- Ao estender qa-lab ou qa-channel
|
||||
- Ao adicionar cenários de QA com suporte do repositório
|
||||
- Ao criar automação de QA com maior realismo em torno do painel do Gateway
|
||||
summary: Formato da automação privada de QA para qa-lab, qa-channel, cenários predefinidos e relatórios de protocolo
|
||||
title: Automação E2E de QA
|
||||
x-i18n:
|
||||
generated_at: "2026-04-08T02:14:06Z"
|
||||
generated_at: "2026-04-08T05:26:34Z"
|
||||
model: gpt-5.4
|
||||
provider: openai
|
||||
source_hash: 3b4aa5acc8e77303f4045d4f04372494cae21b89d2fdaba856dbb4855ced9d27
|
||||
source_hash: 57da147dc06abf9620290104e01a83b42182db1806514114fd9e8467492cda99
|
||||
source_path: concepts/qa-e2e-automation.md
|
||||
workflow: 15
|
||||
---
|
||||
|
||||
# Automação E2E de QA
|
||||
|
||||
A stack privada de QA foi projetada para exercitar o OpenClaw de uma forma mais
|
||||
realista, no formato de canal, do que um único teste unitário consegue.
|
||||
A pilha privada de QA foi criada para exercitar o OpenClaw de uma forma mais
|
||||
realista e moldada por canais do que um único teste unitário consegue.
|
||||
|
||||
Partes atuais:
|
||||
Peças atuais:
|
||||
|
||||
- `extensions/qa-channel`: canal de mensagens sintético com superfícies de DM, canal, thread,
|
||||
- `extensions/qa-channel`: canal de mensagens sintético com superfícies de MD, canal, thread,
|
||||
reação, edição e exclusão.
|
||||
- `extensions/qa-lab`: UI de depuração e barramento de QA para observar a transcrição,
|
||||
injetar mensagens de entrada e exportar um relatório em Markdown.
|
||||
- `qa/`: recursos semeados com suporte do repositório para a tarefa inicial e cenários
|
||||
- `qa/`: recursos predefinidos com suporte do repositório para a tarefa inicial e cenários
|
||||
básicos de QA.
|
||||
|
||||
O fluxo atual do operador de QA é um site de QA com dois painéis:
|
||||
O fluxo atual do operador de QA é um site de QA em dois painéis:
|
||||
|
||||
- Esquerda: Dashboard do Gateway (Control UI) com o agente.
|
||||
- Direita: QA Lab, mostrando a transcrição no estilo do Slack e o plano de cenário.
|
||||
- Esquerda: painel do Gateway (Control UI) com o agente.
|
||||
- Direita: QA Lab, mostrando a transcrição em estilo Slack e o plano de cenário.
|
||||
|
||||
Execute com:
|
||||
|
||||
@ -39,13 +39,13 @@ Execute com:
|
||||
pnpm qa:lab:up
|
||||
```
|
||||
|
||||
Isso compila o site de QA, inicia a trilha de gateway com suporte do Docker e expõe a
|
||||
Isso compila o site de QA, inicia a trilha do gateway com suporte do Docker e expõe a
|
||||
página do QA Lab, onde um operador ou loop de automação pode dar ao agente uma
|
||||
missão de QA, observar o comportamento real do canal e registrar o que funcionou, falhou ou
|
||||
permaneceu bloqueado.
|
||||
|
||||
Para uma iteração mais rápida da UI do QA Lab sem recompilar a imagem Docker a cada vez,
|
||||
inicie a stack com um bundle do QA Lab montado por bind mount:
|
||||
inicie a pilha com um bundle do QA Lab montado por bind:
|
||||
|
||||
```bash
|
||||
pnpm openclaw qa docker-build-image
|
||||
@ -56,37 +56,38 @@ pnpm qa:lab:watch
|
||||
|
||||
`qa:lab:up:fast` mantém os serviços Docker em uma imagem pré-compilada e faz bind mount de
|
||||
`extensions/qa-lab/web/dist` no contêiner `qa-lab`. `qa:lab:watch`
|
||||
recompila esse bundle quando há mudanças, e o navegador recarrega automaticamente quando o hash
|
||||
recompila esse bundle a cada alteração, e o navegador recarrega automaticamente quando o hash
|
||||
do recurso do QA Lab muda.
|
||||
|
||||
## Sementes com suporte do repositório
|
||||
## Recursos predefinidos com suporte do repositório
|
||||
|
||||
Os recursos semeados ficam em `qa/`:
|
||||
Os recursos predefinidos ficam em `qa/`:
|
||||
|
||||
- `qa/scenarios.md`
|
||||
- `qa/scenarios/index.md`
|
||||
- `qa/scenarios/*.md`
|
||||
|
||||
Eles ficam intencionalmente no git para que o plano de QA seja visível tanto para humanos quanto para o
|
||||
agente. A lista básica deve permanecer ampla o suficiente para cobrir:
|
||||
agente. A lista básica deve continuar ampla o suficiente para cobrir:
|
||||
|
||||
- chat por DM e canal
|
||||
- chat por MD e em canal
|
||||
- comportamento de thread
|
||||
- ciclo de vida de ações de mensagem
|
||||
- ciclo de vida de ações de mensagens
|
||||
- callbacks de cron
|
||||
- recuperação de memória
|
||||
- troca de modelo
|
||||
- handoff para subagente
|
||||
- transferência para subagente
|
||||
- leitura do repositório e da documentação
|
||||
- uma pequena tarefa de build, como Lobster Invaders
|
||||
- uma pequena tarefa de compilação, como Lobster Invaders
|
||||
|
||||
## Relatórios
|
||||
|
||||
O `qa-lab` exporta um relatório de protocolo em Markdown a partir da linha do tempo observada do barramento.
|
||||
`qa-lab` exporta um relatório de protocolo em Markdown a partir da linha do tempo observada do barramento.
|
||||
O relatório deve responder:
|
||||
|
||||
- O que funcionou
|
||||
- O que falhou
|
||||
- O que permaneceu bloqueado
|
||||
- Quais cenários de acompanhamento valem a pena adicionar
|
||||
- Quais cenários de acompanhamento vale a pena adicionar
|
||||
|
||||
## Documentação relacionada
|
||||
|
||||
|
||||
@ -1,31 +1,31 @@
|
||||
---
|
||||
read_when:
|
||||
- Explicar como streaming ou chunking funcionam nos canais
|
||||
- Alterar o comportamento de block streaming ou channel chunking
|
||||
- Depurar respostas em bloco duplicadas/antecipadas ou streaming de prévia por canal
|
||||
summary: Comportamento de streaming + chunking (respostas em blocos, streaming de prévia por canal, mapeamento de modos)
|
||||
title: Streaming e Chunking
|
||||
- Explicar como o streaming ou a fragmentação funcionam nos canais
|
||||
- Alterar o streaming em blocos ou o comportamento de fragmentação do canal
|
||||
- Depurar respostas em bloco duplicadas/antecipadas ou streaming de prévia do canal
|
||||
summary: Comportamento de streaming + fragmentação (respostas em blocos, streaming de prévia do canal, mapeamento de modos)
|
||||
title: Streaming e Fragmentação
|
||||
x-i18n:
|
||||
generated_at: "2026-04-05T12:40:41Z"
|
||||
generated_at: "2026-04-08T05:26:46Z"
|
||||
model: gpt-5.4
|
||||
provider: openai
|
||||
source_hash: 44b0d08c7eafcb32030ef7c8d5719c2ea2d34e4bac5fdad8cc8b3f4e9e9fad97
|
||||
source_hash: a8e847bb7da890818cd79dec7777f6ae488e6d6c0468e948e56b6b6c598e0000
|
||||
source_path: concepts/streaming.md
|
||||
workflow: 15
|
||||
---
|
||||
|
||||
# Streaming + chunking
|
||||
# Streaming + fragmentação
|
||||
|
||||
O OpenClaw tem duas camadas separadas de streaming:
|
||||
O OpenClaw tem duas camadas de streaming separadas:
|
||||
|
||||
- **Streaming em blocos (canais):** emite **blocos** concluídos à medida que o assistente escreve. Essas são mensagens normais do canal (não deltas de token).
|
||||
- **Streaming em blocos (canais):** emite **blocos** concluídos conforme o assistente escreve. Essas são mensagens normais do canal (não deltas de token).
|
||||
- **Streaming de prévia (Telegram/Discord/Slack):** atualiza uma **mensagem de prévia** temporária durante a geração.
|
||||
|
||||
Hoje, **não existe streaming real de delta de token** para mensagens de canal. O streaming de prévia é baseado em mensagens (envio + edições/anexos).
|
||||
Atualmente, **não há streaming real de deltas de token** para mensagens do canal. O streaming de prévia é baseado em mensagens (envio + edições/anexos).
|
||||
|
||||
## Streaming em blocos (mensagens de canal)
|
||||
## Streaming em blocos (mensagens do canal)
|
||||
|
||||
O streaming em blocos envia a saída do assistente em partes mais amplas à medida que ela fica disponível.
|
||||
O streaming em blocos envia a saída do assistente em fragmentos maiores conforme ela fica disponível.
|
||||
|
||||
```
|
||||
Model output
|
||||
@ -40,72 +40,72 @@ Model output
|
||||
Legenda:
|
||||
|
||||
- `text_delta/events`: eventos de stream do modelo (podem ser esparsos para modelos sem streaming).
|
||||
- `chunker`: `EmbeddedBlockChunker` aplicando limites mínimo/máximo + preferência de quebra.
|
||||
- `channel send`: mensagens reais de saída (respostas em blocos).
|
||||
- `chunker`: `EmbeddedBlockChunker` aplicando limites mínimos/máximos + preferência de quebra.
|
||||
- `channel send`: mensagens de saída reais (respostas em bloco).
|
||||
|
||||
**Controles:**
|
||||
|
||||
- `agents.defaults.blockStreamingDefault`: `"on"`/`"off"` (padrão: desativado).
|
||||
- Substituições por canal: `*.blockStreaming` (e variantes por conta) para forçar `"on"`/`"off"` por canal.
|
||||
- Sobrescritas por canal: `*.blockStreaming` (e variantes por conta) para forçar `"on"`/`"off"` por canal.
|
||||
- `agents.defaults.blockStreamingBreak`: `"text_end"` ou `"message_end"`.
|
||||
- `agents.defaults.blockStreamingChunk`: `{ minChars, maxChars, breakPreference? }`.
|
||||
- `agents.defaults.blockStreamingCoalesce`: `{ minChars?, maxChars?, idleMs? }` (mescla blocos transmitidos antes do envio).
|
||||
- Limite rígido do canal: `*.textChunkLimit` (por exemplo, `channels.whatsapp.textChunkLimit`).
|
||||
- Modo de chunking do canal: `*.chunkMode` (`length` é o padrão, `newline` divide em linhas em branco (limites de parágrafo) antes da divisão por tamanho).
|
||||
- Modo de fragmentação do canal: `*.chunkMode` (`length` por padrão, `newline` divide em linhas em branco [limites de parágrafo] antes da fragmentação por comprimento).
|
||||
- Limite flexível do Discord: `channels.discord.maxLinesPerMessage` (padrão: 17) divide respostas altas para evitar corte na UI.
|
||||
|
||||
**Semântica de limites:**
|
||||
|
||||
- `text_end`: transmite blocos assim que o chunker os emite; faz flush em cada `text_end`.
|
||||
- `message_end`: espera a mensagem do assistente terminar e então faz flush da saída armazenada.
|
||||
- `text_end`: transmite blocos assim que o chunker os emite; descarrega em cada `text_end`.
|
||||
- `message_end`: espera até que a mensagem do assistente termine e, então, descarrega a saída em buffer.
|
||||
|
||||
`message_end` ainda usa o chunker se o texto em buffer exceder `maxChars`, então ele pode emitir vários chunks no final.
|
||||
`message_end` ainda usa o chunker se o texto em buffer exceder `maxChars`, então ele pode emitir vários fragmentos no final.
|
||||
|
||||
## Algoritmo de chunking (limites baixo/alto)
|
||||
## Algoritmo de fragmentação (limites baixo/alto)
|
||||
|
||||
O chunking em blocos é implementado por `EmbeddedBlockChunker`:
|
||||
A fragmentação em blocos é implementada por `EmbeddedBlockChunker`:
|
||||
|
||||
- **Limite baixo:** não emite até que o buffer >= `minChars` (a menos que seja forçado).
|
||||
- **Limite alto:** prefere divisões antes de `maxChars`; se forçado, divide em `maxChars`.
|
||||
- **Preferência de quebra:** `paragraph` → `newline` → `sentence` → `whitespace` → quebra rígida.
|
||||
- **Code fences:** nunca divide dentro de fences; quando forçado em `maxChars`, fecha + reabre a fence para manter o Markdown válido.
|
||||
- **Blocos de código:** nunca divide dentro de blocos; quando é forçado em `maxChars`, fecha + reabre o bloco para manter o Markdown válido.
|
||||
|
||||
`maxChars` é limitado por `textChunkLimit` do canal, então você não pode exceder os limites por canal.
|
||||
`maxChars` é limitado a `textChunkLimit` do canal, então você não pode exceder os limites por canal.
|
||||
|
||||
## Coalescência (mesclar blocos transmitidos)
|
||||
|
||||
Quando o streaming em blocos está habilitado, o OpenClaw pode **mesclar chunks de bloco consecutivos**
|
||||
antes de enviá-los. Isso reduz o “spam de linha única” e ainda fornece
|
||||
Quando o streaming em blocos está ativado, o OpenClaw pode **mesclar fragmentos consecutivos de blocos**
|
||||
antes de enviá-los. Isso reduz o “spam de linha única” enquanto ainda fornece
|
||||
saída progressiva.
|
||||
|
||||
- A coalescência espera por **intervalos de inatividade** (`idleMs`) antes de fazer flush.
|
||||
- Buffers são limitados por `maxChars` e fazem flush se o excederem.
|
||||
- `minChars` impede o envio de fragmentos minúsculos até que texto suficiente se acumule
|
||||
(o flush final sempre envia o texto restante).
|
||||
- O separador é derivado de `blockStreamingChunk.breakPreference`
|
||||
- A coalescência espera por **intervalos de inatividade** (`idleMs`) antes de descarregar.
|
||||
- Os buffers são limitados por `maxChars` e serão descarregados se o excederem.
|
||||
- `minChars` evita que fragmentos muito pequenos sejam enviados até que texto suficiente se acumule
|
||||
(o descarregamento final sempre envia o texto restante).
|
||||
- O joiner é derivado de `blockStreamingChunk.breakPreference`
|
||||
(`paragraph` → `\n\n`, `newline` → `\n`, `sentence` → espaço).
|
||||
- Há substituições por canal disponíveis via `*.blockStreamingCoalesce` (incluindo configurações por conta).
|
||||
- O `minChars` padrão de coalescência é elevado para 1500 em Signal/Slack/Discord, a menos que seja substituído.
|
||||
- Sobrescritas por canal estão disponíveis via `*.blockStreamingCoalesce` (incluindo configs por conta).
|
||||
- O valor padrão de coalescência `minChars` é elevado para 1500 em Signal/Slack/Discord, a menos que seja sobrescrito.
|
||||
|
||||
## Ritmo mais humano entre blocos
|
||||
## Ritmo humano entre blocos
|
||||
|
||||
Quando o streaming em blocos está habilitado, você pode adicionar uma **pausa aleatória**
|
||||
entre respostas em bloco (depois do primeiro bloco). Isso faz respostas em várias bolhas parecerem
|
||||
Quando o streaming em blocos está ativado, você pode adicionar uma **pausa aleatória** entre
|
||||
respostas em bloco (após o primeiro bloco). Isso faz com que respostas em várias bolhas pareçam
|
||||
mais naturais.
|
||||
|
||||
- Configuração: `agents.defaults.humanDelay` (substituível por agente via `agents.list[].humanDelay`).
|
||||
- Configuração: `agents.defaults.humanDelay` (sobrescreva por agente via `agents.list[].humanDelay`).
|
||||
- Modos: `off` (padrão), `natural` (800–2500ms), `custom` (`minMs`/`maxMs`).
|
||||
- Aplica-se apenas a **respostas em bloco**, não a respostas finais nem resumos de ferramentas.
|
||||
- Aplica-se apenas a **respostas em bloco**, não a respostas finais nem a resumos de ferramentas.
|
||||
|
||||
## "Transmitir chunks ou tudo"
|
||||
## "Transmitir fragmentos ou tudo"
|
||||
|
||||
Isso corresponde a:
|
||||
|
||||
- **Transmitir chunks:** `blockStreamingDefault: "on"` + `blockStreamingBreak: "text_end"` (emite durante a geração). Canais não Telegram também precisam de `*.blockStreaming: true`.
|
||||
- **Transmitir tudo no final:** `blockStreamingBreak: "message_end"` (faz flush uma vez, possivelmente em vários chunks se for muito longo).
|
||||
- **Transmitir fragmentos:** `blockStreamingDefault: "on"` + `blockStreamingBreak: "text_end"` (emite conforme avança). Canais que não sejam Telegram também precisam de `*.blockStreaming: true`.
|
||||
- **Transmitir tudo no final:** `blockStreamingBreak: "message_end"` (descarrega uma vez, possivelmente em vários fragmentos se for muito longo).
|
||||
- **Sem streaming em blocos:** `blockStreamingDefault: "off"` (apenas resposta final).
|
||||
|
||||
**Observação sobre canais:** o streaming em blocos fica **desativado, a menos que**
|
||||
**Observação sobre canais:** O streaming em blocos fica **desativado, a menos que**
|
||||
`*.blockStreaming` seja explicitamente definido como `true`. Os canais podem transmitir uma prévia ao vivo
|
||||
(`channels.<channel>.streaming`) sem respostas em bloco.
|
||||
|
||||
@ -118,51 +118,52 @@ Chave canônica: `channels.<channel>.streaming`
|
||||
|
||||
Modos:
|
||||
|
||||
- `off`: desabilita o streaming de prévia.
|
||||
- `off`: desativa o streaming de prévia.
|
||||
- `partial`: uma única prévia que é substituída pelo texto mais recente.
|
||||
- `block`: atualizações da prévia em etapas com chunking/anexos.
|
||||
- `block`: atualizações de prévia em etapas fragmentadas/anexadas.
|
||||
- `progress`: prévia de progresso/status durante a geração, resposta final ao concluir.
|
||||
|
||||
### Mapeamento por canal
|
||||
|
||||
| Canal | `off` | `partial` | `block` | `progress` |
|
||||
| -------- | ----- | --------- | ------- | ------------------ |
|
||||
| Canal | `off` | `partial` | `block` | `progress` |
|
||||
| -------- | ----- | --------- | ------- | ----------------- |
|
||||
| Telegram | ✅ | ✅ | ✅ | mapeia para `partial` |
|
||||
| Discord | ✅ | ✅ | ✅ | mapeia para `partial` |
|
||||
| Slack | ✅ | ✅ | ✅ | ✅ |
|
||||
| Slack | ✅ | ✅ | ✅ | ✅ |
|
||||
|
||||
Apenas para Slack:
|
||||
Somente no Slack:
|
||||
|
||||
- `channels.slack.nativeStreaming` alterna chamadas da API nativa de streaming do Slack quando `streaming=partial` (padrão: `true`).
|
||||
- `channels.slack.streaming.nativeTransport` alterna chamadas da API nativa de streaming do Slack quando `channels.slack.streaming.mode="partial"` (padrão: `true`).
|
||||
- O streaming nativo do Slack e o status de thread do assistente no Slack exigem um destino de thread de resposta; DMs de nível superior não mostram essa prévia no estilo de thread.
|
||||
|
||||
Migração de chave legada:
|
||||
|
||||
- Telegram: `streamMode` + booleano `streaming` migram automaticamente para o enum `streaming`.
|
||||
- Discord: `streamMode` + booleano `streaming` migram automaticamente para o enum `streaming`.
|
||||
- Slack: `streamMode` migra automaticamente para o enum `streaming`; o booleano `streaming` migra automaticamente para `nativeStreaming`.
|
||||
- Telegram: `streamMode` + booleano `streaming` são migrados automaticamente para o enum `streaming`.
|
||||
- Discord: `streamMode` + booleano `streaming` são migrados automaticamente para o enum `streaming`.
|
||||
- Slack: `streamMode` é migrado automaticamente para `streaming.mode`; o booleano `streaming` é migrado automaticamente para `streaming.mode` mais `streaming.nativeTransport`; o legado `nativeStreaming` é migrado automaticamente para `streaming.nativeTransport`.
|
||||
|
||||
### Comportamento em runtime
|
||||
### Comportamento em tempo de execução
|
||||
|
||||
Telegram:
|
||||
|
||||
- Usa atualizações de prévia com `sendMessage` + `editMessageText` em DMs e grupos/tópicos.
|
||||
- O streaming de prévia é ignorado quando o streaming em blocos do Telegram está explicitamente habilitado (para evitar streaming duplo).
|
||||
- `/reasoning stream` pode gravar raciocínio na prévia.
|
||||
- O streaming de prévia é ignorado quando o streaming em blocos do Telegram está explicitamente ativado (para evitar streaming duplo).
|
||||
- `/reasoning stream` pode gravar o raciocínio na prévia.
|
||||
|
||||
Discord:
|
||||
|
||||
- Usa envio + edição de mensagens de prévia.
|
||||
- O modo `block` usa chunking de rascunho (`draftChunk`).
|
||||
- O streaming de prévia é ignorado quando o streaming em blocos do Discord está explicitamente habilitado.
|
||||
- Usa mensagens de prévia com envio + edição.
|
||||
- O modo `block` usa fragmentação de rascunho (`draftChunk`).
|
||||
- O streaming de prévia é ignorado quando o streaming em blocos do Discord está explicitamente ativado.
|
||||
|
||||
Slack:
|
||||
|
||||
- `partial` pode usar o streaming nativo do Slack (`chat.startStream`/`append`/`stop`) quando disponível.
|
||||
- `block` usa prévias de rascunho no estilo append.
|
||||
- `progress` usa texto de prévia de status e depois a resposta final.
|
||||
- `progress` usa texto de prévia de status e, depois, a resposta final.
|
||||
|
||||
## Relacionados
|
||||
## Relacionado
|
||||
|
||||
- [Mensagens](/concepts/messages) — ciclo de vida e entrega de mensagens
|
||||
- [Retry](/concepts/retry) — comportamento de nova tentativa em falha de entrega
|
||||
- [Canais](/channels) — suporte a streaming por canal
|
||||
- [Mensagens](/pt-BR/concepts/messages) — ciclo de vida e entrega de mensagens
|
||||
- [Retry](/pt-BR/concepts/retry) — comportamento de repetição em falhas de entrega
|
||||
- [Canais](/pt-BR/channels) — suporte a streaming por canal
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -2,32 +2,32 @@
|
||||
read_when:
|
||||
- Configurando o OpenClaw pela primeira vez
|
||||
- Procurando padrões comuns de configuração
|
||||
- Navegando até seções específicas de configuração
|
||||
- Navegando até seções específicas da configuração
|
||||
summary: 'Visão geral da configuração: tarefas comuns, configuração rápida e links para a referência completa'
|
||||
title: Configuração
|
||||
x-i18n:
|
||||
generated_at: "2026-04-05T12:42:11Z"
|
||||
generated_at: "2026-04-08T05:27:48Z"
|
||||
model: gpt-5.4
|
||||
provider: openai
|
||||
source_hash: a39a7de09c5f9540785ec67f37d435a7a86201f0f5f640dae663054f35976712
|
||||
source_hash: 199a1e515bd4003319e71593a2659bb883299a76ff67e273d92583df03c96604
|
||||
source_path: gateway/configuration.md
|
||||
workflow: 15
|
||||
---
|
||||
|
||||
# Configuração
|
||||
|
||||
O OpenClaw lê uma configuração opcional em <Tooltip tip="JSON5 oferece suporte a comentários e vírgulas finais">**JSON5**</Tooltip> de `~/.openclaw/openclaw.json`.
|
||||
O OpenClaw lê uma configuração opcional em <Tooltip tip="JSON5 oferece suporte a comentários e vírgulas à direita">**JSON5**</Tooltip> de `~/.openclaw/openclaw.json`.
|
||||
|
||||
Se o arquivo não existir, o OpenClaw usará padrões seguros. Motivos comuns para adicionar uma configuração:
|
||||
Se o arquivo estiver ausente, o OpenClaw usará padrões seguros. Motivos comuns para adicionar uma configuração:
|
||||
|
||||
- Conectar canais e controlar quem pode enviar mensagens para o bot
|
||||
- Conectar canais e controlar quem pode enviar mensagens ao bot
|
||||
- Definir modelos, ferramentas, sandboxing ou automação (cron, hooks)
|
||||
- Ajustar sessões, mídia, rede ou UI
|
||||
|
||||
Veja a [referência completa](/gateway/configuration-reference) para todos os campos disponíveis.
|
||||
Consulte a [referência completa](/pt-BR/gateway/configuration-reference) para ver todos os campos disponíveis.
|
||||
|
||||
<Tip>
|
||||
**Novo em configuração?** Comece com `openclaw onboard` para configuração interativa ou veja o guia [Exemplos de configuração](/gateway/configuration-examples) para configurações completas prontas para copiar e colar.
|
||||
**Novo em configuração?** Comece com `openclaw onboard` para uma configuração interativa, ou confira o guia [Exemplos de configuração](/pt-BR/gateway/configuration-examples) para ver configurações completas de copiar e colar.
|
||||
</Tip>
|
||||
|
||||
## Configuração mínima
|
||||
@ -49,7 +49,7 @@ Veja a [referência completa](/gateway/configuration-reference) para todos os ca
|
||||
openclaw configure # assistente de configuração
|
||||
```
|
||||
</Tab>
|
||||
<Tab title="CLI (uma linha)">
|
||||
<Tab title="CLI (one-liners)">
|
||||
```bash
|
||||
openclaw config get agents.defaults.workspace
|
||||
openclaw config set agents.defaults.heartbeat.every "2h"
|
||||
@ -58,31 +58,33 @@ Veja a [referência completa](/gateway/configuration-reference) para todos os ca
|
||||
</Tab>
|
||||
<Tab title="UI de controle">
|
||||
Abra [http://127.0.0.1:18789](http://127.0.0.1:18789) e use a aba **Config**.
|
||||
A UI de controle renderiza um formulário a partir do schema de configuração ativo, incluindo metadados de documentação `title` / `description` dos campos, além de schemas de plugins e canais quando disponíveis, com um editor **Raw JSON** como rota de escape. Para UIs de navegação detalhada e outras ferramentas, o gateway também expõe `config.schema.lookup` para buscar um único nó do schema com escopo de caminho, além de resumos imediatos dos filhos.
|
||||
A UI de controle renderiza um formulário a partir do esquema de configuração ativo, incluindo metadados de documentação de campos `title` / `description`, além de esquemas de plugins e canais quando disponíveis, com um editor de **Raw JSON** como saída de emergência. Para UIs de navegação detalhada e outras ferramentas, o gateway também expõe `config.schema.lookup` para buscar um nó de esquema com escopo em um caminho mais resumos imediatos dos nós filhos.
|
||||
</Tab>
|
||||
<Tab title="Edição direta">
|
||||
Edite `~/.openclaw/openclaw.json` diretamente. O Gateway observa o arquivo e aplica as alterações automaticamente (veja [hot reload](#config-hot-reload)).
|
||||
Edite `~/.openclaw/openclaw.json` diretamente. O Gateway monitora o arquivo e aplica as alterações automaticamente (consulte [hot reload](#config-hot-reload)).
|
||||
</Tab>
|
||||
</Tabs>
|
||||
|
||||
## Validação estrita
|
||||
## Validação rigorosa
|
||||
|
||||
<Warning>
|
||||
O OpenClaw aceita apenas configurações que correspondem totalmente ao schema. Chaves desconhecidas, tipos malformados ou valores inválidos fazem o Gateway **se recusar a iniciar**. A única exceção no nível raiz é `$schema` (string), para que editores possam anexar metadados de JSON Schema.
|
||||
O OpenClaw aceita apenas configurações que correspondam totalmente ao esquema. Chaves desconhecidas, tipos malformados ou valores inválidos fazem com que o Gateway **se recuse a iniciar**. A única exceção no nível raiz é `$schema` (string), para que editores possam anexar metadados de JSON Schema.
|
||||
</Warning>
|
||||
|
||||
Observações sobre ferramentas de schema:
|
||||
Observações sobre as ferramentas de esquema:
|
||||
|
||||
- `openclaw config schema` imprime a mesma família de JSON Schema usada pela UI de controle e pela validação de configuração.
|
||||
- Os valores `title` e `description` dos campos são levados para a saída do schema para ferramentas de editor e formulário.
|
||||
- Entradas de objeto aninhado, curinga (`*`) e item de array (`[]`) herdam os mesmos metadados de documentação quando há documentação de campo correspondente.
|
||||
- `openclaw config schema` imprime a mesma família de JSON Schema usada pela UI de controle e pela validação da configuração.
|
||||
- Trate essa saída de esquema como o contrato canônico legível por máquina para `openclaw.json`; esta visão geral e a referência de configuração a resumem.
|
||||
- Os valores de `title` e `description` dos campos são carregados para a saída do esquema para ferramentas de editor e formulário.
|
||||
- Entradas de objeto aninhado, curinga (`*`) e item de array (`[]`) herdam os mesmos metadados de documentação quando existe documentação de campo correspondente.
|
||||
- Ramos de composição `anyOf` / `oneOf` / `allOf` também herdam os mesmos metadados de documentação, para que variantes de união/interseção mantenham a mesma ajuda de campo.
|
||||
- `config.schema.lookup` retorna um caminho de configuração normalizado com um nó de schema superficial (`title`, `description`, `type`, `enum`, `const`, limites comuns e campos de validação semelhantes), metadados de dica de UI correspondentes e resumos imediatos dos filhos para ferramentas de navegação detalhada.
|
||||
- Schemas de plugin/canal em runtime são mesclados quando o gateway consegue carregar o registro atual de manifests.
|
||||
- `config.schema.lookup` retorna um caminho de configuração normalizado com um nó de esquema superficial (`title`, `description`, `type`, `enum`, `const`, limites comuns e campos de validação semelhantes), metadados de dica de UI correspondentes e resumos imediatos dos nós filhos para ferramentas de navegação detalhada.
|
||||
- Esquemas de plugin/canal em tempo de execução são mesclados quando o gateway consegue carregar o registro de manifestos atual.
|
||||
- `pnpm config:docs:check` detecta divergência entre artefatos de baseline de configuração voltados à documentação e a superfície atual do esquema.
|
||||
|
||||
Quando a validação falha:
|
||||
|
||||
- O Gateway não inicia
|
||||
- O Gateway não inicializa
|
||||
- Apenas comandos de diagnóstico funcionam (`openclaw doctor`, `openclaw logs`, `openclaw health`, `openclaw status`)
|
||||
- Execute `openclaw doctor` para ver os problemas exatos
|
||||
- Execute `openclaw doctor --fix` (ou `--yes`) para aplicar correções
|
||||
@ -91,18 +93,18 @@ Quando a validação falha:
|
||||
|
||||
<AccordionGroup>
|
||||
<Accordion title="Configurar um canal (WhatsApp, Telegram, Discord etc.)">
|
||||
Cada canal tem sua própria seção de configuração em `channels.<provider>`. Veja a página dedicada do canal para as etapas de configuração:
|
||||
Cada canal tem sua própria seção de configuração em `channels.<provider>`. Consulte a página dedicada do canal para ver as etapas de configuração:
|
||||
|
||||
- [WhatsApp](/channels/whatsapp) — `channels.whatsapp`
|
||||
- [Telegram](/channels/telegram) — `channels.telegram`
|
||||
- [Discord](/channels/discord) — `channels.discord`
|
||||
- [Feishu](/channels/feishu) — `channels.feishu`
|
||||
- [Google Chat](/channels/googlechat) — `channels.googlechat`
|
||||
- [Microsoft Teams](/channels/msteams) — `channels.msteams`
|
||||
- [Slack](/channels/slack) — `channels.slack`
|
||||
- [Signal](/channels/signal) — `channels.signal`
|
||||
- [iMessage](/channels/imessage) — `channels.imessage`
|
||||
- [Mattermost](/channels/mattermost) — `channels.mattermost`
|
||||
- [WhatsApp](/pt-BR/channels/whatsapp) — `channels.whatsapp`
|
||||
- [Telegram](/pt-BR/channels/telegram) — `channels.telegram`
|
||||
- [Discord](/pt-BR/channels/discord) — `channels.discord`
|
||||
- [Feishu](/pt-BR/channels/feishu) — `channels.feishu`
|
||||
- [Google Chat](/pt-BR/channels/googlechat) — `channels.googlechat`
|
||||
- [Microsoft Teams](/pt-BR/channels/msteams) — `channels.msteams`
|
||||
- [Slack](/pt-BR/channels/slack) — `channels.slack`
|
||||
- [Signal](/pt-BR/channels/signal) — `channels.signal`
|
||||
- [iMessage](/pt-BR/channels/imessage) — `channels.imessage`
|
||||
- [Mattermost](/pt-BR/channels/mattermost) — `channels.mattermost`
|
||||
|
||||
Todos os canais compartilham o mesmo padrão de política de DM:
|
||||
|
||||
@ -122,7 +124,7 @@ Quando a validação falha:
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Escolher e configurar modelos">
|
||||
Defina o modelo primário e fallbacks opcionais:
|
||||
Defina o modelo principal e os fallbacks opcionais:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -141,30 +143,30 @@ Quando a validação falha:
|
||||
}
|
||||
```
|
||||
|
||||
- `agents.defaults.models` define o catálogo de modelos e funciona como allowlist para `/model`.
|
||||
- Refs de modelo usam o formato `provider/model` (por exemplo `anthropic/claude-opus-4-6`).
|
||||
- `agents.defaults.imageMaxDimensionPx` controla o redimensionamento de imagem para transcrição/ferramenta (padrão `1200`); valores menores geralmente reduzem o uso de tokens de visão em execuções com muitas capturas de tela.
|
||||
- Veja [CLI de modelos](/concepts/models) para trocar modelos no chat e [Failover de modelo](/concepts/model-failover) para rotação de autenticação e comportamento de fallback.
|
||||
- Para provedores personalizados/self-hosted, veja [Provedores personalizados](/gateway/configuration-reference#custom-providers-and-base-urls) na referência.
|
||||
- `agents.defaults.models` define o catálogo de modelos e atua como allowlist para `/model`.
|
||||
- As referências de modelo usam o formato `provider/model` (por exemplo, `anthropic/claude-opus-4-6`).
|
||||
- `agents.defaults.imageMaxDimensionPx` controla o redimensionamento de imagens em transcrições/ferramentas (padrão `1200`); valores menores normalmente reduzem o uso de tokens de visão em execuções com muitas capturas de tela.
|
||||
- Consulte [Models CLI](/pt-BR/concepts/models) para trocar de modelos no chat e [Model Failover](/pt-BR/concepts/model-failover) para rotação de autenticação e comportamento de fallback.
|
||||
- Para provedores personalizados/autohospedados, consulte [provedores personalizados](/pt-BR/gateway/configuration-reference#custom-providers-and-base-urls) na referência.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Controlar quem pode enviar mensagens para o bot">
|
||||
<Accordion title="Controlar quem pode enviar mensagens ao bot">
|
||||
O acesso por DM é controlado por canal via `dmPolicy`:
|
||||
|
||||
- `"pairing"` (padrão): remetentes desconhecidos recebem um código de pareamento único para aprovação
|
||||
- `"allowlist"`: apenas remetentes em `allowFrom` (ou no armazenamento de allowlist pareado)
|
||||
- `"pairing"` (padrão): remetentes desconhecidos recebem um código de emparelhamento de uso único para aprovação
|
||||
- `"allowlist"`: apenas remetentes em `allowFrom` (ou no armazenamento de permissões emparelhadas)
|
||||
- `"open"`: permite todas as DMs recebidas (requer `allowFrom: ["*"]`)
|
||||
- `"disabled"`: ignora todas as DMs
|
||||
|
||||
Para grupos, use `groupPolicy` + `groupAllowFrom` ou allowlists específicas do canal.
|
||||
|
||||
Veja a [referência completa](/gateway/configuration-reference#dm-and-group-access) para detalhes por canal.
|
||||
Consulte a [referência completa](/pt-BR/gateway/configuration-reference#dm-and-group-access) para detalhes por canal.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Configurar bloqueio por menção em chats de grupo">
|
||||
Mensagens de grupo, por padrão, **exigem menção**. Configure padrões por agente:
|
||||
<Accordion title="Configurar exigência de menção em chats de grupo">
|
||||
As mensagens de grupo, por padrão, **exigem menção**. Configure padrões por agente:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -186,9 +188,9 @@ Quando a validação falha:
|
||||
}
|
||||
```
|
||||
|
||||
- **Menções por metadados**: @menções nativas (toque para mencionar no WhatsApp, @bot no Telegram etc.)
|
||||
- **Menções de metadados**: menções @ nativas (WhatsApp tocar para mencionar, Telegram @bot etc.)
|
||||
- **Padrões de texto**: padrões regex seguros em `mentionPatterns`
|
||||
- Veja a [referência completa](/gateway/configuration-reference#group-chat-mention-gating) para substituições por canal e modo de self-chat.
|
||||
- Consulte a [referência completa](/pt-BR/gateway/configuration-reference#group-chat-mention-gating) para substituições por canal e modo self-chat.
|
||||
|
||||
</Accordion>
|
||||
|
||||
@ -202,9 +204,9 @@ Quando a validação falha:
|
||||
skills: ["github", "weather"],
|
||||
},
|
||||
list: [
|
||||
{ id: "writer" }, // herda github, weather
|
||||
{ id: "docs", skills: ["docs-search"] }, // substitui os padrões
|
||||
{ id: "locked-down", skills: [] }, // sem Skills
|
||||
{ id: "writer" }, // inherits github, weather
|
||||
{ id: "docs", skills: ["docs-search"] }, // replaces defaults
|
||||
{ id: "locked-down", skills: [] }, // no skills
|
||||
],
|
||||
},
|
||||
}
|
||||
@ -212,13 +214,13 @@ Quando a validação falha:
|
||||
|
||||
- Omita `agents.defaults.skills` para Skills irrestritas por padrão.
|
||||
- Omita `agents.list[].skills` para herdar os padrões.
|
||||
- Defina `agents.list[].skills: []` para nenhuma Skill.
|
||||
- Veja [Skills](/tools/skills), [Configuração de Skills](/tools/skills-config) e a [Referência de configuração](/gateway/configuration-reference#agentsdefaultsskills).
|
||||
- Defina `agents.list[].skills: []` para não ter Skills.
|
||||
- Consulte [Skills](/pt-BR/tools/skills), [configuração de Skills](/pt-BR/tools/skills-config) e a [Referência de configuração](/pt-BR/gateway/configuration-reference#agentsdefaultsskills).
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Ajustar o monitoramento de integridade de canais do gateway">
|
||||
Controle quão agressivamente o gateway reinicia canais que parecem obsoletos:
|
||||
Controle com que agressividade o gateway reinicia canais que parecem obsoletos:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -240,20 +242,20 @@ Quando a validação falha:
|
||||
}
|
||||
```
|
||||
|
||||
- Defina `gateway.channelHealthCheckMinutes: 0` para desativar globalmente reinicializações do monitor de integridade.
|
||||
- Defina `gateway.channelHealthCheckMinutes: 0` para desabilitar globalmente reinicializações do monitor de integridade.
|
||||
- `channelStaleEventThresholdMinutes` deve ser maior ou igual ao intervalo de verificação.
|
||||
- Use `channels.<provider>.healthMonitor.enabled` ou `channels.<provider>.accounts.<id>.healthMonitor.enabled` para desativar reinicializações automáticas de um canal ou conta sem desativar o monitor global.
|
||||
- Veja [Verificações de integridade](/gateway/health) para depuração operacional e a [referência completa](/gateway/configuration-reference#gateway) para todos os campos.
|
||||
- Use `channels.<provider>.healthMonitor.enabled` ou `channels.<provider>.accounts.<id>.healthMonitor.enabled` para desabilitar reinicializações automáticas de um canal ou conta sem desabilitar o monitor global.
|
||||
- Consulte [Health Checks](/pt-BR/gateway/health) para depuração operacional e a [referência completa](/pt-BR/gateway/configuration-reference#gateway) para todos os campos.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Configurar sessões e redefinições">
|
||||
Sessões controlam continuidade e isolamento de conversa:
|
||||
As sessões controlam continuidade e isolamento da conversa:
|
||||
|
||||
```json5
|
||||
{
|
||||
session: {
|
||||
dmScope: "per-channel-peer", // recomendado para múltiplos usuários
|
||||
dmScope: "per-channel-peer", // recommended for multi-user
|
||||
threadBindings: {
|
||||
enabled: true,
|
||||
idleHours: 24,
|
||||
@ -269,14 +271,14 @@ Quando a validação falha:
|
||||
```
|
||||
|
||||
- `dmScope`: `main` (compartilhado) | `per-peer` | `per-channel-peer` | `per-account-channel-peer`
|
||||
- `threadBindings`: padrões globais para roteamento de sessão vinculado a thread (o Discord oferece suporte a `/focus`, `/unfocus`, `/agents`, `/session idle` e `/session max-age`).
|
||||
- Veja [Gerenciamento de sessão](/concepts/session) para escopo, links de identidade e política de envio.
|
||||
- Veja a [referência completa](/gateway/configuration-reference#session) para todos os campos.
|
||||
- `threadBindings`: padrões globais para roteamento de sessão vinculado a thread (Discord oferece suporte a `/focus`, `/unfocus`, `/agents`, `/session idle` e `/session max-age`).
|
||||
- Consulte [Gerenciamento de sessões](/pt-BR/concepts/session) para escopo, links de identidade e política de envio.
|
||||
- Consulte a [referência completa](/pt-BR/gateway/configuration-reference#session) para todos os campos.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Ativar sandboxing">
|
||||
Execute sessões de agente em contêineres Docker isolados:
|
||||
Execute sessões de agentes em contêineres Docker isolados:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -293,7 +295,7 @@ Quando a validação falha:
|
||||
|
||||
Crie a imagem primeiro: `scripts/sandbox-setup.sh`
|
||||
|
||||
Veja [Sandboxing](/gateway/sandboxing) para o guia completo e a [referência completa](/gateway/configuration-reference#agentsdefaultssandbox) para todas as opções.
|
||||
Consulte [Sandboxing](/pt-BR/gateway/sandboxing) para o guia completo e a [referência completa](/pt-BR/gateway/configuration-reference#agentsdefaultssandbox) para todas as opções.
|
||||
|
||||
</Accordion>
|
||||
|
||||
@ -309,7 +311,7 @@ Quando a validação falha:
|
||||
apns: {
|
||||
relay: {
|
||||
baseUrl: "https://relay.example.com",
|
||||
// Opcional. Padrão: 10000
|
||||
// Optional. Default: 10000
|
||||
timeoutMs: 10000,
|
||||
},
|
||||
},
|
||||
@ -326,31 +328,31 @@ Quando a validação falha:
|
||||
|
||||
O que isso faz:
|
||||
|
||||
- Permite que o gateway envie `push.test`, wake nudges e reconnect wakes por meio do relay externo.
|
||||
- Usa uma concessão de envio com escopo de registro encaminhada pelo app iOS pareado. O gateway não precisa de um token de relay para toda a implantação.
|
||||
- Vincula cada registro com relay à identidade do gateway com a qual o app iOS foi pareado, para que outro gateway não possa reutilizar o registro armazenado.
|
||||
- Mantém builds locais/manuais do iOS em APNs direto. Envios com relay se aplicam apenas a builds oficiais distribuídas que se registraram pelo relay.
|
||||
- Deve corresponder ao base URL do relay embutido na build oficial/TestFlight do iOS, para que o tráfego de registro e envio chegue à mesma implantação do relay.
|
||||
- Permite que o gateway envie `push.test`, alertas de ativação e ativações de reconexão por meio do relay externo.
|
||||
- Usa uma permissão de envio com escopo de registro encaminhada pelo app iOS emparelhado. O gateway não precisa de um token de relay de toda a implantação.
|
||||
- Vincula cada registro com relay à identidade do gateway com a qual o app iOS foi emparelhado, para que outro gateway não possa reutilizar o registro armazenado.
|
||||
- Mantém builds locais/manuais do iOS em APNs direto. Envios com relay se aplicam apenas a builds oficiais distribuídos que se registraram pelo relay.
|
||||
- Deve corresponder ao URL base do relay incorporado ao build oficial/TestFlight do iOS, para que o tráfego de registro e envio chegue à mesma implantação de relay.
|
||||
|
||||
Fluxo completo:
|
||||
Fluxo ponta a ponta:
|
||||
|
||||
1. Instale uma build oficial/TestFlight do iOS compilada com o mesmo base URL do relay.
|
||||
1. Instale um build oficial/TestFlight do iOS compilado com o mesmo URL base do relay.
|
||||
2. Configure `gateway.push.apns.relay.baseUrl` no gateway.
|
||||
3. Faça o pareamento do app iOS com o gateway e deixe tanto as sessões de nó quanto as de operador se conectarem.
|
||||
4. O app iOS busca a identidade do gateway, registra-se no relay usando App Attest mais o recibo do app e, em seguida, publica o payload `push.apns.register` com relay no gateway pareado.
|
||||
5. O gateway armazena o identificador do relay e a concessão de envio, depois os usa para `push.test`, wake nudges e reconnect wakes.
|
||||
3. Emparelhe o app iOS com o gateway e permita que as sessões de nó e operador se conectem.
|
||||
4. O app iOS busca a identidade do gateway, registra-se no relay usando App Attest junto com o recibo do app e então publica a carga `push.apns.register` com relay no gateway emparelhado.
|
||||
5. O gateway armazena o identificador do relay e a permissão de envio, depois os usa para `push.test`, alertas de ativação e ativações de reconexão.
|
||||
|
||||
Observações operacionais:
|
||||
|
||||
- Se você trocar o app iOS para outro gateway, reconecte o app para que ele possa publicar um novo registro de relay vinculado a esse gateway.
|
||||
- Se você distribuir uma nova build do iOS apontando para outra implantação de relay, o app atualiza seu registro de relay em cache em vez de reutilizar a origem antiga do relay.
|
||||
- Se você mudar o app iOS para outro gateway, reconecte o app para que ele possa publicar um novo registro de relay vinculado àquele gateway.
|
||||
- Se você distribuir um novo build do iOS apontando para outra implantação de relay, o app atualiza seu registro de relay em cache em vez de reutilizar a origem antiga do relay.
|
||||
|
||||
Observação de compatibilidade:
|
||||
|
||||
- `OPENCLAW_APNS_RELAY_BASE_URL` e `OPENCLAW_APNS_RELAY_TIMEOUT_MS` ainda funcionam como substituições temporárias por ambiente.
|
||||
- `OPENCLAW_APNS_RELAY_ALLOW_HTTP=true` continua sendo uma rota de escape de desenvolvimento somente para loopback; não persista URLs HTTP de relay na configuração.
|
||||
- `OPENCLAW_APNS_RELAY_BASE_URL` e `OPENCLAW_APNS_RELAY_TIMEOUT_MS` ainda funcionam como substituições temporárias via variáveis de ambiente.
|
||||
- `OPENCLAW_APNS_RELAY_ALLOW_HTTP=true` continua sendo uma válvula de escape apenas para desenvolvimento em loopback; não persista URLs HTTP de relay na configuração.
|
||||
|
||||
Veja [App iOS](/platforms/ios#relay-backed-push-for-official-builds) para o fluxo completo e [Fluxo de autenticação e confiança](/platforms/ios#authentication-and-trust-flow) para o modelo de segurança do relay.
|
||||
Consulte [App iOS](/pt-BR/platforms/ios#relay-backed-push-for-official-builds) para o fluxo ponta a ponta e [Fluxo de autenticação e confiança](/pt-BR/platforms/ios#authentication-and-trust-flow) para o modelo de segurança do relay.
|
||||
|
||||
</Accordion>
|
||||
|
||||
@ -368,14 +370,14 @@ Quando a validação falha:
|
||||
}
|
||||
```
|
||||
|
||||
- `every`: string de duração (`30m`, `2h`). Defina `0m` para desativar.
|
||||
- `every`: string de duração (`30m`, `2h`). Defina `0m` para desabilitar.
|
||||
- `target`: `last` | `none` | `<channel-id>` (por exemplo `discord`, `matrix`, `telegram` ou `whatsapp`)
|
||||
- `directPolicy`: `allow` (padrão) ou `block` para alvos de heartbeat em estilo DM
|
||||
- Veja [Heartbeat](/gateway/heartbeat) para o guia completo.
|
||||
- `directPolicy`: `allow` (padrão) ou `block` para destinos de heartbeat no estilo DM
|
||||
- Consulte [Heartbeat](/pt-BR/gateway/heartbeat) para o guia completo.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Configurar jobs cron">
|
||||
<Accordion title="Configurar tarefas cron">
|
||||
```json5
|
||||
{
|
||||
cron: {
|
||||
@ -390,9 +392,9 @@ Quando a validação falha:
|
||||
}
|
||||
```
|
||||
|
||||
- `sessionRetention`: remove sessões concluídas de execuções isoladas de `sessions.json` (padrão `24h`; defina `false` para desativar).
|
||||
- `runLog`: faz pruning de `cron/runs/<jobId>.jsonl` por tamanho e linhas retidas.
|
||||
- Veja [Jobs cron](/automation/cron-jobs) para visão geral do recurso e exemplos de CLI.
|
||||
- `sessionRetention`: remove sessões isoladas de execução concluídas de `sessions.json` (padrão `24h`; defina `false` para desabilitar).
|
||||
- `runLog`: remove conteúdo de `cron/runs/<jobId>.jsonl` por tamanho e número de linhas retidas.
|
||||
- Consulte [Tarefas cron](/pt-BR/automation/cron-jobs) para uma visão geral do recurso e exemplos de CLI.
|
||||
|
||||
</Accordion>
|
||||
|
||||
@ -423,18 +425,18 @@ Quando a validação falha:
|
||||
Observação de segurança:
|
||||
- Trate todo conteúdo de payload de hook/webhook como entrada não confiável.
|
||||
- Use um `hooks.token` dedicado; não reutilize o token compartilhado do Gateway.
|
||||
- A autenticação de hook é somente por cabeçalho (`Authorization: Bearer ...` ou `x-openclaw-token`); tokens em query string são rejeitados.
|
||||
- A autenticação de hook é apenas por cabeçalho (`Authorization: Bearer ...` ou `x-openclaw-token`); tokens em query string são rejeitados.
|
||||
- `hooks.path` não pode ser `/`; mantenha a entrada de webhook em um subcaminho dedicado, como `/hooks`.
|
||||
- Mantenha desativadas flags de bypass de conteúdo inseguro (`hooks.gmail.allowUnsafeExternalContent`, `hooks.mappings[].allowUnsafeExternalContent`), a menos que esteja fazendo depuração bem delimitada.
|
||||
- Mantenha desabilitadas as flags de bypass de conteúdo inseguro (`hooks.gmail.allowUnsafeExternalContent`, `hooks.mappings[].allowUnsafeExternalContent`), a menos que esteja fazendo depuração bem delimitada.
|
||||
- Se você ativar `hooks.allowRequestSessionKey`, também defina `hooks.allowedSessionKeyPrefixes` para limitar chaves de sessão escolhidas pelo chamador.
|
||||
- Para agentes acionados por hooks, prefira camadas fortes e modernas de modelo e política estrita de ferramentas (por exemplo, apenas mensagens mais sandboxing sempre que possível).
|
||||
- Para agentes acionados por hook, prefira camadas de modelo modernas e fortes e uma política rígida de ferramentas (por exemplo, apenas mensagens mais sandboxing quando possível).
|
||||
|
||||
Veja a [referência completa](/gateway/configuration-reference#hooks) para todas as opções de mapeamento e integração com Gmail.
|
||||
Consulte a [referência completa](/pt-BR/gateway/configuration-reference#hooks) para todas as opções de mapeamento e integração com Gmail.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Configurar roteamento multiagente">
|
||||
Execute múltiplos agentes isolados com workspaces e sessões separados:
|
||||
Execute vários agentes isolados com workspaces e sessões separadas:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -451,7 +453,7 @@ Quando a validação falha:
|
||||
}
|
||||
```
|
||||
|
||||
Veja [Multi-Agent](/concepts/multi-agent) e a [referência completa](/gateway/configuration-reference#multi-agent-routing) para regras de binding e perfis de acesso por agente.
|
||||
Consulte [Multi-Agent](/pt-BR/concepts/multi-agent) e a [referência completa](/pt-BR/gateway/configuration-reference#multi-agent-routing) para regras de binding e perfis de acesso por agente.
|
||||
|
||||
</Accordion>
|
||||
|
||||
@ -469,28 +471,28 @@ Quando a validação falha:
|
||||
}
|
||||
```
|
||||
|
||||
- **Arquivo único**: substitui o objeto que o contém
|
||||
- **Array de arquivos**: mesclado profundamente em ordem (o posterior prevalece)
|
||||
- **Arquivo único**: substitui o objeto contido
|
||||
- **Array de arquivos**: mesclagem profunda em ordem (o último prevalece)
|
||||
- **Chaves irmãs**: mescladas após os includes (substituem valores incluídos)
|
||||
- **Includes aninhados**: compatíveis até 10 níveis de profundidade
|
||||
- **Includes aninhados**: compatível com até 10 níveis de profundidade
|
||||
- **Caminhos relativos**: resolvidos em relação ao arquivo que inclui
|
||||
- **Tratamento de erros**: erros claros para arquivos ausentes, erros de parse e includes circulares
|
||||
|
||||
</Accordion>
|
||||
</AccordionGroup>
|
||||
|
||||
## Config hot reload
|
||||
## Hot reload da configuração
|
||||
|
||||
O Gateway observa `~/.openclaw/openclaw.json` e aplica alterações automaticamente — não é necessário reinício manual para a maioria das configurações.
|
||||
O Gateway monitora `~/.openclaw/openclaw.json` e aplica as alterações automaticamente — não é necessário reiniciar manualmente para a maioria das configurações.
|
||||
|
||||
### Modos de recarga
|
||||
|
||||
| Modo | Comportamento |
|
||||
| --------------------- | -------------------------------------------------------------------------------------- |
|
||||
| **`hybrid`** (padrão) | Aplica alterações seguras a quente imediatamente. Reinicia automaticamente para as críticas. |
|
||||
| **`hot`** | Aplica somente alterações seguras a quente. Registra um aviso quando é necessário reiniciar — você cuida disso. |
|
||||
| **`restart`** | Reinicia o Gateway em qualquer alteração de configuração, segura ou não. |
|
||||
| **`off`** | Desativa a observação de arquivos. Alterações entram em vigor no próximo reinício manual. |
|
||||
| Modo | Comportamento |
|
||||
| ---------------------- | ------------------------------------------------------------------------------------- |
|
||||
| **`hybrid`** (padrão) | Aplica a quente alterações seguras instantaneamente. Reinicia automaticamente para alterações críticas. |
|
||||
| **`hot`** | Aplica a quente apenas alterações seguras. Registra um aviso quando é necessário reiniciar — você cuida disso. |
|
||||
| **`restart`** | Reinicia o Gateway em qualquer alteração de configuração, segura ou não. |
|
||||
| **`off`** | Desabilita o monitoramento do arquivo. As alterações entram em vigor na próxima reinicialização manual. |
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -500,37 +502,37 @@ O Gateway observa `~/.openclaw/openclaw.json` e aplica alterações automaticame
|
||||
}
|
||||
```
|
||||
|
||||
### O que é aplicado a quente vs o que precisa de reinício
|
||||
### O que é aplicado a quente vs o que exige reinicialização
|
||||
|
||||
A maioria dos campos é aplicada a quente sem indisponibilidade. No modo `hybrid`, alterações que exigem reinício são tratadas automaticamente.
|
||||
A maioria dos campos é aplicada a quente sem indisponibilidade. No modo `hybrid`, alterações que exigem reinicialização são tratadas automaticamente.
|
||||
|
||||
| Categoria | Campos | Precisa reiniciar? |
|
||||
| --------------------- | -------------------------------------------------------------------- | ------------------ |
|
||||
| Canais | `channels.*`, `web` (WhatsApp) — todos os canais integrados e de extensão | Não |
|
||||
| Agente e modelos | `agent`, `agents`, `models`, `routing` | Não |
|
||||
| Automação | `hooks`, `cron`, `agent.heartbeat` | Não |
|
||||
| Sessões e mensagens | `session`, `messages` | Não |
|
||||
| Ferramentas e mídia | `tools`, `browser`, `skills`, `audio`, `talk` | Não |
|
||||
| UI e diversos | `ui`, `logging`, `identity`, `bindings` | Não |
|
||||
| Servidor do gateway | `gateway.*` (porta, bind, auth, tailscale, TLS, HTTP) | **Sim** |
|
||||
| Infraestrutura | `discovery`, `canvasHost`, `plugins` | **Sim** |
|
||||
| Categoria | Campos | Reinicialização necessária? |
|
||||
| ------------------- | -------------------------------------------------------------------- | --------------------------- |
|
||||
| Canais | `channels.*`, `web` (WhatsApp) — todos os canais integrados e de extensão | Não |
|
||||
| Agente e modelos | `agent`, `agents`, `models`, `routing` | Não |
|
||||
| Automação | `hooks`, `cron`, `agent.heartbeat` | Não |
|
||||
| Sessões e mensagens | `session`, `messages` | Não |
|
||||
| Ferramentas e mídia | `tools`, `browser`, `skills`, `audio`, `talk` | Não |
|
||||
| UI e diversos | `ui`, `logging`, `identity`, `bindings` | Não |
|
||||
| Servidor do gateway | `gateway.*` (port, bind, auth, tailscale, TLS, HTTP) | **Sim** |
|
||||
| Infraestrutura | `discovery`, `canvasHost`, `plugins` | **Sim** |
|
||||
|
||||
<Note>
|
||||
`gateway.reload` e `gateway.remote` são exceções — alterá-los **não** dispara um reinício.
|
||||
`gateway.reload` e `gateway.remote` são exceções — alterá-los **não** aciona uma reinicialização.
|
||||
</Note>
|
||||
|
||||
## RPC de configuração (atualizações programáticas)
|
||||
|
||||
<Note>
|
||||
RPCs de gravação do plano de controle (`config.apply`, `config.patch`, `update.run`) têm limite de taxa de **3 solicitações a cada 60 segundos** por `deviceId+clientIp`. Quando limitado, o RPC retorna `UNAVAILABLE` com `retryAfterMs`.
|
||||
RPCs de escrita do plano de controle (`config.apply`, `config.patch`, `update.run`) têm limite de taxa de **3 solicitações por 60 segundos** por `deviceId+clientIp`. Quando o limite é atingido, o RPC retorna `UNAVAILABLE` com `retryAfterMs`.
|
||||
</Note>
|
||||
|
||||
Fluxo seguro/padrão:
|
||||
|
||||
- `config.schema.lookup`: inspeciona uma subárvore de configuração com escopo de caminho com um nó de schema superficial, metadados de dica correspondentes e resumos imediatos dos filhos
|
||||
- `config.schema.lookup`: inspeciona uma subárvore de configuração com escopo em um caminho com um nó de esquema superficial, metadados de dica correspondentes e resumos imediatos dos nós filhos
|
||||
- `config.get`: busca o snapshot atual + hash
|
||||
- `config.patch`: caminho preferido para atualização parcial
|
||||
- `config.apply`: substituição completa da configuração apenas
|
||||
- `config.apply`: substituição da configuração completa apenas
|
||||
- `update.run`: autoatualização + reinicialização explícitas
|
||||
|
||||
Quando você não estiver substituindo a configuração inteira, prefira `config.schema.lookup` e depois `config.patch`.
|
||||
@ -540,21 +542,21 @@ Quando você não estiver substituindo a configuração inteira, prefira `config
|
||||
Valida + grava a configuração completa e reinicia o Gateway em uma única etapa.
|
||||
|
||||
<Warning>
|
||||
`config.apply` substitui a **configuração inteira**. Use `config.patch` para atualizações parciais ou `openclaw config set` para chaves únicas.
|
||||
`config.apply` substitui a **configuração inteira**. Use `config.patch` para atualizações parciais, ou `openclaw config set` para chaves individuais.
|
||||
</Warning>
|
||||
|
||||
Parâmetros:
|
||||
|
||||
- `raw` (string) — payload JSON5 para a configuração inteira
|
||||
- `raw` (string) — payload JSON5 da configuração inteira
|
||||
- `baseHash` (opcional) — hash da configuração de `config.get` (obrigatório quando a configuração existe)
|
||||
- `sessionKey` (opcional) — chave de sessão para o ping de wake-up após o reinício
|
||||
- `note` (opcional) — observação para o sentinel de reinício
|
||||
- `restartDelayMs` (opcional) — atraso antes do reinício (padrão 2000)
|
||||
- `sessionKey` (opcional) — chave de sessão para o ping de reativação após a reinicialização
|
||||
- `note` (opcional) — observação para o sentinela de reinicialização
|
||||
- `restartDelayMs` (opcional) — atraso antes da reinicialização (padrão 2000)
|
||||
|
||||
Solicitações de reinício são consolidadas enquanto uma já estiver pendente/em andamento, e um cooldown de 30 segundos é aplicado entre ciclos de reinício.
|
||||
Solicitações de reinicialização são consolidadas quando já existe uma pendente/em andamento, e um cooldown de 30 segundos é aplicado entre ciclos de reinicialização.
|
||||
|
||||
```bash
|
||||
openclaw gateway call config.get --params '{}' # capture payload.hash
|
||||
openclaw gateway call config.get --params '{}' # capturar payload.hash
|
||||
openclaw gateway call config.apply --params '{
|
||||
"raw": "{ agents: { defaults: { workspace: \"~/.openclaw/workspace\" } } }",
|
||||
"baseHash": "<hash>",
|
||||
@ -565,19 +567,19 @@ Quando você não estiver substituindo a configuração inteira, prefira `config
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="config.patch (atualização parcial)">
|
||||
Mescla uma atualização parcial na configuração existente (semântica de JSON merge patch):
|
||||
Mescla uma atualização parcial à configuração existente (semântica de JSON merge patch):
|
||||
|
||||
- Objetos são mesclados recursivamente
|
||||
- `null` exclui uma chave
|
||||
- Arrays são substituídos
|
||||
- Arrays substituem
|
||||
|
||||
Parâmetros:
|
||||
|
||||
- `raw` (string) — JSON5 somente com as chaves a alterar
|
||||
- `raw` (string) — JSON5 apenas com as chaves a alterar
|
||||
- `baseHash` (obrigatório) — hash da configuração de `config.get`
|
||||
- `sessionKey`, `note`, `restartDelayMs` — iguais a `config.apply`
|
||||
|
||||
O comportamento de reinício corresponde ao de `config.apply`: reinícios pendentes consolidados mais cooldown de 30 segundos entre ciclos de reinício.
|
||||
O comportamento de reinicialização corresponde a `config.apply`: reinicializações pendentes consolidadas mais um cooldown de 30 segundos entre ciclos de reinicialização.
|
||||
|
||||
```bash
|
||||
openclaw gateway call config.patch --params '{
|
||||
@ -591,12 +593,12 @@ Quando você não estiver substituindo a configuração inteira, prefira `config
|
||||
|
||||
## Variáveis de ambiente
|
||||
|
||||
O OpenClaw lê variáveis de ambiente do processo pai, além de:
|
||||
O OpenClaw lê variáveis de ambiente do processo pai mais:
|
||||
|
||||
- `.env` do diretório de trabalho atual (se existir)
|
||||
- `.env` do diretório de trabalho atual (se presente)
|
||||
- `~/.openclaw/.env` (fallback global)
|
||||
|
||||
Nenhum desses arquivos substitui variáveis de ambiente existentes. Você também pode definir variáveis inline na configuração:
|
||||
Nenhum dos arquivos substitui variáveis de ambiente já existentes. Você também pode definir variáveis de ambiente inline na configuração:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -608,7 +610,7 @@ Nenhum desses arquivos substitui variáveis de ambiente existentes. Você també
|
||||
```
|
||||
|
||||
<Accordion title="Importação de env do shell (opcional)">
|
||||
Se ativado e as chaves esperadas não estiverem definidas, o OpenClaw executa seu shell de login e importa apenas as chaves ausentes:
|
||||
Se ativado e as chaves esperadas não estiverem definidas, o OpenClaw executará seu shell de login e importará apenas as chaves ausentes:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -622,7 +624,7 @@ Equivalente em variável de ambiente: `OPENCLAW_LOAD_SHELL_ENV=1`
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Substituição de variáveis de ambiente em valores de configuração">
|
||||
Referencie variáveis de ambiente em qualquer valor string da configuração com `${VAR_NAME}`:
|
||||
Faça referência a variáveis de ambiente em qualquer valor de string da configuração com `${VAR_NAME}`:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -633,7 +635,7 @@ Equivalente em variável de ambiente: `OPENCLAW_LOAD_SHELL_ENV=1`
|
||||
|
||||
Regras:
|
||||
|
||||
- Apenas nomes em maiúsculas correspondem: `[A-Z_][A-Z0-9_]*`
|
||||
- Apenas nomes em maiúsculas são correspondidos: `[A-Z_][A-Z0-9_]*`
|
||||
- Variáveis ausentes/vazias geram erro no momento do carregamento
|
||||
- Escape com `$${VAR}` para saída literal
|
||||
- Funciona dentro de arquivos `$include`
|
||||
@ -641,7 +643,7 @@ Regras:
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Refs de segredo (env, file, exec)">
|
||||
<Accordion title="Referências secretas (env, file, exec)">
|
||||
Para campos que oferecem suporte a objetos SecretRef, você pode usar:
|
||||
|
||||
```json5
|
||||
@ -674,16 +676,16 @@ Regras:
|
||||
}
|
||||
```
|
||||
|
||||
Detalhes de SecretRef (incluindo `secrets.providers` para `env`/`file`/`exec`) estão em [Gerenciamento de segredos](/gateway/secrets).
|
||||
Caminhos de credenciais compatíveis estão listados em [Superfície de credenciais SecretRef](/reference/secretref-credential-surface).
|
||||
Os detalhes de SecretRef (incluindo `secrets.providers` para `env`/`file`/`exec`) estão em [Gerenciamento de segredos](/pt-BR/gateway/secrets).
|
||||
Os caminhos de credenciais com suporte estão listados em [Superfície de credenciais SecretRef](/pt-BR/reference/secretref-credential-surface).
|
||||
</Accordion>
|
||||
|
||||
Veja [Environment](/help/environment) para precedência e fontes completas.
|
||||
Consulte [Ambiente](/pt-BR/help/environment) para ver precedência e fontes completas.
|
||||
|
||||
## Referência completa
|
||||
|
||||
Para a referência completa campo por campo, veja **[Referência de configuração](/gateway/configuration-reference)**.
|
||||
Para a referência completa campo por campo, consulte **[Referência de configuração](/pt-BR/gateway/configuration-reference)**.
|
||||
|
||||
---
|
||||
|
||||
_Relacionado: [Exemplos de configuração](/gateway/configuration-examples) · [Referência de configuração](/gateway/configuration-reference) · [Doctor](/gateway/doctor)_
|
||||
_Relacionado: [Exemplos de configuração](/pt-BR/gateway/configuration-examples) · [Referência de configuração](/pt-BR/gateway/configuration-reference) · [Doctor](/pt-BR/gateway/doctor)_
|
||||
|
||||
368
docs/pt-BR/plugins/memory-wiki.md
Normal file
368
docs/pt-BR/plugins/memory-wiki.md
Normal file
@ -0,0 +1,368 @@
|
||||
---
|
||||
read_when:
|
||||
- Você quer conhecimento persistente além de simples notas MEMORY.md
|
||||
- Você está configurando o plugin empacotado memory-wiki
|
||||
- Você quer entender wiki_search, wiki_get ou o modo bridge
|
||||
summary: 'memory-wiki: cofre de conhecimento compilado com procedência, afirmações, painéis e modo bridge'
|
||||
title: Wiki de Memória
|
||||
x-i18n:
|
||||
generated_at: "2026-04-08T05:26:51Z"
|
||||
model: gpt-5.4
|
||||
provider: openai
|
||||
source_hash: b78dd6a4ef4451dae6b53197bf0c7c2a2ba846b08e4a3a93c1026366b1598d82
|
||||
source_path: plugins/memory-wiki.md
|
||||
workflow: 15
|
||||
---
|
||||
|
||||
# Wiki de Memória
|
||||
|
||||
`memory-wiki` é um plugin empacotado que transforma memória durável em um
|
||||
cofre de conhecimento compilado.
|
||||
|
||||
Ele **não** substitui o plugin de memória ativo. O plugin de memória ativo ainda
|
||||
é responsável por recuperação, promoção, indexação e dreaming. O `memory-wiki`
|
||||
fica ao lado dele e compila conhecimento durável em uma wiki navegável com
|
||||
páginas determinísticas, afirmações estruturadas, procedência, painéis e
|
||||
resumos legíveis por máquina.
|
||||
|
||||
Use-o quando você quiser que a memória se comporte mais como uma camada de
|
||||
conhecimento mantida e menos como uma pilha de arquivos Markdown.
|
||||
|
||||
## O que ele adiciona
|
||||
|
||||
- Um cofre de wiki dedicado com layout de página determinístico
|
||||
- Metadados estruturados de afirmações e evidências, não apenas prosa
|
||||
- Procedência, confiança, contradições e perguntas em aberto no nível da página
|
||||
- Resumos compilados para consumidores de agente/runtime
|
||||
- Ferramentas nativas da wiki para search/get/apply/lint
|
||||
- Modo bridge opcional que importa artefatos públicos do plugin de memória ativo
|
||||
- Modo de renderização opcional compatível com Obsidian e integração com a CLI
|
||||
|
||||
## Como ele se encaixa com a memória
|
||||
|
||||
Pense na divisão assim:
|
||||
|
||||
| Camada | Responsável por |
|
||||
| ------------------------------------------------------- | ------------------------------------------------------------------------------------------ |
|
||||
| Plugin de memória ativo (`memory-core`, QMD, Honcho, etc.) | Recuperação, busca semântica, promoção, dreaming, runtime de memória |
|
||||
| `memory-wiki` | Páginas de wiki compiladas, sínteses ricas em procedência, painéis, search/get/apply específicos da wiki |
|
||||
|
||||
Se o plugin de memória ativo expuser artefatos de recuperação compartilhados, o OpenClaw poderá buscar
|
||||
nas duas camadas em uma única passagem com `memory_search corpus=all`.
|
||||
|
||||
Quando você precisar de classificação específica da wiki, procedência ou acesso
|
||||
direto à página, use as ferramentas nativas da wiki.
|
||||
|
||||
## Modos de cofre
|
||||
|
||||
O `memory-wiki` oferece suporte a três modos de cofre:
|
||||
|
||||
### `isolated`
|
||||
|
||||
Cofre próprio, fontes próprias, sem dependência de `memory-core`.
|
||||
|
||||
Use isto quando quiser que a wiki seja seu próprio repositório de conhecimento curado.
|
||||
|
||||
### `bridge`
|
||||
|
||||
Lê artefatos públicos de memória e eventos de memória do plugin de memória ativo
|
||||
por meio de interfaces públicas do SDK de plugin.
|
||||
|
||||
Use isto quando quiser que a wiki compile e organize os artefatos exportados
|
||||
pelo plugin de memória sem acessar internamente partes privadas do plugin.
|
||||
|
||||
O modo bridge pode indexar:
|
||||
|
||||
- artefatos de memória exportados
|
||||
- relatórios de dream
|
||||
- notas diárias
|
||||
- arquivos raiz de memória
|
||||
- logs de eventos de memória
|
||||
|
||||
### `unsafe-local`
|
||||
|
||||
Saída de escape explícita na mesma máquina para caminhos privados locais.
|
||||
|
||||
Esse modo é intencionalmente experimental e não portátil. Use-o apenas quando
|
||||
você entender o limite de confiança e precisar especificamente de acesso ao
|
||||
sistema de arquivos local que o modo bridge não pode fornecer.
|
||||
|
||||
## Layout do cofre
|
||||
|
||||
O plugin inicializa um cofre assim:
|
||||
|
||||
```text
|
||||
<vault>/
|
||||
AGENTS.md
|
||||
WIKI.md
|
||||
index.md
|
||||
inbox.md
|
||||
entities/
|
||||
concepts/
|
||||
syntheses/
|
||||
sources/
|
||||
reports/
|
||||
_attachments/
|
||||
_views/
|
||||
.openclaw-wiki/
|
||||
```
|
||||
|
||||
O conteúdo gerenciado permanece dentro de blocos gerados. Blocos de notas
|
||||
humanas são preservados.
|
||||
|
||||
Os principais grupos de páginas são:
|
||||
|
||||
- `sources/` para matéria-prima importada e páginas sustentadas por bridge
|
||||
- `entities/` para coisas duráveis, pessoas, sistemas, projetos e objetos
|
||||
- `concepts/` para ideias, abstrações, padrões e políticas
|
||||
- `syntheses/` para resumos compilados e consolidações mantidas
|
||||
- `reports/` para painéis gerados
|
||||
|
||||
## Afirmações estruturadas e evidências
|
||||
|
||||
As páginas podem carregar `claims` no frontmatter estruturado, não apenas texto livre.
|
||||
|
||||
Cada afirmação pode incluir:
|
||||
|
||||
- `id`
|
||||
- `text`
|
||||
- `status`
|
||||
- `confidence`
|
||||
- `evidence[]`
|
||||
- `updatedAt`
|
||||
|
||||
Entradas de evidência podem incluir:
|
||||
|
||||
- `sourceId`
|
||||
- `path`
|
||||
- `lines`
|
||||
- `weight`
|
||||
- `note`
|
||||
- `updatedAt`
|
||||
|
||||
É isso que faz a wiki funcionar mais como uma camada de crenças do que como um
|
||||
depósito passivo de notas. As afirmações podem ser rastreadas, pontuadas,
|
||||
contestadas e resolvidas de volta às fontes.
|
||||
|
||||
## Pipeline de compilação
|
||||
|
||||
A etapa de compilação lê páginas da wiki, normaliza resumos e emite artefatos
|
||||
estáveis voltados para máquina em:
|
||||
|
||||
- `.openclaw-wiki/cache/agent-digest.json`
|
||||
- `.openclaw-wiki/cache/claims.jsonl`
|
||||
|
||||
Esses resumos existem para que agentes e código de runtime não precisem extrair
|
||||
informações de páginas Markdown.
|
||||
|
||||
A saída compilada também alimenta:
|
||||
|
||||
- indexação inicial da wiki para fluxos de search/get
|
||||
- busca de claim-id até a página proprietária
|
||||
- suplementos compactos de prompt
|
||||
- geração de relatórios/painéis
|
||||
|
||||
## Painéis e relatórios de integridade
|
||||
|
||||
Quando `render.createDashboards` está ativado, a compilação mantém painéis em
|
||||
`reports/`.
|
||||
|
||||
Os relatórios integrados incluem:
|
||||
|
||||
- `reports/open-questions.md`
|
||||
- `reports/contradictions.md`
|
||||
- `reports/low-confidence.md`
|
||||
- `reports/claim-health.md`
|
||||
- `reports/stale-pages.md`
|
||||
|
||||
Esses relatórios acompanham itens como:
|
||||
|
||||
- grupos de notas de contradição
|
||||
- grupos de afirmações concorrentes
|
||||
- afirmações sem evidência estruturada
|
||||
- páginas e afirmações com baixa confiança
|
||||
- desatualização ou atualização desconhecida
|
||||
- páginas com perguntas não resolvidas
|
||||
|
||||
## Busca e recuperação
|
||||
|
||||
O `memory-wiki` oferece suporte a dois backends de busca:
|
||||
|
||||
- `shared`: usa o fluxo de busca de memória compartilhada quando disponível
|
||||
- `local`: busca na wiki localmente
|
||||
|
||||
Ele também oferece suporte a três corpora:
|
||||
|
||||
- `wiki`
|
||||
- `memory`
|
||||
- `all`
|
||||
|
||||
Comportamento importante:
|
||||
|
||||
- `wiki_search` e `wiki_get` usam resumos compilados como primeira passagem quando possível
|
||||
- ids de afirmação podem ser resolvidos de volta à página proprietária
|
||||
- afirmações contestadas/desatualizadas/atuais influenciam a classificação
|
||||
- rótulos de procedência podem ser preservados nos resultados
|
||||
|
||||
Regra prática:
|
||||
|
||||
- use `memory_search corpus=all` para uma passagem ampla de recuperação
|
||||
- use `wiki_search` + `wiki_get` quando você se importa com classificação
|
||||
específica da wiki, procedência ou estrutura de crenças no nível da página
|
||||
|
||||
## Ferramentas do agente
|
||||
|
||||
O plugin registra estas ferramentas:
|
||||
|
||||
- `wiki_status`
|
||||
- `wiki_search`
|
||||
- `wiki_get`
|
||||
- `wiki_apply`
|
||||
- `wiki_lint`
|
||||
|
||||
O que elas fazem:
|
||||
|
||||
- `wiki_status`: modo de cofre atual, integridade, disponibilidade da CLI do Obsidian
|
||||
- `wiki_search`: busca em páginas da wiki e, quando configurado, em corpora de memória compartilhada
|
||||
- `wiki_get`: lê uma página da wiki por id/caminho ou usa o corpus de memória compartilhada como fallback
|
||||
- `wiki_apply`: mutações estreitas de síntese/metadados sem cirurgia livre na página
|
||||
- `wiki_lint`: verificações estruturais, lacunas de procedência, contradições, perguntas em aberto
|
||||
|
||||
O plugin também registra um suplemento de corpus de memória não exclusivo, para
|
||||
que `memory_search` e `memory_get` compartilhados possam alcançar a wiki quando o plugin de memória
|
||||
ativo oferecer suporte à seleção de corpus.
|
||||
|
||||
## Comportamento de prompt e contexto
|
||||
|
||||
Quando `context.includeCompiledDigestPrompt` está ativado, seções de prompt de memória
|
||||
anexam um snapshot compilado compacto de `agent-digest.json`.
|
||||
|
||||
Esse snapshot é intencionalmente pequeno e de alto sinal:
|
||||
|
||||
- apenas as principais páginas
|
||||
- apenas as principais afirmações
|
||||
- contagem de contradições
|
||||
- contagem de perguntas
|
||||
- qualificadores de confiança/atualização
|
||||
|
||||
Isso é opt-in porque altera o formato do prompt e é principalmente útil para
|
||||
mecanismos de contexto ou montagem legada de prompt que consumam explicitamente
|
||||
suplementos de memória.
|
||||
|
||||
## Configuração
|
||||
|
||||
Coloque a configuração em `plugins.entries.memory-wiki.config`:
|
||||
|
||||
```json5
|
||||
{
|
||||
plugins: {
|
||||
entries: {
|
||||
"memory-wiki": {
|
||||
enabled: true,
|
||||
config: {
|
||||
vaultMode: "isolated",
|
||||
vault: {
|
||||
path: "~/.openclaw/wiki/main",
|
||||
renderMode: "obsidian",
|
||||
},
|
||||
obsidian: {
|
||||
enabled: true,
|
||||
useOfficialCli: true,
|
||||
vaultName: "OpenClaw Wiki",
|
||||
openAfterWrites: false,
|
||||
},
|
||||
bridge: {
|
||||
enabled: false,
|
||||
readMemoryArtifacts: true,
|
||||
indexDreamReports: true,
|
||||
indexDailyNotes: true,
|
||||
indexMemoryRoot: true,
|
||||
followMemoryEvents: true,
|
||||
},
|
||||
ingest: {
|
||||
autoCompile: true,
|
||||
maxConcurrentJobs: 1,
|
||||
allowUrlIngest: true,
|
||||
},
|
||||
search: {
|
||||
backend: "shared",
|
||||
corpus: "wiki",
|
||||
},
|
||||
context: {
|
||||
includeCompiledDigestPrompt: false,
|
||||
},
|
||||
render: {
|
||||
preserveHumanBlocks: true,
|
||||
createBacklinks: true,
|
||||
createDashboards: true,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
Principais opções:
|
||||
|
||||
- `vaultMode`: `isolated`, `bridge`, `unsafe-local`
|
||||
- `vault.renderMode`: `native` ou `obsidian`
|
||||
- `bridge.readMemoryArtifacts`: importar artefatos públicos do plugin de memória ativo
|
||||
- `bridge.followMemoryEvents`: incluir logs de eventos no modo bridge
|
||||
- `search.backend`: `shared` ou `local`
|
||||
- `search.corpus`: `wiki`, `memory` ou `all`
|
||||
- `context.includeCompiledDigestPrompt`: anexar snapshot compacto do resumo às seções de prompt de memória
|
||||
- `render.createBacklinks`: gerar blocos relacionados determinísticos
|
||||
- `render.createDashboards`: gerar páginas de painel
|
||||
|
||||
## CLI
|
||||
|
||||
`memory-wiki` também expõe uma superfície de CLI de nível superior:
|
||||
|
||||
```bash
|
||||
openclaw wiki status
|
||||
openclaw wiki doctor
|
||||
openclaw wiki init
|
||||
openclaw wiki ingest ./notes/alpha.md
|
||||
openclaw wiki compile
|
||||
openclaw wiki lint
|
||||
openclaw wiki search "alpha"
|
||||
openclaw wiki get entity.alpha
|
||||
openclaw wiki apply synthesis "Alpha Summary" --body "..." --source-id source.alpha
|
||||
openclaw wiki bridge import
|
||||
openclaw wiki obsidian status
|
||||
```
|
||||
|
||||
Consulte [CLI: wiki](/cli/wiki) para a referência completa de comandos.
|
||||
|
||||
## Suporte ao Obsidian
|
||||
|
||||
Quando `vault.renderMode` é `obsidian`, o plugin grava Markdown compatível com
|
||||
Obsidian e pode opcionalmente usar a CLI oficial `obsidian`.
|
||||
|
||||
Os fluxos de trabalho compatíveis incluem:
|
||||
|
||||
- sondagem de status
|
||||
- busca no cofre
|
||||
- abrir uma página
|
||||
- invocar um comando do Obsidian
|
||||
- ir para a nota diária
|
||||
|
||||
Isso é opcional. A wiki ainda funciona em modo nativo sem Obsidian.
|
||||
|
||||
## Fluxo de trabalho recomendado
|
||||
|
||||
1. Mantenha seu plugin de memória ativo para recuperação/promoção/dreaming.
|
||||
2. Ative `memory-wiki`.
|
||||
3. Comece com o modo `isolated`, a menos que você queira explicitamente o modo bridge.
|
||||
4. Use `wiki_search` / `wiki_get` quando a procedência importar.
|
||||
5. Use `wiki_apply` para sínteses estreitas ou atualizações de metadados.
|
||||
6. Execute `wiki_lint` após alterações significativas.
|
||||
7. Ative painéis se quiser visibilidade de desatualização/contradições.
|
||||
|
||||
## Documentos relacionados
|
||||
|
||||
- [Visão geral da memória](/pt-BR/concepts/memory)
|
||||
- [CLI: memory](/cli/memory)
|
||||
- [CLI: wiki](/cli/wiki)
|
||||
- [Visão geral do SDK de plugin](/pt-BR/plugins/sdk-overview)
|
||||
@ -1,39 +1,39 @@
|
||||
---
|
||||
read_when:
|
||||
- Você quer modelos GLM no OpenClaw
|
||||
- Você precisa da convenção de nomenclatura dos modelos e da configuração
|
||||
- Você quer usar modelos GLM no OpenClaw
|
||||
- Você precisa da convenção de nomenclatura e da configuração dos modelos
|
||||
summary: Visão geral da família de modelos GLM + como usá-la no OpenClaw
|
||||
title: Modelos GLM
|
||||
x-i18n:
|
||||
generated_at: "2026-04-05T12:50:43Z"
|
||||
generated_at: "2026-04-08T05:26:43Z"
|
||||
model: gpt-5.4
|
||||
provider: openai
|
||||
source_hash: 59622edab5094d991987f9788fbf08b33325e737e7ff88632b0c3ac89412d4c7
|
||||
source_hash: 79a55acfa139847b4b85dbc09f1068cbd2febb1e49f984a23ea9e3b43bc910eb
|
||||
source_path: providers/glm.md
|
||||
workflow: 15
|
||||
---
|
||||
|
||||
# Modelos GLM
|
||||
|
||||
GLM é uma **família de modelos** (não uma empresa) disponível pela plataforma Z.AI. No OpenClaw, os modelos GLM
|
||||
são acessados por meio do provedor `zai` e de IDs de modelo como `zai/glm-5`.
|
||||
GLM é uma **família de modelos** (não uma empresa) disponível pela plataforma Z.AI. No OpenClaw, os
|
||||
modelos GLM são acessados pelo provedor `zai` e por IDs de modelo como `zai/glm-5`.
|
||||
|
||||
## Configuração da CLI
|
||||
|
||||
```bash
|
||||
# Generic API-key setup with endpoint auto-detection
|
||||
# Configuração genérica com chave de API e detecção automática do endpoint
|
||||
openclaw onboard --auth-choice zai-api-key
|
||||
|
||||
# Coding Plan Global, recommended for Coding Plan users
|
||||
# Coding Plan Global, recomendado para usuários do Coding Plan
|
||||
openclaw onboard --auth-choice zai-coding-global
|
||||
|
||||
# Coding Plan CN (China region), recommended for Coding Plan users
|
||||
# Coding Plan CN (região da China), recomendado para usuários do Coding Plan
|
||||
openclaw onboard --auth-choice zai-coding-cn
|
||||
|
||||
# General API
|
||||
# API geral
|
||||
openclaw onboard --auth-choice zai-global
|
||||
|
||||
# General API CN (China region)
|
||||
# API geral CN (região da China)
|
||||
openclaw onboard --auth-choice zai-cn
|
||||
```
|
||||
|
||||
@ -42,17 +42,17 @@ openclaw onboard --auth-choice zai-cn
|
||||
```json5
|
||||
{
|
||||
env: { ZAI_API_KEY: "sk-..." },
|
||||
agents: { defaults: { model: { primary: "zai/glm-5" } } },
|
||||
agents: { defaults: { model: { primary: "zai/glm-5.1" } } },
|
||||
}
|
||||
```
|
||||
|
||||
`zai-api-key` permite que o OpenClaw detecte o endpoint Z.AI correspondente a partir da chave e
|
||||
aplique automaticamente a URL base correta. Use as opções regionais explícitas quando
|
||||
quiser forçar uma superfície específica do Coding Plan ou da API geral.
|
||||
quiser forçar um Coding Plan específico ou uma superfície específica da API geral.
|
||||
|
||||
## Modelos GLM empacotados atuais
|
||||
## Modelos GLM atualmente incluídos no pacote
|
||||
|
||||
O OpenClaw atualmente inicializa o provedor empacotado `zai` com estas referências GLM:
|
||||
No momento, o OpenClaw predefine estes refs GLM no provedor `zai` incluído no pacote:
|
||||
|
||||
- `glm-5.1`
|
||||
- `glm-5`
|
||||
@ -71,5 +71,5 @@ O OpenClaw atualmente inicializa o provedor empacotado `zai` com estas referênc
|
||||
## Observações
|
||||
|
||||
- As versões e a disponibilidade do GLM podem mudar; consulte a documentação da Z.AI para ver as informações mais recentes.
|
||||
- A referência de modelo empacotado padrão é `zai/glm-5`.
|
||||
- Para detalhes do provedor, consulte [/providers/zai](/providers/zai).
|
||||
- O ref de modelo padrão incluído no pacote é `zai/glm-5.1`.
|
||||
- Para detalhes do provedor, consulte [/providers/zai](/pt-BR/providers/zai).
|
||||
|
||||
@ -1,14 +1,14 @@
|
||||
---
|
||||
read_when:
|
||||
- Você quer usar modelos Z.AI / GLM no OpenClaw
|
||||
- Você quer usar Z.AI / modelos GLM no OpenClaw
|
||||
- Você precisa de uma configuração simples com ZAI_API_KEY
|
||||
summary: Use o Z.AI (modelos GLM) com o OpenClaw
|
||||
title: Z.AI
|
||||
x-i18n:
|
||||
generated_at: "2026-04-05T12:51:59Z"
|
||||
generated_at: "2026-04-08T05:26:49Z"
|
||||
model: gpt-5.4
|
||||
provider: openai
|
||||
source_hash: 48006cdd580484f0c62e2877b27a6a68d7bc44795b3e97a28213d95182d9acf9
|
||||
source_hash: 66cbd9813ee28d202dcae34debab1b0cf9927793acb00743c1c62b48d9e381f9
|
||||
source_path: providers/zai.md
|
||||
workflow: 15
|
||||
---
|
||||
@ -19,10 +19,10 @@ Z.AI é a plataforma de API para modelos **GLM**. Ela fornece APIs REST para GLM
|
||||
para autenticação. Crie sua chave de API no console do Z.AI. O OpenClaw usa o provedor `zai`
|
||||
com uma chave de API do Z.AI.
|
||||
|
||||
## Setup na CLI
|
||||
## Configuração da CLI
|
||||
|
||||
```bash
|
||||
# Setup genérico com chave de API e autodetecção de endpoint
|
||||
# Configuração genérica com chave de API e detecção automática de endpoint
|
||||
openclaw onboard --auth-choice zai-api-key
|
||||
|
||||
# Coding Plan Global, recomendado para usuários do Coding Plan
|
||||
@ -43,12 +43,12 @@ openclaw onboard --auth-choice zai-cn
|
||||
```json5
|
||||
{
|
||||
env: { ZAI_API_KEY: "sk-..." },
|
||||
agents: { defaults: { model: { primary: "zai/glm-5" } } },
|
||||
agents: { defaults: { model: { primary: "zai/glm-5.1" } } },
|
||||
}
|
||||
```
|
||||
|
||||
`zai-api-key` permite que o OpenClaw detecte o endpoint Z.AI correspondente a partir da chave e
|
||||
aplique automaticamente a base URL correta. Use as opções regionais explícitas quando
|
||||
`zai-api-key` permite que o OpenClaw detecte o endpoint correspondente do Z.AI a partir da chave
|
||||
e aplique automaticamente a URL base correta. Use as opções regionais explícitas quando
|
||||
quiser forçar uma superfície específica do Coding Plan ou da API geral.
|
||||
|
||||
## Catálogo GLM integrado
|
||||
@ -72,11 +72,11 @@ Atualmente, o OpenClaw inicializa o provedor integrado `zai` com:
|
||||
## Observações
|
||||
|
||||
- Os modelos GLM estão disponíveis como `zai/<model>` (exemplo: `zai/glm-5`).
|
||||
- Referência de modelo padrão integrada: `zai/glm-5`
|
||||
- IDs desconhecidos `glm-5*` ainda são resolvidos de forma antecipada no caminho do provedor integrado
|
||||
sintetizando metadados pertencentes ao provedor a partir do template `glm-4.7` quando o id
|
||||
- Referência de modelo integrado padrão: `zai/glm-5.1`
|
||||
- IDs `glm-5*` desconhecidos ainda são resolvidos por encaminhamento no caminho do provedor integrado
|
||||
por meio da síntese de metadados pertencentes ao provedor a partir do modelo `glm-4.7` quando o id
|
||||
corresponde ao formato atual da família GLM-5.
|
||||
- `tool_stream` vem habilitado por padrão para streaming de chamadas de ferramenta do Z.AI. Defina
|
||||
- `tool_stream` vem ativado por padrão para streaming de chamadas de ferramenta do Z.AI. Defina
|
||||
`agents.defaults.models["zai/<model>"].params.tool_stream` como `false` para desativá-lo.
|
||||
- Veja [/providers/glm](/providers/glm) para a visão geral da família de modelos.
|
||||
- Veja [/providers/glm](/pt-BR/providers/glm) para a visão geral da família de modelos.
|
||||
- O Z.AI usa autenticação Bearer com sua chave de API.
|
||||
|
||||
@ -1,9 +1,9 @@
|
||||
---
|
||||
x-i18n:
|
||||
generated_at: "2026-04-08T02:18:23Z"
|
||||
generated_at: "2026-04-08T05:27:22Z"
|
||||
model: gpt-5.4
|
||||
provider: openai
|
||||
source_hash: 0e156cc8e2fe946a0423862f937754a7caa1fe7e6863b50a80bff49a1c86e1e8
|
||||
source_hash: 4a9066b2a939c5a9ba69141d75405f0e8097997b523164340e2f0e9a0d5060dd
|
||||
source_path: refactor/qa.md
|
||||
workflow: 15
|
||||
---
|
||||
@ -14,121 +14,126 @@ Status: migração fundamental concluída.
|
||||
|
||||
## Objetivo
|
||||
|
||||
Mover o QA do OpenClaw de um modelo de definição dividido para uma única fonte de verdade:
|
||||
Mover o QA do OpenClaw de um modelo de definição dividida para uma única fonte da verdade:
|
||||
|
||||
- metadados do cenário
|
||||
- prompts enviados ao modelo
|
||||
- setup e teardown
|
||||
- configuração e desmontagem
|
||||
- lógica do harness
|
||||
- asserções e critérios de sucesso
|
||||
- artefatos e dicas de relatório
|
||||
- artefatos e sugestões de relatório
|
||||
|
||||
O estado final desejado é um harness de QA genérico que carregue arquivos poderosos de definição de cenário em vez de codificar a maior parte do comportamento em TypeScript.
|
||||
O estado final desejado é um harness de QA genérico que carrega arquivos poderosos de definição de cenários em vez de codificar a maior parte do comportamento em TypeScript.
|
||||
|
||||
## Estado atual
|
||||
|
||||
A principal fonte de verdade agora vive em `qa/scenarios.md`.
|
||||
A fonte primária da verdade agora vive em `qa/scenarios/index.md` mais um arquivo por
|
||||
cenário em `qa/scenarios/*.md`.
|
||||
|
||||
Implementado:
|
||||
|
||||
- `qa/scenarios.md`
|
||||
- pacote canônico de QA
|
||||
- `qa/scenarios/index.md`
|
||||
- metadados canônicos do pacote de QA
|
||||
- identidade do operador
|
||||
- missão de kickoff
|
||||
- missão inicial
|
||||
- `qa/scenarios/*.md`
|
||||
- um arquivo Markdown por cenário
|
||||
- metadados do cenário
|
||||
- vínculos de handler
|
||||
- associações de handlers
|
||||
- configuração de execução específica do cenário
|
||||
- `extensions/qa-lab/src/scenario-catalog.ts`
|
||||
- parser de pacote Markdown + validação com zod
|
||||
- parser do pacote Markdown + validação com zod
|
||||
- `extensions/qa-lab/src/qa-agent-bootstrap.ts`
|
||||
- renderização de plano a partir do pacote Markdown
|
||||
- renderização do plano a partir do pacote Markdown
|
||||
- `extensions/qa-lab/src/qa-agent-workspace.ts`
|
||||
- semeia arquivos de compatibilidade gerados mais `QA_SCENARIOS.md`
|
||||
- gera arquivos de compatibilidade semeados mais `QA_SCENARIOS.md`
|
||||
- `extensions/qa-lab/src/suite.ts`
|
||||
- seleciona cenários executáveis por meio de vínculos de handler definidos em Markdown
|
||||
- Protocolo + UI do barramento de QA
|
||||
- seleciona cenários executáveis por meio de associações de handlers definidas em Markdown
|
||||
- protocolo do barramento de QA + UI
|
||||
- anexos inline genéricos para renderização de imagem/vídeo/áudio/arquivo
|
||||
|
||||
Superfícies divididas restantes:
|
||||
|
||||
- `extensions/qa-lab/src/suite.ts`
|
||||
- ainda controla a maior parte da lógica executável personalizada de handlers
|
||||
- ainda concentra a maior parte da lógica executável de handlers personalizados
|
||||
- `extensions/qa-lab/src/report.ts`
|
||||
- ainda deriva a estrutura do relatório a partir das saídas de runtime
|
||||
- ainda deriva a estrutura do relatório a partir das saídas em tempo de execução
|
||||
|
||||
Então a divisão da fonte de verdade foi corrigida, mas a execução ainda é majoritariamente apoiada por handlers, em vez de totalmente declarativa.
|
||||
Portanto, a divisão da fonte da verdade foi corrigida, mas a execução ainda é majoritariamente baseada em handlers, e não totalmente declarativa.
|
||||
|
||||
## Como é a superfície real do cenário
|
||||
## Como é a superfície real de cenários
|
||||
|
||||
Ler a suite atual mostra algumas classes distintas de cenário.
|
||||
Ao ler a suíte atual, é possível ver algumas classes distintas de cenários.
|
||||
|
||||
### Interação simples
|
||||
|
||||
- baseline de canal
|
||||
- baseline de DM
|
||||
- linha de base de canal
|
||||
- linha de base de MD
|
||||
- acompanhamento em thread
|
||||
- troca de modelo
|
||||
- continuação de aprovação
|
||||
- continuidade após aprovação
|
||||
- reação/edição/exclusão
|
||||
|
||||
### Mutação de configuração e runtime
|
||||
### Mutação de configuração e tempo de execução
|
||||
|
||||
- desativação de Skill por patch de configuração
|
||||
- despertar após reinício com aplicação de configuração
|
||||
- mudança de capacidade após reinício de configuração
|
||||
- verificação de drift do inventário de runtime
|
||||
- patch de configuração para desabilitar skill
|
||||
- aplicação de configuração com reativação após reinício
|
||||
- inversão de capacidade após reinício da configuração
|
||||
- verificação de divergência do inventário em tempo de execução
|
||||
|
||||
### Asserções de sistema de arquivos e repositório
|
||||
|
||||
- relatório de descoberta de código/docs
|
||||
- build de Lobster Invaders
|
||||
- relatório de descoberta de código/documentação
|
||||
- compilar Lobster Invaders
|
||||
- busca de artefato de imagem gerada
|
||||
|
||||
### Orquestração de memória
|
||||
|
||||
- recordação de memória
|
||||
- recuperação de memória
|
||||
- ferramentas de memória em contexto de canal
|
||||
- fallback de falha de memória
|
||||
- fallback em falha de memória
|
||||
- classificação de memória de sessão
|
||||
- isolamento de memória por thread
|
||||
- varredura de dreaming de memória
|
||||
- isolamento de memória de thread
|
||||
- varredura de sonho de memória
|
||||
|
||||
### Integração de ferramenta e plugin
|
||||
### Integração de ferramentas e plugins
|
||||
|
||||
- chamada de plugin-tools MCP
|
||||
- visibilidade de Skills
|
||||
- instalação hot de Skill
|
||||
- chamada de plugin-tools do MCP
|
||||
- visibilidade de skill
|
||||
- instalação dinâmica de skill
|
||||
- geração nativa de imagem
|
||||
- roundtrip de imagem
|
||||
- compreensão de imagem a partir de anexo
|
||||
|
||||
### Multiturno e múltiplos atores
|
||||
### Vários turnos e vários atores
|
||||
|
||||
- handoff de subagent
|
||||
- síntese de fanout de subagent
|
||||
- transferência para subagente
|
||||
- síntese com distribuição para subagentes
|
||||
- fluxos no estilo recuperação após reinício
|
||||
|
||||
Essas categorias importam porque elas orientam os requisitos da DSL. Uma lista simples de prompt + texto esperado não é suficiente.
|
||||
Essas categorias são importantes porque orientam os requisitos da DSL. Uma lista simples de prompt + texto esperado não é suficiente.
|
||||
|
||||
## Direção
|
||||
|
||||
### Fonte única de verdade
|
||||
### Fonte única da verdade
|
||||
|
||||
Use `qa/scenarios.md` como a fonte de verdade criada manualmente.
|
||||
Usar `qa/scenarios/index.md` mais `qa/scenarios/*.md` como a fonte da verdade
|
||||
autoral.
|
||||
|
||||
O pacote deve continuar sendo:
|
||||
O pacote deve permanecer:
|
||||
|
||||
- legível por humanos em revisão
|
||||
- parseável por máquina
|
||||
- legível para humanos em revisão
|
||||
- analisável por máquina
|
||||
- rico o suficiente para orientar:
|
||||
- execução da suite
|
||||
- execução da suíte
|
||||
- bootstrap do workspace de QA
|
||||
- metadados da UI do QA Lab
|
||||
- prompts de docs/discovery
|
||||
- geração de relatório
|
||||
- prompts de documentação/descoberta
|
||||
- geração de relatórios
|
||||
|
||||
### Formato de autoria preferido
|
||||
|
||||
Use Markdown como formato de nível superior, com YAML estruturado dentro dele.
|
||||
Usar Markdown como formato de nível superior, com YAML estruturado dentro dele.
|
||||
|
||||
Formato recomendado:
|
||||
|
||||
@ -137,13 +142,13 @@ Formato recomendado:
|
||||
- title
|
||||
- surface
|
||||
- tags
|
||||
- refs de docs
|
||||
- refs de documentação
|
||||
- refs de código
|
||||
- substituições de modelo/provider
|
||||
- substituições de modelo/provedor
|
||||
- pré-requisitos
|
||||
- seções em prosa
|
||||
- objetivo
|
||||
- observações
|
||||
- notas
|
||||
- dicas de depuração
|
||||
- blocos YAML delimitados
|
||||
- setup
|
||||
@ -153,13 +158,13 @@ Formato recomendado:
|
||||
|
||||
Isso oferece:
|
||||
|
||||
- melhor legibilidade em PRs do que JSON gigante
|
||||
- melhor legibilidade em PR do que um JSON gigante
|
||||
- contexto mais rico do que YAML puro
|
||||
- parsing estrito e validação com zod
|
||||
|
||||
JSON bruto é aceitável apenas como uma forma intermediária gerada.
|
||||
|
||||
## Formato proposto do arquivo de cenário
|
||||
## Formato proposto para arquivo de cenário
|
||||
|
||||
Exemplo:
|
||||
|
||||
@ -234,9 +239,9 @@ Verify generated media is reattached on the follow-up turn.
|
||||
|
||||
## Capacidades do runner que a DSL precisa cobrir
|
||||
|
||||
Com base na suite atual, o runner genérico precisa de mais do que execução de prompt.
|
||||
Com base na suíte atual, o runner genérico precisa de mais do que execução de prompt.
|
||||
|
||||
### Ações de ambiente e setup
|
||||
### Ações de ambiente e configuração
|
||||
|
||||
- `bus.reset`
|
||||
- `gateway.waitHealthy`
|
||||
@ -252,7 +257,7 @@ Com base na suite atual, o runner genérico precisa de mais do que execução de
|
||||
- `bus.injectInbound`
|
||||
- `bus.injectOutbound`
|
||||
|
||||
### Ações de configuração e runtime
|
||||
### Ações de configuração e tempo de execução
|
||||
|
||||
- `config.get`
|
||||
- `config.patch`
|
||||
@ -300,45 +305,45 @@ Com base na suite atual, o runner genérico precisa de mais do que execução de
|
||||
- `cron.managedPresent`
|
||||
- `artifact.exists`
|
||||
|
||||
## Variáveis e referências de artefato
|
||||
## Variáveis e referências a artefatos
|
||||
|
||||
A DSL precisa oferecer suporte a saídas salvas e referências posteriores.
|
||||
A DSL deve dar suporte a saídas salvas e referências posteriores.
|
||||
|
||||
Exemplos da suite atual:
|
||||
Exemplos da suíte atual:
|
||||
|
||||
- criar uma thread e depois reutilizar `threadId`
|
||||
- criar uma sessão e depois reutilizar `sessionKey`
|
||||
- gerar uma imagem e depois anexar o arquivo no próximo turno
|
||||
- gerar uma string de marcador de wake e depois verificar se ela aparece mais tarde
|
||||
- gerar uma imagem e depois anexar o arquivo no turno seguinte
|
||||
- gerar uma string de marcador de reativação e depois verificar que ela aparece mais tarde
|
||||
|
||||
Capacidades necessárias:
|
||||
|
||||
- `saveAs`
|
||||
- `${vars.name}`
|
||||
- `${artifacts.name}`
|
||||
- referências tipadas para caminhos, chaves de sessão, IDs de thread, marcadores, saídas de ferramenta
|
||||
- referências tipadas para caminhos, chaves de sessão, ids de thread, marcadores e saídas de ferramentas
|
||||
|
||||
Sem suporte a variáveis, o harness continuará vazando lógica de cenário de volta para o TypeScript.
|
||||
Sem suporte a variáveis, o harness continuará deixando a lógica de cenário vazar de volta para o TypeScript.
|
||||
|
||||
## O que deve continuar como escape hatch
|
||||
## O que deve permanecer como escape hatch
|
||||
|
||||
Um runner totalmente declarativo puro não é realista na fase 1.
|
||||
Um runner totalmente declarativo e puro não é realista na fase 1.
|
||||
|
||||
Alguns cenários são inerentemente pesados em orquestração:
|
||||
|
||||
- varredura de dreaming de memória
|
||||
- despertar após reinício com aplicação de configuração
|
||||
- mudança de capacidade após reinício de configuração
|
||||
- varredura de sonho de memória
|
||||
- aplicação de configuração com reativação após reinício
|
||||
- inversão de capacidade após reinício da configuração
|
||||
- resolução de artefato de imagem gerada por timestamp/caminho
|
||||
- avaliação de discovery-report
|
||||
- avaliação de relatório de descoberta
|
||||
|
||||
Por enquanto, estes devem usar handlers personalizados explícitos.
|
||||
Por enquanto, eles devem usar handlers personalizados explícitos.
|
||||
|
||||
Regra recomendada:
|
||||
|
||||
- 85-90% declarativo
|
||||
- etapas `customHandler` explícitas para o restante mais difícil
|
||||
- somente custom handlers nomeados e documentados
|
||||
- apenas handlers personalizados nomeados e documentados
|
||||
- nenhum código inline anônimo no arquivo de cenário
|
||||
|
||||
Isso mantém o mecanismo genérico limpo e ainda permite progresso.
|
||||
@ -347,13 +352,13 @@ Isso mantém o mecanismo genérico limpo e ainda permite progresso.
|
||||
|
||||
### Atual
|
||||
|
||||
O Markdown de cenário já é a fonte de verdade para:
|
||||
O Markdown de cenário já é a fonte da verdade para:
|
||||
|
||||
- execução da suite
|
||||
- execução da suíte
|
||||
- arquivos de bootstrap do workspace
|
||||
- catálogo de cenários da UI do QA Lab
|
||||
- metadados de relatório
|
||||
- prompts de discovery
|
||||
- metadados do relatório
|
||||
- prompts de descoberta
|
||||
|
||||
Compatibilidade gerada:
|
||||
|
||||
@ -367,67 +372,68 @@ Compatibilidade gerada:
|
||||
|
||||
Concluído.
|
||||
|
||||
- adicionado `qa/scenarios.md`
|
||||
- adicionado parser para conteúdo nomeado de pacote YAML em Markdown
|
||||
- adicionado `qa/scenarios/index.md`
|
||||
- cenários divididos em `qa/scenarios/*.md`
|
||||
- adicionado parser para conteúdo nomeado do pacote Markdown YAML
|
||||
- validado com zod
|
||||
- consumidores alterados para o pacote parseado
|
||||
- consumidores alterados para usar o pacote parseado
|
||||
- removidos `qa/seed-scenarios.json` e `qa/QA_KICKOFF_TASK.md` no nível do repositório
|
||||
|
||||
### Fase 2: mecanismo genérico
|
||||
|
||||
- dividir `extensions/qa-lab/src/suite.ts` em:
|
||||
- loader
|
||||
- engine
|
||||
- mecanismo
|
||||
- registro de ações
|
||||
- registro de asserções
|
||||
- custom handlers
|
||||
- manter funções auxiliares existentes como operações do engine
|
||||
- handlers personalizados
|
||||
- manter as funções auxiliares existentes como operações do mecanismo
|
||||
|
||||
Entregável:
|
||||
|
||||
- engine executa cenários declarativos simples
|
||||
- o mecanismo executa cenários declarativos simples
|
||||
|
||||
Começar com cenários que são majoritariamente prompt + espera + asserção:
|
||||
Começar com cenários que são principalmente prompt + espera + asserção:
|
||||
|
||||
- acompanhamento em thread
|
||||
- compreensão de imagem a partir de anexo
|
||||
- visibilidade e invocação de Skill
|
||||
- baseline de canal
|
||||
- visibilidade e invocação de skill
|
||||
- linha de base de canal
|
||||
|
||||
Entregável:
|
||||
|
||||
- primeiros cenários reais definidos em Markdown sendo entregues pelo mecanismo genérico
|
||||
- primeiros cenários reais definidos em Markdown enviados pelo mecanismo genérico
|
||||
|
||||
### Fase 4: migrar cenários intermediários
|
||||
|
||||
- roundtrip de geração de imagem
|
||||
- ferramentas de memória em contexto de canal
|
||||
- classificação de memória de sessão
|
||||
- handoff de subagent
|
||||
- síntese de fanout de subagent
|
||||
- transferência para subagente
|
||||
- síntese com distribuição para subagentes
|
||||
|
||||
Entregável:
|
||||
|
||||
- variáveis, artefatos, asserções de ferramenta e asserções de request log comprovadas
|
||||
- variáveis, artefatos, asserções de ferramenta e asserções de log de requisição comprovados
|
||||
|
||||
### Fase 5: manter cenários difíceis em custom handlers
|
||||
### Fase 5: manter cenários difíceis em handlers personalizados
|
||||
|
||||
- varredura de dreaming de memória
|
||||
- despertar após reinício com aplicação de configuração
|
||||
- mudança de capacidade após reinício de configuração
|
||||
- inventário de runtime
|
||||
- varredura de sonho de memória
|
||||
- aplicação de configuração com reativação após reinício
|
||||
- inversão de capacidade após reinício da configuração
|
||||
- divergência do inventário em tempo de execução
|
||||
|
||||
Entregável:
|
||||
|
||||
- mesmo formato de autoria, mas com blocos explícitos de etapa personalizada onde necessário
|
||||
- mesmo formato de autoria, mas com blocos de etapas personalizadas explícitas quando necessário
|
||||
|
||||
### Fase 6: excluir mapa de cenários hardcoded
|
||||
### Fase 6: excluir o mapa de cenários codificado
|
||||
|
||||
Quando a cobertura do pacote estiver boa o suficiente:
|
||||
|
||||
- remover a maior parte da lógica condicional específica de cenário em TypeScript de `extensions/qa-lab/src/suite.ts`
|
||||
- remover a maior parte da ramificação TypeScript específica de cenários de `extensions/qa-lab/src/suite.ts`
|
||||
|
||||
## Fake Slack / suporte a rich media
|
||||
## Suporte a Slack falso / rich media
|
||||
|
||||
O barramento de QA atual é focado em texto.
|
||||
|
||||
@ -439,7 +445,7 @@ Arquivos relevantes:
|
||||
- `extensions/qa-lab/src/bus-server.ts`
|
||||
- `extensions/qa-lab/web/src/ui-render.ts`
|
||||
|
||||
Hoje o barramento de QA oferece suporte a:
|
||||
Hoje, o barramento de QA oferece suporte a:
|
||||
|
||||
- texto
|
||||
- reações
|
||||
@ -449,7 +455,7 @@ Ele ainda não modela anexos de mídia inline.
|
||||
|
||||
### Contrato de transporte necessário
|
||||
|
||||
Adicione um modelo genérico de anexo do barramento de QA:
|
||||
Adicionar um modelo genérico de anexo do barramento de QA:
|
||||
|
||||
```ts
|
||||
type QaBusAttachment = {
|
||||
@ -468,7 +474,7 @@ type QaBusAttachment = {
|
||||
};
|
||||
```
|
||||
|
||||
Depois adicione `attachments?: QaBusAttachment[]` a:
|
||||
Depois adicionar `attachments?: QaBusAttachment[]` a:
|
||||
|
||||
- `QaBusMessage`
|
||||
- `QaBusInboundMessageInput`
|
||||
@ -476,34 +482,34 @@ Depois adicione `attachments?: QaBusAttachment[]` a:
|
||||
|
||||
### Por que genérico primeiro
|
||||
|
||||
Não construa um modelo de mídia exclusivo para Slack.
|
||||
Não construir um modelo de mídia exclusivo para Slack.
|
||||
|
||||
Em vez disso:
|
||||
|
||||
- um modelo de transporte de QA genérico
|
||||
- múltiplos renderizadores sobre ele
|
||||
- um modelo genérico de transporte de QA
|
||||
- vários renderizadores sobre ele
|
||||
- chat atual do QA Lab
|
||||
- futuro fake Slack web
|
||||
- quaisquer outras visualizações de transporte simulado
|
||||
- futuro web de Slack falso
|
||||
- qualquer outra visualização de transporte falsa
|
||||
|
||||
Isso evita lógica duplicada e permite que cenários de mídia permaneçam agnósticos ao transporte.
|
||||
|
||||
### Trabalho de UI necessário
|
||||
|
||||
Atualize a UI de QA para renderizar:
|
||||
Atualizar a UI de QA para renderizar:
|
||||
|
||||
- prévia de imagem inline
|
||||
- pré-visualização de imagem inline
|
||||
- player de áudio inline
|
||||
- player de vídeo inline
|
||||
- chip de anexo de arquivo
|
||||
|
||||
A UI atual já consegue renderizar threads e reações, então a renderização de anexos deve ser adicionada sobre o mesmo modelo de card de mensagem.
|
||||
A UI atual já consegue renderizar threads e reações, então a renderização de anexos deve ser adicionada sobre o mesmo modelo de cartão de mensagem.
|
||||
|
||||
### Trabalho de cenário viabilizado pelo transporte de mídia
|
||||
### Trabalho de cenário habilitado pelo transporte de mídia
|
||||
|
||||
Quando os anexos passarem pelo barramento de QA, poderemos adicionar cenários mais ricos de chat simulado:
|
||||
Quando os anexos passarem pelo barramento de QA, poderemos adicionar cenários mais ricos de chat falso:
|
||||
|
||||
- resposta inline com imagem no fake Slack
|
||||
- resposta com imagem inline em Slack falso
|
||||
- compreensão de anexo de áudio
|
||||
- compreensão de anexo de vídeo
|
||||
- ordenação mista de anexos
|
||||
@ -514,7 +520,7 @@ Quando os anexos passarem pelo barramento de QA, poderemos adicionar cenários m
|
||||
O próximo bloco de implementação deve ser:
|
||||
|
||||
1. adicionar loader de cenário em Markdown + schema zod
|
||||
2. gerar o catálogo atual a partir do Markdown
|
||||
2. gerar o catálogo atual a partir de Markdown
|
||||
3. migrar primeiro alguns cenários simples
|
||||
4. adicionar suporte genérico a anexos no barramento de QA
|
||||
5. renderizar imagem inline na UI de QA
|
||||
@ -522,13 +528,13 @@ O próximo bloco de implementação deve ser:
|
||||
|
||||
Este é o menor caminho que comprova ambos os objetivos:
|
||||
|
||||
- QA genérico definido em Markdown
|
||||
- superfícies de mensagens simuladas mais ricas
|
||||
- QA genérico definido por Markdown
|
||||
- superfícies de mensagens falsas mais ricas
|
||||
|
||||
## Questões em aberto
|
||||
## Perguntas em aberto
|
||||
|
||||
- se arquivos de cenário devem permitir templates de prompt em Markdown embutidos com interpolação de variáveis
|
||||
- se os arquivos de cenário devem permitir templates de prompt em Markdown embutidos com interpolação de variáveis
|
||||
- se setup/cleanup devem ser seções nomeadas ou apenas listas ordenadas de ações
|
||||
- se referências de artefato devem ser fortemente tipadas no schema ou baseadas em string
|
||||
- se custom handlers devem viver em um único registro ou em registros por superfície
|
||||
- se o arquivo gerado de compatibilidade em JSON deve continuar versionado durante a migração
|
||||
- se referências a artefatos devem ser fortemente tipadas no schema ou baseadas em string
|
||||
- se handlers personalizados devem viver em um único registro ou em registros por superfície
|
||||
- se o arquivo de compatibilidade JSON gerado deve permanecer versionado durante a migração
|
||||
|
||||
@ -2,34 +2,34 @@
|
||||
read_when:
|
||||
- Usar ou configurar comandos de chat
|
||||
- Depurar roteamento de comandos ou permissões
|
||||
summary: 'Comandos slash: texto vs nativo, configuração e comandos compatíveis'
|
||||
title: Comandos slash
|
||||
summary: 'Comandos slash: texto vs. nativo, configuração e comandos compatíveis'
|
||||
title: Comandos Slash
|
||||
x-i18n:
|
||||
generated_at: "2026-04-06T03:13:38Z"
|
||||
generated_at: "2026-04-08T05:27:39Z"
|
||||
model: gpt-5.4
|
||||
provider: openai
|
||||
source_hash: 417e35b9ddd87f25f6c019111b55b741046ea11039dde89210948185ced5696d
|
||||
source_hash: 4a7ee7f1a8012058279b9e632889b291d4e659e4ec81209ca8978afbb9ad4b96
|
||||
source_path: tools/slash-commands.md
|
||||
workflow: 15
|
||||
---
|
||||
|
||||
# Comandos slash
|
||||
|
||||
Os comandos são tratados pelo Gateway. A maioria dos comandos deve ser enviada como uma mensagem **independente** que comece com `/`.
|
||||
O comando de chat bash somente-host usa `! <cmd>` (com `/bash <cmd>` como alias).
|
||||
Os comandos são tratados pelo Gateway. A maioria dos comandos deve ser enviada como uma mensagem **autônoma** que começa com `/`.
|
||||
O comando de chat bash somente no host usa `! <cmd>` (com `/bash <cmd>` como alias).
|
||||
|
||||
Existem dois sistemas relacionados:
|
||||
Há dois sistemas relacionados:
|
||||
|
||||
- **Comandos**: mensagens independentes `/...`.
|
||||
- **Comandos**: mensagens autônomas `/...`.
|
||||
- **Diretivas**: `/think`, `/fast`, `/verbose`, `/reasoning`, `/elevated`, `/exec`, `/model`, `/queue`.
|
||||
- As diretivas são removidas da mensagem antes que o modelo a veja.
|
||||
- Em mensagens normais de chat (não apenas de diretiva), elas são tratadas como “dicas inline” e **não** persistem configurações de sessão.
|
||||
- Em mensagens apenas de diretiva (a mensagem contém apenas diretivas), elas persistem na sessão e respondem com uma confirmação.
|
||||
- As diretivas só são aplicadas para **remetentes autorizados**. Se `commands.allowFrom` estiver definido, essa será a única
|
||||
allowlist usada; caso contrário, a autorização vem de allowlists/pareamento do canal mais `commands.useAccessGroups`.
|
||||
- Em mensagens normais de chat (não apenas com diretivas), elas são tratadas como “dicas inline” e **não** persistem as configurações da sessão.
|
||||
- Em mensagens somente com diretivas (a mensagem contém apenas diretivas), elas persistem na sessão e respondem com uma confirmação.
|
||||
- As diretivas só são aplicadas para **remetentes autorizados**. Se `commands.allowFrom` estiver definido, ele será a única
|
||||
lista de permissões usada; caso contrário, a autorização virá das listas de permissões/emparelhamento do canal mais `commands.useAccessGroups`.
|
||||
Remetentes não autorizados veem as diretivas tratadas como texto simples.
|
||||
|
||||
Também há alguns **atalhos inline** (apenas para remetentes em allowlist/autorizados): `/help`, `/commands`, `/status`, `/whoami` (`/id`).
|
||||
Há também alguns **atalhos inline** (apenas remetentes na allowlist/autorizados): `/help`, `/commands`, `/status`, `/whoami` (`/id`).
|
||||
Eles são executados imediatamente, são removidos antes que o modelo veja a mensagem, e o texto restante continua pelo fluxo normal.
|
||||
|
||||
## Configuração
|
||||
@ -46,7 +46,10 @@ Eles são executados imediatamente, são removidos antes que o modelo veja a men
|
||||
mcp: false,
|
||||
plugins: false,
|
||||
debug: false,
|
||||
restart: false,
|
||||
restart: true,
|
||||
ownerAllowFrom: ["discord:123456789012345678"],
|
||||
ownerDisplay: "raw",
|
||||
ownerDisplaySecret: "${OWNER_ID_HASH_SECRET}",
|
||||
allowFrom: {
|
||||
"*": ["user1"],
|
||||
discord: ["user:123"],
|
||||
@ -56,144 +59,179 @@ Eles são executados imediatamente, são removidos antes que o modelo veja a men
|
||||
}
|
||||
```
|
||||
|
||||
- `commands.text` (padrão `true`) habilita a análise de `/...` em mensagens de chat.
|
||||
- Em superfícies sem comandos nativos (WhatsApp/WebChat/Signal/iMessage/Google Chat/Microsoft Teams), comandos de texto ainda funcionam mesmo se você definir isso como `false`.
|
||||
- `commands.text` (padrão `true`) ativa a análise de `/...` em mensagens de chat.
|
||||
- Em superfícies sem comandos nativos (WhatsApp/WebChat/Signal/iMessage/Google Chat/Microsoft Teams), os comandos de texto ainda funcionam mesmo se você definir isso como `false`.
|
||||
- `commands.native` (padrão `"auto"`) registra comandos nativos.
|
||||
- Auto: ativado para Discord/Telegram; desativado para Slack (até você adicionar slash commands); ignorado para providers sem suporte nativo.
|
||||
- Defina `channels.discord.commands.native`, `channels.telegram.commands.native` ou `channels.slack.commands.native` para sobrescrever por provider (bool ou `"auto"`).
|
||||
- `false` limpa comandos previamente registrados no Discord/Telegram na inicialização. Comandos do Slack são gerenciados no app Slack e não são removidos automaticamente.
|
||||
- `commands.nativeSkills` (padrão `"auto"`) registra comandos nativos de **skill** quando suportado.
|
||||
- Auto: ativado para Discord/Telegram; desativado para Slack (o Slack exige criar um slash command por skill).
|
||||
- Defina `channels.discord.commands.nativeSkills`, `channels.telegram.commands.nativeSkills` ou `channels.slack.commands.nativeSkills` para sobrescrever por provider (bool ou `"auto"`).
|
||||
- `commands.bash` (padrão `false`) habilita `! <cmd>` para executar comandos de shell no host (`/bash <cmd>` é um alias; exige allowlists `tools.elevated`).
|
||||
- `commands.bashForegroundMs` (padrão `2000`) controla quanto tempo o bash espera antes de alternar para modo em segundo plano (`0` envia imediatamente para segundo plano).
|
||||
- `commands.config` (padrão `false`) habilita `/config` (lê/grava `openclaw.json`).
|
||||
- `commands.mcp` (padrão `false`) habilita `/mcp` (lê/grava a configuração MCP gerenciada pelo OpenClaw em `mcp.servers`).
|
||||
- `commands.plugins` (padrão `false`) habilita `/plugins` (descoberta/status de plugins mais controles de instalar + habilitar/desabilitar).
|
||||
- `commands.debug` (padrão `false`) habilita `/debug` (sobrescritas apenas em runtime).
|
||||
- `commands.allowFrom` (opcional) define uma allowlist por provider para autorização de comandos. Quando configurado, ela é a
|
||||
única fonte de autorização para comandos e diretivas (`commands.useAccessGroups` e allowlists/pareamento do canal
|
||||
são ignorados). Use `"*"` para um padrão global; chaves específicas do provider o sobrescrevem.
|
||||
- Auto: ativado para Discord/Telegram; desativado para Slack (até você adicionar comandos slash); ignorado para provedores sem suporte nativo.
|
||||
- Defina `channels.discord.commands.native`, `channels.telegram.commands.native` ou `channels.slack.commands.native` para sobrescrever por provedor (bool ou `"auto"`).
|
||||
- `false` limpa comandos registrados anteriormente no Discord/Telegram na inicialização. Os comandos do Slack são gerenciados no app do Slack e não são removidos automaticamente.
|
||||
- `commands.nativeSkills` (padrão `"auto"`) registra comandos nativos de **skill** quando compatível.
|
||||
- Auto: ativado para Discord/Telegram; desativado para Slack (o Slack exige a criação de um comando slash por skill).
|
||||
- Defina `channels.discord.commands.nativeSkills`, `channels.telegram.commands.nativeSkills` ou `channels.slack.commands.nativeSkills` para sobrescrever por provedor (bool ou `"auto"`).
|
||||
- `commands.bash` (padrão `false`) ativa `! <cmd>` para executar comandos do shell no host (`/bash <cmd>` é um alias; exige allowlists de `tools.elevated`).
|
||||
- `commands.bashForegroundMs` (padrão `2000`) controla por quanto tempo o bash espera antes de alternar para o modo em segundo plano (`0` coloca em segundo plano imediatamente).
|
||||
- `commands.config` (padrão `false`) ativa `/config` (lê/grava `openclaw.json`).
|
||||
- `commands.mcp` (padrão `false`) ativa `/mcp` (lê/grava a configuração de MCP gerenciada pelo OpenClaw em `mcp.servers`).
|
||||
- `commands.plugins` (padrão `false`) ativa `/plugins` (descoberta/status de plugins mais controles de instalação + ativação/desativação).
|
||||
- `commands.debug` (padrão `false`) ativa `/debug` (sobrescritas somente em tempo de execução).
|
||||
- `commands.restart` (padrão `true`) ativa `/restart` mais ações de ferramenta de reinicialização do gateway.
|
||||
- `commands.ownerAllowFrom` (opcional) define a allowlist explícita do proprietário para superfícies de comando/ferramenta somente do proprietário. Isso é separado de `commands.allowFrom`.
|
||||
- `commands.ownerDisplay` controla como os ids do proprietário aparecem no prompt do sistema: `raw` ou `hash`.
|
||||
- `commands.ownerDisplaySecret` opcionalmente define o segredo HMAC usado quando `commands.ownerDisplay="hash"`.
|
||||
- `commands.allowFrom` (opcional) define uma allowlist por provedor para autorização de comandos. Quando configurado, ela é a
|
||||
única fonte de autorização para comandos e diretivas (allowlists/emparelhamento do canal e `commands.useAccessGroups`
|
||||
são ignorados). Use `"*"` para um padrão global; chaves específicas de provedor têm prioridade.
|
||||
- `commands.useAccessGroups` (padrão `true`) aplica allowlists/políticas a comandos quando `commands.allowFrom` não está definido.
|
||||
|
||||
## Lista de comandos
|
||||
|
||||
Texto + nativo (quando habilitado):
|
||||
Fonte da verdade atual:
|
||||
|
||||
- `/help`
|
||||
- `/commands`
|
||||
- `/tools [compact|verbose]` (mostra o que o agente atual pode usar agora; `verbose` adiciona descrições)
|
||||
- `/skill <name> [input]` (executa uma skill pelo nome)
|
||||
- `/status` (mostra o status atual; inclui uso/cota do provider para o provider de modelo atual quando disponível)
|
||||
- `/tasks` (lista tarefas em segundo plano para a sessão atual; mostra detalhes de tarefas ativas e recentes com contagens locais de fallback por agente)
|
||||
- `/allowlist` (listar/adicionar/remover entradas de allowlist)
|
||||
- `/approve <id> <decision>` (resolve prompts de aprovação do exec; use a mensagem de aprovação pendente para ver as decisões disponíveis)
|
||||
- `/context [list|detail|json]` (explica “contexto”; `detail` mostra tamanho por arquivo + por ferramenta + por skill + do prompt de sistema)
|
||||
- `/btw <question>` (faz uma pergunta lateral efêmera sobre a sessão atual sem alterar o contexto futuro da sessão; consulte [/tools/btw](/pt-BR/tools/btw))
|
||||
- `/export-session [path]` (alias: `/export`) (exporta a sessão atual para HTML com o prompt completo de sistema)
|
||||
- `/whoami` (mostra seu id de remetente; alias: `/id`)
|
||||
- `/session idle <duration|off>` (gerencia auto-unfocus por inatividade para bindings de thread focadas)
|
||||
- `/session max-age <duration|off>` (gerencia auto-unfocus de idade máxima rígida para bindings de thread focadas)
|
||||
- `/subagents list|kill|log|info|send|steer|spawn` (inspeciona, controla ou cria execuções de subagentes para a sessão atual)
|
||||
- `/acp spawn|cancel|steer|close|status|set-mode|set|cwd|permissions|timeout|model|reset-options|doctor|install|sessions` (inspeciona e controla sessões de runtime ACP)
|
||||
- `/agents` (lista agentes vinculados à thread para esta sessão)
|
||||
- `/focus <target>` (Discord: vincula esta thread, ou uma nova thread, a um destino de sessão/subagente)
|
||||
- `/unfocus` (Discord: remove o binding atual da thread)
|
||||
- `/kill <id|#|all>` (aborta imediatamente um ou todos os subagentes em execução desta sessão; sem mensagem de confirmação)
|
||||
- `/steer <id|#> <message>` (direciona um subagente em execução imediatamente: durante a execução quando possível, caso contrário aborta o trabalho atual e reinicia com a mensagem de direção)
|
||||
- `/tell <id|#> <message>` (alias de `/steer`)
|
||||
- `/config show|get|set|unset` (persiste a configuração em disco, somente proprietário; exige `commands.config: true`)
|
||||
- `/mcp show|get|set|unset` (gerencia a configuração do servidor MCP do OpenClaw, somente proprietário; exige `commands.mcp: true`)
|
||||
- `/plugins list|show|get|install|enable|disable` (inspeciona plugins descobertos, instala novos e alterna ativação; somente proprietário para gravações; exige `commands.plugins: true`)
|
||||
- `/plugin` é um alias de `/plugins`.
|
||||
- `/plugin install <spec>` aceita as mesmas specs de plugin de `openclaw plugins install`: caminho/arquivo local, pacote npm ou `clawhub:<pkg>`.
|
||||
- Gravações de habilitar/desabilitar ainda respondem com uma dica de restart. Em um gateway em primeiro plano monitorado, o OpenClaw pode executar esse restart automaticamente logo após a gravação.
|
||||
- `/debug show|set|unset|reset` (sobrescritas em runtime, somente proprietário; exige `commands.debug: true`)
|
||||
- `/usage off|tokens|full|cost` (rodapé de uso por resposta ou resumo de custo local)
|
||||
- `/tts off|always|inbound|tagged|status|provider|limit|summary|audio` (controla TTS; consulte [/tts](/pt-BR/tools/tts))
|
||||
- Discord: o comando nativo é `/voice` (o Discord reserva `/tts`); o texto `/tts` ainda funciona.
|
||||
- `/stop`
|
||||
- `/restart`
|
||||
- `/dock-telegram` (alias: `/dock_telegram`) (muda as respostas para Telegram)
|
||||
- `/dock-discord` (alias: `/dock_discord`) (muda as respostas para Discord)
|
||||
- `/dock-slack` (alias: `/dock_slack`) (muda as respostas para Slack)
|
||||
- `/activation mention|always` (somente grupos)
|
||||
- `/send on|off|inherit` (somente proprietário)
|
||||
- `/reset` ou `/new [model]` (dica opcional de modelo; o restante é repassado)
|
||||
- `/think <off|minimal|low|medium|high|xhigh>` (escolhas dinâmicas por modelo/provider; aliases: `/thinking`, `/t`)
|
||||
- `/fast status|on|off` (omitir o argumento mostra o estado efetivo atual do fast-mode)
|
||||
- `/verbose on|full|off` (alias: `/v`)
|
||||
- `/reasoning on|off|stream` (alias: `/reason`; quando ativado, envia uma mensagem separada com o prefixo `Reasoning:`; `stream` = somente rascunho no Telegram)
|
||||
- `/elevated on|off|ask|full` (alias: `/elev`; `full` ignora aprovações do exec)
|
||||
- `/exec host=<auto|sandbox|gateway|node> security=<deny|allowlist|full> ask=<off|on-miss|always> node=<id>` (envie `/exec` para ver o valor atual)
|
||||
- `/model <name>` (alias: `/models`; ou `/<alias>` de `agents.defaults.models.*.alias`)
|
||||
- `/queue <mode>` (mais opções como `debounce:2s cap:25 drop:summarize`; envie `/queue` para ver as configurações atuais)
|
||||
- `/bash <command>` (somente-host; alias de `! <command>`; exige `commands.bash: true` + allowlists `tools.elevated`)
|
||||
- `/dreaming [on|off|status|help]` (ativa/desativa dreaming global ou mostra status; consulte [Dreaming](/concepts/dreaming))
|
||||
- os built-ins do core vêm de `src/auto-reply/commands-registry.shared.ts`
|
||||
- os comandos dock gerados vêm de `src/auto-reply/commands-registry.data.ts`
|
||||
- os comandos de plugin vêm de chamadas `registerCommand()` do plugin
|
||||
- a disponibilidade real no seu gateway ainda depende de flags de configuração, da superfície do canal e de plugins instalados/ativados
|
||||
|
||||
Somente texto:
|
||||
### Comandos built-in do core
|
||||
|
||||
- `/compact [instructions]` (consulte [/concepts/compaction](/pt-BR/concepts/compaction))
|
||||
- `! <command>` (somente-host; um por vez; use `!poll` + `!stop` para jobs de longa duração)
|
||||
- `!poll` (verifica saída / status; aceita `sessionId` opcional; `/bash poll` também funciona)
|
||||
- `!stop` (interrompe o job bash em execução; aceita `sessionId` opcional; `/bash stop` também funciona)
|
||||
Comandos built-in disponíveis hoje:
|
||||
|
||||
- `/new [model]` inicia uma nova sessão; `/reset` é o alias de redefinição.
|
||||
- `/compact [instructions]` compacta o contexto da sessão. Veja [/concepts/compaction](/pt-BR/concepts/compaction).
|
||||
- `/stop` aborta a execução atual.
|
||||
- `/session idle <duration|off>` e `/session max-age <duration|off>` gerenciam a expiração do vínculo com a thread.
|
||||
- `/think <off|minimal|low|medium|high|xhigh>` define o nível de raciocínio. Aliases: `/thinking`, `/t`.
|
||||
- `/verbose on|off|full` alterna a saída detalhada. Alias: `/v`.
|
||||
- `/fast [status|on|off]` mostra ou define o modo rápido.
|
||||
- `/reasoning [on|off|stream]` alterna a visibilidade do raciocínio. Alias: `/reason`.
|
||||
- `/elevated [on|off|ask|full]` alterna o modo elevado. Alias: `/elev`.
|
||||
- `/exec host=<auto|sandbox|gateway|node> security=<deny|allowlist|full> ask=<off|on-miss|always> node=<id>` mostra ou define os padrões de execução.
|
||||
- `/model [name|#|status]` mostra ou define o modelo.
|
||||
- `/models [provider] [page] [limit=<n>|size=<n>|all]` lista provedores ou modelos de um provedor.
|
||||
- `/queue <mode>` gerencia o comportamento da fila (`steer`, `interrupt`, `followup`, `collect`, `steer-backlog`) mais opções como `debounce:2s cap:25 drop:summarize`.
|
||||
- `/help` mostra o resumo curto de ajuda.
|
||||
- `/commands` mostra o catálogo gerado de comandos.
|
||||
- `/tools [compact|verbose]` mostra o que o agente atual pode usar neste momento.
|
||||
- `/status` mostra o status em tempo de execução, incluindo uso/cota do provedor quando disponível.
|
||||
- `/tasks` lista tarefas em segundo plano ativas/recentes da sessão atual.
|
||||
- `/context [list|detail|json]` explica como o contexto é montado.
|
||||
- `/export-session [path]` exporta a sessão atual para HTML. Alias: `/export`.
|
||||
- `/whoami` mostra seu id de remetente. Alias: `/id`.
|
||||
- `/skill <name> [input]` executa uma skill pelo nome.
|
||||
- `/allowlist [list|add|remove] ...` gerencia entradas da allowlist. Somente texto.
|
||||
- `/approve <id> <decision>` resolve prompts de aprovação de exec.
|
||||
- `/btw <question>` faz uma pergunta paralela sem alterar o contexto futuro da sessão. Veja [/tools/btw](/pt-BR/tools/btw).
|
||||
- `/subagents list|kill|log|info|send|steer|spawn` gerencia execuções de subagentes para a sessão atual.
|
||||
- `/acp spawn|cancel|steer|close|sessions|status|set-mode|set|cwd|permissions|timeout|model|reset-options|doctor|install|help` gerencia sessões ACP e opções de tempo de execução.
|
||||
- `/focus <target>` vincula a thread atual do Discord ou o tópico/conversa do Telegram a um alvo de sessão.
|
||||
- `/unfocus` remove o vínculo atual.
|
||||
- `/agents` lista agentes vinculados a threads da sessão atual.
|
||||
- `/kill <id|#|all>` aborta um ou todos os subagentes em execução.
|
||||
- `/steer <id|#> <message>` envia direcionamento para um subagente em execução. Alias: `/tell`.
|
||||
- `/config show|get|set|unset` lê ou grava `openclaw.json`. Somente proprietário. Exige `commands.config: true`.
|
||||
- `/mcp show|get|set|unset` lê ou grava a configuração do servidor MCP gerenciada pelo OpenClaw em `mcp.servers`. Somente proprietário. Exige `commands.mcp: true`.
|
||||
- `/plugins list|inspect|show|get|install|enable|disable` inspeciona ou altera o estado de plugins. `/plugin` é um alias. Somente proprietário para gravações. Exige `commands.plugins: true`.
|
||||
- `/debug show|set|unset|reset` gerencia sobrescritas de configuração somente em tempo de execução. Somente proprietário. Exige `commands.debug: true`.
|
||||
- `/usage off|tokens|full|cost` controla o rodapé de uso por resposta ou imprime um resumo local de custos.
|
||||
- `/tts on|off|status|provider|limit|summary|audio|help` controla TTS. Veja [/tools/tts](/pt-BR/tools/tts).
|
||||
- `/restart` reinicia o OpenClaw quando ativado. Padrão: ativado; defina `commands.restart: false` para desativá-lo.
|
||||
- `/activation mention|always` define o modo de ativação em grupo.
|
||||
- `/send on|off|inherit` define a política de envio. Somente proprietário.
|
||||
- `/bash <command>` executa um comando de shell no host. Somente texto. Alias: `! <command>`. Exige `commands.bash: true` mais allowlists de `tools.elevated`.
|
||||
- `!poll [sessionId]` verifica um job bash em segundo plano.
|
||||
- `!stop [sessionId]` interrompe um job bash em segundo plano.
|
||||
|
||||
### Comandos dock gerados
|
||||
|
||||
Os comandos dock são gerados a partir de plugins de canal com suporte a comando nativo. Conjunto empacotado atual:
|
||||
|
||||
- `/dock-discord` (alias: `/dock_discord`)
|
||||
- `/dock-mattermost` (alias: `/dock_mattermost`)
|
||||
- `/dock-slack` (alias: `/dock_slack`)
|
||||
- `/dock-telegram` (alias: `/dock_telegram`)
|
||||
|
||||
### Comandos de plugins empacotados
|
||||
|
||||
Plugins empacotados podem adicionar mais comandos slash. Comandos empacotados atuais neste repositório:
|
||||
|
||||
- `/dreaming [on|off|status|help]` alterna o dreaming de memória. Veja [Dreaming](/pt-BR/concepts/dreaming).
|
||||
- `/pair [qr|status|pending|approve|cleanup|notify]` gerencia o fluxo de emparelhamento/configuração do dispositivo. Veja [Pairing](/pt-BR/channels/pairing).
|
||||
- `/phone status|arm <camera|screen|writes|all> [duration]|disarm` ativa temporariamente comandos de nó de telefone de alto risco.
|
||||
- `/voice status|list [limit]|set <voiceId|name>` gerencia a configuração de voz do Talk. No Discord, o nome do comando nativo é `/talkvoice`.
|
||||
- `/card ...` envia predefinições de rich card do LINE. Veja [LINE](/pt-BR/channels/line).
|
||||
- Comandos exclusivos do QQBot:
|
||||
- `/bot-ping`
|
||||
- `/bot-version`
|
||||
- `/bot-help`
|
||||
- `/bot-upgrade`
|
||||
- `/bot-logs`
|
||||
|
||||
### Comandos dinâmicos de skill
|
||||
|
||||
Skills invocáveis pelo usuário também são expostas como comandos slash:
|
||||
|
||||
- `/skill <name> [input]` sempre funciona como ponto de entrada genérico.
|
||||
- skills também podem aparecer como comandos diretos como `/prose` quando a skill/o plugin os registra.
|
||||
- o registro de comandos nativos de skill é controlado por `commands.nativeSkills` e `channels.<provider>.commands.nativeSkills`.
|
||||
|
||||
Observações:
|
||||
|
||||
- Os comandos aceitam um `:` opcional entre o comando e os argumentos (por exemplo, `/think: high`, `/send: on`, `/help:`).
|
||||
- `/new <model>` aceita um alias de modelo, `provider/model` ou um nome de provider (correspondência aproximada); se não houver correspondência, o texto é tratado como corpo da mensagem.
|
||||
- Para o detalhamento completo de uso por provider, use `openclaw status --usage`.
|
||||
- `/new <model>` aceita um alias de modelo, `provider/model` ou um nome de provedor (correspondência aproximada); se não houver correspondência, o texto será tratado como corpo da mensagem.
|
||||
- Para o detalhamento completo de uso por provedor, use `openclaw status --usage`.
|
||||
- `/allowlist add|remove` exige `commands.config=true` e respeita `configWrites` do canal.
|
||||
- Em canais com múltiplas contas, `/allowlist --account <id>` voltado para configuração e `/config set channels.<provider>.accounts.<id>...` também respeitam `configWrites` da conta de destino.
|
||||
- `/usage` controla o rodapé de uso por resposta; `/usage cost` imprime um resumo de custo local a partir dos logs de sessão do OpenClaw.
|
||||
- `/restart` vem habilitado por padrão; defina `commands.restart: false` para desativá-lo.
|
||||
- Comando nativo exclusivo do Discord: `/vc join|leave|status` controla canais de voz (exige `channels.discord.voice` e comandos nativos; não disponível como texto).
|
||||
- Comandos de binding de thread do Discord (`/focus`, `/unfocus`, `/agents`, `/session idle`, `/session max-age`) exigem que bindings efetivos de thread estejam habilitados (`session.threadBindings.enabled` e/ou `channels.discord.threadBindings.enabled`).
|
||||
- Referência do comando ACP e comportamento de runtime: [Agentes ACP](/pt-BR/tools/acp-agents).
|
||||
- `/verbose` serve para depuração e visibilidade extra; mantenha-o **desativado** no uso normal.
|
||||
- `/fast on|off` persiste uma sobrescrita de sessão. Use a opção `inherit` na UI de Sessões para limpá-la e voltar ao padrão da configuração.
|
||||
- `/fast` é específico de provider: OpenAI/OpenAI Codex o mapeiam para `service_tier=priority` em endpoints nativos Responses, enquanto requisições Anthropic públicas diretas, incluindo tráfego autenticado por OAuth enviado para `api.anthropic.com`, o mapeiam para `service_tier=auto` ou `standard_only`. Consulte [OpenAI](/pt-BR/providers/openai) e [Anthropic](/pt-BR/providers/anthropic).
|
||||
- Resumos de falha de ferramenta ainda são mostrados quando relevante, mas texto detalhado de falha só é incluído quando `/verbose` está `on` ou `full`.
|
||||
- `/reasoning` (e `/verbose`) são arriscados em grupos: podem revelar raciocínio interno ou saída de ferramenta que você não pretendia expor. Prefira deixá-los desativados, especialmente em chats em grupo.
|
||||
- `/model` persiste imediatamente o novo modelo da sessão.
|
||||
- Em canais com várias contas, `/allowlist --account <id>` direcionado à configuração e `/config set channels.<provider>.accounts.<id>...` também respeitam `configWrites` da conta de destino.
|
||||
- `/usage` controla o rodapé de uso por resposta; `/usage cost` imprime um resumo local de custos a partir dos logs de sessão do OpenClaw.
|
||||
- `/restart` é ativado por padrão; defina `commands.restart: false` para desativá-lo.
|
||||
- `/plugins install <spec>` aceita as mesmas especificações de plugin que `openclaw plugins install`: caminho/arquivo local, pacote npm ou `clawhub:<pkg>`.
|
||||
- `/plugins enable|disable` atualiza a configuração do plugin e pode solicitar uma reinicialização.
|
||||
- Comando nativo exclusivo do Discord: `/vc join|leave|status` controla canais de voz (exige `channels.discord.voice` e comandos nativos; não está disponível como texto).
|
||||
- Os comandos de vínculo com thread do Discord (`/focus`, `/unfocus`, `/agents`, `/session idle`, `/session max-age`) exigem que os vínculos efetivos com thread estejam ativados (`session.threadBindings.enabled` e/ou `channels.discord.threadBindings.enabled`).
|
||||
- Referência de comandos ACP e comportamento em tempo de execução: [ACP Agents](/pt-BR/tools/acp-agents).
|
||||
- `/verbose` é destinado a depuração e visibilidade extra; mantenha-o **desativado** no uso normal.
|
||||
- `/fast on|off` persiste uma sobrescrita de sessão. Use a opção `inherit` da UI de Sessões para limpá-la e voltar aos padrões da configuração.
|
||||
- `/fast` é específico do provedor: OpenAI/OpenAI Codex o mapeiam para `service_tier=priority` em endpoints nativos de Responses, enquanto solicitações públicas diretas ao Anthropic, incluindo tráfego autenticado por OAuth enviado para `api.anthropic.com`, o mapeiam para `service_tier=auto` ou `standard_only`. Veja [OpenAI](/pt-BR/providers/openai) e [Anthropic](/pt-BR/providers/anthropic).
|
||||
- Resumos de falha de ferramenta ainda são mostrados quando relevantes, mas o texto detalhado da falha só é incluído quando `/verbose` está `on` ou `full`.
|
||||
- `/reasoning` (e `/verbose`) são arriscados em ambientes de grupo: eles podem revelar raciocínio interno ou saída de ferramenta que você não pretendia expor. Prefira deixá-los desativados, especialmente em chats em grupo.
|
||||
- `/model` persiste o novo modelo da sessão imediatamente.
|
||||
- Se o agente estiver ocioso, a próxima execução o usará imediatamente.
|
||||
- Se já houver uma execução ativa, o OpenClaw marca uma troca ao vivo como pendente e só reinicia no novo modelo em um ponto de nova tentativa limpo.
|
||||
- Se a atividade de ferramenta ou a saída da resposta já tiver começado, a troca pendente pode permanecer na fila até uma oportunidade posterior de nova tentativa ou até o próximo turno do usuário.
|
||||
- **Caminho rápido:** mensagens somente de comando de remetentes em allowlist são tratadas imediatamente (ignorando fila + modelo).
|
||||
- **Bloqueio por menção em grupos:** mensagens somente de comando de remetentes em allowlist ignoram exigências de menção.
|
||||
- **Atalhos inline (somente remetentes em allowlist):** determinados comandos também funcionam quando embutidos em uma mensagem normal e são removidos antes que o modelo veja o restante.
|
||||
- Exemplo: `hey /status` aciona uma resposta de status, e o texto restante continua pelo fluxo normal.
|
||||
- Se já houver uma execução ativa, o OpenClaw marca uma troca ao vivo como pendente e só reinicia no novo modelo em um ponto limpo de tentativa.
|
||||
- Se a atividade de ferramenta ou a saída de resposta já tiver começado, a troca pendente pode ficar na fila até uma oportunidade posterior de tentativa ou até o próximo turno do usuário.
|
||||
- **Caminho rápido:** mensagens somente de comando de remetentes na allowlist são tratadas imediatamente (ignoram fila + modelo).
|
||||
- **Gate de menção em grupo:** mensagens somente de comando de remetentes na allowlist ignoram requisitos de menção.
|
||||
- **Atalhos inline (apenas remetentes na allowlist):** certos comandos também funcionam quando embutidos em uma mensagem normal e são removidos antes que o modelo veja o texto restante.
|
||||
- Exemplo: `hey /status` dispara uma resposta de status, e o texto restante continua pelo fluxo normal.
|
||||
- Atualmente: `/help`, `/commands`, `/status`, `/whoami` (`/id`).
|
||||
- Mensagens somente de comando não autorizadas são ignoradas silenciosamente, e tokens inline `/...` são tratados como texto simples.
|
||||
- **Comandos de skill:** Skills `user-invocable` são expostas como comandos slash. Os nomes são saneados para `a-z0-9_` (máx. 32 caracteres); colisões recebem sufixos numéricos (por exemplo `_2`).
|
||||
- **Comandos de skill:** skills `user-invocable` são expostas como comandos slash. Os nomes são sanitizados para `a-z0-9_` (máximo de 32 caracteres); colisões recebem sufixos numéricos (por exemplo, `_2`).
|
||||
- `/skill <name> [input]` executa uma skill pelo nome (útil quando limites de comandos nativos impedem comandos por skill).
|
||||
- Por padrão, comandos de skill são encaminhados ao modelo como uma solicitação normal.
|
||||
- As Skills podem opcionalmente declarar `command-dispatch: tool` para rotear o comando diretamente a uma ferramenta (determinístico, sem modelo).
|
||||
- Exemplo: `/prose` (plugin OpenProse) — consulte [OpenProse](/pt-BR/prose).
|
||||
- **Argumentos de comando nativo:** o Discord usa autocomplete para opções dinâmicas (e menus com botões quando você omite argumentos obrigatórios). Telegram e Slack mostram um menu com botões quando um comando suporta escolhas e você omite o argumento.
|
||||
- Por padrão, os comandos de skill são encaminhados ao modelo como uma solicitação normal.
|
||||
- Skills podem opcionalmente declarar `command-dispatch: tool` para rotear o comando diretamente para uma ferramenta (determinístico, sem modelo).
|
||||
- Exemplo: `/prose` (plugin OpenProse) — veja [OpenProse](/pt-BR/prose).
|
||||
- **Argumentos de comando nativo:** o Discord usa preenchimento automático para opções dinâmicas (e menus de botão quando você omite argumentos obrigatórios). Telegram e Slack mostram um menu de botões quando um comando aceita escolhas e você omite o argumento.
|
||||
|
||||
## `/tools`
|
||||
|
||||
`/tools` responde a uma pergunta de runtime, não a uma pergunta de configuração: **o que este agente pode usar agora
|
||||
`/tools` responde a uma pergunta de tempo de execução, não a uma pergunta de configuração: **o que este agente pode usar agora
|
||||
nesta conversa**.
|
||||
|
||||
- O padrão de `/tools` é compacto e otimizado para leitura rápida.
|
||||
- `/tools verbose` adiciona descrições curtas.
|
||||
- Superfícies de comando nativo que suportam argumentos expõem a mesma mudança de modo como `compact|verbose`.
|
||||
- Os resultados têm escopo de sessão, então mudar agente, canal, thread, autorização do remetente ou modelo pode
|
||||
alterar a saída.
|
||||
- `/tools` inclui ferramentas realmente alcançáveis em runtime, incluindo ferramentas do core, ferramentas
|
||||
de plugin conectadas e ferramentas pertencentes ao canal.
|
||||
- Superfícies de comando nativo com suporte a argumentos expõem o mesmo seletor de modo `compact|verbose`.
|
||||
- Os resultados são limitados ao escopo da sessão, então mudar agente, canal, thread, autorização do remetente ou modelo pode
|
||||
mudar a saída.
|
||||
- `/tools` inclui ferramentas realmente acessíveis em tempo de execução, incluindo ferramentas do core, ferramentas
|
||||
de plugins conectados e ferramentas pertencentes ao canal.
|
||||
|
||||
Para editar perfis e sobrescritas, use o painel Tools da Control UI ou superfícies de configuração/catálogo em vez de
|
||||
tratar `/tools` como um catálogo estático.
|
||||
Para editar perfil e sobrescritas, use o painel Tools da UI de Controle ou superfícies de configuração/catálogo em vez
|
||||
de tratar `/tools` como um catálogo estático.
|
||||
|
||||
## Superfícies de uso (o que aparece onde)
|
||||
|
||||
- **Uso/cota do provider** (exemplo: “Claude 80% left”) aparece em `/status` para o provider do modelo atual quando o rastreamento de uso está habilitado. O OpenClaw normaliza janelas de provider para `% left`; para MiniMax, campos de porcentagem apenas de restante são invertidos antes da exibição, e respostas `model_remains` preferem a entrada do modelo de chat mais um rótulo de plano marcado por modelo.
|
||||
- **Linhas de tokens/cache** em `/status` podem usar como fallback a entrada de uso mais recente da transcrição quando o snapshot da sessão ao vivo for escasso. Valores vivos existentes e não zero ainda prevalecem, e o fallback da transcrição também pode recuperar o rótulo do modelo de runtime ativo mais um total maior voltado ao prompt quando os totais armazenados estiverem ausentes ou forem menores.
|
||||
- **Tokens/custo por resposta** são controlados por `/usage off|tokens|full` (acrescentados às respostas normais).
|
||||
- `/model status` trata de **modelos/auth/endpoints**, não de uso.
|
||||
- **Uso/cota do provedor** (exemplo: “Claude 80% restante”) aparece em `/status` para o provedor de modelo atual quando o rastreamento de uso está ativado. O OpenClaw normaliza janelas de provedor para `% restante`; para o MiniMax, campos percentuais apenas de restante são invertidos antes da exibição, e respostas `model_remains` preferem a entrada do modelo de chat mais um rótulo de plano com tag de modelo.
|
||||
- **Linhas de token/cache** em `/status` podem recorrer à entrada de uso mais recente do transcript quando o snapshot da sessão ativa é escasso. Valores ativos não nulos ainda têm prioridade, e o fallback do transcript também pode recuperar o rótulo do modelo de tempo de execução ativo mais um total maior orientado a prompt quando os totais armazenados estão ausentes ou são menores.
|
||||
- **Tokens/custo por resposta** é controlado por `/usage off|tokens|full` (anexado às respostas normais).
|
||||
- `/model status` é sobre **modelos/auth/endpoints**, não sobre uso.
|
||||
|
||||
## Seleção de modelo (`/model`)
|
||||
|
||||
@ -212,14 +250,14 @@ Exemplos:
|
||||
|
||||
Observações:
|
||||
|
||||
- `/model` e `/model list` mostram um seletor compacto numerado (família de modelo + providers disponíveis).
|
||||
- No Discord, `/model` e `/models` abrem um seletor interativo com menus suspensos de provider e modelo mais uma etapa Submit.
|
||||
- `/model <#>` seleciona a partir desse seletor (e prefere o provider atual quando possível).
|
||||
- `/model status` mostra a visualização detalhada, incluindo endpoint configurado do provider (`baseUrl`) e modo de API (`api`) quando disponíveis.
|
||||
- `/model` e `/model list` mostram um seletor compacto e numerado (família do modelo + provedores disponíveis).
|
||||
- No Discord, `/model` e `/models` abrem um seletor interativo com dropdowns de provedor e modelo mais uma etapa Submit.
|
||||
- `/model <#>` seleciona a partir desse seletor (e prefere o provedor atual quando possível).
|
||||
- `/model status` mostra a visualização detalhada, incluindo o endpoint configurado do provedor (`baseUrl`) e o modo de API (`api`) quando disponível.
|
||||
|
||||
## Sobrescritas de depuração
|
||||
|
||||
`/debug` permite definir sobrescritas de configuração **somente em runtime** (em memória, não em disco). Somente proprietário. Desativado por padrão; habilite com `commands.debug: true`.
|
||||
`/debug` permite definir sobrescritas de configuração **somente em tempo de execução** (memória, não disco). Somente proprietário. Desativado por padrão; ative com `commands.debug: true`.
|
||||
|
||||
Exemplos:
|
||||
|
||||
@ -234,11 +272,11 @@ Exemplos:
|
||||
Observações:
|
||||
|
||||
- As sobrescritas se aplicam imediatamente a novas leituras de configuração, mas **não** gravam em `openclaw.json`.
|
||||
- Use `/debug reset` para limpar todas as sobrescritas e voltar à configuração em disco.
|
||||
- Use `/debug reset` para limpar todas as sobrescritas e retornar à configuração em disco.
|
||||
|
||||
## Atualizações de configuração
|
||||
|
||||
`/config` grava na sua configuração em disco (`openclaw.json`). Somente proprietário. Desativado por padrão; habilite com `commands.config: true`.
|
||||
`/config` grava na sua configuração em disco (`openclaw.json`). Somente proprietário. Desativado por padrão; ative com `commands.config: true`.
|
||||
|
||||
Exemplos:
|
||||
|
||||
@ -252,12 +290,12 @@ Exemplos:
|
||||
|
||||
Observações:
|
||||
|
||||
- A configuração é validada antes da gravação; mudanças inválidas são rejeitadas.
|
||||
- Atualizações feitas por `/config` persistem após restart.
|
||||
- A configuração é validada antes da gravação; alterações inválidas são rejeitadas.
|
||||
- As atualizações de `/config` persistem entre reinicializações.
|
||||
|
||||
## Atualizações de MCP
|
||||
|
||||
`/mcp` grava definições de servidor MCP gerenciadas pelo OpenClaw em `mcp.servers`. Somente proprietário. Desativado por padrão; habilite com `commands.mcp: true`.
|
||||
`/mcp` grava definições de servidor MCP gerenciadas pelo OpenClaw em `mcp.servers`. Somente proprietário. Desativado por padrão; ative com `commands.mcp: true`.
|
||||
|
||||
Exemplos:
|
||||
|
||||
@ -270,12 +308,12 @@ Exemplos:
|
||||
|
||||
Observações:
|
||||
|
||||
- `/mcp` armazena a configuração na configuração do OpenClaw, não nas settings do projeto pertencentes ao Pi.
|
||||
- Adaptadores de runtime decidem quais transportes são realmente executáveis.
|
||||
- `/mcp` armazena a configuração na configuração do OpenClaw, não nas configurações de projeto pertencentes ao Pi.
|
||||
- Adaptadores de tempo de execução decidem quais transportes são realmente executáveis.
|
||||
|
||||
## Atualizações de plugin
|
||||
|
||||
`/plugins` permite que operadores inspecionem plugins descobertos e alternem a habilitação na configuração. Fluxos somente leitura podem usar `/plugin` como alias. Desativado por padrão; habilite com `commands.plugins: true`.
|
||||
`/plugins` permite que operadores inspecionem plugins descobertos e alternem a ativação na configuração. Fluxos somente leitura podem usar `/plugin` como alias. Desativado por padrão; ative com `commands.plugins: true`.
|
||||
|
||||
Exemplos:
|
||||
|
||||
@ -289,9 +327,9 @@ Exemplos:
|
||||
|
||||
Observações:
|
||||
|
||||
- `/plugins list` e `/plugins show` usam descoberta real de plugins com base no workspace atual mais a configuração em disco.
|
||||
- `/plugins list` e `/plugins show` usam descoberta real de plugins no workspace atual mais a configuração em disco.
|
||||
- `/plugins enable|disable` atualiza apenas a configuração do plugin; não instala nem desinstala plugins.
|
||||
- Após mudanças de habilitação/desabilitação, reinicie o gateway para aplicá-las.
|
||||
- Após alterações de ativação/desativação, reinicie o gateway para aplicá-las.
|
||||
|
||||
## Observações sobre superfícies
|
||||
|
||||
@ -299,22 +337,22 @@ Observações:
|
||||
- **Comandos nativos** usam sessões isoladas:
|
||||
- Discord: `agent:<agentId>:discord:slash:<userId>`
|
||||
- Slack: `agent:<agentId>:slack:slash:<userId>` (prefixo configurável via `channels.slack.slashCommand.sessionPrefix`)
|
||||
- Telegram: `telegram:slash:<userId>` (tem como alvo a sessão do chat via `CommandTargetSessionKey`)
|
||||
- **`/stop`** tem como alvo a sessão de chat ativa para poder abortar a execução atual.
|
||||
- **Slack:** `channels.slack.slashCommand` ainda tem suporte para um único comando no estilo `/openclaw`. Se você habilitar `commands.native`, deverá criar um slash command do Slack por comando integrado (mesmos nomes de `/help`). Menus de argumentos de comando para Slack são entregues como botões efêmeros do Block Kit.
|
||||
- Telegram: `telegram:slash:<userId>` (direciona para a sessão do chat via `CommandTargetSessionKey`)
|
||||
- **`/stop`** tem como alvo a sessão ativa de chat para poder abortar a execução atual.
|
||||
- **Slack:** `channels.slack.slashCommand` ainda é compatível para um único comando no estilo `/openclaw`. Se você ativar `commands.native`, precisará criar um comando slash do Slack para cada comando built-in (mesmos nomes de `/help`). Menus de argumentos de comando para o Slack são entregues como botões Block Kit efêmeros.
|
||||
- Exceção nativa do Slack: registre `/agentstatus` (não `/status`) porque o Slack reserva `/status`. O texto `/status` ainda funciona em mensagens do Slack.
|
||||
|
||||
## Perguntas laterais BTW
|
||||
## Perguntas paralelas com BTW
|
||||
|
||||
`/btw` é uma **pergunta lateral** rápida sobre a sessão atual.
|
||||
`/btw` é uma **pergunta paralela** rápida sobre a sessão atual.
|
||||
|
||||
Diferentemente do chat normal:
|
||||
|
||||
- ela usa a sessão atual como contexto de fundo,
|
||||
- é executada como uma chamada separada **sem ferramentas** e única,
|
||||
- não altera o contexto futuro da sessão,
|
||||
- não é gravada no histórico da transcrição,
|
||||
- é entregue como um resultado lateral ao vivo em vez de uma mensagem normal do assistente.
|
||||
- ele usa a sessão atual como contexto de fundo,
|
||||
- ele é executado como uma chamada isolada **sem ferramentas**,
|
||||
- ele não altera o contexto futuro da sessão,
|
||||
- ele não é gravado no histórico do transcript,
|
||||
- ele é entregue como um resultado paralelo ao vivo em vez de uma mensagem normal do assistente.
|
||||
|
||||
Isso torna `/btw` útil quando você quer um esclarecimento temporário enquanto a
|
||||
tarefa principal continua.
|
||||
@ -325,5 +363,5 @@ Exemplo:
|
||||
/btw o que estamos fazendo agora?
|
||||
```
|
||||
|
||||
Consulte [Perguntas laterais BTW](/pt-BR/tools/btw) para ver o comportamento completo e
|
||||
os detalhes de UX do cliente.
|
||||
Veja [BTW Side Questions](/pt-BR/tools/btw) para o comportamento completo e detalhes
|
||||
da UX do cliente.
|
||||
|
||||
@ -1,57 +1,57 @@
|
||||
---
|
||||
read_when:
|
||||
- Habilitando text-to-speech para respostas
|
||||
- Configurando provedores ou limites de TTS
|
||||
- Usando comandos /tts
|
||||
summary: Text-to-speech (TTS) para respostas de saída
|
||||
title: Text-to-Speech
|
||||
- Ativar texto para fala para respostas
|
||||
- Configurar provedores ou limites de TTS
|
||||
- Usar comandos /tts
|
||||
summary: Texto para fala (TTS) para respostas enviadas
|
||||
title: Texto para fala
|
||||
x-i18n:
|
||||
generated_at: "2026-04-05T12:56:56Z"
|
||||
generated_at: "2026-04-08T05:27:32Z"
|
||||
model: gpt-5.4
|
||||
provider: openai
|
||||
source_hash: 8487c8acef7585bd4eb5e3b39e2a063ebc6b5f0103524abdcbadd3a7781ffc46
|
||||
source_hash: 6e0fbcaf61282733c134f682e05a71f94d2169c03a85131ce9ad233c71a1e533
|
||||
source_path: tools/tts.md
|
||||
workflow: 15
|
||||
---
|
||||
|
||||
# Text-to-speech (TTS)
|
||||
# Texto para fala (TTS)
|
||||
|
||||
O OpenClaw pode converter respostas de saída em áudio usando ElevenLabs, Microsoft, MiniMax ou OpenAI.
|
||||
Funciona em qualquer lugar onde o OpenClaw possa enviar áudio.
|
||||
O OpenClaw pode converter respostas enviadas em áudio usando ElevenLabs, Microsoft, MiniMax ou OpenAI.
|
||||
Ele funciona em qualquer lugar onde o OpenClaw possa enviar áudio.
|
||||
|
||||
## Serviços compatíveis
|
||||
|
||||
- **ElevenLabs** (provedor principal ou de fallback)
|
||||
- **Microsoft** (provedor principal ou de fallback; a implementação incluída atual usa `node-edge-tts`)
|
||||
- **Microsoft** (provedor principal ou de fallback; a implementação integrada atual usa `node-edge-tts`)
|
||||
- **MiniMax** (provedor principal ou de fallback; usa a API T2A v2)
|
||||
- **OpenAI** (provedor principal ou de fallback; também usado para resumos)
|
||||
|
||||
### Observações sobre o Microsoft speech
|
||||
### Observações sobre a fala da Microsoft
|
||||
|
||||
O provedor de fala da Microsoft incluído atualmente usa o serviço online de
|
||||
Atualmente, o provedor integrado de fala da Microsoft usa o serviço online de
|
||||
TTS neural do Microsoft Edge por meio da biblioteca `node-edge-tts`. É um
|
||||
serviço hospedado (não local), usa endpoints da Microsoft e não exige chave de API.
|
||||
O `node-edge-tts` expõe opções de configuração de fala e formatos de saída, mas
|
||||
nem todas as opções são compatíveis com o serviço. Configuração legada e entrada de diretiva
|
||||
usando `edge` ainda funcionam e são normalizadas para `microsoft`.
|
||||
nem todas as opções são compatíveis com o serviço. Configuração legada e entrada
|
||||
de diretiva usando `edge` ainda funcionam e são normalizadas para `microsoft`.
|
||||
|
||||
Como esse caminho usa um serviço web público sem SLA ou cota publicados,
|
||||
trate-o como melhor esforço. Se você precisar de limites garantidos e suporte, use OpenAI
|
||||
ou ElevenLabs.
|
||||
Como esse caminho é um serviço web público sem SLA ou cota publicados,
|
||||
trate-o como melhor esforço. Se você precisar de limites garantidos e suporte,
|
||||
use OpenAI ou ElevenLabs.
|
||||
|
||||
## Chaves opcionais
|
||||
|
||||
Se você quiser OpenAI, ElevenLabs ou MiniMax:
|
||||
Se você quiser usar OpenAI, ElevenLabs ou MiniMax:
|
||||
|
||||
- `ELEVENLABS_API_KEY` (ou `XI_API_KEY`)
|
||||
- `MINIMAX_API_KEY`
|
||||
- `OPENAI_API_KEY`
|
||||
|
||||
O Microsoft speech **não** exige chave de API.
|
||||
A fala da Microsoft **não** exige chave de API.
|
||||
|
||||
Se vários provedores estiverem configurados, o provedor selecionado será usado primeiro e os demais serão opções de fallback.
|
||||
O resumo automático usa o `summaryModel` configurado (ou `agents.defaults.model.primary`),
|
||||
portanto esse provedor também deve estar autenticado se você habilitar resumos.
|
||||
portanto esse provedor também precisa estar autenticado se você ativar resumos.
|
||||
|
||||
## Links dos serviços
|
||||
|
||||
@ -59,24 +59,24 @@ portanto esse provedor também deve estar autenticado se você habilitar resumos
|
||||
- [Referência da API de áudio da OpenAI](https://platform.openai.com/docs/api-reference/audio)
|
||||
- [Text to Speech da ElevenLabs](https://elevenlabs.io/docs/api-reference/text-to-speech)
|
||||
- [Autenticação da ElevenLabs](https://elevenlabs.io/docs/api-reference/authentication)
|
||||
- [API MiniMax T2A v2](https://platform.minimaxi.com/document/T2A%20V2)
|
||||
- [API T2A v2 da MiniMax](https://platform.minimaxi.com/document/T2A%20V2)
|
||||
- [node-edge-tts](https://github.com/SchneeHertz/node-edge-tts)
|
||||
- [Formatos de saída do Microsoft Speech](https://learn.microsoft.com/azure/ai-services/speech-service/rest-text-to-speech#audio-outputs)
|
||||
|
||||
## Isso está habilitado por padrão?
|
||||
## Está ativado por padrão?
|
||||
|
||||
Não. O auto‑TTS vem **desativado** por padrão. Habilite-o na configuração com
|
||||
`messages.tts.auto` ou por sessão com `/tts always` (alias: `/tts on`).
|
||||
Não. O TTS automático vem **desativado** por padrão. Ative-o na configuração com
|
||||
`messages.tts.auto` ou localmente com `/tts on`.
|
||||
|
||||
Quando `messages.tts.provider` não está definido, o OpenClaw escolhe o primeiro
|
||||
provedor de fala configurado na ordem de seleção automática do registro.
|
||||
|
||||
## Configuração
|
||||
|
||||
A configuração de TTS fica em `messages.tts` no `openclaw.json`.
|
||||
A configuração de TTS fica em `messages.tts` em `openclaw.json`.
|
||||
O esquema completo está em [Configuração do Gateway](/pt-BR/gateway/configuration).
|
||||
|
||||
### Configuração mínima (habilitar + provedor)
|
||||
### Configuração mínima (ativar + provedor)
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -177,7 +177,7 @@ O esquema completo está em [Configuração do Gateway](/pt-BR/gateway/configura
|
||||
}
|
||||
```
|
||||
|
||||
### Desabilitar o Microsoft speech
|
||||
### Desativar a fala da Microsoft
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -220,7 +220,7 @@ O esquema completo está em [Configuração do Gateway](/pt-BR/gateway/configura
|
||||
}
|
||||
```
|
||||
|
||||
### Desabilitar resumo automático para respostas longas
|
||||
### Desativar resumo automático para respostas longas
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -240,28 +240,28 @@ Depois execute:
|
||||
|
||||
### Observações sobre os campos
|
||||
|
||||
- `auto`: modo de auto‑TTS (`off`, `always`, `inbound`, `tagged`).
|
||||
- `inbound` envia áudio apenas após uma mensagem de voz recebida.
|
||||
- `tagged` envia áudio apenas quando a resposta inclui tags `[[tts]]`.
|
||||
- `auto`: modo de TTS automático (`off`, `always`, `inbound`, `tagged`).
|
||||
- `inbound` só envia áudio após uma mensagem de voz recebida.
|
||||
- `tagged` só envia áudio quando a resposta inclui tags `[[tts]]`.
|
||||
- `enabled`: alternância legada (o doctor migra isso para `auto`).
|
||||
- `mode`: `"final"` (padrão) ou `"all"` (inclui respostas de ferramenta/bloco).
|
||||
- `provider`: id do provedor de fala, como `"elevenlabs"`, `"microsoft"`, `"minimax"` ou `"openai"` (o fallback é automático).
|
||||
- Se `provider` **não estiver definido**, o OpenClaw usa o primeiro provedor de fala configurado na ordem de seleção automática do registro.
|
||||
- O `provider: "edge"` legado ainda funciona e é normalizado para `microsoft`.
|
||||
- Se `provider` estiver **não definido**, o OpenClaw usa o primeiro provedor de fala configurado na ordem de seleção automática do registro.
|
||||
- O legado `provider: "edge"` ainda funciona e é normalizado para `microsoft`.
|
||||
- `summaryModel`: modelo barato opcional para resumo automático; o padrão é `agents.defaults.model.primary`.
|
||||
- Aceita `provider/model` ou um alias de modelo configurado.
|
||||
- `modelOverrides`: permite que o modelo emita diretivas de TTS (ativado por padrão).
|
||||
- `allowProvider` tem padrão `false` (troca de provedor é opt-in).
|
||||
- `providers.<id>`: configurações do provedor, indexadas pelo id do provedor de fala.
|
||||
- Blocos diretos de provedor legados (`messages.tts.openai`, `messages.tts.elevenlabs`, `messages.tts.microsoft`, `messages.tts.edge`) são migrados automaticamente para `messages.tts.providers.<id>` no carregamento.
|
||||
- `maxTextLength`: limite rígido para entrada de TTS (caracteres). `/tts audio` falha se excedido.
|
||||
- `providers.<id>`: configurações pertencentes ao provedor, indexadas pelo id do provedor de fala.
|
||||
- Blocos legados diretos de provedor (`messages.tts.openai`, `messages.tts.elevenlabs`, `messages.tts.microsoft`, `messages.tts.edge`) são migrados automaticamente para `messages.tts.providers.<id>` no carregamento.
|
||||
- `maxTextLength`: limite rígido para entrada de TTS (caracteres). `/tts audio` falha se for excedido.
|
||||
- `timeoutMs`: tempo limite da solicitação (ms).
|
||||
- `prefsPath`: substitui o caminho local do JSON de preferências (provedor/limite/resumo).
|
||||
- Os valores de `apiKey` usam como fallback variáveis de ambiente (`ELEVENLABS_API_KEY`/`XI_API_KEY`, `MINIMAX_API_KEY`, `OPENAI_API_KEY`).
|
||||
- Valores de `apiKey` usam fallback para variáveis de ambiente (`ELEVENLABS_API_KEY`/`XI_API_KEY`, `MINIMAX_API_KEY`, `OPENAI_API_KEY`).
|
||||
- `providers.elevenlabs.baseUrl`: substitui a URL base da API da ElevenLabs.
|
||||
- `providers.openai.baseUrl`: substitui o endpoint de TTS da OpenAI.
|
||||
- Ordem de resolução: `messages.tts.providers.openai.baseUrl` -> `OPENAI_TTS_BASE_URL` -> `https://api.openai.com/v1`
|
||||
- Valores diferentes do padrão são tratados como endpoints de TTS compatíveis com OpenAI, então nomes personalizados de modelo e voz são aceitos.
|
||||
- Valores não padrão são tratados como endpoints de TTS compatíveis com OpenAI, portanto nomes personalizados de modelo e voz são aceitos.
|
||||
- `providers.elevenlabs.voiceSettings`:
|
||||
- `stability`, `similarityBoost`, `style`: `0..1`
|
||||
- `useSpeakerBoost`: `true|false`
|
||||
@ -269,57 +269,57 @@ Depois execute:
|
||||
- `providers.elevenlabs.applyTextNormalization`: `auto|on|off`
|
||||
- `providers.elevenlabs.languageCode`: ISO 639-1 de 2 letras (ex.: `en`, `de`)
|
||||
- `providers.elevenlabs.seed`: inteiro `0..4294967295` (determinismo de melhor esforço)
|
||||
- `providers.minimax.baseUrl`: substitui a URL base da API MiniMax (padrão `https://api.minimax.io`, env: `MINIMAX_API_HOST`).
|
||||
- `providers.minimax.baseUrl`: substitui a URL base da API da MiniMax (padrão `https://api.minimax.io`, env: `MINIMAX_API_HOST`).
|
||||
- `providers.minimax.model`: modelo de TTS (padrão `speech-2.8-hd`, env: `MINIMAX_TTS_MODEL`).
|
||||
- `providers.minimax.voiceId`: identificador de voz (padrão `English_expressive_narrator`, env: `MINIMAX_TTS_VOICE_ID`).
|
||||
- `providers.minimax.speed`: velocidade de reprodução `0.5..2.0` (padrão 1.0).
|
||||
- `providers.minimax.vol`: volume `(0, 10]` (padrão 1.0; deve ser maior que 0).
|
||||
- `providers.minimax.pitch`: deslocamento de tom `-12..12` (padrão 0).
|
||||
- `providers.microsoft.enabled`: permite o uso do Microsoft speech (padrão `true`; sem chave de API).
|
||||
- `providers.microsoft.enabled`: permite o uso da fala da Microsoft (padrão `true`; sem chave de API).
|
||||
- `providers.microsoft.voice`: nome da voz neural da Microsoft (ex.: `en-US-MichelleNeural`).
|
||||
- `providers.microsoft.lang`: código do idioma (ex.: `en-US`).
|
||||
- `providers.microsoft.outputFormat`: formato de saída da Microsoft (ex.: `audio-24khz-48kbitrate-mono-mp3`).
|
||||
- Consulte os formatos de saída do Microsoft Speech para valores válidos; nem todos os formatos são compatíveis com o transporte incluído baseado em Edge.
|
||||
- Veja os formatos de saída do Microsoft Speech para valores válidos; nem todos os formatos são compatíveis com o transporte integrado baseado em Edge.
|
||||
- `providers.microsoft.rate` / `providers.microsoft.pitch` / `providers.microsoft.volume`: strings de porcentagem (ex.: `+10%`, `-5%`).
|
||||
- `providers.microsoft.saveSubtitles`: grava legendas em JSON ao lado do arquivo de áudio.
|
||||
- `providers.microsoft.proxy`: URL de proxy para solicitações do Microsoft speech.
|
||||
- `providers.microsoft.proxy`: URL de proxy para solicitações de fala da Microsoft.
|
||||
- `providers.microsoft.timeoutMs`: substituição do tempo limite da solicitação (ms).
|
||||
- `edge.*`: alias legado para as mesmas configurações da Microsoft.
|
||||
|
||||
## Substituições guiadas pelo modelo (ativado por padrão)
|
||||
## Substituições orientadas pelo modelo (ativado por padrão)
|
||||
|
||||
Por padrão, o modelo **pode** emitir diretivas de TTS para uma única resposta.
|
||||
Quando `messages.tts.auto` é `tagged`, essas diretivas são necessárias para acionar o áudio.
|
||||
|
||||
Quando ativado, o modelo pode emitir diretivas `[[tts:...]]` para substituir a voz
|
||||
de uma única resposta, além de um bloco opcional `[[tts:text]]...[[/tts:text]]` para
|
||||
em uma única resposta, além de um bloco opcional `[[tts:text]]...[[/tts:text]]` para
|
||||
fornecer tags expressivas (risadas, indicações de canto etc.) que devem aparecer
|
||||
apenas no áudio.
|
||||
|
||||
As diretivas `provider=...` são ignoradas a menos que `modelOverrides.allowProvider: true`.
|
||||
Diretivas `provider=...` são ignoradas, a menos que `modelOverrides.allowProvider: true`.
|
||||
|
||||
Exemplo de payload de resposta:
|
||||
|
||||
```
|
||||
Here you go.
|
||||
Aqui está.
|
||||
|
||||
[[tts:voiceId=pMsXgVXv3BLzUgSXRplE model=eleven_v3 speed=1.1]]
|
||||
[[tts:text]](laughs) Read the song once more.[[/tts:text]]
|
||||
[[tts:text]](ri) Leia a música mais uma vez.[[/tts:text]]
|
||||
```
|
||||
|
||||
Chaves de diretiva disponíveis (quando ativadas):
|
||||
|
||||
- `provider` (id do provedor de fala registrado, por exemplo `openai`, `elevenlabs`, `minimax` ou `microsoft`; requer `allowProvider: true`)
|
||||
- `provider` (id do provedor de fala registrado, por exemplo `openai`, `elevenlabs`, `minimax` ou `microsoft`; exige `allowProvider: true`)
|
||||
- `voice` (voz da OpenAI) ou `voiceId` (ElevenLabs / MiniMax)
|
||||
- `model` (modelo de TTS da OpenAI, id do modelo da ElevenLabs ou modelo do MiniMax)
|
||||
- `model` (modelo de TTS da OpenAI, id de modelo da ElevenLabs ou modelo da MiniMax)
|
||||
- `stability`, `similarityBoost`, `style`, `speed`, `useSpeakerBoost`
|
||||
- `vol` / `volume` (volume do MiniMax, 0-10)
|
||||
- `pitch` (tom do MiniMax, -12 a 12)
|
||||
- `vol` / `volume` (volume da MiniMax, 0-10)
|
||||
- `pitch` (tom da MiniMax, -12 a 12)
|
||||
- `applyTextNormalization` (`auto|on|off`)
|
||||
- `languageCode` (ISO 639-1)
|
||||
- `seed`
|
||||
|
||||
Desabilite todas as substituições do modelo:
|
||||
Desative todas as substituições do modelo:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -333,7 +333,7 @@ Desabilite todas as substituições do modelo:
|
||||
}
|
||||
```
|
||||
|
||||
Allowlist opcional (habilita troca de provedor mantendo os outros controles configuráveis):
|
||||
Allowlist opcional (ativa troca de provedor enquanto mantém outros controles configuráveis):
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -351,7 +351,7 @@ Allowlist opcional (habilita troca de provedor mantendo os outros controles conf
|
||||
|
||||
## Preferências por usuário
|
||||
|
||||
Os comandos de barra gravam substituições locais em `prefsPath` (padrão:
|
||||
Os comandos slash gravam substituições locais em `prefsPath` (padrão:
|
||||
`~/.openclaw/settings/tts.json`, substituível com `OPENCLAW_TTS_PREFS` ou
|
||||
`messages.tts.prefsPath`).
|
||||
|
||||
@ -359,7 +359,7 @@ Campos armazenados:
|
||||
|
||||
- `enabled`
|
||||
- `provider`
|
||||
- `maxLength` (limite para resumo; padrão 1500 caracteres)
|
||||
- `maxLength` (limiar para resumo; padrão 1500 caracteres)
|
||||
- `summarize` (padrão `true`)
|
||||
|
||||
Eles substituem `messages.tts.*` para esse host.
|
||||
@ -367,25 +367,25 @@ Eles substituem `messages.tts.*` para esse host.
|
||||
## Formatos de saída (fixos)
|
||||
|
||||
- **Feishu / Matrix / Telegram / WhatsApp**: mensagem de voz Opus (`opus_48000_64` da ElevenLabs, `opus` da OpenAI).
|
||||
- 48kHz / 64kbps é um bom equilíbrio para mensagem de voz.
|
||||
- 48kHz / 64kbps é um bom equilíbrio para mensagens de voz.
|
||||
- **Outros canais**: MP3 (`mp3_44100_128` da ElevenLabs, `mp3` da OpenAI).
|
||||
- 44.1kHz / 128kbps é o equilíbrio padrão para clareza de fala.
|
||||
- 44,1kHz / 128kbps é o equilíbrio padrão para clareza da fala.
|
||||
- **MiniMax**: MP3 (modelo `speech-2.8-hd`, taxa de amostragem de 32kHz). O formato de nota de voz não é compatível nativamente; use OpenAI ou ElevenLabs para mensagens de voz Opus garantidas.
|
||||
- **Microsoft**: usa `microsoft.outputFormat` (padrão `audio-24khz-48kbitrate-mono-mp3`).
|
||||
- O transporte incluído aceita um `outputFormat`, mas nem todos os formatos estão disponíveis no serviço.
|
||||
- O transporte integrado aceita `outputFormat`, mas nem todos os formatos estão disponíveis no serviço.
|
||||
- Os valores de formato de saída seguem os formatos de saída do Microsoft Speech (incluindo Ogg/WebM Opus).
|
||||
- O `sendVoice` do Telegram aceita OGG/MP3/M4A; use OpenAI/ElevenLabs se você precisar de mensagens de voz Opus garantidas.
|
||||
- Se o formato de saída configurado da Microsoft falhar, o OpenClaw tenta novamente com MP3.
|
||||
|
||||
Os formatos de saída OpenAI/ElevenLabs são fixos por canal (veja acima).
|
||||
Os formatos de saída da OpenAI/ElevenLabs são fixos por canal (veja acima).
|
||||
|
||||
## Comportamento do auto-TTS
|
||||
## Comportamento do TTS automático
|
||||
|
||||
Quando habilitado, o OpenClaw:
|
||||
Quando ativado, o OpenClaw:
|
||||
|
||||
- ignora TTS se a resposta já contiver mídia ou uma diretiva `MEDIA:`.
|
||||
- ignora respostas muito curtas (< 10 caracteres).
|
||||
- resume respostas longas quando habilitado usando `agents.defaults.model.primary` (ou `summaryModel`).
|
||||
- resume respostas longas, quando ativado, usando `agents.defaults.model.primary` (ou `summaryModel`).
|
||||
- anexa o áudio gerado à resposta.
|
||||
|
||||
Se a resposta exceder `maxLength` e o resumo estiver desativado (ou não houver chave de API para o
|
||||
@ -395,31 +395,29 @@ será ignorado e a resposta de texto normal será enviada.
|
||||
## Diagrama de fluxo
|
||||
|
||||
```
|
||||
Reply -> TTS enabled?
|
||||
no -> send text
|
||||
yes -> has media / MEDIA: / short?
|
||||
yes -> send text
|
||||
no -> length > limit?
|
||||
no -> TTS -> attach audio
|
||||
yes -> summary enabled?
|
||||
no -> send text
|
||||
yes -> summarize (summaryModel or agents.defaults.model.primary)
|
||||
-> TTS -> attach audio
|
||||
Resposta -> TTS ativado?
|
||||
não -> enviar texto
|
||||
sim -> tem mídia / MEDIA: / curta?
|
||||
sim -> enviar texto
|
||||
não -> comprimento > limite?
|
||||
não -> TTS -> anexar áudio
|
||||
sim -> resumo ativado?
|
||||
não -> enviar texto
|
||||
sim -> resumir (summaryModel ou agents.defaults.model.primary)
|
||||
-> TTS -> anexar áudio
|
||||
```
|
||||
|
||||
## Uso do comando de barra
|
||||
## Uso do comando slash
|
||||
|
||||
Há um único comando: `/tts`.
|
||||
Consulte [Comandos de barra](/tools/slash-commands) para detalhes de habilitação.
|
||||
Veja [Comandos slash](/pt-BR/tools/slash-commands) para detalhes de ativação.
|
||||
|
||||
Observação sobre o Discord: `/tts` é um comando nativo do Discord, então o OpenClaw registra
|
||||
`/voice` como comando nativo lá. O texto `/tts ...` ainda funciona.
|
||||
Observação para Discord: `/tts` é um comando integrado do Discord, então o OpenClaw registra
|
||||
`/voice` como o comando nativo lá. O texto `/tts ...` ainda funciona.
|
||||
|
||||
```
|
||||
/tts off
|
||||
/tts always
|
||||
/tts inbound
|
||||
/tts tagged
|
||||
/tts on
|
||||
/tts status
|
||||
/tts provider openai
|
||||
/tts limit 2000
|
||||
@ -429,16 +427,18 @@ Observação sobre o Discord: `/tts` é um comando nativo do Discord, então o O
|
||||
|
||||
Observações:
|
||||
|
||||
- Os comandos exigem um remetente autorizado (as regras de allowlist/proprietário continuam valendo).
|
||||
- `commands.text` ou o registro de comandos nativos devem estar habilitados.
|
||||
- `off|always|inbound|tagged` são alternâncias por sessão (`/tts on` é um alias para `/tts always`).
|
||||
- `limit` e `summary` são armazenados em preferências locais, não na configuração principal.
|
||||
- `/tts audio` gera uma resposta de áudio única (não ativa o TTS).
|
||||
- Os comandos exigem um remetente autorizado (regras de allowlist/proprietário ainda se aplicam).
|
||||
- `commands.text` ou o registro de comando nativo precisa estar ativado.
|
||||
- A configuração `messages.tts.auto` aceita `off|always|inbound|tagged`.
|
||||
- `/tts on` grava a preferência local de TTS como `always`; `/tts off` a grava como `off`.
|
||||
- Use a configuração quando quiser padrões `inbound` ou `tagged`.
|
||||
- `limit` e `summary` são armazenados nas preferências locais, não na configuração principal.
|
||||
- `/tts audio` gera uma resposta de áudio pontual (não ativa o TTS).
|
||||
- `/tts status` inclui visibilidade de fallback para a tentativa mais recente:
|
||||
- fallback com sucesso: `Fallback: <primary> -> <used>` mais `Attempts: ...`
|
||||
- falha: `Error: ...` mais `Attempts: ...`
|
||||
- diagnósticos detalhados: `Attempt details: provider:outcome(reasonCode) latency`
|
||||
- Falhas de API da OpenAI e da ElevenLabs agora incluem detalhes de erro do provedor já analisados e o id da solicitação (quando retornado pelo provedor), e isso aparece em erros/logs de TTS.
|
||||
- Falhas de API da OpenAI e da ElevenLabs agora incluem detalhes de erro do provedor analisados e o id da solicitação (quando retornado pelo provedor), o que é exibido em erros/logs de TTS.
|
||||
|
||||
## Ferramenta do agente
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user