wip(docs): i18n (#12681)
This commit is contained in:
66
packages/web/src/content/docs/pt-br/1-0.mdx
Normal file
66
packages/web/src/content/docs/pt-br/1-0.mdx
Normal file
@@ -0,0 +1,66 @@
|
||||
---
|
||||
title: Migrando para 1.0
|
||||
description: O que há de novo no OpenCode 1.0.
|
||||
---
|
||||
|
||||
OpenCode 1.0 é uma reescrita completa do TUI.
|
||||
|
||||
Mudamos do TUI baseado em go+bubbletea, que tinha problemas de desempenho e capacidade, para um framework interno (OpenTUI) escrito em zig+solidjs.
|
||||
|
||||
O novo TUI funciona como o antigo, pois se conecta ao mesmo servidor opencode.
|
||||
|
||||
---
|
||||
|
||||
## Atualizando
|
||||
|
||||
Você não deve ser atualizado automaticamente para 1.0 se estiver usando uma versão anterior. No entanto, algumas versões mais antigas do OpenCode sempre pegam a mais recente.
|
||||
|
||||
Para atualizar manualmente, execute
|
||||
|
||||
```bash
|
||||
$ opencode upgrade 1.0.0
|
||||
```
|
||||
|
||||
Para reverter para 0.x, execute
|
||||
|
||||
```bash
|
||||
$ opencode upgrade 0.15.31
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Mudanças na UX
|
||||
|
||||
O histórico da sessão está mais comprimido, mostrando apenas os detalhes completos da edição e da ferramenta bash.
|
||||
|
||||
Adicionamos uma barra de comandos pela qual quase tudo flui. Pressione ctrl+p para abri-la em qualquer contexto e veja tudo o que você pode fazer.
|
||||
|
||||
Adicionada uma barra lateral de sessão (pode ser alternada) com informações úteis.
|
||||
|
||||
Removemos algumas funcionalidades das quais não tínhamos certeza se alguém realmente usava. Se algo importante estiver faltando, por favor, abra uma issue e nós adicionaremos rapidamente.
|
||||
|
||||
---
|
||||
|
||||
## Mudanças que quebram compatibilidade
|
||||
|
||||
### Teclas de atalho renomeadas
|
||||
|
||||
- messages_revert -> messages_undo
|
||||
- switch_agent -> agent_cycle
|
||||
- switch_agent_reverse -> agent_cycle_reverse
|
||||
- switch_mode -> agent_cycle
|
||||
- switch_mode_reverse -> agent_cycle_reverse
|
||||
|
||||
### Teclas de atalho removidas
|
||||
|
||||
- messages_layout_toggle
|
||||
- messages_next
|
||||
- messages_previous
|
||||
- file_diff_toggle
|
||||
- file_search
|
||||
- file_close
|
||||
- file_list
|
||||
- app_help
|
||||
- project_init
|
||||
- tool_details
|
||||
- thinking_blocks
|
||||
156
packages/web/src/content/docs/pt-br/acp.mdx
Normal file
156
packages/web/src/content/docs/pt-br/acp.mdx
Normal file
@@ -0,0 +1,156 @@
|
||||
---
|
||||
title: Suporte ACP
|
||||
description: Use OpenCode em qualquer editor compatível com ACP.
|
||||
---
|
||||
|
||||
OpenCode suporta o [Agent Client Protocol](https://agentclientprotocol.com) ou (ACP), permitindo que você o utilize diretamente em editores e IDEs compatíveis.
|
||||
|
||||
:::tip
|
||||
Para uma lista de editores e ferramentas que suportam ACP, confira o [relatório de progresso do ACP](https://zed.dev/blog/acp-progress-report#available-now).
|
||||
:::
|
||||
|
||||
ACP é um protocolo aberto que padroniza a comunicação entre editores de código e agentes de codificação de IA.
|
||||
|
||||
---
|
||||
|
||||
## Configurar
|
||||
|
||||
Para usar OpenCode via ACP, configure seu editor para executar o comando `opencode acp`.
|
||||
|
||||
O comando inicia o OpenCode como um subprocesso compatível com ACP que se comunica com seu editor via JSON-RPC através do stdio.
|
||||
|
||||
Abaixo estão exemplos para editores populares que suportam ACP.
|
||||
|
||||
---
|
||||
|
||||
### Zed
|
||||
|
||||
Adicione à sua configuração do [Zed](https://zed.dev) (`~/.config/zed/settings.json`):
|
||||
|
||||
```json title="~/.config/zed/settings.json"
|
||||
{
|
||||
"agent_servers": {
|
||||
"OpenCode": {
|
||||
"command": "opencode",
|
||||
"args": ["acp"]
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Para abri-lo, use a ação `agent: new thread` na **Paleta de Comandos**.
|
||||
|
||||
Você também pode vincular um atalho de teclado editando seu `keymap.json`:
|
||||
|
||||
```json title="keymap.json"
|
||||
[
|
||||
{
|
||||
"bindings": {
|
||||
"cmd-alt-o": [
|
||||
"agent::NewExternalAgentThread",
|
||||
{
|
||||
"agent": {
|
||||
"custom": {
|
||||
"name": "OpenCode",
|
||||
"command": {
|
||||
"command": "opencode",
|
||||
"args": ["acp"]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### IDEs JetBrains
|
||||
|
||||
Adicione ao seu acp.json do [JetBrains IDE](https://www.jetbrains.com/) de acordo com a [documentação](https://www.jetbrains.com/help/ai-assistant/acp.html):
|
||||
|
||||
```json title="acp.json"
|
||||
{
|
||||
"agent_servers": {
|
||||
"OpenCode": {
|
||||
"command": "/absolute/path/bin/opencode",
|
||||
"args": ["acp"]
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Para abri-lo, use o novo agente 'OpenCode' no seletor de agentes do AI Chat.
|
||||
|
||||
---
|
||||
|
||||
### Avante.nvim
|
||||
|
||||
Adicione à sua configuração do [Avante.nvim](https://github.com/yetone/avante.nvim):
|
||||
|
||||
```lua
|
||||
{
|
||||
acp_providers = {
|
||||
["opencode"] = {
|
||||
command = "opencode",
|
||||
args = { "acp" }
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Se você precisar passar variáveis de ambiente:
|
||||
|
||||
```lua {6-8}
|
||||
{
|
||||
acp_providers = {
|
||||
["opencode"] = {
|
||||
command = "opencode",
|
||||
args = { "acp" },
|
||||
env = {
|
||||
OPENCODE_API_KEY = os.getenv("OPENCODE_API_KEY")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### CodeCompanion.nvim
|
||||
|
||||
Para usar OpenCode como um agente ACP no [CodeCompanion.nvim](https://github.com/olimorris/codecompanion.nvim), adicione o seguinte à sua configuração do Neovim:
|
||||
|
||||
```lua
|
||||
require("codecompanion").setup({
|
||||
interactions = {
|
||||
chat = {
|
||||
adapter = {
|
||||
name = "opencode",
|
||||
model = "claude-sonnet-4",
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
```
|
||||
|
||||
Esta configuração configura o CodeCompanion para usar OpenCode como o agente ACP para chat.
|
||||
|
||||
Se você precisar passar variáveis de ambiente (como `OPENCODE_API_KEY`), consulte [Configurando Adaptadores: Variáveis de Ambiente](https://codecompanion.olimorris.dev/getting-started#setting-an-api-key) na documentação do CodeCompanion.nvim para detalhes completos.
|
||||
|
||||
## Suporte
|
||||
|
||||
OpenCode funciona da mesma forma via ACP como funciona no terminal. Todos os recursos são suportados:
|
||||
|
||||
:::note
|
||||
Alguns comandos de barra integrados, como `/undo` e `/redo`, atualmente não são suportados.
|
||||
:::
|
||||
|
||||
- Ferramentas integradas (operações de arquivo, comandos de terminal, etc.)
|
||||
- Ferramentas personalizadas e comandos de barra
|
||||
- Servidores MCP configurados na sua configuração do OpenCode
|
||||
- Regras específicas do projeto do `AGENTS.md`
|
||||
- Formatadores e linters personalizados
|
||||
- Sistema de agentes e permissões
|
||||
747
packages/web/src/content/docs/pt-br/agents.mdx
Normal file
747
packages/web/src/content/docs/pt-br/agents.mdx
Normal file
@@ -0,0 +1,747 @@
|
||||
---
|
||||
title: Agentes
|
||||
description: Configure e use agentes especializados.
|
||||
---
|
||||
|
||||
Agentes são assistentes de IA especializados que podem ser configurados para tarefas e fluxos de trabalho específicos. Eles permitem que você crie ferramentas focadas com prompts, modelos e acesso a ferramentas personalizados.
|
||||
|
||||
:::tip
|
||||
Use o agente de planejamento para analisar código e revisar sugestões sem fazer alterações no código.
|
||||
:::
|
||||
|
||||
Você pode alternar entre agentes durante uma sessão ou invocá-los com a menção `@`.
|
||||
|
||||
---
|
||||
|
||||
## Tipos
|
||||
|
||||
Existem dois tipos de agentes no OpenCode; agentes primários e subagentes.
|
||||
|
||||
---
|
||||
|
||||
### Agentes primários
|
||||
|
||||
Agentes primários são os principais assistentes com os quais você interage diretamente. Você pode alternar entre eles usando a tecla **Tab** ou sua tecla de atalho configurada `switch_agent`. Esses agentes lidam com sua conversa principal. O acesso às ferramentas é configurado por meio de permissões — por exemplo, Build tem todas as ferramentas habilitadas, enquanto Plan é restrito.
|
||||
|
||||
:::tip
|
||||
Você pode usar a tecla **Tab** para alternar entre agentes primários durante uma sessão.
|
||||
:::
|
||||
|
||||
OpenCode vem com dois agentes primários integrados, **Build** e **Plan**. Vamos
|
||||
ver isso abaixo.
|
||||
|
||||
---
|
||||
|
||||
### Subagentes
|
||||
|
||||
Subagentes são assistentes especializados que agentes primários podem invocar para tarefas específicas. Você também pode invocá-los manualmente mencionando-os com **@** em suas mensagens.
|
||||
|
||||
OpenCode vem com dois subagentes integrados, **General** e **Explore**. Vamos ver isso abaixo.
|
||||
|
||||
---
|
||||
|
||||
## Integrado
|
||||
|
||||
OpenCode vem com dois agentes primários integrados e dois subagentes integrados.
|
||||
|
||||
---
|
||||
|
||||
### Usar build
|
||||
|
||||
_Modo_: `primary`
|
||||
|
||||
Build é o agente primário **padrão** com todas as ferramentas habilitadas. Este é o agente padrão para trabalho de desenvolvimento onde você precisa de acesso total a operações de arquivo e comandos do sistema.
|
||||
|
||||
---
|
||||
|
||||
### Usar plan
|
||||
|
||||
_Modo_: `primary`
|
||||
|
||||
Um agente restrito projetado para planejamento e análise. Usamos um sistema de permissões para lhe dar mais controle e evitar alterações não intencionais.
|
||||
Por padrão, todos os seguintes estão configurados para `ask`:
|
||||
|
||||
- `file edits`: Todas as gravações, patches e edições
|
||||
- `bash`: Todos os comandos bash
|
||||
|
||||
Este agente é útil quando você deseja que o LLM analise código, sugira alterações ou crie planos sem fazer modificações reais em seu código.
|
||||
|
||||
---
|
||||
|
||||
### Usar general
|
||||
|
||||
_Modo_: `subagent`
|
||||
|
||||
Um agente de propósito geral para pesquisar questões complexas e executar tarefas em múltiplas etapas. Tem acesso total às ferramentas (exceto todo), portanto, pode fazer alterações em arquivos quando necessário. Use isso para executar várias unidades de trabalho em paralelo.
|
||||
|
||||
---
|
||||
|
||||
### Usar explore
|
||||
|
||||
_Modo_: `subagent`
|
||||
|
||||
Um agente rápido e somente leitura para explorar bases de código. Não pode modificar arquivos. Use isso quando você precisar encontrar rapidamente arquivos por padrões, pesquisar código por palavras-chave ou responder perguntas sobre a base de código.
|
||||
|
||||
---
|
||||
|
||||
### Usar compaction
|
||||
|
||||
_Modo_: `primary`
|
||||
|
||||
Agente de sistema oculto que compacta longos contextos em um resumo menor. Ele é executado automaticamente quando necessário e não é selecionável na interface.
|
||||
|
||||
---
|
||||
|
||||
### Usar title
|
||||
|
||||
_Modo_: `primary`
|
||||
|
||||
Agente de sistema oculto que gera títulos curtos para sessões. Ele é executado automaticamente e não é selecionável na interface.
|
||||
|
||||
---
|
||||
|
||||
### Usar summary
|
||||
|
||||
_Modo_: `primary`
|
||||
|
||||
Agente de sistema oculto que cria resumos de sessões. Ele é executado automaticamente e não é selecionável na interface.
|
||||
|
||||
---
|
||||
|
||||
## Uso
|
||||
|
||||
1. Para agentes primários, use a tecla **Tab** para alternar entre eles durante uma sessão. Você também pode usar sua tecla de atalho configurada `switch_agent`.
|
||||
|
||||
2. Subagentes podem ser invocados:
|
||||
- **Automaticamente** por agentes primários para tarefas especializadas com base em suas descrições.
|
||||
- Manualmente mencionando um subagente em sua mensagem. Por exemplo.
|
||||
|
||||
```txt frame="none"
|
||||
@general help me search for this function
|
||||
```
|
||||
|
||||
3. **Navegação entre sessões**: Quando subagentes criam suas próprias sessões filhas, você pode navegar entre a sessão pai e todas as sessões filhas usando:
|
||||
- **\<Leader>+Right** (ou sua tecla de atalho configurada `session_child_cycle`) para alternar para frente através de pai → child1 → child2 → ... → pai
|
||||
- **\<Leader>+Left** (ou sua tecla de atalho configurada `session_child_cycle_reverse`) para alternar para trás através de pai ← child1 ← child2 ← ... ← pai
|
||||
|
||||
Isso permite que você mude perfeitamente entre a conversa principal e o trabalho especializado do subagente.
|
||||
|
||||
---
|
||||
|
||||
## Configurar
|
||||
|
||||
Você pode personalizar os agentes integrados ou criar os seus próprios através da configuração. Os agentes podem ser configurados de duas maneiras:
|
||||
|
||||
---
|
||||
|
||||
### JSON
|
||||
|
||||
Configure os agentes em seu arquivo de configuração `opencode.json`:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"agent": {
|
||||
"build": {
|
||||
"mode": "primary",
|
||||
"model": "anthropic/claude-sonnet-4-20250514",
|
||||
"prompt": "{file:./prompts/build.txt}",
|
||||
"tools": {
|
||||
"write": true,
|
||||
"edit": true,
|
||||
"bash": true
|
||||
}
|
||||
},
|
||||
"plan": {
|
||||
"mode": "primary",
|
||||
"model": "anthropic/claude-haiku-4-20250514",
|
||||
"tools": {
|
||||
"write": false,
|
||||
"edit": false,
|
||||
"bash": false
|
||||
}
|
||||
},
|
||||
"code-reviewer": {
|
||||
"description": "Revisa o código em busca de melhores práticas e problemas potenciais",
|
||||
"mode": "subagent",
|
||||
"model": "anthropic/claude-sonnet-4-20250514",
|
||||
"prompt": "Você é um revisor de código. Foque em segurança, desempenho e manutenibilidade.",
|
||||
"tools": {
|
||||
"write": false,
|
||||
"edit": false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Markdown
|
||||
|
||||
Você também pode definir agentes usando arquivos markdown. Coloque-os em:
|
||||
|
||||
- Global: `~/.config/opencode/agents/`
|
||||
- Por projeto: `.opencode/agents/`
|
||||
|
||||
```markdown title="~/.config/opencode/agents/review.md"
|
||||
---
|
||||
description: Revisa o código em busca de qualidade e melhores práticas
|
||||
mode: subagent
|
||||
model: anthropic/claude-sonnet-4-20250514
|
||||
temperature: 0.1
|
||||
tools:
|
||||
write: false
|
||||
edit: false
|
||||
bash: false
|
||||
---
|
||||
|
||||
Você está no modo de revisão de código. Foque em:
|
||||
|
||||
- Qualidade do código e melhores práticas
|
||||
- Bugs potenciais e casos extremos
|
||||
- Implicações de desempenho
|
||||
- Considerações de segurança
|
||||
|
||||
Forneça feedback construtivo sem fazer alterações diretas.
|
||||
```
|
||||
|
||||
O nome do arquivo markdown se torna o nome do agente. Por exemplo, `review.md` cria um agente `review`.
|
||||
|
||||
---
|
||||
|
||||
## Opções
|
||||
|
||||
Vamos analisar essas opções de configuração em detalhes.
|
||||
|
||||
---
|
||||
|
||||
### Descrição
|
||||
|
||||
Use a opção `description` para fornecer uma breve descrição do que o agente faz e quando usá-lo.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"agent": {
|
||||
"review": {
|
||||
"description": "Revisa o código em busca de melhores práticas e problemas potenciais"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Esta é uma opção de configuração **obrigatória**.
|
||||
|
||||
---
|
||||
|
||||
### Temperatura
|
||||
|
||||
Controle a aleatoriedade e criatividade das respostas do LLM com a configuração `temperature`.
|
||||
|
||||
Valores mais baixos tornam as respostas mais focadas e determinísticas, enquanto valores mais altos aumentam a criatividade e variabilidade.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"agent": {
|
||||
"plan": {
|
||||
"temperature": 0.1
|
||||
},
|
||||
"creative": {
|
||||
"temperature": 0.8
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Os valores de temperatura geralmente variam de 0.0 a 1.0:
|
||||
|
||||
- **0.0-0.2**: Respostas muito focadas e determinísticas, ideais para análise de código e planejamento
|
||||
- **0.3-0.5**: Respostas equilibradas com alguma criatividade, boas para tarefas de desenvolvimento gerais
|
||||
- **0.6-1.0**: Respostas mais criativas e variadas, úteis para brainstorming e exploração
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"agent": {
|
||||
"analyze": {
|
||||
"temperature": 0.1,
|
||||
"prompt": "{file:./prompts/analysis.txt}"
|
||||
},
|
||||
"build": {
|
||||
"temperature": 0.3
|
||||
},
|
||||
"brainstorm": {
|
||||
"temperature": 0.7,
|
||||
"prompt": "{file:./prompts/creative.txt}"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Se nenhuma temperatura for especificada, o OpenCode usa padrões específicos do modelo; tipicamente 0 para a maioria dos modelos, 0.55 para modelos Qwen.
|
||||
|
||||
---
|
||||
|
||||
### Máximo de etapas
|
||||
|
||||
Controle o número máximo de iterações que um agente pode realizar antes de ser forçado a responder apenas com texto. Isso permite que usuários que desejam controlar custos definam um limite nas ações do agente.
|
||||
|
||||
Se isso não for definido, o agente continuará a iterar até que o modelo decida parar ou o usuário interrompa a sessão.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"agent": {
|
||||
"quick-thinker": {
|
||||
"description": "Raciocínio rápido com iterações limitadas",
|
||||
"prompt": "Você é um pensador rápido. Resolva problemas com o mínimo de etapas.",
|
||||
"steps": 5
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Quando o limite é alcançado, o agente recebe um prompt especial do sistema instruindo-o a responder com um resumo de seu trabalho e tarefas recomendadas restantes.
|
||||
|
||||
:::caution
|
||||
O campo legado `maxSteps` está obsoleto. Use `steps` em vez disso.
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
### Desativar
|
||||
|
||||
Defina como `true` para desativar o agente.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"agent": {
|
||||
"review": {
|
||||
"disable": true
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Prompt
|
||||
|
||||
Especifique um arquivo de prompt do sistema personalizado para este agente com a configuração `prompt`. O arquivo de prompt deve conter instruções específicas para o propósito do agente.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"agent": {
|
||||
"review": {
|
||||
"prompt": "{file:./prompts/code-review.txt}"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Este caminho é relativo ao local onde o arquivo de configuração está localizado. Portanto, isso funciona tanto para a configuração global do OpenCode quanto para a configuração específica do projeto.
|
||||
|
||||
---
|
||||
|
||||
### Modelo
|
||||
|
||||
Use a configuração `model` para substituir o modelo para este agente. Útil para usar diferentes modelos otimizados para diferentes tarefas. Por exemplo, um modelo mais rápido para planejamento, um modelo mais capaz para implementação.
|
||||
|
||||
:::tip
|
||||
Se você não especificar um modelo, os agentes primários usam o [modelo configurado globalmente](/docs/config#models) enquanto subagentes usarão o modelo do agente primário que invocou o subagente.
|
||||
:::
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"agent": {
|
||||
"plan": {
|
||||
"model": "anthropic/claude-haiku-4-20250514"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
O ID do modelo em sua configuração do OpenCode usa o formato `provider/model-id`. Por exemplo, se você estiver usando [OpenCode Zen](/docs/zen), você usaria `opencode/gpt-5.1-codex` para GPT 5.1 Codex.
|
||||
|
||||
---
|
||||
|
||||
### Ferramentas
|
||||
|
||||
Controle quais ferramentas estão disponíveis neste agente com a configuração `tools`. Você pode habilitar ou desabilitar ferramentas específicas definindo-as como `true` ou `false`.
|
||||
|
||||
```json title="opencode.json" {3-6,9-12}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"tools": {
|
||||
"write": true,
|
||||
"bash": true
|
||||
},
|
||||
"agent": {
|
||||
"plan": {
|
||||
"tools": {
|
||||
"write": false,
|
||||
"bash": false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
:::note
|
||||
A configuração específica do agente substitui a configuração global.
|
||||
:::
|
||||
|
||||
Você também pode usar curingas para controlar várias ferramentas ao mesmo tempo. Por exemplo, para desativar todas as ferramentas de um servidor MCP:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"agent": {
|
||||
"readonly": {
|
||||
"tools": {
|
||||
"mymcp_*": false,
|
||||
"write": false,
|
||||
"edit": false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
[Saiba mais sobre ferramentas](/docs/tools).
|
||||
|
||||
---
|
||||
|
||||
### Permissões
|
||||
|
||||
Você pode configurar permissões para gerenciar quais ações um agente pode realizar. Atualmente, as permissões para as ferramentas `edit`, `bash` e `webfetch` podem ser configuradas para:
|
||||
|
||||
- `"ask"` — Solicitar aprovação antes de executar a ferramenta
|
||||
- `"allow"` — Permitir todas as operações sem aprovação
|
||||
- `"deny"` — Desativar a ferramenta
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"edit": "deny"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Você pode substituir essas permissões por agente.
|
||||
|
||||
```json title="opencode.json" {3-5,8-10}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"edit": "deny"
|
||||
},
|
||||
"agent": {
|
||||
"build": {
|
||||
"permission": {
|
||||
"edit": "ask"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Você também pode definir permissões em agentes Markdown.
|
||||
|
||||
```markdown title="~/.config/opencode/agents/review.md"
|
||||
---
|
||||
description: Revisão de código sem edições
|
||||
mode: subagent
|
||||
permission:
|
||||
edit: deny
|
||||
bash:
|
||||
"*": ask
|
||||
"git diff": allow
|
||||
"git log*": allow
|
||||
"grep *": allow
|
||||
webfetch: deny
|
||||
---
|
||||
|
||||
Apenas analise o código e sugira alterações.
|
||||
```
|
||||
|
||||
Você pode definir permissões para comandos bash específicos.
|
||||
|
||||
```json title="opencode.json" {7}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"agent": {
|
||||
"build": {
|
||||
"permission": {
|
||||
"bash": {
|
||||
"git push": "ask",
|
||||
"grep *": "allow"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Isso pode aceitar um padrão glob.
|
||||
|
||||
```json title="opencode.json" {7}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"agent": {
|
||||
"build": {
|
||||
"permission": {
|
||||
"bash": {
|
||||
"git *": "ask"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
E você também pode usar o curinga `*` para gerenciar permissões para todos os comandos.
|
||||
Como a última regra correspondente tem precedência, coloque o curinga `*` primeiro e regras específicas depois.
|
||||
|
||||
```json title="opencode.json" {8}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"agent": {
|
||||
"build": {
|
||||
"permission": {
|
||||
"bash": {
|
||||
"*": "ask",
|
||||
"git status *": "allow"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
[Saiba mais sobre permissões](/docs/permissions).
|
||||
|
||||
---
|
||||
|
||||
### Modo
|
||||
|
||||
Controle o modo do agente com a configuração `mode`. A opção `mode` é usada para determinar como o agente pode ser usado.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"agent": {
|
||||
"review": {
|
||||
"mode": "subagent"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
A opção `mode` pode ser definida como `primary`, `subagent` ou `all`. Se nenhum `mode` for especificado, o padrão é `all`.
|
||||
|
||||
---
|
||||
|
||||
### Oculto
|
||||
|
||||
Oculte um subagente do menu de autocompletar `@` com `hidden: true`. Útil para subagentes internos que devem ser invocados apenas programaticamente por outros agentes através da ferramenta Task.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"agent": {
|
||||
"internal-helper": {
|
||||
"mode": "subagent",
|
||||
"hidden": true
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Isso afeta apenas a visibilidade do usuário no menu de autocompletar. Agentes ocultos ainda podem ser invocados pelo modelo através da ferramenta Task, se as permissões permitirem.
|
||||
|
||||
:::note
|
||||
Aplica-se apenas a agentes `mode: subagent`.
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
### Permissões de tarefa
|
||||
|
||||
Controle quais subagentes um agente pode invocar através da ferramenta Task com `permission.task`. Usa padrões globais para correspondência flexível.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"agent": {
|
||||
"orchestrator": {
|
||||
"mode": "primary",
|
||||
"permission": {
|
||||
"task": {
|
||||
"*": "deny",
|
||||
"orchestrator-*": "allow",
|
||||
"code-reviewer": "ask"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Quando definido como `deny`, o subagente é removido da descrição da ferramenta Task completamente, então o modelo não tentará invocá-lo.
|
||||
|
||||
:::tip
|
||||
As regras são avaliadas em ordem, e a **última regra correspondente vence**. No exemplo acima, `orchestrator-planner` corresponde a ambos `*` (deny) e `orchestrator-*` (allow), mas como `orchestrator-*` vem depois de `*`, o resultado é `allow`.
|
||||
:::
|
||||
|
||||
:::tip
|
||||
Os usuários sempre podem invocar qualquer subagente diretamente através do menu de autocompletar `@`, mesmo que as permissões de tarefa do agente o neguem.
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
### Cor
|
||||
|
||||
Personalize a aparência visual do agente na interface com a opção `color`. Isso afeta como o agente aparece na interface.
|
||||
|
||||
Use uma cor hex válida (por exemplo, `#FF5733`) ou cor de tema: `primary`, `secondary`, `accent`, `success`, `warning`, `error`, `info`.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"agent": {
|
||||
"creative": {
|
||||
"color": "#ff6b6b"
|
||||
},
|
||||
"code-reviewer": {
|
||||
"color": "accent"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Top P
|
||||
|
||||
Controle a diversidade das respostas com a opção `top_p`. Alternativa à temperatura para controlar a aleatoriedade.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"agent": {
|
||||
"brainstorm": {
|
||||
"top_p": 0.9
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Os valores variam de 0.0 a 1.0. Valores mais baixos são mais focados, valores mais altos são mais diversos.
|
||||
|
||||
---
|
||||
|
||||
### Adicional
|
||||
|
||||
Quaisquer outras opções que você especificar em sua configuração de agente serão **passadas diretamente** para o provedor como opções de modelo. Isso permite que você use recursos e parâmetros específicos do provedor.
|
||||
|
||||
Por exemplo, com os modelos de raciocínio da OpenAI, você pode controlar o esforço de raciocínio:
|
||||
|
||||
```json title="opencode.json" {6,7}
|
||||
{
|
||||
"agent": {
|
||||
"deep-thinker": {
|
||||
"description": "Agente que usa alto esforço de raciocínio para problemas complexos",
|
||||
"model": "openai/gpt-5",
|
||||
"reasoningEffort": "high",
|
||||
"textVerbosity": "low"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Essas opções adicionais são específicas do modelo e do provedor. Verifique a documentação do seu provedor para parâmetros disponíveis.
|
||||
|
||||
:::tip
|
||||
Execute `opencode models` para ver uma lista dos modelos disponíveis.
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
## Criar agentes
|
||||
|
||||
Você pode criar novos agentes usando o seguinte comando:
|
||||
|
||||
```bash
|
||||
opencode agent create
|
||||
```
|
||||
|
||||
Este comando interativo irá:
|
||||
|
||||
1. Perguntar onde salvar o agente; global ou específico do projeto.
|
||||
2. Descrição do que o agente deve fazer.
|
||||
3. Gerar um prompt de sistema apropriado e identificador.
|
||||
4. Permitir que você selecione quais ferramentas o agente pode acessar.
|
||||
5. Finalmente, criar um arquivo markdown com a configuração do agente.
|
||||
|
||||
---
|
||||
|
||||
## Casos de uso
|
||||
|
||||
Aqui estão alguns casos de uso comuns para diferentes agentes.
|
||||
|
||||
- **Agente Build**: Trabalho de desenvolvimento completo com todas as ferramentas habilitadas
|
||||
- **Agente Plan**: Análise e planejamento sem fazer alterações
|
||||
- **Agente Review**: Revisão de código com acesso somente leitura e ferramentas de documentação
|
||||
- **Agente Debug**: Focado em investigação com ferramentas bash e de leitura habilitadas
|
||||
- **Agente Docs**: Redação de documentação com operações de arquivo, mas sem comandos do sistema
|
||||
|
||||
---
|
||||
|
||||
## Exemplos
|
||||
|
||||
Aqui estão alguns agentes de exemplo que você pode achar úteis.
|
||||
|
||||
:::tip
|
||||
Você tem um agente que gostaria de compartilhar? [Envie um PR](https://github.com/anomalyco/opencode).
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
### Agente de documentação
|
||||
|
||||
```markdown title="~/.config/opencode/agents/docs-writer.md"
|
||||
---
|
||||
description: Escreve e mantém a documentação do projeto
|
||||
mode: subagent
|
||||
tools:
|
||||
bash: false
|
||||
---
|
||||
|
||||
Você é um redator técnico. Crie documentação clara e abrangente.
|
||||
|
||||
Foque em:
|
||||
|
||||
- Explicações claras
|
||||
- Estrutura adequada
|
||||
- Exemplos de código
|
||||
- Linguagem amigável ao usuário
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Auditor de segurança
|
||||
|
||||
```markdown title="~/.config/opencode/agents/security-auditor.md"
|
||||
---
|
||||
description: Realiza auditorias de segurança e identifica vulnerabilidades
|
||||
mode: subagent
|
||||
tools:
|
||||
write: false
|
||||
edit: false
|
||||
---
|
||||
|
||||
Você é um especialista em segurança. Foque em identificar problemas potenciais de segurança.
|
||||
|
||||
Procure por:
|
||||
|
||||
- Vulnerabilidades de validação de entrada
|
||||
- Falhas de autenticação e autorização
|
||||
- Riscos de exposição de dados
|
||||
- Vulnerabilidades de dependência
|
||||
- Problemas de segurança de configuração
|
||||
```
|
||||
601
packages/web/src/content/docs/pt-br/cli.mdx
Normal file
601
packages/web/src/content/docs/pt-br/cli.mdx
Normal file
@@ -0,0 +1,601 @@
|
||||
---
|
||||
title: CLI
|
||||
description: Opções e comandos da CLI do OpenCode.
|
||||
---
|
||||
|
||||
import { Tabs, TabItem } from "@astrojs/starlight/components"
|
||||
|
||||
A CLI do OpenCode, por padrão, inicia o [TUI](/docs/tui) quando executada sem argumentos.
|
||||
|
||||
```bash
|
||||
opencode
|
||||
```
|
||||
|
||||
Mas também aceita comandos conforme documentado nesta página. Isso permite que você interaja com o OpenCode programaticamente.
|
||||
|
||||
```bash
|
||||
opencode run "Explique como closures funcionam em JavaScript"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### tui
|
||||
|
||||
Inicie a interface de usuário do terminal do OpenCode.
|
||||
|
||||
```bash
|
||||
opencode [projeto]
|
||||
```
|
||||
|
||||
#### Flags
|
||||
|
||||
| Flag | Curto | Descrição |
|
||||
| ------------ | ----- | ------------------------------------------- |
|
||||
| `--continue` | `-c` | Continue a última sessão |
|
||||
| `--session` | `-s` | ID da sessão para continuar |
|
||||
| `--prompt` | | Prompt a ser usado |
|
||||
| `--model` | `-m` | Modelo a ser usado na forma de provedor/modelo |
|
||||
| `--agent` | | Agente a ser usado |
|
||||
| `--port` | | Porta para escutar |
|
||||
| `--hostname` | | Nome do host para escutar |
|
||||
|
||||
---
|
||||
|
||||
## Comandos
|
||||
|
||||
A CLI do OpenCode também possui os seguintes comandos.
|
||||
|
||||
---
|
||||
|
||||
### agent
|
||||
|
||||
Gerencie agentes para o OpenCode.
|
||||
|
||||
```bash
|
||||
opencode agent [comando]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### attach
|
||||
|
||||
Anexe um terminal a um servidor backend do OpenCode já em execução, iniciado via comandos `serve` ou `web`.
|
||||
|
||||
```bash
|
||||
opencode attach [url]
|
||||
```
|
||||
|
||||
Isso permite usar o TUI com um backend OpenCode remoto. Por exemplo:
|
||||
|
||||
```bash
|
||||
# Inicie o servidor backend para acesso web/móvel
|
||||
opencode web --port 4096 --hostname 0.0.0.0
|
||||
|
||||
# Em outro terminal, anexe o TUI ao backend em execução
|
||||
opencode attach http://10.20.30.40:4096
|
||||
```
|
||||
|
||||
#### Flags
|
||||
|
||||
| Flag | Curto | Descrição |
|
||||
| ----------- | ----- | -------------------------------- |
|
||||
| `--dir` | | Diretório de trabalho para iniciar o TUI |
|
||||
| `--session` | `-s` | ID da sessão para continuar |
|
||||
|
||||
---
|
||||
|
||||
#### create
|
||||
|
||||
Crie um novo agente com configuração personalizada.
|
||||
|
||||
```bash
|
||||
opencode agent create
|
||||
```
|
||||
|
||||
Este comando irá guiá-lo na criação de um novo agente com um prompt de sistema personalizado e configuração de ferramentas.
|
||||
|
||||
---
|
||||
|
||||
#### list
|
||||
|
||||
Liste todos os agentes disponíveis.
|
||||
|
||||
```bash
|
||||
opencode agent list
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### auth
|
||||
|
||||
Comando para gerenciar credenciais e login para provedores.
|
||||
|
||||
```bash
|
||||
opencode auth [comando]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### login
|
||||
|
||||
O OpenCode é alimentado pela lista de provedores em [Models.dev](https://models.dev), então você pode usar `opencode auth login` para configurar chaves de API para qualquer provedor que você gostaria de usar. Isso é armazenado em `~/.local/share/opencode/auth.json`.
|
||||
|
||||
```bash
|
||||
opencode auth login
|
||||
```
|
||||
|
||||
Quando o OpenCode é iniciado, ele carrega os provedores do arquivo de credenciais. E se houver chaves definidas em seus ambientes ou em um arquivo `.env` em seu projeto.
|
||||
|
||||
---
|
||||
|
||||
#### list
|
||||
|
||||
Lista todos os provedores autenticados conforme armazenado no arquivo de credenciais.
|
||||
|
||||
```bash
|
||||
opencode auth list
|
||||
```
|
||||
|
||||
Ou a versão curta.
|
||||
|
||||
```bash
|
||||
opencode auth ls
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### logout
|
||||
|
||||
Desconecta você de um provedor limpando-o do arquivo de credenciais.
|
||||
|
||||
```bash
|
||||
opencode auth logout
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### github
|
||||
|
||||
Gerencie o agente do GitHub para automação de repositórios.
|
||||
|
||||
```bash
|
||||
opencode github [comando]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### install
|
||||
|
||||
Instale o agente do GitHub em seu repositório.
|
||||
|
||||
```bash
|
||||
opencode github install
|
||||
```
|
||||
|
||||
Isso configura o fluxo de trabalho necessário do GitHub Actions e o guia pelo processo de configuração. [Saiba mais](/docs/github).
|
||||
|
||||
---
|
||||
|
||||
#### run
|
||||
|
||||
Execute o agente do GitHub. Isso é tipicamente usado em GitHub Actions.
|
||||
|
||||
```bash
|
||||
opencode github run
|
||||
```
|
||||
|
||||
##### Flags
|
||||
|
||||
| Flag | Descrição |
|
||||
| --------- | ------------------------------------- |
|
||||
| `--event` | Evento simulado do GitHub para executar o agente |
|
||||
| `--token` | Token de acesso pessoal do GitHub |
|
||||
|
||||
---
|
||||
|
||||
### mcp
|
||||
|
||||
Gerencie servidores do Protocolo de Contexto de Modelo.
|
||||
|
||||
```bash
|
||||
opencode mcp [comando]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### add
|
||||
|
||||
Adicione um servidor MCP à sua configuração.
|
||||
|
||||
```bash
|
||||
opencode mcp add
|
||||
```
|
||||
|
||||
Este comando irá guiá-lo na adição de um servidor MCP local ou remoto.
|
||||
|
||||
---
|
||||
|
||||
#### list
|
||||
|
||||
Liste todos os servidores MCP configurados e seu status de conexão.
|
||||
|
||||
```bash
|
||||
opencode mcp list
|
||||
```
|
||||
|
||||
Ou use a versão curta.
|
||||
|
||||
```bash
|
||||
opencode mcp ls
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### auth
|
||||
|
||||
Autentique-se com um servidor MCP habilitado para OAuth.
|
||||
|
||||
```bash
|
||||
opencode mcp auth [nome]
|
||||
```
|
||||
|
||||
Se você não fornecer um nome de servidor, será solicitado que você selecione entre os servidores disponíveis habilitados para OAuth.
|
||||
|
||||
Você também pode listar servidores habilitados para OAuth e seu status de autenticação.
|
||||
|
||||
```bash
|
||||
opencode mcp auth list
|
||||
```
|
||||
|
||||
Ou use a versão curta.
|
||||
|
||||
```bash
|
||||
opencode mcp auth ls
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### logout
|
||||
|
||||
Remova credenciais OAuth para um servidor MCP.
|
||||
|
||||
```bash
|
||||
opencode mcp logout [nome]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### debug
|
||||
|
||||
Depure problemas de conexão OAuth para um servidor MCP.
|
||||
|
||||
```bash
|
||||
opencode mcp debug <nome>
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### models
|
||||
|
||||
Liste todos os modelos disponíveis dos provedores configurados.
|
||||
|
||||
```bash
|
||||
opencode models [provedor]
|
||||
```
|
||||
|
||||
Este comando exibe todos os modelos disponíveis entre seus provedores configurados no formato `provedor/modelo`.
|
||||
|
||||
Isso é útil para descobrir o nome exato do modelo a ser usado em [sua configuração](/docs/config/).
|
||||
|
||||
Você pode opcionalmente passar um ID de provedor para filtrar modelos por esse provedor.
|
||||
|
||||
```bash
|
||||
opencode models anthropic
|
||||
```
|
||||
|
||||
#### Flags
|
||||
|
||||
| Flag | Descrição |
|
||||
| ----------- | ---------------------------------------------------------- |
|
||||
| `--refresh` | Atualiza o cache de modelos a partir do models.dev |
|
||||
| `--verbose` | Use uma saída de modelo mais detalhada (inclui metadados como custos) |
|
||||
|
||||
Use a flag `--refresh` para atualizar a lista de modelos em cache. Isso é útil quando novos modelos foram adicionados a um provedor e você deseja vê-los no OpenCode.
|
||||
|
||||
```bash
|
||||
opencode models --refresh
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### run
|
||||
|
||||
Execute o opencode em modo não interativo passando um prompt diretamente.
|
||||
|
||||
```bash
|
||||
opencode run [mensagem..]
|
||||
```
|
||||
|
||||
Isso é útil para scripts, automação ou quando você deseja uma resposta rápida sem iniciar o TUI completo. Por exemplo.
|
||||
|
||||
```bash "opencode run"
|
||||
opencode run Explique o uso de contexto em Go
|
||||
```
|
||||
|
||||
Você também pode se anexar a uma instância em execução do `opencode serve` para evitar tempos de inicialização a frio do servidor MCP em cada execução:
|
||||
|
||||
```bash
|
||||
# Inicie um servidor sem cabeça em um terminal
|
||||
opencode serve
|
||||
|
||||
# Em outro terminal, execute comandos que se anexam a ele
|
||||
opencode run --attach http://localhost:4096 "Explique async/await em JavaScript"
|
||||
```
|
||||
|
||||
#### Flags
|
||||
|
||||
| Flag | Curto | Descrição |
|
||||
| ------------ | ----- | ---------------------------------------------------------------- |
|
||||
| `--command` | | O comando a ser executado, use mensagem para argumentos |
|
||||
| `--continue` | `-c` | Continue a última sessão |
|
||||
| `--session` | `-s` | ID da sessão para continuar |
|
||||
| `--share` | | Compartilhe a sessão |
|
||||
| `--model` | `-m` | Modelo a ser usado na forma de provedor/modelo |
|
||||
| `--agent` | | Agente a ser usado |
|
||||
| `--file` | `-f` | Arquivo(s) a serem anexados à mensagem |
|
||||
| `--format` | | Formato: padrão (formatado) ou json (eventos JSON brutos) |
|
||||
| `--title` | | Título para a sessão (usa o prompt truncado se nenhum valor for fornecido) |
|
||||
| `--attach` | | Anexe a um servidor opencode em execução (por exemplo, http://localhost:4096) |
|
||||
| `--port` | | Porta para o servidor local (padrão para porta aleatória) |
|
||||
|
||||
---
|
||||
|
||||
### serve
|
||||
|
||||
Inicie um servidor OpenCode sem cabeça para acesso à API. Confira a [documentação do servidor](/docs/server) para a interface HTTP completa.
|
||||
|
||||
```bash
|
||||
opencode serve
|
||||
```
|
||||
|
||||
Isso inicia um servidor HTTP que fornece acesso à funcionalidade do opencode sem a interface TUI. Defina `OPENCODE_SERVER_PASSWORD` para habilitar a autenticação básica HTTP (o nome de usuário padrão é `opencode`).
|
||||
|
||||
#### Flags
|
||||
|
||||
| Flag | Descrição |
|
||||
| ------------ | ------------------------------------------- |
|
||||
| `--port` | Porta para escutar |
|
||||
| `--hostname` | Nome do host para escutar |
|
||||
| `--mdns` | Habilitar descoberta mDNS |
|
||||
| `--cors` | Origem(ns) de navegador adicionais para permitir CORS |
|
||||
|
||||
---
|
||||
|
||||
### session
|
||||
|
||||
Gerencie sessões do OpenCode.
|
||||
|
||||
```bash
|
||||
opencode session [comando]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### list
|
||||
|
||||
Liste todas as sessões do OpenCode.
|
||||
|
||||
```bash
|
||||
opencode session list
|
||||
```
|
||||
|
||||
##### Flags
|
||||
|
||||
| Flag | Curto | Descrição |
|
||||
| ------------- | ----- | ---------------------------------- |
|
||||
| `--max-count` | `-n` | Limitar às N sessões mais recentes |
|
||||
| `--format` | | Formato de saída: tabela ou json (tabela) |
|
||||
|
||||
---
|
||||
|
||||
### stats
|
||||
|
||||
Mostre o uso de tokens e estatísticas de custo para suas sessões do OpenCode.
|
||||
|
||||
```bash
|
||||
opencode stats
|
||||
```
|
||||
|
||||
#### Flags
|
||||
|
||||
| Flag | Descrição |
|
||||
| ----------- | ------------------------------------------------------------------------- |
|
||||
| `--days` | Mostre estatísticas dos últimos N dias (todo o tempo) |
|
||||
| `--tools` | Número de ferramentas a serem mostradas (todas) |
|
||||
| `--models` | Mostre a divisão do uso de modelos (oculto por padrão). Passe um número para mostrar os N principais |
|
||||
| `--project` | Filtrar por projeto (todos os projetos, string vazia: projeto atual) |
|
||||
|
||||
---
|
||||
|
||||
### export
|
||||
|
||||
Exporte dados da sessão como JSON.
|
||||
|
||||
```bash
|
||||
opencode export [sessionID]
|
||||
```
|
||||
|
||||
Se você não fornecer um ID de sessão, será solicitado que você selecione entre as sessões disponíveis.
|
||||
|
||||
---
|
||||
|
||||
### import
|
||||
|
||||
Importe dados da sessão de um arquivo JSON ou URL de compartilhamento do OpenCode.
|
||||
|
||||
```bash
|
||||
opencode import <arquivo>
|
||||
```
|
||||
|
||||
Você pode importar de um arquivo local ou de uma URL de compartilhamento do OpenCode.
|
||||
|
||||
```bash
|
||||
opencode import session.json
|
||||
opencode import https://opncd.ai/s/abc123
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### web
|
||||
|
||||
Inicie um servidor OpenCode sem cabeça com uma interface web.
|
||||
|
||||
```bash
|
||||
opencode web
|
||||
```
|
||||
|
||||
Isso inicia um servidor HTTP e abre um navegador para acessar o OpenCode através de uma interface web. Defina `OPENCODE_SERVER_PASSWORD` para habilitar a autenticação básica HTTP (o nome de usuário padrão é `opencode`).
|
||||
|
||||
#### Flags
|
||||
|
||||
| Flag | Descrição |
|
||||
| ------------ | ------------------------------------------- |
|
||||
| `--port` | Porta para escutar |
|
||||
| `--hostname` | Nome do host para escutar |
|
||||
| `--mdns` | Habilitar descoberta mDNS |
|
||||
| `--cors` | Origem(ns) de navegador adicionais para permitir CORS |
|
||||
|
||||
---
|
||||
|
||||
### acp
|
||||
|
||||
Inicie um servidor ACP (Protocolo de Cliente de Agente).
|
||||
|
||||
```bash
|
||||
opencode acp
|
||||
```
|
||||
|
||||
Este comando inicia um servidor ACP que se comunica via stdin/stdout usando nd-JSON.
|
||||
|
||||
#### Flags
|
||||
|
||||
| Flag | Descrição |
|
||||
| ------------ | ------------------- |
|
||||
| `--cwd` | Diretório de trabalho |
|
||||
| `--port` | Porta para escutar |
|
||||
| `--hostname` | Nome do host para escutar |
|
||||
|
||||
---
|
||||
|
||||
### uninstall
|
||||
|
||||
Desinstale o OpenCode e remova todos os arquivos relacionados.
|
||||
|
||||
```bash
|
||||
opencode uninstall
|
||||
```
|
||||
|
||||
#### Flags
|
||||
|
||||
| Flag | Curto | Descrição |
|
||||
| --------------- | ----- | ----------------------------------------- |
|
||||
| `--keep-config` | `-c` | Manter arquivos de configuração |
|
||||
| `--keep-data` | `-d` | Manter dados de sessão e snapshots |
|
||||
| `--dry-run` | | Mostrar o que seria removido sem remover |
|
||||
| `--force` | `-f` | Pular prompts de confirmação |
|
||||
|
||||
---
|
||||
|
||||
### upgrade
|
||||
|
||||
Atualiza o opencode para a versão mais recente ou uma versão específica.
|
||||
|
||||
```bash
|
||||
opencode upgrade [alvo]
|
||||
```
|
||||
|
||||
Para atualizar para a versão mais recente.
|
||||
|
||||
```bash
|
||||
opencode upgrade
|
||||
```
|
||||
|
||||
Para atualizar para uma versão específica.
|
||||
|
||||
```bash
|
||||
opencode upgrade v0.1.48
|
||||
```
|
||||
|
||||
#### Flags
|
||||
|
||||
| Flag | Curto | Descrição |
|
||||
| ---------- | ----- | --------------------------------------------------------------- |
|
||||
| `--method` | `-m` | O método de instalação que foi usado; curl, npm, pnpm, bun, brew |
|
||||
|
||||
---
|
||||
|
||||
## Flags Globais
|
||||
|
||||
A CLI do opencode aceita as seguintes flags globais.
|
||||
|
||||
| Flag | Curto | Descrição |
|
||||
| -------------- | ----- | ---------------------------------- |
|
||||
| `--help` | `-h` | Exibir ajuda |
|
||||
| `--version` | `-v` | Imprimir número da versão |
|
||||
| `--print-logs` | | Imprimir logs no stderr |
|
||||
| `--log-level` | | Nível de log (DEBUG, INFO, WARN, ERROR) |
|
||||
|
||||
---
|
||||
|
||||
## Variáveis de ambiente
|
||||
|
||||
O OpenCode pode ser configurado usando variáveis de ambiente.
|
||||
|
||||
| Variável | Tipo | Descrição |
|
||||
| ------------------------------------- | ------- | ------------------------------------------------- |
|
||||
| `OPENCODE_AUTO_SHARE` | boolean | Compartilhar sessões automaticamente |
|
||||
| `OPENCODE_GIT_BASH_PATH` | string | Caminho para o executável do Git Bash no Windows |
|
||||
| `OPENCODE_CONFIG` | string | Caminho para o arquivo de configuração |
|
||||
| `OPENCODE_CONFIG_DIR` | string | Caminho para o diretório de configuração |
|
||||
| `OPENCODE_CONFIG_CONTENT` | string | Conteúdo de configuração json inline |
|
||||
| `OPENCODE_DISABLE_AUTOUPDATE` | boolean | Desabilitar verificações de atualização automática |
|
||||
| `OPENCODE_DISABLE_PRUNE` | boolean | Desabilitar a poda de dados antigos |
|
||||
| `OPENCODE_DISABLE_TERMINAL_TITLE` | boolean | Desabilitar atualizações automáticas do título do terminal |
|
||||
| `OPENCODE_PERMISSION` | string | Configuração de permissões json inline |
|
||||
| `OPENCODE_DISABLE_DEFAULT_PLUGINS` | boolean | Desabilitar plugins padrão |
|
||||
| `OPENCODE_DISABLE_LSP_DOWNLOAD` | boolean | Desabilitar downloads automáticos do servidor LSP |
|
||||
| `OPENCODE_ENABLE_EXPERIMENTAL_MODELS` | boolean | Habilitar modelos experimentais |
|
||||
| `OPENCODE_DISABLE_AUTOCOMPACT` | boolean | Desabilitar compactação automática de contexto |
|
||||
| `OPENCODE_DISABLE_CLAUDE_CODE` | boolean | Desabilitar leitura de `.claude` (prompt + habilidades) |
|
||||
| `OPENCODE_DISABLE_CLAUDE_CODE_PROMPT` | boolean | Desabilitar leitura de `~/.claude/CLAUDE.md` |
|
||||
| `OPENCODE_DISABLE_CLAUDE_CODE_SKILLS` | boolean | Desabilitar carregamento de `.claude/skills` |
|
||||
| `OPENCODE_DISABLE_MODELS_FETCH` | boolean | Desabilitar busca de modelos de fontes remotas |
|
||||
| `OPENCODE_FAKE_VCS` | string | Provedor VCS falso para fins de teste |
|
||||
| `OPENCODE_DISABLE_FILETIME_CHECK` | boolean | Desabilitar verificação de tempo de arquivo para otimização |
|
||||
| `OPENCODE_CLIENT` | string | Identificador do cliente (padrão é `cli`) |
|
||||
| `OPENCODE_ENABLE_EXA` | boolean | Habilitar ferramentas de busca web Exa |
|
||||
| `OPENCODE_SERVER_PASSWORD` | string | Habilitar autenticação básica para `serve`/`web` |
|
||||
| `OPENCODE_SERVER_USERNAME` | string | Substituir nome de usuário de autenticação básica (padrão `opencode`) |
|
||||
| `OPENCODE_MODELS_URL` | string | URL personalizada para buscar configuração de modelos |
|
||||
|
||||
---
|
||||
|
||||
### Experimental
|
||||
|
||||
Essas variáveis de ambiente habilitam recursos experimentais que podem mudar ou ser removidos.
|
||||
|
||||
| Variável | Tipo | Descrição |
|
||||
| ----------------------------------------------- | ------- | ------------------------------------- |
|
||||
| `OPENCODE_EXPERIMENTAL` | boolean | Habilitar todos os recursos experimentais |
|
||||
| `OPENCODE_EXPERIMENTAL_ICON_DISCOVERY` | boolean | Habilitar descoberta de ícones |
|
||||
| `OPENCODE_EXPERIMENTAL_DISABLE_COPY_ON_SELECT` | boolean | Desabilitar cópia ao selecionar no TUI |
|
||||
| `OPENCODE_EXPERIMENTAL_BASH_DEFAULT_TIMEOUT_MS` | number | Tempo limite padrão para comandos bash em ms |
|
||||
| `OPENCODE_EXPERIMENTAL_OUTPUT_TOKEN_MAX` | number | Máximo de tokens de saída para respostas LLM |
|
||||
| `OPENCODE_EXPERIMENTAL_FILEWATCHER` | boolean | Habilitar monitoramento de arquivos para todo o diretório |
|
||||
| `OPENCODE_EXPERIMENTAL_OXFMT` | boolean | Habilitar formatador oxfmt |
|
||||
| `OPENCODE_EXPERIMENTAL_LSP_TOOL` | boolean | Habilitar ferramenta LSP experimental |
|
||||
| `OPENCODE_EXPERIMENTAL_DISABLE_FILEWATCHER` | boolean | Desabilitar monitoramento de arquivos |
|
||||
| `OPENCODE_EXPERIMENTAL_EXA` | boolean | Habilitar recursos experimentais do Exa |
|
||||
| `OPENCODE_EXPERIMENTAL_LSP_TY` | boolean | Habilitar verificação de tipo LSP experimental |
|
||||
| `OPENCODE_EXPERIMENTAL_MARKDOWN` | boolean | Habilitar recursos experimentais de markdown |
|
||||
| `OPENCODE_EXPERIMENTAL_PLAN_MODE` | boolean | Habilitar modo de plano |
|
||||
322
packages/web/src/content/docs/pt-br/commands.mdx
Normal file
322
packages/web/src/content/docs/pt-br/commands.mdx
Normal file
@@ -0,0 +1,322 @@
|
||||
---
|
||||
title: Comandos
|
||||
description: Crie comandos personalizados para tarefas repetitivas.
|
||||
---
|
||||
|
||||
Comandos personalizados permitem que você especifique um prompt que deseja executar quando esse comando for executado no TUI.
|
||||
|
||||
```bash frame="none"
|
||||
/meu-comando
|
||||
```
|
||||
|
||||
Comandos personalizados são adicionais aos comandos integrados como `/init`, `/undo`, `/redo`, `/share`, `/help`. [Saiba mais](/docs/tui#commands).
|
||||
|
||||
---
|
||||
|
||||
## Criar arquivos de comando
|
||||
|
||||
Crie arquivos markdown no diretório `commands/` para definir comandos personalizados.
|
||||
|
||||
Crie `.opencode/commands/test.md`:
|
||||
|
||||
```md title=".opencode/commands/test.md"
|
||||
---
|
||||
description: Execute testes com cobertura
|
||||
agent: build
|
||||
model: anthropic/claude-3-5-sonnet-20241022
|
||||
---
|
||||
|
||||
Execute a suíte de testes completa com relatório de cobertura e mostre quaisquer falhas.
|
||||
Concentre-se nos testes que falharam e sugira correções.
|
||||
```
|
||||
|
||||
O frontmatter define as propriedades do comando. O conteúdo se torna o template.
|
||||
|
||||
Use o comando digitando `/` seguido pelo nome do comando.
|
||||
|
||||
```bash frame="none"
|
||||
"/test"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Configurar
|
||||
|
||||
Você pode adicionar comandos personalizados através da configuração do OpenCode ou criando arquivos markdown no diretório `commands/`.
|
||||
|
||||
---
|
||||
|
||||
### JSON
|
||||
|
||||
Use a opção `command` na sua [configuração](/docs/config) do OpenCode:
|
||||
|
||||
```json title="opencode.jsonc" {4-12}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"command": {
|
||||
// Este se torna o nome do comando
|
||||
"test": {
|
||||
// Este é o prompt que será enviado ao LLM
|
||||
"template": "Execute a suíte de testes completa com relatório de cobertura e mostre quaisquer falhas.\nConcentre-se nos testes que falharam e sugira correções.",
|
||||
// Este é exibido como a descrição no TUI
|
||||
"description": "Execute testes com cobertura",
|
||||
"agent": "build",
|
||||
"model": "anthropic/claude-3-5-sonnet-20241022"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Agora você pode executar este comando no TUI:
|
||||
|
||||
```bash frame="none"
|
||||
/test
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Markdown
|
||||
|
||||
Você também pode definir comandos usando arquivos markdown. Coloque-os em:
|
||||
|
||||
- Global: `~/.config/opencode/commands/`
|
||||
- Por projeto: `.opencode/commands/`
|
||||
|
||||
```markdown title="~/.config/opencode/commands/test.md"
|
||||
---
|
||||
description: Execute testes com cobertura
|
||||
agent: build
|
||||
model: anthropic/claude-3-5-sonnet-20241022
|
||||
---
|
||||
|
||||
Execute a suíte de testes completa com relatório de cobertura e mostre quaisquer falhas.
|
||||
Concentre-se nos testes que falharam e sugira correções.
|
||||
```
|
||||
|
||||
O nome do arquivo markdown se torna o nome do comando. Por exemplo, `test.md` permite que você execute:
|
||||
|
||||
```bash frame="none"
|
||||
/test
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Configuração do prompt
|
||||
|
||||
Os prompts para os comandos personalizados suportam vários espaços reservados e sintaxes especiais.
|
||||
|
||||
---
|
||||
|
||||
### Argumentos
|
||||
|
||||
Passe argumentos para os comandos usando o espaço reservado `$ARGUMENTS`.
|
||||
|
||||
```md title=".opencode/commands/component.md"
|
||||
---
|
||||
description: Crie um novo componente
|
||||
---
|
||||
|
||||
Crie um novo componente React chamado $ARGUMENTS com suporte a TypeScript.
|
||||
Inclua tipagem adequada e estrutura básica.
|
||||
```
|
||||
|
||||
Execute o comando com argumentos:
|
||||
|
||||
```bash frame="none"
|
||||
/component Botão
|
||||
```
|
||||
|
||||
E `$ARGUMENTS` será substituído por `Botão`.
|
||||
|
||||
Você também pode acessar argumentos individuais usando parâmetros posicionais:
|
||||
|
||||
- `$1` - Primeiro argumento
|
||||
- `$2` - Segundo argumento
|
||||
- `$3` - Terceiro argumento
|
||||
- E assim por diante...
|
||||
|
||||
Por exemplo:
|
||||
|
||||
```md title=".opencode/commands/create-file.md"
|
||||
---
|
||||
description: Crie um novo arquivo com conteúdo
|
||||
---
|
||||
|
||||
Crie um arquivo chamado $1 no diretório $2
|
||||
com o seguinte conteúdo: $3
|
||||
```
|
||||
|
||||
Execute o comando:
|
||||
|
||||
```bash frame="none"
|
||||
/create-file config.json src "{ \"key\": \"value\" }"
|
||||
```
|
||||
|
||||
Isso substitui:
|
||||
|
||||
- `$1` por `config.json`
|
||||
- `$2` por `src`
|
||||
- `$3` por `{ "key": "value" }`
|
||||
|
||||
---
|
||||
|
||||
### Saída do shell
|
||||
|
||||
Use _!`comando`_ para injetar a saída do [comando bash](/docs/tui#bash-commands) no seu prompt.
|
||||
|
||||
Por exemplo, para criar um comando personalizado que analisa a cobertura de testes:
|
||||
|
||||
```md title=".opencode/commands/analyze-coverage.md"
|
||||
---
|
||||
description: Analise a cobertura de testes
|
||||
---
|
||||
|
||||
Aqui estão os resultados atuais dos testes:
|
||||
!`npm test`
|
||||
|
||||
Com base nesses resultados, sugira melhorias para aumentar a cobertura.
|
||||
```
|
||||
|
||||
Ou para revisar alterações recentes:
|
||||
|
||||
```md title=".opencode/commands/review-changes.md"
|
||||
---
|
||||
description: Revise alterações recentes
|
||||
---
|
||||
|
||||
Commits git recentes:
|
||||
!`git log --oneline -10`
|
||||
|
||||
Revise essas alterações e sugira quaisquer melhorias.
|
||||
```
|
||||
|
||||
Os comandos são executados no diretório raiz do seu projeto e sua saída se torna parte do prompt.
|
||||
|
||||
---
|
||||
|
||||
### Referências de arquivo
|
||||
|
||||
Inclua arquivos no seu comando usando `@` seguido pelo nome do arquivo.
|
||||
|
||||
```md title=".opencode/commands/review-component.md"
|
||||
---
|
||||
description: Revise componente
|
||||
---
|
||||
|
||||
Revise o componente em @src/components/Button.tsx.
|
||||
Verifique problemas de desempenho e sugira melhorias.
|
||||
```
|
||||
|
||||
O conteúdo do arquivo é incluído automaticamente no prompt.
|
||||
|
||||
---
|
||||
|
||||
## Opções
|
||||
|
||||
Vamos analisar as opções de configuração em detalhes.
|
||||
|
||||
---
|
||||
|
||||
### Template
|
||||
|
||||
A opção `template` define o prompt que será enviado ao LLM quando o comando for executado.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"command": {
|
||||
"test": {
|
||||
"template": "Execute a suíte de testes completa com relatório de cobertura e mostre quaisquer falhas.\nConcentre-se nos testes que falharam e sugira correções."
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Esta é uma opção de configuração **obrigatória**.
|
||||
|
||||
---
|
||||
|
||||
### Descrição
|
||||
|
||||
Use a opção `description` para fornecer uma breve descrição do que o comando faz.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"command": {
|
||||
"test": {
|
||||
"description": "Execute testes com cobertura"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Isso é exibido como a descrição no TUI quando você digita o comando.
|
||||
|
||||
---
|
||||
|
||||
### Agente
|
||||
|
||||
Use a configuração `agent` para especificar opcionalmente qual [agente](/docs/agents) deve executar este comando.
|
||||
Se este for um [subagente](/docs/agents/#subagents), o comando acionará uma invocação de subagente por padrão.
|
||||
Para desativar esse comportamento, defina `subtask` como `false`.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"command": {
|
||||
"review": {
|
||||
"agent": "plan"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Esta é uma opção de configuração **opcional**. Se não especificado, o padrão é o seu agente atual.
|
||||
|
||||
---
|
||||
|
||||
### Subtarefa
|
||||
|
||||
Use o booleano `subtask` para forçar o comando a acionar uma invocação de [subagente](/docs/agents/#subagents).
|
||||
Isso é útil se você quiser que o comando não polua seu contexto principal e **forçará** o agente a agir como um subagente,
|
||||
mesmo que `mode` esteja definido como `primary` na configuração do [agente](/docs/agents).
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"command": {
|
||||
"analyze": {
|
||||
"subtask": true
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Esta é uma opção de configuração **opcional**.
|
||||
|
||||
---
|
||||
|
||||
### Modelo
|
||||
|
||||
Use a configuração `model` para substituir o modelo padrão para este comando.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"command": {
|
||||
"analyze": {
|
||||
"model": "anthropic/claude-3-5-sonnet-20241022"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Esta é uma opção de configuração **opcional**.
|
||||
|
||||
---
|
||||
|
||||
## Integrado
|
||||
|
||||
opencode inclui vários comandos integrados como `/init`, `/undo`, `/redo`, `/share`, `/help`; [saiba mais](/docs/tui#commands).
|
||||
|
||||
:::note
|
||||
Comandos personalizados podem substituir comandos integrados.
|
||||
:::
|
||||
|
||||
Se você definir um comando personalizado com o mesmo nome, ele substituirá o comando integrado.
|
||||
681
packages/web/src/content/docs/pt-br/config.mdx
Normal file
681
packages/web/src/content/docs/pt-br/config.mdx
Normal file
@@ -0,0 +1,681 @@
|
||||
---
|
||||
title: Config
|
||||
description: Usando a configuração JSON do OpenCode.
|
||||
---
|
||||
|
||||
Você pode configurar o OpenCode usando um arquivo de configuração JSON.
|
||||
|
||||
---
|
||||
|
||||
## Formato
|
||||
|
||||
O OpenCode suporta os formatos **JSON** e **JSONC** (JSON com Comentários).
|
||||
|
||||
```jsonc title="opencode.jsonc"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
// Configuração do tema
|
||||
"theme": "opencode",
|
||||
"model": "anthropic/claude-sonnet-4-5",
|
||||
"autoupdate": true,
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Localizações
|
||||
|
||||
Você pode colocar sua configuração em algumas localizações diferentes e elas têm uma
|
||||
ordem de precedência diferente.
|
||||
|
||||
:::note
|
||||
Os arquivos de configuração são **mesclados**, não substituídos.
|
||||
:::
|
||||
|
||||
Os arquivos de configuração são mesclados, não substituídos. As configurações das seguintes localizações de configuração são combinadas. Configurações posteriores substituem as anteriores apenas para chaves conflitantes. Configurações não conflitantes de todas as configurações são preservadas.
|
||||
|
||||
Por exemplo, se sua configuração global define `theme: "opencode"` e `autoupdate: true`, e sua configuração de projeto define `model: "anthropic/claude-sonnet-4-5"`, a configuração final incluirá as três configurações.
|
||||
|
||||
---
|
||||
|
||||
### Ordem de precedência
|
||||
|
||||
As fontes de configuração são carregadas nesta ordem (fontes posteriores substituem as anteriores):
|
||||
|
||||
1. **Configuração remota** (de `.well-known/opencode`) - padrões organizacionais
|
||||
2. **Configuração global** (`~/.config/opencode/opencode.json`) - preferências do usuário
|
||||
3. **Configuração personalizada** (`OPENCODE_CONFIG` var de ambiente) - substituições personalizadas
|
||||
4. **Configuração do projeto** (`opencode.json` no projeto) - configurações específicas do projeto
|
||||
5. **Diretórios `.opencode`** - agentes, comandos, plugins
|
||||
6. **Configuração inline** (`OPENCODE_CONFIG_CONTENT` var de ambiente) - substituições em tempo de execução
|
||||
|
||||
Isso significa que as configurações do projeto podem substituir os padrões globais, e as configurações globais podem substituir os padrões organizacionais remotos.
|
||||
|
||||
:::note
|
||||
Os diretórios `.opencode` e `~/.config/opencode` usam **nomes no plural** para subdiretórios: `agents/`, `commands/`, `modes/`, `plugins/`, `skills/`, `tools/`, e `themes/`. Nomes no singular (por exemplo, `agent/`) também são suportados para compatibilidade retroativa.
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
### Remoto
|
||||
|
||||
As organizações podem fornecer configuração padrão através do endpoint `.well-known/opencode`. Isso é buscado automaticamente quando você se autentica com um provedor que o suporta.
|
||||
|
||||
A configuração remota é carregada primeiro, servindo como a camada base. Todas as outras fontes de configuração (global, projeto) podem substituir esses padrões.
|
||||
|
||||
Por exemplo, se sua organização fornece servidores MCP que estão desativados por padrão:
|
||||
|
||||
```json title="Configuração remota de .well-known/opencode"
|
||||
{
|
||||
"mcp": {
|
||||
"jira": {
|
||||
"type": "remote",
|
||||
"url": "https://jira.example.com/mcp",
|
||||
"enabled": false
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Você pode habilitar servidores específicos em sua configuração local:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"mcp": {
|
||||
"jira": {
|
||||
"type": "remote",
|
||||
"url": "https://jira.example.com/mcp",
|
||||
"enabled": true
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Global
|
||||
|
||||
Coloque sua configuração global do OpenCode em `~/.config/opencode/opencode.json`. Use a configuração global para preferências de usuário, como temas, provedores ou atalhos de teclado.
|
||||
|
||||
A configuração global substitui os padrões organizacionais remotos.
|
||||
|
||||
---
|
||||
|
||||
### Por projeto
|
||||
|
||||
Adicione `opencode.json` na raiz do seu projeto. A configuração do projeto tem a maior precedência entre os arquivos de configuração padrão - ela substitui tanto as configurações globais quanto as remotas.
|
||||
|
||||
:::tip
|
||||
Coloque a configuração específica do projeto na raiz do seu projeto.
|
||||
:::
|
||||
|
||||
Quando o OpenCode é iniciado, ele procura um arquivo de configuração no diretório atual ou sobe até o diretório Git mais próximo.
|
||||
|
||||
Isso também é seguro para ser verificado no Git e usa o mesmo esquema que o global.
|
||||
|
||||
---
|
||||
|
||||
### Caminho personalizado
|
||||
|
||||
Especifique um caminho de arquivo de configuração personalizado usando a variável de ambiente `OPENCODE_CONFIG`.
|
||||
|
||||
```bash
|
||||
export OPENCODE_CONFIG=/path/to/my/custom-config.json
|
||||
opencode run "Hello world"
|
||||
```
|
||||
|
||||
A configuração personalizada é carregada entre as configurações globais e do projeto na ordem de precedência.
|
||||
|
||||
---
|
||||
|
||||
### Diretório personalizado
|
||||
|
||||
Especifique um diretório de configuração personalizado usando a variável de ambiente `OPENCODE_CONFIG_DIR`. Este diretório será pesquisado por agentes, comandos, modos e plugins, assim como o diretório padrão `.opencode`, e deve seguir a mesma estrutura.
|
||||
|
||||
```bash
|
||||
export OPENCODE_CONFIG_DIR=/path/to/my/config-directory
|
||||
opencode run "Hello world"
|
||||
```
|
||||
|
||||
O diretório personalizado é carregado após a configuração global e os diretórios `.opencode`, então ele **pode substituir** suas configurações.
|
||||
|
||||
---
|
||||
|
||||
## Esquema
|
||||
|
||||
O arquivo de configuração tem um esquema que está definido em [**`opencode.ai/config.json`**](https://opencode.ai/config.json).
|
||||
|
||||
Seu editor deve ser capaz de validar e autocompletar com base no esquema.
|
||||
|
||||
---
|
||||
|
||||
### TUI
|
||||
|
||||
Você pode configurar as configurações específicas do TUI através da opção `tui`.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"tui": {
|
||||
"scroll_speed": 3,
|
||||
"scroll_acceleration": {
|
||||
"enabled": true
|
||||
},
|
||||
"diff_style": "auto"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Opções disponíveis:
|
||||
|
||||
- `scroll_acceleration.enabled` - Habilitar aceleração de rolagem estilo macOS. **Tem precedência sobre `scroll_speed`.**
|
||||
- `scroll_speed` - Multiplicador de velocidade de rolagem personalizada (padrão: `3`, mínimo: `1`). Ignorado se `scroll_acceleration.enabled` for `true`.
|
||||
- `diff_style` - Controlar a renderização de diffs. `"auto"` se adapta à largura do terminal, `"stacked"` sempre mostra uma coluna única.
|
||||
|
||||
[Saiba mais sobre o uso do TUI aqui](/docs/tui).
|
||||
|
||||
---
|
||||
|
||||
### Servidor
|
||||
|
||||
Você pode configurar as configurações do servidor para os comandos `opencode serve` e `opencode web` através da opção `server`.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"server": {
|
||||
"port": 4096,
|
||||
"hostname": "0.0.0.0",
|
||||
"mdns": true,
|
||||
"mdnsDomain": "myproject.local",
|
||||
"cors": ["http://localhost:5173"]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Opções disponíveis:
|
||||
|
||||
- `port` - Porta para escutar.
|
||||
- `hostname` - Nome do host para escutar. Quando `mdns` está habilitado e nenhum nome de host está definido, o padrão é `0.0.0.0`.
|
||||
- `mdns` - Habilitar descoberta de serviço mDNS. Isso permite que outros dispositivos na rede descubram seu servidor OpenCode.
|
||||
- `mdnsDomain` - Nome de domínio personalizado para o serviço mDNS. O padrão é `opencode.local`. Útil para executar várias instâncias na mesma rede.
|
||||
- `cors` - Origens adicionais a serem permitidas para CORS ao usar o servidor HTTP de um cliente baseado em navegador. Os valores devem ser origens completas (esquema + host + porta opcional), por exemplo, `https://app.example.com`.
|
||||
|
||||
[Saiba mais sobre o servidor aqui](/docs/server).
|
||||
|
||||
---
|
||||
|
||||
### Ferramentas
|
||||
|
||||
Você pode gerenciar as ferramentas que um LLM pode usar através da opção `tools`.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"tools": {
|
||||
"write": false,
|
||||
"bash": false
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
[Saiba mais sobre ferramentas aqui](/docs/tools).
|
||||
|
||||
---
|
||||
|
||||
### Modelos
|
||||
|
||||
Você pode configurar os provedores e modelos que deseja usar em sua configuração do OpenCode através das opções `provider`, `model` e `small_model`.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"provider": {},
|
||||
"model": "anthropic/claude-sonnet-4-5",
|
||||
"small_model": "anthropic/claude-haiku-4-5"
|
||||
}
|
||||
```
|
||||
|
||||
A opção `small_model` configura um modelo separado para tarefas leves, como geração de títulos. Por padrão, o OpenCode tenta usar um modelo mais barato se um estiver disponível do seu provedor, caso contrário, ele recua para seu modelo principal.
|
||||
|
||||
As opções do provedor podem incluir `timeout` e `setCacheKey`:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"provider": {
|
||||
"anthropic": {
|
||||
"options": {
|
||||
"timeout": 600000,
|
||||
"setCacheKey": true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
- `timeout` - Tempo limite da solicitação em milissegundos (padrão: 300000). Defina como `false` para desabilitar.
|
||||
- `setCacheKey` - Garantir que uma chave de cache seja sempre definida para o provedor designado.
|
||||
|
||||
Você também pode configurar [modelos locais](/docs/models#local). [Saiba mais](/docs/models).
|
||||
|
||||
---
|
||||
|
||||
#### Opções Específicas do Provedor
|
||||
|
||||
Alguns provedores suportam opções de configuração adicionais além das configurações genéricas `timeout` e `apiKey`.
|
||||
|
||||
##### Amazon Bedrock
|
||||
|
||||
Amazon Bedrock suporta configuração específica da AWS:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"provider": {
|
||||
"amazon-bedrock": {
|
||||
"options": {
|
||||
"region": "us-east-1",
|
||||
"profile": "my-aws-profile",
|
||||
"endpoint": "https://bedrock-runtime.us-east-1.vpce-xxxxx.amazonaws.com"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
- `region` - Região AWS para Bedrock (padrão para `AWS_REGION` var de ambiente ou `us-east-1`)
|
||||
- `profile` - Perfil nomeado da AWS em `~/.aws/credentials` (padrão para `AWS_PROFILE` var de ambiente)
|
||||
- `endpoint` - URL de endpoint personalizada para endpoints VPC. Este é um alias para a opção genérica `baseURL` usando terminologia específica da AWS. Se ambos forem especificados, `endpoint` tem precedência.
|
||||
|
||||
:::note
|
||||
Tokens Bearer (`AWS_BEARER_TOKEN_BEDROCK` ou `/connect`) têm precedência sobre a autenticação baseada em perfil. Veja [precedência de autenticação](/docs/providers#authentication-precedence) para detalhes.
|
||||
:::
|
||||
|
||||
[Saiba mais sobre a configuração do Amazon Bedrock](/docs/providers#amazon-bedrock).
|
||||
|
||||
---
|
||||
|
||||
### Temas
|
||||
|
||||
Você pode configurar o tema que deseja usar em sua configuração do OpenCode através da opção `theme`.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"theme": ""
|
||||
}
|
||||
```
|
||||
|
||||
[Saiba mais aqui](/docs/themes).
|
||||
|
||||
---
|
||||
|
||||
### Agentes
|
||||
|
||||
Você pode configurar agentes especializados para tarefas específicas através da opção `agent`.
|
||||
|
||||
```jsonc title="opencode.jsonc"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"agent": {
|
||||
"code-reviewer": {
|
||||
"description": "Revisa o código em busca de melhores práticas e problemas potenciais",
|
||||
"model": "anthropic/claude-sonnet-4-5",
|
||||
"prompt": "Você é um revisor de código. Foque em segurança, desempenho e manutenibilidade.",
|
||||
"tools": {
|
||||
// Desabilitar ferramentas de modificação de arquivos para agente somente de revisão
|
||||
"write": false,
|
||||
"edit": false,
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
Você também pode definir agentes usando arquivos markdown em `~/.config/opencode/agents/` ou `.opencode/agents/`. [Saiba mais aqui](/docs/agents).
|
||||
|
||||
---
|
||||
|
||||
### Agente padrão
|
||||
|
||||
Você pode definir o agente padrão usando a opção `default_agent`. Isso determina qual agente é usado quando nenhum é explicitamente especificado.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"default_agent": "plan"
|
||||
}
|
||||
```
|
||||
|
||||
O agente padrão deve ser um agente primário (não um subagente). Isso pode ser um agente embutido como `"build"` ou `"plan"`, ou um [agente personalizado](/docs/agents) que você definiu. Se o agente especificado não existir ou for um subagente, o OpenCode recuará para `"build"` com um aviso.
|
||||
|
||||
Essa configuração se aplica a todas as interfaces: TUI, CLI (`opencode run`), aplicativo desktop e GitHub Action.
|
||||
|
||||
---
|
||||
|
||||
### Compartilhamento
|
||||
|
||||
Você pode configurar o recurso [share](/docs/share) através da opção `share`.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"share": "manual"
|
||||
}
|
||||
```
|
||||
|
||||
Isso aceita:
|
||||
|
||||
- `"manual"` - Permitir compartilhamento manual via comandos (padrão)
|
||||
- `"auto"` - Compartilhar novas conversas automaticamente
|
||||
- `"disabled"` - Desabilitar compartilhamento completamente
|
||||
|
||||
Por padrão, o compartilhamento é definido para o modo manual, onde você precisa compartilhar explicitamente as conversas usando o comando `/share`.
|
||||
|
||||
---
|
||||
|
||||
### Comandos
|
||||
|
||||
Você pode configurar comandos personalizados para tarefas repetitivas através da opção `command`.
|
||||
|
||||
```jsonc title="opencode.jsonc"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"command": {
|
||||
"test": {
|
||||
"template": "Execute a suíte de testes completa com relatório de cobertura e mostre quaisquer falhas.\nFoque nos testes que falharam e sugira correções.",
|
||||
"description": "Executar testes com cobertura",
|
||||
"agent": "build",
|
||||
"model": "anthropic/claude-haiku-4-5",
|
||||
},
|
||||
"component": {
|
||||
"template": "Crie um novo componente React chamado $ARGUMENTS com suporte a TypeScript.\nInclua tipagem adequada e estrutura básica.",
|
||||
"description": "Criar um novo componente",
|
||||
},
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
Você também pode definir comandos usando arquivos markdown em `~/.config/opencode/commands/` ou `.opencode/commands/`. [Saiba mais aqui](/docs/commands).
|
||||
|
||||
---
|
||||
|
||||
### Atalhos de teclado
|
||||
|
||||
Você pode personalizar seus atalhos de teclado através da opção `keybinds`.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"keybinds": {}
|
||||
}
|
||||
```
|
||||
|
||||
[Saiba mais aqui](/docs/keybinds).
|
||||
|
||||
---
|
||||
|
||||
### Atualização automática
|
||||
|
||||
O OpenCode fará o download automaticamente de quaisquer novas atualizações quando for iniciado. Você pode desabilitar isso com a opção `autoupdate`.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"autoupdate": false
|
||||
}
|
||||
```
|
||||
|
||||
Se você não quiser atualizações, mas deseja ser notificado quando uma nova versão estiver disponível, defina `autoupdate` como `"notify"`.
|
||||
Observe que isso só funciona se não foi instalado usando um gerenciador de pacotes como o Homebrew.
|
||||
|
||||
---
|
||||
|
||||
### Formatadores
|
||||
|
||||
Você pode configurar formatadores de código através da opção `formatter`.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"formatter": {
|
||||
"prettier": {
|
||||
"disabled": true
|
||||
},
|
||||
"custom-prettier": {
|
||||
"command": ["npx", "prettier", "--write", "$FILE"],
|
||||
"environment": {
|
||||
"NODE_ENV": "development"
|
||||
},
|
||||
"extensions": [".js", ".ts", ".jsx", ".tsx"]
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
[Saiba mais sobre formatadores aqui](/docs/formatters).
|
||||
|
||||
---
|
||||
|
||||
### Permissões
|
||||
|
||||
Por padrão, o opencode **permite todas as operações** sem exigir aprovação explícita. Você pode mudar isso usando a opção `permission`.
|
||||
|
||||
Por exemplo, para garantir que as ferramentas `edit` e `bash` exijam aprovação do usuário:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"edit": "ask",
|
||||
"bash": "ask"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
[Saiba mais sobre permissões aqui](/docs/permissions).
|
||||
|
||||
---
|
||||
|
||||
### Compactação
|
||||
|
||||
Você pode controlar o comportamento de compactação de contexto através da opção `compaction`.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"compaction": {
|
||||
"auto": true,
|
||||
"prune": true
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
- `auto` - Compactar automaticamente a sessão quando o contexto estiver cheio (padrão: `true`).
|
||||
- `prune` - Remover saídas antigas de ferramentas para economizar tokens (padrão: `true`).
|
||||
|
||||
---
|
||||
|
||||
### Observador
|
||||
|
||||
Você pode configurar padrões de ignorar do observador de arquivos através da opção `watcher`.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"watcher": {
|
||||
"ignore": ["node_modules/**", "dist/**", ".git/**"]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Os padrões seguem a sintaxe glob. Use isso para excluir diretórios barulhentos da observação de arquivos.
|
||||
|
||||
---
|
||||
|
||||
### Servidores MCP
|
||||
|
||||
Você pode configurar servidores MCP que deseja usar através da opção `mcp`.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mcp": {}
|
||||
}
|
||||
```
|
||||
|
||||
[Saiba mais aqui](/docs/mcp-servers).
|
||||
|
||||
---
|
||||
|
||||
### Plugins
|
||||
|
||||
[Plugins](/docs/plugins) estendem o OpenCode com ferramentas, hooks e integrações personalizadas.
|
||||
|
||||
Coloque arquivos de plugin em `.opencode/plugins/` ou `~/.config/opencode/plugins/`. Você também pode carregar plugins do npm através da opção `plugin`.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"plugin": ["opencode-helicone-session", "@my-org/custom-plugin"]
|
||||
}
|
||||
```
|
||||
|
||||
[Saiba mais aqui](/docs/plugins).
|
||||
|
||||
---
|
||||
|
||||
### Instruções
|
||||
|
||||
Você pode configurar as instruções para o modelo que está usando através da opção `instructions`.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"instructions": ["CONTRIBUTING.md", "docs/guidelines.md", ".cursor/rules/*.md"]
|
||||
}
|
||||
```
|
||||
|
||||
Isso aceita um array de caminhos e padrões glob para arquivos de instrução. [Saiba mais sobre regras aqui](/docs/rules).
|
||||
|
||||
---
|
||||
|
||||
### Provedores desabilitados
|
||||
|
||||
Você pode desabilitar provedores que são carregados automaticamente através da opção `disabled_providers`. Isso é útil quando você deseja impedir que certos provedores sejam carregados, mesmo que suas credenciais estejam disponíveis.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"disabled_providers": ["openai", "gemini"]
|
||||
}
|
||||
```
|
||||
|
||||
:::note
|
||||
A opção `disabled_providers` tem prioridade sobre `enabled_providers`.
|
||||
:::
|
||||
|
||||
A opção `disabled_providers` aceita um array de IDs de provedores. Quando um provedor é desabilitado:
|
||||
|
||||
- Ele não será carregado, mesmo que variáveis de ambiente estejam definidas.
|
||||
- Ele não será carregado, mesmo que chaves de API estejam configuradas através do comando `/connect`.
|
||||
- Os modelos do provedor não aparecerão na lista de seleção de modelos.
|
||||
|
||||
---
|
||||
|
||||
### Provedores habilitados
|
||||
|
||||
Você pode especificar uma lista de permissão de provedores através da opção `enabled_providers`. Quando definida, apenas os provedores especificados serão habilitados e todos os outros serão ignorados.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"enabled_providers": ["anthropic", "openai"]
|
||||
}
|
||||
```
|
||||
|
||||
Isso é útil quando você deseja restringir o OpenCode para usar apenas provedores específicos, em vez de desabilitá-los um a um.
|
||||
|
||||
:::note
|
||||
A opção `disabled_providers` tem prioridade sobre `enabled_providers`.
|
||||
:::
|
||||
|
||||
Se um provedor aparecer em `enabled_providers` e `disabled_providers`, a `disabled_providers` tem prioridade para compatibilidade retroativa.
|
||||
|
||||
---
|
||||
|
||||
### Experimental
|
||||
|
||||
A chave `experimental` contém opções que estão em desenvolvimento ativo.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"experimental": {}
|
||||
}
|
||||
```
|
||||
|
||||
:::caution
|
||||
Opções experimentais não são estáveis. Elas podem mudar ou ser removidas sem aviso prévio.
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
## Variáveis
|
||||
|
||||
Você pode usar substituição de variáveis em seus arquivos de configuração para referenciar variáveis de ambiente e conteúdos de arquivos.
|
||||
|
||||
---
|
||||
|
||||
### Variáveis de ambiente
|
||||
|
||||
Use `{env:VARIABLE_NAME}` para substituir variáveis de ambiente:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"model": "{env:OPENCODE_MODEL}",
|
||||
"provider": {
|
||||
"anthropic": {
|
||||
"models": {},
|
||||
"options": {
|
||||
"apiKey": "{env:ANTHROPIC_API_KEY}"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Se a variável de ambiente não estiver definida, ela será substituída por uma string vazia.
|
||||
|
||||
---
|
||||
|
||||
### Arquivos
|
||||
|
||||
Use `{file:path/to/file}` para substituir o conteúdo de um arquivo:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"instructions": ["./custom-instructions.md"],
|
||||
"provider": {
|
||||
"openai": {
|
||||
"options": {
|
||||
"apiKey": "{file:~/.secrets/openai-key}"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Os caminhos dos arquivos podem ser:
|
||||
|
||||
- Relativos ao diretório do arquivo de configuração
|
||||
- Ou caminhos absolutos começando com `/` ou `~`
|
||||
|
||||
Esses são úteis para:
|
||||
|
||||
- Manter dados sensíveis, como chaves de API, em arquivos separados.
|
||||
- Incluir grandes arquivos de instrução sem sobrecarregar sua configuração.
|
||||
- Compartilhar trechos de configuração comuns entre vários arquivos de configuração.
|
||||
170
packages/web/src/content/docs/pt-br/custom-tools.mdx
Normal file
170
packages/web/src/content/docs/pt-br/custom-tools.mdx
Normal file
@@ -0,0 +1,170 @@
|
||||
---
|
||||
title: Ferramentas Personalizadas
|
||||
description: Crie ferramentas que o LLM pode chamar em opencode.
|
||||
---
|
||||
|
||||
Ferramentas personalizadas são funções que você cria e que o LLM pode chamar durante as conversas. Elas funcionam junto com as [ferramentas integradas](/docs/tools) do opencode, como `read`, `write` e `bash`.
|
||||
|
||||
---
|
||||
|
||||
## Criando uma ferramenta
|
||||
|
||||
As ferramentas são definidas como arquivos **TypeScript** ou **JavaScript**. No entanto, a definição da ferramenta pode invocar scripts escritos em **qualquer linguagem** — TypeScript ou JavaScript é usado apenas para a definição da ferramenta em si.
|
||||
|
||||
---
|
||||
|
||||
### Localização
|
||||
|
||||
Elas podem ser definidas:
|
||||
|
||||
- Localmente, colocando-as no diretório `.opencode/tools/` do seu projeto.
|
||||
- Ou globalmente, colocando-as em `~/.config/opencode/tools/`.
|
||||
|
||||
---
|
||||
|
||||
### Estrutura
|
||||
|
||||
A maneira mais fácil de criar ferramentas é usando o helper `tool()`, que fornece segurança de tipo e validação.
|
||||
|
||||
```ts title=".opencode/tools/database.ts" {1}
|
||||
import { tool } from "@opencode-ai/plugin"
|
||||
|
||||
export default tool({
|
||||
description: "Consultar o banco de dados do projeto",
|
||||
args: {
|
||||
query: tool.schema.string().describe("Consulta SQL a ser executada"),
|
||||
},
|
||||
async execute(args) {
|
||||
// Sua lógica de banco de dados aqui
|
||||
return `Consulta executada: ${args.query}`
|
||||
},
|
||||
})
|
||||
```
|
||||
|
||||
O **nome do arquivo** se torna o **nome da ferramenta**. O acima cria uma ferramenta `database`.
|
||||
|
||||
---
|
||||
|
||||
#### Múltiplas ferramentas por arquivo
|
||||
|
||||
Você também pode exportar várias ferramentas de um único arquivo. Cada exportação se torna **uma ferramenta separada** com o nome **`<filename>_<exportname>`**:
|
||||
|
||||
```ts title=".opencode/tools/math.ts"
|
||||
import { tool } from "@opencode-ai/plugin"
|
||||
|
||||
export const add = tool({
|
||||
description: "Adicionar dois números",
|
||||
args: {
|
||||
a: tool.schema.number().describe("Primeiro número"),
|
||||
b: tool.schema.number().describe("Segundo número"),
|
||||
},
|
||||
async execute(args) {
|
||||
return args.a + args.b
|
||||
},
|
||||
})
|
||||
|
||||
export const multiply = tool({
|
||||
description: "Multiplicar dois números",
|
||||
args: {
|
||||
a: tool.schema.number().describe("Primeiro número"),
|
||||
b: tool.schema.number().describe("Segundo número"),
|
||||
},
|
||||
async execute(args) {
|
||||
return args.a * args.b
|
||||
},
|
||||
})
|
||||
```
|
||||
|
||||
Isso cria duas ferramentas: `math_add` e `math_multiply`.
|
||||
|
||||
---
|
||||
|
||||
### Argumentos
|
||||
|
||||
Você pode usar `tool.schema`, que é apenas [Zod](https://zod.dev), para definir tipos de argumentos.
|
||||
|
||||
```ts "tool.schema"
|
||||
args: {
|
||||
query: tool.schema.string().describe("Consulta SQL a ser executada")
|
||||
}
|
||||
```
|
||||
|
||||
Você também pode importar [Zod](https://zod.dev) diretamente e retornar um objeto simples:
|
||||
|
||||
```ts {6}
|
||||
import { z } from "zod"
|
||||
|
||||
export default {
|
||||
description: "Descrição da ferramenta",
|
||||
args: {
|
||||
param: z.string().describe("Descrição do parâmetro"),
|
||||
},
|
||||
async execute(args, context) {
|
||||
// Implementação da ferramenta
|
||||
return "resultado"
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Contexto
|
||||
|
||||
As ferramentas recebem contexto sobre a sessão atual:
|
||||
|
||||
```ts title=".opencode/tools/project.ts" {8}
|
||||
import { tool } from "@opencode-ai/plugin"
|
||||
|
||||
export default tool({
|
||||
description: "Obter informações do projeto",
|
||||
args: {},
|
||||
async execute(args, context) {
|
||||
// Acessar informações do contexto
|
||||
const { agent, sessionID, messageID, directory, worktree } = context
|
||||
return `Agente: ${agent}, Sessão: ${sessionID}, Mensagem: ${messageID}, Diretório: ${directory}, Worktree: ${worktree}`
|
||||
},
|
||||
})
|
||||
```
|
||||
|
||||
Use `context.directory` para o diretório de trabalho da sessão.
|
||||
Use `context.worktree` para a raiz do worktree do git.
|
||||
|
||||
---
|
||||
|
||||
## Exemplos
|
||||
|
||||
### Escreva uma ferramenta em Python
|
||||
|
||||
Você pode escrever suas ferramentas em qualquer linguagem que desejar. Aqui está um exemplo que adiciona dois números usando Python.
|
||||
|
||||
Primeiro, crie a ferramenta como um script Python:
|
||||
|
||||
```python title=".opencode/tools/add.py"
|
||||
import sys
|
||||
|
||||
a = int(sys.argv[1])
|
||||
b = int(sys.argv[2])
|
||||
print(a + b)
|
||||
```
|
||||
|
||||
Em seguida, crie a definição da ferramenta que a invoca:
|
||||
|
||||
```ts title=".opencode/tools/python-add.ts" {10}
|
||||
import { tool } from "@opencode-ai/plugin"
|
||||
import path from "path"
|
||||
|
||||
export default tool({
|
||||
description: "Adicionar dois números usando Python",
|
||||
args: {
|
||||
a: tool.schema.number().describe("Primeiro número"),
|
||||
b: tool.schema.number().describe("Segundo número"),
|
||||
},
|
||||
async execute(args, context) {
|
||||
const script = path.join(context.worktree, ".opencode/tools/add.py")
|
||||
const result = await Bun.$`python3 ${script} ${args.a} ${args.b}`.text()
|
||||
return result.trim()
|
||||
},
|
||||
})
|
||||
```
|
||||
|
||||
Aqui estamos usando o utilitário [`Bun.$`](https://bun.com/docs/runtime/shell) para executar o script Python.
|
||||
76
packages/web/src/content/docs/pt-br/ecosystem.mdx
Normal file
76
packages/web/src/content/docs/pt-br/ecosystem.mdx
Normal file
@@ -0,0 +1,76 @@
|
||||
---
|
||||
title: Ecossistema
|
||||
description: Projetos e integrações construídos com OpenCode.
|
||||
---
|
||||
|
||||
Uma coleção de projetos da comunidade construídos sobre o OpenCode.
|
||||
|
||||
:::note
|
||||
Quer adicionar seu projeto relacionado ao OpenCode a esta lista? Envie um PR.
|
||||
:::
|
||||
|
||||
Você também pode conferir [awesome-opencode](https://github.com/awesome-opencode/awesome-opencode) e [opencode.cafe](https://opencode.cafe), uma comunidade que agrega o ecossistema e a comunidade.
|
||||
|
||||
---
|
||||
|
||||
## Plugins
|
||||
|
||||
| Nome | Descrição |
|
||||
| --------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- |
|
||||
| [opencode-daytona](https://github.com/jamesmurdza/daytona/blob/main/guides/typescript/opencode/README.md) | Execute automaticamente sessões do OpenCode em sandboxes isoladas do Daytona com sincronização git e pré-visualizações ao vivo |
|
||||
| [opencode-helicone-session](https://github.com/H2Shami/opencode-helicone-session) | Injete automaticamente cabeçalhos de sessão Helicone para agrupamento de requisições |
|
||||
| [opencode-type-inject](https://github.com/nick-vi/opencode-type-inject) | Auto-injetar tipos TypeScript/Svelte em leituras de arquivos com ferramentas de busca |
|
||||
| [opencode-openai-codex-auth](https://github.com/numman-ali/opencode-openai-codex-auth) | Use sua assinatura ChatGPT Plus/Pro em vez de créditos de API |
|
||||
| [opencode-gemini-auth](https://github.com/jenslys/opencode-gemini-auth) | Use seu plano Gemini existente em vez de cobrança de API |
|
||||
| [opencode-antigravity-auth](https://github.com/NoeFabris/opencode-antigravity-auth) | Use os modelos gratuitos do Antigravity em vez de cobrança de API |
|
||||
| [opencode-devcontainers](https://github.com/athal7/opencode-devcontainers) | Isolamento de devcontainer multi-branch com clones rasos e portas atribuídas automaticamente |
|
||||
| [opencode-google-antigravity-auth](https://github.com/shekohex/opencode-google-antigravity-auth) | Plugin Google Antigravity OAuth, com suporte para Google Search e manuseio de API mais robusto |
|
||||
| [opencode-dynamic-context-pruning](https://github.com/Tarquinen/opencode-dynamic-context-pruning) | Otimize o uso de tokens podando saídas de ferramentas obsoletas |
|
||||
| [opencode-websearch-cited](https://github.com/ghoulr/opencode-websearch-cited.git) | Adicione suporte nativo de pesquisa na web para provedores suportados com estilo fundamentado no Google |
|
||||
| [opencode-pty](https://github.com/shekohex/opencode-pty.git) | Permite que agentes de IA executem processos em segundo plano em um PTY, enviando entrada interativa para eles. |
|
||||
| [opencode-shell-strategy](https://github.com/JRedeker/opencode-shell-strategy) | Instruções para comandos de shell não interativos - evita travamentos de operações dependentes de TTY |
|
||||
| [opencode-wakatime](https://github.com/angristan/opencode-wakatime) | Acompanhe o uso do OpenCode com Wakatime |
|
||||
| [opencode-md-table-formatter](https://github.com/franlol/opencode-md-table-formatter/tree/main) | Limpe tabelas markdown produzidas por LLMs |
|
||||
| [opencode-morph-fast-apply](https://github.com/JRedeker/opencode-morph-fast-apply) | Edição de código 10x mais rápida com a API Morph Fast Apply e marcadores de edição preguiçosos |
|
||||
| [oh-my-opencode](https://github.com/code-yeongyu/oh-my-opencode) | Agentes em segundo plano, ferramentas LSP/AST/MCP pré-construídas, agentes curados, compatível com Claude Code |
|
||||
| [opencode-notificator](https://github.com/panta82/opencode-notificator) | Notificações de desktop e alertas sonoros para sessões do OpenCode |
|
||||
| [opencode-notifier](https://github.com/mohak34/opencode-notifier) | Notificações de desktop e alertas sonoros para eventos de permissão, conclusão e erro |
|
||||
| [opencode-zellij-namer](https://github.com/24601/opencode-zellij-namer) | Nomeação automática de sessões Zellij com suporte de IA com base no contexto do OpenCode |
|
||||
| [opencode-skillful](https://github.com/zenobi-us/opencode-skillful) | Permite que agentes do OpenCode carreguem prompts sob demanda com descoberta e injeção de habilidades |
|
||||
| [opencode-supermemory](https://github.com/supermemoryai/opencode-supermemory) | Memória persistente entre sessões usando Supermemory |
|
||||
| [@plannotator/opencode](https://github.com/backnotprop/plannotator/tree/main/apps/opencode-plugin) | Revisão de plano interativa com anotação visual e compartilhamento privado/offline |
|
||||
| [@openspoon/subtask2](https://github.com/spoons-and-mirrors/subtask2) | Estenda opencode /commands em um poderoso sistema de orquestração com controle de fluxo granular |
|
||||
| [opencode-scheduler](https://github.com/different-ai/opencode-scheduler) | Agende trabalhos recorrentes usando launchd (Mac) ou systemd (Linux) com sintaxe cron |
|
||||
| [micode](https://github.com/vtemian/micode) | Fluxo de trabalho Estruturado Brainstorm → Planejar → Implementar com continuidade de sessão |
|
||||
| [octto](https://github.com/vtemian/octto) | UI interativa do navegador para brainstorming de IA com formulários de múltiplas perguntas |
|
||||
| [opencode-background-agents](https://github.com/kdcokenny/opencode-background-agents) | Agentes em segundo plano estilo Claude Code com delegação assíncrona e persistência de contexto |
|
||||
| [opencode-notify](https://github.com/kdcokenny/opencode-notify) | Notificações nativas do OS para OpenCode – saiba quando as tarefas são concluídas |
|
||||
| [opencode-workspace](https://github.com/kdcokenny/opencode-workspace) | Conjunto de orquestração multi-agente – 16 componentes, uma instalação |
|
||||
| [opencode-worktree](https://github.com/kdcokenny/opencode-worktree) | Worktrees git sem atrito para OpenCode |
|
||||
|
||||
---
|
||||
|
||||
## Projetos
|
||||
|
||||
| Nome | Descrição |
|
||||
| ------------------------------------------------------------------------------------------ | ---------------------------------------------------------------- |
|
||||
| [kimaki](https://github.com/remorses/kimaki) | Bot do Discord para controlar sessões do OpenCode, construído sobre o SDK |
|
||||
| [opencode.nvim](https://github.com/NickvanDyke/opencode.nvim) | Plugin Neovim para prompts cientes do editor, construído sobre a API |
|
||||
| [portal](https://github.com/hosenur/portal) | UI web mobile-first para OpenCode sobre Tailscale/VPN |
|
||||
| [opencode plugin template](https://github.com/zenobi-us/opencode-plugin-template/) | Template para construir plugins do OpenCode |
|
||||
| [opencode.nvim](https://github.com/sudo-tee/opencode.nvim) | Frontend Neovim para opencode - um agente de codificação AI baseado em terminal |
|
||||
| [ai-sdk-provider-opencode-sdk](https://github.com/ben-vargas/ai-sdk-provider-opencode-sdk) | Provedor Vercel AI SDK para usar OpenCode via @opencode-ai/sdk |
|
||||
| [OpenChamber](https://github.com/btriapitsyn/openchamber) | Aplicativo Web / Desktop e Extensão do VS Code para OpenCode |
|
||||
| [OpenCode-Obsidian](https://github.com/mtymek/opencode-obsidian) | Plugin Obsidian que incorpora OpenCode na UI do Obsidian |
|
||||
| [OpenWork](https://github.com/different-ai/openwork) | Uma alternativa de código aberto ao Claude Cowork, alimentada pelo OpenCode |
|
||||
| [ocx](https://github.com/kdcokenny/ocx) | Gerenciador de extensões OpenCode com perfis portáteis e isolados. |
|
||||
| [CodeNomad](https://github.com/NeuralNomadsAI/CodeNomad) | Aplicativo Desktop, Web, Mobile e Cliente Remoto para OpenCode |
|
||||
|
||||
---
|
||||
|
||||
## Agentes
|
||||
|
||||
| Nome | Descrição |
|
||||
| ----------------------------------------------------------------- | ------------------------------------------------------------ |
|
||||
| [Agentic](https://github.com/Cluster444/agentic) | Agentes e comandos de IA modulares para desenvolvimento estruturado |
|
||||
| [opencode-agents](https://github.com/darrenhinde/opencode-agents) | Configurações, prompts, agentes e plugins para fluxos de trabalho aprimorados |
|
||||
166
packages/web/src/content/docs/pt-br/enterprise.mdx
Normal file
166
packages/web/src/content/docs/pt-br/enterprise.mdx
Normal file
@@ -0,0 +1,166 @@
|
||||
---
|
||||
title: Empresa
|
||||
description: Usando OpenCode com segurança em sua organização.
|
||||
---
|
||||
|
||||
import config from "../../../../config.mjs"
|
||||
export const email = `mailto:${config.email}`
|
||||
|
||||
OpenCode Enterprise é para organizações que desejam garantir que seu código e dados nunca deixem sua infraestrutura. Isso pode ser feito usando uma configuração centralizada que se integra ao seu SSO e gateway de IA interno.
|
||||
|
||||
:::note
|
||||
OpenCode não armazena nenhum de seus códigos ou dados de contexto.
|
||||
:::
|
||||
|
||||
Para começar com OpenCode Enterprise:
|
||||
|
||||
1. Faça um teste internamente com sua equipe.
|
||||
2. **<a href={email}>Entre em contato conosco</a>** para discutir opções de preços e implementação.
|
||||
|
||||
---
|
||||
|
||||
## Teste
|
||||
|
||||
OpenCode é de código aberto e não armazena nenhum de seus códigos ou dados de contexto, então seus desenvolvedores podem simplesmente [começar](/docs/) e realizar um teste.
|
||||
|
||||
---
|
||||
|
||||
### Manipulação de dados
|
||||
|
||||
**OpenCode não armazena seu código ou dados de contexto.** Todo o processamento acontece localmente ou através de chamadas diretas de API para seu provedor de IA.
|
||||
|
||||
Isso significa que, enquanto você estiver usando um provedor em quem confia, ou um gateway de IA interno, você pode usar o OpenCode com segurança.
|
||||
|
||||
A única ressalva aqui é o recurso opcional `/share`.
|
||||
|
||||
---
|
||||
|
||||
#### Compartilhando conversas
|
||||
|
||||
Se um usuário habilitar o recurso `/share`, a conversa e os dados associados a ela são enviados para o serviço que usamos para hospedar essas páginas de compartilhamento em opencode.ai.
|
||||
|
||||
Os dados são atualmente servidos através da rede de borda do nosso CDN e são armazenados em cache na borda perto de seus usuários.
|
||||
|
||||
Recomendamos que você desative isso para seu teste.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"share": "disabled"
|
||||
}
|
||||
```
|
||||
|
||||
[Saiba mais sobre compartilhamento](/docs/share).
|
||||
|
||||
---
|
||||
|
||||
### Propriedade do código
|
||||
|
||||
**Você possui todo o código produzido pelo OpenCode.** Não há restrições de licenciamento ou reivindicações de propriedade.
|
||||
|
||||
---
|
||||
|
||||
## Preços
|
||||
|
||||
Usamos um modelo por assento para o OpenCode Enterprise. Se você tiver seu próprio gateway LLM, não cobramos pelos tokens usados. Para mais detalhes sobre preços e opções de implementação, **<a href={email}>entre em contato conosco</a>**.
|
||||
|
||||
---
|
||||
|
||||
## Implantação
|
||||
|
||||
Uma vez que você tenha concluído seu teste e esteja pronto para usar o OpenCode em sua organização, você pode **<a href={email}>entrar em contato conosco</a>** para discutir preços e opções de implementação.
|
||||
|
||||
---
|
||||
|
||||
### Configuração Central
|
||||
|
||||
Podemos configurar o OpenCode para usar uma única configuração central para toda a sua organização.
|
||||
|
||||
Essa configuração centralizada pode se integrar ao seu provedor de SSO e garante que todos os usuários acessem apenas seu gateway de IA interno.
|
||||
|
||||
---
|
||||
|
||||
### Integração SSO
|
||||
|
||||
Através da configuração central, o OpenCode pode se integrar ao provedor de SSO de sua organização para autenticação.
|
||||
|
||||
Isso permite que o OpenCode obtenha credenciais para seu gateway de IA interno através do seu sistema de gerenciamento de identidade existente.
|
||||
|
||||
---
|
||||
|
||||
### Gateway de IA Interno
|
||||
|
||||
Com a configuração central, o OpenCode também pode ser configurado para usar apenas seu gateway de IA interno.
|
||||
|
||||
Você também pode desativar todos os outros provedores de IA, garantindo que todas as solicitações passem pela infraestrutura aprovada de sua organização.
|
||||
|
||||
---
|
||||
|
||||
### Auto-hospedagem
|
||||
|
||||
Embora recomendemos desativar as páginas de compartilhamento para garantir que seus dados nunca deixem sua organização, também podemos ajudá-lo a auto-hospedá-las em sua infraestrutura.
|
||||
|
||||
Isso está atualmente em nosso roadmap. Se você estiver interessado, **<a href={email}>nos avise</a>**.
|
||||
|
||||
---
|
||||
|
||||
## FAQ
|
||||
|
||||
<details>
|
||||
<summary>O que é OpenCode Enterprise?</summary>
|
||||
|
||||
OpenCode Enterprise é para organizações que desejam garantir que seu código e dados nunca deixem sua infraestrutura. Isso pode ser feito usando uma configuração centralizada que se integra ao seu SSO e gateway de IA interno.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>Como posso começar com OpenCode Enterprise?</summary>
|
||||
|
||||
Basta começar com um teste interno com sua equipe. O OpenCode, por padrão, não armazena seu código ou dados de contexto, facilitando o início.
|
||||
|
||||
Depois, **<a href={email}>entre em contato conosco</a>** para discutir opções de preços e implementação.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>Como funciona a precificação empresarial?</summary>
|
||||
|
||||
Oferecemos preços empresariais por assento. Se você tiver seu próprio gateway LLM, não cobramos pelos tokens usados. Para mais detalhes, **<a href={email}>entre em contato conosco</a>** para um orçamento personalizado com base nas necessidades de sua organização.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>Meus dados estão seguros com OpenCode Enterprise?</summary>
|
||||
|
||||
Sim. O OpenCode não armazena seu código ou dados de contexto. Todo o processamento acontece localmente ou através de chamadas diretas de API para seu provedor de IA. Com a configuração central e a integração SSO, seus dados permanecem seguros dentro da infraestrutura de sua organização.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>Podemos usar nosso próprio registro NPM privado?</summary>
|
||||
|
||||
O OpenCode suporta registros npm privados através do suporte nativo do arquivo `.npmrc` do Bun. Se sua organização usa um registro privado, como JFrog Artifactory, Nexus ou similar, certifique-se de que os desenvolvedores estejam autenticados antes de executar o OpenCode.
|
||||
|
||||
Para configurar a autenticação com seu registro privado:
|
||||
|
||||
```bash
|
||||
npm login --registry=https://your-company.jfrog.io/api/npm/npm-virtual/
|
||||
```
|
||||
|
||||
Isso cria `~/.npmrc` com os detalhes de autenticação. O OpenCode irá automaticamente
|
||||
capturar isso.
|
||||
|
||||
:::caution
|
||||
Você deve estar logado no registro privado antes de executar o OpenCode.
|
||||
:::
|
||||
|
||||
Alternativamente, você pode configurar manualmente um arquivo `.npmrc`:
|
||||
|
||||
```bash title="~/.npmrc"
|
||||
registry=https://your-company.jfrog.io/api/npm/npm-virtual/
|
||||
//your-company.jfrog.io/api/npm/npm-virtual/:_authToken=${NPM_AUTH_TOKEN}
|
||||
```
|
||||
|
||||
Os desenvolvedores devem estar logados no registro privado antes de executar o OpenCode para garantir que os pacotes possam ser instalados a partir do seu registro empresarial.
|
||||
|
||||
</details>
|
||||
130
packages/web/src/content/docs/pt-br/formatters.mdx
Normal file
130
packages/web/src/content/docs/pt-br/formatters.mdx
Normal file
@@ -0,0 +1,130 @@
|
||||
---
|
||||
title: Formatadores
|
||||
description: OpenCode usa formatadores específicos de linguagem.
|
||||
---
|
||||
|
||||
OpenCode formata automaticamente arquivos após serem escritos ou editados usando formatadores específicos de linguagem. Isso garante que o código gerado siga os estilos de código do seu projeto.
|
||||
|
||||
---
|
||||
|
||||
## Integrado
|
||||
|
||||
OpenCode vem com vários formatadores integrados para linguagens e frameworks populares. Abaixo está uma lista dos formatadores, extensões de arquivo suportadas e comandos ou opções de configuração necessárias.
|
||||
|
||||
| Formatador | Extensões | Requisitos |
|
||||
| ------------------- | ------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- |
|
||||
| gofmt | .go | Comando `gofmt` disponível |
|
||||
| mix | .ex, .exs, .eex, .heex, .leex, .neex, .sface | Comando `mix` disponível |
|
||||
| prettier | .js, .jsx, .ts, .tsx, .html, .css, .md, .json, .yaml, e [mais](https://prettier.io/docs/en/index.html) | Dependência `prettier` em `package.json` |
|
||||
| biome | .js, .jsx, .ts, .tsx, .html, .css, .md, .json, .yaml, e [mais](https://biomejs.dev/) | Arquivo de configuração `biome.json(c)` |
|
||||
| zig | .zig, .zon | Comando `zig` disponível |
|
||||
| clang-format | .c, .cpp, .h, .hpp, .ino, e [mais](https://clang.llvm.org/docs/ClangFormat.html) | Arquivo de configuração `.clang-format` |
|
||||
| ktlint | .kt, .kts | Comando `ktlint` disponível |
|
||||
| ruff | .py, .pyi | Comando `ruff` disponível com configuração |
|
||||
| rustfmt | .rs | Comando `rustfmt` disponível |
|
||||
| cargofmt | .rs | Comando `cargo fmt` disponível |
|
||||
| uv | .py, .pyi | Comando `uv` disponível |
|
||||
| rubocop | .rb, .rake, .gemspec, .ru | Comando `rubocop` disponível |
|
||||
| standardrb | .rb, .rake, .gemspec, .ru | Comando `standardrb` disponível |
|
||||
| htmlbeautifier | .erb, .html.erb | Comando `htmlbeautifier` disponível |
|
||||
| air | .R | Comando `air` disponível |
|
||||
| dart | .dart | Comando `dart` disponível |
|
||||
| ocamlformat | .ml, .mli | Comando `ocamlformat` disponível e arquivo de configuração `.ocamlformat` |
|
||||
| terraform | .tf, .tfvars | Comando `terraform` disponível |
|
||||
| gleam | .gleam | Comando `gleam` disponível |
|
||||
| nixfmt | .nix | Comando `nixfmt` disponível |
|
||||
| shfmt | .sh, .bash | Comando `shfmt` disponível |
|
||||
| pint | .php | Dependência `laravel/pint` em `composer.json` |
|
||||
| oxfmt (Experimental) | .js, .jsx, .ts, .tsx | Dependência `oxfmt` em `package.json` e uma [variável de ambiente experimental](/docs/cli/#experimental) |
|
||||
| ormolu | .hs | Comando `ormolu` disponível |
|
||||
|
||||
Portanto, se seu projeto tiver `prettier` em seu `package.json`, o OpenCode o usará automaticamente.
|
||||
|
||||
---
|
||||
|
||||
## Como funciona
|
||||
|
||||
Quando o OpenCode escreve ou edita um arquivo, ele:
|
||||
|
||||
1. Verifica a extensão do arquivo em relação a todos os formatadores habilitados.
|
||||
2. Executa o comando do formatador apropriado no arquivo.
|
||||
3. Aplica as alterações de formatação automaticamente.
|
||||
|
||||
Esse processo acontece em segundo plano, garantindo que seus estilos de código sejam mantidos sem etapas manuais.
|
||||
|
||||
---
|
||||
|
||||
## Configurar
|
||||
|
||||
Você pode personalizar os formatadores através da seção `formatter` em sua configuração do OpenCode.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"formatter": {}
|
||||
}
|
||||
```
|
||||
|
||||
Cada configuração de formatador suporta o seguinte:
|
||||
|
||||
| Propriedade | Tipo | Descrição |
|
||||
| ---------------- | -------- | ----------------------------------------------------- |
|
||||
| `disabled` | boolean | Defina como `true` para desabilitar o formatador |
|
||||
| `command` | string[] | O comando a ser executado para formatação |
|
||||
| `environment` | object | Variáveis de ambiente a serem definidas ao executar o formatador |
|
||||
| `extensions` | string[] | Extensões de arquivo que este formatador deve tratar |
|
||||
|
||||
Vamos ver alguns exemplos.
|
||||
|
||||
---
|
||||
|
||||
### Desabilitando formatadores
|
||||
|
||||
Para desabilitar **todos** os formatadores globalmente, defina `formatter` como `false`:
|
||||
|
||||
```json title="opencode.json" {3}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"formatter": false
|
||||
}
|
||||
```
|
||||
|
||||
Para desabilitar um **formatador específico**, defina `disabled` como `true`:
|
||||
|
||||
```json title="opencode.json" {5}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"formatter": {
|
||||
"prettier": {
|
||||
"disabled": true
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Formatadores personalizados
|
||||
|
||||
Você pode substituir os formatadores integrados ou adicionar novos especificando o comando, variáveis de ambiente e extensões de arquivo:
|
||||
|
||||
```json title="opencode.json" {4-14}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"formatter": {
|
||||
"prettier": {
|
||||
"command": ["npx", "prettier", "--write", "$FILE"],
|
||||
"environment": {
|
||||
"NODE_ENV": "development"
|
||||
},
|
||||
"extensions": [".js", ".ts", ".jsx", ".tsx"]
|
||||
},
|
||||
"custom-markdown-formatter": {
|
||||
"command": ["deno", "fmt", "$FILE"],
|
||||
"extensions": [".md"]
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
O **placeholder `$FILE`** no comando será substituído pelo caminho do arquivo que está sendo formatado.
|
||||
321
packages/web/src/content/docs/pt-br/github.mdx
Normal file
321
packages/web/src/content/docs/pt-br/github.mdx
Normal file
@@ -0,0 +1,321 @@
|
||||
---
|
||||
title: GitHub
|
||||
description: Use OpenCode em problemas e pull-requests do GitHub.
|
||||
---
|
||||
|
||||
OpenCode integra-se ao seu fluxo de trabalho do GitHub. Mencione `/opencode` ou `/oc` em seu comentário, e o OpenCode executará tarefas dentro do seu runner do GitHub Actions.
|
||||
|
||||
---
|
||||
|
||||
## Recursos
|
||||
|
||||
- **Triagem de problemas**: Peça ao OpenCode para analisar um problema e explicá-lo para você.
|
||||
- **Corrigir e implementar**: Peça ao OpenCode para corrigir um problema ou implementar um recurso. E ele trabalhará em um novo branch e enviará um PR com todas as alterações.
|
||||
- **Seguro**: O OpenCode é executado dentro dos runners do seu GitHub.
|
||||
|
||||
---
|
||||
|
||||
## Instalação
|
||||
|
||||
Execute o seguinte comando em um projeto que está em um repositório do GitHub:
|
||||
|
||||
```bash
|
||||
opencode github install
|
||||
```
|
||||
|
||||
Isso o guiará pela instalação do aplicativo GitHub, criação do fluxo de trabalho e configuração de segredos.
|
||||
|
||||
---
|
||||
|
||||
### Configuração Manual
|
||||
|
||||
Ou você pode configurá-lo manualmente.
|
||||
|
||||
1. **Instale o aplicativo GitHub**
|
||||
|
||||
Acesse [**github.com/apps/opencode-agent**](https://github.com/apps/opencode-agent). Certifique-se de que está instalado no repositório de destino.
|
||||
|
||||
2. **Adicione o fluxo de trabalho**
|
||||
|
||||
Adicione o seguinte arquivo de fluxo de trabalho em `.github/workflows/opencode.yml` no seu repositório. Certifique-se de definir o `model` apropriado e as chaves de API necessárias em `env`.
|
||||
|
||||
```yml title=".github/workflows/opencode.yml" {24,26}
|
||||
name: opencode
|
||||
|
||||
on:
|
||||
issue_comment:
|
||||
types: [created]
|
||||
pull_request_review_comment:
|
||||
types: [created]
|
||||
|
||||
jobs:
|
||||
opencode:
|
||||
if: |
|
||||
contains(github.event.comment.body, '/oc') ||
|
||||
contains(github.event.comment.body, '/opencode')
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
id-token: write
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
fetch-depth: 1
|
||||
persist-credentials: false
|
||||
|
||||
- name: Run OpenCode
|
||||
uses: anomalyco/opencode/github@latest
|
||||
env:
|
||||
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
|
||||
with:
|
||||
model: anthropic/claude-sonnet-4-20250514
|
||||
# share: true
|
||||
# github_token: xxxx
|
||||
```
|
||||
|
||||
3. **Armazene as chaves de API em segredos**
|
||||
|
||||
Nas **configurações** da sua organização ou projeto, expanda **Segredos e variáveis** à esquerda e selecione **Ações**. E adicione as chaves de API necessárias.
|
||||
|
||||
---
|
||||
|
||||
## Configuração
|
||||
|
||||
- `model`: O modelo a ser usado com o OpenCode. Tem o formato de `provider/model`. Isso é **obrigatório**.
|
||||
- `agent`: O agente a ser usado. Deve ser um agente primário. Retorna ao `default_agent` da configuração ou `"build"` se não encontrado.
|
||||
- `share`: Se deve compartilhar a sessão do OpenCode. O padrão é **true** para repositórios públicos.
|
||||
- `prompt`: Prompt personalizado opcional para substituir o comportamento padrão. Use isso para personalizar como o OpenCode processa solicitações.
|
||||
- `token`: Token de acesso do GitHub opcional para realizar operações como criar comentários, confirmar alterações e abrir pull requests. Por padrão, o OpenCode usa o token de acesso da instalação do aplicativo GitHub OpenCode, então commits, comentários e pull requests aparecem como se fossem da aplicação.
|
||||
|
||||
Alternativamente, você pode usar o [GITHUB_TOKEN](https://docs.github.com/en/actions/tutorials/authenticate-with-github_token) embutido do runner do GitHub Action sem instalar o aplicativo GitHub OpenCode. Apenas certifique-se de conceder as permissões necessárias em seu fluxo de trabalho:
|
||||
|
||||
```yaml
|
||||
permissions:
|
||||
id-token: write
|
||||
contents: write
|
||||
pull-requests: write
|
||||
issues: write
|
||||
```
|
||||
|
||||
Você também pode usar um [token de acesso pessoal](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens)(PAT) se preferir.
|
||||
|
||||
---
|
||||
|
||||
## Eventos Suportados
|
||||
|
||||
O OpenCode pode ser acionado pelos seguintes eventos do GitHub:
|
||||
|
||||
| Tipo de Evento | Acionado Por | Detalhes |
|
||||
| --------------------------------- | -------------------------------------- | ----------------------------------------------------------------------------------------------------------------- |
|
||||
| `issue_comment` | Comentário em um problema ou PR | Mencione `/opencode` ou `/oc` em seu comentário. O OpenCode lê o contexto e pode criar branches, abrir PRs ou responder. |
|
||||
| `pull_request_review_comment` | Comentário em linhas de código específicas em um PR | Mencione `/opencode` ou `/oc` enquanto revisa o código. O OpenCode recebe o caminho do arquivo, números das linhas e contexto do diff. |
|
||||
| `issues` | Problema aberto ou editado | Aciona automaticamente o OpenCode quando problemas são criados ou modificados. Requer entrada de `prompt`. |
|
||||
| `pull_request` | PR aberto ou atualizado | Aciona automaticamente o OpenCode quando PRs são abertos, sincronizados ou reabertos. Útil para revisões automatizadas. |
|
||||
| `schedule` | Cron baseado em agendamento | Execute o OpenCode em um cronograma. Requer entrada de `prompt`. A saída vai para logs e PRs (sem problema para comentar). |
|
||||
| `workflow_dispatch` | Acionamento manual pela interface do GitHub | Acione o OpenCode sob demanda através da aba Ações. Requer entrada de `prompt`. A saída vai para logs e PRs. |
|
||||
|
||||
### Exemplo de Agendamento
|
||||
|
||||
Execute o OpenCode em um cronograma para realizar tarefas automatizadas:
|
||||
|
||||
```yaml title=".github/workflows/opencode-scheduled.yml"
|
||||
name: Tarefa Agendada OpenCode
|
||||
|
||||
on:
|
||||
schedule:
|
||||
- cron: "0 9 * * 1" # Toda segunda-feira às 9h UTC
|
||||
|
||||
jobs:
|
||||
opencode:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
id-token: write
|
||||
contents: write
|
||||
pull-requests: write
|
||||
issues: write
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
- name: Run OpenCode
|
||||
uses: anomalyco/opencode/github@latest
|
||||
env:
|
||||
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
|
||||
with:
|
||||
model: anthropic/claude-sonnet-4-20250514
|
||||
prompt: |
|
||||
Revise a base de código em busca de comentários TODO e crie um resumo.
|
||||
Se você encontrar problemas que valem a pena serem abordados, abra um problema para rastreá-los.
|
||||
```
|
||||
|
||||
Para eventos agendados, a entrada `prompt` é **obrigatória** uma vez que não há comentário para extrair instruções. Fluxos de trabalho agendados são executados sem um contexto de usuário para verificação de permissões, então o fluxo de trabalho deve conceder `contents: write` e `pull-requests: write` se você espera que o OpenCode crie branches ou PRs.
|
||||
|
||||
---
|
||||
|
||||
### Exemplo de Pull Request
|
||||
|
||||
Revise automaticamente PRs quando forem abertos ou atualizados:
|
||||
|
||||
```yaml title=".github/workflows/opencode-review.yml"
|
||||
name: opencode-review
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
types: [opened, synchronize, reopened, ready_for_review]
|
||||
|
||||
jobs:
|
||||
review:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
id-token: write
|
||||
contents: read
|
||||
pull-requests: read
|
||||
issues: read
|
||||
steps:
|
||||
- uses: actions/checkout@v6
|
||||
with:
|
||||
persist-credentials: false
|
||||
- uses: anomalyco/opencode/github@latest
|
||||
env:
|
||||
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
with:
|
||||
model: anthropic/claude-sonnet-4-20250514
|
||||
use_github_token: true
|
||||
prompt: |
|
||||
Revise este pull request:
|
||||
- Verifique se há problemas de qualidade de código
|
||||
- Procure por bugs potenciais
|
||||
- Sugira melhorias
|
||||
```
|
||||
|
||||
Para eventos de `pull_request`, se nenhum `prompt` for fornecido, o OpenCode padrão será revisar o pull request.
|
||||
|
||||
---
|
||||
|
||||
### Exemplo de Triagem de Problemas
|
||||
|
||||
Triagem automática de novos problemas. Este exemplo filtra contas com mais de 30 dias para reduzir spam:
|
||||
|
||||
```yaml title=".github/workflows/opencode-triage.yml"
|
||||
name: Triagem de Problemas
|
||||
|
||||
on:
|
||||
issues:
|
||||
types: [opened]
|
||||
|
||||
jobs:
|
||||
triage:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
id-token: write
|
||||
contents: write
|
||||
pull-requests: write
|
||||
issues: write
|
||||
steps:
|
||||
- name: Verificar idade da conta
|
||||
id: check
|
||||
uses: actions/github-script@v7
|
||||
with:
|
||||
script: |
|
||||
const user = await github.rest.users.getByUsername({
|
||||
username: context.payload.issue.user.login
|
||||
});
|
||||
const created = new Date(user.data.created_at);
|
||||
const days = (Date.now() - created) / (1000 * 60 * 60 * 24);
|
||||
return days >= 30;
|
||||
result-encoding: string
|
||||
|
||||
- uses: actions/checkout@v6
|
||||
if: steps.check.outputs.result == 'true'
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
- uses: anomalyco/opencode/github@latest
|
||||
if: steps.check.outputs.result == 'true'
|
||||
env:
|
||||
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
|
||||
with:
|
||||
model: anthropic/claude-sonnet-4-20250514
|
||||
prompt: |
|
||||
Revise este problema. Se houver uma correção clara ou documentos relevantes:
|
||||
- Forneça links de documentação
|
||||
- Adicione orientações de tratamento de erros para exemplos de código
|
||||
Caso contrário, não comente.
|
||||
```
|
||||
|
||||
Para eventos de `issues`, a entrada `prompt` é **obrigatória** uma vez que não há comentário para extrair instruções.
|
||||
|
||||
---
|
||||
|
||||
## Prompts Personalizados
|
||||
|
||||
Substitua o prompt padrão para personalizar o comportamento do OpenCode para seu fluxo de trabalho.
|
||||
|
||||
```yaml title=".github/workflows/opencode.yml"
|
||||
- uses: anomalyco/opencode/github@latest
|
||||
with:
|
||||
model: anthropic/claude-sonnet-4-5
|
||||
prompt: |
|
||||
Revise este pull request:
|
||||
- Verifique se há problemas de qualidade de código
|
||||
- Procure por bugs potenciais
|
||||
- Sugira melhorias
|
||||
```
|
||||
|
||||
Isso é útil para impor critérios de revisão específicos, padrões de codificação ou áreas de foco relevantes para seu projeto.
|
||||
|
||||
---
|
||||
|
||||
## Exemplos
|
||||
|
||||
Aqui estão alguns exemplos de como você pode usar o OpenCode no GitHub.
|
||||
|
||||
- **Explicar um problema**
|
||||
|
||||
Adicione este comentário em um problema do GitHub.
|
||||
|
||||
```
|
||||
/opencode explain this issue
|
||||
```
|
||||
|
||||
O OpenCode lerá toda a conversa, incluindo todos os comentários, e responderá com uma explicação clara.
|
||||
|
||||
- **Corrigir um problema**
|
||||
|
||||
Em um problema do GitHub, diga:
|
||||
|
||||
```
|
||||
/opencode fix this
|
||||
```
|
||||
|
||||
E o OpenCode criará um novo branch, implementará as alterações e abrirá um PR com as mudanças.
|
||||
|
||||
- **Revisar PRs e fazer alterações**
|
||||
|
||||
Deixe o seguinte comentário em um PR do GitHub.
|
||||
|
||||
```
|
||||
Delete the attachment from S3 when the note is removed /oc
|
||||
```
|
||||
|
||||
O OpenCode implementará a alteração solicitada e a confirmará no mesmo PR.
|
||||
|
||||
- **Revisar linhas de código específicas**
|
||||
|
||||
Deixe um comentário diretamente nas linhas de código na aba "Files" do PR. O OpenCode detecta automaticamente o arquivo, os números das linhas e o contexto do diff para fornecer respostas precisas.
|
||||
|
||||
```
|
||||
[Comentário sobre linhas específicas na aba Files]
|
||||
/oc add error handling here
|
||||
```
|
||||
|
||||
Ao comentar sobre linhas específicas, o OpenCode recebe:
|
||||
- O arquivo exato sendo revisado
|
||||
- As linhas específicas de código
|
||||
- O contexto do diff ao redor
|
||||
- Informações sobre números de linha
|
||||
|
||||
Isso permite solicitações mais direcionadas sem precisar especificar caminhos de arquivos ou números de linhas manualmente.
|
||||
195
packages/web/src/content/docs/pt-br/gitlab.mdx
Normal file
195
packages/web/src/content/docs/pt-br/gitlab.mdx
Normal file
@@ -0,0 +1,195 @@
|
||||
---
|
||||
title: GitLab
|
||||
description: Use OpenCode em problemas e solicitações de mesclagem do GitLab.
|
||||
---
|
||||
|
||||
OpenCode se integra ao seu fluxo de trabalho do GitLab através do seu pipeline CI/CD do GitLab ou com o GitLab Duo.
|
||||
|
||||
Em ambos os casos, o OpenCode será executado em seus runners do GitLab.
|
||||
|
||||
---
|
||||
|
||||
## GitLab CI
|
||||
|
||||
OpenCode funciona em um pipeline regular do GitLab. Você pode integrá-lo a um pipeline como um [componente CI](https://docs.gitlab.com/ee/ci/components/)
|
||||
|
||||
Aqui estamos usando um componente CI/CD criado pela comunidade para OpenCode — [nagyv/gitlab-opencode](https://gitlab.com/nagyv/gitlab-opencode).
|
||||
|
||||
---
|
||||
|
||||
### Recursos
|
||||
|
||||
- **Use configuração personalizada por trabalho**: Configure o OpenCode com um diretório de configuração personalizado, por exemplo `./config/#custom-directory` para habilitar ou desabilitar funcionalidades por invocação do OpenCode.
|
||||
- **Configuração mínima**: O componente CI configura o OpenCode em segundo plano, você só precisa criar a configuração do OpenCode e o prompt inicial.
|
||||
- **Flexível**: O componente CI suporta várias entradas para personalizar seu comportamento.
|
||||
|
||||
---
|
||||
|
||||
### Configuração
|
||||
|
||||
1. Armazene seu JSON de autenticação do OpenCode como variáveis de ambiente do tipo File em **Configurações** > **CI/CD** > **Variáveis**. Certifique-se de marcá-las como "Mascaradas e ocultas".
|
||||
2. Adicione o seguinte ao seu arquivo `.gitlab-ci.yml`.
|
||||
|
||||
```yaml title=".gitlab-ci.yml"
|
||||
include:
|
||||
- component: $CI_SERVER_FQDN/nagyv/gitlab-opencode/opencode@2
|
||||
inputs:
|
||||
config_dir: ${CI_PROJECT_DIR}/opencode-config
|
||||
auth_json: $OPENCODE_AUTH_JSON # O nome da variável para seu JSON de autenticação do OpenCode
|
||||
command: optional-custom-command
|
||||
message: "Seu prompt aqui"
|
||||
```
|
||||
|
||||
Para mais entradas e casos de uso [consulte a documentação](https://gitlab.com/explore/catalog/nagyv/gitlab-opencode) deste componente.
|
||||
|
||||
---
|
||||
|
||||
## GitLab Duo
|
||||
|
||||
OpenCode se integra ao seu fluxo de trabalho do GitLab.
|
||||
Mencione `@opencode` em um comentário, e o OpenCode executará tarefas dentro do seu pipeline CI do GitLab.
|
||||
|
||||
---
|
||||
|
||||
### Recursos
|
||||
|
||||
- **Triagem de problemas**: Peça ao OpenCode para analisar um problema e explicá-lo para você.
|
||||
- **Corrigir e implementar**: Peça ao OpenCode para corrigir um problema ou implementar uma funcionalidade.
|
||||
Ele criará um novo branch e abrirá uma solicitação de mesclagem com as alterações.
|
||||
- **Seguro**: O OpenCode é executado em seus runners do GitLab.
|
||||
|
||||
---
|
||||
|
||||
### Configuração
|
||||
|
||||
O OpenCode é executado em seu pipeline CI/CD do GitLab, aqui está o que você precisará para configurá-lo:
|
||||
|
||||
:::tip
|
||||
Consulte a [**documentação do GitLab**](https://docs.gitlab.com/user/duo_agent_platform/agent_assistant/) para instruções atualizadas.
|
||||
:::
|
||||
|
||||
1. Configure seu ambiente GitLab
|
||||
2. Configure CI/CD
|
||||
3. Obtenha uma chave de API do provedor de modelo de IA
|
||||
4. Crie uma conta de serviço
|
||||
5. Configure variáveis de CI/CD
|
||||
6. Crie um arquivo de configuração de fluxo, aqui está um exemplo:
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Configuração de fluxo</summary>
|
||||
|
||||
```yaml
|
||||
image: node:22-slim
|
||||
commands:
|
||||
- echo "Instalando opencode"
|
||||
- npm install --global opencode-ai
|
||||
- echo "Instalando glab"
|
||||
- export GITLAB_TOKEN=$GITLAB_TOKEN_OPENCODE
|
||||
- apt-get update --quiet && apt-get install --yes curl wget gpg git && rm --recursive --force /var/lib/apt/lists/*
|
||||
- curl --silent --show-error --location "https://raw.githubusercontent.com/upciti/wakemeops/main/assets/install_repository" | bash
|
||||
- apt-get install --yes glab
|
||||
- echo "Configurando glab"
|
||||
- echo $GITLAB_HOST
|
||||
- echo "Criando configuração de autenticação do OpenCode"
|
||||
- mkdir --parents ~/.local/share/opencode
|
||||
- |
|
||||
cat > ~/.local/share/opencode/auth.json << EOF
|
||||
{
|
||||
"anthropic": {
|
||||
"type": "api",
|
||||
"key": "$ANTHROPIC_API_KEY"
|
||||
}
|
||||
}
|
||||
EOF
|
||||
- echo "Configurando git"
|
||||
- git config --global user.email "opencode@gitlab.com"
|
||||
- git config --global user.name "OpenCode"
|
||||
- echo "Testando glab"
|
||||
- glab issue list
|
||||
- echo "Executando OpenCode"
|
||||
- |
|
||||
opencode run "
|
||||
Você é um assistente de IA ajudando com operações do GitLab.
|
||||
|
||||
Contexto: $AI_FLOW_CONTEXT
|
||||
Tarefa: $AI_FLOW_INPUT
|
||||
Evento: $AI_FLOW_EVENT
|
||||
|
||||
Por favor, execute a tarefa solicitada usando as ferramentas disponíveis do GitLab.
|
||||
Seja minucioso em sua análise e forneça explicações claras.
|
||||
|
||||
<important>
|
||||
Por favor, use a CLI do glab para acessar dados do GitLab. A CLI do glab já foi autenticada. Você pode executar os comandos correspondentes.
|
||||
|
||||
Se você for solicitado a resumir um MR ou problema ou a fornecer mais informações, então, por favor, poste uma nota de volta ao MR/Problema para que o usuário possa vê-la.
|
||||
Você não precisa fazer commit ou push das alterações, isso será feito automaticamente com base nas alterações de arquivo que você fizer.
|
||||
</important>
|
||||
"
|
||||
- git checkout --branch $CI_WORKLOAD_REF origin/$CI_WORKLOAD_REF
|
||||
- echo "Verificando alterações no git e fazendo push se existirem"
|
||||
- |
|
||||
if ! git diff --quiet || ! git diff --cached --quiet || [ --not --zero "$(git ls-files --others --exclude-standard)" ]; then
|
||||
echo "Alterações no Git detectadas, adicionando e fazendo push..."
|
||||
git add .
|
||||
if git diff --cached --quiet; then
|
||||
echo "Nenhuma alteração em estágio para fazer commit"
|
||||
else
|
||||
echo "Fazendo commit das alterações no branch: $CI_WORKLOAD_REF"
|
||||
git commit --message "Alterações do Codex"
|
||||
echo "Fazendo push das alterações para $CI_WORKLOAD_REF"
|
||||
git push https://gitlab-ci-token:$GITLAB_TOKEN@$GITLAB_HOST/gl-demo-ultimate-dev-ai-epic-17570/test-java-project.git $CI_WORKLOAD_REF
|
||||
echo "Alterações enviadas com sucesso"
|
||||
fi
|
||||
else
|
||||
echo "Nenhuma alteração no git detectada, pulando push"
|
||||
fi
|
||||
variables:
|
||||
- ANTHROPIC_API_KEY
|
||||
- GITLAB_TOKEN_OPENCODE
|
||||
- GITLAB_HOST
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
Você pode consultar a [documentação dos agentes da CLI do GitLab](https://docs.gitlab.com/user/duo_agent_platform/agent_assistant/) para instruções detalhadas.
|
||||
|
||||
---
|
||||
|
||||
### Exemplos
|
||||
|
||||
Aqui estão alguns exemplos de como você pode usar o OpenCode no GitLab.
|
||||
|
||||
:::tip
|
||||
Você pode configurar para usar uma frase de gatilho diferente de `@opencode`.
|
||||
:::
|
||||
|
||||
- **Explicar um problema**
|
||||
|
||||
Adicione este comentário em um problema do GitLab.
|
||||
|
||||
```
|
||||
@opencode explain this issue
|
||||
```
|
||||
|
||||
O OpenCode lerá o problema e responderá com uma explicação clara.
|
||||
|
||||
- **Corrigir um problema**
|
||||
|
||||
Em um problema do GitLab, diga:
|
||||
|
||||
```
|
||||
@opencode fix this
|
||||
```
|
||||
|
||||
O OpenCode criará um novo branch, implementará as alterações e abrirá uma solicitação de mesclagem com as alterações.
|
||||
|
||||
- **Revisar solicitações de mesclagem**
|
||||
|
||||
Deixe o seguinte comentário em uma solicitação de mesclagem do GitLab.
|
||||
|
||||
```
|
||||
@opencode review this merge request
|
||||
```
|
||||
|
||||
O OpenCode revisará a solicitação de mesclagem e fornecerá feedback.
|
||||
48
packages/web/src/content/docs/pt-br/ide.mdx
Normal file
48
packages/web/src/content/docs/pt-br/ide.mdx
Normal file
@@ -0,0 +1,48 @@
|
||||
---
|
||||
title: IDE
|
||||
description: A extensão OpenCode para VS Code, Cursor e outras IDEs
|
||||
---
|
||||
|
||||
OpenCode integra-se com VS Code, Cursor ou qualquer IDE que suporte um terminal. Basta executar `opencode` no terminal para começar.
|
||||
|
||||
---
|
||||
|
||||
## Uso
|
||||
|
||||
- **Lançamento Rápido**: Use `Cmd+Esc` (Mac) ou `Ctrl+Esc` (Windows/Linux) para abrir o OpenCode em uma visualização de terminal dividido, ou focar em uma sessão de terminal existente se uma já estiver em execução.
|
||||
- **Nova Sessão**: Use `Cmd+Shift+Esc` (Mac) ou `Ctrl+Shift+Esc` (Windows/Linux) para iniciar uma nova sessão de terminal OpenCode, mesmo que uma já esteja aberta. Você também pode clicar no botão OpenCode na interface.
|
||||
- **Consciência de Contexto**: Compartilhe automaticamente sua seleção ou aba atual com o OpenCode.
|
||||
- **Atalhos de Referência de Arquivo**: Use `Cmd+Option+K` (Mac) ou `Alt+Ctrl+K` (Linux/Windows) para inserir referências de arquivo. Por exemplo, `@File#L37-42`.
|
||||
|
||||
---
|
||||
|
||||
## Instalação
|
||||
|
||||
Para instalar o OpenCode no VS Code e forks populares como Cursor, Windsurf, VSCodium:
|
||||
|
||||
1. Abra o VS Code
|
||||
2. Abra o terminal integrado
|
||||
3. Execute `opencode` - a extensão será instalada automaticamente
|
||||
|
||||
Se, por outro lado, você quiser usar sua própria IDE ao executar `/editor` ou `/export` a partir do TUI, você precisará definir `export EDITOR="code --wait"`. [Saiba mais](/docs/tui/#editor-setup).
|
||||
|
||||
---
|
||||
|
||||
### Instalação Manual
|
||||
|
||||
Procure por **OpenCode** no Marketplace de Extensões e clique em **Instalar**.
|
||||
|
||||
---
|
||||
|
||||
### Solução de Problemas
|
||||
|
||||
Se a extensão falhar ao instalar automaticamente:
|
||||
|
||||
- Certifique-se de que você está executando `opencode` no terminal integrado.
|
||||
- Confirme se o CLI para sua IDE está instalado:
|
||||
- Para VS Code: comando `code`
|
||||
- Para Cursor: comando `cursor`
|
||||
- Para Windsurf: comando `windsurf`
|
||||
- Para VSCodium: comando `codium`
|
||||
- Se não, execute `Cmd+Shift+P` (Mac) ou `Ctrl+Shift+P` (Windows/Linux) e procure por "Shell Command: Install 'code' command in PATH" (ou o equivalente para sua IDE)
|
||||
- Certifique-se de que o VS Code tem permissão para instalar extensões
|
||||
341
packages/web/src/content/docs/pt-br/index.mdx
Normal file
341
packages/web/src/content/docs/pt-br/index.mdx
Normal file
@@ -0,0 +1,341 @@
|
||||
---
|
||||
title: Introdução
|
||||
description: Comece com o OpenCode.
|
||||
---
|
||||
|
||||
import { Tabs, TabItem } from "@astrojs/starlight/components"
|
||||
import config from "../../../../config.mjs"
|
||||
export const console = config.console
|
||||
|
||||
[**OpenCode**](/) é um agente de codificação AI de código aberto. Está disponível como uma interface baseada em terminal, aplicativo desktop ou extensão de IDE.
|
||||
|
||||

|
||||
|
||||
Vamos começar.
|
||||
|
||||
---
|
||||
|
||||
#### Pré-requisitos
|
||||
|
||||
Para usar o OpenCode no seu terminal, você precisará de:
|
||||
|
||||
1. Um emulador de terminal moderno como:
|
||||
- [WezTerm](https://wezterm.org), multiplataforma
|
||||
- [Alacritty](https://alacritty.org), multiplataforma
|
||||
- [Ghostty](https://ghostty.org), Linux e macOS
|
||||
- [Kitty](https://sw.kovidgoyal.net/kitty/), Linux e macOS
|
||||
|
||||
2. Chaves de API para os provedores de LLM que você deseja usar.
|
||||
|
||||
---
|
||||
|
||||
## Instalar
|
||||
|
||||
A maneira mais fácil de instalar o OpenCode é através do script de instalação.
|
||||
|
||||
```bash
|
||||
curl -fsSL https://opencode.ai/install | bash
|
||||
```
|
||||
|
||||
Você também pode instalá-lo com os seguintes comandos:
|
||||
|
||||
- **Usando Node.js**
|
||||
|
||||
<Tabs>
|
||||
|
||||
<TabItem label="npm">
|
||||
```bash
|
||||
npm install -g opencode-ai
|
||||
```
|
||||
|
||||
</TabItem>
|
||||
|
||||
<TabItem label="Bun">
|
||||
```bash
|
||||
bun install -g opencode-ai
|
||||
```
|
||||
|
||||
</TabItem>
|
||||
|
||||
<TabItem label="pnpm">
|
||||
```bash
|
||||
pnpm install -g opencode-ai
|
||||
```
|
||||
|
||||
</TabItem>
|
||||
|
||||
<TabItem label="Yarn">
|
||||
```bash
|
||||
yarn global add opencode-ai
|
||||
```
|
||||
|
||||
</TabItem>
|
||||
|
||||
</Tabs>
|
||||
|
||||
- **Usando Homebrew no macOS e Linux**
|
||||
|
||||
```bash
|
||||
brew install anomalyco/tap/opencode
|
||||
```
|
||||
|
||||
> Recomendamos usar o tap do OpenCode para as versões mais atualizadas. A fórmula oficial `brew install opencode` é mantida pela equipe do Homebrew e é atualizada com menos frequência.
|
||||
|
||||
- **Usando Paru no Arch Linux**
|
||||
|
||||
```bash
|
||||
paru -S opencode-bin
|
||||
```
|
||||
|
||||
#### Windows
|
||||
|
||||
:::tip[Recomendado: Use WSL]
|
||||
Para a melhor experiência no Windows, recomendamos usar o [Windows Subsystem for Linux (WSL)](/docs/windows-wsl). Ele oferece melhor desempenho e total compatibilidade com os recursos do OpenCode.
|
||||
:::
|
||||
|
||||
- **Usando Chocolatey**
|
||||
|
||||
```bash
|
||||
choco install opencode
|
||||
```
|
||||
|
||||
- **Usando Scoop**
|
||||
|
||||
```bash
|
||||
scoop install opencode
|
||||
```
|
||||
|
||||
- **Usando NPM**
|
||||
|
||||
```bash
|
||||
npm install -g opencode-ai
|
||||
```
|
||||
|
||||
- **Usando Mise**
|
||||
|
||||
```bash
|
||||
mise use -g github:anomalyco/opencode
|
||||
```
|
||||
|
||||
- **Usando Docker**
|
||||
|
||||
```bash
|
||||
docker run -it --rm ghcr.io/anomalyco/opencode
|
||||
```
|
||||
|
||||
O suporte para instalar o OpenCode no Windows usando Bun está atualmente em andamento.
|
||||
|
||||
Você também pode baixar o binário na seção [Releases](https://github.com/anomalyco/opencode/releases).
|
||||
|
||||
---
|
||||
|
||||
## Configurar
|
||||
|
||||
Com o OpenCode, você pode usar qualquer provedor de LLM configurando suas chaves de API.
|
||||
|
||||
Se você é novo no uso de provedores de LLM, recomendamos usar o [OpenCode Zen](/docs/zen).
|
||||
É uma lista selecionada de modelos que foram testados e verificados pela equipe do OpenCode.
|
||||
|
||||
1. Execute o comando `/connect` no TUI, selecione opencode e acesse [opencode.ai/auth](https://opencode.ai/auth).
|
||||
|
||||
```txt
|
||||
/connect
|
||||
```
|
||||
|
||||
2. Faça login, adicione seus dados de cobrança e copie sua chave de API.
|
||||
|
||||
3. Cole sua chave de API.
|
||||
|
||||
```txt
|
||||
┌ Chave de API
|
||||
│
|
||||
│
|
||||
└ enter
|
||||
```
|
||||
|
||||
Alternativamente, você pode selecionar um dos outros provedores. [Saiba mais](/docs/providers#directory).
|
||||
|
||||
---
|
||||
|
||||
## Inicializar
|
||||
|
||||
Agora que você configurou um provedor, pode navegar até um projeto no qual deseja trabalhar.
|
||||
|
||||
```bash
|
||||
cd /caminho/para/projeto
|
||||
```
|
||||
|
||||
E execute o OpenCode.
|
||||
|
||||
```bash
|
||||
opencode
|
||||
```
|
||||
|
||||
Em seguida, inicialize o OpenCode para o projeto executando o seguinte comando.
|
||||
|
||||
```bash frame="none"
|
||||
/init
|
||||
```
|
||||
|
||||
Isso fará com que o OpenCode analise seu projeto e crie um arquivo `AGENTS.md` na raiz do projeto.
|
||||
|
||||
:::tip
|
||||
Você deve commitar o arquivo `AGENTS.md` do seu projeto no Git.
|
||||
:::
|
||||
|
||||
Isso ajuda o OpenCode a entender a estrutura do projeto e os padrões de codificação utilizados.
|
||||
|
||||
---
|
||||
|
||||
## Uso
|
||||
|
||||
Agora você está pronto para usar o OpenCode para trabalhar em seu projeto. Sinta-se à vontade para perguntar qualquer coisa!
|
||||
|
||||
Se você é novo no uso de um agente de codificação AI, aqui estão alguns exemplos que podem ajudar.
|
||||
|
||||
---
|
||||
|
||||
### Fazer perguntas
|
||||
|
||||
Você pode pedir ao OpenCode para explicar a base de código para você.
|
||||
|
||||
:::tip
|
||||
Use a tecla `@` para buscar arquivos no projeto.
|
||||
:::
|
||||
|
||||
```txt frame="none" "@packages/functions/src/api/index.ts"
|
||||
Como a autenticação é tratada em @packages/functions/src/api/index.ts
|
||||
```
|
||||
|
||||
Isso é útil se houver uma parte da base de código na qual você não trabalhou.
|
||||
|
||||
---
|
||||
|
||||
### Adicionar recursos
|
||||
|
||||
Você pode pedir ao OpenCode para adicionar novos recursos ao seu projeto. Embora primeiro recomendemos pedir para ele criar um plano.
|
||||
|
||||
1. **Criar um plano**
|
||||
|
||||
O OpenCode tem um _Modo de Plano_ que desabilita sua capacidade de fazer alterações e, em vez disso, sugere _como_ implementará o recurso.
|
||||
|
||||
Mude para ele usando a tecla **Tab**. Você verá um indicador para isso no canto inferior direito.
|
||||
|
||||
```bash frame="none" title="Mudar para o modo de plano"
|
||||
<TAB>
|
||||
```
|
||||
|
||||
Agora vamos descrever o que queremos que ele faça.
|
||||
|
||||
```txt frame="none"
|
||||
Quando um usuário excluir uma nota, gostaríamos de marcá-la como excluída no banco de dados.
|
||||
Em seguida, crie uma tela que mostre todas as notas recentemente excluídas.
|
||||
A partir dessa tela, o usuário pode restaurar uma nota ou excluí-la permanentemente.
|
||||
```
|
||||
|
||||
Você quer dar ao OpenCode detalhes suficientes para entender o que você deseja. Ajuda conversar com ele como se você estivesse falando com um desenvolvedor júnior da sua equipe.
|
||||
|
||||
:::tip
|
||||
Dê ao OpenCode bastante contexto e exemplos para ajudá-lo a entender o que você deseja.
|
||||
:::
|
||||
|
||||
2. **Iterar sobre o plano**
|
||||
|
||||
Uma vez que ele lhe der um plano, você pode dar feedback ou adicionar mais detalhes.
|
||||
|
||||
```txt frame="none"
|
||||
Gostaríamos de projetar essa nova tela usando um design que já usei antes.
|
||||
[Imagem #1] Dê uma olhada nesta imagem e use-a como referência.
|
||||
```
|
||||
|
||||
:::tip
|
||||
Arraste e solte imagens no terminal para adicioná-las ao prompt.
|
||||
:::
|
||||
|
||||
O OpenCode pode escanear qualquer imagem que você fornecer e adicioná-la ao prompt. Você pode fazer isso arrastando e soltando uma imagem no terminal.
|
||||
|
||||
3. **Construir o recurso**
|
||||
|
||||
Uma vez que você se sinta confortável com o plano, volte para o _Modo de Construção_ pressionando a tecla **Tab** novamente.
|
||||
|
||||
```bash frame="none"
|
||||
<TAB>
|
||||
```
|
||||
|
||||
E peça para ele fazer as alterações.
|
||||
|
||||
```bash frame="none"
|
||||
Parece bom! Vá em frente e faça as alterações.
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Fazer alterações
|
||||
|
||||
Para alterações mais simples, você pode pedir ao OpenCode para construí-las diretamente sem precisar revisar o plano primeiro.
|
||||
|
||||
```txt frame="none" "@packages/functions/src/settings.ts" "@packages/functions/src/notes.ts"
|
||||
Precisamos adicionar autenticação à rota /settings. Dê uma olhada em como isso é tratado na rota /notes em @packages/functions/src/notes.ts e implemente a mesma lógica em @packages/functions/src/settings.ts
|
||||
```
|
||||
|
||||
Você quer ter certeza de fornecer uma boa quantidade de detalhes para que o OpenCode faça as alterações corretas.
|
||||
|
||||
---
|
||||
|
||||
### Desfazer alterações
|
||||
|
||||
Vamos supor que você peça ao OpenCode para fazer algumas alterações.
|
||||
|
||||
```txt frame="none" "@packages/functions/src/api/index.ts"
|
||||
Você pode refatorar a função em @packages/functions/src/api/index.ts?
|
||||
```
|
||||
|
||||
Mas você percebe que não era isso que você queria. Você **pode desfazer** as alterações usando o comando `/undo`.
|
||||
|
||||
```bash frame="none"
|
||||
/undo
|
||||
```
|
||||
|
||||
O OpenCode agora reverterá as alterações que você fez e mostrará sua mensagem original novamente.
|
||||
|
||||
```txt frame="none" "@packages/functions/src/api/index.ts"
|
||||
Você pode refatorar a função em @packages/functions/src/api/index.ts?
|
||||
```
|
||||
|
||||
A partir daqui, você pode ajustar o prompt e pedir ao OpenCode para tentar novamente.
|
||||
|
||||
:::tip
|
||||
Você pode executar `/undo` várias vezes para desfazer várias alterações.
|
||||
:::
|
||||
|
||||
Ou você **pode refazer** as alterações usando o comando `/redo`.
|
||||
|
||||
```bash frame="none"
|
||||
/redo
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Compartilhar
|
||||
|
||||
As conversas que você tem com o OpenCode podem ser [compartilhadas com sua equipe](/docs/share).
|
||||
|
||||
```bash frame="none"
|
||||
/share
|
||||
```
|
||||
|
||||
Isso criará um link para a conversa atual e o copiará para sua área de transferência.
|
||||
|
||||
:::note
|
||||
As conversas não são compartilhadas por padrão.
|
||||
:::
|
||||
|
||||
Aqui está uma [conversa de exemplo](https://opencode.ai/s/4XP1fce5) com o OpenCode.
|
||||
|
||||
---
|
||||
|
||||
## Personalizar
|
||||
|
||||
E é isso! Agora você é um profissional em usar o OpenCode.
|
||||
|
||||
Para torná-lo seu, recomendamos [escolher um tema](/docs/themes), [personalizar os atalhos de teclado](/docs/keybinds), [configurar formatadores de código](/docs/formatters), [criar comandos personalizados](/docs/commands) ou brincar com a [configuração do OpenCode](/docs/config).
|
||||
192
packages/web/src/content/docs/pt-br/keybinds.mdx
Normal file
192
packages/web/src/content/docs/pt-br/keybinds.mdx
Normal file
@@ -0,0 +1,192 @@
|
||||
---
|
||||
title: Atalhos de Teclado
|
||||
description: Personalize seus atalhos de teclado.
|
||||
---
|
||||
|
||||
OpenCode tem uma lista de atalhos de teclado que você pode personalizar através da configuração do OpenCode.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"keybinds": {
|
||||
"leader": "ctrl+x",
|
||||
"app_exit": "ctrl+c,ctrl+d,<leader>q",
|
||||
"editor_open": "<leader>e",
|
||||
"theme_list": "<leader>t",
|
||||
"sidebar_toggle": "<leader>b",
|
||||
"scrollbar_toggle": "none",
|
||||
"username_toggle": "none",
|
||||
"status_view": "<leader>s",
|
||||
"tool_details": "none",
|
||||
"session_export": "<leader>x",
|
||||
"session_new": "<leader>n",
|
||||
"session_list": "<leader>l",
|
||||
"session_timeline": "<leader>g",
|
||||
"session_fork": "none",
|
||||
"session_rename": "none",
|
||||
"session_share": "none",
|
||||
"session_unshare": "none",
|
||||
"session_interrupt": "escape",
|
||||
"session_compact": "<leader>c",
|
||||
"session_child_cycle": "<leader>right",
|
||||
"session_child_cycle_reverse": "<leader>left",
|
||||
"session_parent": "<leader>up",
|
||||
"messages_page_up": "pageup,ctrl+alt+b",
|
||||
"messages_page_down": "pagedown,ctrl+alt+f",
|
||||
"messages_line_up": "ctrl+alt+y",
|
||||
"messages_line_down": "ctrl+alt+e",
|
||||
"messages_half_page_up": "ctrl+alt+u",
|
||||
"messages_half_page_down": "ctrl+alt+d",
|
||||
"messages_first": "ctrl+g,home",
|
||||
"messages_last": "ctrl+alt+g,end",
|
||||
"messages_next": "none",
|
||||
"messages_previous": "none",
|
||||
"messages_copy": "<leader>y",
|
||||
"messages_undo": "<leader>u",
|
||||
"messages_redo": "<leader>r",
|
||||
"messages_last_user": "none",
|
||||
"messages_toggle_conceal": "<leader>h",
|
||||
"model_list": "<leader>m",
|
||||
"model_cycle_recent": "f2",
|
||||
"model_cycle_recent_reverse": "shift+f2",
|
||||
"model_cycle_favorite": "none",
|
||||
"model_cycle_favorite_reverse": "none",
|
||||
"variant_cycle": "ctrl+t",
|
||||
"command_list": "ctrl+p",
|
||||
"agent_list": "<leader>a",
|
||||
"agent_cycle": "tab",
|
||||
"agent_cycle_reverse": "shift+tab",
|
||||
"input_clear": "ctrl+c",
|
||||
"input_paste": "ctrl+v",
|
||||
"input_submit": "return",
|
||||
"input_newline": "shift+return,ctrl+return,alt+return,ctrl+j",
|
||||
"input_move_left": "left,ctrl+b",
|
||||
"input_move_right": "right,ctrl+f",
|
||||
"input_move_up": "up",
|
||||
"input_move_down": "down",
|
||||
"input_select_left": "shift+left",
|
||||
"input_select_right": "shift+right",
|
||||
"input_select_up": "shift+up",
|
||||
"input_select_down": "shift+down",
|
||||
"input_line_home": "ctrl+a",
|
||||
"input_line_end": "ctrl+e",
|
||||
"input_select_line_home": "ctrl+shift+a",
|
||||
"input_select_line_end": "ctrl+shift+e",
|
||||
"input_visual_line_home": "alt+a",
|
||||
"input_visual_line_end": "alt+e",
|
||||
"input_select_visual_line_home": "alt+shift+a",
|
||||
"input_select_visual_line_end": "alt+shift+e",
|
||||
"input_buffer_home": "home",
|
||||
"input_buffer_end": "end",
|
||||
"input_select_buffer_home": "shift+home",
|
||||
"input_select_buffer_end": "shift+end",
|
||||
"input_delete_line": "ctrl+shift+d",
|
||||
"input_delete_to_line_end": "ctrl+k",
|
||||
"input_delete_to_line_start": "ctrl+u",
|
||||
"input_backspace": "backspace,shift+backspace",
|
||||
"input_delete": "ctrl+d,delete,shift+delete",
|
||||
"input_undo": "ctrl+-,super+z",
|
||||
"input_redo": "ctrl+.,super+shift+z",
|
||||
"input_word_forward": "alt+f,alt+right,ctrl+right",
|
||||
"input_word_backward": "alt+b,alt+left,ctrl+left",
|
||||
"input_select_word_forward": "alt+shift+f,alt+shift+right",
|
||||
"input_select_word_backward": "alt+shift+b,alt+shift+left",
|
||||
"input_delete_word_forward": "alt+d,alt+delete,ctrl+delete",
|
||||
"input_delete_word_backward": "ctrl+w,ctrl+backspace,alt+backspace",
|
||||
"history_previous": "up",
|
||||
"history_next": "down",
|
||||
"terminal_suspend": "ctrl+z",
|
||||
"terminal_title_toggle": "none",
|
||||
"tips_toggle": "<leader>h",
|
||||
"display_thinking": "none"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Tecla líder
|
||||
|
||||
OpenCode usa uma tecla `leader` para a maioria dos atalhos de teclado. Isso evita conflitos no seu terminal.
|
||||
|
||||
Por padrão, `ctrl+x` é a tecla líder e a maioria das ações requer que você primeiro pressione a tecla líder e depois o atalho. Por exemplo, para iniciar uma nova sessão, você primeiro pressiona `ctrl+x` e depois pressiona `n`.
|
||||
|
||||
Você não precisa usar uma tecla líder para seus atalhos, mas recomendamos que o faça.
|
||||
|
||||
---
|
||||
|
||||
## Desativar atalho
|
||||
|
||||
Você pode desativar um atalho adicionando a tecla à sua configuração com um valor de "none".
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"keybinds": {
|
||||
"session_compact": "none"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Atalhos do prompt do desktop
|
||||
|
||||
O prompt de entrada do aplicativo desktop OpenCode suporta atalhos comuns de estilo Readline/Emacs para edição de texto. Estes são embutidos e atualmente não são configuráveis via `opencode.json`.
|
||||
|
||||
| Atalho | Ação |
|
||||
| -------- | ---------------------------------------- |
|
||||
| `ctrl+a` | Mover para o início da linha atual |
|
||||
| `ctrl+e` | Mover para o final da linha atual |
|
||||
| `ctrl+b` | Mover o cursor uma posição para trás |
|
||||
| `ctrl+f` | Mover o cursor uma posição para frente |
|
||||
| `alt+b` | Mover o cursor uma palavra para trás |
|
||||
| `alt+f` | Mover o cursor uma palavra para frente |
|
||||
| `ctrl+d` | Deletar o caractere sob o cursor |
|
||||
| `ctrl+k` | Matar até o final da linha |
|
||||
| `ctrl+u` | Matar até o início da linha |
|
||||
| `ctrl+w` | Matar a palavra anterior |
|
||||
| `alt+d` | Matar a próxima palavra |
|
||||
| `ctrl+t` | Transpor caracteres |
|
||||
| `ctrl+g` | Cancelar popovers / abortar resposta em execução |
|
||||
|
||||
---
|
||||
|
||||
## Shift+Enter
|
||||
|
||||
Alguns terminais não enviam teclas modificadoras com Enter por padrão. Você pode precisar configurar seu terminal para enviar `Shift+Enter` como uma sequência de escape.
|
||||
|
||||
### Windows Terminal
|
||||
|
||||
Abra seu `settings.json` em:
|
||||
|
||||
```
|
||||
%LOCALAPPDATA%\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\settings.json
|
||||
```
|
||||
|
||||
Adicione isso ao array `actions` de nível raiz:
|
||||
|
||||
```json
|
||||
"actions": [
|
||||
{
|
||||
"command": {
|
||||
"action": "sendInput",
|
||||
"input": "\u001b[13;2u"
|
||||
},
|
||||
"id": "User.sendInput.ShiftEnterCustom"
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
Adicione isso ao array `keybindings` de nível raiz:
|
||||
|
||||
```json
|
||||
"keybindings": [
|
||||
{
|
||||
"keys": "shift+enter",
|
||||
"id": "User.sendInput.ShiftEnterCustom"
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
Salve o arquivo e reinicie o Windows Terminal ou abra uma nova aba.
|
||||
188
packages/web/src/content/docs/pt-br/lsp.mdx
Normal file
188
packages/web/src/content/docs/pt-br/lsp.mdx
Normal file
@@ -0,0 +1,188 @@
|
||||
---
|
||||
title: Servidores LSP
|
||||
description: OpenCode integra-se aos seus servidores LSP.
|
||||
---
|
||||
|
||||
OpenCode integra-se ao seu Protocolo de Servidor de Linguagem (LSP) para ajudar o LLM a interagir com sua base de código. Ele usa diagnósticos para fornecer feedback ao LLM.
|
||||
|
||||
---
|
||||
|
||||
## Integrado
|
||||
|
||||
OpenCode vem com vários servidores LSP integrados para linguagens populares:
|
||||
|
||||
| Servidor LSP | Extensões | Requisitos |
|
||||
| ------------------ | ------------------------------------------------------------------- | ---------------------------------------------------------- |
|
||||
| astro | .astro | Instala automaticamente para projetos Astro |
|
||||
| bash | .sh, .bash, .zsh, .ksh | Instala automaticamente bash-language-server |
|
||||
| clangd | .c, .cpp, .cc, .cxx, .c++, .h, .hpp, .hh, .hxx, .h++ | Instala automaticamente para projetos C/C++ |
|
||||
| csharp | .cs | `.NET SDK` instalado |
|
||||
| clojure-lsp | .clj, .cljs, .cljc, .edn | Comando `clojure-lsp` disponível |
|
||||
| dart | .dart | Comando `dart` disponível |
|
||||
| deno | .ts, .tsx, .js, .jsx, .mjs | Comando `deno` disponível (detecta automaticamente deno.json/deno.jsonc) |
|
||||
| elixir-ls | .ex, .exs | Comando `elixir` disponível |
|
||||
| eslint | .ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts, .vue | Dependência `eslint` no projeto |
|
||||
| fsharp | .fs, .fsi, .fsx, .fsscript | `.NET SDK` instalado |
|
||||
| gleam | .gleam | Comando `gleam` disponível |
|
||||
| gopls | .go | Comando `go` disponível |
|
||||
| hls | .hs, .lhs | Comando `haskell-language-server-wrapper` disponível |
|
||||
| jdtls | .java | `Java SDK (versão 21+)` instalado |
|
||||
| kotlin-ls | .kt, .kts | Instala automaticamente para projetos Kotlin |
|
||||
| lua-ls | .lua | Instala automaticamente para projetos Lua |
|
||||
| nixd | .nix | Comando `nixd` disponível |
|
||||
| ocaml-lsp | .ml, .mli | Comando `ocamllsp` disponível |
|
||||
| oxlint | .ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts, .vue, .astro, .svelte | Dependência `oxlint` no projeto |
|
||||
| php intelephense | .php | Instala automaticamente para projetos PHP |
|
||||
| prisma | .prisma | Comando `prisma` disponível |
|
||||
| pyright | .py, .pyi | Dependência `pyright` instalada |
|
||||
| ruby-lsp (rubocop) | .rb, .rake, .gemspec, .ru | Comandos `ruby` e `gem` disponíveis |
|
||||
| rust | .rs | Comando `rust-analyzer` disponível |
|
||||
| sourcekit-lsp | .swift, .objc, .objcpp | `swift` instalado (`xcode` no macOS) |
|
||||
| svelte | .svelte | Instala automaticamente para projetos Svelte |
|
||||
| terraform | .tf, .tfvars | Instala automaticamente a partir de lançamentos do GitHub |
|
||||
| tinymist | .typ, .typc | Instala automaticamente a partir de lançamentos do GitHub |
|
||||
| typescript | .ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts | Dependência `typescript` no projeto |
|
||||
| vue | .vue | Instala automaticamente para projetos Vue |
|
||||
| yaml-ls | .yaml, .yml | Instala automaticamente o servidor yaml-language-server da Red Hat |
|
||||
| zls | .zig, .zon | Comando `zig` disponível |
|
||||
|
||||
Os servidores LSP são habilitados automaticamente quando uma das extensões de arquivo acima é detectada e os requisitos são atendidos.
|
||||
|
||||
:::note
|
||||
Você pode desabilitar os downloads automáticos do servidor LSP definindo a variável de ambiente `OPENCODE_DISABLE_LSP_DOWNLOAD` como `true`.
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
## Como Funciona
|
||||
|
||||
Quando o opencode abre um arquivo, ele:
|
||||
|
||||
1. Verifica a extensão do arquivo em relação a todos os servidores LSP habilitados.
|
||||
2. Inicia o servidor LSP apropriado se não estiver em execução.
|
||||
|
||||
---
|
||||
|
||||
## Configurar
|
||||
|
||||
Você pode personalizar os servidores LSP através da seção `lsp` na sua configuração do opencode.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"lsp": {}
|
||||
}
|
||||
```
|
||||
|
||||
Cada servidor LSP suporta o seguinte:
|
||||
|
||||
| Propriedade | Tipo | Descrição |
|
||||
| ------------------ | -------- | ------------------------------------------------- |
|
||||
| `disabled` | boolean | Defina como `true` para desabilitar o servidor LSP |
|
||||
| `command` | string[] | O comando para iniciar o servidor LSP |
|
||||
| `extensions` | string[] | Extensões de arquivo que este servidor LSP deve manipular |
|
||||
| `env` | object | Variáveis de ambiente a serem definidas ao iniciar o servidor |
|
||||
| `initialization` | object | Opções de inicialização a serem enviadas ao servidor LSP |
|
||||
|
||||
Vamos ver alguns exemplos.
|
||||
|
||||
---
|
||||
|
||||
### Variáveis de ambiente
|
||||
|
||||
Use a propriedade `env` para definir variáveis de ambiente ao iniciar o servidor LSP:
|
||||
|
||||
```json title="opencode.json" {5-7}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"lsp": {
|
||||
"rust": {
|
||||
"env": {
|
||||
"RUST_LOG": "debug"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Opções de inicialização
|
||||
|
||||
Use a propriedade `initialization` para passar opções de inicialização ao servidor LSP. Estas são configurações específicas do servidor enviadas durante a solicitação `initialize` do LSP:
|
||||
|
||||
```json title="opencode.json" {5-9}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"lsp": {
|
||||
"typescript": {
|
||||
"initialization": {
|
||||
"preferences": {
|
||||
"importModuleSpecifierPreference": "relative"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
:::note
|
||||
As opções de inicialização variam de acordo com o servidor LSP. Verifique a documentação do seu servidor LSP para opções disponíveis.
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
### Desabilitando servidores LSP
|
||||
|
||||
Para desabilitar **todos** os servidores LSP globalmente, defina `lsp` como `false`:
|
||||
|
||||
```json title="opencode.json" {3}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"lsp": false
|
||||
}
|
||||
```
|
||||
|
||||
Para desabilitar um servidor LSP **específico**, defina `disabled` como `true`:
|
||||
|
||||
```json title="opencode.json" {5}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"lsp": {
|
||||
"typescript": {
|
||||
"disabled": true
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Servidores LSP personalizados
|
||||
|
||||
Você pode adicionar servidores LSP personalizados especificando o comando e as extensões de arquivo:
|
||||
|
||||
```json title="opencode.json" {4-7}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"lsp": {
|
||||
"custom-lsp": {
|
||||
"command": ["custom-lsp-server", "--stdio"],
|
||||
"extensions": [".custom"]
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Informações Adicionais
|
||||
|
||||
### PHP Intelephense
|
||||
|
||||
PHP Intelephense oferece recursos premium através de uma chave de licença. Você pode fornecer uma chave de licença colocando (apenas) a chave em um arquivo de texto em:
|
||||
|
||||
- No macOS/Linux: `$HOME/intelephense/licence.txt`
|
||||
- No Windows: `%USERPROFILE%/intelephense/licence.txt`
|
||||
|
||||
O arquivo deve conter apenas a chave de licença sem conteúdo adicional.
|
||||
511
packages/web/src/content/docs/pt-br/mcp-servers.mdx
Normal file
511
packages/web/src/content/docs/pt-br/mcp-servers.mdx
Normal file
@@ -0,0 +1,511 @@
|
||||
---
|
||||
title: Servidores MCP
|
||||
description: Adicione ferramentas MCP locais e remotas.
|
||||
---
|
||||
|
||||
Você pode adicionar ferramentas externas ao OpenCode usando o _Modelo de Contexto de Protocolo_, ou MCP. O OpenCode suporta servidores locais e remotos.
|
||||
|
||||
Uma vez adicionadas, as ferramentas MCP estão automaticamente disponíveis para o LLM juntamente com as ferramentas integradas.
|
||||
|
||||
---
|
||||
|
||||
#### Avisos
|
||||
|
||||
Quando você usa um servidor MCP, ele adiciona ao contexto. Isso pode rapidamente se acumular se você tiver muitas ferramentas. Portanto, recomendamos ter cuidado com quais servidores MCP você usa.
|
||||
|
||||
:::tip
|
||||
Os servidores MCP adicionam ao seu contexto, então você deve ter cuidado com quais você habilita.
|
||||
:::
|
||||
|
||||
Certos servidores MCP, como o servidor MCP do GitHub, tendem a adicionar muitos tokens e podem facilmente exceder o limite de contexto.
|
||||
|
||||
---
|
||||
|
||||
## Habilitar
|
||||
|
||||
Você pode definir servidores MCP em sua [Configuração do OpenCode](https://opencode.ai/docs/config/) sob `mcp`. Adicione cada MCP com um nome único. Você pode se referir a esse MCP pelo nome ao solicitar ao LLM.
|
||||
|
||||
```jsonc title="opencode.jsonc" {6}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mcp": {
|
||||
"nome-do-servidor-mcp": {
|
||||
// ...
|
||||
"enabled": true,
|
||||
},
|
||||
"nome-do-outro-servidor-mcp": {
|
||||
// ...
|
||||
},
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
Você também pode desabilitar um servidor definindo `enabled` como `false`. Isso é útil se você quiser desabilitar temporariamente um servidor sem removê-lo de sua configuração.
|
||||
|
||||
---
|
||||
|
||||
### Substituindo padrões remotos
|
||||
|
||||
As organizações podem fornecer servidores MCP padrão através de seu endpoint `.well-known/opencode`. Esses servidores podem estar desabilitados por padrão, permitindo que os usuários optem pelos que precisam.
|
||||
|
||||
Para habilitar um servidor específico da configuração remota da sua organização, adicione-o à sua configuração local com `enabled: true`:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mcp": {
|
||||
"jira": {
|
||||
"type": "remote",
|
||||
"url": "https://jira.example.com/mcp",
|
||||
"enabled": true
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Os valores da sua configuração local substituem os padrões remotos. Veja [precedência de configuração](/docs/config#precedence-order) para mais detalhes.
|
||||
|
||||
---
|
||||
|
||||
## Local
|
||||
|
||||
Adicione servidores MCP locais usando `type` como `"local"` dentro do objeto MCP.
|
||||
|
||||
```jsonc title="opencode.jsonc" {15}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mcp": {
|
||||
"meu-servidor-mcp-local": {
|
||||
"type": "local",
|
||||
// Ou ["bun", "x", "meu-comando-mcp"]
|
||||
"command": ["npx", "-y", "meu-comando-mcp"],
|
||||
"enabled": true,
|
||||
"environment": {
|
||||
"MINHA_VAR_DE_ENV": "valor_da_var_de_env",
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
O comando é como o servidor MCP local é iniciado. Você também pode passar uma lista de variáveis de ambiente.
|
||||
|
||||
Por exemplo, aqui está como você pode adicionar o servidor MCP de teste [`@modelcontextprotocol/server-everything`](https://www.npmjs.com/package/@modelcontextprotocol/server-everything).
|
||||
|
||||
```jsonc title="opencode.jsonc"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mcp": {
|
||||
"mcp_tudo": {
|
||||
"type": "local",
|
||||
"command": ["npx", "-y", "@modelcontextprotocol/server-everything"],
|
||||
},
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
E para usá-lo, posso adicionar `use the mcp_tudo tool` aos meus prompts.
|
||||
|
||||
```txt "mcp_tudo"
|
||||
use the mcp_tudo tool to add the number 3 and 4
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### Opções
|
||||
|
||||
Aqui estão todas as opções para configurar um servidor MCP local.
|
||||
|
||||
| Opção | Tipo | Requerido | Descrição |
|
||||
| ------------ | ------- | --------- | --------------------------------------------------------------------------------- |
|
||||
| `type` | String | S | Tipo de conexão do servidor MCP, deve ser `"local"`. |
|
||||
| `command` | Array | S | Comando e argumentos para executar o servidor MCP. |
|
||||
| `environment`| Object | | Variáveis de ambiente a serem definidas ao executar o servidor. |
|
||||
| `enabled` | Boolean | | Habilitar ou desabilitar o servidor MCP na inicialização. |
|
||||
| `timeout` | Number | | Tempo limite em ms para buscar ferramentas do servidor MCP. O padrão é 5000 (5 segundos). |
|
||||
|
||||
---
|
||||
|
||||
## Remoto
|
||||
|
||||
Adicione servidores MCP remotos definindo `type` como `"remote"`.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mcp": {
|
||||
"meu-mcp-remoto": {
|
||||
"type": "remote",
|
||||
"url": "https://meu-servidor-mcp.com",
|
||||
"enabled": true,
|
||||
"headers": {
|
||||
"Authorization": "Bearer MINHA_CHAVE_API"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
O `url` é a URL do servidor MCP remoto e com a opção `headers` você pode passar uma lista de cabeçalhos.
|
||||
|
||||
---
|
||||
|
||||
#### Opções
|
||||
|
||||
| Opção | Tipo | Requerido | Descrição |
|
||||
| -------- | ------- | --------- | --------------------------------------------------------------------------------- |
|
||||
| `type` | String | S | Tipo de conexão do servidor MCP, deve ser `"remote"`. |
|
||||
| `url` | String | S | URL do servidor MCP remoto. |
|
||||
| `enabled`| Boolean | | Habilitar ou desabilitar o servidor MCP na inicialização. |
|
||||
| `headers`| Object | | Cabeçalhos a serem enviados com a solicitação. |
|
||||
| `oauth` | Object | | Configuração de autenticação OAuth. Veja a seção [OAuth](#oauth) abaixo. |
|
||||
| `timeout`| Number | | Tempo limite em ms para buscar ferramentas do servidor MCP. O padrão é 5000 (5 segundos). |
|
||||
|
||||
---
|
||||
|
||||
## OAuth
|
||||
|
||||
O OpenCode lida automaticamente com a autenticação OAuth para servidores MCP remotos. Quando um servidor requer autenticação, o OpenCode irá:
|
||||
|
||||
1. Detectar a resposta 401 e iniciar o fluxo OAuth
|
||||
2. Usar **Registro Dinâmico de Cliente (RFC 7591)** se suportado pelo servidor
|
||||
3. Armazenar tokens de forma segura para futuras solicitações
|
||||
|
||||
---
|
||||
|
||||
### Automático
|
||||
|
||||
Para a maioria dos servidores MCP habilitados para OAuth, nenhuma configuração especial é necessária. Basta configurar o servidor remoto:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mcp": {
|
||||
"meu-servidor-oauth": {
|
||||
"type": "remote",
|
||||
"url": "https://mcp.exemplo.com/mcp"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Se o servidor requer autenticação, o OpenCode solicitará que você se autentique quando tentar usá-lo pela primeira vez. Se não, você pode [iniciar manualmente o fluxo](#authenticating) com `opencode mcp auth <nome-do-servidor>`.
|
||||
|
||||
---
|
||||
|
||||
### Pré-registrado
|
||||
|
||||
Se você tiver credenciais de cliente do provedor do servidor MCP, pode configurá-las:
|
||||
|
||||
```json title="opencode.json" {7-11}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mcp": {
|
||||
"meu-servidor-oauth": {
|
||||
"type": "remote",
|
||||
"url": "https://mcp.exemplo.com/mcp",
|
||||
"oauth": {
|
||||
"clientId": "{env:MINHA_CHAVE_CLIENTE_MCP}",
|
||||
"clientSecret": "{env:MINHA_CHAVE_SECRETA_MCP}",
|
||||
"scope": "tools:read tools:execute"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Autenticando
|
||||
|
||||
Você pode iniciar manualmente a autenticação ou gerenciar credenciais.
|
||||
|
||||
Autentique-se com um servidor MCP específico:
|
||||
|
||||
```bash
|
||||
opencode mcp auth meu-servidor-oauth
|
||||
```
|
||||
|
||||
Liste todos os servidores MCP e seu status de autenticação:
|
||||
|
||||
```bash
|
||||
opencode mcp list
|
||||
```
|
||||
|
||||
Remova credenciais armazenadas:
|
||||
|
||||
```bash
|
||||
opencode mcp logout meu-servidor-oauth
|
||||
```
|
||||
|
||||
O comando `mcp auth` abrirá seu navegador para autorização. Após você autorizar, o OpenCode armazenará os tokens de forma segura em `~/.local/share/opencode/mcp-auth.json`.
|
||||
|
||||
---
|
||||
|
||||
#### Desabilitando OAuth
|
||||
|
||||
Se você quiser desabilitar o OAuth automático para um servidor (por exemplo, para servidores que usam chaves de API em vez disso), defina `oauth` como `false`:
|
||||
|
||||
```json title="opencode.json" {7}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mcp": {
|
||||
"meu-servidor-chave-api": {
|
||||
"type": "remote",
|
||||
"url": "https://mcp.exemplo.com/mcp",
|
||||
"oauth": false,
|
||||
"headers": {
|
||||
"Authorization": "Bearer {env:MINHA_CHAVE_API}"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### Opções de OAuth
|
||||
|
||||
| Opção | Tipo | Descrição |
|
||||
| -------------- | ----------------- | ------------------------------------------------------------------------------- |
|
||||
| `oauth` | Object \| false | Objeto de configuração OAuth, ou `false` para desabilitar a detecção automática de OAuth. |
|
||||
| `clientId` | String | ID do cliente OAuth. Se não fornecido, o registro dinâmico do cliente será tentado. |
|
||||
| `clientSecret` | String | Segredo do cliente OAuth, se necessário pelo servidor de autorização. |
|
||||
| `scope` | String | Escopos OAuth a serem solicitados durante a autorização. |
|
||||
|
||||
#### Depuração
|
||||
|
||||
Se um servidor MCP remoto estiver falhando na autenticação, você pode diagnosticar problemas com:
|
||||
|
||||
```bash
|
||||
# Ver status de autenticação para todos os servidores com capacidade OAuth
|
||||
opencode mcp auth list
|
||||
|
||||
# Depurar conexão e fluxo OAuth para um servidor específico
|
||||
opencode mcp debug meu-servidor-oauth
|
||||
```
|
||||
|
||||
O comando `mcp debug` mostra o status de autenticação atual, testa a conectividade HTTP e tenta o fluxo de descoberta OAuth.
|
||||
|
||||
---
|
||||
|
||||
## Gerenciar
|
||||
|
||||
Seus MCPs estão disponíveis como ferramentas no OpenCode, juntamente com ferramentas integradas. Portanto, você pode gerenciá-los através da configuração do OpenCode como qualquer outra ferramenta.
|
||||
|
||||
---
|
||||
|
||||
### Global
|
||||
|
||||
Isso significa que você pode habilitá-los ou desabilitá-los globalmente.
|
||||
|
||||
```json title="opencode.json" {14}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mcp": {
|
||||
"meu-mcp-foo": {
|
||||
"type": "local",
|
||||
"command": ["bun", "x", "meu-comando-mcp-foo"]
|
||||
},
|
||||
"meu-mcp-bar": {
|
||||
"type": "local",
|
||||
"command": ["bun", "x", "meu-comando-mcp-bar"]
|
||||
}
|
||||
},
|
||||
"tools": {
|
||||
"meu-mcp-foo": false
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Também podemos usar um padrão glob para desabilitar todos os MCPs correspondentes.
|
||||
|
||||
```json title="opencode.json" {14}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mcp": {
|
||||
"meu-mcp-foo": {
|
||||
"type": "local",
|
||||
"command": ["bun", "x", "meu-comando-mcp-foo"]
|
||||
},
|
||||
"meu-mcp-bar": {
|
||||
"type": "local",
|
||||
"command": ["bun", "x", "meu-comando-mcp-bar"]
|
||||
}
|
||||
},
|
||||
"tools": {
|
||||
"meu-mcp*": false
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Aqui estamos usando o padrão glob `meu-mcp*` para desabilitar todos os MCPs.
|
||||
|
||||
---
|
||||
|
||||
### Por agente
|
||||
|
||||
Se você tiver um grande número de servidores MCP, pode querer habilitá-los apenas por agente e desabilitá-los globalmente. Para fazer isso:
|
||||
|
||||
1. Desabilite-o como uma ferramenta globalmente.
|
||||
2. Em sua [configuração de agente](/docs/agents#tools), habilite o servidor MCP como uma ferramenta.
|
||||
|
||||
```json title="opencode.json" {11, 14-18}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mcp": {
|
||||
"meu-mcp": {
|
||||
"type": "local",
|
||||
"command": ["bun", "x", "meu-comando-mcp"],
|
||||
"enabled": true
|
||||
}
|
||||
},
|
||||
"tools": {
|
||||
"meu-mcp*": false
|
||||
},
|
||||
"agent": {
|
||||
"meu-agente": {
|
||||
"tools": {
|
||||
"meu-mcp*": true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### Padrões glob
|
||||
|
||||
O padrão glob usa padrões simples de regex globbing:
|
||||
|
||||
- `*` corresponde a zero ou mais de qualquer caractere (por exemplo, `"meu-mcp*"` corresponde a `meu-mcp_search`, `meu-mcp_list`, etc.)
|
||||
- `?` corresponde exatamente a um caractere
|
||||
- Todos os outros caracteres correspondem literalmente
|
||||
|
||||
:::note
|
||||
As ferramentas do servidor MCP são registradas com o nome do servidor como prefixo, então para desabilitar todas as ferramentas de um servidor, simplesmente use:
|
||||
|
||||
```
|
||||
"mynome_do_servidor_mcp_*": false
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
## Exemplos
|
||||
|
||||
Abaixo estão exemplos de alguns servidores MCP comuns. Você pode enviar um PR se quiser documentar outros servidores.
|
||||
|
||||
---
|
||||
|
||||
### Sentry
|
||||
|
||||
Adicione o [servidor MCP Sentry](https://mcp.sentry.dev) para interagir com seus projetos e problemas do Sentry.
|
||||
|
||||
```json title="opencode.json" {4-8}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mcp": {
|
||||
"sentry": {
|
||||
"type": "remote",
|
||||
"url": "https://mcp.sentry.dev/mcp",
|
||||
"oauth": {}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Após adicionar a configuração, autentique-se com o Sentry:
|
||||
|
||||
```bash
|
||||
opencode mcp auth sentry
|
||||
```
|
||||
|
||||
Isso abrirá uma janela do navegador para completar o fluxo OAuth e conectar o OpenCode à sua conta do Sentry.
|
||||
|
||||
Uma vez autenticado, você pode usar ferramentas do Sentry em seus prompts para consultar problemas, projetos e dados de erro.
|
||||
|
||||
```txt "use sentry"
|
||||
Show me the latest unresolved issues in my project. use sentry
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Context7
|
||||
|
||||
Adicione o [servidor MCP Context7](https://github.com/upstash/context7) para pesquisar através de documentos.
|
||||
|
||||
```json title="opencode.json" {4-7}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mcp": {
|
||||
"context7": {
|
||||
"type": "remote",
|
||||
"url": "https://mcp.context7.com/mcp"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Se você se inscreveu para uma conta gratuita, pode usar sua chave de API e obter limites de taxa mais altos.
|
||||
|
||||
```json title="opencode.json" {7-9}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mcp": {
|
||||
"context7": {
|
||||
"type": "remote",
|
||||
"url": "https://mcp.context7.com/mcp",
|
||||
"headers": {
|
||||
"CONTEXT7_API_KEY": "{env:CONTEXT7_API_KEY}"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Aqui estamos assumindo que você tem a variável de ambiente `CONTEXT7_API_KEY` definida.
|
||||
|
||||
Adicione `use context7` aos seus prompts para usar o servidor MCP Context7.
|
||||
|
||||
```txt "use context7"
|
||||
Configure a Cloudflare Worker script to cache JSON API responses for five minutes. use context7
|
||||
```
|
||||
|
||||
Alternativamente, você pode adicionar algo assim ao seu [AGENTS.md](/docs/rules/).
|
||||
|
||||
```md title="AGENTS.md"
|
||||
When you need to search docs, use `context7` tools.
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Grep by Vercel
|
||||
|
||||
Adicione o [Grep by Vercel](https://grep.app) servidor MCP para pesquisar através de trechos de código no GitHub.
|
||||
|
||||
```json title="opencode.json" {4-7}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mcp": {
|
||||
"gh_grep": {
|
||||
"type": "remote",
|
||||
"url": "https://mcp.grep.app"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Como nomeamos nosso servidor MCP como `gh_grep`, você pode adicionar `use the gh_grep tool` aos seus prompts para fazer o agente usá-lo.
|
||||
|
||||
```txt "use the gh_grep tool"
|
||||
What's the right way to set a custom domain in an SST Astro component? use the gh_grep tool
|
||||
```
|
||||
|
||||
Alternativamente, você pode adicionar algo assim ao seu [AGENTS.md](/docs/rules/).
|
||||
|
||||
```md title="AGENTS.md"
|
||||
If you are unsure how to do something, use `gh_grep` to search code examples from GitHub.
|
||||
```
|
||||
222
packages/web/src/content/docs/pt-br/models.mdx
Normal file
222
packages/web/src/content/docs/pt-br/models.mdx
Normal file
@@ -0,0 +1,222 @@
|
||||
---
|
||||
title: Modelos
|
||||
description: Configurando um provedor e modelo LLM.
|
||||
---
|
||||
|
||||
OpenCode usa o [AI SDK](https://ai-sdk.dev/) e [Models.dev](https://models.dev) para suportar **75+ provedores LLM** e suporta a execução de modelos locais.
|
||||
|
||||
---
|
||||
|
||||
## Provedores
|
||||
|
||||
Os provedores mais populares são pré-carregados por padrão. Se você adicionou as credenciais para um provedor através do comando `/connect`, elas estarão disponíveis quando você iniciar o OpenCode.
|
||||
|
||||
Saiba mais sobre [provedores](/docs/providers).
|
||||
|
||||
---
|
||||
|
||||
## Selecione um modelo
|
||||
|
||||
Depois de configurar seu provedor, você pode selecionar o modelo que deseja digitando:
|
||||
|
||||
```bash frame="none"
|
||||
/models
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Modelos recomendados
|
||||
|
||||
Existem muitos modelos disponíveis, com novos modelos sendo lançados toda semana.
|
||||
|
||||
:::tip
|
||||
Considere usar um dos modelos que recomendamos.
|
||||
:::
|
||||
|
||||
No entanto, há apenas alguns deles que são bons tanto em gerar código quanto em chamar ferramentas.
|
||||
|
||||
Aqui estão vários modelos que funcionam bem com o OpenCode, em nenhuma ordem específica. (Esta não é uma lista exaustiva nem necessariamente atualizada):
|
||||
|
||||
- GPT 5.2
|
||||
- GPT 5.1 Codex
|
||||
- Claude Opus 4.5
|
||||
- Claude Sonnet 4.5
|
||||
- Minimax M2.1
|
||||
- Gemini 3 Pro
|
||||
|
||||
---
|
||||
|
||||
## Defina um padrão
|
||||
|
||||
Para definir um desses como o modelo padrão, você pode definir a chave `model` na sua configuração do OpenCode.
|
||||
|
||||
```json title="opencode.json" {3}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"model": "lmstudio/google/gemma-3n-e4b"
|
||||
}
|
||||
```
|
||||
|
||||
Aqui, o ID completo é `provider_id/model_id`. Por exemplo, se você estiver usando [OpenCode Zen](/docs/zen), você usaria `opencode/gpt-5.1-codex` para GPT 5.1 Codex.
|
||||
|
||||
Se você configurou um [provedor personalizado](/docs/providers#custom), o `provider_id` é a chave da parte `provider` da sua configuração, e o `model_id` é a chave de `provider.models`.
|
||||
|
||||
---
|
||||
|
||||
## Configurar modelos
|
||||
|
||||
Você pode configurar globalmente as opções de um modelo através da configuração.
|
||||
|
||||
```jsonc title="opencode.jsonc" {7-12,19-24}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"provider": {
|
||||
"openai": {
|
||||
"models": {
|
||||
"gpt-5": {
|
||||
"options": {
|
||||
"reasoningEffort": "high",
|
||||
"textVerbosity": "low",
|
||||
"reasoningSummary": "auto",
|
||||
"include": ["reasoning.encrypted_content"],
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
"anthropic": {
|
||||
"models": {
|
||||
"claude-sonnet-4-5-20250929": {
|
||||
"options": {
|
||||
"thinking": {
|
||||
"type": "enabled",
|
||||
"budgetTokens": 16000,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
Aqui estamos configurando as configurações globais para dois modelos integrados: `gpt-5` quando acessado via o provedor `openai`, e `claude-sonnet-4-20250514` quando acessado via o provedor `anthropic`.
|
||||
Os nomes dos provedores e modelos integrados podem ser encontrados em [Models.dev](https://models.dev).
|
||||
|
||||
Você também pode configurar essas opções para quaisquer agentes que estiver usando. A configuração do agente substitui quaisquer opções globais aqui. [Saiba mais](/docs/agents/#additional).
|
||||
|
||||
Você também pode definir variantes personalizadas que estendem as integradas. As variantes permitem que você configure diferentes configurações para o mesmo modelo sem criar entradas duplicadas:
|
||||
|
||||
```jsonc title="opencode.jsonc" {6-21}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"provider": {
|
||||
"opencode": {
|
||||
"models": {
|
||||
"gpt-5": {
|
||||
"variants": {
|
||||
"high": {
|
||||
"reasoningEffort": "high",
|
||||
"textVerbosity": "low",
|
||||
"reasoningSummary": "auto",
|
||||
},
|
||||
"low": {
|
||||
"reasoningEffort": "low",
|
||||
"textVerbosity": "low",
|
||||
"reasoningSummary": "auto",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Variantes
|
||||
|
||||
Muitos modelos suportam várias variantes com diferentes configurações. O OpenCode vem com variantes padrão integradas para provedores populares.
|
||||
|
||||
### Variantes integradas
|
||||
|
||||
O OpenCode vem com variantes padrão para muitos provedores:
|
||||
|
||||
**Anthropic**:
|
||||
|
||||
- `high` - Orçamento de pensamento alto (padrão)
|
||||
- `max` - Orçamento de pensamento máximo
|
||||
|
||||
**OpenAI**:
|
||||
|
||||
Varia por modelo, mas aproximadamente:
|
||||
|
||||
- `none` - Sem raciocínio
|
||||
- `minimal` - Esforço de raciocínio mínimo
|
||||
- `low` - Baixo esforço de raciocínio
|
||||
- `medium` - Esforço de raciocínio médio
|
||||
- `high` - Alto esforço de raciocínio
|
||||
- `xhigh` - Esforço de raciocínio extra alto
|
||||
|
||||
**Google**:
|
||||
|
||||
- `low` - Orçamento de esforço/token mais baixo
|
||||
- `high` - Orçamento de esforço/token mais alto
|
||||
|
||||
:::tip
|
||||
Esta lista não é abrangente. Muitos outros provedores também têm padrões integrados.
|
||||
:::
|
||||
|
||||
### Variantes personalizadas
|
||||
|
||||
Você pode substituir variantes existentes ou adicionar as suas:
|
||||
|
||||
```jsonc title="opencode.jsonc" {7-18}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"provider": {
|
||||
"openai": {
|
||||
"models": {
|
||||
"gpt-5": {
|
||||
"variants": {
|
||||
"thinking": {
|
||||
"reasoningEffort": "high",
|
||||
"textVerbosity": "low",
|
||||
},
|
||||
"fast": {
|
||||
"disabled": true,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
### Ciclo de variantes
|
||||
|
||||
Use a tecla de atalho `variant_cycle` para alternar rapidamente entre variantes. [Saiba mais](/docs/keybinds).
|
||||
|
||||
---
|
||||
|
||||
## Carregando modelos
|
||||
|
||||
Quando o OpenCode é iniciado, ele verifica modelos na seguinte ordem de prioridade:
|
||||
|
||||
1. A flag de linha de comando `--model` ou `-m`. O formato é o mesmo que no arquivo de configuração: `provider_id/model_id`.
|
||||
|
||||
2. A lista de modelos na configuração do OpenCode.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"model": "anthropic/claude-sonnet-4-20250514"
|
||||
}
|
||||
```
|
||||
|
||||
O formato aqui é `provider/model`.
|
||||
|
||||
3. O último modelo usado.
|
||||
|
||||
4. O primeiro modelo usando uma prioridade interna.
|
||||
328
packages/web/src/content/docs/pt-br/modes.mdx
Normal file
328
packages/web/src/content/docs/pt-br/modes.mdx
Normal file
@@ -0,0 +1,328 @@
|
||||
---
|
||||
title: Modos
|
||||
description: Modos diferentes para diferentes casos de uso.
|
||||
---
|
||||
|
||||
:::caution
|
||||
Os modos agora são configurados através da opção `agent` na configuração do opencode. A opção `mode` agora está obsoleta. [Saiba mais](/docs/agents).
|
||||
:::
|
||||
|
||||
Os modos no opencode permitem que você personalize o comportamento, as ferramentas e os prompts para diferentes casos de uso.
|
||||
|
||||
Ele vem com dois modos integrados: **build** e **plan**. Você pode personalizar esses ou configurar os seus próprios através da configuração do opencode.
|
||||
|
||||
Você pode alternar entre os modos durante uma sessão ou configurá-los no seu arquivo de configuração.
|
||||
|
||||
---
|
||||
|
||||
## Integrado
|
||||
|
||||
O opencode vem com dois modos integrados.
|
||||
|
||||
---
|
||||
|
||||
### Build
|
||||
|
||||
Build é o modo **padrão** com todas as ferramentas habilitadas. Este é o modo padrão para trabalho de desenvolvimento onde você precisa de acesso total a operações de arquivos e comandos do sistema.
|
||||
|
||||
---
|
||||
|
||||
### Plan
|
||||
|
||||
Um modo restrito projetado para planejamento e análise. No modo plan, as seguintes ferramentas estão desativadas por padrão:
|
||||
|
||||
- `write` - Não pode criar novos arquivos
|
||||
- `edit` - Não pode modificar arquivos existentes, exceto para arquivos localizados em `.opencode/plans/*.md` para detalhar o plano em si
|
||||
- `patch` - Não pode aplicar patches
|
||||
- `bash` - Não pode executar comandos de shell
|
||||
|
||||
Este modo é útil quando você deseja que a IA analise o código, sugira alterações ou crie planos sem fazer modificações reais em sua base de código.
|
||||
|
||||
---
|
||||
|
||||
## Alternando
|
||||
|
||||
Você pode alternar entre modos durante uma sessão usando a tecla _Tab_. Ou sua tecla de atalho configurada `switch_mode`.
|
||||
|
||||
Veja também: [Formatadores](/docs/formatters) para informações sobre configuração de formatação de código.
|
||||
|
||||
---
|
||||
|
||||
## Configurar
|
||||
|
||||
Você pode personalizar os modos integrados ou criar os seus próprios através da configuração. Os modos podem ser configurados de duas maneiras:
|
||||
|
||||
### Configuração JSON
|
||||
|
||||
Configure os modos no seu arquivo de configuração `opencode.json`:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mode": {
|
||||
"build": {
|
||||
"model": "anthropic/claude-sonnet-4-20250514",
|
||||
"prompt": "{file:./prompts/build.txt}",
|
||||
"tools": {
|
||||
"write": true,
|
||||
"edit": true,
|
||||
"bash": true
|
||||
}
|
||||
},
|
||||
"plan": {
|
||||
"model": "anthropic/claude-haiku-4-20250514",
|
||||
"tools": {
|
||||
"write": false,
|
||||
"edit": false,
|
||||
"bash": false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Configuração Markdown
|
||||
|
||||
Você também pode definir modos usando arquivos markdown. Coloque-os em:
|
||||
|
||||
- Global: `~/.config/opencode/modes/`
|
||||
- Projeto: `.opencode/modes/`
|
||||
|
||||
```markdown title="~/.config/opencode/modes/review.md"
|
||||
---
|
||||
model: anthropic/claude-sonnet-4-20250514
|
||||
temperature: 0.1
|
||||
tools:
|
||||
write: false
|
||||
edit: false
|
||||
bash: false
|
||||
---
|
||||
|
||||
Você está no modo de revisão de código. Foque em:
|
||||
|
||||
- Qualidade do código e melhores práticas
|
||||
- Bugs potenciais e casos extremos
|
||||
- Implicações de desempenho
|
||||
- Considerações de segurança
|
||||
|
||||
Forneça feedback construtivo sem fazer alterações diretas.
|
||||
```
|
||||
|
||||
O nome do arquivo markdown se torna o nome do modo (por exemplo, `review.md` cria um modo `review`).
|
||||
|
||||
Vamos analisar essas opções de configuração em detalhes.
|
||||
|
||||
---
|
||||
|
||||
### Modelo
|
||||
|
||||
Use a configuração `model` para substituir o modelo padrão para este modo. Útil para usar diferentes modelos otimizados para diferentes tarefas. Por exemplo, um modelo mais rápido para planejamento, um modelo mais capaz para implementação.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"mode": {
|
||||
"plan": {
|
||||
"model": "anthropic/claude-haiku-4-20250514"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Temperatura
|
||||
|
||||
Controle a aleatoriedade e a criatividade das respostas da IA com a configuração `temperature`. Valores mais baixos tornam as respostas mais focadas e determinísticas, enquanto valores mais altos aumentam a criatividade e a variabilidade.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"mode": {
|
||||
"plan": {
|
||||
"temperature": 0.1
|
||||
},
|
||||
"creative": {
|
||||
"temperature": 0.8
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Os valores de temperatura geralmente variam de 0.0 a 1.0:
|
||||
|
||||
- **0.0-0.2**: Respostas muito focadas e determinísticas, ideais para análise de código e planejamento
|
||||
- **0.3-0.5**: Respostas equilibradas com alguma criatividade, boas para tarefas de desenvolvimento geral
|
||||
- **0.6-1.0**: Respostas mais criativas e variadas, úteis para brainstorming e exploração
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"mode": {
|
||||
"analyze": {
|
||||
"temperature": 0.1,
|
||||
"prompt": "{file:./prompts/analysis.txt}"
|
||||
},
|
||||
"build": {
|
||||
"temperature": 0.3
|
||||
},
|
||||
"brainstorm": {
|
||||
"temperature": 0.7,
|
||||
"prompt": "{file:./prompts/creative.txt}"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Se nenhuma temperatura for especificada, o opencode usa padrões específicos do modelo (geralmente 0 para a maioria dos modelos, 0.55 para modelos Qwen).
|
||||
|
||||
---
|
||||
|
||||
### Prompt
|
||||
|
||||
Especifique um arquivo de prompt do sistema personalizado para este modo com a configuração `prompt`. O arquivo de prompt deve conter instruções específicas para o propósito do modo.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"mode": {
|
||||
"review": {
|
||||
"prompt": "{file:./prompts/code-review.txt}"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Este caminho é relativo a onde o arquivo de configuração está localizado. Portanto, isso funciona tanto para a configuração global do opencode quanto para a configuração específica do projeto.
|
||||
|
||||
---
|
||||
|
||||
### Ferramentas
|
||||
|
||||
Controle quais ferramentas estão disponíveis neste modo com a configuração `tools`. Você pode habilitar ou desabilitar ferramentas específicas definindo-as como `true` ou `false`.
|
||||
|
||||
```json
|
||||
{
|
||||
"mode": {
|
||||
"readonly": {
|
||||
"tools": {
|
||||
"write": false,
|
||||
"edit": false,
|
||||
"bash": false,
|
||||
"read": true,
|
||||
"grep": true,
|
||||
"glob": true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Se nenhuma ferramenta for especificada, todas as ferramentas estão habilitadas por padrão.
|
||||
|
||||
---
|
||||
|
||||
#### Ferramentas disponíveis
|
||||
|
||||
Aqui estão todas as ferramentas que podem ser controladas através da configuração do modo.
|
||||
|
||||
| Ferramenta | Descrição |
|
||||
| ------------ | -------------------------- |
|
||||
| `bash` | Executar comandos de shell |
|
||||
| `edit` | Modificar arquivos existentes |
|
||||
| `write` | Criar novos arquivos |
|
||||
| `read` | Ler conteúdos de arquivos |
|
||||
| `grep` | Pesquisar conteúdos de arquivos |
|
||||
| `glob` | Encontrar arquivos por padrão |
|
||||
| `list` | Listar conteúdos de diretório |
|
||||
| `patch` | Aplicar patches a arquivos |
|
||||
| `todowrite` | Gerenciar listas de tarefas |
|
||||
| `todoread` | Ler listas de tarefas |
|
||||
| `webfetch` | Buscar conteúdo da web |
|
||||
|
||||
---
|
||||
|
||||
## Modos personalizados
|
||||
|
||||
Você pode criar seus próprios modos personalizados adicionando-os à configuração. Aqui estão exemplos usando ambas as abordagens:
|
||||
|
||||
### Usando configuração JSON
|
||||
|
||||
```json title="opencode.json" {4-14}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mode": {
|
||||
"docs": {
|
||||
"prompt": "{file:./prompts/documentation.txt}",
|
||||
"tools": {
|
||||
"write": true,
|
||||
"edit": true,
|
||||
"bash": false,
|
||||
"read": true,
|
||||
"grep": true,
|
||||
"glob": true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Usando arquivos markdown
|
||||
|
||||
Crie arquivos de modo em `.opencode/modes/` para modos específicos do projeto ou `~/.config/opencode/modes/` para modos globais:
|
||||
|
||||
```markdown title=".opencode/modes/debug.md"
|
||||
---
|
||||
temperature: 0.1
|
||||
tools:
|
||||
bash: true
|
||||
read: true
|
||||
grep: true
|
||||
write: false
|
||||
edit: false
|
||||
---
|
||||
|
||||
Você está no modo de depuração. Seu objetivo principal é ajudar a investigar e diagnosticar problemas.
|
||||
|
||||
Foque em:
|
||||
|
||||
- Compreender o problema através de uma análise cuidadosa
|
||||
- Usar comandos bash para inspecionar o estado do sistema
|
||||
- Ler arquivos e logs relevantes
|
||||
- Pesquisar padrões e anomalias
|
||||
- Fornecer explicações claras das descobertas
|
||||
|
||||
Não faça alterações em arquivos. Apenas investigue e relate.
|
||||
```
|
||||
|
||||
```markdown title="~/.config/opencode/modes/refactor.md"
|
||||
---
|
||||
model: anthropic/claude-sonnet-4-20250514
|
||||
temperature: 0.2
|
||||
tools:
|
||||
edit: true
|
||||
read: true
|
||||
grep: true
|
||||
glob: true
|
||||
---
|
||||
|
||||
Você está no modo de refatoração. Foque em melhorar a qualidade do código sem alterar a funcionalidade.
|
||||
|
||||
Prioridades:
|
||||
|
||||
- Melhorar a legibilidade e a manutenibilidade do código
|
||||
- Aplicar convenções de nomenclatura consistentes
|
||||
- Reduzir a duplicação de código
|
||||
- Otimizar o desempenho onde apropriado
|
||||
- Garantir que todos os testes continuem passando
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Casos de uso
|
||||
|
||||
Aqui estão alguns casos de uso comuns para diferentes modos.
|
||||
|
||||
- **Modo Build**: Trabalho de desenvolvimento completo com todas as ferramentas habilitadas
|
||||
- **Modo Plan**: Análise e planejamento sem fazer alterações
|
||||
- **Modo Review**: Revisão de código com acesso somente leitura e ferramentas de documentação
|
||||
- **Modo Debug**: Focado em investigação com ferramentas bash e de leitura habilitadas
|
||||
- **Modo Docs**: Redação de documentação com operações de arquivo, mas sem comandos do sistema
|
||||
|
||||
Você também pode descobrir que diferentes modelos são bons para diferentes casos de uso.
|
||||
57
packages/web/src/content/docs/pt-br/network.mdx
Normal file
57
packages/web/src/content/docs/pt-br/network.mdx
Normal file
@@ -0,0 +1,57 @@
|
||||
---
|
||||
title: Rede
|
||||
description: Configure proxies e certificados personalizados.
|
||||
---
|
||||
|
||||
OpenCode suporta variáveis de ambiente de proxy padrão e certificados personalizados para ambientes de rede corporativa.
|
||||
|
||||
---
|
||||
|
||||
## Proxy
|
||||
|
||||
OpenCode respeita variáveis de ambiente de proxy padrão.
|
||||
|
||||
```bash
|
||||
# Proxy HTTPS (recomendado)
|
||||
export HTTPS_PROXY=https://proxy.example.com:8080
|
||||
|
||||
# Proxy HTTP (se HTTPS não estiver disponível)
|
||||
export HTTP_PROXY=http://proxy.example.com:8080
|
||||
|
||||
# Ignorar proxy para servidor local (obrigatório)
|
||||
export NO_PROXY=localhost,127.0.0.1
|
||||
```
|
||||
|
||||
:::caution
|
||||
O TUI se comunica com um servidor HTTP local. Você deve ignorar o proxy para essa conexão para evitar loops de roteamento.
|
||||
:::
|
||||
|
||||
Você pode configurar a porta e o nome do host do servidor usando [flags da CLI](/docs/cli#run).
|
||||
|
||||
---
|
||||
|
||||
### Autenticar
|
||||
|
||||
Se o seu proxy requer autenticação básica, inclua as credenciais na URL.
|
||||
|
||||
```bash
|
||||
export HTTPS_PROXY=http://username:password@proxy.example.com:8080
|
||||
```
|
||||
|
||||
:::caution
|
||||
Evite codificar senhas. Use variáveis de ambiente ou armazenamento seguro de credenciais.
|
||||
:::
|
||||
|
||||
Para proxies que requerem autenticação avançada como NTLM ou Kerberos, considere usar um LLM Gateway que suporte seu método de autenticação.
|
||||
|
||||
---
|
||||
|
||||
## Certificados personalizados
|
||||
|
||||
Se sua empresa usa CAs personalizadas para conexões HTTPS, configure o OpenCode para confiá-las.
|
||||
|
||||
```bash
|
||||
export NODE_EXTRA_CA_CERTS=/path/to/ca-cert.pem
|
||||
```
|
||||
|
||||
Isso funciona tanto para conexões de proxy quanto para acesso direto à API.
|
||||
237
packages/web/src/content/docs/pt-br/permissions.mdx
Normal file
237
packages/web/src/content/docs/pt-br/permissions.mdx
Normal file
@@ -0,0 +1,237 @@
|
||||
---
|
||||
title: Permissões
|
||||
description: Controle quais ações requerem aprovação para serem executadas.
|
||||
---
|
||||
|
||||
OpenCode usa a configuração `permission` para decidir se uma determinada ação deve ser executada automaticamente, solicitar sua aprovação ou ser bloqueada.
|
||||
|
||||
A partir da versão `v1.1.1`, a configuração booleana legada `tools` foi descontinuada e mesclada na `permission`. A antiga configuração `tools` ainda é suportada para compatibilidade retroativa.
|
||||
|
||||
---
|
||||
|
||||
## Ações
|
||||
|
||||
Cada regra de permissão se resolve em uma das seguintes opções:
|
||||
|
||||
- `"allow"` — executar sem aprovação
|
||||
- `"ask"` — solicitar aprovação
|
||||
- `"deny"` — bloquear a ação
|
||||
|
||||
---
|
||||
|
||||
## Configuração
|
||||
|
||||
Você pode definir permissões globalmente (com `*`), e substituir ferramentas específicas.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"*": "ask",
|
||||
"bash": "allow",
|
||||
"edit": "deny"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Você também pode definir todas as permissões de uma vez:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": "allow"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Regras Granulares (Sintaxe de Objeto)
|
||||
|
||||
Para a maioria das permissões, você pode usar um objeto para aplicar diferentes ações com base na entrada da ferramenta.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"bash": {
|
||||
"*": "ask",
|
||||
"git *": "allow",
|
||||
"npm *": "allow",
|
||||
"rm *": "deny",
|
||||
"grep *": "allow"
|
||||
},
|
||||
"edit": {
|
||||
"*": "deny",
|
||||
"packages/web/src/content/docs/*.mdx": "allow"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
As regras são avaliadas por correspondência de padrão, com a **última regra correspondente vencendo**. Um padrão comum é colocar a regra de captura `"*"` primeiro, e regras mais específicas depois.
|
||||
|
||||
### Coringas
|
||||
|
||||
Os padrões de permissão usam correspondência simples de coringas:
|
||||
|
||||
- `*` corresponde a zero ou mais de qualquer caractere
|
||||
- `?` corresponde exatamente a um caractere
|
||||
- Todos os outros caracteres correspondem literalmente
|
||||
|
||||
### Expansão do Diretório Home
|
||||
|
||||
Você pode usar `~` ou `$HOME` no início de um padrão para referenciar seu diretório home. Isso é particularmente útil para regras de [`external_directory`](#external-directories).
|
||||
|
||||
- `~/projects/*` -> `/Users/username/projects/*`
|
||||
- `$HOME/projects/*` -> `/Users/username/projects/*`
|
||||
- `~` -> `/Users/username`
|
||||
|
||||
### Diretórios Externos
|
||||
|
||||
Use `external_directory` para permitir chamadas de ferramentas que tocam em caminhos fora do diretório de trabalho onde o OpenCode foi iniciado. Isso se aplica a qualquer ferramenta que aceite um caminho como entrada (por exemplo, `read`, `edit`, `list`, `glob`, `grep` e muitos comandos `bash`).
|
||||
|
||||
A expansão do home (como `~/...`) afeta apenas como um padrão é escrito. Não torna um caminho externo parte do espaço de trabalho atual, então caminhos fora do diretório de trabalho ainda devem ser permitidos via `external_directory`.
|
||||
|
||||
Por exemplo, isso permite acesso a tudo sob `~/projects/personal/`:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"external_directory": {
|
||||
"~/projects/personal/**": "allow"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Qualquer diretório permitido aqui herda os mesmos padrões do espaço de trabalho atual. Como [`read` padrão é `allow`](#defaults), leituras também são permitidas para entradas sob `external_directory`, a menos que sejam substituídas. Adicione regras explícitas quando uma ferramenta deve ser restrita nesses caminhos, como bloquear edições enquanto mantém leituras:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"external_directory": {
|
||||
"~/projects/personal/**": "allow"
|
||||
},
|
||||
"edit": {
|
||||
"~/projects/personal/**": "deny"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Mantenha a lista focada em caminhos confiáveis e adicione regras adicionais de permissão ou negação conforme necessário para outras ferramentas (por exemplo, `bash`).
|
||||
|
||||
---
|
||||
|
||||
## Permissões Disponíveis
|
||||
|
||||
As permissões do OpenCode são indexadas pelo nome da ferramenta, além de alguns guardas de segurança:
|
||||
|
||||
- `read` — leitura de um arquivo (corresponde ao caminho do arquivo)
|
||||
- `edit` — todas as modificações de arquivo (cobre `edit`, `write`, `patch`, `multiedit`)
|
||||
- `glob` — globbing de arquivos (corresponde ao padrão glob)
|
||||
- `grep` — busca de conteúdo (corresponde ao padrão regex)
|
||||
- `list` — listagem de arquivos em um diretório (corresponde ao caminho do diretório)
|
||||
- `bash` — execução de comandos de shell (corresponde a comandos analisados como `git status --porcelain`)
|
||||
- `task` — lançamento de subagentes (corresponde ao tipo de subagente)
|
||||
- `skill` — carregamento de uma habilidade (corresponde ao nome da habilidade)
|
||||
- `lsp` — execução de consultas LSP (atualmente não granular)
|
||||
- `todoread`, `todowrite` — leitura/atualização da lista de tarefas
|
||||
- `webfetch` — busca de uma URL (corresponde à URL)
|
||||
- `websearch`, `codesearch` — busca na web/código (corresponde à consulta)
|
||||
- `external_directory` — acionado quando uma ferramenta toca em caminhos fora do diretório de trabalho do projeto
|
||||
- `doom_loop` — acionado quando a mesma chamada de ferramenta se repete 3 vezes com entrada idêntica
|
||||
|
||||
---
|
||||
|
||||
## Padrões
|
||||
|
||||
Se você não especificar nada, o OpenCode começa com padrões permissivos:
|
||||
|
||||
- A maioria das permissões padrão é `"allow"`.
|
||||
- `doom_loop` e `external_directory` padrão é `"ask"`.
|
||||
- `read` é `"allow"`, mas arquivos `.env` são negados por padrão:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"permission": {
|
||||
"read": {
|
||||
"*": "allow",
|
||||
"*.env": "deny",
|
||||
"*.env.*": "deny",
|
||||
"*.env.example": "allow"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## O que “Ask” Faz
|
||||
|
||||
Quando o OpenCode solicita aprovação, a interface oferece três resultados:
|
||||
|
||||
- `once` — aprovar apenas esta solicitação
|
||||
- `always` — aprovar futuras solicitações que correspondam aos padrões sugeridos (para o restante da sessão atual do OpenCode)
|
||||
- `reject` — negar a solicitação
|
||||
|
||||
O conjunto de padrões que `always` aprovaria é fornecido pela ferramenta (por exemplo, aprovações de bash normalmente incluem um prefixo de comando seguro como `git status*`).
|
||||
|
||||
---
|
||||
|
||||
## Agentes
|
||||
|
||||
Você pode substituir permissões por agente. As permissões do agente são mescladas com a configuração global, e as regras do agente têm precedência. [Saiba mais](/docs/agents#permissions) sobre permissões de agentes.
|
||||
|
||||
:::note
|
||||
Consulte a seção [Regras Granulares (Sintaxe de Objeto)](#granular-rules-object-syntax) acima para exemplos mais detalhados de correspondência de padrões.
|
||||
:::
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"bash": {
|
||||
"*": "ask",
|
||||
"git *": "allow",
|
||||
"git commit *": "deny",
|
||||
"git push *": "deny",
|
||||
"grep *": "allow"
|
||||
}
|
||||
},
|
||||
"agent": {
|
||||
"build": {
|
||||
"permission": {
|
||||
"bash": {
|
||||
"*": "ask",
|
||||
"git *": "allow",
|
||||
"git commit *": "ask",
|
||||
"git push *": "deny",
|
||||
"grep *": "allow"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Você também pode configurar permissões de agentes em Markdown:
|
||||
|
||||
```markdown title="~/.config/opencode/agents/review.md"
|
||||
---
|
||||
description: Revisão de código sem edições
|
||||
mode: subagent
|
||||
permission:
|
||||
edit: deny
|
||||
bash: ask
|
||||
webfetch: deny
|
||||
---
|
||||
|
||||
Apenas analise o código e sugira alterações.
|
||||
```
|
||||
|
||||
:::tip
|
||||
Use correspondência de padrões para comandos com argumentos. `"grep *"` permite `grep pattern file.txt`, enquanto `"grep"` sozinho o bloquearia. Comandos como `git status` funcionam para o comportamento padrão, mas requerem permissão explícita (como `"git status *"`) quando argumentos são passados.
|
||||
:::
|
||||
384
packages/web/src/content/docs/pt-br/plugins.mdx
Normal file
384
packages/web/src/content/docs/pt-br/plugins.mdx
Normal file
@@ -0,0 +1,384 @@
|
||||
---
|
||||
title: Plugins
|
||||
description: Escreva seus próprios plugins para estender o OpenCode.
|
||||
---
|
||||
|
||||
Plugins permitem que você estenda o OpenCode conectando-se a vários eventos e personalizando o comportamento. Você pode criar plugins para adicionar novos recursos, integrar-se a serviços externos ou modificar o comportamento padrão do OpenCode.
|
||||
|
||||
Para exemplos, confira os [plugins](/docs/ecosystem#plugins) criados pela comunidade.
|
||||
|
||||
---
|
||||
|
||||
## Usar um plugin
|
||||
|
||||
Existem duas maneiras de carregar plugins.
|
||||
|
||||
---
|
||||
|
||||
### De arquivos locais
|
||||
|
||||
Coloque arquivos JavaScript ou TypeScript no diretório de plugins.
|
||||
|
||||
- `.opencode/plugins/` - Plugins em nível de projeto
|
||||
- `~/.config/opencode/plugins/` - Plugins globais
|
||||
|
||||
Os arquivos nesses diretórios são carregados automaticamente na inicialização.
|
||||
|
||||
---
|
||||
|
||||
### Do npm
|
||||
|
||||
Especifique pacotes npm no seu arquivo de configuração.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"plugin": ["opencode-helicone-session", "opencode-wakatime", "@my-org/custom-plugin"]
|
||||
}
|
||||
```
|
||||
|
||||
Pacotes npm regulares e escopados são suportados.
|
||||
|
||||
Navegue pelos plugins disponíveis no [ecossistema](/docs/ecosystem#plugins).
|
||||
|
||||
---
|
||||
|
||||
### Como os plugins são instalados
|
||||
|
||||
**Plugins npm** são instalados automaticamente usando Bun na inicialização. Pacotes e suas dependências são armazenados em cache em `~/.cache/opencode/node_modules/`.
|
||||
|
||||
**Plugins locais** são carregados diretamente do diretório de plugins. Para usar pacotes externos, você deve criar um `package.json` dentro do seu diretório de configuração (veja [Dependências](#dependencies)), ou publicar o plugin no npm e [adicioná-lo à sua configuração](/docs/config#plugins).
|
||||
|
||||
---
|
||||
|
||||
### Ordem de carregamento
|
||||
|
||||
Os plugins são carregados de todas as fontes e todos os hooks são executados em sequência. A ordem de carregamento é:
|
||||
|
||||
1. Configuração global (`~/.config/opencode/opencode.json`)
|
||||
2. Configuração do projeto (`opencode.json`)
|
||||
3. Diretório de plugins global (`~/.config/opencode/plugins/`)
|
||||
4. Diretório de plugins do projeto (`.opencode/plugins/`)
|
||||
|
||||
Pacotes npm duplicados com o mesmo nome e versão são carregados uma vez. No entanto, um plugin local e um plugin npm com nomes semelhantes são carregados separadamente.
|
||||
|
||||
---
|
||||
|
||||
## Criar um plugin
|
||||
|
||||
Um plugin é um **módulo JavaScript/TypeScript** que exporta uma ou mais funções de plugin. Cada função recebe um objeto de contexto e retorna um objeto de hooks.
|
||||
|
||||
---
|
||||
|
||||
### Dependências
|
||||
|
||||
Plugins locais e ferramentas personalizadas podem usar pacotes npm externos. Adicione um `package.json` ao seu diretório de configuração com as dependências necessárias.
|
||||
|
||||
```json title=".opencode/package.json"
|
||||
{
|
||||
"dependencies": {
|
||||
"shescape": "^2.1.0"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
O OpenCode executa `bun install` na inicialização para instalar esses pacotes. Seus plugins e ferramentas podem então importá-los.
|
||||
|
||||
```ts title=".opencode/plugins/my-plugin.ts"
|
||||
import { escape } from "shescape"
|
||||
|
||||
export const MyPlugin = async (ctx) => {
|
||||
return {
|
||||
"tool.execute.before": async (input, output) => {
|
||||
if (input.tool === "bash") {
|
||||
output.args.command = escape(output.args.command)
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Estrutura básica
|
||||
|
||||
```js title=".opencode/plugins/example.js"
|
||||
export const MyPlugin = async ({ project, client, $, directory, worktree }) => {
|
||||
console.log("Plugin inicializado!")
|
||||
|
||||
return {
|
||||
// Implementações de hooks vão aqui
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
A função do plugin recebe:
|
||||
|
||||
- `project`: As informações do projeto atual.
|
||||
- `directory`: O diretório de trabalho atual.
|
||||
- `worktree`: O caminho do worktree do git.
|
||||
- `client`: Um cliente SDK do opencode para interagir com a IA.
|
||||
- `$`: A [API shell](https://bun.com/docs/runtime/shell) do Bun para executar comandos.
|
||||
|
||||
---
|
||||
|
||||
### Suporte a TypeScript
|
||||
|
||||
Para plugins TypeScript, você pode importar tipos do pacote de plugin:
|
||||
|
||||
```ts title="my-plugin.ts" {1}
|
||||
import type { Plugin } from "@opencode-ai/plugin"
|
||||
|
||||
export const MyPlugin: Plugin = async ({ project, client, $, directory, worktree }) => {
|
||||
return {
|
||||
// Implementações de hooks seguras em tipo
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Eventos
|
||||
|
||||
Plugins podem se inscrever em eventos como visto abaixo na seção Exemplos. Aqui está uma lista dos diferentes eventos disponíveis.
|
||||
|
||||
#### Eventos de Comando
|
||||
|
||||
- `command.executed`
|
||||
|
||||
#### Eventos de Arquivo
|
||||
|
||||
- `file.edited`
|
||||
- `file.watcher.updated`
|
||||
|
||||
#### Eventos de Instalação
|
||||
|
||||
- `installation.updated`
|
||||
|
||||
#### Eventos LSP
|
||||
|
||||
- `lsp.client.diagnostics`
|
||||
- `lsp.updated`
|
||||
|
||||
#### Eventos de Mensagem
|
||||
|
||||
- `message.part.removed`
|
||||
- `message.part.updated`
|
||||
- `message.removed`
|
||||
- `message.updated`
|
||||
|
||||
#### Eventos de Permissão
|
||||
|
||||
- `permission.asked`
|
||||
- `permission.replied`
|
||||
|
||||
#### Eventos de Servidor
|
||||
|
||||
- `server.connected`
|
||||
|
||||
#### Eventos de Sessão
|
||||
|
||||
- `session.created`
|
||||
- `session.compacted`
|
||||
- `session.deleted`
|
||||
- `session.diff`
|
||||
- `session.error`
|
||||
- `session.idle`
|
||||
- `session.status`
|
||||
- `session.updated`
|
||||
|
||||
#### Eventos de Todo
|
||||
|
||||
- `todo.updated`
|
||||
|
||||
#### Eventos de Shell
|
||||
|
||||
- `shell.env`
|
||||
|
||||
#### Eventos de Ferramenta
|
||||
|
||||
- `tool.execute.after`
|
||||
- `tool.execute.before`
|
||||
|
||||
#### Eventos TUI
|
||||
|
||||
- `tui.prompt.append`
|
||||
- `tui.command.execute`
|
||||
- `tui.toast.show`
|
||||
|
||||
---
|
||||
|
||||
## Exemplos
|
||||
|
||||
Aqui estão alguns exemplos de plugins que você pode usar para estender o opencode.
|
||||
|
||||
---
|
||||
|
||||
### Enviar notificações
|
||||
|
||||
Envie notificações quando certos eventos ocorrerem:
|
||||
|
||||
```js title=".opencode/plugins/notification.js"
|
||||
export const NotificationPlugin = async ({ project, client, $, directory, worktree }) => {
|
||||
return {
|
||||
event: async ({ event }) => {
|
||||
// Enviar notificação ao concluir a sessão
|
||||
if (event.type === "session.idle") {
|
||||
await $`osascript -e 'display notification "Sessão concluída!" with title "opencode"'`
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Estamos usando `osascript` para executar AppleScript no macOS. Aqui estamos usando para enviar notificações.
|
||||
|
||||
:::note
|
||||
Se você estiver usando o aplicativo desktop OpenCode, ele pode enviar notificações do sistema automaticamente quando uma resposta estiver pronta ou quando ocorrer um erro na sessão.
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
### Proteção .env
|
||||
|
||||
Impeça o opencode de ler arquivos `.env`:
|
||||
|
||||
```javascript title=".opencode/plugins/env-protection.js"
|
||||
export const EnvProtection = async ({ project, client, $, directory, worktree }) => {
|
||||
return {
|
||||
"tool.execute.before": async (input, output) => {
|
||||
if (input.tool === "read" && output.args.filePath.includes(".env")) {
|
||||
throw new Error("Não leia arquivos .env")
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Injetar variáveis de ambiente
|
||||
|
||||
Injete variáveis de ambiente em todas as execuções de shell (ferramentas de IA e terminais de usuário):
|
||||
|
||||
```javascript title=".opencode/plugins/inject-env.js"
|
||||
export const InjectEnvPlugin = async () => {
|
||||
return {
|
||||
"shell.env": async (input, output) => {
|
||||
output.env.MY_API_KEY = "secreto"
|
||||
output.env.PROJECT_ROOT = input.cwd
|
||||
},
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Ferramentas personalizadas
|
||||
|
||||
Plugins também podem adicionar ferramentas personalizadas ao opencode:
|
||||
|
||||
```ts title=".opencode/plugins/custom-tools.ts"
|
||||
import { type Plugin, tool } from "@opencode-ai/plugin"
|
||||
|
||||
export const CustomToolsPlugin: Plugin = async (ctx) => {
|
||||
return {
|
||||
tool: {
|
||||
mytool: tool({
|
||||
description: "Esta é uma ferramenta personalizada",
|
||||
args: {
|
||||
foo: tool.schema.string(),
|
||||
},
|
||||
async execute(args, context) {
|
||||
const { directory, worktree } = context
|
||||
return `Olá ${args.foo} de ${directory} (worktree: ${worktree})`
|
||||
},
|
||||
}),
|
||||
},
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
O helper `tool` cria uma ferramenta personalizada que o opencode pode chamar. Ele aceita uma função de esquema Zod e retorna uma definição de ferramenta com:
|
||||
|
||||
- `description`: O que a ferramenta faz
|
||||
- `args`: Esquema Zod para os argumentos da ferramenta
|
||||
- `execute`: Função que é executada quando a ferramenta é chamada
|
||||
|
||||
Suas ferramentas personalizadas estarão disponíveis para o opencode junto com as ferramentas integradas.
|
||||
|
||||
---
|
||||
|
||||
### Registro
|
||||
|
||||
Use `client.app.log()` em vez de `console.log` para registro estruturado:
|
||||
|
||||
```ts title=".opencode/plugins/my-plugin.ts"
|
||||
export const MyPlugin = async ({ client }) => {
|
||||
await client.app.log({
|
||||
body: {
|
||||
service: "my-plugin",
|
||||
level: "info",
|
||||
message: "Plugin inicializado",
|
||||
extra: { foo: "bar" },
|
||||
},
|
||||
})
|
||||
}
|
||||
```
|
||||
|
||||
Níveis: `debug`, `info`, `warn`, `error`. Veja a [documentação do SDK](https://opencode.ai/docs/sdk) para detalhes.
|
||||
|
||||
---
|
||||
|
||||
### Hooks de compactação
|
||||
|
||||
Personalize o contexto incluído quando uma sessão é compactada:
|
||||
|
||||
```ts title=".opencode/plugins/compaction.ts"
|
||||
import type { Plugin } from "@opencode-ai/plugin"
|
||||
|
||||
export const CompactionPlugin: Plugin = async (ctx) => {
|
||||
return {
|
||||
"experimental.session.compacting": async (input, output) => {
|
||||
// Injetar contexto adicional no prompt de compactação
|
||||
output.context.push(`
|
||||
## Contexto Personalizado
|
||||
|
||||
Inclua qualquer estado que deve persistir entre as compactações:
|
||||
- Status da tarefa atual
|
||||
- Decisões importantes tomadas
|
||||
- Arquivos sendo trabalhados ativamente
|
||||
`)
|
||||
},
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
O hook `experimental.session.compacting` é acionado antes que o LLM gere um resumo de continuação. Use-o para injetar contexto específico de domínio que o prompt de compactação padrão poderia perder.
|
||||
|
||||
Você também pode substituir o prompt de compactação completamente definindo `output.prompt`:
|
||||
|
||||
```ts title=".opencode/plugins/custom-compaction.ts"
|
||||
import type { Plugin } from "@opencode-ai/plugin"
|
||||
|
||||
export const CustomCompactionPlugin: Plugin = async (ctx) => {
|
||||
return {
|
||||
"experimental.session.compacting": async (input, output) => {
|
||||
// Substituir todo o prompt de compactação
|
||||
output.prompt = `
|
||||
Você está gerando um prompt de continuação para uma sessão de enxame multi-agente.
|
||||
|
||||
Resuma:
|
||||
1. A tarefa atual e seu status
|
||||
2. Quais arquivos estão sendo modificados e por quem
|
||||
3. Quaisquer bloqueios ou dependências entre agentes
|
||||
4. Os próximos passos para concluir o trabalho
|
||||
|
||||
Formate como um prompt estruturado que um novo agente pode usar para retomar o trabalho.
|
||||
`
|
||||
},
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Quando `output.prompt` é definido, ele substitui completamente o prompt de compactação padrão. O array `output.context` é ignorado neste caso.
|
||||
1881
packages/web/src/content/docs/pt-br/providers.mdx
Normal file
1881
packages/web/src/content/docs/pt-br/providers.mdx
Normal file
File diff suppressed because it is too large
Load Diff
180
packages/web/src/content/docs/pt-br/rules.mdx
Normal file
180
packages/web/src/content/docs/pt-br/rules.mdx
Normal file
@@ -0,0 +1,180 @@
|
||||
---
|
||||
title: Regras
|
||||
description: Defina instruções personalizadas para opencode.
|
||||
---
|
||||
|
||||
Você pode fornecer instruções personalizadas para opencode criando um arquivo `AGENTS.md`. Isso é semelhante às regras do Cursor. Ele contém instruções que serão incluídas no contexto do LLM para personalizar seu comportamento para o seu projeto específico.
|
||||
|
||||
---
|
||||
|
||||
## Inicializar
|
||||
|
||||
Para criar um novo arquivo `AGENTS.md`, você pode executar o comando `/init` no opencode.
|
||||
|
||||
:::tip
|
||||
Você deve commitar o arquivo `AGENTS.md` do seu projeto no Git.
|
||||
:::
|
||||
|
||||
Isso irá escanear seu projeto e todo o seu conteúdo para entender do que se trata o projeto e gerar um arquivo `AGENTS.md` com isso. Isso ajuda o opencode a navegar melhor pelo projeto.
|
||||
|
||||
Se você já tiver um arquivo `AGENTS.md` existente, isso tentará adicionar a ele.
|
||||
|
||||
---
|
||||
|
||||
## Exemplo
|
||||
|
||||
Você também pode criar este arquivo manualmente. Aqui está um exemplo de algumas coisas que você pode colocar em um arquivo `AGENTS.md`.
|
||||
|
||||
```markdown title="AGENTS.md"
|
||||
# Projeto Monorepo SST v3
|
||||
|
||||
Este é um monorepo SST v3 com TypeScript. O projeto usa bun workspaces para gerenciamento de pacotes.
|
||||
|
||||
## Estrutura do Projeto
|
||||
|
||||
- `packages/` - Contém todos os pacotes do workspace (funções, núcleo, web, etc.)
|
||||
- `infra/` - Definições de infraestrutura divididas por serviço (storage.ts, api.ts, web.ts)
|
||||
- `sst.config.ts` - Configuração principal do SST com imports dinâmicos
|
||||
|
||||
## Padrões de Código
|
||||
|
||||
- Use TypeScript com o modo estrito habilitado
|
||||
- O código compartilhado vai em `packages/core/` com a configuração de exports adequada
|
||||
- Funções vão em `packages/functions/`
|
||||
- A infraestrutura deve ser dividida em arquivos lógicos em `infra/`
|
||||
|
||||
## Convenções de Monorepo
|
||||
|
||||
- Importe módulos compartilhados usando nomes de workspace: `@my-app/core/example`
|
||||
```
|
||||
|
||||
Estamos adicionando instruções específicas do projeto aqui e isso será compartilhado entre sua equipe.
|
||||
|
||||
---
|
||||
|
||||
## Tipos
|
||||
|
||||
O opencode também suporta a leitura do arquivo `AGENTS.md` de múltiplos locais. E isso serve a diferentes propósitos.
|
||||
|
||||
### Projeto
|
||||
|
||||
Coloque um `AGENTS.md` na raiz do seu projeto para regras específicas do projeto. Essas regras se aplicam apenas quando você está trabalhando neste diretório ou em seus subdiretórios.
|
||||
|
||||
### Global
|
||||
|
||||
Você também pode ter regras globais em um arquivo `~/.config/opencode/AGENTS.md`. Isso é aplicado em todas as sessões do opencode.
|
||||
|
||||
Como isso não é commitado no Git ou compartilhado com sua equipe, recomendamos usar isso para especificar quaisquer regras pessoais que o LLM deve seguir.
|
||||
|
||||
### Compatibilidade com Claude Code
|
||||
|
||||
Para usuários migrando do Claude Code, o OpenCode suporta as convenções de arquivo do Claude Code como alternativas:
|
||||
|
||||
- **Regras do projeto**: `CLAUDE.md` no diretório do seu projeto (usado se não existir `AGENTS.md`)
|
||||
- **Regras globais**: `~/.claude/CLAUDE.md` (usado se não existir `~/.config/opencode/AGENTS.md`)
|
||||
- **Habilidades**: `~/.claude/skills/` — veja [Habilidades do Agente](/docs/skills/) para detalhes
|
||||
|
||||
Para desabilitar a compatibilidade com Claude Code, defina uma dessas variáveis de ambiente:
|
||||
|
||||
```bash
|
||||
export OPENCODE_DISABLE_CLAUDE_CODE=1 # Desabilitar todo suporte a .claude
|
||||
export OPENCODE_DISABLE_CLAUDE_CODE_PROMPT=1 # Desabilitar apenas ~/.claude/CLAUDE.md
|
||||
export OPENCODE_DISABLE_CLAUDE_CODE_SKILLS=1 # Desabilitar apenas .claude/skills
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Precedência
|
||||
|
||||
Quando o opencode inicia, ele procura arquivos de regras nesta ordem:
|
||||
|
||||
1. **Arquivos locais** percorrendo a partir do diretório atual (`AGENTS.md`, `CLAUDE.md`)
|
||||
2. **Arquivo global** em `~/.config/opencode/AGENTS.md`
|
||||
3. **Arquivo Claude Code** em `~/.claude/CLAUDE.md` (a menos que desabilitado)
|
||||
|
||||
O primeiro arquivo correspondente vence em cada categoria. Por exemplo, se você tiver tanto `AGENTS.md` quanto `CLAUDE.md`, apenas `AGENTS.md` é usado. Da mesma forma, `~/.config/opencode/AGENTS.md` tem precedência sobre `~/.claude/CLAUDE.md`.
|
||||
|
||||
---
|
||||
|
||||
## Instruções Personalizadas
|
||||
|
||||
Você pode especificar arquivos de instrução personalizados no seu `opencode.json` ou no global `~/.config/opencode/opencode.json`. Isso permite que você e sua equipe reutilizem regras existentes em vez de ter que duplicá-las no AGENTS.md.
|
||||
|
||||
Exemplo:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"instructions": ["CONTRIBUTING.md", "docs/guidelines.md", ".cursor/rules/*.md"]
|
||||
}
|
||||
```
|
||||
|
||||
Você também pode usar URLs remotas para carregar instruções da web.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"instructions": ["https://raw.githubusercontent.com/my-org/shared-rules/main/style.md"]
|
||||
}
|
||||
```
|
||||
|
||||
Instruções remotas são buscadas com um tempo limite de 5 segundos.
|
||||
|
||||
Todos os arquivos de instrução são combinados com seus arquivos `AGENTS.md`.
|
||||
|
||||
---
|
||||
|
||||
## Referenciando Arquivos Externos
|
||||
|
||||
Embora o opencode não analise automaticamente referências de arquivos em `AGENTS.md`, você pode alcançar funcionalidade semelhante de duas maneiras:
|
||||
|
||||
### Usando opencode.json
|
||||
|
||||
A abordagem recomendada é usar o campo `instructions` em `opencode.json`:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"instructions": ["docs/development-standards.md", "test/testing-guidelines.md", "packages/*/AGENTS.md"]
|
||||
}
|
||||
```
|
||||
|
||||
### Instruções Manuais em AGENTS.md
|
||||
|
||||
Você pode ensinar o opencode a ler arquivos externos fornecendo instruções explícitas em seu `AGENTS.md`. Aqui está um exemplo prático:
|
||||
|
||||
```markdown title="AGENTS.md"
|
||||
# Regras do Projeto TypeScript
|
||||
|
||||
## Carregamento de Arquivos Externos
|
||||
|
||||
CRÍTICO: Quando você encontrar uma referência de arquivo (por exemplo, @rules/general.md), use sua ferramenta de Leitura para carregá-lo conforme necessário. Eles são relevantes para a TAREFA ESPECÍFICA em questão.
|
||||
|
||||
Instruções:
|
||||
|
||||
- NÃO carregue todas as referências de forma preemptiva - use carregamento sob demanda com base na necessidade real
|
||||
- Quando carregado, trate o conteúdo como instruções obrigatórias que substituem os padrões
|
||||
- Siga referências recursivamente quando necessário
|
||||
|
||||
## Diretrizes de Desenvolvimento
|
||||
|
||||
Para estilo de código TypeScript e melhores práticas: @docs/typescript-guidelines.md
|
||||
Para arquitetura de componentes React e padrões de hooks: @docs/react-patterns.md
|
||||
Para design de API REST e tratamento de erros: @docs/api-standards.md
|
||||
Para estratégias de teste e requisitos de cobertura: @test/testing-guidelines.md
|
||||
|
||||
## Diretrizes Gerais
|
||||
|
||||
Leia o seguinte arquivo imediatamente, pois é relevante para todos os fluxos de trabalho: @rules/general-guidelines.md.
|
||||
```
|
||||
|
||||
Essa abordagem permite que você:
|
||||
|
||||
- Crie arquivos de regras modulares e reutilizáveis
|
||||
- Compartilhe regras entre projetos via symlinks ou submódulos do git
|
||||
- Mantenha o AGENTS.md conciso enquanto referencia diretrizes detalhadas
|
||||
- Garanta que o opencode carregue arquivos apenas quando necessário para a tarefa específica
|
||||
|
||||
:::tip
|
||||
Para monorepos ou projetos com padrões compartilhados, usar `opencode.json` com padrões glob (como `packages/*/AGENTS.md`) é mais sustentável do que instruções manuais.
|
||||
:::
|
||||
391
packages/web/src/content/docs/pt-br/sdk.mdx
Normal file
391
packages/web/src/content/docs/pt-br/sdk.mdx
Normal file
@@ -0,0 +1,391 @@
|
||||
---
|
||||
title: SDK
|
||||
description: Cliente JS seguro em tipos para o servidor opencode.
|
||||
---
|
||||
|
||||
import config from "../../../../config.mjs"
|
||||
export const typesUrl = `${config.github}/blob/dev/packages/sdk/js/src/gen/types.gen.ts`
|
||||
|
||||
O SDK JS/TS do opencode fornece um cliente seguro em tipos para interagir com o servidor.
|
||||
Use-o para construir integrações e controlar o opencode programaticamente.
|
||||
|
||||
[Saiba mais](/docs/server) sobre como o servidor funciona. Para exemplos, confira os [projetos](/docs/ecosystem#projects) construídos pela comunidade.
|
||||
|
||||
---
|
||||
|
||||
## Instalar
|
||||
|
||||
Instale o SDK a partir do npm:
|
||||
|
||||
```bash
|
||||
npm install @opencode-ai/sdk
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Criar cliente
|
||||
|
||||
Crie uma instância do opencode:
|
||||
|
||||
```javascript
|
||||
import { createOpencode } from "@opencode-ai/sdk"
|
||||
|
||||
const { client } = await createOpencode()
|
||||
```
|
||||
|
||||
Isso inicia tanto um servidor quanto um cliente.
|
||||
|
||||
#### Opções
|
||||
|
||||
| Opção | Tipo | Descrição | Padrão |
|
||||
|------------|--------------|---------------------------------|-------------|
|
||||
| `hostname` | `string` | Nome do host do servidor | `127.0.0.1` |
|
||||
| `port` | `number` | Porta do servidor | `4096` |
|
||||
| `signal` | `AbortSignal`| Sinal de abortar para cancelamento | `undefined` |
|
||||
| `timeout` | `number` | Tempo limite em ms para iniciar o servidor | `5000` |
|
||||
| `config` | `Config` | Objeto de configuração | `{}` |
|
||||
|
||||
---
|
||||
|
||||
## Configuração
|
||||
|
||||
Você pode passar um objeto de configuração para personalizar o comportamento. A instância ainda pega seu `opencode.json`, mas você pode substituir ou adicionar configuração inline:
|
||||
|
||||
```javascript
|
||||
import { createOpencode } from "@opencode-ai/sdk"
|
||||
|
||||
const opencode = await createOpencode({
|
||||
hostname: "127.0.0.1",
|
||||
port: 4096,
|
||||
config: {
|
||||
model: "anthropic/claude-3-5-sonnet-20241022",
|
||||
},
|
||||
})
|
||||
|
||||
console.log(`Servidor rodando em ${opencode.server.url}`)
|
||||
|
||||
opencode.server.close()
|
||||
```
|
||||
|
||||
## Apenas cliente
|
||||
|
||||
Se você já tem uma instância do opencode em execução, pode criar uma instância de cliente para se conectar a ela:
|
||||
|
||||
```javascript
|
||||
import { createOpencodeClient } from "@opencode-ai/sdk"
|
||||
|
||||
const client = createOpencodeClient({
|
||||
baseUrl: "http://localhost:4096",
|
||||
})
|
||||
```
|
||||
|
||||
#### Opções
|
||||
|
||||
| Opção | Tipo | Descrição | Padrão |
|
||||
|----------------|------------|---------------------------------|---------------------------|
|
||||
| `baseUrl` | `string` | URL do servidor | `http://localhost:4096` |
|
||||
| `fetch` | `function` | Implementação de fetch personalizada | `globalThis.fetch` |
|
||||
| `parseAs` | `string` | Método de análise da resposta | `auto` |
|
||||
| `responseStyle`| `string` | Estilo de retorno: `data` ou `fields` | `fields` |
|
||||
| `throwOnError` | `boolean` | Lançar erros em vez de retornar | `false` |
|
||||
|
||||
---
|
||||
|
||||
## Tipos
|
||||
|
||||
O SDK inclui definições TypeScript para todos os tipos da API. Importe-os diretamente:
|
||||
|
||||
```typescript
|
||||
import type { Session, Message, Part } from "@opencode-ai/sdk"
|
||||
```
|
||||
|
||||
Todos os tipos são gerados a partir da especificação OpenAPI do servidor e estão disponíveis no <a href={typesUrl}>arquivo de tipos</a>.
|
||||
|
||||
---
|
||||
|
||||
## Erros
|
||||
|
||||
O SDK pode lançar erros que você pode capturar e tratar:
|
||||
|
||||
```typescript
|
||||
try {
|
||||
await client.session.get({ path: { id: "invalid-id" } })
|
||||
} catch (error) {
|
||||
console.error("Falha ao obter a sessão:", (error as Error).message)
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## APIs
|
||||
|
||||
O SDK expõe todas as APIs do servidor através de um cliente seguro em tipos.
|
||||
|
||||
---
|
||||
|
||||
### Global
|
||||
|
||||
| Método | Descrição | Resposta |
|
||||
|-------------------|-------------------------------|--------------------------------------|
|
||||
| `global.health()` | Verificar a saúde e versão do servidor | `{ healthy: true, version: string }` |
|
||||
|
||||
---
|
||||
|
||||
#### Exemplos
|
||||
|
||||
```javascript
|
||||
const health = await client.global.health()
|
||||
console.log(health.data.version)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### App
|
||||
|
||||
| Método | Descrição | Resposta |
|
||||
|-----------------|-------------------------|---------------------------------------------|
|
||||
| `app.log()` | Escrever uma entrada de log | `boolean` |
|
||||
| `app.agents()` | Listar todos os agentes disponíveis | <a href={typesUrl}><code>Agent[]</code></a> |
|
||||
|
||||
---
|
||||
|
||||
#### Exemplos
|
||||
|
||||
```javascript
|
||||
// Escrever uma entrada de log
|
||||
await client.app.log({
|
||||
body: {
|
||||
service: "my-app",
|
||||
level: "info",
|
||||
message: "Operação concluída",
|
||||
},
|
||||
})
|
||||
|
||||
// Listar agentes disponíveis
|
||||
const agents = await client.app.agents()
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Projeto
|
||||
|
||||
| Método | Descrição | Resposta |
|
||||
|---------------------|-------------------|-----------------------------------------------|
|
||||
| `project.list()` | Listar todos os projetos | <a href={typesUrl}><code>Project[]</code></a> |
|
||||
| `project.current()` | Obter projeto atual | <a href={typesUrl}><code>Project</code></a> |
|
||||
|
||||
---
|
||||
|
||||
#### Exemplos
|
||||
|
||||
```javascript
|
||||
// Listar todos os projetos
|
||||
const projects = await client.project.list()
|
||||
|
||||
// Obter projeto atual
|
||||
const currentProject = await client.project.current()
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Caminho
|
||||
|
||||
| Método | Descrição | Resposta |
|
||||
|--------------|----------------|------------------------------------------|
|
||||
| `path.get()` | Obter caminho atual | <a href={typesUrl}><code>Path</code></a> |
|
||||
|
||||
---
|
||||
|
||||
#### Exemplos
|
||||
|
||||
```javascript
|
||||
// Obter informações do caminho atual
|
||||
const pathInfo = await client.path.get()
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Configuração
|
||||
|
||||
| Método | Descrição | Resposta |
|
||||
|----------------------|---------------------------------|-------------------------------------------------------------------------------------------------------|
|
||||
| `config.get()` | Obter informações de configuração | <a href={typesUrl}><code>Config</code></a> |
|
||||
| `config.providers()` | Listar provedores e modelos padrão | `{ providers: `<a href={typesUrl}><code>Provider[]</code></a>`, default: { [key: string]: string } }` |
|
||||
|
||||
---
|
||||
|
||||
#### Exemplos
|
||||
|
||||
```javascript
|
||||
const config = await client.config.get()
|
||||
|
||||
const { providers, default: defaults } = await client.config.providers()
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Sessões
|
||||
|
||||
| Método | Descrição | Notas |
|
||||
|-----------------------------------------------------------|----------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||
| `session.list()` | Listar sessões | Retorna <a href={typesUrl}><code>Session[]</code></a> |
|
||||
| `session.get({ path })` | Obter sessão | Retorna <a href={typesUrl}><code>Session</code></a> |
|
||||
| `session.children({ path })` | Listar sessões filhas | Retorna <a href={typesUrl}><code>Session[]</code></a> |
|
||||
| `session.create({ body })` | Criar sessão | Retorna <a href={typesUrl}><code>Session</code></a> |
|
||||
| `session.delete({ path })` | Deletar sessão | Retorna `boolean` |
|
||||
| `session.update({ path, body })` | Atualizar propriedades da sessão | Retorna <a href={typesUrl}><code>Session</code></a> |
|
||||
| `session.init({ path, body })` | Analisar app e criar `AGENTS.md` | Retorna `boolean` |
|
||||
| `session.abort({ path })` | Abortar uma sessão em execução | Retorna `boolean` |
|
||||
| `session.share({ path })` | Compartilhar sessão | Retorna <a href={typesUrl}><code>Session</code></a> |
|
||||
| `session.unshare({ path })` | Descompartilhar sessão | Retorna <a href={typesUrl}><code>Session</code></a> |
|
||||
| `session.summarize({ path, body })` | Resumir sessão | Retorna `boolean` |
|
||||
| `session.messages({ path })` | Listar mensagens em uma sessão | Retorna `{ info: `<a href={typesUrl}><code>Message</code></a>`, parts: `<a href={typesUrl}><code>Part[]</code></a>`}[]` |
|
||||
| `session.message({ path })` | Obter detalhes da mensagem | Retorna `{ info: `<a href={typesUrl}><code>Message</code></a>`, parts: `<a href={typesUrl}><code>Part[]</code></a>`}` |
|
||||
| `session.prompt({ path, body })` | Enviar mensagem de prompt | `body.noReply: true` retorna UserMessage (apenas contexto). O padrão retorna <a href={typesUrl}><code>AssistantMessage</code></a> com resposta da IA |
|
||||
| `session.command({ path, body })` | Enviar comando para a sessão | Retorna `{ info: `<a href={typesUrl}><code>AssistantMessage</code></a>`, parts: `<a href={typesUrl}><code>Part[]</code></a>`}` |
|
||||
| `session.shell({ path, body })` | Executar um comando shell | Retorna <a href={typesUrl}><code>AssistantMessage</code></a> |
|
||||
| `session.revert({ path, body })` | Reverter uma mensagem | Retorna <a href={typesUrl}><code>Session</code></a> |
|
||||
| `session.unrevert({ path })` | Restaurar mensagens revertidas | Retorna <a href={typesUrl}><code>Session</code></a> |
|
||||
| `postSessionByIdPermissionsByPermissionId({ path, body })` | Responder a um pedido de permissão | Retorna `boolean` |
|
||||
|
||||
---
|
||||
|
||||
#### Exemplos
|
||||
|
||||
```javascript
|
||||
// Criar e gerenciar sessões
|
||||
const session = await client.session.create({
|
||||
body: { title: "Minha sessão" },
|
||||
})
|
||||
|
||||
const sessions = await client.session.list()
|
||||
|
||||
// Enviar uma mensagem de prompt
|
||||
const result = await client.session.prompt({
|
||||
path: { id: session.id },
|
||||
body: {
|
||||
model: { providerID: "anthropic", modelID: "claude-3-5-sonnet-20241022" },
|
||||
parts: [{ type: "text", text: "Olá!" }],
|
||||
},
|
||||
})
|
||||
|
||||
// Injetar contexto sem acionar resposta da IA (útil para plugins)
|
||||
await client.session.prompt({
|
||||
path: { id: session.id },
|
||||
body: {
|
||||
noReply: true,
|
||||
parts: [{ type: "text", text: "Você é um assistente útil." }],
|
||||
},
|
||||
})
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Arquivos
|
||||
|
||||
| Método | Descrição | Resposta |
|
||||
|---------------------------|----------------------------------|---------------------------------------------------------------------------------------------|
|
||||
| `find.text({ query })` | Pesquisar texto em arquivos | Array de objetos de correspondência com `path`, `lines`, `line_number`, `absolute_offset`, `submatches` |
|
||||
| `find.files({ query })` | Encontrar arquivos e diretórios por nome | `string[]` (caminhos) |
|
||||
| `find.symbols({ query })` | Encontrar símbolos no workspace | <a href={typesUrl}><code>Symbol[]</code></a> |
|
||||
| `file.read({ query })` | Ler um arquivo | `{ type: "raw" \| "patch", content: string }` |
|
||||
| `file.status({ query? })` | Obter status para arquivos rastreados | <a href={typesUrl}><code>File[]</code></a> |
|
||||
|
||||
`find.files` suporta alguns campos de consulta opcionais:
|
||||
|
||||
- `type`: `"file"` ou `"directory"`
|
||||
- `directory`: substituir a raiz do projeto para a pesquisa
|
||||
- `limit`: resultados máximos (1–200)
|
||||
|
||||
---
|
||||
|
||||
#### Exemplos
|
||||
|
||||
```javascript
|
||||
// Pesquisar e ler arquivos
|
||||
const textResults = await client.find.text({
|
||||
query: { pattern: "function.*opencode" },
|
||||
})
|
||||
|
||||
const files = await client.find.files({
|
||||
query: { query: "*.ts", type: "file" },
|
||||
})
|
||||
|
||||
const directories = await client.find.files({
|
||||
query: { query: "packages", type: "directory", limit: 20 },
|
||||
})
|
||||
|
||||
const content = await client.file.read({
|
||||
query: { path: "src/index.ts" },
|
||||
})
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### TUI
|
||||
|
||||
| Método | Descrição | Resposta |
|
||||
|-------------------------------|-------------------------|-----------|
|
||||
| `tui.appendPrompt({ body })` | Adicionar texto ao prompt | `boolean` |
|
||||
| `tui.openHelp()` | Abrir o diálogo de ajuda | `boolean` |
|
||||
| `tui.openSessions()` | Abrir o seletor de sessões | `boolean` |
|
||||
| `tui.openThemes()` | Abrir o seletor de temas | `boolean` |
|
||||
| `tui.openModels()` | Abrir o seletor de modelos | `boolean` |
|
||||
| `tui.submitPrompt()` | Enviar o prompt atual | `boolean` |
|
||||
| `tui.clearPrompt()` | Limpar o prompt | `boolean` |
|
||||
| `tui.executeCommand({ body })` | Executar um comando | `boolean` |
|
||||
| `tui.showToast({ body })` | Mostrar notificação toast | `boolean` |
|
||||
|
||||
---
|
||||
|
||||
#### Exemplos
|
||||
|
||||
```javascript
|
||||
// Controlar a interface TUI
|
||||
await client.tui.appendPrompt({
|
||||
body: { text: "Adicione isso ao prompt" },
|
||||
})
|
||||
|
||||
await client.tui.showToast({
|
||||
body: { message: "Tarefa concluída", variant: "success" },
|
||||
})
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Autenticação
|
||||
|
||||
| Método | Descrição | Resposta |
|
||||
|---------------------|------------------------------|-----------|
|
||||
| `auth.set({ ... })` | Definir credenciais de autenticação | `boolean` |
|
||||
|
||||
---
|
||||
|
||||
#### Exemplos
|
||||
|
||||
```javascript
|
||||
await client.auth.set({
|
||||
path: { id: "anthropic" },
|
||||
body: { type: "api", key: "sua-chave-api" },
|
||||
})
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Eventos
|
||||
|
||||
| Método | Descrição | Resposta |
|
||||
|---------------------|-------------------------|---------------------------|
|
||||
| `event.subscribe()` | Fluxo de eventos enviados pelo servidor | Fluxo de eventos enviados pelo servidor |
|
||||
|
||||
---
|
||||
|
||||
#### Exemplos
|
||||
|
||||
```javascript
|
||||
// Ouvir eventos em tempo real
|
||||
const events = await client.event.subscribe()
|
||||
for await (const event of events.stream) {
|
||||
console.log("Evento:", event.type, event.properties)
|
||||
}
|
||||
```
|
||||
284
packages/web/src/content/docs/pt-br/server.mdx
Normal file
284
packages/web/src/content/docs/pt-br/server.mdx
Normal file
@@ -0,0 +1,284 @@
|
||||
---
|
||||
title: Servidor
|
||||
description: Interaja com o servidor opencode via HTTP.
|
||||
---
|
||||
|
||||
import config from "../../../../config.mjs"
|
||||
export const typesUrl = `${config.github}/blob/dev/packages/sdk/js/src/gen/types.gen.ts`
|
||||
|
||||
O comando `opencode serve` executa um servidor HTTP sem cabeça que expõe um endpoint OpenAPI que um cliente opencode pode usar.
|
||||
|
||||
---
|
||||
|
||||
### Uso
|
||||
|
||||
```bash
|
||||
opencode serve [--port <número>] [--hostname <string>] [--cors <origem>]
|
||||
```
|
||||
|
||||
#### Opções
|
||||
|
||||
| Flag | Descrição | Padrão |
|
||||
| --------------- | ----------------------------------- | ---------------- |
|
||||
| `--port` | Porta para escutar | `4096` |
|
||||
| `--hostname` | Nome do host para escutar | `127.0.0.1` |
|
||||
| `--mdns` | Habilitar descoberta mDNS | `false` |
|
||||
| `--mdns-domain` | Nome de domínio personalizado para o serviço mDNS | `opencode.local` |
|
||||
| `--cors` | Origens adicionais de navegador a permitir | `[]` |
|
||||
|
||||
`--cors` pode ser passado várias vezes:
|
||||
|
||||
```bash
|
||||
opencode serve --cors http://localhost:5173 --cors https://app.example.com
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Autenticação
|
||||
|
||||
Defina `OPENCODE_SERVER_PASSWORD` para proteger o servidor com autenticação básica HTTP. O nome de usuário padrão é `opencode`, ou defina `OPENCODE_SERVER_USERNAME` para substituí-lo. Isso se aplica tanto ao `opencode serve` quanto ao `opencode web`.
|
||||
|
||||
```bash
|
||||
OPENCODE_SERVER_PASSWORD=sua-senha opencode serve
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Como funciona
|
||||
|
||||
Quando você executa `opencode`, ele inicia um TUI e um servidor. Onde o TUI é o cliente que se comunica com o servidor. O servidor expõe um endpoint de especificação OpenAPI 3.1. Este endpoint também é usado para gerar um [SDK](/docs/sdk).
|
||||
|
||||
:::tip
|
||||
Use o servidor opencode para interagir com o opencode programaticamente.
|
||||
:::
|
||||
|
||||
Essa arquitetura permite que o opencode suporte múltiplos clientes e permite que você interaja com o opencode programaticamente.
|
||||
|
||||
Você pode executar `opencode serve` para iniciar um servidor autônomo. Se você tiver o TUI do opencode em execução, `opencode serve` iniciará um novo servidor.
|
||||
|
||||
---
|
||||
|
||||
#### Conectar a um servidor existente
|
||||
|
||||
Quando você inicia o TUI, ele atribui aleatoriamente uma porta e um nome de host. Você pode passar os [flags](/docs/cli) `--hostname` e `--port`. Em seguida, use isso para se conectar ao seu servidor.
|
||||
|
||||
O endpoint [`/tui`](#tui) pode ser usado para controlar o TUI através do servidor. Por exemplo, você pode preencher ou executar um prompt. Essa configuração é usada pelos plugins do OpenCode [IDE](/docs/ide).
|
||||
|
||||
---
|
||||
|
||||
## Especificação
|
||||
|
||||
O servidor publica uma especificação OpenAPI 3.1 que pode ser visualizada em:
|
||||
|
||||
```
|
||||
http://<hostname>:<port>/doc
|
||||
```
|
||||
|
||||
Por exemplo, `http://localhost:4096/doc`. Use a especificação para gerar clientes ou inspecionar tipos de requisição e resposta. Ou visualize em um explorador Swagger.
|
||||
|
||||
---
|
||||
|
||||
## APIs
|
||||
|
||||
O servidor opencode expõe as seguintes APIs.
|
||||
|
||||
---
|
||||
|
||||
### Global
|
||||
|
||||
| Método | Caminho | Descrição | Resposta |
|
||||
| ------ | ------------------- | ------------------------------ | -------------------------------------- |
|
||||
| `GET` | `/global/health` | Obter saúde e versão do servidor | `{ healthy: true, version: string }` |
|
||||
| `GET` | `/global/event` | Obter eventos globais (fluxo SSE) | Fluxo de eventos |
|
||||
|
||||
---
|
||||
|
||||
### Projeto
|
||||
|
||||
| Método | Caminho | Descrição | Resposta |
|
||||
| ------ | --------------------- | --------------------------- | --------------------------------------------- |
|
||||
| `GET` | `/project` | Listar todos os projetos | <a href={typesUrl}><code>Project[]</code></a> |
|
||||
| `GET` | `/project/current` | Obter o projeto atual | <a href={typesUrl}><code>Project</code></a> |
|
||||
|
||||
---
|
||||
|
||||
### Caminho & VCS
|
||||
|
||||
| Método | Caminho | Descrição | Resposta |
|
||||
| ------ | ---------- | ------------------------------------- | ------------------------------------------- |
|
||||
| `GET` | `/path` | Obter o caminho atual | <a href={typesUrl}><code>Path</code></a> |
|
||||
| `GET` | `/vcs` | Obter informações do VCS para o projeto atual | <a href={typesUrl}><code>VcsInfo</code></a> |
|
||||
|
||||
---
|
||||
|
||||
### Instância
|
||||
|
||||
| Método | Caminho | Descrição | Resposta |
|
||||
| ------ | ---------------------- | ----------------------------- | --------- |
|
||||
| `POST` | `/instance/dispose` | Descartar a instância atual | `boolean` |
|
||||
|
||||
---
|
||||
|
||||
### Configuração
|
||||
|
||||
| Método | Caminho | Descrição | Resposta |
|
||||
| ------- | ---------------------- | -------------------------------- | ---------------------------------------------------------------------------------------- |
|
||||
| `GET` | `/config` | Obter informações de configuração | <a href={typesUrl}><code>Config</code></a> |
|
||||
| `PATCH` | `/config` | Atualizar configuração | <a href={typesUrl}><code>Config</code></a> |
|
||||
| `GET` | `/config/providers` | Listar provedores e modelos padrão | `{ providers: `<a href={typesUrl}>Provider[]</a>`, default: { [key: string]: string } }` |
|
||||
|
||||
---
|
||||
|
||||
### Provedor
|
||||
|
||||
| Método | Caminho | Descrição | Resposta |
|
||||
| ------ | ----------------------------------- | ----------------------------------- | ----------------------------------------------------------------------------------- |
|
||||
| `GET` | `/provider` | Listar todos os provedores | `{ all: `<a href={typesUrl}>Provider[]</a>`, default: {...}, connected: string[] }` |
|
||||
| `GET` | `/provider/auth` | Obter métodos de autenticação do provedor | `{ [providerID: string]: `<a href={typesUrl}>ProviderAuthMethod[]</a>` }` |
|
||||
| `POST` | `/provider/{id}/oauth/authorize` | Autorizar um provedor usando OAuth | <a href={typesUrl}><code>ProviderAuthAuthorization</code></a> |
|
||||
| `POST` | `/provider/{id}/oauth/callback` | Lidar com o callback OAuth para um provedor | `boolean` |
|
||||
|
||||
---
|
||||
|
||||
### Sessões
|
||||
|
||||
| Método | Caminho | Descrição | Notas |
|
||||
| -------- | -------------------------------------------- | ------------------------------------- | ---------------------------------------------------------------------------------- |
|
||||
| `GET` | `/session` | Listar todas as sessões | Retorna <a href={typesUrl}><code>Session[]</code></a> |
|
||||
| `POST` | `/session` | Criar uma nova sessão | corpo: `{ parentID?, title? }`, retorna <a href={typesUrl}><code>Session</code></a> |
|
||||
| `GET` | `/session/status` | Obter status da sessão para todas as sessões | Retorna `{ [sessionID: string]: `<a href={typesUrl}>SessionStatus</a>` }` |
|
||||
| `GET` | `/session/:id` | Obter detalhes da sessão | Retorna <a href={typesUrl}><code>Session</code></a> |
|
||||
| `DELETE` | `/session/:id` | Deletar uma sessão e todos os seus dados | Retorna `boolean` |
|
||||
| `PATCH` | `/session/:id` | Atualizar propriedades da sessão | corpo: `{ title? }`, retorna <a href={typesUrl}><code>Session</code></a> |
|
||||
| `GET` | `/session/:id/children` | Obter as sessões filhas de uma sessão | Retorna <a href={typesUrl}><code>Session[]</code></a> |
|
||||
| `GET` | `/session/:id/todo` | Obter a lista de tarefas para uma sessão | Retorna <a href={typesUrl}><code>Todo[]</code></a> |
|
||||
| `POST` | `/session/:id/init` | Analisar o app e criar `AGENTS.md` | corpo: `{ messageID, providerID, modelID }`, retorna `boolean` |
|
||||
| `POST` | `/session/:id/fork` | Fazer um fork de uma sessão existente em uma mensagem | corpo: `{ messageID? }`, retorna <a href={typesUrl}><code>Session</code></a> |
|
||||
| `POST` | `/session/:id/abort` | Abortar uma sessão em execução | Retorna `boolean` |
|
||||
| `POST` | `/session/:id/share` | Compartilhar uma sessão | Retorna <a href={typesUrl}><code>Session</code></a> |
|
||||
| `DELETE` | `/session/:id/share` | Descompartilhar uma sessão | Retorna <a href={typesUrl}><code>Session</code></a> |
|
||||
| `GET` | `/session/:id/diff` | Obter a diferença para esta sessão | query: `messageID?`, retorna <a href={typesUrl}><code>FileDiff[]</code></a> |
|
||||
| `POST` | `/session/:id/summarize` | Resumir a sessão | corpo: `{ providerID, modelID }`, retorna `boolean` |
|
||||
| `POST` | `/session/:id/revert` | Reverter uma mensagem | corpo: `{ messageID, partID? }`, retorna `boolean` |
|
||||
| `POST` | `/session/:id/unrevert` | Restaurar todas as mensagens revertidas | Retorna `boolean` |
|
||||
| `POST` | `/session/:id/permissions/:permissionID` | Responder a um pedido de permissão | corpo: `{ response, remember? }`, retorna `boolean` |
|
||||
|
||||
---
|
||||
|
||||
### Mensagens
|
||||
|
||||
| Método | Caminho | Descrição | Notas |
|
||||
| ------ | ------------------------------------- | ------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| `GET` | `/session/:id/message` | Listar mensagens em uma sessão | query: `limit?`, retorna `{ info: `<a href={typesUrl}>Message</a>`, parts: `<a href={typesUrl}>Part[]</a>`}[]` |
|
||||
| `POST` | `/session/:id/message` | Enviar uma mensagem e aguardar resposta | corpo: `{ messageID?, model?, agent?, noReply?, system?, tools?, parts }`, retorna `{ info: `<a href={typesUrl}>Message</a>`, parts: `<a href={typesUrl}>Part[]</a>`}` |
|
||||
| `GET` | `/session/:id/message/:messageID` | Obter detalhes da mensagem | Retorna `{ info: `<a href={typesUrl}>Message</a>`, parts: `<a href={typesUrl}>Part[]</a>`}` |
|
||||
| `POST` | `/session/:id/prompt_async` | Enviar uma mensagem assíncrona (sem espera) | corpo: igual a `/session/:id/message`, retorna `204 No Content` |
|
||||
| `POST` | `/session/:id/command` | Executar um comando de barra | corpo: `{ messageID?, agent?, model?, command, arguments }`, retorna `{ info: `<a href={typesUrl}>Message</a>`, parts: `<a href={typesUrl}>Part[]</a>`}` |
|
||||
| `POST` | `/session/:id/shell` | Executar um comando shell | corpo: `{ agent, model?, command }`, retorna `{ info: `<a href={typesUrl}>Message</a>`, parts: `<a href={typesUrl}>Part[]</a>`}` |
|
||||
|
||||
---
|
||||
|
||||
### Comandos
|
||||
|
||||
| Método | Caminho | Descrição | Resposta |
|
||||
| ------ | ------------- | ----------------- | --------------------------------------------- |
|
||||
| `GET` | `/command` | Listar todos os comandos | <a href={typesUrl}><code>Command[]</code></a> |
|
||||
|
||||
---
|
||||
|
||||
### Arquivos
|
||||
|
||||
| Método | Caminho | Descrição | Resposta |
|
||||
| ------ | ---------------------------- | ---------------------------------- | ------------------------------------------------------------------------------------------- |
|
||||
| `GET` | `/find?pattern=<pat>` | Pesquisar texto em arquivos | Array de objetos de correspondência com `path`, `lines`, `line_number`, `absolute_offset`, `submatches` |
|
||||
| `GET` | `/find/file?query=<q>` | Encontrar arquivos e diretórios por nome | `string[]` (caminhos) |
|
||||
| `GET` | `/find/symbol?query=<q>` | Encontrar símbolos do workspace | <a href={typesUrl}><code>Symbol[]</code></a> |
|
||||
| `GET` | `/file?path=<path>` | Listar arquivos e diretórios | <a href={typesUrl}><code>FileNode[]</code></a> |
|
||||
| `GET` | `/file/content?path=<p>` | Ler um arquivo | <a href={typesUrl}><code>FileContent</code></a> |
|
||||
| `GET` | `/file/status` | Obter status para arquivos rastreados | <a href={typesUrl}><code>File[]</code></a> |
|
||||
|
||||
#### Parâmetros de consulta `/find/file`
|
||||
|
||||
- `query` (obrigatório) — string de pesquisa (correspondência difusa)
|
||||
- `type` (opcional) — limitar resultados a `"file"` ou `"directory"`
|
||||
- `directory` (opcional) — substituir a raiz do projeto para a pesquisa
|
||||
- `limit` (opcional) — resultados máximos (1–200)
|
||||
- `dirs` (opcional) — flag legada (`"false"` retorna apenas arquivos)
|
||||
|
||||
---
|
||||
|
||||
### Ferramentas (Experimental)
|
||||
|
||||
| Método | Caminho | Descrição | Resposta |
|
||||
| ------ | ----------------------------------------------- | -------------------------------------- | -------------------------------------------- |
|
||||
| `GET` | `/experimental/tool/ids` | Listar todos os IDs de ferramentas | <a href={typesUrl}><code>ToolIDs</code></a> |
|
||||
| `GET` | `/experimental/tool?provider=<p>&model=<m>` | Listar ferramentas com esquemas JSON para um modelo | <a href={typesUrl}><code>ToolList</code></a> |
|
||||
|
||||
---
|
||||
|
||||
### LSP, Formatadores & MCP
|
||||
|
||||
| Método | Caminho | Descrição | Resposta |
|
||||
| ------ | ---------------- | ------------------------ | -------------------------------------------------------- |
|
||||
| `GET` | `/lsp` | Obter status do servidor LSP | <a href={typesUrl}><code>LSPStatus[]</code></a> |
|
||||
| `GET` | `/formatter` | Obter status do formatador | <a href={typesUrl}><code>FormatterStatus[]</code></a> |
|
||||
| `GET` | `/mcp` | Obter status do servidor MCP | `{ [name: string]: `<a href={typesUrl}>MCPStatus</a>` }` |
|
||||
| `POST` | `/mcp` | Adicionar servidor MCP dinamicamente | corpo: `{ name, config }`, retorna objeto de status MCP |
|
||||
|
||||
---
|
||||
|
||||
### Agentes
|
||||
|
||||
| Método | Caminho | Descrição | Resposta |
|
||||
| ------ | ----------- | ----------------------- | ------------------------------------------- |
|
||||
| `GET` | `/agent` | Listar todos os agentes disponíveis | <a href={typesUrl}><code>Agent[]</code></a> |
|
||||
|
||||
---
|
||||
|
||||
### Registro
|
||||
|
||||
| Método | Caminho | Descrição | Resposta |
|
||||
| ------ | --------- | ---------------------------------------------------------- | --------- |
|
||||
| `POST` | `/log` | Escrever entrada de log. Corpo: `{ service, level, message, extra? }` | `boolean` |
|
||||
|
||||
---
|
||||
|
||||
### TUI
|
||||
|
||||
| Método | Caminho | Descrição | Resposta |
|
||||
| ------ | --------------------------- | ----------------------------------------- | ---------------------- |
|
||||
| `POST` | `/tui/append-prompt` | Anexar texto ao prompt | `boolean` |
|
||||
| `POST` | `/tui/open-help` | Abrir o diálogo de ajuda | `boolean` |
|
||||
| `POST` | `/tui/open-sessions` | Abrir o seletor de sessões | `boolean` |
|
||||
| `POST` | `/tui/open-themes` | Abrir o seletor de temas | `boolean` |
|
||||
| `POST` | `/tui/open-models` | Abrir o seletor de modelos | `boolean` |
|
||||
| `POST` | `/tui/submit-prompt` | Enviar o prompt atual | `boolean` |
|
||||
| `POST` | `/tui/clear-prompt` | Limpar o prompt | `boolean` |
|
||||
| `POST` | `/tui/execute-command` | Executar um comando (`{ command }`) | `boolean` |
|
||||
| `POST` | `/tui/show-toast` | Mostrar toast (`{ title?, message, variant }`) | `boolean` |
|
||||
| `GET` | `/tui/control/next` | Aguardar o próximo pedido de controle | Objeto de pedido de controle |
|
||||
| `POST` | `/tui/control/response` | Responder a um pedido de controle (`{ body }`) | `boolean` |
|
||||
|
||||
---
|
||||
|
||||
### Auth
|
||||
|
||||
| Método | Caminho | Descrição | Resposta |
|
||||
| ------ | --------------- | ------------------------------------------------------------- | --------- |
|
||||
| `PUT` | `/auth/:id` | Definir credenciais de autenticação. O corpo deve corresponder ao esquema do provedor | `boolean` |
|
||||
|
||||
---
|
||||
|
||||
### Eventos
|
||||
|
||||
| Método | Caminho | Descrição | Resposta |
|
||||
| ------ | ----------- | --------------------------------------------------------------------------- | ------------------------- |
|
||||
| `GET` | `/event` | Fluxo de eventos enviados pelo servidor. O primeiro evento é `server.connected`, depois eventos de bus | Fluxo de eventos enviados pelo servidor |
|
||||
|
||||
---
|
||||
|
||||
### Docs
|
||||
|
||||
| Método | Caminho | Descrição | Resposta |
|
||||
| ------ | --------- | ----------------------- | --------------------------- |
|
||||
| `GET` | `/doc` | Especificação OpenAPI 3.1 | Página HTML com a especificação OpenAPI |
|
||||
127
packages/web/src/content/docs/pt-br/share.mdx
Normal file
127
packages/web/src/content/docs/pt-br/share.mdx
Normal file
@@ -0,0 +1,127 @@
|
||||
---
|
||||
title: Compartilhar
|
||||
description: Compartilhe suas conversas do OpenCode.
|
||||
---
|
||||
|
||||
O recurso de compartilhamento do OpenCode permite que você crie links públicos para suas conversas do OpenCode, para que você possa colaborar com colegas de equipe ou obter ajuda de outros.
|
||||
|
||||
:::note
|
||||
Conversas compartilhadas são acessíveis publicamente para qualquer pessoa com o link.
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
## Como funciona
|
||||
|
||||
Quando você compartilha uma conversa, o OpenCode:
|
||||
|
||||
1. Cria uma URL pública única para sua sessão
|
||||
2. Sincroniza seu histórico de conversas com nossos servidores
|
||||
3. Torna a conversa acessível através do link compartilhável — `opncd.ai/s/<share-id>`
|
||||
|
||||
---
|
||||
|
||||
## Compartilhamento
|
||||
|
||||
O OpenCode suporta três modos de compartilhamento que controlam como as conversas são compartilhadas:
|
||||
|
||||
---
|
||||
|
||||
### Manual (padrão)
|
||||
|
||||
Por padrão, o OpenCode usa o modo de compartilhamento manual. As sessões não são compartilhadas automaticamente, mas você pode compartilhá-las manualmente usando o comando `/share`:
|
||||
|
||||
```
|
||||
/share
|
||||
```
|
||||
|
||||
Isso gerará uma URL única que será copiada para sua área de transferência.
|
||||
|
||||
Para definir explicitamente o modo manual em seu [arquivo de configuração](/docs/config):
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opncd.ai/config.json",
|
||||
"share": "manual"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Compartilhamento automático
|
||||
|
||||
Você pode habilitar o compartilhamento automático para todas as novas conversas definindo a opção `share` como `"auto"` em seu [arquivo de configuração](/docs/config):
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opncd.ai/config.json",
|
||||
"share": "auto"
|
||||
}
|
||||
```
|
||||
|
||||
Com o compartilhamento automático habilitado, cada nova conversa será compartilhada automaticamente e um link será gerado.
|
||||
|
||||
---
|
||||
|
||||
### Desativado
|
||||
|
||||
Você pode desativar o compartilhamento completamente definindo a opção `share` como `"disabled"` em seu [arquivo de configuração](/docs/config):
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opncd.ai/config.json",
|
||||
"share": "disabled"
|
||||
}
|
||||
```
|
||||
|
||||
Para impor isso em sua equipe para um determinado projeto, adicione-o ao `opencode.json` em seu projeto e faça o check-in no Git.
|
||||
|
||||
---
|
||||
|
||||
## Cancelar compartilhamento
|
||||
|
||||
Para parar de compartilhar uma conversa e removê-la do acesso público:
|
||||
|
||||
```
|
||||
/unshare
|
||||
```
|
||||
|
||||
Isso removerá o link de compartilhamento e excluirá os dados relacionados à conversa.
|
||||
|
||||
---
|
||||
|
||||
## Privacidade
|
||||
|
||||
Há algumas coisas a serem lembradas ao compartilhar uma conversa.
|
||||
|
||||
---
|
||||
|
||||
### Retenção de dados
|
||||
|
||||
Conversas compartilhadas permanecem acessíveis até que você as descompartilhe explicitamente. Isso inclui:
|
||||
|
||||
- Histórico completo da conversa
|
||||
- Todas as mensagens e respostas
|
||||
- Metadados da sessão
|
||||
|
||||
---
|
||||
|
||||
### Recomendações
|
||||
|
||||
- Compartilhe apenas conversas que não contenham informações sensíveis.
|
||||
- Revise o conteúdo da conversa antes de compartilhar.
|
||||
- Descompartilhe conversas quando a colaboração estiver completa.
|
||||
- Evite compartilhar conversas com código proprietário ou dados confidenciais.
|
||||
- Para projetos sensíveis, desative o compartilhamento completamente.
|
||||
|
||||
---
|
||||
|
||||
## Para empresas
|
||||
|
||||
Para implantações empresariais, o recurso de compartilhamento pode ser:
|
||||
|
||||
- **Desativado** completamente para conformidade de segurança
|
||||
- **Restrito** a usuários autenticados apenas através de SSO
|
||||
- **Auto-hospedado** em sua própria infraestrutura
|
||||
|
||||
[Saiba mais](/docs/enterprise) sobre como usar o opencode em sua organização.
|
||||
222
packages/web/src/content/docs/pt-br/skills.mdx
Normal file
222
packages/web/src/content/docs/pt-br/skills.mdx
Normal file
@@ -0,0 +1,222 @@
|
||||
---
|
||||
title: "Habilidades do Agente"
|
||||
description: "Defina comportamentos reutilizáveis via definições de SKILL.md"
|
||||
---
|
||||
|
||||
As habilidades do agente permitem que o OpenCode descubra instruções reutilizáveis do seu repositório ou diretório pessoal.
|
||||
As habilidades são carregadas sob demanda através da ferramenta nativa `skill`—os agentes veem as habilidades disponíveis e podem carregar o conteúdo completo quando necessário.
|
||||
|
||||
---
|
||||
|
||||
## Colocar arquivos
|
||||
|
||||
Crie uma pasta por nome de habilidade e coloque um `SKILL.md` dentro dela.
|
||||
O OpenCode pesquisa nesses locais:
|
||||
|
||||
- Configuração do projeto: `.opencode/skills/<name>/SKILL.md`
|
||||
- Configuração global: `~/.config/opencode/skills/<name>/SKILL.md`
|
||||
- Projeto compatível com Claude: `.claude/skills/<name>/SKILL.md`
|
||||
- Global compatível com Claude: `~/.claude/skills/<name>/SKILL.md`
|
||||
- Projeto compatível com agente: `.agents/skills/<name>/SKILL.md`
|
||||
- Global compatível com agente: `~/.agents/skills/<name>/SKILL.md`
|
||||
|
||||
---
|
||||
|
||||
## Entender a descoberta
|
||||
|
||||
Para caminhos locais do projeto, o OpenCode sobe a partir do seu diretório de trabalho atual até alcançar a árvore de trabalho do git.
|
||||
Ele carrega qualquer `skills/*/SKILL.md` correspondente em `.opencode/` e qualquer `.claude/skills/*/SKILL.md` ou `.agents/skills/*/SKILL.md` ao longo do caminho.
|
||||
|
||||
As definições globais também são carregadas de `~/.config/opencode/skills/*/SKILL.md`, `~/.claude/skills/*/SKILL.md` e `~/.agents/skills/*/SKILL.md`.
|
||||
|
||||
---
|
||||
|
||||
## Escrever frontmatter
|
||||
|
||||
Cada `SKILL.md` deve começar com frontmatter YAML.
|
||||
Somente estes campos são reconhecidos:
|
||||
|
||||
- `name` (obrigatório)
|
||||
- `description` (obrigatório)
|
||||
- `license` (opcional)
|
||||
- `compatibility` (opcional)
|
||||
- `metadata` (opcional, mapa de string para string)
|
||||
|
||||
Campos de frontmatter desconhecidos são ignorados.
|
||||
|
||||
---
|
||||
|
||||
## Validar nomes
|
||||
|
||||
`name` deve:
|
||||
|
||||
- Ter de 1 a 64 caracteres
|
||||
- Ser alfanumérico em minúsculas com separadores de hífen simples
|
||||
- Não começar ou terminar com `-`
|
||||
- Não conter `--` consecutivos
|
||||
- Combinar com o nome do diretório que contém `SKILL.md`
|
||||
|
||||
Regex equivalente:
|
||||
|
||||
```text
|
||||
^[a-z0-9]+(-[a-z0-9]+)*$
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Seguir regras de comprimento
|
||||
|
||||
`description` deve ter de 1 a 1024 caracteres.
|
||||
Mantenha-a específica o suficiente para que o agente escolha corretamente.
|
||||
|
||||
---
|
||||
|
||||
## Usar um exemplo
|
||||
|
||||
Crie `.opencode/skills/git-release/SKILL.md` assim:
|
||||
|
||||
```markdown
|
||||
---
|
||||
name: git-release
|
||||
description: Crie lançamentos e changelogs consistentes
|
||||
license: MIT
|
||||
compatibility: opencode
|
||||
metadata:
|
||||
audience: mantenedores
|
||||
workflow: github
|
||||
---
|
||||
|
||||
## O que eu faço
|
||||
|
||||
- Redigir notas de lançamento a partir de PRs mesclados
|
||||
- Propor um aumento de versão
|
||||
- Fornecer um comando `gh release create` copiável e colável
|
||||
|
||||
## Quando me usar
|
||||
|
||||
Use isso quando estiver preparando um lançamento marcado.
|
||||
Faça perguntas esclarecedoras se o esquema de versionamento alvo não estiver claro.
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Reconhecer descrição da ferramenta
|
||||
|
||||
O OpenCode lista as habilidades disponíveis na descrição da ferramenta `skill`.
|
||||
Cada entrada inclui o nome e a descrição da habilidade:
|
||||
|
||||
```xml
|
||||
<available_skills>
|
||||
<skill>
|
||||
<name>git-release</name>
|
||||
<description>Crie lançamentos e changelogs consistentes</description>
|
||||
</skill>
|
||||
</available_skills>
|
||||
```
|
||||
|
||||
O agente carrega uma habilidade chamando a ferramenta:
|
||||
|
||||
```
|
||||
skill({ name: "git-release" })
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Configurar permissões
|
||||
|
||||
Controle quais habilidades os agentes podem acessar usando permissões baseadas em padrões em `opencode.json`:
|
||||
|
||||
```json
|
||||
{
|
||||
"permission": {
|
||||
"skill": {
|
||||
"*": "allow",
|
||||
"pr-review": "allow",
|
||||
"internal-*": "deny",
|
||||
"experimental-*": "ask"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
| Permissão | Comportamento |
|
||||
|------------|--------------------------------------------|
|
||||
| `allow` | Habilidade carrega imediatamente |
|
||||
| `deny` | Habilidade oculta do agente, acesso rejeitado |
|
||||
| `ask` | Usuário solicitado para aprovação antes de carregar |
|
||||
|
||||
Padrões suportam curingas: `internal-*` corresponde a `internal-docs`, `internal-tools`, etc.
|
||||
|
||||
---
|
||||
|
||||
## Substituir por agente
|
||||
|
||||
Dê a agentes específicos permissões diferentes das configurações globais padrão.
|
||||
|
||||
**Para agentes personalizados** (no frontmatter do agente):
|
||||
|
||||
```yaml
|
||||
---
|
||||
permission:
|
||||
skill:
|
||||
"documents-*": "allow"
|
||||
---
|
||||
```
|
||||
|
||||
**Para agentes embutidos** (em `opencode.json`):
|
||||
|
||||
```json
|
||||
{
|
||||
"agent": {
|
||||
"plan": {
|
||||
"permission": {
|
||||
"skill": {
|
||||
"internal-*": "allow"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Desativar a ferramenta de habilidades
|
||||
|
||||
Desative completamente as habilidades para agentes que não devem usá-las:
|
||||
|
||||
**Para agentes personalizados**:
|
||||
|
||||
```yaml
|
||||
---
|
||||
tools:
|
||||
skill: false
|
||||
---
|
||||
```
|
||||
|
||||
**Para agentes embutidos**:
|
||||
|
||||
```json
|
||||
{
|
||||
"agent": {
|
||||
"plan": {
|
||||
"tools": {
|
||||
"skill": false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Quando desativado, a seção `<available_skills>` é omitida completamente.
|
||||
|
||||
---
|
||||
|
||||
## Solucionar problemas de carregamento
|
||||
|
||||
Se uma habilidade não aparecer:
|
||||
|
||||
1. Verifique se `SKILL.md` está escrito em letras maiúsculas
|
||||
2. Verifique se o frontmatter inclui `name` e `description`
|
||||
3. Certifique-se de que os nomes das habilidades sejam únicos em todos os locais
|
||||
4. Verifique as permissões—habilidades com `deny` estão ocultas dos agentes
|
||||
369
packages/web/src/content/docs/pt-br/themes.mdx
Normal file
369
packages/web/src/content/docs/pt-br/themes.mdx
Normal file
@@ -0,0 +1,369 @@
|
||||
---
|
||||
title: Temas
|
||||
description: Selecione um tema embutido ou defina o seu próprio.
|
||||
---
|
||||
|
||||
Com o OpenCode, você pode selecionar um dos vários temas embutidos, usar um tema que se adapta ao tema do seu terminal ou definir seu próprio tema personalizado.
|
||||
|
||||
Por padrão, o OpenCode usa nosso próprio tema `opencode`.
|
||||
|
||||
---
|
||||
|
||||
## Requisitos do terminal
|
||||
|
||||
Para que os temas sejam exibidos corretamente com sua paleta de cores completa, seu terminal deve suportar **truecolor** (cor de 24 bits). A maioria dos terminais modernos suporta isso por padrão, mas você pode precisar habilitar:
|
||||
|
||||
- **Verificar suporte**: Execute `echo $COLORTERM` - deve retornar `truecolor` ou `24bit`
|
||||
- **Habilitar truecolor**: Defina a variável de ambiente `COLORTERM=truecolor` no seu perfil de shell
|
||||
- **Compatibilidade do terminal**: Certifique-se de que seu emulador de terminal suporta cores de 24 bits (a maioria dos terminais modernos, como iTerm2, Alacritty, Kitty, Windows Terminal e versões recentes do GNOME Terminal, suportam)
|
||||
|
||||
Sem suporte a truecolor, os temas podem aparecer com precisão de cor reduzida ou voltar para a aproximação de 256 cores mais próxima.
|
||||
|
||||
---
|
||||
|
||||
## Temas embutidos
|
||||
|
||||
O OpenCode vem com vários temas embutidos.
|
||||
|
||||
| Nome | Descrição |
|
||||
| ---------------------- | ---------------------------------------------------------------------------- |
|
||||
| `system` | Adapta-se à cor de fundo do seu terminal |
|
||||
| `tokyonight` | Baseado no tema [Tokyonight](https://github.com/folke/tokyonight.nvim) |
|
||||
| `everforest` | Baseado no tema [Everforest](https://github.com/sainnhe/everforest) |
|
||||
| `ayu` | Baseado no tema escuro [Ayu](https://github.com/ayu-theme) |
|
||||
| `catppuccin` | Baseado no tema [Catppuccin](https://github.com/catppuccin) |
|
||||
| `catppuccin-macchiato` | Baseado no tema [Catppuccin](https://github.com/catppuccin) |
|
||||
| `gruvbox` | Baseado no tema [Gruvbox](https://github.com/morhetz/gruvbox) |
|
||||
| `kanagawa` | Baseado no tema [Kanagawa](https://github.com/rebelot/kanagawa.nvim) |
|
||||
| `nord` | Baseado no tema [Nord](https://github.com/nordtheme/nord) |
|
||||
| `matrix` | Tema verde estilo hacker sobre fundo preto |
|
||||
| `one-dark` | Baseado no tema escuro [Atom One](https://github.com/Th3Whit3Wolf/one-nvim) |
|
||||
|
||||
E mais, estamos constantemente adicionando novos temas.
|
||||
|
||||
---
|
||||
|
||||
## Tema do sistema
|
||||
|
||||
O tema `system` é projetado para se adaptar automaticamente ao esquema de cores do seu terminal. Ao contrário dos temas tradicionais que usam cores fixas, o tema _system_:
|
||||
|
||||
- **Gera escala de cinza**: Cria uma escala de cinza personalizada com base na cor de fundo do seu terminal, garantindo contraste ideal.
|
||||
- **Usa cores ANSI**: Aproveita as cores ANSI padrão (0-15) para destaque de sintaxe e elementos da interface, que respeitam a paleta de cores do seu terminal.
|
||||
- **Preserva padrões do terminal**: Usa `none` para cores de texto e fundo para manter a aparência nativa do seu terminal.
|
||||
|
||||
O tema do sistema é para usuários que:
|
||||
|
||||
- Querem que o OpenCode corresponda à aparência do seu terminal
|
||||
- Usam esquemas de cores de terminal personalizados
|
||||
- Preferem uma aparência consistente em todos os aplicativos de terminal
|
||||
|
||||
---
|
||||
|
||||
## Usando um tema
|
||||
|
||||
Você pode selecionar um tema chamando a seleção de tema com o comando `/theme`. Ou você pode especificá-lo em sua [configuração](/docs/config).
|
||||
|
||||
```json title="opencode.json" {3}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"theme": "tokyonight"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Temas personalizados
|
||||
|
||||
O OpenCode suporta um sistema de temas flexível baseado em JSON que permite aos usuários criar e personalizar temas facilmente.
|
||||
|
||||
---
|
||||
|
||||
### Hierarquia
|
||||
|
||||
Os temas são carregados de vários diretórios na seguinte ordem, onde diretórios posteriores substituem os anteriores:
|
||||
|
||||
1. **Temas embutidos** - Estes estão incorporados no binário
|
||||
2. **Diretório de configuração do usuário** - Definido em `~/.config/opencode/themes/*.json` ou `$XDG_CONFIG_HOME/opencode/themes/*.json`
|
||||
3. **Diretório raiz do projeto** - Definido em `<project-root>/.opencode/themes/*.json`
|
||||
4. **Diretório de trabalho atual** - Definido em `./.opencode/themes/*.json`
|
||||
|
||||
Se vários diretórios contiverem um tema com o mesmo nome, o tema do diretório com maior prioridade será usado.
|
||||
|
||||
---
|
||||
|
||||
### Criando um tema
|
||||
|
||||
Para criar um tema personalizado, crie um arquivo JSON em um dos diretórios de tema.
|
||||
|
||||
Para temas de usuário:
|
||||
|
||||
```bash no-frame
|
||||
mkdir -p ~/.config/opencode/themes
|
||||
vim ~/.config/opencode/themes/my-theme.json
|
||||
```
|
||||
|
||||
E para temas específicos do projeto.
|
||||
|
||||
```bash no-frame
|
||||
mkdir -p .opencode/themes
|
||||
vim .opencode/themes/my-theme.json
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Formato JSON
|
||||
|
||||
Os temas usam um formato JSON flexível com suporte para:
|
||||
|
||||
- **Cores Hex**: `"#ffffff"`
|
||||
- **Cores ANSI**: `3` (0-255)
|
||||
- **Referências de cor**: `"primary"` ou definições personalizadas
|
||||
- **Variantes escuras/claras**: `{"dark": "#000", "light": "#fff"}`
|
||||
- **Sem cor**: `"none"` - Usa a cor padrão do terminal ou transparente
|
||||
|
||||
---
|
||||
|
||||
### Definições de cor
|
||||
|
||||
A seção `defs` é opcional e permite que você defina cores reutilizáveis que podem ser referenciadas no tema.
|
||||
|
||||
---
|
||||
|
||||
### Padrões do terminal
|
||||
|
||||
O valor especial `"none"` pode ser usado para qualquer cor para herdar a cor padrão do terminal. Isso é particularmente útil para criar temas que se misturam perfeitamente com o esquema de cores do seu terminal:
|
||||
|
||||
- `"text": "none"` - Usa a cor de primeiro plano padrão do terminal
|
||||
- `"background": "none"` - Usa a cor de fundo padrão do terminal
|
||||
|
||||
---
|
||||
|
||||
### Exemplo
|
||||
|
||||
Aqui está um exemplo de um tema personalizado:
|
||||
|
||||
```json title="my-theme.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/theme.json",
|
||||
"defs": {
|
||||
"nord0": "#2E3440",
|
||||
"nord1": "#3B4252",
|
||||
"nord2": "#434C5E",
|
||||
"nord3": "#4C566A",
|
||||
"nord4": "#D8DEE9",
|
||||
"nord5": "#E5E9F0",
|
||||
"nord6": "#ECEFF4",
|
||||
"nord7": "#8FBCBB",
|
||||
"nord8": "#88C0D0",
|
||||
"nord9": "#81A1C1",
|
||||
"nord10": "#5E81AC",
|
||||
"nord11": "#BF616A",
|
||||
"nord12": "#D08770",
|
||||
"nord13": "#EBCB8B",
|
||||
"nord14": "#A3BE8C",
|
||||
"nord15": "#B48EAD"
|
||||
},
|
||||
"theme": {
|
||||
"primary": {
|
||||
"dark": "nord8",
|
||||
"light": "nord10"
|
||||
},
|
||||
"secondary": {
|
||||
"dark": "nord9",
|
||||
"light": "nord9"
|
||||
},
|
||||
"accent": {
|
||||
"dark": "nord7",
|
||||
"light": "nord7"
|
||||
},
|
||||
"error": {
|
||||
"dark": "nord11",
|
||||
"light": "nord11"
|
||||
},
|
||||
"warning": {
|
||||
"dark": "nord12",
|
||||
"light": "nord12"
|
||||
},
|
||||
"success": {
|
||||
"dark": "nord14",
|
||||
"light": "nord14"
|
||||
},
|
||||
"info": {
|
||||
"dark": "nord8",
|
||||
"light": "nord10"
|
||||
},
|
||||
"text": {
|
||||
"dark": "nord4",
|
||||
"light": "nord0"
|
||||
},
|
||||
"textMuted": {
|
||||
"dark": "nord3",
|
||||
"light": "nord1"
|
||||
},
|
||||
"background": {
|
||||
"dark": "nord0",
|
||||
"light": "nord6"
|
||||
},
|
||||
"backgroundPanel": {
|
||||
"dark": "nord1",
|
||||
"light": "nord5"
|
||||
},
|
||||
"backgroundElement": {
|
||||
"dark": "nord1",
|
||||
"light": "nord4"
|
||||
},
|
||||
"border": {
|
||||
"dark": "nord2",
|
||||
"light": "nord3"
|
||||
},
|
||||
"borderActive": {
|
||||
"dark": "nord3",
|
||||
"light": "nord2"
|
||||
},
|
||||
"borderSubtle": {
|
||||
"dark": "nord2",
|
||||
"light": "nord3"
|
||||
},
|
||||
"diffAdded": {
|
||||
"dark": "nord14",
|
||||
"light": "nord14"
|
||||
},
|
||||
"diffRemoved": {
|
||||
"dark": "nord11",
|
||||
"light": "nord11"
|
||||
},
|
||||
"diffContext": {
|
||||
"dark": "nord3",
|
||||
"light": "nord3"
|
||||
},
|
||||
"diffHunkHeader": {
|
||||
"dark": "nord3",
|
||||
"light": "nord3"
|
||||
},
|
||||
"diffHighlightAdded": {
|
||||
"dark": "nord14",
|
||||
"light": "nord14"
|
||||
},
|
||||
"diffHighlightRemoved": {
|
||||
"dark": "nord11",
|
||||
"light": "nord11"
|
||||
},
|
||||
"diffAddedBg": {
|
||||
"dark": "#3B4252",
|
||||
"light": "#E5E9F0"
|
||||
},
|
||||
"diffRemovedBg": {
|
||||
"dark": "#3B4252",
|
||||
"light": "#E5E9F0"
|
||||
},
|
||||
"diffContextBg": {
|
||||
"dark": "nord1",
|
||||
"light": "nord5"
|
||||
},
|
||||
"diffLineNumber": {
|
||||
"dark": "nord2",
|
||||
"light": "nord4"
|
||||
},
|
||||
"diffAddedLineNumberBg": {
|
||||
"dark": "#3B4252",
|
||||
"light": "#E5E9F0"
|
||||
},
|
||||
"diffRemovedLineNumberBg": {
|
||||
"dark": "#3B4252",
|
||||
"light": "#E5E9F0"
|
||||
},
|
||||
"markdownText": {
|
||||
"dark": "nord4",
|
||||
"light": "nord0"
|
||||
},
|
||||
"markdownHeading": {
|
||||
"dark": "nord8",
|
||||
"light": "nord10"
|
||||
},
|
||||
"markdownLink": {
|
||||
"dark": "nord9",
|
||||
"light": "nord9"
|
||||
},
|
||||
"markdownLinkText": {
|
||||
"dark": "nord7",
|
||||
"light": "nord7"
|
||||
},
|
||||
"markdownCode": {
|
||||
"dark": "nord14",
|
||||
"light": "nord14"
|
||||
},
|
||||
"markdownBlockQuote": {
|
||||
"dark": "nord3",
|
||||
"light": "nord3"
|
||||
},
|
||||
"markdownEmph": {
|
||||
"dark": "nord12",
|
||||
"light": "nord12"
|
||||
},
|
||||
"markdownStrong": {
|
||||
"dark": "nord13",
|
||||
"light": "nord13"
|
||||
},
|
||||
"markdownHorizontalRule": {
|
||||
"dark": "nord3",
|
||||
"light": "nord3"
|
||||
},
|
||||
"markdownListItem": {
|
||||
"dark": "nord8",
|
||||
"light": "nord10"
|
||||
},
|
||||
"markdownListEnumeration": {
|
||||
"dark": "nord7",
|
||||
"light": "nord7"
|
||||
},
|
||||
"markdownImage": {
|
||||
"dark": "nord9",
|
||||
"light": "nord9"
|
||||
},
|
||||
"markdownImageText": {
|
||||
"dark": "nord7",
|
||||
"light": "nord7"
|
||||
},
|
||||
"markdownCodeBlock": {
|
||||
"dark": "nord4",
|
||||
"light": "nord0"
|
||||
},
|
||||
"syntaxComment": {
|
||||
"dark": "nord3",
|
||||
"light": "nord3"
|
||||
},
|
||||
"syntaxKeyword": {
|
||||
"dark": "nord9",
|
||||
"light": "nord9"
|
||||
},
|
||||
"syntaxFunction": {
|
||||
"dark": "nord8",
|
||||
"light": "nord8"
|
||||
},
|
||||
"syntaxVariable": {
|
||||
"dark": "nord7",
|
||||
"light": "nord7"
|
||||
},
|
||||
"syntaxString": {
|
||||
"dark": "nord14",
|
||||
"light": "nord14"
|
||||
},
|
||||
"syntaxNumber": {
|
||||
"dark": "nord15",
|
||||
"light": "nord15"
|
||||
},
|
||||
"syntaxType": {
|
||||
"dark": "nord7",
|
||||
"light": "nord7"
|
||||
},
|
||||
"syntaxOperator": {
|
||||
"dark": "nord9",
|
||||
"light": "nord9"
|
||||
},
|
||||
"syntaxPunctuation": {
|
||||
"dark": "nord4",
|
||||
"light": "nord0"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
379
packages/web/src/content/docs/pt-br/tools.mdx
Normal file
379
packages/web/src/content/docs/pt-br/tools.mdx
Normal file
@@ -0,0 +1,379 @@
|
||||
---
|
||||
title: Ferramentas
|
||||
description: Gerencie as ferramentas que um LLM pode usar.
|
||||
---
|
||||
|
||||
As ferramentas permitem que o LLM execute ações em sua base de código. O OpenCode vem com um conjunto de ferramentas integradas, mas você pode estendê-lo com [ferramentas personalizadas](/docs/custom-tools) ou [servidores MCP](/docs/mcp-servers).
|
||||
|
||||
Por padrão, todas as ferramentas estão **ativadas** e não precisam de permissão para serem executadas. Você pode controlar o comportamento das ferramentas através de [permissões](/docs/permissions).
|
||||
|
||||
---
|
||||
|
||||
## Configurar
|
||||
|
||||
Use o campo `permission` para controlar o comportamento das ferramentas. Você pode permitir, negar ou exigir aprovação para cada ferramenta.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"edit": "deny",
|
||||
"bash": "ask",
|
||||
"webfetch": "allow"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Você também pode usar curingas para controlar várias ferramentas ao mesmo tempo. Por exemplo, para exigir aprovação para todas as ferramentas de um servidor MCP:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"mymcp_*": "ask"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
[Saiba mais](/docs/permissions) sobre como configurar permissões.
|
||||
|
||||
---
|
||||
|
||||
## Integradas
|
||||
|
||||
Aqui estão todas as ferramentas integradas disponíveis no OpenCode.
|
||||
|
||||
---
|
||||
|
||||
### bash
|
||||
|
||||
Execute comandos de shell no ambiente do seu projeto.
|
||||
|
||||
```json title="opencode.json" {4}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"bash": "allow"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Esta ferramenta permite que o LLM execute comandos de terminal como `npm install`, `git status` ou qualquer outro comando de shell.
|
||||
|
||||
---
|
||||
|
||||
### edit
|
||||
|
||||
Modifique arquivos existentes usando substituições de string exatas.
|
||||
|
||||
```json title="opencode.json" {4}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"edit": "allow"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Esta ferramenta realiza edições precisas em arquivos substituindo correspondências de texto exatas. É a principal forma como o LLM modifica o código.
|
||||
|
||||
---
|
||||
|
||||
### write
|
||||
|
||||
Crie novos arquivos ou sobrescreva os existentes.
|
||||
|
||||
```json title="opencode.json" {4}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"edit": "allow"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Use isso para permitir que o LLM crie novos arquivos. Ele sobrescreverá arquivos existentes se já existirem.
|
||||
|
||||
:::note
|
||||
A ferramenta `write` é controlada pela permissão `edit`, que cobre todas as modificações de arquivos (`edit`, `write`, `patch`, `multiedit`).
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
### read
|
||||
|
||||
Leia o conteúdo dos arquivos da sua base de código.
|
||||
|
||||
```json title="opencode.json" {4}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"read": "allow"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Esta ferramenta lê arquivos e retorna seus conteúdos. Suporta a leitura de intervalos de linhas específicos para arquivos grandes.
|
||||
|
||||
---
|
||||
|
||||
### grep
|
||||
|
||||
Pesquise o conteúdo dos arquivos usando expressões regulares.
|
||||
|
||||
```json title="opencode.json" {4}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"grep": "allow"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Busca rápida de conteúdo em sua base de código. Suporta a sintaxe completa de regex e filtragem de padrões de arquivos.
|
||||
|
||||
---
|
||||
|
||||
### glob
|
||||
|
||||
Encontre arquivos por correspondência de padrões.
|
||||
|
||||
```json title="opencode.json" {4}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"glob": "allow"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Pesquise arquivos usando padrões glob como `**/*.js` ou `src/**/*.ts`. Retorna caminhos de arquivos correspondentes ordenados por tempo de modificação.
|
||||
|
||||
---
|
||||
|
||||
### list
|
||||
|
||||
Liste arquivos e diretórios em um determinado caminho.
|
||||
|
||||
```json title="opencode.json" {4}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"list": "allow"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Esta ferramenta lista o conteúdo do diretório. Aceita padrões glob para filtrar resultados.
|
||||
|
||||
---
|
||||
|
||||
### lsp (experimental)
|
||||
|
||||
Interaja com seus servidores LSP configurados para obter recursos de inteligência de código, como definições, referências, informações de hover e hierarquia de chamadas.
|
||||
|
||||
:::note
|
||||
Esta ferramenta está disponível apenas quando `OPENCODE_EXPERIMENTAL_LSP_TOOL=true` (ou `OPENCODE_EXPERIMENTAL=true`).
|
||||
:::
|
||||
|
||||
```json title="opencode.json" {4}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"lsp": "allow"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
As operações suportadas incluem `goToDefinition`, `findReferences`, `hover`, `documentSymbol`, `workspaceSymbol`, `goToImplementation`, `prepareCallHierarchy`, `incomingCalls` e `outgoingCalls`.
|
||||
|
||||
Para configurar quais servidores LSP estão disponíveis para seu projeto, veja [Servidores LSP](/docs/lsp).
|
||||
|
||||
---
|
||||
|
||||
### patch
|
||||
|
||||
Aplique patches a arquivos.
|
||||
|
||||
```json title="opencode.json" {4}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"edit": "allow"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Esta ferramenta aplica arquivos de patch à sua base de código. Útil para aplicar diffs e patches de várias fontes.
|
||||
|
||||
:::note
|
||||
A ferramenta `patch` é controlada pela permissão `edit`, que cobre todas as modificações de arquivos (`edit`, `write`, `patch`, `multiedit`).
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
### skill
|
||||
|
||||
Carregue uma [skill](/docs/skills) (um arquivo `SKILL.md`) e retorne seu conteúdo na conversa.
|
||||
|
||||
```json title="opencode.json" {4}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"skill": "allow"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### todowrite
|
||||
|
||||
Gerencie listas de tarefas durante sessões de codificação.
|
||||
|
||||
```json title="opencode.json" {4}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"todowrite": "allow"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Cria e atualiza listas de tarefas para acompanhar o progresso durante operações complexas. O LLM usa isso para organizar tarefas de múltiplas etapas.
|
||||
|
||||
:::note
|
||||
Esta ferramenta está desativada para subagentes por padrão, mas você pode ativá-la manualmente. [Saiba mais](/docs/agents/#permissions)
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
### todoread
|
||||
|
||||
Leia listas de tarefas existentes.
|
||||
|
||||
```json title="opencode.json" {4}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"todoread": "allow"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Lê o estado atual da lista de tarefas. Usado pelo LLM para acompanhar quais tarefas estão pendentes ou concluídas.
|
||||
|
||||
:::note
|
||||
Esta ferramenta está desativada para subagentes por padrão, mas você pode ativá-la manualmente. [Saiba mais](/docs/agents/#permissions)
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
### webfetch
|
||||
|
||||
Busque conteúdo da web.
|
||||
|
||||
```json title="opencode.json" {4}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"webfetch": "allow"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Permite que o LLM busque e leia páginas da web. Útil para consultar documentação ou pesquisar recursos online.
|
||||
|
||||
---
|
||||
|
||||
### websearch
|
||||
|
||||
Pesquise na web por informações.
|
||||
|
||||
:::note
|
||||
Esta ferramenta está disponível apenas ao usar o provedor OpenCode ou quando a variável de ambiente `OPENCODE_ENABLE_EXA` está definida como qualquer valor verdadeiro (por exemplo, `true` ou `1`).
|
||||
|
||||
Para habilitar ao iniciar o OpenCode:
|
||||
|
||||
```bash
|
||||
OPENCODE_ENABLE_EXA=1 opencode
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
```json title="opencode.json" {4}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"websearch": "allow"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Realiza buscas na web usando Exa AI para encontrar informações relevantes online. Útil para pesquisar tópicos, encontrar eventos atuais ou reunir informações além do limite de dados de treinamento.
|
||||
|
||||
Nenhuma chave de API é necessária — a ferramenta se conecta diretamente ao serviço MCP hospedado da Exa AI sem autenticação.
|
||||
|
||||
:::tip
|
||||
Use `websearch` quando precisar encontrar informações (descoberta) e `webfetch` quando precisar recuperar conteúdo de uma URL específica (recuperação).
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
### question
|
||||
|
||||
Faça perguntas ao usuário durante a execução.
|
||||
|
||||
```json title="opencode.json" {4}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"question": "allow"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Esta ferramenta permite que o LLM faça perguntas ao usuário durante uma tarefa. É útil para:
|
||||
|
||||
- Coletar preferências ou requisitos do usuário
|
||||
- Esclarecer instruções ambíguas
|
||||
- Obter decisões sobre escolhas de implementação
|
||||
- Oferecer opções sobre qual direção seguir
|
||||
|
||||
Cada pergunta inclui um cabeçalho, o texto da pergunta e uma lista de opções. Os usuários podem selecionar entre as opções fornecidas ou digitar uma resposta personalizada. Quando há várias perguntas, os usuários podem navegar entre elas antes de enviar todas as respostas.
|
||||
|
||||
---
|
||||
|
||||
## Ferramentas personalizadas
|
||||
|
||||
Ferramentas personalizadas permitem que você defina suas próprias funções que o LLM pode chamar. Estas são definidas em seu arquivo de configuração e podem executar código arbitrário.
|
||||
|
||||
[Saiba mais](/docs/custom-tools) sobre como criar ferramentas personalizadas.
|
||||
|
||||
---
|
||||
|
||||
## Servidores MCP
|
||||
|
||||
Servidores MCP (Model Context Protocol) permitem que você integre ferramentas e serviços externos. Isso inclui acesso a bancos de dados, integrações de API e serviços de terceiros.
|
||||
|
||||
[Saiba mais](/docs/mcp-servers) sobre como configurar servidores MCP.
|
||||
|
||||
---
|
||||
|
||||
## Internos
|
||||
|
||||
Internamente, ferramentas como `grep`, `glob` e `list` usam [ripgrep](https://github.com/BurntSushi/ripgrep) por trás dos panos. Por padrão, o ripgrep respeita padrões `.gitignore`, o que significa que arquivos e diretórios listados em seu `.gitignore` serão excluídos de buscas e listagens.
|
||||
|
||||
---
|
||||
|
||||
### Padrões de ignorar
|
||||
|
||||
Para incluir arquivos que normalmente seriam ignorados, crie um arquivo `.ignore` na raiz do seu projeto. Este arquivo pode permitir explicitamente certos caminhos.
|
||||
|
||||
```text title=".ignore"
|
||||
!node_modules/
|
||||
!dist/
|
||||
!build/
|
||||
```
|
||||
|
||||
Por exemplo, este arquivo `.ignore` permite que o ripgrep busque dentro dos diretórios `node_modules/`, `dist/` e `build/`, mesmo que estejam listados em `.gitignore`.
|
||||
299
packages/web/src/content/docs/pt-br/troubleshooting.mdx
Normal file
299
packages/web/src/content/docs/pt-br/troubleshooting.mdx
Normal file
@@ -0,0 +1,299 @@
|
||||
---
|
||||
title: Solução de Problemas
|
||||
description: Problemas comuns e como resolvê-los.
|
||||
---
|
||||
|
||||
Para depurar problemas com o OpenCode, comece verificando os logs e os dados locais que ele armazena no disco.
|
||||
|
||||
---
|
||||
|
||||
## Logs
|
||||
|
||||
Os arquivos de log são gravados em:
|
||||
|
||||
- **macOS/Linux**: `~/.local/share/opencode/log/`
|
||||
- **Windows**: Pressione `WIN+R` e cole `%USERPROFILE%\.local\share\opencode\log`
|
||||
|
||||
Os arquivos de log são nomeados com timestamps (por exemplo, `2025-01-09T123456.log`) e os 10 arquivos de log mais recentes são mantidos.
|
||||
|
||||
Você pode definir o nível de log com a opção de linha de comando `--log-level` para obter informações de depuração mais detalhadas. Por exemplo, `opencode --log-level DEBUG`.
|
||||
|
||||
---
|
||||
|
||||
## Armazenamento
|
||||
|
||||
opencode armazena dados de sessão e outros dados do aplicativo no disco em:
|
||||
|
||||
- **macOS/Linux**: `~/.local/share/opencode/`
|
||||
- **Windows**: Pressione `WIN+R` e cole `%USERPROFILE%\.local\share\opencode`
|
||||
|
||||
Este diretório contém:
|
||||
|
||||
- `auth.json` - Dados de autenticação como chaves de API, tokens OAuth
|
||||
- `log/` - Logs do aplicativo
|
||||
- `project/` - Dados específicos do projeto, como dados de sessão e mensagens
|
||||
- Se o projeto estiver dentro de um repositório Git, ele é armazenado em `./<project-slug>/storage/`
|
||||
- Se não for um repositório Git, ele é armazenado em `./global/storage/`
|
||||
|
||||
---
|
||||
|
||||
## Aplicativo de Desktop
|
||||
|
||||
OpenCode Desktop executa um servidor OpenCode local (o sidecar `opencode-cli`) em segundo plano. A maioria dos problemas é causada por um plugin com mau funcionamento, um cache corrompido ou uma configuração de servidor incorreta.
|
||||
|
||||
### Verificações rápidas
|
||||
|
||||
- Saia completamente do aplicativo e reinicie-o.
|
||||
- Se o aplicativo mostrar uma tela de erro, clique em **Reiniciar** e copie os detalhes do erro.
|
||||
- Apenas macOS: menu `OpenCode` -> **Recarregar Webview** (ajuda se a interface estiver em branco/congelada).
|
||||
|
||||
---
|
||||
|
||||
### Desativar plugins
|
||||
|
||||
Se o aplicativo de desktop estiver travando ao iniciar, pendurado ou se comportando de maneira estranha, comece desativando os plugins.
|
||||
|
||||
#### Verifique a configuração global
|
||||
|
||||
Abra seu arquivo de configuração global e procure uma chave `plugin`.
|
||||
|
||||
- **macOS/Linux**: `~/.config/opencode/opencode.jsonc` (ou `~/.config/opencode/opencode.json`)
|
||||
- **macOS/Linux** (instalações mais antigas): `~/.local/share/opencode/opencode.jsonc`
|
||||
- **Windows**: Pressione `WIN+R` e cole `%USERPROFILE%\.config\opencode\opencode.jsonc`
|
||||
|
||||
Se você tiver plugins configurados, desative-os temporariamente removendo a chave ou definindo-a como um array vazio:
|
||||
|
||||
```jsonc
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"plugin": [],
|
||||
}
|
||||
```
|
||||
|
||||
#### Verifique os diretórios de plugins
|
||||
|
||||
OpenCode também pode carregar plugins locais do disco. Mova-os temporariamente para fora do caminho (ou renomeie a pasta) e reinicie o aplicativo de desktop:
|
||||
|
||||
- **Plugins globais**
|
||||
- **macOS/Linux**: `~/.config/opencode/plugins/`
|
||||
- **Windows**: Pressione `WIN+R` e cole `%USERPROFILE%\.config\opencode\plugins`
|
||||
- **Plugins de projeto** (apenas se você usar configuração por projeto)
|
||||
- `<seu-projeto>/.opencode/plugins/`
|
||||
|
||||
Se o aplicativo voltar a funcionar, reative os plugins um por um para descobrir qual está causando o problema.
|
||||
|
||||
---
|
||||
|
||||
### Limpar o cache
|
||||
|
||||
Se desativar plugins não ajudar (ou se a instalação de um plugin estiver travada), limpe o cache para que o OpenCode possa reconstruí-lo.
|
||||
|
||||
1. Saia completamente do OpenCode Desktop.
|
||||
2. Exclua o diretório de cache:
|
||||
|
||||
- **macOS**: Finder -> `Cmd+Shift+G` -> cole `~/.cache/opencode`
|
||||
- **Linux**: exclua `~/.cache/opencode` (ou execute `rm -rf ~/.cache/opencode`)
|
||||
- **Windows**: Pressione `WIN+R` e cole `%USERPROFILE%\.cache\opencode`
|
||||
|
||||
3. Reinicie o OpenCode Desktop.
|
||||
|
||||
---
|
||||
|
||||
### Corrigir problemas de conexão com o servidor
|
||||
|
||||
OpenCode Desktop pode iniciar seu próprio servidor local (padrão) ou conectar-se a uma URL de servidor que você configurou.
|
||||
|
||||
Se você ver um diálogo **"Conexão Falhou"** (ou o aplicativo nunca passa da tela de inicialização), verifique se há uma URL de servidor personalizada.
|
||||
|
||||
#### Limpar a URL do servidor padrão do desktop
|
||||
|
||||
Na tela inicial, clique no nome do servidor (com o ponto de status) para abrir o seletor de Servidor. Na seção **Servidor padrão**, clique em **Limpar**.
|
||||
|
||||
#### Remover `server.port` / `server.hostname` da sua configuração
|
||||
|
||||
Se seu `opencode.json(c)` contiver uma seção `server`, remova-a temporariamente e reinicie o aplicativo de desktop.
|
||||
|
||||
#### Verifique as variáveis de ambiente
|
||||
|
||||
Se você tiver `OPENCODE_PORT` definido em seu ambiente, o aplicativo de desktop tentará usar essa porta para o servidor local.
|
||||
|
||||
- Desfaça `OPENCODE_PORT` (ou escolha uma porta livre) e reinicie.
|
||||
|
||||
---
|
||||
|
||||
### Linux: Problemas com Wayland / X11
|
||||
|
||||
No Linux, algumas configurações do Wayland podem causar janelas em branco ou erros de compositor.
|
||||
|
||||
- Se você estiver no Wayland e o aplicativo estiver em branco/travando, tente iniciar com `OC_ALLOW_WAYLAND=1`.
|
||||
- Se isso piorar as coisas, remova e tente iniciar sob uma sessão X11.
|
||||
|
||||
---
|
||||
|
||||
### Windows: WebView2 runtime
|
||||
|
||||
No Windows, o OpenCode Desktop requer o **WebView2 Runtime** do Microsoft Edge. Se o aplicativo abrir em uma janela em branco ou não iniciar, instale/atualize o WebView2 e tente novamente.
|
||||
|
||||
---
|
||||
|
||||
### Windows: Problemas gerais de desempenho
|
||||
|
||||
Se você estiver enfrentando desempenho lento, problemas de acesso a arquivos ou problemas no terminal no Windows, tente usar [WSL (Windows Subsystem for Linux)](/docs/windows-wsl). O WSL fornece um ambiente Linux que funciona de forma mais integrada com os recursos do OpenCode.
|
||||
|
||||
---
|
||||
|
||||
### Notificações não aparecendo
|
||||
|
||||
O OpenCode Desktop só mostra notificações do sistema quando:
|
||||
|
||||
- as notificações estão habilitadas para o OpenCode nas configurações do seu sistema operacional, e
|
||||
- a janela do aplicativo não está focada.
|
||||
|
||||
---
|
||||
|
||||
### Redefinir o armazenamento do aplicativo de desktop (último recurso)
|
||||
|
||||
Se o aplicativo não iniciar e você não conseguir limpar as configurações pela interface, redefina o estado salvo do aplicativo de desktop.
|
||||
|
||||
1. Saia do OpenCode Desktop.
|
||||
2. Encontre e exclua estes arquivos (eles estão no diretório de dados do aplicativo OpenCode Desktop):
|
||||
|
||||
- `opencode.settings.dat` (URL do servidor padrão do desktop)
|
||||
- `opencode.global.dat` e `opencode.workspace.*.dat` (estado da interface como servidores/projetos recentes)
|
||||
|
||||
Para encontrar o diretório rapidamente:
|
||||
|
||||
- **macOS**: Finder -> `Cmd+Shift+G` -> `~/Library/Application Support` (depois pesquise pelos nomes dos arquivos acima)
|
||||
- **Linux**: pesquise em `~/.local/share` pelos nomes dos arquivos acima
|
||||
- **Windows**: Pressione `WIN+R` -> `%APPDATA%` (depois pesquise pelos nomes dos arquivos acima)
|
||||
|
||||
---
|
||||
|
||||
## Obtendo ajuda
|
||||
|
||||
Se você estiver enfrentando problemas com o OpenCode:
|
||||
|
||||
1. **Relatar problemas no GitHub**
|
||||
|
||||
A melhor maneira de relatar bugs ou solicitar recursos é através do nosso repositório no GitHub:
|
||||
|
||||
[**github.com/anomalyco/opencode/issues**](https://github.com/anomalyco/opencode/issues)
|
||||
|
||||
Antes de criar um novo problema, pesquise problemas existentes para ver se seu problema já foi relatado.
|
||||
|
||||
2. **Junte-se ao nosso Discord**
|
||||
|
||||
Para ajuda em tempo real e discussão da comunidade, junte-se ao nosso servidor Discord:
|
||||
|
||||
[**opencode.ai/discord**](https://opencode.ai/discord)
|
||||
|
||||
---
|
||||
|
||||
## Problemas comuns
|
||||
|
||||
Aqui estão alguns problemas comuns e como resolvê-los.
|
||||
|
||||
---
|
||||
|
||||
### OpenCode não inicia
|
||||
|
||||
1. Verifique os logs em busca de mensagens de erro
|
||||
2. Tente executar com `--print-logs` para ver a saída no terminal
|
||||
3. Certifique-se de que você tem a versão mais recente com `opencode upgrade`
|
||||
|
||||
---
|
||||
|
||||
### Problemas de autenticação
|
||||
|
||||
1. Tente reautenticar com o comando `/connect` na TUI
|
||||
2. Verifique se suas chaves de API são válidas
|
||||
3. Certifique-se de que sua rede permite conexões com a API do provedor
|
||||
|
||||
---
|
||||
|
||||
### Modelo não disponível
|
||||
|
||||
1. Verifique se você se autenticou com o provedor
|
||||
2. Verifique se o nome do modelo em sua configuração está correto
|
||||
3. Alguns modelos podem exigir acesso ou assinaturas específicas
|
||||
|
||||
Se você encontrar `ProviderModelNotFoundError`, é mais provável que você esteja referenciando um modelo incorretamente em algum lugar.
|
||||
Os modelos devem ser referenciados assim: `<providerId>/<modelId>`
|
||||
|
||||
Exemplos:
|
||||
|
||||
- `openai/gpt-4.1`
|
||||
- `openrouter/google/gemini-2.5-flash`
|
||||
- `opencode/kimi-k2`
|
||||
|
||||
Para descobrir quais modelos você tem acesso, execute `opencode models`
|
||||
|
||||
---
|
||||
|
||||
### ProviderInitError
|
||||
|
||||
Se você encontrar um ProviderInitError, provavelmente você tem uma configuração inválida ou corrompida.
|
||||
|
||||
Para resolver isso:
|
||||
|
||||
1. Primeiro, verifique se seu provedor está configurado corretamente seguindo o [guia de provedores](/docs/providers)
|
||||
2. Se o problema persistir, tente limpar sua configuração armazenada:
|
||||
|
||||
```bash
|
||||
rm -rf ~/.local/share/opencode
|
||||
```
|
||||
|
||||
No Windows, pressione `WIN+R` e exclua: `%USERPROFILE%\.local\share\opencode`
|
||||
|
||||
3. Reautentique-se com seu provedor usando o comando `/connect` na TUI.
|
||||
|
||||
---
|
||||
|
||||
### AI_APICallError e problemas com pacotes de provedores
|
||||
|
||||
Se você encontrar erros de chamada de API, isso pode ser devido a pacotes de provedores desatualizados. opencode instala dinamicamente pacotes de provedores (OpenAI, Anthropic, Google, etc.) conforme necessário e os armazena em cache localmente.
|
||||
|
||||
Para resolver problemas com pacotes de provedores:
|
||||
|
||||
1. Limpe o cache do pacote de provedores:
|
||||
|
||||
```bash
|
||||
rm -rf ~/.cache/opencode
|
||||
```
|
||||
|
||||
No Windows, pressione `WIN+R` e exclua: `%USERPROFILE%\.cache\opencode`
|
||||
|
||||
2. Reinicie o opencode para reinstalar os pacotes de provedores mais recentes
|
||||
|
||||
Isso forçará o opencode a baixar as versões mais recentes dos pacotes de provedores, o que muitas vezes resolve problemas de compatibilidade com parâmetros de modelo e alterações na API.
|
||||
|
||||
---
|
||||
|
||||
### Copiar/colar não funciona no Linux
|
||||
|
||||
Usuários do Linux precisam ter um dos seguintes utilitários de área de transferência instalados para que a funcionalidade de copiar/colar funcione:
|
||||
|
||||
**Para sistemas X11:**
|
||||
|
||||
```bash
|
||||
apt install -y xclip
|
||||
# ou
|
||||
apt install -y xsel
|
||||
```
|
||||
|
||||
**Para sistemas Wayland:**
|
||||
|
||||
```bash
|
||||
apt install -y wl-clipboard
|
||||
```
|
||||
|
||||
**Para ambientes sem cabeça:**
|
||||
|
||||
```bash
|
||||
apt install -y xvfb
|
||||
# e execute:
|
||||
Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 &
|
||||
export DISPLAY=:99.0
|
||||
```
|
||||
|
||||
opencode detectará se você está usando Wayland e preferirá `wl-clipboard`, caso contrário, tentará encontrar ferramentas de área de transferência na ordem: `xclip` e `xsel`.
|
||||
387
packages/web/src/content/docs/pt-br/tui.mdx
Normal file
387
packages/web/src/content/docs/pt-br/tui.mdx
Normal file
@@ -0,0 +1,387 @@
|
||||
---
|
||||
title: TUI
|
||||
description: Usando a interface de usuário de terminal OpenCode.
|
||||
---
|
||||
|
||||
import { Tabs, TabItem } from "@astrojs/starlight/components"
|
||||
|
||||
OpenCode fornece uma interface de terminal interativa ou TUI para trabalhar em seus projetos com um LLM.
|
||||
|
||||
Executar OpenCode inicia o TUI para o diretório atual.
|
||||
|
||||
```bash
|
||||
opencode
|
||||
```
|
||||
|
||||
Ou você pode iniciá-lo para um diretório de trabalho específico.
|
||||
|
||||
```bash
|
||||
opencode /caminho/para/projeto
|
||||
```
|
||||
|
||||
Uma vez que você esteja no TUI, você pode solicitar com uma mensagem.
|
||||
|
||||
```text
|
||||
Me dê um resumo rápido da base de código.
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Referências de arquivos
|
||||
|
||||
Você pode referenciar arquivos em suas mensagens usando `@`. Isso faz uma busca difusa de arquivos no diretório de trabalho atual.
|
||||
|
||||
:::tip
|
||||
Você também pode usar `@` para referenciar arquivos em suas mensagens.
|
||||
:::
|
||||
|
||||
```text "@packages/functions/src/api/index.ts"
|
||||
Como a autenticação é tratada em @packages/functions/src/api/index.ts?
|
||||
```
|
||||
|
||||
O conteúdo do arquivo é adicionado à conversa automaticamente.
|
||||
|
||||
---
|
||||
|
||||
## Comandos Bash
|
||||
|
||||
Comece uma mensagem com `!` para executar um comando de shell.
|
||||
|
||||
```bash frame="none"
|
||||
!ls -la
|
||||
```
|
||||
|
||||
A saída do comando é adicionada à conversa como um resultado de ferramenta.
|
||||
|
||||
---
|
||||
|
||||
## Comandos
|
||||
|
||||
Ao usar o TUI do OpenCode, você pode digitar `/` seguido pelo nome de um comando para executar ações rapidamente. Por exemplo:
|
||||
|
||||
```bash frame="none"
|
||||
/help
|
||||
```
|
||||
|
||||
A maioria dos comandos também possui atalhos usando `ctrl+x` como a tecla líder, onde `ctrl+x` é a tecla líder padrão. [Saiba mais](/docs/keybinds).
|
||||
|
||||
Aqui estão todos os comandos de barra disponíveis:
|
||||
|
||||
---
|
||||
|
||||
### connect
|
||||
|
||||
Adicione um provedor ao OpenCode. Permite que você selecione entre os provedores disponíveis e adicione suas chaves de API.
|
||||
|
||||
```bash frame="none"
|
||||
/connect
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### compact
|
||||
|
||||
Compacte a sessão atual. _Alias_: `/summarize`
|
||||
|
||||
```bash frame="none"
|
||||
/compact
|
||||
```
|
||||
|
||||
**Atalho:** `ctrl+x c`
|
||||
|
||||
---
|
||||
|
||||
### details
|
||||
|
||||
Alternar detalhes da execução da ferramenta.
|
||||
|
||||
```bash frame="none"
|
||||
/details
|
||||
```
|
||||
|
||||
**Atalho:** `ctrl+x d`
|
||||
|
||||
---
|
||||
|
||||
### editor
|
||||
|
||||
Abra um editor externo para compor mensagens. Usa o editor definido na sua variável de ambiente `EDITOR`. [Saiba mais](#editor-setup).
|
||||
|
||||
```bash frame="none"
|
||||
/editor
|
||||
```
|
||||
|
||||
**Atalho:** `ctrl+x e`
|
||||
|
||||
---
|
||||
|
||||
### exit
|
||||
|
||||
Saia do OpenCode. _Aliases_: `/quit`, `/q`
|
||||
|
||||
```bash frame="none"
|
||||
/exit
|
||||
```
|
||||
|
||||
**Atalho:** `ctrl+x q`
|
||||
|
||||
---
|
||||
|
||||
### export
|
||||
|
||||
Exporte a conversa atual para Markdown e abra no seu editor padrão. Usa o editor definido na sua variável de ambiente `EDITOR`. [Saiba mais](#editor-setup).
|
||||
|
||||
```bash frame="none"
|
||||
/export
|
||||
```
|
||||
|
||||
**Atalho:** `ctrl+x x`
|
||||
|
||||
---
|
||||
|
||||
### help
|
||||
|
||||
Mostre o diálogo de ajuda.
|
||||
|
||||
```bash frame="none"
|
||||
/help
|
||||
```
|
||||
|
||||
**Atalho:** `ctrl+x h`
|
||||
|
||||
---
|
||||
|
||||
### init
|
||||
|
||||
Crie ou atualize o arquivo `AGENTS.md`. [Saiba mais](/docs/rules).
|
||||
|
||||
```bash frame="none"
|
||||
/init
|
||||
```
|
||||
|
||||
**Atalho:** `ctrl+x i`
|
||||
|
||||
---
|
||||
|
||||
### models
|
||||
|
||||
Liste os modelos disponíveis.
|
||||
|
||||
```bash frame="none"
|
||||
/models
|
||||
```
|
||||
|
||||
**Atalho:** `ctrl+x m`
|
||||
|
||||
---
|
||||
|
||||
### new
|
||||
|
||||
Inicie uma nova sessão. _Alias_: `/clear`
|
||||
|
||||
```bash frame="none"
|
||||
/new
|
||||
```
|
||||
|
||||
**Atalho:** `ctrl+x n`
|
||||
|
||||
---
|
||||
|
||||
### redo
|
||||
|
||||
Refaça uma mensagem anteriormente desfeita. Disponível apenas após usar `/undo`.
|
||||
|
||||
:::tip
|
||||
Quaisquer alterações de arquivo também serão restauradas.
|
||||
:::
|
||||
|
||||
Internamente, isso usa Git para gerenciar as alterações de arquivo. Portanto, seu projeto **precisa ser um repositório Git**.
|
||||
|
||||
```bash frame="none"
|
||||
/redo
|
||||
```
|
||||
|
||||
**Atalho:** `ctrl+x r`
|
||||
|
||||
---
|
||||
|
||||
### sessions
|
||||
|
||||
Liste e alterne entre sessões. _Aliases_: `/resume`, `/continue`
|
||||
|
||||
```bash frame="none"
|
||||
/sessions
|
||||
```
|
||||
|
||||
**Atalho:** `ctrl+x l`
|
||||
|
||||
---
|
||||
|
||||
### share
|
||||
|
||||
Compartilhe a sessão atual. [Saiba mais](/docs/share).
|
||||
|
||||
```bash frame="none"
|
||||
/share
|
||||
```
|
||||
|
||||
**Atalho:** `ctrl+x s`
|
||||
|
||||
---
|
||||
|
||||
### themes
|
||||
|
||||
Liste os temas disponíveis.
|
||||
|
||||
```bash frame="none"
|
||||
/theme
|
||||
```
|
||||
|
||||
**Atalho:** `ctrl+x t`
|
||||
|
||||
---
|
||||
|
||||
### thinking
|
||||
|
||||
Alternar a visibilidade dos blocos de pensamento/razão na conversa. Quando ativado, você pode ver o processo de raciocínio do modelo para modelos que suportam pensamento estendido.
|
||||
|
||||
:::note
|
||||
Este comando apenas controla se os blocos de pensamento são **exibidos** - não ativa ou desativa as capacidades de raciocínio do modelo. Para alternar as capacidades reais de raciocínio, use `ctrl+t` para alternar entre variantes do modelo.
|
||||
:::
|
||||
|
||||
```bash frame="none"
|
||||
/thinking
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### undo
|
||||
|
||||
Desfaça a última mensagem na conversa. Remove a mensagem mais recente do usuário, todas as respostas subsequentes e quaisquer alterações de arquivo.
|
||||
|
||||
:::tip
|
||||
Quaisquer alterações de arquivo feitas também serão revertidas.
|
||||
:::
|
||||
|
||||
Internamente, isso usa Git para gerenciar as alterações de arquivo. Portanto, seu projeto **precisa ser um repositório Git**.
|
||||
|
||||
```bash frame="none"
|
||||
/undo
|
||||
```
|
||||
|
||||
**Atalho:** `ctrl+x u`
|
||||
|
||||
---
|
||||
|
||||
### unshare
|
||||
|
||||
Descompartilhe a sessão atual. [Saiba mais](/docs/share#un-sharing).
|
||||
|
||||
```bash frame="none"
|
||||
/unshare
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Configuração do Editor
|
||||
|
||||
Tanto os comandos `/editor` quanto `/export` usam o editor especificado na sua variável de ambiente `EDITOR`.
|
||||
|
||||
<Tabs>
|
||||
<TabItem label="Linux/macOS">
|
||||
```bash
|
||||
# Exemplo para nano ou vim
|
||||
export EDITOR=nano
|
||||
export EDITOR=vim
|
||||
|
||||
# Para editores GUI, VS Code, Cursor, VSCodium, Windsurf, Zed, etc.
|
||||
# inclua --wait
|
||||
export EDITOR="code --wait"
|
||||
```
|
||||
|
||||
Para torná-lo permanente, adicione isso ao seu perfil de shell;
|
||||
`~/.bashrc`, `~/.zshrc`, etc.
|
||||
|
||||
</TabItem>
|
||||
|
||||
<TabItem label="Windows (CMD)">
|
||||
```bash
|
||||
set EDITOR=notepad
|
||||
|
||||
# Para editores GUI, VS Code, Cursor, VSCodium, Windsurf, Zed, etc.
|
||||
# inclua --wait
|
||||
set EDITOR=code --wait
|
||||
```
|
||||
|
||||
Para torná-lo permanente, use **Propriedades do Sistema** > **Variáveis de Ambiente**.
|
||||
|
||||
</TabItem>
|
||||
|
||||
<TabItem label="Windows (PowerShell)">
|
||||
```powershell
|
||||
$env:EDITOR = "notepad"
|
||||
|
||||
# Para editores GUI, VS Code, Cursor, VSCodium, Windsurf, Zed, etc.
|
||||
# inclua --wait
|
||||
$env:EDITOR = "code --wait"
|
||||
```
|
||||
|
||||
Para torná-lo permanente, adicione isso ao seu perfil do PowerShell.
|
||||
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
As opções de editor populares incluem:
|
||||
|
||||
- `code` - Visual Studio Code
|
||||
- `cursor` - Cursor
|
||||
- `windsurf` - Windsurf
|
||||
- `nvim` - Editor Neovim
|
||||
- `vim` - Editor Vim
|
||||
- `nano` - Editor Nano
|
||||
- `notepad` - Bloco de Notas do Windows
|
||||
- `subl` - Sublime Text
|
||||
|
||||
:::note
|
||||
Alguns editores como o VS Code precisam ser iniciados com a flag `--wait`.
|
||||
:::
|
||||
|
||||
Alguns editores precisam de argumentos de linha de comando para rodar em modo bloqueante. A flag `--wait` faz com que o processo do editor bloqueie até ser fechado.
|
||||
|
||||
---
|
||||
|
||||
## Configurar
|
||||
|
||||
Você pode personalizar o comportamento do TUI através do seu arquivo de configuração do OpenCode.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"tui": {
|
||||
"scroll_speed": 3,
|
||||
"scroll_acceleration": {
|
||||
"enabled": true
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Opções
|
||||
|
||||
- `scroll_acceleration` - Ative a aceleração de rolagem no estilo macOS para uma rolagem suave e natural. Quando ativado, a velocidade de rolagem aumenta com gestos de rolagem rápidos e permanece precisa para movimentos mais lentos. **Esta configuração tem precedência sobre `scroll_speed` e a substitui quando ativada.**
|
||||
- `scroll_speed` - Controla quão rápido o TUI rola ao usar comandos de rolagem (mínimo: `1`). O padrão é `3`. **Nota: Isso é ignorado se `scroll_acceleration.enabled` estiver definido como `true`.**
|
||||
|
||||
---
|
||||
|
||||
## Personalização
|
||||
|
||||
Você pode personalizar vários aspectos da visualização do TUI usando a paleta de comandos (`ctrl+x h` ou `/help`). Essas configurações persistem entre reinicializações.
|
||||
|
||||
---
|
||||
|
||||
#### Exibição do nome de usuário
|
||||
|
||||
Alternar se seu nome de usuário aparece nas mensagens de chat. Acesse isso através de:
|
||||
|
||||
- Paleta de comandos: Pesquise por "username" ou "hide username"
|
||||
- A configuração persiste automaticamente e será lembrada entre as sessões do TUI
|
||||
142
packages/web/src/content/docs/pt-br/web.mdx
Normal file
142
packages/web/src/content/docs/pt-br/web.mdx
Normal file
@@ -0,0 +1,142 @@
|
||||
---
|
||||
title: Web
|
||||
description: Usando OpenCode no seu navegador.
|
||||
---
|
||||
|
||||
OpenCode pode ser executado como uma aplicação web no seu navegador, proporcionando a mesma poderosa experiência de codificação com IA sem precisar de um terminal.
|
||||
|
||||

|
||||
|
||||
## Começando
|
||||
|
||||
Inicie a interface web executando:
|
||||
|
||||
```bash
|
||||
opencode web
|
||||
```
|
||||
|
||||
Isso inicia um servidor local em `127.0.0.1` com uma porta aleatória disponível e abre automaticamente o OpenCode no seu navegador padrão.
|
||||
|
||||
:::caution
|
||||
Se `OPENCODE_SERVER_PASSWORD` não estiver definido, o servidor ficará sem segurança. Isso é aceitável para uso local, mas deve ser configurado para acesso à rede.
|
||||
:::
|
||||
|
||||
:::tip[Usuários do Windows]
|
||||
Para a melhor experiência, execute `opencode web` a partir do [WSL](/docs/windows-wsl) em vez do PowerShell. Isso garante acesso adequado ao sistema de arquivos e integração com o terminal.
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
## Configuração
|
||||
|
||||
Você pode configurar o servidor web usando flags de linha de comando ou no seu [arquivo de configuração](/docs/config).
|
||||
|
||||
### Porta
|
||||
|
||||
Por padrão, o OpenCode escolhe uma porta disponível. Você pode especificar uma porta:
|
||||
|
||||
```bash
|
||||
opencode web --port 4096
|
||||
```
|
||||
|
||||
### Nome do Host
|
||||
|
||||
Por padrão, o servidor se vincula a `127.0.0.1` (apenas localhost). Para tornar o OpenCode acessível na sua rede:
|
||||
|
||||
```bash
|
||||
opencode web --hostname 0.0.0.0
|
||||
```
|
||||
|
||||
Ao usar `0.0.0.0`, o OpenCode exibirá endereços locais e de rede:
|
||||
|
||||
```
|
||||
Acesso local: http://localhost:4096
|
||||
Acesso à rede: http://192.168.1.100:4096
|
||||
```
|
||||
|
||||
### Descoberta mDNS
|
||||
|
||||
Ative o mDNS para tornar seu servidor descobrível na rede local:
|
||||
|
||||
```bash
|
||||
opencode web --mdns
|
||||
```
|
||||
|
||||
Isso define automaticamente o nome do host como `0.0.0.0` e anuncia o servidor como `opencode.local`.
|
||||
|
||||
Você pode personalizar o nome de domínio mDNS para executar várias instâncias na mesma rede:
|
||||
|
||||
```bash
|
||||
opencode web --mdns --mdns-domain myproject.local
|
||||
```
|
||||
|
||||
### CORS
|
||||
|
||||
Para permitir domínios adicionais para CORS (útil para frontends personalizados):
|
||||
|
||||
```bash
|
||||
opencode web --cors https://example.com
|
||||
```
|
||||
|
||||
### Autenticação
|
||||
|
||||
Para proteger o acesso, defina uma senha usando a variável de ambiente `OPENCODE_SERVER_PASSWORD`:
|
||||
|
||||
```bash
|
||||
OPENCODE_SERVER_PASSWORD=secret opencode web
|
||||
```
|
||||
|
||||
O nome de usuário padrão é `opencode`, mas pode ser alterado com `OPENCODE_SERVER_USERNAME`.
|
||||
|
||||
---
|
||||
|
||||
## Usando a Interface Web
|
||||
|
||||
Uma vez iniciada, a interface web fornece acesso às suas sessões do OpenCode.
|
||||
|
||||
### Sessões
|
||||
|
||||
Visualize e gerencie suas sessões a partir da página inicial. Você pode ver sessões ativas e iniciar novas.
|
||||
|
||||

|
||||
|
||||
### Status do Servidor
|
||||
|
||||
Clique em "Ver Servidores" para visualizar os servidores conectados e seu status.
|
||||
|
||||

|
||||
|
||||
---
|
||||
|
||||
## Anexando um Terminal
|
||||
|
||||
Você pode anexar um terminal TUI a um servidor web em execução:
|
||||
|
||||
```bash
|
||||
# Inicie o servidor web
|
||||
opencode web --port 4096
|
||||
|
||||
# Em outro terminal, anexe o TUI
|
||||
opencode attach http://localhost:4096
|
||||
```
|
||||
|
||||
Isso permite que você use tanto a interface web quanto o terminal simultaneamente, compartilhando as mesmas sessões e estado.
|
||||
|
||||
---
|
||||
|
||||
## Arquivo de Configuração
|
||||
|
||||
Você também pode configurar as configurações do servidor no seu arquivo de configuração `opencode.json`:
|
||||
|
||||
```json
|
||||
{
|
||||
"server": {
|
||||
"port": 4096,
|
||||
"hostname": "0.0.0.0",
|
||||
"mdns": true,
|
||||
"cors": ["https://example.com"]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
As flags de linha de comando têm precedência sobre as configurações do arquivo de configuração.
|
||||
113
packages/web/src/content/docs/pt-br/windows-wsl.mdx
Normal file
113
packages/web/src/content/docs/pt-br/windows-wsl.mdx
Normal file
@@ -0,0 +1,113 @@
|
||||
---
|
||||
title: Windows (WSL)
|
||||
description: Execute o OpenCode no Windows com WSL para melhor experiencia.
|
||||
---
|
||||
|
||||
import { Steps } from "@astrojs/starlight/components"
|
||||
|
||||
Embora o OpenCode possa rodar direto no Windows, recomendamos usar [Windows Subsystem for Linux (WSL)](https://learn.microsoft.com/en-us/windows/wsl/install) para a melhor experiencia. O WSL oferece um ambiente Linux que funciona de forma integrada com os recursos do OpenCode.
|
||||
|
||||
:::tip[Por que WSL?]
|
||||
O WSL oferece melhor desempenho de sistema de arquivos, suporte completo a terminal e compatibilidade com as ferramentas de desenvolvimento das quais o OpenCode depende.
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
## Configuracao
|
||||
|
||||
<Steps>
|
||||
|
||||
1. **Instale o WSL**
|
||||
|
||||
Se ainda nao instalou, [instale o WSL](https://learn.microsoft.com/en-us/windows/wsl/install) usando o guia oficial da Microsoft.
|
||||
|
||||
2. **Instale o OpenCode no WSL**
|
||||
|
||||
Depois de configurar o WSL, abra o terminal do WSL e instale o OpenCode usando um dos [metodos de instalacao](/docs/).
|
||||
|
||||
```bash
|
||||
curl -fsSL https://opencode.ai/install | bash
|
||||
```
|
||||
|
||||
3. **Use o OpenCode pelo WSL**
|
||||
|
||||
Va para o diretorio do seu projeto (acesse arquivos do Windows via `/mnt/c/`, `/mnt/d/` etc.) e execute o OpenCode.
|
||||
|
||||
```bash
|
||||
cd /mnt/c/Users/YourName/project
|
||||
opencode
|
||||
```
|
||||
|
||||
</Steps>
|
||||
|
||||
---
|
||||
|
||||
## App desktop + servidor WSL
|
||||
|
||||
Se voce prefere usar o app desktop do OpenCode, mas quer rodar o servidor no WSL:
|
||||
|
||||
1. **Inicie o servidor no WSL** com `--hostname 0.0.0.0` para permitir conexoes externas:
|
||||
|
||||
```bash
|
||||
opencode serve --hostname 0.0.0.0 --port 4096
|
||||
```
|
||||
|
||||
2. **Conecte o app desktop** em `http://localhost:4096`
|
||||
|
||||
:::note
|
||||
Se `localhost` nao funcionar no seu ambiente, conecte usando o IP do WSL (no WSL: `hostname -I`) e use `http://<wsl-ip>:4096`.
|
||||
:::
|
||||
|
||||
:::caution
|
||||
Ao usar `--hostname 0.0.0.0`, defina `OPENCODE_SERVER_PASSWORD` para proteger o servidor.
|
||||
|
||||
```bash
|
||||
OPENCODE_SERVER_PASSWORD=your-password opencode serve --hostname 0.0.0.0
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
## Cliente web + WSL
|
||||
|
||||
Para a melhor experiencia web no Windows:
|
||||
|
||||
1. **Execute `opencode web` no terminal WSL** em vez do PowerShell:
|
||||
|
||||
```bash
|
||||
opencode web --hostname 0.0.0.0
|
||||
```
|
||||
|
||||
2. **Acesse pelo navegador do Windows** em `http://localhost:<port>` (o OpenCode mostra a URL)
|
||||
|
||||
Executar `opencode web` a partir do WSL garante acesso correto ao sistema de arquivos e integracao com o terminal, continuando acessivel no navegador do Windows.
|
||||
|
||||
---
|
||||
|
||||
## Acessar arquivos do Windows
|
||||
|
||||
O WSL pode acessar todos os arquivos do Windows pelo diretorio `/mnt/`:
|
||||
|
||||
- Unidade `C:` → `/mnt/c/`
|
||||
- Unidade `D:` → `/mnt/d/`
|
||||
- E assim por diante...
|
||||
|
||||
Exemplo:
|
||||
|
||||
```bash
|
||||
cd /mnt/c/Users/YourName/Documents/project
|
||||
opencode
|
||||
```
|
||||
|
||||
:::tip
|
||||
Para uma experiencia mais fluida, considere clonar/copiar seu repositorio para o sistema de arquivos do WSL (por exemplo em `~/code/`) e executar o OpenCode por la.
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
## Dicas
|
||||
|
||||
- Mantenha o OpenCode rodando no WSL para projetos armazenados em unidades do Windows - o acesso aos arquivos fica fluido
|
||||
- Use a [extensao WSL do VS Code](https://code.visualstudio.com/docs/remote/wsl) junto com o OpenCode para um fluxo de desenvolvimento integrado
|
||||
- Sua configuracao e suas sessoes do OpenCode ficam armazenadas no ambiente WSL em `~/.local/share/opencode/`
|
||||
236
packages/web/src/content/docs/pt-br/zen.mdx
Normal file
236
packages/web/src/content/docs/pt-br/zen.mdx
Normal file
@@ -0,0 +1,236 @@
|
||||
---
|
||||
title: Zen
|
||||
description: Lista selecionada de modelos fornecidos pela OpenCode.
|
||||
---
|
||||
|
||||
import config from "../../../../config.mjs"
|
||||
export const console = config.console
|
||||
export const email = `mailto:${config.email}`
|
||||
|
||||
OpenCode Zen é uma lista de modelos testados e verificados fornecidos pela equipe da OpenCode.
|
||||
|
||||
:::note
|
||||
OpenCode Zen está atualmente em beta.
|
||||
:::
|
||||
|
||||
Zen funciona como qualquer outro provedor na OpenCode. Você faz login no OpenCode Zen e obtém sua chave de API. É **completamente opcional** e você não precisa usá-la para utilizar a OpenCode.
|
||||
|
||||
---
|
||||
|
||||
## Contexto
|
||||
|
||||
Existem um grande número de modelos disponíveis, mas apenas alguns desses modelos funcionam bem como agentes de codificação. Além disso, a maioria dos provedores é configurada de maneira muito diferente; portanto, você obtém desempenhos e qualidades muito diferentes.
|
||||
|
||||
:::tip
|
||||
Testamos um grupo selecionado de modelos e provedores que funcionam bem com a OpenCode.
|
||||
:::
|
||||
|
||||
Portanto, se você estiver usando um modelo através de algo como OpenRouter, você nunca pode ter certeza se está obtendo a melhor versão do modelo que deseja.
|
||||
|
||||
Para resolver isso, fizemos algumas coisas:
|
||||
|
||||
1. Testamos um grupo selecionado de modelos e conversamos com suas equipes sobre como executá-los da melhor forma.
|
||||
2. Trabalhamos com alguns provedores para garantir que esses modelos estivessem sendo servidos corretamente.
|
||||
3. Finalmente, realizamos benchmarks da combinação modelo/provedor e elaboramos uma lista que nos sentimos bem em recomendar.
|
||||
|
||||
OpenCode Zen é um gateway de IA que lhe dá acesso a esses modelos.
|
||||
|
||||
---
|
||||
|
||||
## Como funciona
|
||||
|
||||
OpenCode Zen funciona como qualquer outro provedor na OpenCode.
|
||||
|
||||
1. Você faz login no **<a href={console}>OpenCode Zen</a>**, adiciona seus dados de cobrança e copia sua chave de API.
|
||||
2. Você executa o comando `/connect` na TUI, seleciona OpenCode Zen e cola sua chave de API.
|
||||
3. Execute `/models` na TUI para ver a lista de modelos que recomendamos.
|
||||
|
||||
Você é cobrado por solicitação e pode adicionar créditos à sua conta.
|
||||
|
||||
---
|
||||
|
||||
## Endpoints
|
||||
|
||||
Você também pode acessar nossos modelos através dos seguintes endpoints da API.
|
||||
|
||||
| Modelo | ID do Modelo | Endpoint | Pacote AI SDK |
|
||||
| ------------------ | ------------------ | -------------------------------------------------- | --------------------------- |
|
||||
| GPT 5.2 | gpt-5.2 | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||
| GPT 5.2 Codex | gpt-5.2-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||
| GPT 5.1 | gpt-5.1 | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||
| GPT 5.1 Codex | gpt-5.1-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||
| GPT 5.1 Codex Max | gpt-5.1-codex-max | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||
| GPT 5.1 Codex Mini | gpt-5.1-codex-mini | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||
| GPT 5 | gpt-5 | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||
| GPT 5 Codex | gpt-5-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||
| GPT 5 Nano | gpt-5-nano | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||
| Claude Sonnet 4.5 | claude-sonnet-4-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` |
|
||||
| Claude Sonnet 4 | claude-sonnet-4 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` |
|
||||
| Claude Haiku 4.5 | claude-haiku-4-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` |
|
||||
| Claude Haiku 3.5 | claude-3-5-haiku | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` |
|
||||
| Claude Opus 4.6 | claude-opus-4-6 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` |
|
||||
| Claude Opus 4.5 | claude-opus-4-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` |
|
||||
| Claude Opus 4.1 | claude-opus-4-1 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` |
|
||||
| Gemini 3 Pro | gemini-3-pro | `https://opencode.ai/zen/v1/models/gemini-3-pro` | `@ai-sdk/google` |
|
||||
| Gemini 3 Flash | gemini-3-flash | `https://opencode.ai/zen/v1/models/gemini-3-flash` | `@ai-sdk/google` |
|
||||
| MiniMax M2.1 | minimax-m2.1 | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` |
|
||||
| MiniMax M2.1 Free | minimax-m2.1-free | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` |
|
||||
| GLM 4.7 | glm-4.7 | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` |
|
||||
| GLM 4.7 Free | glm-4.7-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` |
|
||||
| GLM 4.6 | glm-4.6 | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` |
|
||||
| Kimi K2.5 | kimi-k2.5 | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` |
|
||||
| Kimi K2.5 Free | kimi-k2.5-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` |
|
||||
| Kimi K2 Thinking | kimi-k2-thinking | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` |
|
||||
| Kimi K2 | kimi-k2 | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` |
|
||||
| Qwen3 Coder 480B | qwen3-coder | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` |
|
||||
| Big Pickle | big-pickle | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` |
|
||||
|
||||
O [id do modelo](/docs/config/#models) na sua configuração da OpenCode usa o formato `opencode/<model-id>`. Por exemplo, para GPT 5.2 Codex, você usaria `opencode/gpt-5.2-codex` na sua configuração.
|
||||
|
||||
---
|
||||
|
||||
### Modelos
|
||||
|
||||
Você pode buscar a lista completa de modelos disponíveis e seus metadados em:
|
||||
|
||||
```
|
||||
https://opencode.ai/zen/v1/models
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Preços
|
||||
|
||||
Nós suportamos um modelo de pagamento conforme o uso. Abaixo estão os preços **por 1M de tokens**.
|
||||
|
||||
| Modelo | Entrada | Saída | Leitura em Cache | Escrita em Cache |
|
||||
| --------------------------------- | ------ | ------ | ---------------- | ---------------- |
|
||||
| Big Pickle | Grátis | Grátis | Grátis | - |
|
||||
| MiniMax M2.1 Free | Grátis | Grátis | Grátis | - |
|
||||
| MiniMax M2.1 | $0.30 | $1.20 | $0.10 | - |
|
||||
| GLM 4.7 Free | Grátis | Grátis | Grátis | - |
|
||||
| GLM 4.7 | $0.60 | $2.20 | $0.10 | - |
|
||||
| GLM 4.6 | $0.60 | $2.20 | $0.10 | - |
|
||||
| Kimi K2.5 Free | Grátis | Grátis | Grátis | - |
|
||||
| Kimi K2.5 | $0.60 | $3.00 | $0.08 | - |
|
||||
| Kimi K2 Thinking | $0.40 | $2.50 | - | - |
|
||||
| Kimi K2 | $0.40 | $2.50 | - | - |
|
||||
| Qwen3 Coder 480B | $0.45 | $1.50 | - | - |
|
||||
| Claude Sonnet 4.5 (≤ 200K tokens) | $3.00 | $15.00 | $0.30 | $3.75 |
|
||||
| Claude Sonnet 4.5 (> 200K tokens) | $6.00 | $22.50 | $0.60 | $7.50 |
|
||||
| Claude Sonnet 4 (≤ 200K tokens) | $3.00 | $15.00 | $0.30 | $3.75 |
|
||||
| Claude Sonnet 4 (> 200K tokens) | $6.00 | $22.50 | $0.60 | $7.50 |
|
||||
| Claude Haiku 4.5 | $1.00 | $5.00 | $0.10 | $1.25 |
|
||||
| Claude Haiku 3.5 | $0.80 | $4.00 | $0.08 | $1.00 |
|
||||
| Claude Opus 4.6 (≤ 200K tokens) | $5.00 | $25.00 | $0.50 | $6.25 |
|
||||
| Claude Opus 4.6 (> 200K tokens) | $10.00 | $37.50 | $1.00 | $12.50 |
|
||||
| Claude Opus 4.5 | $5.00 | $25.00 | $0.50 | $6.25 |
|
||||
| Claude Opus 4.1 | $15.00 | $75.00 | $1.50 | $18.75 |
|
||||
| Gemini 3 Pro (≤ 200K tokens) | $2.00 | $12.00 | $0.20 | - |
|
||||
| Gemini 3 Pro (> 200K tokens) | $4.00 | $18.00 | $0.40 | - |
|
||||
| Gemini 3 Flash | $0.50 | $3.00 | $0.05 | - |
|
||||
| GPT 5.2 | $1.75 | $14.00 | $0.175 | - |
|
||||
| GPT 5.2 Codex | $1.75 | $14.00 | $0.175 | - |
|
||||
| GPT 5.1 | $1.07 | $8.50 | $0.107 | - |
|
||||
| GPT 5.1 Codex | $1.07 | $8.50 | $0.107 | - |
|
||||
| GPT 5.1 Codex Max | $1.25 | $10.00 | $0.125 | - |
|
||||
| GPT 5.1 Codex Mini | $0.25 | $2.00 | $0.025 | - |
|
||||
| GPT 5 | $1.07 | $8.50 | $0.107 | - |
|
||||
| GPT 5 Codex | $1.07 | $8.50 | $0.107 | - |
|
||||
| GPT 5 Nano | Grátis | Grátis | Grátis | - |
|
||||
|
||||
Você pode notar _Claude Haiku 3.5_ em seu histórico de uso. Este é um [modelo de baixo custo](/docs/config/#models) que é usado para gerar os títulos de suas sessões.
|
||||
|
||||
:::note
|
||||
As taxas de cartão de crédito são repassadas ao custo (4,4% + $0,30 por transação); não cobramos nada além disso.
|
||||
:::
|
||||
|
||||
Os modelos gratuitos:
|
||||
|
||||
- GLM 4.7 Free está disponível na OpenCode por tempo limitado. A equipe está usando esse tempo para coletar feedback e melhorar o modelo.
|
||||
- Kimi K2.5 Free está disponível na OpenCode por tempo limitado. A equipe está usando esse tempo para coletar feedback e melhorar o modelo.
|
||||
- MiniMax M2.1 Free está disponível na OpenCode por tempo limitado. A equipe está usando esse tempo para coletar feedback e melhorar o modelo.
|
||||
- Big Pickle é um modelo oculto que está gratuito na OpenCode por tempo limitado. A equipe está usando esse tempo para coletar feedback e melhorar o modelo.
|
||||
|
||||
<a href={email}>Entre em contato conosco</a> se você tiver alguma dúvida.
|
||||
|
||||
---
|
||||
|
||||
### Recarga automática
|
||||
|
||||
Se seu saldo cair abaixo de $5, Zen recarregará automaticamente $20.
|
||||
|
||||
Você pode alterar o valor da recarga automática. Você também pode desativar a recarga automática completamente.
|
||||
|
||||
---
|
||||
|
||||
### Limites mensais
|
||||
|
||||
Você também pode definir um limite de uso mensal para todo o espaço de trabalho e para cada membro de sua equipe.
|
||||
|
||||
Por exemplo, digamos que você defina um limite de uso mensal de $20, Zen não usará mais de $20 em um mês. Mas se você tiver a recarga automática ativada, Zen pode acabar cobrando mais de $20 se seu saldo cair abaixo de $5.
|
||||
|
||||
---
|
||||
|
||||
## Privacidade
|
||||
|
||||
Todos os nossos modelos estão hospedados nos EUA. Nossos provedores seguem uma política de zero retenção e não usam seus dados para treinamento de modelos, com as seguintes exceções:
|
||||
|
||||
- Big Pickle: Durante seu período gratuito, os dados coletados podem ser usados para melhorar o modelo.
|
||||
- GLM 4.7 Free: Durante seu período gratuito, os dados coletados podem ser usados para melhorar o modelo.
|
||||
- Kimi K2.5 Free: Durante seu período gratuito, os dados coletados podem ser usados para melhorar o modelo.
|
||||
- MiniMax M2.1 Free: Durante seu período gratuito, os dados coletados podem ser usados para melhorar o modelo.
|
||||
- APIs da OpenAI: As solicitações são retidas por 30 dias de acordo com as [Políticas de Dados da OpenAI](https://platform.openai.com/docs/guides/your-data).
|
||||
- APIs da Anthropic: As solicitações são retidas por 30 dias de acordo com as [Políticas de Dados da Anthropic](https://docs.anthropic.com/en/docs/claude-code/data-usage).
|
||||
|
||||
---
|
||||
|
||||
## Para Equipes
|
||||
|
||||
Zen também funciona muito bem para equipes. Você pode convidar colegas de equipe, atribuir funções, selecionar os modelos que sua equipe usa e muito mais.
|
||||
|
||||
:::note
|
||||
Os espaços de trabalho estão atualmente gratuitos para equipes como parte do beta.
|
||||
:::
|
||||
|
||||
Gerenciar seu espaço de trabalho é atualmente gratuito para equipes como parte do beta. Em breve, compartilharemos mais detalhes sobre os preços.
|
||||
|
||||
---
|
||||
|
||||
### Funções
|
||||
|
||||
Você pode convidar colegas de equipe para seu espaço de trabalho e atribuir funções:
|
||||
|
||||
- **Admin**: Gerenciar modelos, membros, chaves de API e cobrança
|
||||
- **Membro**: Gerenciar apenas suas próprias chaves de API
|
||||
|
||||
Os administradores também podem definir limites de gastos mensais para cada membro para manter os custos sob controle.
|
||||
|
||||
---
|
||||
|
||||
### Acesso ao modelo
|
||||
|
||||
Os administradores podem habilitar ou desabilitar modelos específicos para o espaço de trabalho. Solicitações feitas a um modelo desabilitado retornarão um erro.
|
||||
|
||||
Isso é útil para casos em que você deseja desabilitar o uso de um modelo que coleta dados.
|
||||
|
||||
---
|
||||
|
||||
### Traga sua própria chave
|
||||
|
||||
Você pode usar suas próprias chaves de API da OpenAI ou Anthropic enquanto ainda acessa outros modelos no Zen.
|
||||
|
||||
Quando você usa suas próprias chaves, os tokens são cobrados diretamente pelo provedor, não pelo Zen.
|
||||
|
||||
Por exemplo, sua organização pode já ter uma chave para OpenAI ou Anthropic e você deseja usar essa em vez da que o Zen fornece.
|
||||
|
||||
---
|
||||
|
||||
## Objetivos
|
||||
|
||||
Criamos o OpenCode Zen para:
|
||||
|
||||
1. **Benchmark** os melhores modelos/provedores para agentes de codificação.
|
||||
2. Ter acesso às opções de **mais alta qualidade** e não degradar o desempenho ou redirecionar para provedores mais baratos.
|
||||
3. Repassar quaisquer **reduções de preço** vendendo ao custo; assim, a única margem é para cobrir nossas taxas de processamento.
|
||||
4. Não ter **vinculação** permitindo que você o use com qualquer outro agente de codificação. E sempre permitir que você use qualquer outro provedor com a OpenCode também.
|
||||
Reference in New Issue
Block a user