wip(docs): i18n (#12681)
This commit is contained in:
67
packages/web/src/content/docs/it/1-0.mdx
Normal file
67
packages/web/src/content/docs/it/1-0.mdx
Normal file
@@ -0,0 +1,67 @@
|
||||
---
|
||||
title: Migrazione a 1.0
|
||||
description: Novita in OpenCode 1.0.
|
||||
---
|
||||
|
||||
OpenCode 1.0 e una riscrittura completa della TUI.
|
||||
|
||||
Siamo passati dalla TUI basata su go+bubbletea, che aveva problemi di prestazioni e di capacita, a un framework interno (OpenTUI) scritto in zig+solidjs.
|
||||
|
||||
La nuova TUI funziona come la precedente, dato che si connette allo stesso server opencode.
|
||||
|
||||
---
|
||||
|
||||
## Upgrading
|
||||
|
||||
Non dovresti essere aggiornato automaticamente a 1.0 se stai usando una versione precedente.
|
||||
Detto questo, alcune versioni piu vecchie di OpenCode installano sempre l'ultima.
|
||||
|
||||
Per aggiornare manualmente, esegui:
|
||||
|
||||
```bash
|
||||
$ opencode upgrade 1.0.0
|
||||
```
|
||||
|
||||
Per tornare a 0.x, esegui:
|
||||
|
||||
```bash
|
||||
$ opencode upgrade 0.15.31
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Cambiamenti UX
|
||||
|
||||
La cronologia della sessione e piu compatta: mostra i dettagli completi solo per gli strumenti edit e bash.
|
||||
|
||||
Abbiamo aggiunto una command bar attraverso cui passa quasi tutto. Premi ctrl+p in qualunque contesto per aprirla e vedere tutto cio che puoi fare.
|
||||
|
||||
Abbiamo aggiunto una sidebar di sessione (attivabile/disattivabile) con informazioni utili.
|
||||
|
||||
Abbiamo rimosso alcune funzionalita che non eravamo sicuri venissero davvero usate. Se manca qualcosa di importante, apri una issue e la riaggiungeremo rapidamente.
|
||||
|
||||
---
|
||||
|
||||
## Modifiche incompatibili
|
||||
|
||||
### Keybind rinominati
|
||||
|
||||
- messages_revert -> messages_undo
|
||||
- switch_agent -> agent_cycle
|
||||
- switch_agent_reverse -> agent_cycle_reverse
|
||||
- switch_mode -> agent_cycle
|
||||
- switch_mode_reverse -> agent_cycle_reverse
|
||||
|
||||
### Keybind rimossi
|
||||
|
||||
- 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/it/acp.mdx
Normal file
156
packages/web/src/content/docs/it/acp.mdx
Normal file
@@ -0,0 +1,156 @@
|
||||
---
|
||||
title: Supporto ACP
|
||||
description: Usa OpenCode in qualunque editor compatibile con ACP.
|
||||
---
|
||||
|
||||
OpenCode supporta [Agent Client Protocol](https://agentclientprotocol.com) (ACP), permettendoti di usarlo direttamente in editor e IDE compatibili.
|
||||
|
||||
:::tip
|
||||
Per una lista di editor e tool che supportano ACP, vedi l'[ACP progress report](https://zed.dev/blog/acp-progress-report#available-now).
|
||||
:::
|
||||
|
||||
ACP e un protocollo aperto che standardizza la comunicazione tra editor di codice e agenti di coding AI.
|
||||
|
||||
---
|
||||
|
||||
## Configure
|
||||
|
||||
Per usare OpenCode via ACP, configura l'editor in modo che esegua il comando `opencode acp`.
|
||||
|
||||
Il comando avvia OpenCode come sottoprocesso compatibile con ACP che comunica con l'editor via JSON-RPC su stdio.
|
||||
|
||||
Qui sotto trovi esempi per editor popolari che supportano ACP.
|
||||
|
||||
---
|
||||
|
||||
### Zed
|
||||
|
||||
Aggiungi alla configurazione di [Zed](https://zed.dev) (`~/.config/zed/settings.json`):
|
||||
|
||||
```json title="~/.config/zed/settings.json"
|
||||
{
|
||||
"agent_servers": {
|
||||
"OpenCode": {
|
||||
"command": "opencode",
|
||||
"args": ["acp"]
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Per aprirlo, usa l'azione `agent: new thread` nella **Command Palette**.
|
||||
|
||||
Puoi anche assegnare una scorciatoia da tastiera modificando `keymap.json`:
|
||||
|
||||
```json title="keymap.json"
|
||||
[
|
||||
{
|
||||
"bindings": {
|
||||
"cmd-alt-o": [
|
||||
"agent::NewExternalAgentThread",
|
||||
{
|
||||
"agent": {
|
||||
"custom": {
|
||||
"name": "OpenCode",
|
||||
"command": {
|
||||
"command": "opencode",
|
||||
"args": ["acp"]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### JetBrains IDEs
|
||||
|
||||
Aggiungi al tuo acp.json per [JetBrains IDE](https://www.jetbrains.com/) secondo la [documentazione](https://www.jetbrains.com/help/ai-assistant/acp.html):
|
||||
|
||||
```json title="acp.json"
|
||||
{
|
||||
"agent_servers": {
|
||||
"OpenCode": {
|
||||
"command": "/absolute/path/bin/opencode",
|
||||
"args": ["acp"]
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Per aprirlo, seleziona il nuovo agente 'OpenCode' nel selettore agenti di AI Chat.
|
||||
|
||||
---
|
||||
|
||||
### Avante.nvim
|
||||
|
||||
Aggiungi alla configurazione di [Avante.nvim](https://github.com/yetone/avante.nvim):
|
||||
|
||||
```lua
|
||||
{
|
||||
acp_providers = {
|
||||
["opencode"] = {
|
||||
command = "opencode",
|
||||
args = { "acp" }
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Se devi passare variabili d'ambiente:
|
||||
|
||||
```lua {6-8}
|
||||
{
|
||||
acp_providers = {
|
||||
["opencode"] = {
|
||||
command = "opencode",
|
||||
args = { "acp" },
|
||||
env = {
|
||||
OPENCODE_API_KEY = os.getenv("OPENCODE_API_KEY")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### CodeCompanion.nvim
|
||||
|
||||
Per usare OpenCode come agente ACP in [CodeCompanion.nvim](https://github.com/olimorris/codecompanion.nvim), aggiungi quanto segue alla config di Neovim:
|
||||
|
||||
```lua
|
||||
require("codecompanion").setup({
|
||||
interactions = {
|
||||
chat = {
|
||||
adapter = {
|
||||
name = "opencode",
|
||||
model = "claude-sonnet-4",
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
```
|
||||
|
||||
Questa config imposta CodeCompanion per usare OpenCode come agente ACP per la chat.
|
||||
|
||||
Se devi passare variabili d'ambiente (come `OPENCODE_API_KEY`), vedi [Configuring Adapters: Environment Variables](https://codecompanion.olimorris.dev/getting-started#setting-an-api-key) nella documentazione di CodeCompanion.nvim.
|
||||
|
||||
## Support
|
||||
|
||||
OpenCode funziona via ACP come nel terminale. Tutte le funzionalita sono supportate:
|
||||
|
||||
:::note
|
||||
Alcuni comandi slash integrati come `/undo` e `/redo` non sono attualmente supportati.
|
||||
:::
|
||||
|
||||
- Built-in tools (file operations, terminal commands, etc.)
|
||||
- Custom tools and slash commands
|
||||
- MCP servers configured in your OpenCode config
|
||||
- Project-specific rules from `AGENTS.md`
|
||||
- Custom formatters and linters
|
||||
- Agents and permissions system
|
||||
746
packages/web/src/content/docs/it/agents.mdx
Normal file
746
packages/web/src/content/docs/it/agents.mdx
Normal file
@@ -0,0 +1,746 @@
|
||||
---
|
||||
title: Agenti
|
||||
description: Configura e usa agenti specializzati.
|
||||
---
|
||||
|
||||
Gli agenti sono assistenti AI specializzati che puoi configurare per task e workflow specifici. Ti permettono di creare strumenti mirati con prompt personalizzati, modelli e accesso agli strumenti.
|
||||
|
||||
:::tip
|
||||
Usa l'agente plan per analizzare codice e valutare suggerimenti senza apportare modifiche al codice.
|
||||
:::
|
||||
|
||||
Puoi passare da un agente all'altro durante una sessione oppure invocarli con la menzione `@`.
|
||||
|
||||
---
|
||||
|
||||
## Tipi
|
||||
|
||||
In OpenCode esistono due tipi di agenti: agenti primari e subagenti.
|
||||
|
||||
---
|
||||
|
||||
### Agenti primari
|
||||
|
||||
Gli agenti primari sono gli assistenti principali con cui interagisci direttamente. Puoi scorrerli usando il tasto **Tab** o la scorciatoia `switch_agent` configurata. Questi agenti gestiscono la conversazione principale. L'accesso agli strumenti si configura tramite i permessi: per esempio, Build ha tutti gli strumenti abilitati, mentre Plan e' limitato.
|
||||
|
||||
:::tip
|
||||
Puoi usare **Tab** per passare tra gli agenti primari durante una sessione.
|
||||
:::
|
||||
|
||||
OpenCode include due agenti primari integrati: **Build** e **Plan**. Li vediamo sotto.
|
||||
|
||||
---
|
||||
|
||||
### Subagenti
|
||||
|
||||
I subagenti sono assistenti specializzati che gli agenti primari possono invocare per task specifici. Puoi anche invocarli manualmente **menzionandoli con @** nei tuoi messaggi.
|
||||
|
||||
OpenCode include due subagenti integrati: **General** e **Explore**. Li vediamo sotto.
|
||||
|
||||
---
|
||||
|
||||
## Integrati
|
||||
|
||||
OpenCode include due agenti primari integrati e due subagenti integrati.
|
||||
|
||||
---
|
||||
|
||||
### Usa build
|
||||
|
||||
_Mode_: `primary`
|
||||
|
||||
Build e' l'agente primario **predefinito** con tutti gli strumenti abilitati. E' l'agente standard per lavoro di sviluppo quando ti serve pieno accesso a operazioni sui file e comandi di sistema.
|
||||
|
||||
---
|
||||
|
||||
### Usa plan
|
||||
|
||||
_Mode_: `primary`
|
||||
|
||||
Un agente limitato pensato per pianificazione e analisi. Usiamo un sistema di permessi per darti piu' controllo e prevenire modifiche non intenzionali.
|
||||
Di default, tutte le seguenti sono impostate a `ask`:
|
||||
|
||||
- `file edits`: tutte le scritture, patch ed edit
|
||||
- `bash`: tutti i comandi bash
|
||||
|
||||
Questo agente e' utile quando vuoi che l'LLM analizzi il codice, suggerisca modifiche o crei piani senza effettuare alcuna modifica reale al codebase.
|
||||
|
||||
---
|
||||
|
||||
### Usa general
|
||||
|
||||
_Mode_: `subagent`
|
||||
|
||||
Un agente general-purpose per ricercare domande complesse ed eseguire task multi-step. Ha accesso completo agli strumenti (tranne todo), quindi puo' modificare file quando serve. Usalo per eseguire piu' unita' di lavoro in parallelo.
|
||||
|
||||
---
|
||||
|
||||
### Usa explore
|
||||
|
||||
_Mode_: `subagent`
|
||||
|
||||
Un agente rapido in sola lettura per esplorare codebase. Non puo' modificare file. Usalo quando devi trovare rapidamente file tramite pattern, cercare nel codice per keyword o rispondere a domande sul codebase.
|
||||
|
||||
---
|
||||
|
||||
### Usa compaction
|
||||
|
||||
_Mode_: `primary`
|
||||
|
||||
Agente di sistema nascosto che compatta contesti lunghi in un riassunto piu' piccolo. Viene eseguito automaticamente quando serve e non e' selezionabile nella UI.
|
||||
|
||||
---
|
||||
|
||||
### Usa title
|
||||
|
||||
_Mode_: `primary`
|
||||
|
||||
Agente di sistema nascosto che genera titoli brevi per le sessioni. Viene eseguito automaticamente quando serve e non e' selezionabile nella UI.
|
||||
|
||||
---
|
||||
|
||||
### Usa summary
|
||||
|
||||
_Mode_: `primary`
|
||||
|
||||
Agente di sistema nascosto che crea riassunti di sessione. Viene eseguito automaticamente quando serve e non e' selezionabile nella UI.
|
||||
|
||||
---
|
||||
|
||||
## Utilizzo
|
||||
|
||||
1. Per gli agenti primari, usa il tasto **Tab** per scorrerli durante una sessione. Puoi anche usare la scorciatoia `switch_agent` configurata.
|
||||
|
||||
2. I subagenti possono essere invocati:
|
||||
- **Automaticamente** dagli agenti primari per task specializzati in base alle loro descrizioni.
|
||||
- Manualmente **menzionando con @** un subagente nel tuo messaggio. Per esempio.
|
||||
|
||||
```txt frame="none"
|
||||
@general help me search for this function
|
||||
```
|
||||
|
||||
3. **Navigazione tra sessioni**: quando i subagenti creano le loro child session, puoi navigare tra la sessione padre e tutte le sessioni figlie usando:
|
||||
- **\<Leader>+Right** (o la scorciatoia `session_child_cycle` configurata) per ciclare in avanti tra parent → child1 → child2 → ... → parent
|
||||
- **\<Leader>+Left** (o la scorciatoia `session_child_cycle_reverse` configurata) per ciclare indietro tra parent ← child1 ← child2 ← ... ← parent
|
||||
|
||||
Questo ti permette di passare senza soluzione di continuita' tra la conversazione principale e il lavoro specializzato dei subagenti.
|
||||
|
||||
---
|
||||
|
||||
## Configura
|
||||
|
||||
Puoi personalizzare gli agenti integrati o crearne di tuoi tramite configurazione. Gli agenti possono essere configurati in due modi:
|
||||
|
||||
---
|
||||
|
||||
### JSON
|
||||
|
||||
Configura gli agenti nel file `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": "Reviews code for best practices and potential issues",
|
||||
"mode": "subagent",
|
||||
"model": "anthropic/claude-sonnet-4-20250514",
|
||||
"prompt": "You are a code reviewer. Focus on security, performance, and maintainability.",
|
||||
"tools": {
|
||||
"write": false,
|
||||
"edit": false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Markdown
|
||||
|
||||
Puoi anche definire agenti usando file markdown. Mettili in:
|
||||
|
||||
- Globale: `~/.config/opencode/agents/`
|
||||
- Per progetto: `.opencode/agents/`
|
||||
|
||||
```markdown title="~/.config/opencode/agents/review.md"
|
||||
---
|
||||
description: Reviews code for quality and best practices
|
||||
mode: subagent
|
||||
model: anthropic/claude-sonnet-4-20250514
|
||||
temperature: 0.1
|
||||
tools:
|
||||
write: false
|
||||
edit: false
|
||||
bash: false
|
||||
---
|
||||
|
||||
You are in code review mode. Focus on:
|
||||
|
||||
- Code quality and best practices
|
||||
- Potential bugs and edge cases
|
||||
- Performance implications
|
||||
- Security considerations
|
||||
|
||||
Provide constructive feedback without making direct changes.
|
||||
```
|
||||
|
||||
Il nome del file markdown diventa il nome dell'agente. Per esempio, `review.md` crea un agente `review`.
|
||||
|
||||
---
|
||||
|
||||
## Opzioni
|
||||
|
||||
Vediamo nel dettaglio queste opzioni di configurazione.
|
||||
|
||||
---
|
||||
|
||||
### Descrizione
|
||||
|
||||
Usa l'opzione `description` per fornire una breve descrizione di cosa fa l'agente e quando usarlo.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"agent": {
|
||||
"review": {
|
||||
"description": "Reviews code for best practices and potential issues"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Questa e' un'opzione di configurazione **obbligatoria**.
|
||||
|
||||
---
|
||||
|
||||
### Temperatura
|
||||
|
||||
Controlla casualita' e creativita' delle risposte dell'LLM con la config `temperature`.
|
||||
|
||||
Valori bassi rendono le risposte piu' focalizzate e deterministiche, mentre valori alti aumentano creativita' e variabilita'.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"agent": {
|
||||
"plan": {
|
||||
"temperature": 0.1
|
||||
},
|
||||
"creative": {
|
||||
"temperature": 0.8
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
I valori di temperature tipicamente vanno da 0.0 a 1.0:
|
||||
|
||||
- **0.0-0.2**: risposte molto focalizzate e deterministiche, ideali per analisi del codice e pianificazione
|
||||
- **0.3-0.5**: risposte bilanciate con un po' di creativita', adatte a task generali di sviluppo
|
||||
- **0.6-1.0**: risposte piu' creative e varie, utili per brainstorming ed esplorazione
|
||||
|
||||
```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 non specifichi una temperature, OpenCode usa i default specifici del modello; tipicamente 0 per la maggior parte dei modelli e 0.55 per i modelli Qwen.
|
||||
|
||||
---
|
||||
|
||||
### Passi massimi
|
||||
|
||||
Controlla il numero massimo di iterazioni agentiche che un agente puo' eseguire prima di essere forzato a rispondere solo con testo. Questo permette a chi vuole controllare i costi di impostare un limite alle azioni agentiche.
|
||||
|
||||
Se non e' impostato, l'agente continuera' a iterare finche' il modello sceglie di fermarsi o l'utente interrompe la sessione.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"agent": {
|
||||
"quick-thinker": {
|
||||
"description": "Fast reasoning with limited iterations",
|
||||
"prompt": "You are a quick thinker. Solve problems with minimal steps.",
|
||||
"steps": 5
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Quando viene raggiunto il limite, l'agente riceve un system prompt speciale che lo istruisce a rispondere con un riassunto del lavoro svolto e con i task rimanenti consigliati.
|
||||
|
||||
:::caution
|
||||
Il campo legacy `maxSteps` e' deprecato. Usa `steps`.
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
### Disabilita
|
||||
|
||||
Imposta a `true` per disabilitare l'agente.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"agent": {
|
||||
"review": {
|
||||
"disable": true
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Prompt
|
||||
|
||||
Specifica un file di system prompt personalizzato per questo agente tramite la config `prompt`. Il file deve contenere istruzioni specifiche per lo scopo dell'agente.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"agent": {
|
||||
"review": {
|
||||
"prompt": "{file:./prompts/code-review.txt}"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Questo path e' relativo alla posizione del file di configurazione. Quindi funziona sia per la config globale di OpenCode sia per la config specifica del progetto.
|
||||
|
||||
---
|
||||
|
||||
### Modello
|
||||
|
||||
Usa la config `model` per sovrascrivere il modello per questo agente. Utile per usare modelli diversi ottimizzati per task diversi. Per esempio, un modello piu' veloce per la pianificazione e uno piu' capace per l'implementazione.
|
||||
|
||||
:::tip
|
||||
Se non specifichi un modello, gli agenti primari usano il [modello configurato globalmente](/docs/config#models), mentre i subagenti useranno il modello dell'agente primario che li ha invocati.
|
||||
:::
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"agent": {
|
||||
"plan": {
|
||||
"model": "anthropic/claude-haiku-4-20250514"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
L'ID modello nella configurazione OpenCode usa il formato `provider/model-id`. Per esempio, se stai usando [OpenCode Zen](/docs/zen), useresti `opencode/gpt-5.1-codex` per GPT 5.1 Codex.
|
||||
|
||||
---
|
||||
|
||||
### Strumenti
|
||||
|
||||
Controlla quali strumenti sono disponibili per questo agente tramite la config `tools`. Puoi abilitare o disabilitare strumenti specifici impostandoli a `true` o `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
|
||||
La configurazione specifica dell'agente sovrascrive la configurazione globale.
|
||||
:::
|
||||
|
||||
Puoi anche usare wildcard per controllare piu' strumenti in una volta. Per esempio, per disabilitare tutti gli strumenti di un server MCP:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"agent": {
|
||||
"readonly": {
|
||||
"tools": {
|
||||
"mymcp_*": false,
|
||||
"write": false,
|
||||
"edit": false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
[Scopri di piu' sugli strumenti](/docs/tools).
|
||||
|
||||
---
|
||||
|
||||
### Permessi
|
||||
|
||||
Puoi configurare i permessi per gestire quali azioni un agente puo' eseguire. Attualmente, i permessi per gli strumenti `edit`, `bash` e `webfetch` possono essere configurati come:
|
||||
|
||||
- `"ask"` — chiede approvazione prima di eseguire lo strumento
|
||||
- `"allow"` — consente tutte le operazioni senza approvazione
|
||||
- `"deny"` — disabilita lo strumento
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"edit": "deny"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Puoi sovrascrivere questi permessi per agente.
|
||||
|
||||
```json title="opencode.json" {3-5,8-10}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"edit": "deny"
|
||||
},
|
||||
"agent": {
|
||||
"build": {
|
||||
"permission": {
|
||||
"edit": "ask"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Puoi anche impostare permessi negli agenti Markdown.
|
||||
|
||||
```markdown title="~/.config/opencode/agents/review.md"
|
||||
---
|
||||
description: Code review without edits
|
||||
mode: subagent
|
||||
permission:
|
||||
edit: deny
|
||||
bash:
|
||||
"*": ask
|
||||
"git diff": allow
|
||||
"git log*": allow
|
||||
"grep *": allow
|
||||
webfetch: deny
|
||||
---
|
||||
|
||||
Only analyze code and suggest changes.
|
||||
```
|
||||
|
||||
Puoi impostare permessi per comandi bash specifici.
|
||||
|
||||
```json title="opencode.json" {7}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"agent": {
|
||||
"build": {
|
||||
"permission": {
|
||||
"bash": {
|
||||
"git push": "ask",
|
||||
"grep *": "allow"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Questo puo' usare un glob pattern.
|
||||
|
||||
```json title="opencode.json" {7}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"agent": {
|
||||
"build": {
|
||||
"permission": {
|
||||
"bash": {
|
||||
"git *": "ask"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
E puoi anche usare la wildcard `*` per gestire i permessi per tutti i comandi.
|
||||
Dato che l'ultima regola che corrisponde ha la precedenza, metti prima la wildcard `*` e poi le regole specifiche.
|
||||
|
||||
```json title="opencode.json" {8}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"agent": {
|
||||
"build": {
|
||||
"permission": {
|
||||
"bash": {
|
||||
"*": "ask",
|
||||
"git status *": "allow"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
[Scopri di piu' sui permessi](/docs/permissions).
|
||||
|
||||
---
|
||||
|
||||
### Modalita'
|
||||
|
||||
Controlla la modalita' dell'agente con la config `mode`. L'opzione `mode` determina come l'agente puo' essere usato.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"agent": {
|
||||
"review": {
|
||||
"mode": "subagent"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
`mode` puo' essere `primary`, `subagent` o `all`. Se `mode` non e' specificato, il default e' `all`.
|
||||
|
||||
---
|
||||
|
||||
### Nascosto
|
||||
|
||||
Nascondi un subagente dal menu autocomplete di `@` con `hidden: true`. Utile per subagenti interni che dovrebbero essere invocati solo programmaticamente da altri agenti tramite lo strumento Task.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"agent": {
|
||||
"internal-helper": {
|
||||
"mode": "subagent",
|
||||
"hidden": true
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Questo influisce solo sulla visibilita' per l'utente nel menu autocomplete. Gli agenti nascosti possono comunque essere invocati dal modello tramite lo strumento Task se i permessi lo consentono.
|
||||
|
||||
:::note
|
||||
Si applica solo ad agenti con `mode: subagent`.
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
### Permessi Task
|
||||
|
||||
Controlla quali subagenti un agente puo' invocare tramite lo strumento Task con `permission.task`. Usa glob pattern per un matching flessibile.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"agent": {
|
||||
"orchestrator": {
|
||||
"mode": "primary",
|
||||
"permission": {
|
||||
"task": {
|
||||
"*": "deny",
|
||||
"orchestrator-*": "allow",
|
||||
"code-reviewer": "ask"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Quando e' impostato a `deny`, il subagente viene rimosso interamente dalla descrizione dello strumento Task, quindi il modello non provera' a invocarlo.
|
||||
|
||||
:::tip
|
||||
Le regole vengono valutate in ordine e **vince l'ultima regola che corrisponde**. Nell'esempio sopra, `orchestrator-planner` corrisponde sia a `*` (deny) sia a `orchestrator-*` (allow), ma dato che `orchestrator-*` viene dopo `*`, il risultato e' `allow`.
|
||||
:::
|
||||
|
||||
:::tip
|
||||
Gli utenti possono sempre invocare qualunque subagente direttamente dal menu autocomplete `@`, anche se i permessi task dell'agente lo negherebbero.
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
### Colore
|
||||
|
||||
Personalizza l'aspetto visivo dell'agente nella UI con l'opzione `color`. Questo influisce su come l'agente appare nell'interfaccia.
|
||||
|
||||
Usa un colore hex valido (ad es. `#FF5733`) o un colore tema: `primary`, `secondary`, `accent`, `success`, `warning`, `error`, `info`.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"agent": {
|
||||
"creative": {
|
||||
"color": "#ff6b6b"
|
||||
},
|
||||
"code-reviewer": {
|
||||
"color": "accent"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Top P
|
||||
|
||||
Controlla la diversita' delle risposte con l'opzione `top_p`. Alternativa alla temperature per controllare la casualita'.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"agent": {
|
||||
"brainstorm": {
|
||||
"top_p": 0.9
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
I valori vanno da 0.0 a 1.0. Valori piu' bassi sono piu' focalizzati, valori piu' alti piu' diversi.
|
||||
|
||||
---
|
||||
|
||||
### Opzioni aggiuntive
|
||||
|
||||
Qualsiasi altra opzione che specifichi nella configurazione dell'agente verra' **passata direttamente** al provider come opzione del modello. Questo ti permette di usare feature e parametri specifici del provider.
|
||||
|
||||
Per esempio, con i modelli di reasoning di OpenAI, puoi controllare lo sforzo di ragionamento:
|
||||
|
||||
```json title="opencode.json" {6,7}
|
||||
{
|
||||
"agent": {
|
||||
"deep-thinker": {
|
||||
"description": "Agent that uses high reasoning effort for complex problems",
|
||||
"model": "openai/gpt-5",
|
||||
"reasoningEffort": "high",
|
||||
"textVerbosity": "low"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Queste opzioni aggiuntive sono specifiche per modello e provider. Controlla la documentazione del provider per i parametri disponibili.
|
||||
|
||||
:::tip
|
||||
Esegui `opencode models` per vedere la lista dei modelli disponibili.
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
## Crea agenti
|
||||
|
||||
Puoi creare nuovi agenti usando il comando seguente:
|
||||
|
||||
```bash
|
||||
opencode agent create
|
||||
```
|
||||
|
||||
Questo comando interattivo:
|
||||
|
||||
1. Chiede dove salvare l'agente: globale o specifico del progetto.
|
||||
2. Chiede una descrizione di cosa dovrebbe fare l'agente.
|
||||
3. Genera un system prompt appropriato e un identificatore.
|
||||
4. Ti fa selezionare a quali strumenti l'agente puo' accedere.
|
||||
5. Infine, crea un file markdown con la configurazione dell'agente.
|
||||
|
||||
---
|
||||
|
||||
## Casi d'uso
|
||||
|
||||
Ecco alcuni casi d'uso comuni per agenti diversi.
|
||||
|
||||
- **Build agent**: sviluppo completo con tutti gli strumenti abilitati
|
||||
- **Plan agent**: analisi e pianificazione senza apportare modifiche
|
||||
- **Review agent**: code review con accesso in sola lettura piu' strumenti documentazione
|
||||
- **Debug agent**: focalizzato sull'investigazione con strumenti bash e read abilitati
|
||||
- **Docs agent**: scrittura documentazione con operazioni sui file ma senza comandi di sistema
|
||||
|
||||
---
|
||||
|
||||
## Esempi
|
||||
|
||||
Ecco alcuni agenti di esempio che potresti trovare utili.
|
||||
|
||||
:::tip
|
||||
Hai un agente che vorresti condividere? [Invia una PR](https://github.com/anomalyco/opencode).
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
### Agente documentazione
|
||||
|
||||
```markdown title="~/.config/opencode/agents/docs-writer.md"
|
||||
---
|
||||
description: Writes and maintains project documentation
|
||||
mode: subagent
|
||||
tools:
|
||||
bash: false
|
||||
---
|
||||
|
||||
You are a technical writer. Create clear, comprehensive documentation.
|
||||
|
||||
Focus on:
|
||||
|
||||
- Clear explanations
|
||||
- Proper structure
|
||||
- Code examples
|
||||
- User-friendly language
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Auditor di sicurezza
|
||||
|
||||
```markdown title="~/.config/opencode/agents/security-auditor.md"
|
||||
---
|
||||
description: Performs security audits and identifies vulnerabilities
|
||||
mode: subagent
|
||||
tools:
|
||||
write: false
|
||||
edit: false
|
||||
---
|
||||
|
||||
You are a security expert. Focus on identifying potential security issues.
|
||||
|
||||
Look for:
|
||||
|
||||
- Input validation vulnerabilities
|
||||
- Authentication and authorization flaws
|
||||
- Data exposure risks
|
||||
- Dependency vulnerabilities
|
||||
- Configuration security issues
|
||||
```
|
||||
601
packages/web/src/content/docs/it/cli.mdx
Normal file
601
packages/web/src/content/docs/it/cli.mdx
Normal file
@@ -0,0 +1,601 @@
|
||||
---
|
||||
title: CLI
|
||||
description: Opzioni e comandi della CLI di OpenCode.
|
||||
---
|
||||
|
||||
import { Tabs, TabItem } from "@astrojs/starlight/components"
|
||||
|
||||
La CLI di OpenCode, per impostazione predefinita, avvia la [TUI](/docs/tui) quando viene eseguita senza argomenti.
|
||||
|
||||
```bash
|
||||
opencode
|
||||
```
|
||||
|
||||
Ma accetta anche i comandi documentati in questa pagina. Questo ti permette di interagire con OpenCode in modo programmatico.
|
||||
|
||||
```bash
|
||||
opencode run "Explain how closures work in JavaScript"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### tui
|
||||
|
||||
Avvia l'interfaccia testuale di OpenCode (terminal user interface).
|
||||
|
||||
```bash
|
||||
opencode [project]
|
||||
```
|
||||
|
||||
#### Flag
|
||||
|
||||
| Flag | Breve | Descrizione |
|
||||
| ------------ | ----- | ----------------------------------- |
|
||||
| `--continue` | `-c` | Continua l'ultima sessione |
|
||||
| `--session` | `-s` | ID sessione da continuare |
|
||||
| `--prompt` | | Prompt da usare |
|
||||
| `--model` | `-m` | Modello nel formato provider/model |
|
||||
| `--agent` | | Agente da usare |
|
||||
| `--port` | | Porta su cui mettersi in ascolto |
|
||||
| `--hostname` | | Hostname su cui mettersi in ascolto |
|
||||
|
||||
---
|
||||
|
||||
## Comandi
|
||||
|
||||
La CLI di OpenCode include anche i seguenti comandi.
|
||||
|
||||
---
|
||||
|
||||
### agent
|
||||
|
||||
Gestisci gli agenti per OpenCode.
|
||||
|
||||
```bash
|
||||
opencode agent [command]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### attach
|
||||
|
||||
Collega un terminale a un backend server di OpenCode gia' in esecuzione avviato tramite i comandi `serve` o `web`.
|
||||
|
||||
```bash
|
||||
opencode attach [url]
|
||||
```
|
||||
|
||||
Questo consente di usare la TUI con un backend OpenCode remoto. Per esempio:
|
||||
|
||||
```bash
|
||||
# Start the backend server for web/mobile access
|
||||
opencode web --port 4096 --hostname 0.0.0.0
|
||||
|
||||
# In another terminal, attach the TUI to the running backend
|
||||
opencode attach http://10.20.30.40:4096
|
||||
```
|
||||
|
||||
#### Flag
|
||||
|
||||
| Flag | Breve | Descrizione |
|
||||
| ----------- | ----- | --------------------------------------- |
|
||||
| `--dir` | | Working directory in cui avviare la TUI |
|
||||
| `--session` | `-s` | ID sessione da continuare |
|
||||
|
||||
---
|
||||
|
||||
#### create
|
||||
|
||||
Crea un nuovo agente con configurazione personalizzata.
|
||||
|
||||
```bash
|
||||
opencode agent create
|
||||
```
|
||||
|
||||
Questo comando ti guida nella creazione di un nuovo agente con un system prompt personalizzato e configurazione degli strumenti.
|
||||
|
||||
---
|
||||
|
||||
#### list
|
||||
|
||||
Elenca tutti gli agenti disponibili.
|
||||
|
||||
```bash
|
||||
opencode agent list
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### auth
|
||||
|
||||
Comando per gestire le credenziali e il login dei provider.
|
||||
|
||||
```bash
|
||||
opencode auth [command]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### login
|
||||
|
||||
OpenCode si basa sull'elenco provider di [Models.dev](https://models.dev), quindi puoi usare `opencode auth login` per configurare le API key per qualunque provider tu voglia usare. Le credenziali vengono salvate in `~/.local/share/opencode/auth.json`.
|
||||
|
||||
```bash
|
||||
opencode auth login
|
||||
```
|
||||
|
||||
Quando OpenCode si avvia, carica i provider dal file delle credenziali e, se presenti, anche eventuali key definite nell'ambiente o in un file `.env` nel progetto.
|
||||
|
||||
---
|
||||
|
||||
#### list
|
||||
|
||||
Elenca tutti i provider autenticati come salvati nel file delle credenziali.
|
||||
|
||||
```bash
|
||||
opencode auth list
|
||||
```
|
||||
|
||||
Oppure la versione corta.
|
||||
|
||||
```bash
|
||||
opencode auth ls
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### logout
|
||||
|
||||
Esegue il logout da un provider rimuovendolo dal file delle credenziali.
|
||||
|
||||
```bash
|
||||
opencode auth logout
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### github
|
||||
|
||||
Gestisci l'agente GitHub per l'automazione dei repository.
|
||||
|
||||
```bash
|
||||
opencode github [command]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### install
|
||||
|
||||
Installa l'agente GitHub nel tuo repository.
|
||||
|
||||
```bash
|
||||
opencode github install
|
||||
```
|
||||
|
||||
Questo configura il workflow GitHub Actions necessario e ti guida nel processo di configurazione. [Scopri di piu'](/docs/github).
|
||||
|
||||
---
|
||||
|
||||
#### run
|
||||
|
||||
Esegui l'agente GitHub. Tipicamente usato in GitHub Actions.
|
||||
|
||||
```bash
|
||||
opencode github run
|
||||
```
|
||||
|
||||
##### Flag
|
||||
|
||||
| Flag | Descrizione |
|
||||
| --------- | -------------------------------------------- |
|
||||
| `--event` | Evento GitHub mock per cui eseguire l'agente |
|
||||
| `--token` | GitHub personal access token |
|
||||
|
||||
---
|
||||
|
||||
### mcp
|
||||
|
||||
Gestisci i server Model Context Protocol.
|
||||
|
||||
```bash
|
||||
opencode mcp [command]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### add
|
||||
|
||||
Aggiungi un server MCP alla tua configurazione.
|
||||
|
||||
```bash
|
||||
opencode mcp add
|
||||
```
|
||||
|
||||
Questo comando ti guida nell'aggiunta di un server MCP locale o remoto.
|
||||
|
||||
---
|
||||
|
||||
#### list
|
||||
|
||||
Elenca tutti i server MCP configurati e il loro stato di connessione.
|
||||
|
||||
```bash
|
||||
opencode mcp list
|
||||
```
|
||||
|
||||
Oppure la versione corta.
|
||||
|
||||
```bash
|
||||
opencode mcp ls
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### auth
|
||||
|
||||
Autentica con un server MCP con OAuth abilitato.
|
||||
|
||||
```bash
|
||||
opencode mcp auth [name]
|
||||
```
|
||||
|
||||
Se non fornisci un nome server, ti verra' chiesto di selezionare tra i server OAuth-capable disponibili.
|
||||
|
||||
Puoi anche elencare i server OAuth-capable e il loro stato di autenticazione.
|
||||
|
||||
```bash
|
||||
opencode mcp auth list
|
||||
```
|
||||
|
||||
Oppure la versione corta.
|
||||
|
||||
```bash
|
||||
opencode mcp auth ls
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### logout
|
||||
|
||||
Rimuovi le credenziali OAuth per un server MCP.
|
||||
|
||||
```bash
|
||||
opencode mcp logout [name]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### debug
|
||||
|
||||
Esegui debug di problemi di connessione OAuth per un server MCP.
|
||||
|
||||
```bash
|
||||
opencode mcp debug <name>
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### models
|
||||
|
||||
Elenca tutti i modelli disponibili dai provider configurati.
|
||||
|
||||
```bash
|
||||
opencode models [provider]
|
||||
```
|
||||
|
||||
Questo comando mostra tutti i modelli disponibili tra i provider configurati nel formato `provider/model`.
|
||||
|
||||
E' utile per capire l'esatto nome del modello da usare nella [config](/docs/config/).
|
||||
|
||||
Puoi anche passare opzionalmente un ID provider per filtrare i modelli a quel provider.
|
||||
|
||||
```bash
|
||||
opencode models anthropic
|
||||
```
|
||||
|
||||
#### Flag
|
||||
|
||||
| Flag | Descrizione |
|
||||
| ----------- | --------------------------------------------------- |
|
||||
| `--refresh` | Aggiorna la cache modelli da models.dev |
|
||||
| `--verbose` | Output piu' verboso (include metadati come i costi) |
|
||||
|
||||
Usa `--refresh` per aggiornare l'elenco modelli in cache. E' utile quando nuovi modelli vengono aggiunti a un provider e vuoi vederli in OpenCode.
|
||||
|
||||
```bash
|
||||
opencode models --refresh
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### run
|
||||
|
||||
Esegui opencode in modalita' non interattiva passando un prompt direttamente.
|
||||
|
||||
```bash
|
||||
opencode run [message..]
|
||||
```
|
||||
|
||||
E' utile per scripting, automazione o quando vuoi una risposta rapida senza avviare la TUI completa. Per esempio.
|
||||
|
||||
```bash "opencode run"
|
||||
opencode run Explain the use of context in Go
|
||||
```
|
||||
|
||||
Puoi anche collegarti a una istanza `opencode serve` gia' in esecuzione per evitare i cold boot dei server MCP ad ogni esecuzione:
|
||||
|
||||
```bash
|
||||
# Start a headless server in one terminal
|
||||
opencode serve
|
||||
|
||||
# In another terminal, run commands that attach to it
|
||||
opencode run --attach http://localhost:4096 "Explain async/await in JavaScript"
|
||||
```
|
||||
|
||||
#### Flag
|
||||
|
||||
| Flag | Breve | Descrizione |
|
||||
| ------------ | ----- | --------------------------------------------------------------------- |
|
||||
| `--command` | | Il comando da eseguire; usa message per gli argomenti |
|
||||
| `--continue` | `-c` | Continua l'ultima sessione |
|
||||
| `--session` | `-s` | ID sessione da continuare |
|
||||
| `--share` | | Condividi la sessione |
|
||||
| `--model` | `-m` | Modello nel formato provider/model |
|
||||
| `--agent` | | Agente da usare |
|
||||
| `--file` | `-f` | File da allegare al messaggio |
|
||||
| `--format` | | Formato: default (formattato) o json (eventi JSON grezzi) |
|
||||
| `--title` | | Titolo sessione (usa prompt troncato se non viene fornito un valore) |
|
||||
| `--attach` | | Attach a un server opencode in esecuzione (es. http://localhost:4096) |
|
||||
| `--port` | | Porta per il server locale (di default una porta casuale) |
|
||||
|
||||
---
|
||||
|
||||
### serve
|
||||
|
||||
Avvia un server OpenCode headless per accesso via API. Vedi le [server docs](/docs/server) per l'interfaccia HTTP completa.
|
||||
|
||||
```bash
|
||||
opencode serve
|
||||
```
|
||||
|
||||
Avvia un server HTTP che espone accesso API alle funzionalita' di opencode senza la TUI. Imposta `OPENCODE_SERVER_PASSWORD` per abilitare HTTP basic auth (username di default `opencode`).
|
||||
|
||||
#### Flag
|
||||
|
||||
| Flag | Descrizione |
|
||||
| ------------ | ---------------------------------------------- |
|
||||
| `--port` | Porta su cui mettersi in ascolto |
|
||||
| `--hostname` | Hostname su cui mettersi in ascolto |
|
||||
| `--mdns` | Abilita discovery mDNS |
|
||||
| `--cors` | Origin browser addizionali per consentire CORS |
|
||||
|
||||
---
|
||||
|
||||
### session
|
||||
|
||||
Gestisci le sessioni OpenCode.
|
||||
|
||||
```bash
|
||||
opencode session [command]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### list
|
||||
|
||||
Elenca tutte le sessioni OpenCode.
|
||||
|
||||
```bash
|
||||
opencode session list
|
||||
```
|
||||
|
||||
##### Flag
|
||||
|
||||
| Flag | Breve | Descrizione |
|
||||
| ------------- | ----- | ------------------------------------ |
|
||||
| `--max-count` | `-n` | Limita alle N sessioni piu' recenti |
|
||||
| `--format` | | Formato output: table o json (table) |
|
||||
|
||||
---
|
||||
|
||||
### stats
|
||||
|
||||
Mostra statistiche di utilizzo token e costo per le sessioni OpenCode.
|
||||
|
||||
```bash
|
||||
opencode stats
|
||||
```
|
||||
|
||||
#### Flag
|
||||
|
||||
| Flag | Descrizione |
|
||||
| ----------- | ------------------------------------------------------------------------------------- |
|
||||
| `--days` | Mostra statistiche per gli ultimi N giorni (all time) |
|
||||
| `--tools` | Numero di strumenti da mostrare (all) |
|
||||
| `--models` | Mostra breakdown di utilizzo modelli (nascosto di default). Passa un numero per top N |
|
||||
| `--project` | Filtra per progetto (tutti i progetti; stringa vuota: progetto corrente) |
|
||||
|
||||
---
|
||||
|
||||
### export
|
||||
|
||||
Esporta i dati di sessione come JSON.
|
||||
|
||||
```bash
|
||||
opencode export [sessionID]
|
||||
```
|
||||
|
||||
Se non fornisci un ID sessione, ti verra' chiesto di selezionare tra le sessioni disponibili.
|
||||
|
||||
---
|
||||
|
||||
### import
|
||||
|
||||
Importa i dati di sessione da un file JSON o da un URL di condivisione OpenCode.
|
||||
|
||||
```bash
|
||||
opencode import <file>
|
||||
```
|
||||
|
||||
Puoi importare da un file locale o da un URL di condivisione OpenCode.
|
||||
|
||||
```bash
|
||||
opencode import session.json
|
||||
opencode import https://opncd.ai/s/abc123
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### web
|
||||
|
||||
Avvia un server OpenCode headless con interfaccia web.
|
||||
|
||||
```bash
|
||||
opencode web
|
||||
```
|
||||
|
||||
Avvia un server HTTP e apre un browser per accedere a OpenCode tramite interfaccia web. Imposta `OPENCODE_SERVER_PASSWORD` per abilitare HTTP basic auth (username di default `opencode`).
|
||||
|
||||
#### Flag
|
||||
|
||||
| Flag | Descrizione |
|
||||
| ------------ | ---------------------------------------------- |
|
||||
| `--port` | Porta su cui mettersi in ascolto |
|
||||
| `--hostname` | Hostname su cui mettersi in ascolto |
|
||||
| `--mdns` | Abilita discovery mDNS |
|
||||
| `--cors` | Origin browser addizionali per consentire CORS |
|
||||
|
||||
---
|
||||
|
||||
### acp
|
||||
|
||||
Avvia un server ACP (Agent Client Protocol).
|
||||
|
||||
```bash
|
||||
opencode acp
|
||||
```
|
||||
|
||||
Questo comando avvia un server ACP che comunica via stdin/stdout usando nd-JSON.
|
||||
|
||||
#### Flag
|
||||
|
||||
| Flag | Descrizione |
|
||||
| ------------ | ----------------------------------- |
|
||||
| `--cwd` | Directory di lavoro |
|
||||
| `--port` | Porta su cui mettersi in ascolto |
|
||||
| `--hostname` | Hostname su cui mettersi in ascolto |
|
||||
|
||||
---
|
||||
|
||||
### uninstall
|
||||
|
||||
Disinstalla OpenCode e rimuove tutti i file correlati.
|
||||
|
||||
```bash
|
||||
opencode uninstall
|
||||
```
|
||||
|
||||
#### Flag
|
||||
|
||||
| Flag | Breve | Descrizione |
|
||||
| --------------- | ----- | -------------------------------------------- |
|
||||
| `--keep-config` | `-c` | Mantieni i file di configurazione |
|
||||
| `--keep-data` | `-d` | Mantieni dati di sessione e snapshot |
|
||||
| `--dry-run` | | Mostra cosa verrebbe rimosso senza rimuovere |
|
||||
| `--force` | `-f` | Salta le richieste di conferma |
|
||||
|
||||
---
|
||||
|
||||
### upgrade
|
||||
|
||||
Aggiorna opencode all'ultima versione o a una versione specifica.
|
||||
|
||||
```bash
|
||||
opencode upgrade [target]
|
||||
```
|
||||
|
||||
Per aggiornare all'ultima versione:
|
||||
|
||||
```bash
|
||||
opencode upgrade
|
||||
```
|
||||
|
||||
Per aggiornare a una versione specifica:
|
||||
|
||||
```bash
|
||||
opencode upgrade v0.1.48
|
||||
```
|
||||
|
||||
#### Flag
|
||||
|
||||
| Flag | Breve | Descrizione |
|
||||
| ---------- | ----- | --------------------------------------------------------- |
|
||||
| `--method` | `-m` | Metodo di installazione usato: curl, npm, pnpm, bun, brew |
|
||||
|
||||
---
|
||||
|
||||
## Flag globali
|
||||
|
||||
La CLI di opencode accetta i seguenti flag globali.
|
||||
|
||||
| Flag | Breve | Descrizione |
|
||||
| -------------- | ----- | -------------------------------------- |
|
||||
| `--help` | `-h` | Mostra l'help |
|
||||
| `--version` | `-v` | Stampa il numero di versione |
|
||||
| `--print-logs` | | Stampa i log su stderr |
|
||||
| `--log-level` | | Livello log (DEBUG, INFO, WARN, ERROR) |
|
||||
|
||||
---
|
||||
|
||||
## Variabili d'ambiente
|
||||
|
||||
OpenCode puo' essere configurato tramite variabili d'ambiente.
|
||||
|
||||
| Variabile | Tipo | Descrizione |
|
||||
| ------------------------------------- | ------- | ----------------------------------------------------------- |
|
||||
| `OPENCODE_AUTO_SHARE` | boolean | Condivide automaticamente le sessioni |
|
||||
| `OPENCODE_GIT_BASH_PATH` | string | Percorso all'eseguibile Git Bash su Windows |
|
||||
| `OPENCODE_CONFIG` | string | Percorso al file di configurazione |
|
||||
| `OPENCODE_CONFIG_DIR` | string | Percorso alla directory di configurazione |
|
||||
| `OPENCODE_CONFIG_CONTENT` | string | Contenuto JSON di config inline |
|
||||
| `OPENCODE_DISABLE_AUTOUPDATE` | boolean | Disabilita i controlli automatici di aggiornamento |
|
||||
| `OPENCODE_DISABLE_PRUNE` | boolean | Disabilita la potatura dei dati vecchi |
|
||||
| `OPENCODE_DISABLE_TERMINAL_TITLE` | boolean | Disabilita aggiornamenti automatici del titolo terminale |
|
||||
| `OPENCODE_PERMISSION` | string | Config permessi JSON inline |
|
||||
| `OPENCODE_DISABLE_DEFAULT_PLUGINS` | boolean | Disabilita i plugin di default |
|
||||
| `OPENCODE_DISABLE_LSP_DOWNLOAD` | boolean | Disabilita download automatico dei server LSP |
|
||||
| `OPENCODE_ENABLE_EXPERIMENTAL_MODELS` | boolean | Abilita modelli sperimentali |
|
||||
| `OPENCODE_DISABLE_AUTOCOMPACT` | boolean | Disabilita compaction automatica del contesto |
|
||||
| `OPENCODE_DISABLE_CLAUDE_CODE` | boolean | Disabilita lettura da `.claude` (prompt + skill) |
|
||||
| `OPENCODE_DISABLE_CLAUDE_CODE_PROMPT` | boolean | Disabilita lettura di `~/.claude/CLAUDE.md` |
|
||||
| `OPENCODE_DISABLE_CLAUDE_CODE_SKILLS` | boolean | Disabilita caricamento di `.claude/skills` |
|
||||
| `OPENCODE_DISABLE_MODELS_FETCH` | boolean | Disabilita fetch dei modelli da fonti remote |
|
||||
| `OPENCODE_FAKE_VCS` | string | Provider VCS finto per scopi di test |
|
||||
| `OPENCODE_DISABLE_FILETIME_CHECK` | boolean | Disabilita controllo file time per ottimizzazione |
|
||||
| `OPENCODE_CLIENT` | string | Identificatore client (default `cli`) |
|
||||
| `OPENCODE_ENABLE_EXA` | boolean | Abilita gli strumenti di web search Exa |
|
||||
| `OPENCODE_SERVER_PASSWORD` | string | Abilita basic auth per `serve`/`web` |
|
||||
| `OPENCODE_SERVER_USERNAME` | string | Sovrascrive lo username basic auth (default `opencode`) |
|
||||
| `OPENCODE_MODELS_URL` | string | URL personalizzato per recuperare la configurazione modelli |
|
||||
|
||||
---
|
||||
|
||||
### Sperimentale
|
||||
|
||||
Queste variabili d'ambiente abilitano funzionalita' sperimentali che potrebbero cambiare o essere rimosse.
|
||||
|
||||
| Variabile | Tipo | Descrizione |
|
||||
| ----------------------------------------------- | ------- | ------------------------------------------- |
|
||||
| `OPENCODE_EXPERIMENTAL` | boolean | Abilita tutte le funzionalita' sperimentali |
|
||||
| `OPENCODE_EXPERIMENTAL_ICON_DISCOVERY` | boolean | Abilita icon discovery |
|
||||
| `OPENCODE_EXPERIMENTAL_DISABLE_COPY_ON_SELECT` | boolean | Disabilita copy on select nella TUI |
|
||||
| `OPENCODE_EXPERIMENTAL_BASH_DEFAULT_TIMEOUT_MS` | number | Timeout di default per comandi bash in ms |
|
||||
| `OPENCODE_EXPERIMENTAL_OUTPUT_TOKEN_MAX` | number | Massimo token di output per risposte LLM |
|
||||
| `OPENCODE_EXPERIMENTAL_FILEWATCHER` | boolean | Abilita file watcher per l'intera dir |
|
||||
| `OPENCODE_EXPERIMENTAL_OXFMT` | boolean | Abilita formatter oxfmt |
|
||||
| `OPENCODE_EXPERIMENTAL_LSP_TOOL` | boolean | Abilita strumento LSP sperimentale |
|
||||
| `OPENCODE_EXPERIMENTAL_DISABLE_FILEWATCHER` | boolean | Disabilita file watcher |
|
||||
| `OPENCODE_EXPERIMENTAL_EXA` | boolean | Abilita funzionalita' Exa sperimentali |
|
||||
| `OPENCODE_EXPERIMENTAL_LSP_TY` | boolean | Abilita type checking LSP sperimentale |
|
||||
| `OPENCODE_EXPERIMENTAL_MARKDOWN` | boolean | Abilita markdown sperimentale |
|
||||
| `OPENCODE_EXPERIMENTAL_PLAN_MODE` | boolean | Abilita plan mode |
|
||||
322
packages/web/src/content/docs/it/commands.mdx
Normal file
322
packages/web/src/content/docs/it/commands.mdx
Normal file
@@ -0,0 +1,322 @@
|
||||
---
|
||||
title: Comandi
|
||||
description: Crea comandi personalizzati per task ripetitivi.
|
||||
---
|
||||
|
||||
I comandi personalizzati ti permettono di definire un prompt da eseguire quando quel comando viene lanciato nella TUI.
|
||||
|
||||
```bash frame="none"
|
||||
/my-command
|
||||
```
|
||||
|
||||
I comandi personalizzati si aggiungono a quelli integrati come `/init`, `/undo`, `/redo`, `/share`, `/help`. [Scopri di piu](/docs/tui#commands).
|
||||
|
||||
---
|
||||
|
||||
## Crea file di comando
|
||||
|
||||
Crea file markdown nella directory `commands/` per definire comandi personalizzati.
|
||||
|
||||
Crea `.opencode/commands/test.md`:
|
||||
|
||||
```md title=".opencode/commands/test.md"
|
||||
---
|
||||
description: Run tests with coverage
|
||||
agent: build
|
||||
model: anthropic/claude-3-5-sonnet-20241022
|
||||
---
|
||||
|
||||
Run the full test suite with coverage report and show any failures.
|
||||
Focus on the failing tests and suggest fixes.
|
||||
```
|
||||
|
||||
Il frontmatter definisce le proprieta del comando. Il contenuto diventa il template.
|
||||
|
||||
Usa il comando digitando `/` seguito dal nome del comando.
|
||||
|
||||
```bash frame="none"
|
||||
"/test"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Configura
|
||||
|
||||
Puoi aggiungere comandi personalizzati tramite la config di OpenCode o creando file markdown nella directory `commands/`.
|
||||
|
||||
---
|
||||
|
||||
### JSON
|
||||
|
||||
Usa l'opzione `command` nella [config](/docs/config) di OpenCode:
|
||||
|
||||
```json title="opencode.jsonc" {4-12}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"command": {
|
||||
// This becomes the name of the command
|
||||
"test": {
|
||||
// This is the prompt that will be sent to the LLM
|
||||
"template": "Run the full test suite with coverage report and show any failures.\nFocus on the failing tests and suggest fixes.",
|
||||
// This is shown as the description in the TUI
|
||||
"description": "Run tests with coverage",
|
||||
"agent": "build",
|
||||
"model": "anthropic/claude-3-5-sonnet-20241022"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Ora puoi eseguire questo comando nella TUI:
|
||||
|
||||
```bash frame="none"
|
||||
/test
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Markdown
|
||||
|
||||
Puoi anche definire comandi usando file markdown. Mettili in:
|
||||
|
||||
- Globale: `~/.config/opencode/commands/`
|
||||
- Per progetto: `.opencode/commands/`
|
||||
|
||||
```markdown title="~/.config/opencode/commands/test.md"
|
||||
---
|
||||
description: Run tests with coverage
|
||||
agent: build
|
||||
model: anthropic/claude-3-5-sonnet-20241022
|
||||
---
|
||||
|
||||
Run the full test suite with coverage report and show any failures.
|
||||
Focus on the failing tests and suggest fixes.
|
||||
```
|
||||
|
||||
Il nome del file markdown diventa il nome del comando. Per esempio, `test.md` ti permette di eseguire:
|
||||
|
||||
```bash frame="none"
|
||||
/test
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Configurazione del prompt
|
||||
|
||||
I prompt dei comandi personalizzati supportano diversi placeholder e sintassi speciali.
|
||||
|
||||
---
|
||||
|
||||
### Argomenti
|
||||
|
||||
Passa argomenti ai comandi usando il placeholder `$ARGUMENTS`.
|
||||
|
||||
```md title=".opencode/commands/component.md"
|
||||
---
|
||||
description: Create a new component
|
||||
---
|
||||
|
||||
Create a new React component named $ARGUMENTS with TypeScript support.
|
||||
Include proper typing and basic structure.
|
||||
```
|
||||
|
||||
Esegui il comando con argomenti:
|
||||
|
||||
```bash frame="none"
|
||||
/component Button
|
||||
```
|
||||
|
||||
E `$ARGUMENTS` verra sostituito con `Button`.
|
||||
|
||||
Puoi anche accedere ai singoli argomenti usando parametri posizionali:
|
||||
|
||||
- `$1` - Primo argomento
|
||||
- `$2` - Secondo argomento
|
||||
- `$3` - Terzo argomento
|
||||
- E cosi via...
|
||||
|
||||
Per esempio:
|
||||
|
||||
```md title=".opencode/commands/create-file.md"
|
||||
---
|
||||
description: Create a new file with content
|
||||
---
|
||||
|
||||
Create a file named $1 in the directory $2
|
||||
with the following content: $3
|
||||
```
|
||||
|
||||
Esegui il comando:
|
||||
|
||||
```bash frame="none"
|
||||
/create-file config.json src "{ \"key\": \"value\" }"
|
||||
```
|
||||
|
||||
Questo sostituisce:
|
||||
|
||||
- `$1` con `config.json`
|
||||
- `$2` con `src`
|
||||
- `$3` con `{ "key": "value" }`
|
||||
|
||||
---
|
||||
|
||||
### Output della shell
|
||||
|
||||
Usa _!`command`_ per inserire nel prompt l'output di un [comando bash](/docs/tui#bash-commands).
|
||||
|
||||
Per esempio, per creare un comando personalizzato che analizzi la copertura dei test:
|
||||
|
||||
```md title=".opencode/commands/analyze-coverage.md"
|
||||
---
|
||||
description: Analyze test coverage
|
||||
---
|
||||
|
||||
Here are the current test results:
|
||||
!`npm test`
|
||||
|
||||
Based on these results, suggest improvements to increase coverage.
|
||||
```
|
||||
|
||||
Oppure per rivedere modifiche recenti:
|
||||
|
||||
```md title=".opencode/commands/review-changes.md"
|
||||
---
|
||||
description: Review recent changes
|
||||
---
|
||||
|
||||
Recent git commits:
|
||||
!`git log --oneline -10`
|
||||
|
||||
Review these changes and suggest any improvements.
|
||||
```
|
||||
|
||||
I comandi vengono eseguiti nella root del progetto e il loro output diventa parte del prompt.
|
||||
|
||||
---
|
||||
|
||||
### Riferimenti ai file
|
||||
|
||||
Includi file nel comando usando `@` seguito dal nome del file.
|
||||
|
||||
```md title=".opencode/commands/review-component.md"
|
||||
---
|
||||
description: Review component
|
||||
---
|
||||
|
||||
Review the component in @src/components/Button.tsx.
|
||||
Check for performance issues and suggest improvements.
|
||||
```
|
||||
|
||||
Il contenuto del file viene incluso automaticamente nel prompt.
|
||||
|
||||
---
|
||||
|
||||
## Opzioni
|
||||
|
||||
Vediamo le opzioni di configurazione nel dettaglio.
|
||||
|
||||
---
|
||||
|
||||
### Modello di prompt
|
||||
|
||||
L'opzione `template` definisce il prompt che verra inviato all'LLM quando il comando viene eseguito.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"command": {
|
||||
"test": {
|
||||
"template": "Run the full test suite with coverage report and show any failures.\nFocus on the failing tests and suggest fixes."
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Questa e un'opzione di config **obbligatoria**.
|
||||
|
||||
---
|
||||
|
||||
### Descrizione
|
||||
|
||||
Usa l'opzione `description` per fornire una breve descrizione di cosa fa il comando.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"command": {
|
||||
"test": {
|
||||
"description": "Run tests with coverage"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Questo viene mostrato come descrizione nella TUI quando digiti il comando.
|
||||
|
||||
---
|
||||
|
||||
### Agente
|
||||
|
||||
Usa la config `agent` per specificare opzionalmente quale [agente](/docs/agents) deve eseguire il comando.
|
||||
Se e un [subagent](/docs/agents/#subagents), il comando attiva per default l'invocazione di un subagent.
|
||||
Per disabilitare questo comportamento, imposta `subtask` a `false`.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"command": {
|
||||
"review": {
|
||||
"agent": "plan"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Questa e un'opzione di config **opzionale**. Se non specificata, usa l'agente corrente.
|
||||
|
||||
---
|
||||
|
||||
### Sottotask
|
||||
|
||||
Usa il booleano `subtask` per forzare il comando ad attivare l'invocazione di un [subagent](/docs/agents/#subagents).
|
||||
E utile se vuoi evitare che il comando inquini il contesto principale e **forza** l'agente ad agire come subagent,
|
||||
anche se `mode` e impostato su `primary` nella configurazione dell'[agente](/docs/agents).
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"command": {
|
||||
"analyze": {
|
||||
"subtask": true
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Questa e un'opzione di config **opzionale**.
|
||||
|
||||
---
|
||||
|
||||
### Modello
|
||||
|
||||
Usa la config `model` per sovrascrivere il modello predefinito per questo comando.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"command": {
|
||||
"analyze": {
|
||||
"model": "anthropic/claude-3-5-sonnet-20241022"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Questa e un'opzione di config **opzionale**.
|
||||
|
||||
---
|
||||
|
||||
## Integrati
|
||||
|
||||
opencode include diversi comandi integrati come `/init`, `/undo`, `/redo`, `/share`, `/help`; [scopri di piu](/docs/tui#commands).
|
||||
|
||||
:::note
|
||||
I comandi personalizzati possono sovrascrivere quelli integrati.
|
||||
:::
|
||||
|
||||
Se definisci un comando personalizzato con lo stesso nome, sovrascrivera il comando integrato.
|
||||
681
packages/web/src/content/docs/it/config.mdx
Normal file
681
packages/web/src/content/docs/it/config.mdx
Normal file
@@ -0,0 +1,681 @@
|
||||
---
|
||||
title: Config
|
||||
description: Usa la config JSON di OpenCode.
|
||||
---
|
||||
|
||||
Puoi configurare OpenCode usando un file di configurazione JSON.
|
||||
|
||||
---
|
||||
|
||||
## Formato
|
||||
|
||||
OpenCode supporta sia **JSON** sia **JSONC** (JSON con commenti).
|
||||
|
||||
```jsonc title="opencode.jsonc"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
// Theme configuration
|
||||
"theme": "opencode",
|
||||
"model": "anthropic/claude-sonnet-4-5",
|
||||
"autoupdate": true,
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Posizioni
|
||||
|
||||
Puoi mettere la configurazione in diverse posizioni e ognuna ha un ordine di precedenza diverso.
|
||||
|
||||
:::note
|
||||
I file di configurazione vengono **uniti (merge)**, non sostituiti.
|
||||
:::
|
||||
|
||||
I file di configurazione vengono uniti (merge), non sostituiti. Le impostazioni provenienti dalle posizioni qui sotto vengono combinate. Le configurazioni caricate dopo sovrascrivono quelle precedenti solo per le chiavi in conflitto. Le impostazioni non in conflitto vengono preservate.
|
||||
|
||||
Per esempio, se la tua configurazione globale imposta `theme: "opencode"` e `autoupdate: true`, e la configurazione del progetto imposta `model: "anthropic/claude-sonnet-4-5"`, la configurazione finale includera tutte e tre le impostazioni.
|
||||
|
||||
---
|
||||
|
||||
### Ordine di precedenza
|
||||
|
||||
Le sorgenti di configurazione vengono caricate in questo ordine (le successive sovrascrivono le precedenti):
|
||||
|
||||
1. **Config remota** (da `.well-known/opencode`) - default dell'organizzazione
|
||||
2. **Config globale** (`~/.config/opencode/opencode.json`) - preferenze utente
|
||||
3. **Config personalizzata** (variabile d'ambiente `OPENCODE_CONFIG`) - sovrascritture personalizzate
|
||||
4. **Config di progetto** (`opencode.json` nel progetto) - impostazioni specifiche del progetto
|
||||
5. **Directory `.opencode`** - agenti, comandi, plugin
|
||||
6. **Config inline** (variabile d'ambiente `OPENCODE_CONFIG_CONTENT`) - sovrascritture a runtime
|
||||
|
||||
Questo significa che la configurazione di progetto puo sovrascrivere i default globali, e la configurazione globale puo sovrascrivere i default remoti dell'organizzazione.
|
||||
|
||||
:::note
|
||||
Le directory `.opencode` e `~/.config/opencode` usano **nomi al plurale** per le sottodirectory: `agents/`, `commands/`, `modes/`, `plugins/`, `skills/`, `tools/` e `themes/`. I nomi al singolare (ad es. `agent/`) sono supportati per retrocompatibilita.
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
### Remota
|
||||
|
||||
Le organizzazioni possono fornire una configurazione predefinita tramite l'endpoint `.well-known/opencode`. Viene recuperata automaticamente quando ti autentichi con un provider che lo supporta.
|
||||
|
||||
La configurazione remota viene caricata per prima e fa da livello base. Tutte le altre sorgenti (globale, progetto) possono sovrascrivere questi default.
|
||||
|
||||
Per esempio, se la tua organizzazione fornisce server MCP disabilitati per impostazione predefinita:
|
||||
|
||||
```json title="Remote config from .well-known/opencode"
|
||||
{
|
||||
"mcp": {
|
||||
"jira": {
|
||||
"type": "remote",
|
||||
"url": "https://jira.example.com/mcp",
|
||||
"enabled": false
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Puoi abilitare server specifici nella tua configurazione locale:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"mcp": {
|
||||
"jira": {
|
||||
"type": "remote",
|
||||
"url": "https://jira.example.com/mcp",
|
||||
"enabled": true
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Globale
|
||||
|
||||
Metti la configurazione globale di OpenCode in `~/.config/opencode/opencode.json`. Usa la configurazione globale per preferenze valide per l'utente (ad es. temi, provider o keybind).
|
||||
|
||||
La configurazione globale sovrascrive i default remoti dell'organizzazione.
|
||||
|
||||
---
|
||||
|
||||
### Per progetto
|
||||
|
||||
Aggiungi `opencode.json` nella root del progetto. La configurazione di progetto ha la precedenza piu alta tra i file standard: sovrascrive sia la configurazione globale sia quella remota.
|
||||
|
||||
:::tip
|
||||
Metti la configurazione specifica del progetto nella root del progetto.
|
||||
:::
|
||||
|
||||
Quando OpenCode si avvia, cerca un file di configurazione nella directory corrente oppure risale fino alla directory Git piu vicina.
|
||||
|
||||
Questo file puo essere tranquillamente versionato in Git e usa lo stesso schema di quello globale.
|
||||
|
||||
---
|
||||
|
||||
### Percorso personalizzato
|
||||
|
||||
Specifica un percorso personalizzato per il file di configurazione usando la variabile d'ambiente `OPENCODE_CONFIG`.
|
||||
|
||||
```bash
|
||||
export OPENCODE_CONFIG=/path/to/my/custom-config.json
|
||||
opencode run "Hello world"
|
||||
```
|
||||
|
||||
La configurazione personalizzata viene caricata tra quella globale e quella di progetto nell'ordine di precedenza.
|
||||
|
||||
---
|
||||
|
||||
### Directory personalizzata
|
||||
|
||||
Specifica una directory di configurazione personalizzata usando la variabile d'ambiente `OPENCODE_CONFIG_DIR`. Questa directory verra usata per cercare agenti, comandi, modalita e plugin proprio come la directory standard `.opencode` e dovrebbe seguire la stessa struttura.
|
||||
|
||||
```bash
|
||||
export OPENCODE_CONFIG_DIR=/path/to/my/config-directory
|
||||
opencode run "Hello world"
|
||||
```
|
||||
|
||||
La directory personalizzata viene caricata dopo la configurazione globale e le directory `.opencode`, quindi **puo sovrascrivere** le loro impostazioni.
|
||||
|
||||
---
|
||||
|
||||
## Schema
|
||||
|
||||
Il file di configurazione ha uno schema definito in [**`opencode.ai/config.json`**](https://opencode.ai/config.json).
|
||||
|
||||
Il tuo editor dovrebbe poter validare e suggerire l'autocompletamento in base allo schema.
|
||||
|
||||
---
|
||||
|
||||
### TUI
|
||||
|
||||
Puoi configurare impostazioni specifiche della TUI tramite l'opzione `tui`.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"tui": {
|
||||
"scroll_speed": 3,
|
||||
"scroll_acceleration": {
|
||||
"enabled": true
|
||||
},
|
||||
"diff_style": "auto"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Opzioni disponibili:
|
||||
|
||||
- `scroll_acceleration.enabled` - Abilita l'accelerazione di scorrimento in stile macOS. **Ha precedenza su `scroll_speed`.**
|
||||
- `scroll_speed` - Moltiplicatore personalizzato della velocita di scorrimento (predefinito: `3`, minimo: `1`). Ignorato se `scroll_acceleration.enabled` e `true`.
|
||||
- `diff_style` - Controlla la resa delle diff. `"auto"` si adatta alla larghezza del terminale, `"stacked"` mostra sempre una singola colonna.
|
||||
|
||||
[Scopri di piu sull'uso della TUI](/docs/tui).
|
||||
|
||||
---
|
||||
|
||||
### Server
|
||||
|
||||
Puoi configurare le impostazioni del server per i comandi `opencode serve` e `opencode web` tramite l'opzione `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"]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Opzioni disponibili:
|
||||
|
||||
- `port` - Porta su cui ascoltare.
|
||||
- `hostname` - Nome host su cui ascoltare. Quando `mdns` e abilitato e non e impostato alcun hostname, il default e `0.0.0.0`.
|
||||
- `mdns` - Abilita la scoperta del servizio mDNS. Questo permette ad altri dispositivi sulla rete di scoprire il tuo server OpenCode.
|
||||
- `mdnsDomain` - Nome di dominio personalizzato per il servizio mDNS. Predefinito: `opencode.local`. Utile per eseguire piu istanze sulla stessa rete.
|
||||
- `cors` - Origini aggiuntive da consentire per CORS quando usi il server HTTP da un client basato su browser. I valori devono essere origini complete (schema + host + porta opzionale), ad es. `https://app.example.com`.
|
||||
|
||||
[Scopri di piu sul server](/docs/server).
|
||||
|
||||
---
|
||||
|
||||
### Strumenti
|
||||
|
||||
Puoi gestire gli strumenti che un LLM puo usare tramite l'opzione `tools`.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"tools": {
|
||||
"write": false,
|
||||
"bash": false
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
[Scopri di piu sugli strumenti](/docs/tools).
|
||||
|
||||
---
|
||||
|
||||
### Modelli
|
||||
|
||||
Puoi configurare provider e modelli da usare in OpenCode tramite le opzioni `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"
|
||||
}
|
||||
```
|
||||
|
||||
The `small_model` option configures a separate model for lightweight tasks like title generation. By default, OpenCode tries to use a cheaper model if one is available from your provider, otherwise it falls back to your main model.
|
||||
|
||||
Provider options can include `timeout` and `setCacheKey`:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"provider": {
|
||||
"anthropic": {
|
||||
"options": {
|
||||
"timeout": 600000,
|
||||
"setCacheKey": true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
- `timeout` - Timeout della richiesta in millisecondi (predefinito: 300000). Imposta a `false` per disabilitare.
|
||||
- `setCacheKey` - Assicura che venga sempre impostata una cache key per il provider indicato.
|
||||
|
||||
Puoi anche configurare i [modelli locali](/docs/models#local). [Scopri di piu](/docs/models).
|
||||
|
||||
---
|
||||
|
||||
#### Opzioni specifiche del provider
|
||||
|
||||
Alcuni provider supportano opzioni di configurazione aggiuntive oltre alle impostazioni generiche `timeout` e `apiKey`.
|
||||
|
||||
##### Amazon Bedrock
|
||||
|
||||
Amazon Bedrock supporta una configurazione specifica per 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` - Regione AWS per Bedrock (default: variabile d'ambiente `AWS_REGION` oppure `us-east-1`)
|
||||
- `profile` - Profilo AWS nominato da `~/.aws/credentials` (default: variabile d'ambiente `AWS_PROFILE`)
|
||||
- `endpoint` - URL endpoint personalizzato per gli endpoint VPC. E un alias dell'opzione generica `baseURL` usando la terminologia AWS. Se sono specificati sia `endpoint` sia `baseURL`, `endpoint` ha precedenza.
|
||||
|
||||
:::note
|
||||
I bearer token (`AWS_BEARER_TOKEN_BEDROCK` o `/connect`) hanno precedenza sull'autenticazione basata su profilo. Vedi [ordine di precedenza dell'autenticazione](/docs/providers#authentication-precedence) per i dettagli.
|
||||
:::
|
||||
|
||||
[Scopri di piu sulla configurazione di Amazon Bedrock](/docs/providers#amazon-bedrock).
|
||||
|
||||
---
|
||||
|
||||
### Temi
|
||||
|
||||
Puoi configurare il tema da usare in OpenCode tramite l'opzione `theme`.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"theme": ""
|
||||
}
|
||||
```
|
||||
|
||||
[Scopri di piu](/docs/themes).
|
||||
|
||||
---
|
||||
|
||||
### Agenti
|
||||
|
||||
Puoi configurare agenti specializzati per task specifici tramite l'opzione `agent`.
|
||||
|
||||
```jsonc title="opencode.jsonc"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"agent": {
|
||||
"code-reviewer": {
|
||||
"description": "Reviews code for best practices and potential issues",
|
||||
"model": "anthropic/claude-sonnet-4-5",
|
||||
"prompt": "You are a code reviewer. Focus on security, performance, and maintainability.",
|
||||
"tools": {
|
||||
// Disable file modification tools for review-only agent
|
||||
"write": false,
|
||||
"edit": false,
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
Puoi anche definire agenti usando file markdown in `~/.config/opencode/agents/` o `.opencode/agents/`. [Scopri di piu](/docs/agents).
|
||||
|
||||
---
|
||||
|
||||
### Agente predefinito
|
||||
|
||||
Puoi impostare l'agente predefinito usando l'opzione `default_agent`. Questo determina quale agente viene usato quando non ne specifichi uno esplicitamente.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"default_agent": "plan"
|
||||
}
|
||||
```
|
||||
|
||||
L'agente predefinito deve essere un agente primary (non un subagent). Puo essere un agente integrato come `"build"` o `"plan"`, oppure un [agente personalizzato](/docs/agents) che hai definito. Se l'agente specificato non esiste o e un subagent, OpenCode fara fallback su `"build"` mostrando un avviso.
|
||||
|
||||
Questa impostazione si applica a tutte le interfacce: TUI, CLI (`opencode run`), app desktop e GitHub Action.
|
||||
|
||||
---
|
||||
|
||||
### Condivisione
|
||||
|
||||
Puoi configurare la funzione di [condivisione](/docs/share) tramite l'opzione `share`.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"share": "manual"
|
||||
}
|
||||
```
|
||||
|
||||
Valori supportati:
|
||||
|
||||
- `"manual"` - Consenti la condivisione manuale tramite comandi (predefinito)
|
||||
- `"auto"` - Condividi automaticamente le nuove conversazioni
|
||||
- `"disabled"` - Disabilita completamente la condivisione
|
||||
|
||||
Per impostazione predefinita, la condivisione e in modalita manuale e devi condividere esplicitamente le conversazioni usando il comando `/share`.
|
||||
|
||||
---
|
||||
|
||||
### Comandi
|
||||
|
||||
Puoi configurare comandi personalizzati per task ripetitivi tramite l'opzione `command`.
|
||||
|
||||
```jsonc title="opencode.jsonc"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"command": {
|
||||
"test": {
|
||||
"template": "Run the full test suite with coverage report and show any failures.\nFocus on the failing tests and suggest fixes.",
|
||||
"description": "Run tests with coverage",
|
||||
"agent": "build",
|
||||
"model": "anthropic/claude-haiku-4-5",
|
||||
},
|
||||
"component": {
|
||||
"template": "Create a new React component named $ARGUMENTS with TypeScript support.\nInclude proper typing and basic structure.",
|
||||
"description": "Create a new component",
|
||||
},
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
Puoi anche definire comandi usando file markdown in `~/.config/opencode/commands/` o `.opencode/commands/`. [Scopri di piu](/docs/commands).
|
||||
|
||||
---
|
||||
|
||||
### Scorciatoie
|
||||
|
||||
Puoi personalizzare i keybind tramite l'opzione `keybinds`.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"keybinds": {}
|
||||
}
|
||||
```
|
||||
|
||||
[Scopri di piu](/docs/keybinds).
|
||||
|
||||
---
|
||||
|
||||
### Aggiornamenti automatici
|
||||
|
||||
OpenCode scarichera automaticamente eventuali aggiornamenti quando si avvia. Puoi disabilitare questa funzione con l'opzione `autoupdate`.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"autoupdate": false
|
||||
}
|
||||
```
|
||||
|
||||
Se non vuoi aggiornamenti automatici ma vuoi essere avvisato quando e disponibile una nuova versione, imposta `autoupdate` a `"notify"`.
|
||||
Nota che questo funziona solo se non e stato installato con un package manager come Homebrew.
|
||||
|
||||
---
|
||||
|
||||
### Formatter
|
||||
|
||||
Puoi configurare i formatter di codice tramite l'opzione `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"]
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
[Scopri di piu sui formatter](/docs/formatters).
|
||||
|
||||
---
|
||||
|
||||
### Permessi
|
||||
|
||||
Per impostazione predefinita, opencode **consente tutte le operazioni** senza richiedere un'approvazione esplicita. Puoi cambiarlo usando l'opzione `permission`.
|
||||
|
||||
Per esempio, per fare in modo che gli strumenti `edit` e `bash` richiedano l'approvazione dell'utente:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"edit": "ask",
|
||||
"bash": "ask"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
[Scopri di piu sui permessi](/docs/permissions).
|
||||
|
||||
---
|
||||
|
||||
### Compattazione
|
||||
|
||||
Puoi controllare il comportamento di compattazione del contesto tramite l'opzione `compaction`.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"compaction": {
|
||||
"auto": true,
|
||||
"prune": true
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
- `auto` - Compatta automaticamente la sessione quando il contesto e pieno (predefinito: `true`).
|
||||
- `prune` - Rimuove output vecchi degli strumenti per risparmiare token (predefinito: `true`).
|
||||
|
||||
---
|
||||
|
||||
### Monitoraggio file
|
||||
|
||||
Puoi configurare i pattern di ignoramento del file watcher tramite l'opzione `watcher`.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"watcher": {
|
||||
"ignore": ["node_modules/**", "dist/**", ".git/**"]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
I pattern seguono la sintassi glob. Usali per escludere directory rumorose dal monitoraggio dei file.
|
||||
|
||||
---
|
||||
|
||||
### Server MCP
|
||||
|
||||
Puoi configurare i server MCP che vuoi usare tramite l'opzione `mcp`.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mcp": {}
|
||||
}
|
||||
```
|
||||
|
||||
[Scopri di piu](/docs/mcp-servers).
|
||||
|
||||
---
|
||||
|
||||
### Plugin
|
||||
|
||||
[I plugin](/docs/plugins) estendono OpenCode con strumenti personalizzati, hook e integrazioni.
|
||||
|
||||
Metti i file dei plugin in `.opencode/plugins/` o `~/.config/opencode/plugins/`. Puoi anche caricare plugin da npm tramite l'opzione `plugin`.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"plugin": ["opencode-helicone-session", "@my-org/custom-plugin"]
|
||||
}
|
||||
```
|
||||
|
||||
[Scopri di piu](/docs/plugins).
|
||||
|
||||
---
|
||||
|
||||
### Istruzioni
|
||||
|
||||
Puoi configurare le istruzioni per il modello che stai usando tramite l'opzione `instructions`.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"instructions": ["CONTRIBUTING.md", "docs/guidelines.md", ".cursor/rules/*.md"]
|
||||
}
|
||||
```
|
||||
|
||||
Accetta un array di percorsi e pattern glob verso file di istruzioni. [Scopri di piu
|
||||
sulle regole](/docs/rules).
|
||||
|
||||
---
|
||||
|
||||
### Provider disabilitati
|
||||
|
||||
Puoi disabilitare i provider caricati automaticamente tramite l'opzione `disabled_providers`. E utile quando vuoi impedire il caricamento di alcuni provider anche se le credenziali sono disponibili.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"disabled_providers": ["openai", "gemini"]
|
||||
}
|
||||
```
|
||||
|
||||
:::note
|
||||
`disabled_providers` ha priorita su `enabled_providers`.
|
||||
:::
|
||||
|
||||
L'opzione `disabled_providers` accetta un array di ID provider. Quando un provider e disabilitato:
|
||||
|
||||
- Non verra caricato anche se sono impostate variabili d'ambiente.
|
||||
- Non verra caricato anche se le chiavi API sono configurate tramite il comando `/connect`.
|
||||
- I modelli del provider non appariranno nella lista di selezione dei modelli.
|
||||
|
||||
---
|
||||
|
||||
### Provider abilitati
|
||||
|
||||
Puoi specificare un'allowlist di provider tramite l'opzione `enabled_providers`. Se impostata, solo i provider indicati verranno abilitati e tutti gli altri saranno ignorati.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"enabled_providers": ["anthropic", "openai"]
|
||||
}
|
||||
```
|
||||
|
||||
E utile quando vuoi limitare OpenCode a usare solo alcuni provider invece di disabilitarli uno per uno.
|
||||
|
||||
:::note
|
||||
`disabled_providers` ha priorita su `enabled_providers`.
|
||||
:::
|
||||
|
||||
Se un provider appare sia in `enabled_providers` sia in `disabled_providers`, `disabled_providers` ha priorita per retrocompatibilita.
|
||||
|
||||
---
|
||||
|
||||
### Sperimentale
|
||||
|
||||
La chiave `experimental` contiene opzioni in sviluppo attivo.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"experimental": {}
|
||||
}
|
||||
```
|
||||
|
||||
:::caution
|
||||
Le opzioni sperimentali non sono stabili. Possono cambiare o essere rimosse senza preavviso.
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
## Variabili
|
||||
|
||||
Puoi usare la sostituzione di variabili nei file di configurazione per referenziare variabili d'ambiente e contenuti di file.
|
||||
|
||||
---
|
||||
|
||||
### Variabili d'ambiente
|
||||
|
||||
Usa `{env:VARIABLE_NAME}` per sostituire variabili d'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 la variabile d'ambiente non e impostata, verra sostituita con una stringa vuota.
|
||||
|
||||
---
|
||||
|
||||
### File
|
||||
|
||||
Usa `{file:path/to/file}` per sostituire il contenuto di un file:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"instructions": ["./custom-instructions.md"],
|
||||
"provider": {
|
||||
"openai": {
|
||||
"options": {
|
||||
"apiKey": "{file:~/.secrets/openai-key}"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
I percorsi dei file possono essere:
|
||||
|
||||
- Relativi alla directory del file di configurazione
|
||||
- Oppure percorsi assoluti che iniziano con `/` o `~`
|
||||
|
||||
Sono utili per:
|
||||
|
||||
- Tenere dati sensibili (come chiavi API) in file separati.
|
||||
- Includere file di istruzioni grandi senza appesantire la configurazione.
|
||||
- Condividere snippet di configurazione comuni tra piu file di configurazione.
|
||||
170
packages/web/src/content/docs/it/custom-tools.mdx
Normal file
170
packages/web/src/content/docs/it/custom-tools.mdx
Normal file
@@ -0,0 +1,170 @@
|
||||
---
|
||||
title: Strumenti personalizzati
|
||||
description: Crea strumenti che l'LLM puo chiamare in opencode.
|
||||
---
|
||||
|
||||
Gli strumenti personalizzati sono funzioni che crei e che l'LLM puo chiamare durante le conversazioni. Funzionano insieme agli [strumenti integrati](/docs/tools) di opencode come `read`, `write` e `bash`.
|
||||
|
||||
---
|
||||
|
||||
## Creating a tool
|
||||
|
||||
Gli strumenti sono definiti come file **TypeScript** o **JavaScript**. Tuttavia, la definizione dello strumento puo invocare script scritti in **qualsiasi linguaggio**: TypeScript o JavaScript vengono usati solo per la definizione in se.
|
||||
|
||||
---
|
||||
|
||||
### Location
|
||||
|
||||
Possono essere definiti:
|
||||
|
||||
- In locale, mettendoli nella directory `.opencode/tools/` del progetto.
|
||||
- Oppure in globale, mettendoli in `~/.config/opencode/tools/`.
|
||||
|
||||
---
|
||||
|
||||
### Structure
|
||||
|
||||
Il modo piu semplice per creare strumenti e usare l'helper `tool()` che fornisce type-safety e validazione.
|
||||
|
||||
```ts title=".opencode/tools/database.ts" {1}
|
||||
import { tool } from "@opencode-ai/plugin"
|
||||
|
||||
export default tool({
|
||||
description: "Query the project database",
|
||||
args: {
|
||||
query: tool.schema.string().describe("SQL query to execute"),
|
||||
},
|
||||
async execute(args) {
|
||||
// Your database logic here
|
||||
return `Executed query: ${args.query}`
|
||||
},
|
||||
})
|
||||
```
|
||||
|
||||
Il **nome del file** diventa il **nome dello strumento**. L'esempio sopra crea lo strumento `database`.
|
||||
|
||||
---
|
||||
|
||||
#### Multiple tools per file
|
||||
|
||||
Puoi anche esportare piu strumenti da un singolo file. Ogni export diventa **uno strumento separato** con nome **`<filename>_<exportname>`**:
|
||||
|
||||
```ts title=".opencode/tools/math.ts"
|
||||
import { tool } from "@opencode-ai/plugin"
|
||||
|
||||
export const add = tool({
|
||||
description: "Add two numbers",
|
||||
args: {
|
||||
a: tool.schema.number().describe("First number"),
|
||||
b: tool.schema.number().describe("Second number"),
|
||||
},
|
||||
async execute(args) {
|
||||
return args.a + args.b
|
||||
},
|
||||
})
|
||||
|
||||
export const multiply = tool({
|
||||
description: "Multiply two numbers",
|
||||
args: {
|
||||
a: tool.schema.number().describe("First number"),
|
||||
b: tool.schema.number().describe("Second number"),
|
||||
},
|
||||
async execute(args) {
|
||||
return args.a * args.b
|
||||
},
|
||||
})
|
||||
```
|
||||
|
||||
Questo crea due strumenti: `math_add` e `math_multiply`.
|
||||
|
||||
---
|
||||
|
||||
### Arguments
|
||||
|
||||
Puoi usare `tool.schema`, che e semplicemente [Zod](https://zod.dev), per definire i tipi degli argomenti.
|
||||
|
||||
```ts "tool.schema"
|
||||
args: {
|
||||
query: tool.schema.string().describe("SQL query to execute")
|
||||
}
|
||||
```
|
||||
|
||||
Puoi anche importare [Zod](https://zod.dev) direttamente e restituire un oggetto semplice:
|
||||
|
||||
```ts {6}
|
||||
import { z } from "zod"
|
||||
|
||||
export default {
|
||||
description: "Tool description",
|
||||
args: {
|
||||
param: z.string().describe("Parameter description"),
|
||||
},
|
||||
async execute(args, context) {
|
||||
// Tool implementation
|
||||
return "result"
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Context
|
||||
|
||||
Gli strumenti ricevono un contesto sulla sessione corrente:
|
||||
|
||||
```ts title=".opencode/tools/project.ts" {8}
|
||||
import { tool } from "@opencode-ai/plugin"
|
||||
|
||||
export default tool({
|
||||
description: "Get project information",
|
||||
args: {},
|
||||
async execute(args, context) {
|
||||
// Access context information
|
||||
const { agent, sessionID, messageID, directory, worktree } = context
|
||||
return `Agent: ${agent}, Session: ${sessionID}, Message: ${messageID}, Directory: ${directory}, Worktree: ${worktree}`
|
||||
},
|
||||
})
|
||||
```
|
||||
|
||||
Usa `context.directory` per la working directory della sessione.
|
||||
Usa `context.worktree` per la root del worktree git.
|
||||
|
||||
---
|
||||
|
||||
## Examples
|
||||
|
||||
### Scrivi uno strumento in Python
|
||||
|
||||
Puoi scrivere gli strumenti in qualunque linguaggio. Ecco un esempio che somma due numeri usando Python.
|
||||
|
||||
Per prima cosa, crea lo strumento come script Python:
|
||||
|
||||
```python title=".opencode/tools/add.py"
|
||||
import sys
|
||||
|
||||
a = int(sys.argv[1])
|
||||
b = int(sys.argv[2])
|
||||
print(a + b)
|
||||
```
|
||||
|
||||
Poi crea la definizione dello strumento che lo invoca:
|
||||
|
||||
```ts title=".opencode/tools/python-add.ts" {10}
|
||||
import { tool } from "@opencode-ai/plugin"
|
||||
import path from "path"
|
||||
|
||||
export default tool({
|
||||
description: "Add two numbers using Python",
|
||||
args: {
|
||||
a: tool.schema.number().describe("First number"),
|
||||
b: tool.schema.number().describe("Second number"),
|
||||
},
|
||||
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()
|
||||
},
|
||||
})
|
||||
```
|
||||
|
||||
Qui usiamo l'utility [`Bun.$`](https://bun.com/docs/runtime/shell) per eseguire lo script Python.
|
||||
76
packages/web/src/content/docs/it/ecosystem.mdx
Normal file
76
packages/web/src/content/docs/it/ecosystem.mdx
Normal file
@@ -0,0 +1,76 @@
|
||||
---
|
||||
title: Ecosistema
|
||||
description: Progetti e integrazioni costruiti con OpenCode.
|
||||
---
|
||||
|
||||
Una raccolta di progetti della comunita costruiti su OpenCode.
|
||||
|
||||
:::note
|
||||
Vuoi aggiungere il tuo progetto legato a OpenCode a questa lista? Apri una PR.
|
||||
:::
|
||||
|
||||
Puoi anche dare un'occhiata a [awesome-opencode](https://github.com/awesome-opencode/awesome-opencode) e [opencode.cafe](https://opencode.cafe), una comunita che aggrega ecosistema e community.
|
||||
|
||||
---
|
||||
|
||||
## Plugins
|
||||
|
||||
| Nome | Descrizione |
|
||||
| --------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- |
|
||||
| [opencode-daytona](https://github.com/jamesmurdza/daytona/blob/main/guides/typescript/opencode/README.md) | Esegue automaticamente sessioni OpenCode in sandbox Daytona isolate con sync git e anteprime live |
|
||||
| [opencode-helicone-session](https://github.com/H2Shami/opencode-helicone-session) | Inietta automaticamente gli header di sessione Helicone per raggruppare le richieste |
|
||||
| [opencode-type-inject](https://github.com/nick-vi/opencode-type-inject) | Inietta automaticamente tipi TypeScript/Svelte nelle letture dei file con tool di lookup |
|
||||
| [opencode-openai-codex-auth](https://github.com/numman-ali/opencode-openai-codex-auth) | Usa il tuo abbonamento ChatGPT Plus/Pro invece dei crediti API |
|
||||
| [opencode-gemini-auth](https://github.com/jenslys/opencode-gemini-auth) | Usa il tuo piano Gemini esistente invece della fatturazione API |
|
||||
| [opencode-antigravity-auth](https://github.com/NoeFabris/opencode-antigravity-auth) | Usa i modelli gratuiti di Antigravity invece della fatturazione API |
|
||||
| [opencode-devcontainers](https://github.com/athal7/opencode-devcontainers) | Isolamento devcontainer multi-branch con shallow clone e porte assegnate automaticamente |
|
||||
| [opencode-google-antigravity-auth](https://github.com/shekohex/opencode-google-antigravity-auth) | Plugin OAuth Google Antigravity, con supporto a Google Search e gestione API piu robusta |
|
||||
| [opencode-dynamic-context-pruning](https://github.com/Tarquinen/opencode-dynamic-context-pruning) | Ottimizza l'uso dei token eliminando output obsoleti degli strumenti |
|
||||
| [opencode-websearch-cited](https://github.com/ghoulr/opencode-websearch-cited.git) | Aggiunge supporto websearch nativo per provider supportati con stile grounded di Google |
|
||||
| [opencode-pty](https://github.com/shekohex/opencode-pty.git) | Permette agli agenti AI di eseguire processi in background in una PTY e inviare input interattivo |
|
||||
| [opencode-shell-strategy](https://github.com/JRedeker/opencode-shell-strategy) | Istruzioni per comandi shell non interattivi: evita blocchi dovuti a operazioni dipendenti da TTY |
|
||||
| [opencode-wakatime](https://github.com/angristan/opencode-wakatime) | Traccia l'uso di OpenCode con Wakatime |
|
||||
| [opencode-md-table-formatter](https://github.com/franlol/opencode-md-table-formatter/tree/main) | Ripulisce le tabelle markdown prodotte dai LLM |
|
||||
| [opencode-morph-fast-apply](https://github.com/JRedeker/opencode-morph-fast-apply) | Editing del codice 10x piu veloce con Morph Fast Apply API e marker lazy edit |
|
||||
| [oh-my-opencode](https://github.com/code-yeongyu/oh-my-opencode) | Agenti in background, tool LSP/AST/MCP predefiniti, agenti curati, compatibile con Claude Code |
|
||||
| [opencode-notificator](https://github.com/panta82/opencode-notificator) | Notifiche desktop e avvisi sonori per le sessioni OpenCode |
|
||||
| [opencode-notifier](https://github.com/mohak34/opencode-notifier) | Notifiche desktop e avvisi sonori per eventi di permesso, completamento ed errore |
|
||||
| [opencode-zellij-namer](https://github.com/24601/opencode-zellij-namer) | Naming automatico delle sessioni Zellij basato sul contesto OpenCode |
|
||||
| [opencode-skillful](https://github.com/zenobi-us/opencode-skillful) | Permette agli agenti OpenCode di caricare prompt al bisogno con discovery e injection di skill |
|
||||
| [opencode-supermemory](https://github.com/supermemoryai/opencode-supermemory) | Memoria persistente tra sessioni usando Supermemory |
|
||||
| [@plannotator/opencode](https://github.com/backnotprop/plannotator/tree/main/apps/opencode-plugin) | Revisione interattiva dei piani con annotazione visiva e condivisione privata/offline |
|
||||
| [@openspoon/subtask2](https://github.com/spoons-and-mirrors/subtask2) | Estende opencode /commands in un sistema di orchestrazione con controllo di flusso granulare |
|
||||
| [opencode-scheduler](https://github.com/different-ai/opencode-scheduler) | Pianifica job ricorrenti con launchd (Mac) o systemd (Linux) usando sintassi cron |
|
||||
| [micode](https://github.com/vtemian/micode) | Workflow strutturato Brainstorm → Plan → Implement con continuita di sessione |
|
||||
| [octto](https://github.com/vtemian/octto) | UI browser interattiva per brainstorming AI con moduli multi-domanda |
|
||||
| [opencode-background-agents](https://github.com/kdcokenny/opencode-background-agents) | Agenti in background stile Claude Code con delega async e persistenza del contesto |
|
||||
| [opencode-notify](https://github.com/kdcokenny/opencode-notify) | Notifiche native del sistema per OpenCode: sai quando i task finiscono |
|
||||
| [opencode-workspace](https://github.com/kdcokenny/opencode-workspace) | Harness di orchestrazione multi-agente bundle: 16 componenti, una installazione |
|
||||
| [opencode-worktree](https://github.com/kdcokenny/opencode-worktree) | Git worktree senza attriti per OpenCode |
|
||||
|
||||
---
|
||||
|
||||
## Projects
|
||||
|
||||
| Nome | Descrizione |
|
||||
| ------------------------------------------------------------------------------------------ | -------------------------------------------------------------------- |
|
||||
| [kimaki](https://github.com/remorses/kimaki) | Bot Discord per controllare sessioni OpenCode, costruito sull'SDK |
|
||||
| [opencode.nvim](https://github.com/NickvanDyke/opencode.nvim) | Plugin Neovim per prompt consapevoli dell'editor, costruito sull'API |
|
||||
| [portal](https://github.com/hosenur/portal) | Web UI mobile-first per OpenCode su Tailscale/VPN |
|
||||
| [opencode plugin template](https://github.com/zenobi-us/opencode-plugin-template/) | Template per costruire plugin OpenCode |
|
||||
| [opencode.nvim](https://github.com/sudo-tee/opencode.nvim) | Frontend Neovim per opencode: un agente di coding AI da terminale |
|
||||
| [ai-sdk-provider-opencode-sdk](https://github.com/ben-vargas/ai-sdk-provider-opencode-sdk) | Provider Vercel AI SDK per usare OpenCode tramite @opencode-ai/sdk |
|
||||
| [OpenChamber](https://github.com/btriapitsyn/openchamber) | App Web/Desktop ed estensione VS Code per OpenCode |
|
||||
| [OpenCode-Obsidian](https://github.com/mtymek/opencode-obsidian) | Plugin Obsidian che integra OpenCode nella UI di Obsidian |
|
||||
| [OpenWork](https://github.com/different-ai/openwork) | Alternativa open source a Claude Cowork, alimentata da OpenCode |
|
||||
| [ocx](https://github.com/kdcokenny/ocx) | Gestore di estensioni OpenCode con profili portabili e isolati |
|
||||
| [CodeNomad](https://github.com/NeuralNomadsAI/CodeNomad) | App client Desktop, Web, Mobile e remota per OpenCode |
|
||||
|
||||
---
|
||||
|
||||
## Agents
|
||||
|
||||
| Nome | Descrizione |
|
||||
| ----------------------------------------------------------------- | --------------------------------------------------------- |
|
||||
| [Agentic](https://github.com/Cluster444/agentic) | Agenti AI modulari e comandi per uno sviluppo strutturato |
|
||||
| [opencode-agents](https://github.com/darrenhinde/opencode-agents) | Config, prompt, agenti e plugin per workflow migliorati |
|
||||
165
packages/web/src/content/docs/it/enterprise.mdx
Normal file
165
packages/web/src/content/docs/it/enterprise.mdx
Normal file
@@ -0,0 +1,165 @@
|
||||
---
|
||||
title: Enterprise
|
||||
description: Usa OpenCode in sicurezza nella tua organizzazione.
|
||||
---
|
||||
|
||||
import config from "../../../../config.mjs"
|
||||
export const email = `mailto:${config.email}`
|
||||
|
||||
OpenCode Enterprise e pensato per organizzazioni che vogliono assicurarsi che codice e dati non escano mai dalla propria infrastruttura. Questo e possibile grazie a una config centralizzata che si integra con SSO e con il gateway AI interno.
|
||||
|
||||
:::note
|
||||
OpenCode non memorizza alcun tuo codice o dato di contesto.
|
||||
:::
|
||||
|
||||
Per iniziare con OpenCode Enterprise:
|
||||
|
||||
1. Fai una prova interna con il tuo team.
|
||||
2. **<a href={email}>Contattaci</a>** per parlare di prezzi e opzioni di implementazione.
|
||||
|
||||
---
|
||||
|
||||
## Trial
|
||||
|
||||
OpenCode e open source e non memorizza alcun tuo codice o dato di contesto, quindi i tuoi sviluppatori possono semplicemente [iniziare](/docs/) e fare una prova.
|
||||
|
||||
---
|
||||
|
||||
### Data handling
|
||||
|
||||
**OpenCode non memorizza il tuo codice o i tuoi dati di contesto.** Tutta l'elaborazione avviene in locale o tramite chiamate API dirette al tuo provider AI.
|
||||
|
||||
Questo significa che, finche usi un provider di cui ti fidi o un gateway AI interno, puoi usare OpenCode in modo sicuro.
|
||||
|
||||
L'unica eccezione e la funzione opzionale `/share`.
|
||||
|
||||
---
|
||||
|
||||
#### Sharing conversations
|
||||
|
||||
Se un utente abilita la funzione `/share`, la conversazione e i dati associati vengono inviati al servizio che usiamo per ospitare queste pagine di condivisione su opencode.ai.
|
||||
|
||||
I dati sono serviti tramite la rete edge della nostra CDN e vengono messi in cache vicino ai tuoi utenti.
|
||||
|
||||
Ti consigliamo di disabilitarla durante la prova.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"share": "disabled"
|
||||
}
|
||||
```
|
||||
|
||||
[Learn more about sharing](/docs/share).
|
||||
|
||||
---
|
||||
|
||||
### Code ownership
|
||||
|
||||
**Sei proprietario di tutto il codice prodotto da OpenCode.** Non ci sono restrizioni di licenza o rivendicazioni di proprieta.
|
||||
|
||||
---
|
||||
|
||||
## Pricing
|
||||
|
||||
Usiamo un modello per-seat per OpenCode Enterprise. Se hai un tuo gateway LLM, non addebitiamo i token usati. Per maggiori dettagli su prezzi e opzioni di implementazione, **<a href={email}>contattaci</a>**.
|
||||
|
||||
---
|
||||
|
||||
## Deployment
|
||||
|
||||
Quando hai completato la prova e sei pronto a usare OpenCode nella tua organizzazione, puoi **<a href={email}>contattarci</a>** per discutere prezzi e opzioni di implementazione.
|
||||
|
||||
---
|
||||
|
||||
### Central Config
|
||||
|
||||
Possiamo configurare OpenCode per usare un'unica config centralizzata per tutta l'organizzazione.
|
||||
|
||||
Questa config centralizzata puo integrarsi col provider SSO e garantisce che tutti gli utenti accedano solo al gateway AI interno.
|
||||
|
||||
---
|
||||
|
||||
### SSO integration
|
||||
|
||||
Tramite la config centralizzata, OpenCode puo integrarsi col provider SSO della tua organizzazione per l'autenticazione.
|
||||
|
||||
Questo consente a OpenCode di ottenere credenziali per il gateway AI interno tramite il sistema di identity management esistente.
|
||||
|
||||
---
|
||||
|
||||
### Internal AI gateway
|
||||
|
||||
Con la config centralizzata, OpenCode puo anche essere configurato per usare solo il tuo gateway AI interno.
|
||||
|
||||
Puoi anche disabilitare tutti gli altri provider AI, assicurandoti che tutte le richieste passino dall'infrastruttura approvata dalla tua organizzazione.
|
||||
|
||||
---
|
||||
|
||||
### Self-hosting
|
||||
|
||||
Anche se consigliamo di disabilitare le pagine di condivisione per assicurarti che i dati non escano mai dall'organizzazione, possiamo anche aiutarti a ospitarle sulla tua infrastruttura.
|
||||
|
||||
Questa funzionalita e nella nostra roadmap. Se ti interessa, **<a href={email}>faccelo sapere</a>**.
|
||||
|
||||
---
|
||||
|
||||
## FAQ
|
||||
|
||||
<details>
|
||||
<summary>Che cos'e OpenCode Enterprise?</summary>
|
||||
|
||||
OpenCode Enterprise e pensato per organizzazioni che vogliono assicurarsi che codice e dati non escano mai dalla propria infrastruttura. Questo e possibile grazie a una config centralizzata che si integra con SSO e con il gateway AI interno.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>Come posso iniziare con OpenCode Enterprise?</summary>
|
||||
|
||||
Inizia semplicemente con una prova interna con il tuo team. Per impostazione predefinita OpenCode non memorizza il tuo codice o i dati di contesto, quindi e facile partire.
|
||||
|
||||
Poi **<a href={email}>contattaci</a>** per discutere prezzi e opzioni di implementazione.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>Come funziona il pricing enterprise?</summary>
|
||||
|
||||
Offriamo pricing enterprise per-seat. Se hai un tuo gateway LLM, non addebitiamo i token usati. Per maggiori dettagli, **<a href={email}>contattaci</a>** per un preventivo su misura in base alle esigenze della tua organizzazione.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>I miei dati sono al sicuro con OpenCode Enterprise?</summary>
|
||||
|
||||
Si. OpenCode non memorizza il tuo codice o i dati di contesto. Tutta l'elaborazione avviene in locale o tramite chiamate API dirette al tuo provider AI. Con config centralizzata e integrazione SSO, i dati restano all'interno dell'infrastruttura della tua organizzazione.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>Possiamo usare un registry NPM privato?</summary>
|
||||
|
||||
OpenCode supporta registry npm privati tramite il supporto nativo di Bun per i file `.npmrc`. Se la tua organizzazione usa un registry privato, come JFrog Artifactory, Nexus o simili, assicurati che gli sviluppatori siano autenticati prima di eseguire OpenCode.
|
||||
|
||||
Per configurare l'autenticazione col registry privato:
|
||||
|
||||
```bash
|
||||
npm login --registry=https://your-company.jfrog.io/api/npm/npm-virtual/
|
||||
```
|
||||
|
||||
Questo crea `~/.npmrc` con i dettagli di autenticazione. OpenCode lo rilevera automaticamente.
|
||||
|
||||
:::caution
|
||||
Devi essere autenticato nel registry privato prima di eseguire OpenCode.
|
||||
:::
|
||||
|
||||
In alternativa, puoi configurare manualmente un file `.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}
|
||||
```
|
||||
|
||||
Gli sviluppatori devono essere autenticati nel registry privato prima di eseguire OpenCode per garantire che i pacchetti possano essere installati dal registry enterprise.
|
||||
|
||||
</details>
|
||||
130
packages/web/src/content/docs/it/formatters.mdx
Normal file
130
packages/web/src/content/docs/it/formatters.mdx
Normal file
@@ -0,0 +1,130 @@
|
||||
---
|
||||
title: Formattatori
|
||||
description: OpenCode usa formattatori specifici per linguaggio.
|
||||
---
|
||||
|
||||
OpenCode formatta automaticamente i file dopo che vengono scritti o modificati usando formattatori specifici per linguaggio. Questo assicura che il codice generato segua lo stile del tuo progetto.
|
||||
|
||||
---
|
||||
|
||||
## Built-in
|
||||
|
||||
OpenCode include diversi formattatori integrati per linguaggi e framework popolari. Qui sotto trovi la lista dei formattatori, delle estensioni supportate e dei comandi o opzioni di config richiesti.
|
||||
|
||||
| Formattatore | Estensioni | Requisiti |
|
||||
| -------------------- | -------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- |
|
||||
| gofmt | .go | `gofmt` command available |
|
||||
| mix | .ex, .exs, .eex, .heex, .leex, .neex, .sface | `mix` command available |
|
||||
| prettier | .js, .jsx, .ts, .tsx, .html, .css, .md, .json, .yaml, and [more](https://prettier.io/docs/en/index.html) | `prettier` dependency in `package.json` |
|
||||
| biome | .js, .jsx, .ts, .tsx, .html, .css, .md, .json, .yaml, and [more](https://biomejs.dev/) | `biome.json(c)` config file |
|
||||
| zig | .zig, .zon | `zig` command available |
|
||||
| clang-format | .c, .cpp, .h, .hpp, .ino, and [more](https://clang.llvm.org/docs/ClangFormat.html) | `.clang-format` config file |
|
||||
| ktlint | .kt, .kts | `ktlint` command available |
|
||||
| ruff | .py, .pyi | `ruff` command available with config |
|
||||
| rustfmt | .rs | `rustfmt` command available |
|
||||
| cargofmt | .rs | `cargo fmt` command available |
|
||||
| uv | .py, .pyi | `uv` command available |
|
||||
| rubocop | .rb, .rake, .gemspec, .ru | `rubocop` command available |
|
||||
| standardrb | .rb, .rake, .gemspec, .ru | `standardrb` command available |
|
||||
| htmlbeautifier | .erb, .html.erb | `htmlbeautifier` command available |
|
||||
| air | .R | `air` command available |
|
||||
| dart | .dart | `dart` command available |
|
||||
| ocamlformat | .ml, .mli | `ocamlformat` command available and `.ocamlformat` config file |
|
||||
| terraform | .tf, .tfvars | `terraform` command available |
|
||||
| gleam | .gleam | `gleam` command available |
|
||||
| nixfmt | .nix | `nixfmt` command available |
|
||||
| shfmt | .sh, .bash | `shfmt` command available |
|
||||
| pint | .php | `laravel/pint` dependency in `composer.json` |
|
||||
| oxfmt (Experimental) | .js, .jsx, .ts, .tsx | `oxfmt` dependency in `package.json` and an [experimental env variable flag](/docs/cli/#experimental) |
|
||||
| ormolu | .hs | `ormolu` command available |
|
||||
|
||||
Quindi, se il progetto ha `prettier` in `package.json`, OpenCode lo usera automaticamente.
|
||||
|
||||
---
|
||||
|
||||
## How it works
|
||||
|
||||
Quando OpenCode scrive o modifica un file:
|
||||
|
||||
1. Controlla l'estensione del file rispetto a tutti i formattatori abilitati.
|
||||
2. Esegue il comando del formattatore appropriato sul file.
|
||||
3. Applica automaticamente le modifiche di formattazione.
|
||||
|
||||
Questo processo avviene in background, mantenendo lo stile del codice senza passaggi manuali.
|
||||
|
||||
---
|
||||
|
||||
## Configure
|
||||
|
||||
Puoi personalizzare i formattatori nella sezione `formatter` della config di OpenCode.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"formatter": {}
|
||||
}
|
||||
```
|
||||
|
||||
Ogni configurazione di formattatore supporta:
|
||||
|
||||
| Proprieta | Tipo | Descrizione |
|
||||
| ------------- | -------- | --------------------------------------------------- |
|
||||
| `disabled` | boolean | Impostalo a `true` per disabilitare il formattatore |
|
||||
| `command` | string[] | Il comando da eseguire per la formattazione |
|
||||
| `environment` | object | Variabili d'ambiente da impostare quando si esegue |
|
||||
| `extensions` | string[] | Estensioni file gestite da questo formattatore |
|
||||
|
||||
Vediamo alcuni esempi.
|
||||
|
||||
---
|
||||
|
||||
### Disabling formatters
|
||||
|
||||
Per disabilitare **tutti** i formattatori globalmente, imposta `formatter` a `false`:
|
||||
|
||||
```json title="opencode.json" {3}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"formatter": false
|
||||
}
|
||||
```
|
||||
|
||||
Per disabilitare un formattatore **specifico**, imposta `disabled` a `true`:
|
||||
|
||||
```json title="opencode.json" {5}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"formatter": {
|
||||
"prettier": {
|
||||
"disabled": true
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Custom formatters
|
||||
|
||||
Puoi sovrascrivere i formattatori integrati o aggiungerne di nuovi specificando comando, variabili d'ambiente ed estensioni file:
|
||||
|
||||
```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"]
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Il **placeholder `$FILE`** nel comando viene sostituito con il percorso del file in fase di formattazione.
|
||||
321
packages/web/src/content/docs/it/github.mdx
Normal file
321
packages/web/src/content/docs/it/github.mdx
Normal file
@@ -0,0 +1,321 @@
|
||||
---
|
||||
title: GitHub
|
||||
description: Usa OpenCode in issue e pull request su GitHub.
|
||||
---
|
||||
|
||||
OpenCode si integra nel tuo workflow GitHub. Menziona `/opencode` o `/oc` in un commento e OpenCode eseguira' i task dentro il runner di GitHub Actions.
|
||||
|
||||
---
|
||||
|
||||
## Funzionalita'
|
||||
|
||||
- **Triage delle issue**: chiedi a OpenCode di indagare su una issue e spiegartela.
|
||||
- **Fix e implementazioni**: chiedi a OpenCode di risolvere una issue o implementare una feature. Lavorera' su un nuovo branch e inviera' una PR con tutte le modifiche.
|
||||
- **Sicuro**: OpenCode gira all'interno dei runner GitHub.
|
||||
|
||||
---
|
||||
|
||||
## Installazione
|
||||
|
||||
Esegui il comando seguente in un progetto che si trova in un repo GitHub:
|
||||
|
||||
```bash
|
||||
opencode github install
|
||||
```
|
||||
|
||||
Questo ti guidera' nell'installazione della GitHub app, nella creazione del workflow e nella configurazione dei secret.
|
||||
|
||||
---
|
||||
|
||||
### Configurazione manuale
|
||||
|
||||
In alternativa, puoi configurarlo manualmente.
|
||||
|
||||
1. **Installa la GitHub app**
|
||||
|
||||
Vai su [**github.com/apps/opencode-agent**](https://github.com/apps/opencode-agent). Assicurati che sia installata sul repository di destinazione.
|
||||
|
||||
2. **Aggiungi il workflow**
|
||||
|
||||
Aggiungi il seguente file workflow in `.github/workflows/opencode.yml` nel tuo repo. Assicurati di impostare il `model` appropriato e le API key richieste in `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. **Salva le API key nei secret**
|
||||
|
||||
Nelle **impostazioni** della tua organizzazione o progetto, espandi **Secrets and variables** sulla sinistra e seleziona **Actions**. Poi aggiungi le API key richieste.
|
||||
|
||||
---
|
||||
|
||||
## Configurazione
|
||||
|
||||
- `model`: il modello da usare con OpenCode. Usa il formato `provider/model`. E' **obbligatorio**.
|
||||
- `agent`: l'agente da usare. Deve essere un agente primario. Se non trovato, usa `default_agent` dalla config o `"build"`.
|
||||
- `share`: se condividere la sessione OpenCode. Di default e' **true** per repository pubblici.
|
||||
- `prompt`: prompt personalizzato opzionale per sovrascrivere il comportamento di default. Usalo per personalizzare come OpenCode processa le richieste.
|
||||
- `token`: token di accesso GitHub opzionale per eseguire operazioni come creare commenti, committare modifiche e aprire pull request. Di default, OpenCode usa l'installation access token della OpenCode GitHub App, quindi commit, commenti e pull request risultano provenire dalla app.
|
||||
|
||||
In alternativa, puoi usare il [token integrato `GITHUB_TOKEN`](https://docs.github.com/en/actions/tutorials/authenticate-with-github_token) del runner GitHub Actions senza installare la OpenCode GitHub App. Assicurati solo di concedere i permessi necessari nel workflow:
|
||||
|
||||
```yaml
|
||||
permissions:
|
||||
id-token: write
|
||||
contents: write
|
||||
pull-requests: write
|
||||
issues: write
|
||||
```
|
||||
|
||||
Se preferisci, puoi anche usare un [personal access tokens](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens)(PAT).
|
||||
|
||||
---
|
||||
|
||||
## Eventi supportati
|
||||
|
||||
OpenCode puo' essere attivato dai seguenti eventi GitHub:
|
||||
|
||||
| Tipo evento | Attivato da | Dettagli |
|
||||
| ----------------------------- | -------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- |
|
||||
| `issue_comment` | Commento su una issue o PR | Menziona `/opencode` o `/oc` nel commento. OpenCode legge il contesto e puo' creare branch, aprire PR o rispondere. |
|
||||
| `pull_request_review_comment` | Commento su specifiche righe in una PR | Menziona `/opencode` o `/oc` durante una review. OpenCode riceve path file, numeri di riga e contesto del diff. |
|
||||
| `issues` | Issue aperta o modificata | Attiva automaticamente OpenCode quando le issue vengono create o modificate. Richiede l'input `prompt`. |
|
||||
| `pull_request` | PR aperta o aggiornata | Attiva automaticamente OpenCode quando le PR vengono aperte, sincronizzate o riaperte. Utile per review automatiche. |
|
||||
| `schedule` | Pianificazione basata su cron | Esegue OpenCode a pianificazione. Richiede l'input `prompt`. Output nei log e nelle PR (nessuna issue su cui commentare). |
|
||||
| `workflow_dispatch` | Trigger manuale dalla UI GitHub | Attiva OpenCode on-demand dalla tab Actions. Richiede l'input `prompt`. Output nei log e nelle PR. |
|
||||
|
||||
### Esempio con schedule
|
||||
|
||||
Esegui OpenCode a pianificazione per eseguire task automatizzati:
|
||||
|
||||
```yaml title=".github/workflows/opencode-scheduled.yml"
|
||||
name: Scheduled OpenCode Task
|
||||
|
||||
on:
|
||||
schedule:
|
||||
- cron: "0 9 * * 1" # Every Monday at 9am 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: |
|
||||
Review the codebase for any TODO comments and create a summary.
|
||||
If you find issues worth addressing, open an issue to track them.
|
||||
```
|
||||
|
||||
Per gli eventi schedulati, l'input `prompt` e' **obbligatorio** dato che non c'e' un commento da cui estrarre le istruzioni. I workflow schedulati girano senza un contesto utente per i controlli di permesso, quindi il workflow deve concedere `contents: write` e `pull-requests: write` se ti aspetti che OpenCode crei branch o PR.
|
||||
|
||||
---
|
||||
|
||||
### Esempio di pull request
|
||||
|
||||
Review automatica delle PR quando vengono aperte o aggiornate:
|
||||
|
||||
```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: |
|
||||
Review this pull request:
|
||||
- Check for code quality issues
|
||||
- Look for potential bugs
|
||||
- Suggest improvements
|
||||
```
|
||||
|
||||
Per gli eventi `pull_request`, se non viene fornito alcun `prompt`, OpenCode fa di default la review della pull request.
|
||||
|
||||
---
|
||||
|
||||
### Esempio di triage delle issue
|
||||
|
||||
Triage automatico delle nuove issue. Questo esempio filtra gli account piu' vecchi di 30 giorni per ridurre lo spam:
|
||||
|
||||
```yaml title=".github/workflows/opencode-triage.yml"
|
||||
name: Issue Triage
|
||||
|
||||
on:
|
||||
issues:
|
||||
types: [opened]
|
||||
|
||||
jobs:
|
||||
triage:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
id-token: write
|
||||
contents: write
|
||||
pull-requests: write
|
||||
issues: write
|
||||
steps:
|
||||
- name: Check account age
|
||||
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: |
|
||||
Review this issue. If there's a clear fix or relevant docs:
|
||||
- Provide documentation links
|
||||
- Add error handling guidance for code examples
|
||||
Otherwise, do not comment.
|
||||
```
|
||||
|
||||
Per gli eventi `issues`, l'input `prompt` e' **obbligatorio** dato che non c'e' un commento da cui estrarre le istruzioni.
|
||||
|
||||
---
|
||||
|
||||
## Prompt personalizzati
|
||||
|
||||
Sovrascrivi il prompt di default per personalizzare il comportamento di OpenCode nel tuo workflow.
|
||||
|
||||
```yaml title=".github/workflows/opencode.yml"
|
||||
- uses: anomalyco/opencode/github@latest
|
||||
with:
|
||||
model: anthropic/claude-sonnet-4-5
|
||||
prompt: |
|
||||
Review this pull request:
|
||||
- Check for code quality issues
|
||||
- Look for potential bugs
|
||||
- Suggest improvements
|
||||
```
|
||||
|
||||
E' utile per imporre criteri specifici di review, standard di codice o aree di focus rilevanti per il progetto.
|
||||
|
||||
---
|
||||
|
||||
## Esempi
|
||||
|
||||
Ecco alcuni esempi di come puoi usare OpenCode su GitHub.
|
||||
|
||||
- **Spiega una issue**
|
||||
|
||||
Aggiungi questo commento in una issue GitHub.
|
||||
|
||||
```
|
||||
/opencode explain this issue
|
||||
```
|
||||
|
||||
OpenCode leggera' l'intero thread, inclusi tutti i commenti, e rispondera' con una spiegazione chiara.
|
||||
|
||||
- **Risolvi una issue**
|
||||
|
||||
In una issue GitHub, scrivi:
|
||||
|
||||
```
|
||||
/opencode fix this
|
||||
```
|
||||
|
||||
OpenCode creera' un nuovo branch, implementera' le modifiche e aprira' una PR con i cambiamenti.
|
||||
|
||||
- **Rivedi PR e fai modifiche**
|
||||
|
||||
Lascia il seguente commento su una PR GitHub.
|
||||
|
||||
```
|
||||
Delete the attachment from S3 when the note is removed /oc
|
||||
```
|
||||
|
||||
OpenCode implementera' la modifica richiesta e la committera' nella stessa PR.
|
||||
|
||||
- **Rivedi righe specifiche di codice**
|
||||
|
||||
Lascia un commento direttamente sulle righe di codice nella tab "Files" della PR. OpenCode rileva automaticamente file, numeri di riga e contesto del diff per fornire risposte precise.
|
||||
|
||||
```
|
||||
[Comment on specific lines in Files tab]
|
||||
/oc add error handling here
|
||||
```
|
||||
|
||||
Quando commenti su righe specifiche, OpenCode riceve:
|
||||
- Il file esatto in review
|
||||
- Le righe di codice specifiche
|
||||
- Il contesto del diff circostante
|
||||
- Informazioni sul numero di riga
|
||||
|
||||
Questo permette richieste piu' mirate senza dover specificare manualmente path file o numeri di riga.
|
||||
195
packages/web/src/content/docs/it/gitlab.mdx
Normal file
195
packages/web/src/content/docs/it/gitlab.mdx
Normal file
@@ -0,0 +1,195 @@
|
||||
---
|
||||
title: GitLab
|
||||
description: Usa OpenCode in issue e merge request su GitLab.
|
||||
---
|
||||
|
||||
OpenCode si integra nel tuo workflow GitLab tramite la pipeline GitLab CI/CD o con GitLab Duo.
|
||||
|
||||
In entrambi i casi, OpenCode girera' sui tuoi runner GitLab.
|
||||
|
||||
---
|
||||
|
||||
## GitLab CI
|
||||
|
||||
OpenCode funziona in una pipeline GitLab standard. Puoi integrarlo nella pipeline come [componente CI](https://docs.gitlab.com/ee/ci/components/).
|
||||
|
||||
Qui usiamo un componente CI/CD creato dalla community per OpenCode — [nagyv/gitlab-opencode](https://gitlab.com/nagyv/gitlab-opencode).
|
||||
|
||||
---
|
||||
|
||||
### Funzionalita'
|
||||
|
||||
- **Configurazione personalizzata per job**: configura OpenCode con una directory di configurazione personalizzata, ad esempio `./config/#custom-directory`, per abilitare o disabilitare funzionalita' per ogni invocazione di OpenCode.
|
||||
- **Setup minimo**: il componente CI prepara OpenCode in background; devi solo creare la configurazione OpenCode e il prompt iniziale.
|
||||
- **Flessibile**: il componente CI supporta diversi input per personalizzarne il comportamento.
|
||||
|
||||
---
|
||||
|
||||
### Setup
|
||||
|
||||
1. Salva il JSON di autenticazione di OpenCode come variabile d'ambiente CI di tipo File in **Settings** > **CI/CD** > **Variables**. Assicurati di marcarla come "Masked and hidden".
|
||||
2. Aggiungi quanto segue al tuo file `.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 # The variable name for your OpenCode authentication JSON
|
||||
command: optional-custom-command
|
||||
message: "Your prompt here"
|
||||
```
|
||||
|
||||
Per altri input e casi d'uso, [consulta la documentazione](https://gitlab.com/explore/catalog/nagyv/gitlab-opencode) di questo componente.
|
||||
|
||||
---
|
||||
|
||||
## GitLab Duo
|
||||
|
||||
OpenCode si integra nel tuo workflow GitLab.
|
||||
Menziona `@opencode` in un commento e OpenCode eseguira' i task dentro la tua pipeline GitLab CI.
|
||||
|
||||
---
|
||||
|
||||
### Funzionalita'
|
||||
|
||||
- **Triage delle issue**: chiedi a OpenCode di indagare su una issue e spiegartela.
|
||||
- **Fix e implementazioni**: chiedi a OpenCode di risolvere una issue o implementare una feature.
|
||||
Creera' un nuovo branch e aprira' una merge request con le modifiche.
|
||||
- **Sicuro**: OpenCode gira sui tuoi runner GitLab.
|
||||
|
||||
---
|
||||
|
||||
### Setup
|
||||
|
||||
OpenCode gira nella pipeline GitLab CI/CD. Ecco cosa ti serve per configurarlo:
|
||||
|
||||
:::tip
|
||||
Dai un'occhiata alle [**GitLab docs**](https://docs.gitlab.com/user/duo_agent_platform/agent_assistant/) per istruzioni aggiornate.
|
||||
:::
|
||||
|
||||
1. Configura l'ambiente GitLab
|
||||
2. Configura CI/CD
|
||||
3. Ottieni una API key di un provider di modelli AI
|
||||
4. Crea un service account
|
||||
5. Configura le variabili CI/CD
|
||||
6. Crea un file di configurazione del flow, ecco un esempio:
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Flow configuration</summary>
|
||||
|
||||
```yaml
|
||||
image: node:22-slim
|
||||
commands:
|
||||
- echo "Installing opencode"
|
||||
- npm install --global opencode-ai
|
||||
- echo "Installing 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 "Configuring glab"
|
||||
- echo $GITLAB_HOST
|
||||
- echo "Creating OpenCode auth configuration"
|
||||
- mkdir --parents ~/.local/share/opencode
|
||||
- |
|
||||
cat > ~/.local/share/opencode/auth.json << EOF
|
||||
{
|
||||
"anthropic": {
|
||||
"type": "api",
|
||||
"key": "$ANTHROPIC_API_KEY"
|
||||
}
|
||||
}
|
||||
EOF
|
||||
- echo "Configuring git"
|
||||
- git config --global user.email "opencode@gitlab.com"
|
||||
- git config --global user.name "OpenCode"
|
||||
- echo "Testing glab"
|
||||
- glab issue list
|
||||
- echo "Running OpenCode"
|
||||
- |
|
||||
opencode run "
|
||||
You are an AI assistant helping with GitLab operations.
|
||||
|
||||
Context: $AI_FLOW_CONTEXT
|
||||
Task: $AI_FLOW_INPUT
|
||||
Event: $AI_FLOW_EVENT
|
||||
|
||||
Please execute the requested task using the available GitLab tools.
|
||||
Be thorough in your analysis and provide clear explanations.
|
||||
|
||||
<important>
|
||||
Please use the glab CLI to access data from GitLab. The glab CLI has already been authenticated. You can run the corresponding commands.
|
||||
|
||||
If you are asked to summarize an MR or issue or asked to provide more information then please post back a note to the MR/Issue so that the user can see it.
|
||||
You don't need to commit or push up changes, those will be done automatically based on the file changes you make.
|
||||
</important>
|
||||
"
|
||||
- git checkout --branch $CI_WORKLOAD_REF origin/$CI_WORKLOAD_REF
|
||||
- echo "Checking for git changes and pushing if any exist"
|
||||
- |
|
||||
if ! git diff --quiet || ! git diff --cached --quiet || [ --not --zero "$(git ls-files --others --exclude-standard)" ]; then
|
||||
echo "Git changes detected, adding and pushing..."
|
||||
git add .
|
||||
if git diff --cached --quiet; then
|
||||
echo "No staged changes to commit"
|
||||
else
|
||||
echo "Committing changes to branch: $CI_WORKLOAD_REF"
|
||||
git commit --message "Codex changes"
|
||||
echo "Pushing changes up to $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 "Changes successfully pushed"
|
||||
fi
|
||||
else
|
||||
echo "No git changes detected, skipping push"
|
||||
fi
|
||||
variables:
|
||||
- ANTHROPIC_API_KEY
|
||||
- GITLAB_TOKEN_OPENCODE
|
||||
- GITLAB_HOST
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
Puoi fare riferimento alla [documentazione GitLab CLI agents](https://docs.gitlab.com/user/duo_agent_platform/agent_assistant/) per istruzioni dettagliate.
|
||||
|
||||
---
|
||||
|
||||
### Esempi
|
||||
|
||||
Ecco alcuni esempi di come puoi usare OpenCode in GitLab.
|
||||
|
||||
:::tip
|
||||
Puoi configurare una frase trigger diversa da `@opencode`.
|
||||
:::
|
||||
|
||||
- **Spiega una issue**
|
||||
|
||||
Aggiungi questo commento in una issue GitLab.
|
||||
|
||||
```
|
||||
@opencode explain this issue
|
||||
```
|
||||
|
||||
OpenCode leggera' la issue e rispondera' con una spiegazione chiara.
|
||||
|
||||
- **Risolvi una issue**
|
||||
|
||||
In una issue GitLab, scrivi:
|
||||
|
||||
```
|
||||
@opencode fix this
|
||||
```
|
||||
|
||||
OpenCode creera' un nuovo branch, implementera' le modifiche e aprira' una merge request con i cambiamenti.
|
||||
|
||||
- **Rivedi merge request**
|
||||
|
||||
Lascia il seguente commento su una merge request GitLab.
|
||||
|
||||
```
|
||||
@opencode review this merge request
|
||||
```
|
||||
|
||||
OpenCode rivedra' la merge request e fornira' feedback.
|
||||
48
packages/web/src/content/docs/it/ide.mdx
Normal file
48
packages/web/src/content/docs/it/ide.mdx
Normal file
@@ -0,0 +1,48 @@
|
||||
---
|
||||
title: IDE
|
||||
description: L'estensione OpenCode per VS Code, Cursor e altri IDE
|
||||
---
|
||||
|
||||
OpenCode si integra con VS Code, Cursor o qualunque IDE che supporti un terminale. Basta eseguire `opencode` nel terminale per iniziare.
|
||||
|
||||
---
|
||||
|
||||
## Utilizzo
|
||||
|
||||
- **Avvio rapido**: usa `Cmd+Esc` (Mac) o `Ctrl+Esc` (Windows/Linux) per aprire OpenCode in una vista terminale divisa, oppure per mettere a fuoco una sessione esistente se e gia in esecuzione.
|
||||
- **Nuova sessione**: usa `Cmd+Shift+Esc` (Mac) o `Ctrl+Shift+Esc` (Windows/Linux) per avviare una nuova sessione di OpenCode, anche se ne esiste gia una aperta. Puoi anche cliccare il pulsante OpenCode nell'interfaccia.
|
||||
- **Consapevolezza del contesto**: condividi automaticamente con OpenCode la selezione corrente o la scheda attiva.
|
||||
- **Scorciatoie per riferimenti file**: usa `Cmd+Option+K` (Mac) o `Alt+Ctrl+K` (Linux/Windows) per inserire riferimenti a file. Per esempio, `@File#L37-42`.
|
||||
|
||||
---
|
||||
|
||||
## Installazione
|
||||
|
||||
Per installare OpenCode su VS Code e fork popolari come Cursor, Windsurf, VSCodium:
|
||||
|
||||
1. Apri VS Code
|
||||
2. Apri il terminale integrato
|
||||
3. Esegui `opencode` - l'estensione si installa automaticamente
|
||||
|
||||
Se invece vuoi usare il tuo IDE quando esegui `/editor` o `/export` dalla TUI, devi impostare `export EDITOR="code --wait"`. [Scopri di piu](/docs/tui/#editor-setup).
|
||||
|
||||
---
|
||||
|
||||
### Installazione manuale
|
||||
|
||||
Cerca **OpenCode** nel Marketplace delle estensioni e clicca **Install**.
|
||||
|
||||
---
|
||||
|
||||
### Risoluzione dei problemi
|
||||
|
||||
Se l'estensione non si installa automaticamente:
|
||||
|
||||
- Assicurati di eseguire `opencode` nel terminale integrato.
|
||||
- Verifica che la CLI del tuo IDE sia installata:
|
||||
- Per VS Code: comando `code`
|
||||
- Per Cursor: comando `cursor`
|
||||
- Per Windsurf: comando `windsurf`
|
||||
- Per VSCodium: comando `codium`
|
||||
- In caso contrario, esegui `Cmd+Shift+P` (Mac) o `Ctrl+Shift+P` (Windows/Linux) e cerca "Shell Command: Install 'code' command in PATH" (o l'equivalente per il tuo IDE)
|
||||
- Assicurati che VS Code abbia i permessi per installare estensioni
|
||||
343
packages/web/src/content/docs/it/index.mdx
Normal file
343
packages/web/src/content/docs/it/index.mdx
Normal file
@@ -0,0 +1,343 @@
|
||||
---
|
||||
title: Introduzione
|
||||
description: Inizia con OpenCode.
|
||||
---
|
||||
|
||||
import { Tabs, TabItem } from "@astrojs/starlight/components"
|
||||
import config from "../../../../config.mjs"
|
||||
export const console = config.console
|
||||
|
||||
[**OpenCode**](/) e un agente di programmazione AI open source. E disponibile come interfaccia da terminale, app desktop o estensione per IDE.
|
||||
|
||||

|
||||
|
||||
Iniziamo.
|
||||
|
||||
---
|
||||
|
||||
#### Prerequisiti
|
||||
|
||||
Per usare OpenCode nel terminale, ti serve:
|
||||
|
||||
1. Un emulatore di terminale moderno, come:
|
||||
- [WezTerm](https://wezterm.org), cross-platform
|
||||
- [Alacritty](https://alacritty.org), cross-platform
|
||||
- [Ghostty](https://ghostty.org), Linux and macOS
|
||||
- [Kitty](https://sw.kovidgoyal.net/kitty/), Linux and macOS
|
||||
|
||||
2. Le chiavi API dei provider LLM che vuoi usare.
|
||||
|
||||
---
|
||||
|
||||
## Installa
|
||||
|
||||
Il modo piu semplice per installare OpenCode e usare lo script di installazione.
|
||||
|
||||
```bash
|
||||
curl -fsSL https://opencode.ai/install | bash
|
||||
```
|
||||
|
||||
Puoi anche installarlo con i seguenti comandi:
|
||||
|
||||
- **Con 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>
|
||||
|
||||
- **Con Homebrew su macOS e Linux**
|
||||
|
||||
```bash
|
||||
brew install anomalyco/tap/opencode
|
||||
```
|
||||
|
||||
> Ti consigliamo di usare il tap di OpenCode per avere le release piu aggiornate. La formula ufficiale `brew install opencode` e mantenuta dal team Homebrew e viene aggiornata meno spesso.
|
||||
|
||||
- **Con Paru su Arch Linux**
|
||||
|
||||
```bash
|
||||
paru -S opencode-bin
|
||||
```
|
||||
|
||||
#### Windows
|
||||
|
||||
:::tip[Consigliato: usa WSL]
|
||||
Per la migliore esperienza su Windows, ti consigliamo di usare [Windows Subsystem for Linux (WSL)](/docs/windows-wsl). Offre prestazioni migliori e piena compatibilita con le funzionalita di OpenCode.
|
||||
:::
|
||||
|
||||
- **Con Chocolatey**
|
||||
|
||||
```bash
|
||||
choco install opencode
|
||||
```
|
||||
|
||||
- **Con Scoop**
|
||||
|
||||
```bash
|
||||
scoop install opencode
|
||||
```
|
||||
|
||||
- **Con NPM**
|
||||
|
||||
```bash
|
||||
npm install -g opencode-ai
|
||||
```
|
||||
|
||||
- **Con Mise**
|
||||
|
||||
```bash
|
||||
mise use -g github:anomalyco/opencode
|
||||
```
|
||||
|
||||
- **Con Docker**
|
||||
|
||||
```bash
|
||||
docker run -it --rm ghcr.io/anomalyco/opencode
|
||||
```
|
||||
|
||||
Il supporto per installare OpenCode su Windows usando Bun e attualmente in lavorazione.
|
||||
|
||||
Puoi anche scaricare il binario dalle [Releases](https://github.com/anomalyco/opencode/releases).
|
||||
|
||||
---
|
||||
|
||||
## Configura
|
||||
|
||||
Con OpenCode puoi usare qualsiasi provider LLM configurando le relative chiavi API.
|
||||
|
||||
Se e la prima volta che usi provider LLM, ti consigliamo [OpenCode Zen](/docs/zen).
|
||||
E una lista curata di modelli testati e verificati dal team di OpenCode.
|
||||
|
||||
1. Esegui il comando `/connect` nella TUI, seleziona opencode e vai su [opencode.ai/auth](https://opencode.ai/auth).
|
||||
|
||||
```txt
|
||||
/connect
|
||||
```
|
||||
|
||||
2. Accedi, aggiungi i dettagli di fatturazione e copia la tua chiave API.
|
||||
|
||||
3. Incolla la tua chiave API.
|
||||
|
||||
```txt
|
||||
┌ API key
|
||||
│
|
||||
│
|
||||
└ enter
|
||||
```
|
||||
|
||||
In alternativa, puoi selezionare uno degli altri provider. [Scopri di piu](/docs/providers#directory).
|
||||
|
||||
---
|
||||
|
||||
## Inizializza
|
||||
|
||||
Ora che hai configurato un provider, puoi spostarti in un progetto su cui vuoi lavorare.
|
||||
|
||||
```bash
|
||||
cd /path/to/project
|
||||
```
|
||||
|
||||
E avviare OpenCode.
|
||||
|
||||
```bash
|
||||
opencode
|
||||
```
|
||||
|
||||
Poi inizializza OpenCode per il progetto eseguendo il comando seguente.
|
||||
|
||||
```bash frame="none"
|
||||
/init
|
||||
```
|
||||
|
||||
Questo fara analizzare il progetto a OpenCode e creera un file `AGENTS.md` nella root del progetto.
|
||||
|
||||
:::tip
|
||||
Dovresti committare il file `AGENTS.md` del progetto su Git.
|
||||
:::
|
||||
|
||||
Questo aiuta OpenCode a capire la struttura del progetto e gli stili di codice usati.
|
||||
|
||||
---
|
||||
|
||||
## Usage
|
||||
|
||||
Ora sei pronto a usare OpenCode sul tuo progetto. Sentiti libero di chiedergli qualsiasi cosa!
|
||||
|
||||
Se e la prima volta che usi un agente di programmazione AI, ecco alcuni esempi che possono aiutare.
|
||||
|
||||
---
|
||||
|
||||
### Fai domande
|
||||
|
||||
Puoi chiedere a OpenCode di spiegarti la codebase.
|
||||
|
||||
:::tip
|
||||
Usa il tasto `@` per fare una ricerca fuzzy dei file nel progetto.
|
||||
:::
|
||||
|
||||
```txt frame="none" "@packages/functions/src/api/index.ts"
|
||||
How is authentication handled in @packages/functions/src/api/index.ts
|
||||
```
|
||||
|
||||
Questo e utile se c'e una parte della codebase su cui non hai lavorato.
|
||||
|
||||
---
|
||||
|
||||
### Aggiungi funzionalita
|
||||
|
||||
Puoi chiedere a OpenCode di aggiungere nuove funzionalita al progetto. Pero ti consigliamo prima di chiedergli di creare un piano.
|
||||
|
||||
1. **Create a plan**
|
||||
|
||||
OpenCode ha una _Plan mode_ che disabilita la possibilita di fare modifiche e si limita a suggerire _come_ implementera la funzionalita.
|
||||
|
||||
Passaci con il tasto **Tab**. Vedrai un indicatore nell'angolo in basso a destra.
|
||||
|
||||
```bash frame="none" title="Switch to Plan mode"
|
||||
<TAB>
|
||||
```
|
||||
|
||||
Ora descriviamo cosa vogliamo che faccia.
|
||||
|
||||
```txt frame="none"
|
||||
When a user deletes a note, we'd like to flag it as deleted in the database.
|
||||
Then create a screen that shows all the recently deleted notes.
|
||||
From this screen, the user can undelete a note or permanently delete it.
|
||||
```
|
||||
|
||||
Devi dare a OpenCode abbastanza dettagli per capire cosa vuoi. Aiuta parlargli come se stessi parlando a uno sviluppatore junior del tuo team.
|
||||
|
||||
:::tip
|
||||
Dai a OpenCode molto contesto ed esempi per aiutarlo a capire cosa vuoi.
|
||||
:::
|
||||
|
||||
2. **Iterate on the plan**
|
||||
|
||||
Una volta che ti da un piano, puoi dargli feedback o aggiungere piu dettagli.
|
||||
|
||||
```txt frame="none"
|
||||
We'd like to design this new screen using a design I've used before.
|
||||
[Image #1] Take a look at this image and use it as a reference.
|
||||
```
|
||||
|
||||
:::tip
|
||||
Trascina e rilascia le immagini nel terminale per aggiungerle al prompt.
|
||||
:::
|
||||
|
||||
OpenCode puo analizzare le immagini che gli dai e aggiungerle al prompt. Puoi farlo trascinando e rilasciando un'immagine nel terminale.
|
||||
|
||||
3. **Build the feature**
|
||||
|
||||
Quando ti senti a tuo agio con il piano, torna in _Build mode_ premendo di nuovo il tasto **Tab**.
|
||||
|
||||
```bash frame="none"
|
||||
<TAB>
|
||||
```
|
||||
|
||||
E chiedigli di fare le modifiche.
|
||||
|
||||
```bash frame="none"
|
||||
Sounds good! Go ahead and make the changes.
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Apporta modifiche
|
||||
|
||||
Per modifiche piu semplici, puoi chiedere a OpenCode di implementarle direttamente senza dover prima rivedere un piano.
|
||||
|
||||
```txt frame="none" "@packages/functions/src/settings.ts" "@packages/functions/src/notes.ts"
|
||||
We need to add authentication to the /settings route. Take a look at how this is
|
||||
handled in the /notes route in @packages/functions/src/notes.ts and implement
|
||||
the same logic in @packages/functions/src/settings.ts
|
||||
```
|
||||
|
||||
Assicurati di fornire abbastanza dettagli, cosi OpenCode fa le modifiche giuste.
|
||||
|
||||
---
|
||||
|
||||
### Annulla modifiche
|
||||
|
||||
Mettiamo che tu chieda a OpenCode di fare alcune modifiche.
|
||||
|
||||
```txt frame="none" "@packages/functions/src/api/index.ts"
|
||||
Can you refactor the function in @packages/functions/src/api/index.ts?
|
||||
```
|
||||
|
||||
Ma ti accorgi che non e quello che volevi. Puoi **annullare** le modifiche usando il comando `/undo`.
|
||||
|
||||
```bash frame="none"
|
||||
/undo
|
||||
```
|
||||
|
||||
OpenCode ora ripristina le modifiche e mostra di nuovo il tuo messaggio originale.
|
||||
|
||||
```txt frame="none" "@packages/functions/src/api/index.ts"
|
||||
Can you refactor the function in @packages/functions/src/api/index.ts?
|
||||
```
|
||||
|
||||
Da qui puoi modificare il prompt e chiedere a OpenCode di riprovare.
|
||||
|
||||
:::tip
|
||||
Puoi eseguire `/undo` piu volte per annullare piu modifiche.
|
||||
:::
|
||||
|
||||
Oppure puoi **rifare** le modifiche usando il comando `/redo`.
|
||||
|
||||
```bash frame="none"
|
||||
/redo
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Condividi
|
||||
|
||||
Le conversazioni che fai con OpenCode possono essere [condivise con il tuo team](/docs/share).
|
||||
|
||||
```bash frame="none"
|
||||
/share
|
||||
```
|
||||
|
||||
Questo creera un link alla conversazione corrente e lo copiera negli appunti.
|
||||
|
||||
:::note
|
||||
Le conversazioni non vengono condivise per impostazione predefinita.
|
||||
:::
|
||||
|
||||
Ecco un'[esempio di conversazione](https://opencode.ai/s/4XP1fce5) con OpenCode.
|
||||
|
||||
---
|
||||
|
||||
## Personalizza
|
||||
|
||||
E tutto qui! Ora sei un pro nell'usare OpenCode.
|
||||
|
||||
Per renderlo davvero tuo, ti consigliamo di [scegliere un tema](/docs/themes), [personalizzare i tasti rapidi](/docs/keybinds), [configurare i formatter](/docs/formatters), [creare comandi personalizzati](/docs/commands) o sperimentare con la [configurazione di OpenCode](/docs/config).
|
||||
192
packages/web/src/content/docs/it/keybinds.mdx
Normal file
192
packages/web/src/content/docs/it/keybinds.mdx
Normal file
@@ -0,0 +1,192 @@
|
||||
---
|
||||
title: Scorciatoie
|
||||
description: Personalizza le scorciatoie da tastiera.
|
||||
---
|
||||
|
||||
OpenCode ha una lista di scorciatoie che puoi personalizzare tramite la configurazione di 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"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Tasto leader
|
||||
|
||||
OpenCode usa un tasto `leader` per la maggior parte delle scorciatoie. Questo evita conflitti nel terminale.
|
||||
|
||||
Per impostazione predefinita, `ctrl+x` e il tasto leader e la maggior parte delle azioni richiede di premere prima il leader e poi la scorciatoia. Per esempio, per avviare una nuova sessione premi `ctrl+x` e poi `n`.
|
||||
|
||||
Non sei obbligato a usare un tasto leader per le scorciatoie, ma lo consigliamo.
|
||||
|
||||
---
|
||||
|
||||
## Disabilitare una scorciatoia
|
||||
|
||||
Puoi disabilitare una scorciatoia aggiungendo la chiave nella configurazione con valore "none".
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"keybinds": {
|
||||
"session_compact": "none"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Scorciatoie del prompt desktop
|
||||
|
||||
Il campo di input del prompt nell'app desktop di OpenCode supporta scorciatoie comuni in stile Readline/Emacs per modificare il testo. Sono integrate e al momento non configurabili tramite `opencode.json`.
|
||||
|
||||
| Scorciatoia | Azione |
|
||||
| ----------- | ------------------------------------------ |
|
||||
| `ctrl+a` | Vai all'inizio della riga corrente |
|
||||
| `ctrl+e` | Vai alla fine della riga corrente |
|
||||
| `ctrl+b` | Sposta il cursore indietro di un carattere |
|
||||
| `ctrl+f` | Sposta il cursore avanti di un carattere |
|
||||
| `alt+b` | Sposta il cursore indietro di una parola |
|
||||
| `alt+f` | Sposta il cursore avanti di una parola |
|
||||
| `ctrl+d` | Elimina il carattere sotto il cursore |
|
||||
| `ctrl+k` | Elimina fino alla fine della riga |
|
||||
| `ctrl+u` | Elimina fino all'inizio della riga |
|
||||
| `ctrl+w` | Elimina la parola precedente |
|
||||
| `alt+d` | Elimina la parola successiva |
|
||||
| `ctrl+t` | Scambia i caratteri |
|
||||
| `ctrl+g` | Annulla popover / interrompe la risposta |
|
||||
|
||||
---
|
||||
|
||||
## Shift+Enter
|
||||
|
||||
Alcuni terminali non inviano di default i tasti modificatori insieme a Invio. Potrebbe essere necessario configurare il terminale per inviare `Shift+Enter` come sequenza di escape.
|
||||
|
||||
### Windows Terminal
|
||||
|
||||
Apri il tuo `settings.json` in:
|
||||
|
||||
```
|
||||
%LOCALAPPDATA%\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\settings.json
|
||||
```
|
||||
|
||||
Aggiungi questo all'array `actions` a livello root:
|
||||
|
||||
```json
|
||||
"actions": [
|
||||
{
|
||||
"command": {
|
||||
"action": "sendInput",
|
||||
"input": "\u001b[13;2u"
|
||||
},
|
||||
"id": "User.sendInput.ShiftEnterCustom"
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
Aggiungi questo all'array `keybindings` a livello root:
|
||||
|
||||
```json
|
||||
"keybindings": [
|
||||
{
|
||||
"keys": "shift+enter",
|
||||
"id": "User.sendInput.ShiftEnterCustom"
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
Salva il file e riavvia Windows Terminal oppure apri una nuova scheda.
|
||||
188
packages/web/src/content/docs/it/lsp.mdx
Normal file
188
packages/web/src/content/docs/it/lsp.mdx
Normal file
@@ -0,0 +1,188 @@
|
||||
---
|
||||
title: Server LSP
|
||||
description: OpenCode si integra con i tuoi server LSP.
|
||||
---
|
||||
|
||||
OpenCode si integra con il tuo Language Server Protocol (LSP) per aiutare l'LLM a interagire con la tua codebase. Usa le diagnostiche per fornire feedback all'LLM.
|
||||
|
||||
---
|
||||
|
||||
## Integrati
|
||||
|
||||
OpenCode include diversi server LSP integrati per linguaggi popolari:
|
||||
|
||||
| Server LSP | Estensioni | Requisiti |
|
||||
| ------------------ | ------------------------------------------------------------------- | ------------------------------------------------------------------------ |
|
||||
| astro | .astro | Installazione automatica per progetti Astro |
|
||||
| bash | .sh, .bash, .zsh, .ksh | Installazione automatica di bash-language-server |
|
||||
| clangd | .c, .cpp, .cc, .cxx, .c++, .h, .hpp, .hh, .hxx, .h++ | Installazione automatica per progetti C/C++ |
|
||||
| csharp | .cs | `.NET SDK` installato |
|
||||
| clojure-lsp | .clj, .cljs, .cljc, .edn | comando `clojure-lsp` disponibile |
|
||||
| dart | .dart | comando `dart` disponibile |
|
||||
| deno | .ts, .tsx, .js, .jsx, .mjs | comando `deno` disponibile (rileva automaticamente deno.json/deno.jsonc) |
|
||||
| elixir-ls | .ex, .exs | comando `elixir` disponibile |
|
||||
| eslint | .ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts, .vue | dipendenza `eslint` nel progetto |
|
||||
| fsharp | .fs, .fsi, .fsx, .fsscript | `.NET SDK` installato |
|
||||
| gleam | .gleam | comando `gleam` disponibile |
|
||||
| gopls | .go | comando `go` disponibile |
|
||||
| hls | .hs, .lhs | comando `haskell-language-server-wrapper` disponibile |
|
||||
| jdtls | .java | `Java SDK (version 21+)` installato |
|
||||
| kotlin-ls | .kt, .kts | Installazione automatica per progetti Kotlin |
|
||||
| lua-ls | .lua | Installazione automatica per progetti Lua |
|
||||
| nixd | .nix | comando `nixd` disponibile |
|
||||
| ocaml-lsp | .ml, .mli | comando `ocamllsp` disponibile |
|
||||
| oxlint | .ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts, .vue, .astro, .svelte | dipendenza `oxlint` nel progetto |
|
||||
| php intelephense | .php | Installazione automatica per progetti PHP |
|
||||
| prisma | .prisma | comando `prisma` disponibile |
|
||||
| pyright | .py, .pyi | dipendenza `pyright` installata |
|
||||
| ruby-lsp (rubocop) | .rb, .rake, .gemspec, .ru | comandi `ruby` e `gem` disponibili |
|
||||
| rust | .rs | comando `rust-analyzer` disponibile |
|
||||
| sourcekit-lsp | .swift, .objc, .objcpp | `swift` installato (`xcode` su macOS) |
|
||||
| svelte | .svelte | Installazione automatica per progetti Svelte |
|
||||
| terraform | .tf, .tfvars | Installazione automatica dalle release GitHub |
|
||||
| tinymist | .typ, .typc | Installazione automatica dalle release GitHub |
|
||||
| typescript | .ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts | dipendenza `typescript` nel progetto |
|
||||
| vue | .vue | Installazione automatica per progetti Vue |
|
||||
| yaml-ls | .yaml, .yml | Installazione automatica di Red Hat yaml-language-server |
|
||||
| zls | .zig, .zon | comando `zig` disponibile |
|
||||
|
||||
I server LSP vengono abilitati automaticamente quando viene rilevata una delle estensioni qui sopra e i requisiti sono soddisfatti.
|
||||
|
||||
:::note
|
||||
Puoi disabilitare il download automatico dei server LSP impostando la variabile d'ambiente `OPENCODE_DISABLE_LSP_DOWNLOAD` a `true`.
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
## Come funziona
|
||||
|
||||
Quando opencode apre un file:
|
||||
|
||||
1. Controlla l'estensione del file rispetto a tutti i server LSP abilitati.
|
||||
2. Avvia il server LSP appropriato se non e gia in esecuzione.
|
||||
|
||||
---
|
||||
|
||||
## Configura
|
||||
|
||||
Puoi personalizzare i server LSP tramite la sezione `lsp` nella configurazione di opencode.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"lsp": {}
|
||||
}
|
||||
```
|
||||
|
||||
Ogni server LSP supporta i seguenti campi:
|
||||
|
||||
| Proprieta | Tipo | Descrizione |
|
||||
| ---------------- | -------- | ------------------------------------------------ |
|
||||
| `disabled` | boolean | Imposta a `true` per disabilitare il server LSP |
|
||||
| `command` | string[] | Il comando per avviare il server LSP |
|
||||
| `extensions` | string[] | Estensioni file gestite da questo server LSP |
|
||||
| `env` | object | Variabili d'ambiente da impostare all'avvio |
|
||||
| `initialization` | object | Opzioni di inizializzazione da inviare al server |
|
||||
|
||||
Vediamo alcuni esempi.
|
||||
|
||||
---
|
||||
|
||||
### Variabili d'ambiente
|
||||
|
||||
Usa la proprieta `env` per impostare variabili d'ambiente quando avvii il server LSP:
|
||||
|
||||
```json title="opencode.json" {5-7}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"lsp": {
|
||||
"rust": {
|
||||
"env": {
|
||||
"RUST_LOG": "debug"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Opzioni di inizializzazione
|
||||
|
||||
Usa la proprieta `initialization` per passare opzioni di inizializzazione al server LSP. Sono impostazioni specifiche del server inviate durante la richiesta LSP `initialize`:
|
||||
|
||||
```json title="opencode.json" {5-9}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"lsp": {
|
||||
"typescript": {
|
||||
"initialization": {
|
||||
"preferences": {
|
||||
"importModuleSpecifierPreference": "relative"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
:::note
|
||||
Le opzioni di inizializzazione variano da server a server. Consulta la documentazione del tuo server LSP per le opzioni disponibili.
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
### Disabilitare i server LSP
|
||||
|
||||
Per disabilitare **tutti** i server LSP globalmente, imposta `lsp` a `false`:
|
||||
|
||||
```json title="opencode.json" {3}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"lsp": false
|
||||
}
|
||||
```
|
||||
|
||||
Per disabilitare un server LSP **specifico**, imposta `disabled` a `true`:
|
||||
|
||||
```json title="opencode.json" {5}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"lsp": {
|
||||
"typescript": {
|
||||
"disabled": true
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Server LSP personalizzati
|
||||
|
||||
Puoi aggiungere server LSP personalizzati specificando il comando e le estensioni file:
|
||||
|
||||
```json title="opencode.json" {4-7}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"lsp": {
|
||||
"custom-lsp": {
|
||||
"command": ["custom-lsp-server", "--stdio"],
|
||||
"extensions": [".custom"]
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Informazioni aggiuntive
|
||||
|
||||
### PHP Intelephense
|
||||
|
||||
PHP Intelephense offre funzionalita premium tramite una chiave di licenza. Puoi fornire la chiave inserendo (solo) la chiave in un file di testo in:
|
||||
|
||||
- Su macOS/Linux: `$HOME/intelephense/licence.txt`
|
||||
- Su Windows: `%USERPROFILE%/intelephense/licence.txt`
|
||||
|
||||
Il file deve contenere solo la chiave di licenza, senza contenuti aggiuntivi.
|
||||
511
packages/web/src/content/docs/it/mcp-servers.mdx
Normal file
511
packages/web/src/content/docs/it/mcp-servers.mdx
Normal file
@@ -0,0 +1,511 @@
|
||||
---
|
||||
title: Server MCP
|
||||
description: Aggiungi strumenti MCP locali e remoti.
|
||||
---
|
||||
|
||||
Puoi aggiungere strumenti esterni a OpenCode usando il _Model Context Protocol_, o MCP. OpenCode supporta sia server locali sia remoti.
|
||||
|
||||
Una volta aggiunti, gli strumenti MCP sono automaticamente disponibili all'LLM insieme agli strumenti integrati.
|
||||
|
||||
---
|
||||
|
||||
#### Avvertenze
|
||||
|
||||
Quando usi un server MCP, aggiunge contenuto al contesto. Questo puo' crescere rapidamente se hai molti strumenti. Per questo consigliamo di fare attenzione a quali server MCP abiliti.
|
||||
|
||||
:::tip
|
||||
I server MCP aumentano il contesto, quindi e' meglio essere prudenti su quali abilitare.
|
||||
:::
|
||||
|
||||
Alcuni server MCP, come il server MCP di GitHub, tendono ad aggiungere molti token e possono facilmente superare il limite di contesto.
|
||||
|
||||
---
|
||||
|
||||
## Abilita
|
||||
|
||||
Puoi definire server MCP nella tua [OpenCode Config](https://opencode.ai/docs/config/) sotto `mcp`. Aggiungi ogni MCP con un nome univoco. Puoi riferirti a quell'MCP per nome quando fai prompt all'LLM.
|
||||
|
||||
```jsonc title="opencode.jsonc" {6}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mcp": {
|
||||
"name-of-mcp-server": {
|
||||
// ...
|
||||
"enabled": true,
|
||||
},
|
||||
"name-of-other-mcp-server": {
|
||||
// ...
|
||||
},
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
Puoi anche disabilitare un server impostando `enabled` a `false`. E' utile se vuoi disabilitare temporaneamente un server senza rimuoverlo dalla configurazione.
|
||||
|
||||
---
|
||||
|
||||
### Sovrascrivere i default remoti
|
||||
|
||||
Le organizzazioni possono fornire server MCP predefiniti tramite l'endpoint `.well-known/opencode`. Questi server possono essere disabilitati di default, lasciando agli utenti la possibilita' di fare opt-in su quelli necessari.
|
||||
|
||||
Per abilitare un server specifico dalla configurazione remota dell'organizzazione, aggiungilo alla configurazione locale con `enabled: true`:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mcp": {
|
||||
"jira": {
|
||||
"type": "remote",
|
||||
"url": "https://jira.example.com/mcp",
|
||||
"enabled": true
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
I valori della configurazione locale sovrascrivono i default remoti. Vedi [config precedence](/docs/config#precedence-order) per maggiori dettagli.
|
||||
|
||||
---
|
||||
|
||||
## Locali
|
||||
|
||||
Aggiungi server MCP locali impostando `type` a `"local"` dentro l'oggetto `mcp`.
|
||||
|
||||
```jsonc title="opencode.jsonc" {15}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mcp": {
|
||||
"my-local-mcp-server": {
|
||||
"type": "local",
|
||||
// Or ["bun", "x", "my-mcp-command"]
|
||||
"command": ["npx", "-y", "my-mcp-command"],
|
||||
"enabled": true,
|
||||
"environment": {
|
||||
"MY_ENV_VAR": "my_env_var_value",
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
Il comando e' come viene avviato il server MCP locale. Puoi anche passare un elenco di variabili d'ambiente.
|
||||
|
||||
Per esempio, ecco come aggiungere il server MCP di test [`@modelcontextprotocol/server-everything`](https://www.npmjs.com/package/@modelcontextprotocol/server-everything).
|
||||
|
||||
```jsonc title="opencode.jsonc"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mcp": {
|
||||
"mcp_everything": {
|
||||
"type": "local",
|
||||
"command": ["npx", "-y", "@modelcontextprotocol/server-everything"],
|
||||
},
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
E per usarlo posso aggiungere `use the mcp_everything tool` ai miei prompt.
|
||||
|
||||
```txt "mcp_everything"
|
||||
use the mcp_everything tool to add the number 3 and 4
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### Opzioni
|
||||
|
||||
Ecco tutte le opzioni per configurare un server MCP locale.
|
||||
|
||||
| Opzione | Tipo | Richiesto | Descrizione |
|
||||
| ------------- | ------- | --------- | ------------------------------------------------------------------------------------ |
|
||||
| `type` | String | Y | Tipo di connessione del server MCP, deve essere `"local"`. |
|
||||
| `command` | Array | Y | Comando e argomenti per eseguire il server MCP. |
|
||||
| `environment` | Object | | Variabili d'ambiente da impostare quando si esegue il server. |
|
||||
| `enabled` | Boolean | | Abilita o disabilita il server MCP all'avvio. |
|
||||
| `timeout` | Number | | Timeout in ms per recuperare gli strumenti dal server MCP. Default 5000 (5 secondi). |
|
||||
|
||||
---
|
||||
|
||||
## Remoti
|
||||
|
||||
Aggiungi server MCP remoti impostando `type` a `"remote"`.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mcp": {
|
||||
"my-remote-mcp": {
|
||||
"type": "remote",
|
||||
"url": "https://my-mcp-server.com",
|
||||
"enabled": true,
|
||||
"headers": {
|
||||
"Authorization": "Bearer MY_API_KEY"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
`url` e' l'URL del server MCP remoto e con l'opzione `headers` puoi passare un elenco di header.
|
||||
|
||||
---
|
||||
|
||||
#### Opzioni
|
||||
|
||||
| Opzione | Tipo | Richiesto | Descrizione |
|
||||
| --------- | ------- | --------- | ------------------------------------------------------------------------------------ |
|
||||
| `type` | String | Y | Tipo di connessione del server MCP, deve essere `"remote"`. |
|
||||
| `url` | String | Y | URL del server MCP remoto. |
|
||||
| `enabled` | Boolean | | Abilita o disabilita il server MCP all'avvio. |
|
||||
| `headers` | Object | | Header da inviare con la richiesta. |
|
||||
| `oauth` | Object | | Configurazione autenticazione OAuth. Vedi sezione [OAuth](#oauth) sotto. |
|
||||
| `timeout` | Number | | Timeout in ms per recuperare gli strumenti dal server MCP. Default 5000 (5 secondi). |
|
||||
|
||||
---
|
||||
|
||||
## OAuth
|
||||
|
||||
OpenCode gestisce automaticamente l'autenticazione OAuth per i server MCP remoti. Quando un server richiede autenticazione, OpenCode:
|
||||
|
||||
1. Rileva la risposta 401 e avvia il flusso OAuth
|
||||
2. Usa **Dynamic Client Registration (RFC 7591)** se supportato dal server
|
||||
3. Memorizza i token in modo sicuro per richieste future
|
||||
|
||||
---
|
||||
|
||||
### Automatico
|
||||
|
||||
Per la maggior parte dei server MCP con OAuth, non serve alcuna configurazione speciale. Basta configurare il server remoto:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mcp": {
|
||||
"my-oauth-server": {
|
||||
"type": "remote",
|
||||
"url": "https://mcp.example.com/mcp"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Se il server richiede autenticazione, OpenCode ti chiedera' di autenticarti la prima volta che provi a usarlo. In caso contrario, puoi [attivare manualmente il flusso](#authenticating) con `opencode mcp auth <server-name>`.
|
||||
|
||||
---
|
||||
|
||||
### Pre-registrato
|
||||
|
||||
Se hai credenziali client dal provider del server MCP, puoi configurarle:
|
||||
|
||||
```json title="opencode.json" {7-11}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mcp": {
|
||||
"my-oauth-server": {
|
||||
"type": "remote",
|
||||
"url": "https://mcp.example.com/mcp",
|
||||
"oauth": {
|
||||
"clientId": "{env:MY_MCP_CLIENT_ID}",
|
||||
"clientSecret": "{env:MY_MCP_CLIENT_SECRET}",
|
||||
"scope": "tools:read tools:execute"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Autenticazione
|
||||
|
||||
Puoi avviare manualmente l'autenticazione o gestire le credenziali.
|
||||
|
||||
Autentica con un server MCP specifico:
|
||||
|
||||
```bash
|
||||
opencode mcp auth my-oauth-server
|
||||
```
|
||||
|
||||
Elenca tutti i server MCP e il loro stato di autenticazione:
|
||||
|
||||
```bash
|
||||
opencode mcp list
|
||||
```
|
||||
|
||||
Rimuovi credenziali memorizzate:
|
||||
|
||||
```bash
|
||||
opencode mcp logout my-oauth-server
|
||||
```
|
||||
|
||||
Il comando `mcp auth` aprira' il browser per l'autorizzazione. Dopo l'autorizzazione, OpenCode memorizzera' i token in modo sicuro in `~/.local/share/opencode/mcp-auth.json`.
|
||||
|
||||
---
|
||||
|
||||
#### Disabilitare OAuth
|
||||
|
||||
Se vuoi disabilitare l'OAuth automatico per un server (ad esempio per server che usano API key), imposta `oauth` a `false`:
|
||||
|
||||
```json title="opencode.json" {7}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mcp": {
|
||||
"my-api-key-server": {
|
||||
"type": "remote",
|
||||
"url": "https://mcp.example.com/mcp",
|
||||
"oauth": false,
|
||||
"headers": {
|
||||
"Authorization": "Bearer {env:MY_API_KEY}"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### Opzioni OAuth
|
||||
|
||||
| Opzione | Tipo | Descrizione |
|
||||
| -------------- | --------------- | --------------------------------------------------------------------------- |
|
||||
| `oauth` | Object \| false | Oggetto config OAuth, o `false` per disabilitare l'auto-detection di OAuth. |
|
||||
| `clientId` | String | OAuth client ID. Se non fornito, si prova la dynamic client registration. |
|
||||
| `clientSecret` | String | OAuth client secret, se richiesto dal server di autorizzazione. |
|
||||
| `scope` | String | Scope OAuth da richiedere durante l'autorizzazione. |
|
||||
|
||||
#### Debug
|
||||
|
||||
Se un server MCP remoto non riesce ad autenticarsi, puoi diagnosticare i problemi con:
|
||||
|
||||
```bash
|
||||
# View auth status for all OAuth-capable servers
|
||||
opencode mcp auth list
|
||||
|
||||
# Debug connection and OAuth flow for a specific server
|
||||
opencode mcp debug my-oauth-server
|
||||
```
|
||||
|
||||
Il comando `mcp debug` mostra lo stato di autenticazione corrente, testa la connettivita' HTTP e prova il flusso di discovery OAuth.
|
||||
|
||||
---
|
||||
|
||||
## Gestione
|
||||
|
||||
I tuoi MCP sono disponibili come strumenti in OpenCode insieme agli strumenti integrati. Quindi puoi gestirli tramite la configurazione OpenCode come qualunque altro strumento.
|
||||
|
||||
---
|
||||
|
||||
### Globale
|
||||
|
||||
Questo significa che puoi abilitarli o disabilitarli globalmente.
|
||||
|
||||
```json title="opencode.json" {14}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mcp": {
|
||||
"my-mcp-foo": {
|
||||
"type": "local",
|
||||
"command": ["bun", "x", "my-mcp-command-foo"]
|
||||
},
|
||||
"my-mcp-bar": {
|
||||
"type": "local",
|
||||
"command": ["bun", "x", "my-mcp-command-bar"]
|
||||
}
|
||||
},
|
||||
"tools": {
|
||||
"my-mcp-foo": false
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Possiamo anche usare un pattern glob per disabilitare tutti gli MCP corrispondenti.
|
||||
|
||||
```json title="opencode.json" {14}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mcp": {
|
||||
"my-mcp-foo": {
|
||||
"type": "local",
|
||||
"command": ["bun", "x", "my-mcp-command-foo"]
|
||||
},
|
||||
"my-mcp-bar": {
|
||||
"type": "local",
|
||||
"command": ["bun", "x", "my-mcp-command-bar"]
|
||||
}
|
||||
},
|
||||
"tools": {
|
||||
"my-mcp*": false
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Qui stiamo usando il pattern glob `my-mcp*` per disabilitare tutti gli MCP.
|
||||
|
||||
---
|
||||
|
||||
### Per agente
|
||||
|
||||
Se hai molti server MCP, potresti volerli abilitare solo per agente e disabilitarli globalmente. Per farlo:
|
||||
|
||||
1. Disabilitalo globalmente come strumento.
|
||||
2. Nella tua [config dell'agente](/docs/agents#tools), abilita il server MCP come strumento.
|
||||
|
||||
```json title="opencode.json" {11, 14-18}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mcp": {
|
||||
"my-mcp": {
|
||||
"type": "local",
|
||||
"command": ["bun", "x", "my-mcp-command"],
|
||||
"enabled": true
|
||||
}
|
||||
},
|
||||
"tools": {
|
||||
"my-mcp*": false
|
||||
},
|
||||
"agent": {
|
||||
"my-agent": {
|
||||
"tools": {
|
||||
"my-mcp*": true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### Pattern glob
|
||||
|
||||
Il pattern glob usa semplici regole di globbing:
|
||||
|
||||
- `*` corrisponde a zero o piu' caratteri qualsiasi (ad esempio `"my-mcp*"` corrisponde a `my-mcp_search`, `my-mcp_list`, ecc.)
|
||||
- `?` corrisponde esattamente a un carattere
|
||||
- Tutti gli altri caratteri corrispondono letteralmente
|
||||
|
||||
:::note
|
||||
Gli strumenti del server MCP vengono registrati con il nome del server come prefisso, quindi per disabilitare tutti gli strumenti di un server e' sufficiente usare:
|
||||
|
||||
```
|
||||
"mymcpservername_*": false
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
## Esempi
|
||||
|
||||
Qui sotto trovi esempi di alcuni server MCP comuni. Puoi inviare una PR se vuoi documentare altri server.
|
||||
|
||||
---
|
||||
|
||||
### Sentry
|
||||
|
||||
Aggiungi il [server MCP di Sentry](https://mcp.sentry.dev) per interagire con i tuoi progetti e le issue di Sentry.
|
||||
|
||||
```json title="opencode.json" {4-8}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mcp": {
|
||||
"sentry": {
|
||||
"type": "remote",
|
||||
"url": "https://mcp.sentry.dev/mcp",
|
||||
"oauth": {}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Dopo aver aggiunto la configurazione, autentica con Sentry:
|
||||
|
||||
```bash
|
||||
opencode mcp auth sentry
|
||||
```
|
||||
|
||||
Questo aprira' una finestra del browser per completare il flusso OAuth e collegare OpenCode al tuo account Sentry.
|
||||
|
||||
Una volta autenticato, puoi usare gli strumenti Sentry nei tuoi prompt per interrogare issue, progetti e dati sugli errori.
|
||||
|
||||
```txt "use sentry"
|
||||
Show me the latest unresolved issues in my project. use sentry
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Context7
|
||||
|
||||
Aggiungi il [server MCP Context7](https://github.com/upstash/context7) per cercare nella documentazione.
|
||||
|
||||
```json title="opencode.json" {4-7}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mcp": {
|
||||
"context7": {
|
||||
"type": "remote",
|
||||
"url": "https://mcp.context7.com/mcp"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Se ti sei registrato per un account gratuito, puoi usare la tua API key e ottenere rate limit piu' alti.
|
||||
|
||||
```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}"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Qui assumiamo che tu abbia impostato la variabile d'ambiente `CONTEXT7_API_KEY`.
|
||||
|
||||
Aggiungi `use context7` ai tuoi prompt per usare il server MCP Context7.
|
||||
|
||||
```txt "use context7"
|
||||
Configure a Cloudflare Worker script to cache JSON API responses for five minutes. use context7
|
||||
```
|
||||
|
||||
In alternativa, puoi aggiungere qualcosa del genere al tuo [AGENTS.md](/docs/rules/).
|
||||
|
||||
```md title="AGENTS.md"
|
||||
When you need to search docs, use `context7` tools.
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Grep by Vercel
|
||||
|
||||
Aggiungi il server MCP [Grep by Vercel](https://grep.app) per cercare snippet di codice su GitHub.
|
||||
|
||||
```json title="opencode.json" {4-7}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mcp": {
|
||||
"gh_grep": {
|
||||
"type": "remote",
|
||||
"url": "https://mcp.grep.app"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Dato che abbiamo chiamato il nostro server MCP `gh_grep`, puoi aggiungere `use the gh_grep tool` ai tuoi prompt per fare in modo che l'agente lo usi.
|
||||
|
||||
```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
|
||||
```
|
||||
|
||||
In alternativa, puoi aggiungere qualcosa del genere al tuo [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/it/models.mdx
Normal file
222
packages/web/src/content/docs/it/models.mdx
Normal file
@@ -0,0 +1,222 @@
|
||||
---
|
||||
title: Modelli
|
||||
description: Configurare un provider LLM e un modello.
|
||||
---
|
||||
|
||||
OpenCode usa [AI SDK](https://ai-sdk.dev/) e [Models.dev](https://models.dev) per supportare **75+ provider LLM** e supporta anche l'esecuzione di modelli locali.
|
||||
|
||||
---
|
||||
|
||||
## Providers
|
||||
|
||||
I provider piu popolari sono precaricati per impostazione predefinita. Se hai aggiunto le credenziali di un provider tramite il comando `/connect`, saranno disponibili quando avvii OpenCode.
|
||||
|
||||
[Scopri di piu](/docs/providers) sui provider.
|
||||
|
||||
---
|
||||
|
||||
## Seleziona un modello
|
||||
|
||||
Dopo aver configurato il provider, puoi selezionare il modello che vuoi digitando:
|
||||
|
||||
```bash frame="none"
|
||||
/models
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Modelli consigliati
|
||||
|
||||
Esistono moltissimi modelli, e ne escono di nuovi ogni settimana.
|
||||
|
||||
:::tip
|
||||
Valuta di usare uno dei modelli che consigliamo.
|
||||
:::
|
||||
|
||||
Tuttavia, solo alcuni sono davvero bravi sia a generare codice sia a chiamare strumenti.
|
||||
|
||||
Ecco alcuni modelli che funzionano bene con OpenCode, in nessun ordine particolare. (Non e una lista esaustiva e potrebbe non essere aggiornata):
|
||||
|
||||
- GPT 5.2
|
||||
- GPT 5.1 Codex
|
||||
- Claude Opus 4.5
|
||||
- Claude Sonnet 4.5
|
||||
- Minimax M2.1
|
||||
- Gemini 3 Pro
|
||||
|
||||
---
|
||||
|
||||
## Imposta un predefinito
|
||||
|
||||
Per impostarne uno come modello predefinito, puoi impostare la chiave `model` nella config di OpenCode.
|
||||
|
||||
```json title="opencode.json" {3}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"model": "lmstudio/google/gemma-3n-e4b"
|
||||
}
|
||||
```
|
||||
|
||||
Qui l'ID completo e `provider_id/model_id`. Per esempio, se usi [OpenCode Zen](/docs/zen), useresti `opencode/gpt-5.1-codex` per GPT 5.1 Codex.
|
||||
|
||||
Se hai configurato un [provider personalizzato](/docs/providers#custom), `provider_id` e la chiave nella sezione `provider` della config e `model_id` e la chiave in `provider.models`.
|
||||
|
||||
---
|
||||
|
||||
## Configure models
|
||||
|
||||
Puoi configurare globalmente le opzioni di un modello tramite la config.
|
||||
|
||||
```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,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
Qui stiamo configurando impostazioni globali per due modelli integrati: `gpt-5` quando viene usato tramite il provider `openai` e `claude-sonnet-4-20250514` quando viene usato tramite il provider `anthropic`.
|
||||
I nomi di provider e modelli integrati si trovano su [Models.dev](https://models.dev).
|
||||
|
||||
Puoi anche configurare queste opzioni per gli agenti che usi. La config dell'agente sovrascrive le opzioni globali definite qui. [Scopri di piu](/docs/agents/#additional).
|
||||
|
||||
Puoi anche definire varianti personalizzate che estendono quelle integrate. Le varianti ti permettono di configurare impostazioni diverse per lo stesso modello senza creare voci duplicate:
|
||||
|
||||
```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",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Variants
|
||||
|
||||
Molti modelli supportano piu varianti con configurazioni diverse. OpenCode include varianti predefinite integrate per i provider piu comuni.
|
||||
|
||||
### Built-in variants
|
||||
|
||||
OpenCode include varianti predefinite per molti provider:
|
||||
|
||||
**Anthropic**:
|
||||
|
||||
- `high` - High thinking budget (default)
|
||||
- `max` - Maximum thinking budget
|
||||
|
||||
**OpenAI**:
|
||||
|
||||
Varies by model but roughly:
|
||||
|
||||
- `none` - No reasoning
|
||||
- `minimal` - Minimal reasoning effort
|
||||
- `low` - Low reasoning effort
|
||||
- `medium` - Medium reasoning effort
|
||||
- `high` - High reasoning effort
|
||||
- `xhigh` - Extra high reasoning effort
|
||||
|
||||
**Google**:
|
||||
|
||||
- `low` - Lower effort/token budget
|
||||
- `high` - Higher effort/token budget
|
||||
|
||||
:::tip
|
||||
Questa lista non e completa. Anche molti altri provider hanno default integrati.
|
||||
:::
|
||||
|
||||
### Custom variants
|
||||
|
||||
Puoi sovrascrivere varianti esistenti o aggiungerne di tue:
|
||||
|
||||
```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,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
### Cycle variants
|
||||
|
||||
Usa il keybind `variant_cycle` per passare rapidamente tra le varianti. [Scopri di piu](/docs/keybinds).
|
||||
|
||||
---
|
||||
|
||||
## Loading models
|
||||
|
||||
Quando OpenCode si avvia, controlla i modelli in questo ordine di priorita:
|
||||
|
||||
1. Il flag da riga di comando `--model` o `-m`. Il formato e lo stesso della config: `provider_id/model_id`.
|
||||
|
||||
2. La lista dei modelli nella config di OpenCode.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"model": "anthropic/claude-sonnet-4-20250514"
|
||||
}
|
||||
```
|
||||
|
||||
Qui il formato e `provider/model`.
|
||||
|
||||
3. L'ultimo modello usato.
|
||||
|
||||
4. Il primo modello in base a una priorita interna.
|
||||
330
packages/web/src/content/docs/it/modes.mdx
Normal file
330
packages/web/src/content/docs/it/modes.mdx
Normal file
@@ -0,0 +1,330 @@
|
||||
---
|
||||
title: Modalita
|
||||
description: Modalita diverse per casi d'uso diversi.
|
||||
---
|
||||
|
||||
:::caution
|
||||
Le modalita ora si configurano tramite l'opzione `agent` nella configurazione di opencode. L'opzione
|
||||
`mode` e ora deprecata. [Scopri di piu](/docs/agents).
|
||||
:::
|
||||
|
||||
Le modalita in opencode ti permettono di personalizzare comportamento, strumenti e prompt per casi d'uso diversi.
|
||||
|
||||
Include due modalita integrate: **build** e **plan**. Puoi personalizzarle oppure configurarne di tue tramite la configurazione di opencode.
|
||||
|
||||
Puoi passare da una modalita all'altra durante una sessione oppure configurarle nel file di configurazione.
|
||||
|
||||
---
|
||||
|
||||
## Integrate
|
||||
|
||||
opencode include due modalita integrate.
|
||||
|
||||
---
|
||||
|
||||
### Build
|
||||
|
||||
Build e la modalita **predefinita** con tutti gli strumenti abilitati. E la modalita standard per il lavoro di sviluppo quando ti serve accesso completo alle operazioni sui file e ai comandi di sistema.
|
||||
|
||||
---
|
||||
|
||||
### Plan
|
||||
|
||||
Una modalita limitata pensata per pianificazione e analisi. In modalita plan, i seguenti strumenti sono disabilitati per impostazione predefinita:
|
||||
|
||||
- `write` - Non puo creare nuovi file
|
||||
- `edit` - Non puo modificare file esistenti, tranne i file in `.opencode/plans/*.md` per dettagliare il piano
|
||||
- `patch` - Non puo applicare patch
|
||||
- `bash` - Non puo eseguire comandi shell
|
||||
|
||||
Questa modalita e utile quando vuoi che l'AI analizzi il codice, suggerisca modifiche o crei piani senza apportare modifiche effettive alla codebase.
|
||||
|
||||
---
|
||||
|
||||
## Cambiare modalita
|
||||
|
||||
Puoi cambiare modalita durante una sessione usando il tasto _Tab_. In alternativa, puoi usare il keybind `switch_mode` che hai configurato.
|
||||
|
||||
Vedi anche: [Formatter](/docs/formatters) per informazioni sulla configurazione della formattazione del codice.
|
||||
|
||||
---
|
||||
|
||||
## Configura
|
||||
|
||||
Puoi personalizzare le modalita integrate o crearne di tue tramite configurazione. Le modalita si possono configurare in due modi:
|
||||
|
||||
### Configurazione JSON
|
||||
|
||||
Configura le modalita nel file di configurazione `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
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Configurazione Markdown
|
||||
|
||||
Puoi anche definire modalita usando file markdown. Mettili in:
|
||||
|
||||
- Globale: `~/.config/opencode/modes/`
|
||||
- Progetto: `.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
|
||||
---
|
||||
|
||||
You are in code review mode. Focus on:
|
||||
|
||||
- Code quality and best practices
|
||||
- Potential bugs and edge cases
|
||||
- Performance implications
|
||||
- Security considerations
|
||||
|
||||
Provide constructive feedback without making direct changes.
|
||||
```
|
||||
|
||||
Il nome del file markdown diventa il nome della modalita (ad es. `review.md` crea una modalita `review`).
|
||||
|
||||
Vediamo queste opzioni di configurazione nel dettaglio.
|
||||
|
||||
---
|
||||
|
||||
### Modello
|
||||
|
||||
Usa la configurazione `model` per sovrascrivere il modello predefinito per questa modalita. E utile per usare modelli diversi ottimizzati per task diversi: per esempio, un modello piu veloce per la pianificazione e uno piu capace per l'implementazione.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"mode": {
|
||||
"plan": {
|
||||
"model": "anthropic/claude-haiku-4-20250514"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Temperatura
|
||||
|
||||
Controlla casualita e creativita delle risposte dell'AI con la configurazione `temperature`. Valori piu bassi rendono le risposte piu focalizzate e deterministiche, mentre valori piu alti aumentano creativita e variabilita.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"mode": {
|
||||
"plan": {
|
||||
"temperature": 0.1
|
||||
},
|
||||
"creative": {
|
||||
"temperature": 0.8
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
I valori di temperatura di solito vanno da 0.0 a 1.0:
|
||||
|
||||
- **0.0-0.2**: risposte molto focalizzate e deterministiche, ideali per analisi del codice e pianificazione
|
||||
- **0.3-0.5**: risposte bilanciate con un po' di creativita, buone per task di sviluppo generici
|
||||
- **0.6-1.0**: risposte piu creative e variabili, utili per brainstorming ed esplorazione
|
||||
|
||||
```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 non viene specificata alcuna temperatura, opencode usa i default specifici del modello (tipicamente 0 per la maggior parte dei modelli, 0.55 per i modelli Qwen).
|
||||
|
||||
---
|
||||
|
||||
### Prompt
|
||||
|
||||
Specifica un file di prompt di sistema personalizzato per questa modalita con la configurazione `prompt`. Il file dovrebbe contenere istruzioni specifiche per lo scopo della modalita.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"mode": {
|
||||
"review": {
|
||||
"prompt": "{file:./prompts/code-review.txt}"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Questo percorso e relativo a dove si trova il file di configurazione. Quindi funziona
|
||||
sia per la configurazione globale di opencode sia per quella specifica del progetto.
|
||||
|
||||
---
|
||||
|
||||
### Strumenti
|
||||
|
||||
Controlla quali strumenti sono disponibili in questa modalita con la configurazione `tools`. Puoi abilitare o disabilitare strumenti specifici impostandoli a `true` o `false`.
|
||||
|
||||
```json
|
||||
{
|
||||
"mode": {
|
||||
"readonly": {
|
||||
"tools": {
|
||||
"write": false,
|
||||
"edit": false,
|
||||
"bash": false,
|
||||
"read": true,
|
||||
"grep": true,
|
||||
"glob": true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Se non specifichi gli strumenti, tutti gli strumenti sono abilitati per impostazione predefinita.
|
||||
|
||||
---
|
||||
|
||||
#### Strumenti disponibili
|
||||
|
||||
Ecco tutti gli strumenti che possono essere controllati tramite la configurazione della modalita.
|
||||
|
||||
| Strumento | Descrizione |
|
||||
| ----------- | --------------------------------- |
|
||||
| `bash` | Esegue comandi shell |
|
||||
| `edit` | Modifica file esistenti |
|
||||
| `write` | Crea nuovi file |
|
||||
| `read` | Legge contenuti dei file |
|
||||
| `grep` | Cerca nei contenuti dei file |
|
||||
| `glob` | Trova file per pattern |
|
||||
| `list` | Elenca contenuti di una directory |
|
||||
| `patch` | Applica patch ai file |
|
||||
| `todowrite` | Gestisce liste todo |
|
||||
| `todoread` | Legge liste todo |
|
||||
| `webfetch` | Recupera contenuti web |
|
||||
|
||||
---
|
||||
|
||||
## Modalita personalizzate
|
||||
|
||||
Puoi creare modalita personalizzate aggiungendole alla configurazione. Ecco esempi con entrambi gli approcci:
|
||||
|
||||
### Usando la configurazione 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 file markdown
|
||||
|
||||
Crea file di modalita in `.opencode/modes/` per modalita specifiche del progetto oppure in `~/.config/opencode/modes/` per modalita globali:
|
||||
|
||||
```markdown title=".opencode/modes/debug.md"
|
||||
---
|
||||
temperature: 0.1
|
||||
tools:
|
||||
bash: true
|
||||
read: true
|
||||
grep: true
|
||||
write: false
|
||||
edit: false
|
||||
---
|
||||
|
||||
You are in debug mode. Your primary goal is to help investigate and diagnose issues.
|
||||
|
||||
Focus on:
|
||||
|
||||
- Understanding the problem through careful analysis
|
||||
- Using bash commands to inspect system state
|
||||
- Reading relevant files and logs
|
||||
- Searching for patterns and anomalies
|
||||
- Providing clear explanations of findings
|
||||
|
||||
Do not make any changes to files. Only investigate and report.
|
||||
```
|
||||
|
||||
```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
|
||||
---
|
||||
|
||||
You are in refactoring mode. Focus on improving code quality without changing functionality.
|
||||
|
||||
Priorities:
|
||||
|
||||
- Improve code readability and maintainability
|
||||
- Apply consistent naming conventions
|
||||
- Reduce code duplication
|
||||
- Optimize performance where appropriate
|
||||
- Ensure all tests continue to pass
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Casi d'uso
|
||||
|
||||
Ecco alcuni casi d'uso comuni per le diverse modalita.
|
||||
|
||||
- **Modalita Build**: sviluppo completo con tutti gli strumenti abilitati
|
||||
- **Modalita Plan**: analisi e pianificazione senza apportare modifiche
|
||||
- **Modalita Review**: code review con accesso in sola lettura piu strumenti di documentazione
|
||||
- **Modalita Debug**: focalizzata sull'investigazione con strumenti bash e read abilitati
|
||||
- **Modalita Docs**: scrittura di documentazione con operazioni sui file ma senza comandi di sistema
|
||||
|
||||
Potresti anche trovare che modelli diversi funzionano meglio per casi d'uso diversi.
|
||||
57
packages/web/src/content/docs/it/network.mdx
Normal file
57
packages/web/src/content/docs/it/network.mdx
Normal file
@@ -0,0 +1,57 @@
|
||||
---
|
||||
title: Rete
|
||||
description: Configura proxy e certificati personalizzati.
|
||||
---
|
||||
|
||||
OpenCode supporta le variabili d'ambiente standard per i proxy e certificati personalizzati per ambienti di rete enterprise.
|
||||
|
||||
---
|
||||
|
||||
## Proxy
|
||||
|
||||
OpenCode rispetta le variabili d'ambiente standard dei proxy.
|
||||
|
||||
```bash
|
||||
# HTTPS proxy (recommended)
|
||||
export HTTPS_PROXY=https://proxy.example.com:8080
|
||||
|
||||
# HTTP proxy (if HTTPS not available)
|
||||
export HTTP_PROXY=http://proxy.example.com:8080
|
||||
|
||||
# Bypass proxy for local server (required)
|
||||
export NO_PROXY=localhost,127.0.0.1
|
||||
```
|
||||
|
||||
:::caution
|
||||
La TUI comunica con un server HTTP locale. Devi bypassare il proxy per questa connessione per evitare loop di instradamento.
|
||||
:::
|
||||
|
||||
Puoi configurare porta e hostname del server usando i [flag della CLI](/docs/cli#run).
|
||||
|
||||
---
|
||||
|
||||
### Autenticazione
|
||||
|
||||
Se il proxy richiede autenticazione basic, includi le credenziali nell'URL.
|
||||
|
||||
```bash
|
||||
export HTTPS_PROXY=http://username:password@proxy.example.com:8080
|
||||
```
|
||||
|
||||
:::caution
|
||||
Evita di hardcodare le password. Usa variabili d'ambiente o un archivio sicuro per le credenziali.
|
||||
:::
|
||||
|
||||
Per proxy che richiedono autenticazioni avanzate come NTLM o Kerberos, valuta l'uso di un LLM Gateway che supporti il tuo metodo di autenticazione.
|
||||
|
||||
---
|
||||
|
||||
## Certificati personalizzati
|
||||
|
||||
Se la tua organizzazione usa CA personalizzate per connessioni HTTPS, configura OpenCode in modo che si fidi di esse.
|
||||
|
||||
```bash
|
||||
export NODE_EXTRA_CA_CERTS=/path/to/ca-cert.pem
|
||||
```
|
||||
|
||||
Questo funziona sia per connessioni tramite proxy sia per l'accesso diretto alle API.
|
||||
237
packages/web/src/content/docs/it/permissions.mdx
Normal file
237
packages/web/src/content/docs/it/permissions.mdx
Normal file
@@ -0,0 +1,237 @@
|
||||
---
|
||||
title: Permessi
|
||||
description: Controlla quali azioni richiedono approvazione prima di essere eseguite.
|
||||
---
|
||||
|
||||
OpenCode usa la configurazione `permission` per decidere se una determinata azione deve essere eseguita automaticamente, se deve chiederti conferma o se deve essere bloccata.
|
||||
|
||||
A partire da `v1.1.1`, la vecchia configurazione booleana `tools` e' deprecata ed e' stata incorporata in `permission`. La vecchia configurazione `tools` e' ancora supportata per retrocompatibilita'.
|
||||
|
||||
---
|
||||
|
||||
## Azioni
|
||||
|
||||
Ogni regola di permesso si risolve in uno tra:
|
||||
|
||||
- `"allow"` — esegui senza approvazione
|
||||
- `"ask"` — chiedi approvazione
|
||||
- `"deny"` — blocca l'azione
|
||||
|
||||
---
|
||||
|
||||
## Configurazione
|
||||
|
||||
Puoi impostare i permessi globalmente (con `*`) e sovrascrivere quelli di strumenti specifici.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"*": "ask",
|
||||
"bash": "allow",
|
||||
"edit": "deny"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Puoi anche impostare tutti i permessi in una sola volta:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": "allow"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Regole granulari (sintassi a oggetto)
|
||||
|
||||
Per la maggior parte dei permessi, puoi usare un oggetto per applicare azioni diverse in base all'input dello strumento.
|
||||
|
||||
```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"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Le regole vengono valutate per corrispondenza di pattern e **vince l'ultima regola che corrisponde**. Un pattern comune e' mettere prima la regola jolly `"*"` e poi regole piu' specifiche.
|
||||
|
||||
### Wildcard
|
||||
|
||||
I pattern dei permessi usano un semplice matching con wildcard:
|
||||
|
||||
- `*` corrisponde a zero o piu' caratteri qualsiasi
|
||||
- `?` corrisponde esattamente a un carattere
|
||||
- Tutti gli altri caratteri corrispondono letteralmente
|
||||
|
||||
### Espansione della home directory
|
||||
|
||||
Puoi usare `~` o `$HOME` all'inizio di un pattern per riferirti alla tua home directory. Questo e' particolarmente utile per le regole [`external_directory`](#external-directories).
|
||||
|
||||
- `~/projects/*` -> `/Users/username/projects/*`
|
||||
- `$HOME/projects/*` -> `/Users/username/projects/*`
|
||||
- `~` -> `/Users/username`
|
||||
|
||||
### Directory esterne
|
||||
|
||||
Usa `external_directory` per consentire chiamate a strumenti che toccano percorsi al di fuori della directory di lavoro da cui e' stato avviato OpenCode. Si applica a qualsiasi strumento che accetta un path come input (ad esempio `read`, `edit`, `list`, `glob`, `grep` e molti comandi `bash`).
|
||||
|
||||
L'espansione della home (come `~/...`) influisce solo su come viene scritto un pattern. Non rende un percorso esterno parte della workspace corrente, quindi i path fuori dalla directory di lavoro devono comunque essere consentiti tramite `external_directory`.
|
||||
|
||||
Per esempio, questo consente l'accesso a tutto sotto `~/projects/personal/`:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"external_directory": {
|
||||
"~/projects/personal/**": "allow"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Qualsiasi directory consentita qui eredita gli stessi default della workspace corrente. Dato che [`read` di default e' `allow`](#defaults), anche le letture sono consentite per le voci sotto `external_directory` a meno di sovrascritture. Aggiungi regole esplicite quando uno strumento deve essere limitato su questi path, ad esempio bloccando le modifiche ma lasciando consentite le letture:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"external_directory": {
|
||||
"~/projects/personal/**": "allow"
|
||||
},
|
||||
"edit": {
|
||||
"~/projects/personal/**": "deny"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Mantieni l'elenco limitato a percorsi fidati e aggiungi regole extra di allow/deny quando serve per altri strumenti (ad esempio `bash`).
|
||||
|
||||
---
|
||||
|
||||
## Permessi disponibili
|
||||
|
||||
I permessi di OpenCode sono indicizzati per nome dello strumento, piu' un paio di guardrail di sicurezza:
|
||||
|
||||
- `read` — lettura di un file (corrisponde al percorso del file)
|
||||
- `edit` — tutte le modifiche ai file (include `edit`, `write`, `patch`, `multiedit`)
|
||||
- `glob` — ricerca file tramite glob (corrisponde al pattern glob)
|
||||
- `grep` — ricerca nel contenuto (corrisponde al pattern regex)
|
||||
- `list` — elenco file in una directory (corrisponde al path della directory)
|
||||
- `bash` — esecuzione comandi di shell (corrisponde a comandi parsati come `git status --porcelain`)
|
||||
- `task` — avvio subagenti (corrisponde al tipo di subagente)
|
||||
- `skill` — caricamento di una skill (corrisponde al nome della skill)
|
||||
- `lsp` — esecuzione query LSP (attualmente non granulare)
|
||||
- `todoread`, `todowrite` — lettura/aggiornamento della todo list
|
||||
- `webfetch` — fetch di un URL (corrisponde all'URL)
|
||||
- `websearch`, `codesearch` — ricerca web/codice (corrisponde alla query)
|
||||
- `external_directory` — si attiva quando uno strumento tocca percorsi fuori dalla working directory del progetto
|
||||
- `doom_loop` — si attiva quando la stessa chiamata a uno strumento si ripete 3 volte con input identico
|
||||
|
||||
---
|
||||
|
||||
## Default
|
||||
|
||||
Se non specifichi nulla, OpenCode parte da default permissivi:
|
||||
|
||||
- La maggior parte dei permessi di default e' `"allow"`.
|
||||
- `doom_loop` ed `external_directory` di default sono `"ask"`.
|
||||
- `read` e' `"allow"`, ma i file `.env` sono negati di default:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"permission": {
|
||||
"read": {
|
||||
"*": "allow",
|
||||
"*.env": "deny",
|
||||
"*.env.*": "deny",
|
||||
"*.env.example": "allow"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Cosa fa "Ask"
|
||||
|
||||
Quando OpenCode chiede approvazione, la UI offre tre esiti:
|
||||
|
||||
- `once` — approva solo questa richiesta
|
||||
- `always` — approva richieste future che corrispondono ai pattern suggeriti (per il resto della sessione corrente di OpenCode)
|
||||
- `reject` — nega la richiesta
|
||||
|
||||
L'insieme di pattern che `always` approverebbe e' fornito dallo strumento (ad esempio, le approvazioni per bash in genere mettono in whitelist un prefisso di comando sicuro come `git status*`).
|
||||
|
||||
---
|
||||
|
||||
## Agenti
|
||||
|
||||
Puoi sovrascrivere i permessi per agente. I permessi dell'agente vengono uniti alla configurazione globale e le regole dell'agente hanno precedenza. [Scopri di piu'](/docs/agents#permissions) sui permessi degli agenti.
|
||||
|
||||
:::note
|
||||
Fai riferimento alla sezione [Regole granulari (sintassi a oggetto)](#granular-rules-object-syntax) per esempi piu' dettagliati di pattern matching.
|
||||
:::
|
||||
|
||||
```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"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Puoi anche configurare i permessi dell'agente in Markdown:
|
||||
|
||||
```markdown title="~/.config/opencode/agents/review.md"
|
||||
---
|
||||
description: Code review without edits
|
||||
mode: subagent
|
||||
permission:
|
||||
edit: deny
|
||||
bash: ask
|
||||
webfetch: deny
|
||||
---
|
||||
|
||||
Only analyze code and suggest changes.
|
||||
```
|
||||
|
||||
:::tip
|
||||
Usa il pattern matching per comandi con argomenti. `"grep *"` consente `grep pattern file.txt`, mentre `"grep"` da solo lo bloccherebbe. Comandi come `git status` funzionano per il comportamento di default ma richiedono un permesso esplicito (come `"git status *"`) quando vengono passati argomenti.
|
||||
:::
|
||||
384
packages/web/src/content/docs/it/plugins.mdx
Normal file
384
packages/web/src/content/docs/it/plugins.mdx
Normal file
@@ -0,0 +1,384 @@
|
||||
---
|
||||
title: Plugin
|
||||
description: Scrivi plugin per estendere OpenCode.
|
||||
---
|
||||
|
||||
I plugin ti permettono di estendere OpenCode agganciandoti a vari eventi e personalizzando il comportamento. Puoi creare plugin per aggiungere nuove funzionalita', integrare servizi esterni o modificare il comportamento predefinito di OpenCode.
|
||||
|
||||
Per esempi, dai un'occhiata ai [plugin](/docs/ecosystem#plugins) creati dalla community.
|
||||
|
||||
---
|
||||
|
||||
## Usare un plugin
|
||||
|
||||
Ci sono due modi per caricare i plugin.
|
||||
|
||||
---
|
||||
|
||||
### Da file locali
|
||||
|
||||
Metti file JavaScript o TypeScript nella directory dei plugin.
|
||||
|
||||
- `.opencode/plugins/` - plugin a livello progetto
|
||||
- `~/.config/opencode/plugins/` - plugin globali
|
||||
|
||||
I file in queste directory vengono caricati automaticamente all'avvio.
|
||||
|
||||
---
|
||||
|
||||
### Da npm
|
||||
|
||||
Specifica i pacchetti npm nel tuo file di configurazione.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"plugin": ["opencode-helicone-session", "opencode-wakatime", "@my-org/custom-plugin"]
|
||||
}
|
||||
```
|
||||
|
||||
Sono supportati sia pacchetti npm normali sia scoped.
|
||||
|
||||
Sfoglia i plugin disponibili nell'[ecosistema](/docs/ecosystem#plugins).
|
||||
|
||||
---
|
||||
|
||||
### Come vengono installati i plugin
|
||||
|
||||
I **plugin npm** vengono installati automaticamente usando Bun all'avvio. I pacchetti e le loro dipendenze vengono cache-ati in `~/.cache/opencode/node_modules/`.
|
||||
|
||||
I **plugin locali** vengono caricati direttamente dalla directory dei plugin. Per usare pacchetti esterni, devi creare un `package.json` nella directory di configurazione (vedi [Dipendenze](#dependencies)) oppure pubblicare il plugin su npm e [aggiungerlo alla configurazione](/docs/config#plugins).
|
||||
|
||||
---
|
||||
|
||||
### Ordine di caricamento
|
||||
|
||||
I plugin vengono caricati da tutte le sorgenti e tutti gli hook vengono eseguiti in sequenza. L'ordine di caricamento e':
|
||||
|
||||
1. Config globale (`~/.config/opencode/opencode.json`)
|
||||
2. Config di progetto (`opencode.json`)
|
||||
3. Directory plugin globale (`~/.config/opencode/plugins/`)
|
||||
4. Directory plugin di progetto (`.opencode/plugins/`)
|
||||
|
||||
I pacchetti npm duplicati con lo stesso nome e versione vengono caricati una sola volta. Tuttavia, un plugin locale e un plugin npm con nomi simili vengono entrambi caricati separatamente.
|
||||
|
||||
---
|
||||
|
||||
## Creare un plugin
|
||||
|
||||
Un plugin e' un **modulo JavaScript/TypeScript** che esporta una o piu' funzioni di plugin. Ogni funzione riceve un oggetto di contesto e restituisce un oggetto di hook.
|
||||
|
||||
---
|
||||
|
||||
### Dipendenze
|
||||
|
||||
I plugin locali e gli strumenti personalizzati possono usare pacchetti npm esterni. Aggiungi un `package.json` alla tua directory di configurazione con le dipendenze di cui hai bisogno.
|
||||
|
||||
```json title=".opencode/package.json"
|
||||
{
|
||||
"dependencies": {
|
||||
"shescape": "^2.1.0"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
OpenCode esegue `bun install` all'avvio per installarle. I tuoi plugin e strumenti potranno poi importarle.
|
||||
|
||||
```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)
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Struttura base
|
||||
|
||||
```js title=".opencode/plugins/example.js"
|
||||
export const MyPlugin = async ({ project, client, $, directory, worktree }) => {
|
||||
console.log("Plugin initialized!")
|
||||
|
||||
return {
|
||||
// Hook implementations go here
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
La funzione del plugin riceve:
|
||||
|
||||
- `project`: informazioni sul progetto corrente.
|
||||
- `directory`: la working directory corrente.
|
||||
- `worktree`: il path del worktree git.
|
||||
- `client`: un client SDK di opencode per interagire con l'AI.
|
||||
- `$`: la [shell API](https://bun.com/docs/runtime/shell) di Bun per eseguire comandi.
|
||||
|
||||
---
|
||||
|
||||
### Supporto TypeScript
|
||||
|
||||
Per i plugin TypeScript, puoi importare i tipi dal pacchetto plugin:
|
||||
|
||||
```ts title="my-plugin.ts" {1}
|
||||
import type { Plugin } from "@opencode-ai/plugin"
|
||||
|
||||
export const MyPlugin: Plugin = async ({ project, client, $, directory, worktree }) => {
|
||||
return {
|
||||
// Type-safe hook implementations
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Eventi
|
||||
|
||||
I plugin possono sottoscrivere eventi come mostrato sotto nella sezione Esempi. Ecco l'elenco dei diversi eventi disponibili.
|
||||
|
||||
#### Eventi dei comandi
|
||||
|
||||
- `command.executed`
|
||||
|
||||
#### Eventi dei file
|
||||
|
||||
- `file.edited`
|
||||
- `file.watcher.updated`
|
||||
|
||||
#### Eventi di installazione
|
||||
|
||||
- `installation.updated`
|
||||
|
||||
#### Eventi LSP
|
||||
|
||||
- `lsp.client.diagnostics`
|
||||
- `lsp.updated`
|
||||
|
||||
#### Eventi dei messaggi
|
||||
|
||||
- `message.part.removed`
|
||||
- `message.part.updated`
|
||||
- `message.removed`
|
||||
- `message.updated`
|
||||
|
||||
#### Eventi dei permessi
|
||||
|
||||
- `permission.asked`
|
||||
- `permission.replied`
|
||||
|
||||
#### Eventi del server
|
||||
|
||||
- `server.connected`
|
||||
|
||||
#### Eventi delle sessioni
|
||||
|
||||
- `session.created`
|
||||
- `session.compacted`
|
||||
- `session.deleted`
|
||||
- `session.diff`
|
||||
- `session.error`
|
||||
- `session.idle`
|
||||
- `session.status`
|
||||
- `session.updated`
|
||||
|
||||
#### Eventi della todo
|
||||
|
||||
- `todo.updated`
|
||||
|
||||
#### Eventi della shell
|
||||
|
||||
- `shell.env`
|
||||
|
||||
#### Eventi degli strumenti
|
||||
|
||||
- `tool.execute.after`
|
||||
- `tool.execute.before`
|
||||
|
||||
#### Eventi TUI
|
||||
|
||||
- `tui.prompt.append`
|
||||
- `tui.command.execute`
|
||||
- `tui.toast.show`
|
||||
|
||||
---
|
||||
|
||||
## Esempi
|
||||
|
||||
Ecco alcuni esempi di plugin che puoi usare per estendere opencode.
|
||||
|
||||
---
|
||||
|
||||
### Invia notifiche
|
||||
|
||||
Invia notifiche quando avvengono certi eventi:
|
||||
|
||||
```js title=".opencode/plugins/notification.js"
|
||||
export const NotificationPlugin = async ({ project, client, $, directory, worktree }) => {
|
||||
return {
|
||||
event: async ({ event }) => {
|
||||
// Send notification on session completion
|
||||
if (event.type === "session.idle") {
|
||||
await $`osascript -e 'display notification "Session completed!" with title "opencode"'`
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Stiamo usando `osascript` per eseguire AppleScript su macOS. Qui lo usiamo per inviare notifiche.
|
||||
|
||||
:::note
|
||||
Se usi l'app desktop di OpenCode, puo' inviare automaticamente notifiche di sistema quando una risposta e' pronta o quando una sessione va in errore.
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
### Protezione .env
|
||||
|
||||
Impedisci a opencode di leggere i file `.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("Do not read .env files")
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Inietta variabili d'ambiente
|
||||
|
||||
Inietta variabili d'ambiente in tutte le esecuzioni di shell (strumenti AI e terminali utente):
|
||||
|
||||
```javascript title=".opencode/plugins/inject-env.js"
|
||||
export const InjectEnvPlugin = async () => {
|
||||
return {
|
||||
"shell.env": async (input, output) => {
|
||||
output.env.MY_API_KEY = "secret"
|
||||
output.env.PROJECT_ROOT = input.cwd
|
||||
},
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Strumenti personalizzati
|
||||
|
||||
I plugin possono anche aggiungere strumenti personalizzati a 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: "This is a custom tool",
|
||||
args: {
|
||||
foo: tool.schema.string(),
|
||||
},
|
||||
async execute(args, context) {
|
||||
const { directory, worktree } = context
|
||||
return `Hello ${args.foo} from ${directory} (worktree: ${worktree})`
|
||||
},
|
||||
}),
|
||||
},
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
L'helper `tool` crea uno strumento personalizzato che opencode puo' chiamare. Accetta una funzione di schema Zod e restituisce una definizione di tool con:
|
||||
|
||||
- `description`: cosa fa lo strumento
|
||||
- `args`: schema Zod per gli argomenti dello strumento
|
||||
- `execute`: funzione eseguita quando lo strumento viene chiamato
|
||||
|
||||
I tuoi strumenti personalizzati saranno disponibili in opencode insieme agli strumenti integrati.
|
||||
|
||||
---
|
||||
|
||||
### Logging
|
||||
|
||||
Usa `client.app.log()` invece di `console.log` per logging strutturato:
|
||||
|
||||
```ts title=".opencode/plugins/my-plugin.ts"
|
||||
export const MyPlugin = async ({ client }) => {
|
||||
await client.app.log({
|
||||
body: {
|
||||
service: "my-plugin",
|
||||
level: "info",
|
||||
message: "Plugin initialized",
|
||||
extra: { foo: "bar" },
|
||||
},
|
||||
})
|
||||
}
|
||||
```
|
||||
|
||||
Livelli: `debug`, `info`, `warn`, `error`. Vedi la [documentazione SDK](https://opencode.ai/docs/sdk) per i dettagli.
|
||||
|
||||
---
|
||||
|
||||
### Hook di compaction
|
||||
|
||||
Personalizza il contesto incluso quando una sessione viene compattata:
|
||||
|
||||
```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) => {
|
||||
// Inject additional context into the compaction prompt
|
||||
output.context.push(`
|
||||
## Custom Context
|
||||
|
||||
Include any state that should persist across compaction:
|
||||
- Current task status
|
||||
- Important decisions made
|
||||
- Files being actively worked on
|
||||
`)
|
||||
},
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
L'hook `experimental.session.compacting` scatta prima che l'LLM generi un riassunto di continuazione. Usalo per iniettare contesto specifico di dominio che il prompt di compaction predefinito potrebbe non includere.
|
||||
|
||||
Puoi anche sostituire completamente il prompt di compaction impostando `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) => {
|
||||
// Replace the entire compaction prompt
|
||||
output.prompt = `
|
||||
You are generating a continuation prompt for a multi-agent swarm session.
|
||||
|
||||
Summarize:
|
||||
1. The current task and its status
|
||||
2. Which files are being modified and by whom
|
||||
3. Any blockers or dependencies between agents
|
||||
4. The next steps to complete the work
|
||||
|
||||
Format as a structured prompt that a new agent can use to resume work.
|
||||
`
|
||||
},
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Quando `output.prompt` e' impostato, sostituisce completamente il prompt di compaction predefinito. In questo caso l'array `output.context` viene ignorato.
|
||||
1888
packages/web/src/content/docs/it/providers.mdx
Normal file
1888
packages/web/src/content/docs/it/providers.mdx
Normal file
File diff suppressed because it is too large
Load Diff
180
packages/web/src/content/docs/it/rules.mdx
Normal file
180
packages/web/src/content/docs/it/rules.mdx
Normal file
@@ -0,0 +1,180 @@
|
||||
---
|
||||
title: Regole
|
||||
description: Imposta istruzioni personalizzate per opencode.
|
||||
---
|
||||
|
||||
Puoi fornire istruzioni personalizzate a opencode creando un file `AGENTS.md`. E' simile alle regole di Cursor. Contiene istruzioni che verranno incluse nel contesto dell'LLM per personalizzarne il comportamento per il tuo progetto.
|
||||
|
||||
---
|
||||
|
||||
## Initialize
|
||||
|
||||
Per creare un nuovo file `AGENTS.md`, puoi eseguire il comando `/init` in opencode.
|
||||
|
||||
:::tip
|
||||
Dovresti committare il file `AGENTS.md` del progetto in Git.
|
||||
:::
|
||||
|
||||
Questo scansiona il progetto e tutti i suoi contenuti per capire di cosa si tratta e generare un file `AGENTS.md`. Questo aiuta opencode a orientarsi meglio nel progetto.
|
||||
|
||||
Se hai gia' un file `AGENTS.md` esistente, cerchera' di aggiungervi contenuti.
|
||||
|
||||
---
|
||||
|
||||
## Example
|
||||
|
||||
Puoi anche creare questo file manualmente. Ecco un esempio di alcune cose che puoi inserire in un file `AGENTS.md`.
|
||||
|
||||
```markdown title="AGENTS.md"
|
||||
# SST v3 Monorepo Project
|
||||
|
||||
This is an SST v3 monorepo with TypeScript. The project uses bun workspaces for package management.
|
||||
|
||||
## Project Structure
|
||||
|
||||
- `packages/` - Contains all workspace packages (functions, core, web, etc.)
|
||||
- `infra/` - Infrastructure definitions split by service (storage.ts, api.ts, web.ts)
|
||||
- `sst.config.ts` - Main SST configuration with dynamic imports
|
||||
|
||||
## Code Standards
|
||||
|
||||
- Use TypeScript with strict mode enabled
|
||||
- Shared code goes in `packages/core/` with proper exports configuration
|
||||
- Functions go in `packages/functions/`
|
||||
- Infrastructure should be split into logical files in `infra/`
|
||||
|
||||
## Monorepo Conventions
|
||||
|
||||
- Import shared modules using workspace names: `@my-app/core/example`
|
||||
```
|
||||
|
||||
Qui stiamo aggiungendo istruzioni specifiche del progetto e saranno condivise con il tuo team.
|
||||
|
||||
---
|
||||
|
||||
## Types
|
||||
|
||||
opencode supporta anche la lettura del file `AGENTS.md` da piu' posizioni, e questo serve a scopi diversi.
|
||||
|
||||
### Project
|
||||
|
||||
Metti un `AGENTS.md` nella root del progetto per regole specifiche del progetto. Si applicano solo quando stai lavorando in questa directory o nelle sue sottodirectory.
|
||||
|
||||
### Global
|
||||
|
||||
Puoi anche avere regole globali in un file `~/.config/opencode/AGENTS.md`. Queste si applicano a tutte le sessioni di opencode.
|
||||
|
||||
Dato che questo non viene committato in Git o condiviso con il team, consigliamo di usarlo per specificare regole personali che l'LLM deve seguire.
|
||||
|
||||
### Claude Code Compatibility
|
||||
|
||||
Per gli utenti che migrano da Claude Code, OpenCode supporta come fallback le convenzioni di file di Claude Code:
|
||||
|
||||
- **Project rules**: `CLAUDE.md` in your project directory (used if no `AGENTS.md` exists)
|
||||
- **Global rules**: `~/.claude/CLAUDE.md` (used if no `~/.config/opencode/AGENTS.md` exists)
|
||||
- **Skills**: `~/.claude/skills/` — see [Agent Skills](/docs/skills/) for details
|
||||
|
||||
Per disabilitare la compatibilita' con Claude Code, imposta una di queste variabili d'ambiente:
|
||||
|
||||
```bash
|
||||
export OPENCODE_DISABLE_CLAUDE_CODE=1 # Disable all .claude support
|
||||
export OPENCODE_DISABLE_CLAUDE_CODE_PROMPT=1 # Disable only ~/.claude/CLAUDE.md
|
||||
export OPENCODE_DISABLE_CLAUDE_CODE_SKILLS=1 # Disable only .claude/skills
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Precedence
|
||||
|
||||
Quando opencode si avvia, cerca i file di regole in questo ordine:
|
||||
|
||||
1. **Local files** by traversing up from the current directory (`AGENTS.md`, `CLAUDE.md`)
|
||||
2. **Global file** at `~/.config/opencode/AGENTS.md`
|
||||
3. **Claude Code file** at `~/.claude/CLAUDE.md` (unless disabled)
|
||||
|
||||
In ogni categoria vince il primo file corrispondente. Per esempio, se hai sia `AGENTS.md` sia `CLAUDE.md`, viene usato solo `AGENTS.md`. Allo stesso modo, `~/.config/opencode/AGENTS.md` ha priorita' su `~/.claude/CLAUDE.md`.
|
||||
|
||||
---
|
||||
|
||||
## Custom Instructions
|
||||
|
||||
Puoi specificare file di istruzioni personalizzati nel tuo `opencode.json` o nel globale `~/.config/opencode/opencode.json`. Questo permette a te e al tuo team di riusare regole esistenti invece di doverle duplicare in AGENTS.md.
|
||||
|
||||
Example:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"instructions": ["CONTRIBUTING.md", "docs/guidelines.md", ".cursor/rules/*.md"]
|
||||
}
|
||||
```
|
||||
|
||||
You can also use remote URLs to load instructions from the web.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"instructions": ["https://raw.githubusercontent.com/my-org/shared-rules/main/style.md"]
|
||||
}
|
||||
```
|
||||
|
||||
Le istruzioni remote vengono recuperate con un timeout di 5 secondi.
|
||||
|
||||
Tutti i file di istruzioni vengono combinati con i tuoi file `AGENTS.md`.
|
||||
|
||||
---
|
||||
|
||||
## Referencing External Files
|
||||
|
||||
Anche se opencode non interpreta automaticamente i riferimenti a file in `AGENTS.md`, puoi ottenere una funzionalita' simile in due modi:
|
||||
|
||||
### Using opencode.json
|
||||
|
||||
L'approccio consigliato e' usare il campo `instructions` in `opencode.json`:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"instructions": ["docs/development-standards.md", "test/testing-guidelines.md", "packages/*/AGENTS.md"]
|
||||
}
|
||||
```
|
||||
|
||||
### Manual Instructions in AGENTS.md
|
||||
|
||||
Puoi insegnare a opencode a leggere file esterni fornendo istruzioni esplicite nel tuo `AGENTS.md`. Ecco un esempio pratico:
|
||||
|
||||
```markdown title="AGENTS.md"
|
||||
# TypeScript Project Rules
|
||||
|
||||
## External File Loading
|
||||
|
||||
CRITICAL: When you encounter a file reference (e.g., @rules/general.md), use your Read tool to load it on a need-to-know basis. They're relevant to the SPECIFIC task at hand.
|
||||
|
||||
Instructions:
|
||||
|
||||
- Do NOT preemptively load all references - use lazy loading based on actual need
|
||||
- When loaded, treat content as mandatory instructions that override defaults
|
||||
- Follow references recursively when needed
|
||||
|
||||
## Development Guidelines
|
||||
|
||||
For TypeScript code style and best practices: @docs/typescript-guidelines.md
|
||||
For React component architecture and hooks patterns: @docs/react-patterns.md
|
||||
For REST API design and error handling: @docs/api-standards.md
|
||||
For testing strategies and coverage requirements: @test/testing-guidelines.md
|
||||
|
||||
## General Guidelines
|
||||
|
||||
Read the following file immediately as it's relevant to all workflows: @rules/general-guidelines.md.
|
||||
```
|
||||
|
||||
Questo approccio ti permette di:
|
||||
|
||||
- Create modular, reusable rule files
|
||||
- Share rules across projects via symlinks or git submodules
|
||||
- Keep AGENTS.md concise while referencing detailed guidelines
|
||||
- Ensure opencode loads files only when needed for the specific task
|
||||
|
||||
:::tip
|
||||
Per monorepo o progetti con standard condivisi, usare `opencode.json` con pattern glob (come `packages/*/AGENTS.md`) e' piu' manutenibile rispetto alle istruzioni manuali.
|
||||
:::
|
||||
391
packages/web/src/content/docs/it/sdk.mdx
Normal file
391
packages/web/src/content/docs/it/sdk.mdx
Normal file
@@ -0,0 +1,391 @@
|
||||
---
|
||||
title: SDK
|
||||
description: Client JS type-safe per il server opencode.
|
||||
---
|
||||
|
||||
import config from "../../../../config.mjs"
|
||||
export const typesUrl = `${config.github}/blob/dev/packages/sdk/js/src/gen/types.gen.ts`
|
||||
|
||||
L'SDK JS/TS di opencode fornisce un client type-safe per interagire con il server.
|
||||
Usalo per creare integrazioni e controllare opencode in modo programmatico.
|
||||
|
||||
[Scopri di piu](/docs/server) su come funziona il server. Per esempi, guarda i [progetti](/docs/ecosystem#projects) creati dalla comunita.
|
||||
|
||||
---
|
||||
|
||||
## Installa
|
||||
|
||||
Installa l'SDK da npm:
|
||||
|
||||
```bash
|
||||
npm install @opencode-ai/sdk
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Crea un client
|
||||
|
||||
Crea un'istanza di opencode:
|
||||
|
||||
```javascript
|
||||
import { createOpencode } from "@opencode-ai/sdk"
|
||||
|
||||
const { client } = await createOpencode()
|
||||
```
|
||||
|
||||
Questo avvia sia un server sia un client
|
||||
|
||||
#### Opzioni
|
||||
|
||||
| Opzione | Tipo | Descrizione | Predefinito |
|
||||
| ---------- | ------------- | ------------------------------ | ----------- |
|
||||
| `hostname` | `string` | Hostname del server | `127.0.0.1` |
|
||||
| `port` | `number` | Porta del server | `4096` |
|
||||
| `signal` | `AbortSignal` | Segnale di abort per annullare | `undefined` |
|
||||
| `timeout` | `number` | Timeout in ms per avvio server | `5000` |
|
||||
| `config` | `Config` | Oggetto di configurazione | `{}` |
|
||||
|
||||
---
|
||||
|
||||
## Configurazione
|
||||
|
||||
Puoi passare un oggetto di configurazione per personalizzare il comportamento. L'istanza legge comunque `opencode.json`, ma puoi sovrascrivere o aggiungere configurazione 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(`Server running at ${opencode.server.url}`)
|
||||
|
||||
opencode.server.close()
|
||||
```
|
||||
|
||||
## Solo client
|
||||
|
||||
Se hai gia un'istanza di opencode in esecuzione, puoi creare un client per collegarti:
|
||||
|
||||
```javascript
|
||||
import { createOpencodeClient } from "@opencode-ai/sdk"
|
||||
|
||||
const client = createOpencodeClient({
|
||||
baseUrl: "http://localhost:4096",
|
||||
})
|
||||
```
|
||||
|
||||
#### Opzioni
|
||||
|
||||
| Opzione | Tipo | Descrizione | Predefinito |
|
||||
| --------------- | ---------- | ----------------------------------- | ----------------------- |
|
||||
| `baseUrl` | `string` | URL del server | `http://localhost:4096` |
|
||||
| `fetch` | `function` | Implementazione fetch custom | `globalThis.fetch` |
|
||||
| `parseAs` | `string` | Metodo di parsing della risposta | `auto` |
|
||||
| `responseStyle` | `string` | Stile di ritorno: `data` o `fields` | `fields` |
|
||||
| `throwOnError` | `boolean` | Lancia errori invece di restituirli | `false` |
|
||||
|
||||
---
|
||||
|
||||
## Tipi
|
||||
|
||||
L'SDK include definizioni TypeScript per tutti i tipi API. Importale direttamente:
|
||||
|
||||
```typescript
|
||||
import type { Session, Message, Part } from "@opencode-ai/sdk"
|
||||
```
|
||||
|
||||
Tutti i tipi sono generati dalla specifica OpenAPI del server e disponibili nel <a href={typesUrl}>file dei tipi</a>.
|
||||
|
||||
---
|
||||
|
||||
## Errori
|
||||
|
||||
L'SDK puo lanciare errori che puoi intercettare e gestire:
|
||||
|
||||
```typescript
|
||||
try {
|
||||
await client.session.get({ path: { id: "invalid-id" } })
|
||||
} catch (error) {
|
||||
console.error("Failed to get session:", (error as Error).message)
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## API
|
||||
|
||||
L'SDK espone tutte le API del server tramite un client type-safe.
|
||||
|
||||
---
|
||||
|
||||
### Global
|
||||
|
||||
| Metodo | Descrizione | Response |
|
||||
| ----------------- | --------------------------------- | ------------------------------------ |
|
||||
| `global.health()` | Controlla stato e versione server | `{ healthy: true, version: string }` |
|
||||
|
||||
---
|
||||
|
||||
#### Esempi
|
||||
|
||||
```javascript
|
||||
const health = await client.global.health()
|
||||
console.log(health.data.version)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### App
|
||||
|
||||
| Metodo | Descrizione | Response |
|
||||
| -------------- | ----------------------- | ------------------------------------------- |
|
||||
| `app.log()` | Scrive una voce di log | `boolean` |
|
||||
| `app.agents()` | Elenca tutti gli agenti | <a href={typesUrl}><code>Agent[]</code></a> |
|
||||
|
||||
---
|
||||
|
||||
#### Esempi
|
||||
|
||||
```javascript
|
||||
// Write a log entry
|
||||
await client.app.log({
|
||||
body: {
|
||||
service: "my-app",
|
||||
level: "info",
|
||||
message: "Operation completed",
|
||||
},
|
||||
})
|
||||
|
||||
// List available agents
|
||||
const agents = await client.app.agents()
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Project
|
||||
|
||||
| Metodo | Descrizione | Response |
|
||||
| ------------------- | ----------------- | --------------------------------------------- |
|
||||
| `project.list()` | Elenca i progetti | <a href={typesUrl}><code>Project[]</code></a> |
|
||||
| `project.current()` | Progetto corrente | <a href={typesUrl}><code>Project</code></a> |
|
||||
|
||||
---
|
||||
|
||||
#### Esempi
|
||||
|
||||
```javascript
|
||||
// List all projects
|
||||
const projects = await client.project.list()
|
||||
|
||||
// Get current project
|
||||
const currentProject = await client.project.current()
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Path
|
||||
|
||||
| Metodo | Descrizione | Response |
|
||||
| ------------ | ----------------- | ---------------------------------------- |
|
||||
| `path.get()` | Percorso corrente | <a href={typesUrl}><code>Path</code></a> |
|
||||
|
||||
---
|
||||
|
||||
#### Esempi
|
||||
|
||||
```javascript
|
||||
// Get current path information
|
||||
const pathInfo = await client.path.get()
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Config
|
||||
|
||||
| Metodo | Descrizione | Response |
|
||||
| -------------------- | --------------------------------- | ----------------------------------------------------------------------------------------------------- |
|
||||
| `config.get()` | Ottieni info config | <a href={typesUrl}><code>Config</code></a> |
|
||||
| `config.providers()` | Elenca provider e modelli default | `{ providers: `<a href={typesUrl}><code>Provider[]</code></a>`, default: { [key: string]: string } }` |
|
||||
|
||||
---
|
||||
|
||||
#### Esempi
|
||||
|
||||
```javascript
|
||||
const config = await client.config.get()
|
||||
|
||||
const { providers, default: defaults } = await client.config.providers()
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Sessions
|
||||
|
||||
| Metodo | Descrizione | Note |
|
||||
| ---------------------------------------------------------- | --------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| `session.list()` | Elenca le sessioni | Returns <a href={typesUrl}><code>Session[]</code></a> |
|
||||
| `session.get({ path })` | Ottieni una sessione | Returns <a href={typesUrl}><code>Session</code></a> |
|
||||
| `session.children({ path })` | Elenca sessioni figlie | Returns <a href={typesUrl}><code>Session[]</code></a> |
|
||||
| `session.create({ body })` | Crea una sessione | Returns <a href={typesUrl}><code>Session</code></a> |
|
||||
| `session.delete({ path })` | Elimina una sessione | Returns `boolean` |
|
||||
| `session.update({ path, body })` | Aggiorna proprieta della sessione | Returns <a href={typesUrl}><code>Session</code></a> |
|
||||
| `session.init({ path, body })` | Analizza app e crea `AGENTS.md` | Returns `boolean` |
|
||||
| `session.abort({ path })` | Interrompe una sessione in corso | Returns `boolean` |
|
||||
| `session.share({ path })` | Condivide la sessione | Returns <a href={typesUrl}><code>Session</code></a> |
|
||||
| `session.unshare({ path })` | Rimuove la condivisione | Returns <a href={typesUrl}><code>Session</code></a> |
|
||||
| `session.summarize({ path, body })` | Riassume la sessione | Returns `boolean` |
|
||||
| `session.messages({ path })` | Elenca i messaggi della sessione | Returns `{ info: `<a href={typesUrl}><code>Message</code></a>`, parts: `<a href={typesUrl}><code>Part[]</code></a>`}[]` |
|
||||
| `session.message({ path })` | Ottieni dettagli di un messaggio | Returns `{ info: `<a href={typesUrl}><code>Message</code></a>`, parts: `<a href={typesUrl}><code>Part[]</code></a>`}` |
|
||||
| `session.prompt({ path, body })` | Invia un prompt | `body.noReply: true` returns UserMessage (solo contesto). Di default ritorna <a href={typesUrl}><code>AssistantMessage</code></a> con risposta AI |
|
||||
| `session.command({ path, body })` | Invia un comando alla sessione | Returns `{ info: `<a href={typesUrl}><code>AssistantMessage</code></a>`, parts: `<a href={typesUrl}><code>Part[]</code></a>`}` |
|
||||
| `session.shell({ path, body })` | Esegue un comando shell | Returns <a href={typesUrl}><code>AssistantMessage</code></a> |
|
||||
| `session.revert({ path, body })` | Ripristina un messaggio | Returns <a href={typesUrl}><code>Session</code></a> |
|
||||
| `session.unrevert({ path })` | Ripristina messaggi revertiti | Returns <a href={typesUrl}><code>Session</code></a> |
|
||||
| `postSessionByIdPermissionsByPermissionId({ path, body })` | Risponde a una richiesta permessi | Returns `boolean` |
|
||||
|
||||
---
|
||||
|
||||
#### Esempi
|
||||
|
||||
```javascript
|
||||
// Create and manage sessions
|
||||
const session = await client.session.create({
|
||||
body: { title: "My session" },
|
||||
})
|
||||
|
||||
const sessions = await client.session.list()
|
||||
|
||||
// Send a prompt message
|
||||
const result = await client.session.prompt({
|
||||
path: { id: session.id },
|
||||
body: {
|
||||
model: { providerID: "anthropic", modelID: "claude-3-5-sonnet-20241022" },
|
||||
parts: [{ type: "text", text: "Hello!" }],
|
||||
},
|
||||
})
|
||||
|
||||
// Inject context without triggering AI response (useful for plugins)
|
||||
await client.session.prompt({
|
||||
path: { id: session.id },
|
||||
body: {
|
||||
noReply: true,
|
||||
parts: [{ type: "text", text: "You are a helpful assistant." }],
|
||||
},
|
||||
})
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### File
|
||||
|
||||
| Metodo | Descrizione | Response |
|
||||
| ------------------------- | ------------------------------- | ------------------------------------------------------------------------------------------- |
|
||||
| `find.text({ query })` | Cerca testo nei file | Array of match objects with `path`, `lines`, `line_number`, `absolute_offset`, `submatches` |
|
||||
| `find.files({ query })` | Trova file e directory per nome | `string[]` (paths) |
|
||||
| `find.symbols({ query })` | Trova simboli nel workspace | <a href={typesUrl}><code>Symbol[]</code></a> |
|
||||
| `file.read({ query })` | Legge un file | `{ type: "raw" \| "patch", content: string }` |
|
||||
| `file.status({ query? })` | Stato dei file tracciati | <a href={typesUrl}><code>File[]</code></a> |
|
||||
|
||||
`find.files` supporta alcuni campi query opzionali:
|
||||
|
||||
- `type`: `"file"` or `"directory"`
|
||||
- `directory`: sovrascrive la root del progetto per la ricerca
|
||||
- `limit`: risultati massimi (1–200)
|
||||
|
||||
---
|
||||
|
||||
#### Esempi
|
||||
|
||||
```javascript
|
||||
// Search and read files
|
||||
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
|
||||
|
||||
| Metodo | Descrizione | Response |
|
||||
| ------------------------------ | -------------------------- | --------- |
|
||||
| `tui.appendPrompt({ body })` | Aggiunge testo al prompt | `boolean` |
|
||||
| `tui.openHelp()` | Apre la finestra help | `boolean` |
|
||||
| `tui.openSessions()` | Apre il selettore sessioni | `boolean` |
|
||||
| `tui.openThemes()` | Apre il selettore temi | `boolean` |
|
||||
| `tui.openModels()` | Apre il selettore modelli | `boolean` |
|
||||
| `tui.submitPrompt()` | Invia il prompt corrente | `boolean` |
|
||||
| `tui.clearPrompt()` | Pulisce il prompt | `boolean` |
|
||||
| `tui.executeCommand({ body })` | Esegue un comando | `boolean` |
|
||||
| `tui.showToast({ body })` | Mostra una notifica toast | `boolean` |
|
||||
|
||||
---
|
||||
|
||||
#### Esempi
|
||||
|
||||
```javascript
|
||||
// Control TUI interface
|
||||
await client.tui.appendPrompt({
|
||||
body: { text: "Add this to prompt" },
|
||||
})
|
||||
|
||||
await client.tui.showToast({
|
||||
body: { message: "Task completed", variant: "success" },
|
||||
})
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Auth
|
||||
|
||||
| Metodo | Descrizione | Response |
|
||||
| ------------------- | ------------------------ | --------- |
|
||||
| `auth.set({ ... })` | Imposta credenziali auth | `boolean` |
|
||||
|
||||
---
|
||||
|
||||
#### Esempi
|
||||
|
||||
```javascript
|
||||
await client.auth.set({
|
||||
path: { id: "anthropic" },
|
||||
body: { type: "api", key: "your-api-key" },
|
||||
})
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Eventi
|
||||
|
||||
| Metodo | Descrizione | Response |
|
||||
| ------------------- | ---------------------------- | ---------------------------- |
|
||||
| `event.subscribe()` | Stream di server-sent events | Stream di server-sent events |
|
||||
|
||||
---
|
||||
|
||||
#### Esempi
|
||||
|
||||
```javascript
|
||||
// Listen to real-time events
|
||||
const events = await client.event.subscribe()
|
||||
for await (const event of events.stream) {
|
||||
console.log("Event:", event.type, event.properties)
|
||||
}
|
||||
```
|
||||
284
packages/web/src/content/docs/it/server.mdx
Normal file
284
packages/web/src/content/docs/it/server.mdx
Normal file
@@ -0,0 +1,284 @@
|
||||
---
|
||||
title: Server
|
||||
description: Interagisci con il server opencode via HTTP.
|
||||
---
|
||||
|
||||
import config from "../../../../config.mjs"
|
||||
export const typesUrl = `${config.github}/blob/dev/packages/sdk/js/src/gen/types.gen.ts`
|
||||
|
||||
Il comando `opencode serve` avvia un server HTTP headless che espone un endpoint OpenAPI utilizzabile da un client opencode.
|
||||
|
||||
---
|
||||
|
||||
### Utilizzo
|
||||
|
||||
```bash
|
||||
opencode serve [--port <number>] [--hostname <string>] [--cors <origin>]
|
||||
```
|
||||
|
||||
#### Opzioni
|
||||
|
||||
| Flag | Descrizione | Predefinito |
|
||||
| --------------- | --------------------------------------- | ---------------- |
|
||||
| `--port` | Porta su cui ascoltare | `4096` |
|
||||
| `--hostname` | Hostname su cui ascoltare | `127.0.0.1` |
|
||||
| `--mdns` | Abilita la scoperta mDNS | `false` |
|
||||
| `--mdns-domain` | Nome di dominio personalizzato mDNS | `opencode.local` |
|
||||
| `--cors` | Origin browser aggiuntive da permettere | `[]` |
|
||||
|
||||
`--cors` puo essere passato piu volte:
|
||||
|
||||
```bash
|
||||
opencode serve --cors http://localhost:5173 --cors https://app.example.com
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Autenticazione
|
||||
|
||||
Imposta `OPENCODE_SERVER_PASSWORD` per proteggere il server con HTTP basic auth. Lo username predefinito e `opencode`, oppure imposta `OPENCODE_SERVER_USERNAME` per sovrascriverlo. Questo vale sia per `opencode serve` sia per `opencode web`.
|
||||
|
||||
```bash
|
||||
OPENCODE_SERVER_PASSWORD=your-password opencode serve
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Come funziona
|
||||
|
||||
Quando esegui `opencode` avvia una TUI e un server. La TUI e il client che parla col server. Il server espone un endpoint con specifica OpenAPI 3.1. Questo endpoint viene anche usato per generare un [SDK](/docs/sdk).
|
||||
|
||||
:::tip
|
||||
Usa il server opencode per interagire con opencode in modo programmatico.
|
||||
:::
|
||||
|
||||
Questa architettura permette a opencode di supportare piu client e di essere usato in modo programmatico.
|
||||
|
||||
Puoi eseguire `opencode serve` per avviare un server standalone. Se la TUI di opencode e gia in esecuzione, `opencode serve` avviera un nuovo server.
|
||||
|
||||
---
|
||||
|
||||
#### Connettersi a un server esistente
|
||||
|
||||
Quando avvii la TUI assegna casualmente porta e hostname. In alternativa puoi passare i [flag](/docs/cli) `--hostname` e `--port` e poi usare questi valori per connetterti al suo server.
|
||||
|
||||
L'endpoint [`/tui`](#tui) puo essere usato per pilotare la TUI tramite il server. Per esempio, puoi precompilare o eseguire un prompt. Questa configurazione e usata dai plugin [IDE](/docs/ide) di OpenCode.
|
||||
|
||||
---
|
||||
|
||||
## Specifica
|
||||
|
||||
Il server pubblica una specifica OpenAPI 3.1 visualizzabile su:
|
||||
|
||||
```
|
||||
http://<hostname>:<port>/doc
|
||||
```
|
||||
|
||||
Per esempio, `http://localhost:4096/doc`. Usa la spec per generare client o ispezionare i tipi di request/response, oppure visualizzala in uno Swagger explorer.
|
||||
|
||||
---
|
||||
|
||||
## API
|
||||
|
||||
Il server opencode espone le seguenti API.
|
||||
|
||||
---
|
||||
|
||||
### Global
|
||||
|
||||
| Metodo | Path | Descrizione | Response |
|
||||
| ------ | ---------------- | --------------------------- | ------------------------------------ |
|
||||
| `GET` | `/global/health` | Stato di salute e versione | `{ healthy: true, version: string }` |
|
||||
| `GET` | `/global/event` | Eventi globali (stream SSE) | Event stream |
|
||||
|
||||
---
|
||||
|
||||
### Project
|
||||
|
||||
| Metodo | Path | Descrizione | Response |
|
||||
| ------ | ------------------ | ----------------------- | --------------------------------------------- |
|
||||
| `GET` | `/project` | Elenca tutti i progetti | <a href={typesUrl}><code>Project[]</code></a> |
|
||||
| `GET` | `/project/current` | Progetto corrente | <a href={typesUrl}><code>Project</code></a> |
|
||||
|
||||
---
|
||||
|
||||
### Percorso e VCS
|
||||
|
||||
| Metodo | Path | Descrizione | Response |
|
||||
| ------ | ------- | --------------------------------- | ------------------------------------------- |
|
||||
| `GET` | `/path` | Percorso corrente | <a href={typesUrl}><code>Path</code></a> |
|
||||
| `GET` | `/vcs` | Info VCS per il progetto corrente | <a href={typesUrl}><code>VcsInfo</code></a> |
|
||||
|
||||
---
|
||||
|
||||
### Instance
|
||||
|
||||
| Metodo | Path | Descrizione | Response |
|
||||
| ------ | ------------------- | --------------------------- | --------- |
|
||||
| `POST` | `/instance/dispose` | Rilascia l'istanza corrente | `boolean` |
|
||||
|
||||
---
|
||||
|
||||
### Configurazione
|
||||
|
||||
| Metodo | Path | Descrizione | Response |
|
||||
| ------- | ------------------- | --------------------------------- | ---------------------------------------------------------------------------------------- |
|
||||
| `GET` | `/config` | Info sulla config | <a href={typesUrl}><code>Config</code></a> |
|
||||
| `PATCH` | `/config` | Aggiorna la config | <a href={typesUrl}><code>Config</code></a> |
|
||||
| `GET` | `/config/providers` | Elenca provider e modelli default | `{ providers: `<a href={typesUrl}>Provider[]</a>`, default: { [key: string]: string } }` |
|
||||
|
||||
---
|
||||
|
||||
### Provider
|
||||
|
||||
| Metodo | Path | Descrizione | Response |
|
||||
| ------ | -------------------------------- | ------------------------------- | ----------------------------------------------------------------------------------- |
|
||||
| `GET` | `/provider` | Elenca tutti i provider | `{ all: `<a href={typesUrl}>Provider[]</a>`, default: {...}, connected: string[] }` |
|
||||
| `GET` | `/provider/auth` | Metodi auth dei provider | `{ [providerID: string]: `<a href={typesUrl}>ProviderAuthMethod[]</a>` }` |
|
||||
| `POST` | `/provider/{id}/oauth/authorize` | Autorizza un provider via OAuth | <a href={typesUrl}><code>ProviderAuthAuthorization</code></a> |
|
||||
| `POST` | `/provider/{id}/oauth/callback` | Gestisce callback OAuth | `boolean` |
|
||||
|
||||
---
|
||||
|
||||
### Sessioni
|
||||
|
||||
| Metodo | Path | Descrizione | Note |
|
||||
| -------- | ---------------------------------------- | ------------------------------------- | ---------------------------------------------------------------------------------- |
|
||||
| `GET` | `/session` | Elenca tutte le sessioni | Returns <a href={typesUrl}><code>Session[]</code></a> |
|
||||
| `POST` | `/session` | Crea una nuova sessione | body: `{ parentID?, title? }`, returns <a href={typesUrl}><code>Session</code></a> |
|
||||
| `GET` | `/session/status` | Stato di tutte le sessioni | Returns `{ [sessionID: string]: `<a href={typesUrl}>SessionStatus</a>` }` |
|
||||
| `GET` | `/session/:id` | Dettagli di sessione | Returns <a href={typesUrl}><code>Session</code></a> |
|
||||
| `DELETE` | `/session/:id` | Elimina una sessione e i suoi dati | Returns `boolean` |
|
||||
| `PATCH` | `/session/:id` | Aggiorna proprieta sessione | body: `{ title? }`, returns <a href={typesUrl}><code>Session</code></a> |
|
||||
| `GET` | `/session/:id/children` | Sessioni figlie | Returns <a href={typesUrl}><code>Session[]</code></a> |
|
||||
| `GET` | `/session/:id/todo` | Todo list della sessione | Returns <a href={typesUrl}><code>Todo[]</code></a> |
|
||||
| `POST` | `/session/:id/init` | Analizza app e crea `AGENTS.md` | body: `{ messageID, providerID, modelID }`, returns `boolean` |
|
||||
| `POST` | `/session/:id/fork` | Fork di sessione su un messaggio | body: `{ messageID? }`, returns <a href={typesUrl}><code>Session</code></a> |
|
||||
| `POST` | `/session/:id/abort` | Interrompe una sessione in esecuzione | Returns `boolean` |
|
||||
| `POST` | `/session/:id/share` | Condivide una sessione | Returns <a href={typesUrl}><code>Session</code></a> |
|
||||
| `DELETE` | `/session/:id/share` | Annulla condivisione | Returns <a href={typesUrl}><code>Session</code></a> |
|
||||
| `GET` | `/session/:id/diff` | Diff della sessione | query: `messageID?`, returns <a href={typesUrl}><code>FileDiff[]</code></a> |
|
||||
| `POST` | `/session/:id/summarize` | Riassume la sessione | body: `{ providerID, modelID }`, returns `boolean` |
|
||||
| `POST` | `/session/:id/revert` | Ripristina un messaggio | body: `{ messageID, partID? }`, returns `boolean` |
|
||||
| `POST` | `/session/:id/unrevert` | Ripristina tutti i messaggi revertiti | Returns `boolean` |
|
||||
| `POST` | `/session/:id/permissions/:permissionID` | Risponde a una richiesta permessi | body: `{ response, remember? }`, returns `boolean` |
|
||||
|
||||
---
|
||||
|
||||
### Messaggi
|
||||
|
||||
| Metodo | Path | Descrizione | Note |
|
||||
| ------ | --------------------------------- | ---------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| `GET` | `/session/:id/message` | Elenca messaggi in una sessione | query: `limit?`, returns `{ info: `<a href={typesUrl}>Message</a>`, parts: `<a href={typesUrl}>Part[]</a>`}[]` |
|
||||
| `POST` | `/session/:id/message` | Invia un messaggio e attende risposta | body: `{ messageID?, model?, agent?, noReply?, system?, tools?, parts }`, returns `{ info: `<a href={typesUrl}>Message</a>`, parts: `<a href={typesUrl}>Part[]</a>`}` |
|
||||
| `GET` | `/session/:id/message/:messageID` | Dettagli messaggio | Returns `{ info: `<a href={typesUrl}>Message</a>`, parts: `<a href={typesUrl}>Part[]</a>`}` |
|
||||
| `POST` | `/session/:id/prompt_async` | Invia un messaggio in async (senza wait) | body: same as `/session/:id/message`, returns `204 No Content` |
|
||||
| `POST` | `/session/:id/command` | Esegue un comando slash | body: `{ messageID?, agent?, model?, command, arguments }`, returns `{ info: `<a href={typesUrl}>Message</a>`, parts: `<a href={typesUrl}>Part[]</a>`}` |
|
||||
| `POST` | `/session/:id/shell` | Esegue un comando shell | body: `{ agent, model?, command }`, returns `{ info: `<a href={typesUrl}>Message</a>`, parts: `<a href={typesUrl}>Part[]</a>`}` |
|
||||
|
||||
---
|
||||
|
||||
### Comandi
|
||||
|
||||
| Metodo | Path | Descrizione | Response |
|
||||
| ------ | ---------- | ---------------- | --------------------------------------------- |
|
||||
| `GET` | `/command` | Elenca i comandi | <a href={typesUrl}><code>Command[]</code></a> |
|
||||
|
||||
---
|
||||
|
||||
### File
|
||||
|
||||
| Metodo | Path | Descrizione | Response |
|
||||
| ------ | ------------------------ | ------------------------------- | ------------------------------------------------------------------------------------------- |
|
||||
| `GET` | `/find?pattern=<pat>` | Cerca testo nei file | Array of match objects with `path`, `lines`, `line_number`, `absolute_offset`, `submatches` |
|
||||
| `GET` | `/find/file?query=<q>` | Trova file e directory per nome | `string[]` (paths) |
|
||||
| `GET` | `/find/symbol?query=<q>` | Trova simboli workspace | <a href={typesUrl}><code>Symbol[]</code></a> |
|
||||
| `GET` | `/file?path=<path>` | Elenca file e directory | <a href={typesUrl}><code>FileNode[]</code></a> |
|
||||
| `GET` | `/file/content?path=<p>` | Legge un file | <a href={typesUrl}><code>FileContent</code></a> |
|
||||
| `GET` | `/file/status` | Stato dei file tracciati | <a href={typesUrl}><code>File[]</code></a> |
|
||||
|
||||
#### `/find/file` query parameters
|
||||
|
||||
- `query` (required) — stringa di ricerca (fuzzy match)
|
||||
- `type` (optional) — limita i risultati a `"file"` o `"directory"`
|
||||
- `directory` (optional) — sovrascrive la root del progetto per la ricerca
|
||||
- `limit` (optional) — massimo risultati (1–200)
|
||||
- `dirs` (optional) — flag legacy (`"false"` restituisce solo file)
|
||||
|
||||
---
|
||||
|
||||
### Strumenti (sperimentale)
|
||||
|
||||
| Metodo | Path | Descrizione | Response |
|
||||
| ------ | ------------------------------------------- | ------------------------------------------ | -------------------------------------------- |
|
||||
| `GET` | `/experimental/tool/ids` | Elenca tutti i tool ID | <a href={typesUrl}><code>ToolIDs</code></a> |
|
||||
| `GET` | `/experimental/tool?provider=<p>&model=<m>` | Elenca tool con JSON schema per un modello | <a href={typesUrl}><code>ToolList</code></a> |
|
||||
|
||||
---
|
||||
|
||||
### LSP, formatter e MCP
|
||||
|
||||
| Metodo | Path | Descrizione | Response |
|
||||
| ------ | ------------ | --------------------------- | -------------------------------------------------------- |
|
||||
| `GET` | `/lsp` | Stato server LSP | <a href={typesUrl}><code>LSPStatus[]</code></a> |
|
||||
| `GET` | `/formatter` | Stato formatter | <a href={typesUrl}><code>FormatterStatus[]</code></a> |
|
||||
| `GET` | `/mcp` | Stato server MCP | `{ [name: string]: `<a href={typesUrl}>MCPStatus</a>` }` |
|
||||
| `POST` | `/mcp` | Aggiunge server MCP runtime | body: `{ name, config }`, returns MCP status object |
|
||||
|
||||
---
|
||||
|
||||
### Agenti
|
||||
|
||||
| Metodo | Path | Descrizione | Response |
|
||||
| ------ | -------- | ----------------------- | ------------------------------------------- |
|
||||
| `GET` | `/agent` | Elenca tutti gli agenti | <a href={typesUrl}><code>Agent[]</code></a> |
|
||||
|
||||
---
|
||||
|
||||
### Log
|
||||
|
||||
| Metodo | Path | Descrizione | Response |
|
||||
| ------ | ------ | ------------------------------------------------------------------- | --------- |
|
||||
| `POST` | `/log` | Scrive una voce di log. Body: `{ service, level, message, extra? }` | `boolean` |
|
||||
|
||||
---
|
||||
|
||||
### TUI
|
||||
|
||||
| Metodo | Path | Descrizione | Response |
|
||||
| ------ | ----------------------- | -------------------------------------------------- | ---------------------- |
|
||||
| `POST` | `/tui/append-prompt` | Aggiunge testo al prompt | `boolean` |
|
||||
| `POST` | `/tui/open-help` | Apre il dialog help | `boolean` |
|
||||
| `POST` | `/tui/open-sessions` | Apre il selettore sessioni | `boolean` |
|
||||
| `POST` | `/tui/open-themes` | Apre il selettore temi | `boolean` |
|
||||
| `POST` | `/tui/open-models` | Apre il selettore modelli | `boolean` |
|
||||
| `POST` | `/tui/submit-prompt` | Invia il prompt corrente | `boolean` |
|
||||
| `POST` | `/tui/clear-prompt` | Pulisce il prompt | `boolean` |
|
||||
| `POST` | `/tui/execute-command` | Esegue un comando (`{ command }`) | `boolean` |
|
||||
| `POST` | `/tui/show-toast` | Mostra toast (`{ title?, message, variant }`) | `boolean` |
|
||||
| `GET` | `/tui/control/next` | Attende la prossima richiesta di controllo | Control request object |
|
||||
| `POST` | `/tui/control/response` | Risponde a una richiesta di controllo (`{ body }`) | `boolean` |
|
||||
|
||||
---
|
||||
|
||||
### Autenticazione
|
||||
|
||||
| Metodo | Path | Descrizione | Response |
|
||||
| ------ | ----------- | -------------------------------------------------------------------- | --------- |
|
||||
| `PUT` | `/auth/:id` | Imposta credenziali auth. Il body deve rispettare lo schema provider | `boolean` |
|
||||
|
||||
---
|
||||
|
||||
### Eventi
|
||||
|
||||
| Metodo | Path | Descrizione | Response |
|
||||
| ------ | -------- | ----------------------------------------------------------- | ------------------------- |
|
||||
| `GET` | `/event` | Stream SSE. Primo evento `server.connected`, poi eventi bus | Server-sent events stream |
|
||||
|
||||
---
|
||||
|
||||
### Documentazione
|
||||
|
||||
| Metodo | Path | Descrizione | Response |
|
||||
| ------ | ------ | --------------------- | ---------------------------- |
|
||||
| `GET` | `/doc` | Specifica OpenAPI 3.1 | Pagina HTML con spec OpenAPI |
|
||||
127
packages/web/src/content/docs/it/share.mdx
Normal file
127
packages/web/src/content/docs/it/share.mdx
Normal file
@@ -0,0 +1,127 @@
|
||||
---
|
||||
title: Condivisione
|
||||
description: Condividi le tue conversazioni OpenCode.
|
||||
---
|
||||
|
||||
La funzione di condivisione di OpenCode ti permette di creare link pubblici alle tue conversazioni, cosi puoi collaborare con i colleghi o chiedere aiuto ad altre persone.
|
||||
|
||||
:::note
|
||||
Le conversazioni condivise sono accessibili pubblicamente a chiunque abbia il link.
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
## Come funziona
|
||||
|
||||
Quando condividi una conversazione, OpenCode:
|
||||
|
||||
1. Crea un URL pubblico univoco per la sessione
|
||||
2. Sincronizza la cronologia della conversazione sui nostri server
|
||||
3. Rende la conversazione accessibile tramite il link condivisibile: `opncd.ai/s/<share-id>`
|
||||
|
||||
---
|
||||
|
||||
## Sharing
|
||||
|
||||
OpenCode supporta tre modalita di condivisione che controllano come vengono condivise le conversazioni:
|
||||
|
||||
---
|
||||
|
||||
### Manuale (predefinito)
|
||||
|
||||
Per impostazione predefinita, OpenCode usa la condivisione manuale. Le sessioni non vengono condivise automaticamente, ma puoi condividerle manualmente con il comando `/share`:
|
||||
|
||||
```
|
||||
/share
|
||||
```
|
||||
|
||||
Questo genera un URL univoco che viene copiato negli appunti.
|
||||
|
||||
Per impostare esplicitamente la modalita manuale nel tuo [file di config](/docs/config):
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opncd.ai/config.json",
|
||||
"share": "manual"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Auto-share
|
||||
|
||||
Puoi abilitare la condivisione automatica per tutte le nuove conversazioni impostando l'opzione `share` su `"auto"` nel tuo [file di config](/docs/config):
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opncd.ai/config.json",
|
||||
"share": "auto"
|
||||
}
|
||||
```
|
||||
|
||||
Con la condivisione automatica attiva, ogni nuova conversazione verra condivisa automaticamente e verra generato un link.
|
||||
|
||||
---
|
||||
|
||||
### Disabled
|
||||
|
||||
Puoi disabilitare completamente la condivisione impostando l'opzione `share` su `"disabled"` nel tuo [file di config](/docs/config):
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opncd.ai/config.json",
|
||||
"share": "disabled"
|
||||
}
|
||||
```
|
||||
|
||||
Per applicarlo al tuo team in un progetto specifico, aggiungilo a `opencode.json` nel progetto e versionalo su Git.
|
||||
|
||||
---
|
||||
|
||||
## Annullare la condivisione
|
||||
|
||||
Per smettere di condividere una conversazione e rimuoverla dall'accesso pubblico:
|
||||
|
||||
```
|
||||
/unshare
|
||||
```
|
||||
|
||||
Questo rimuove il link di condivisione ed elimina i dati associati alla conversazione.
|
||||
|
||||
---
|
||||
|
||||
## Privacy
|
||||
|
||||
Ci sono alcune cose da tenere a mente quando condividi una conversazione.
|
||||
|
||||
---
|
||||
|
||||
### Data retention
|
||||
|
||||
Le conversazioni condivise restano accessibili finche non le annulli esplicitamente. Questo include:
|
||||
|
||||
- La cronologia completa della conversazione
|
||||
- Tutti i messaggi e le risposte
|
||||
- I metadati della sessione
|
||||
|
||||
---
|
||||
|
||||
### Recommendations
|
||||
|
||||
- Condividi solo conversazioni che non contengono informazioni sensibili.
|
||||
- Rivedi il contenuto della conversazione prima di condividerla.
|
||||
- Annulla la condivisione quando la collaborazione e conclusa.
|
||||
- Evita di condividere conversazioni con codice proprietario o dati riservati.
|
||||
- Per progetti sensibili, disabilita completamente la condivisione.
|
||||
|
||||
---
|
||||
|
||||
## Per le aziende
|
||||
|
||||
Per deploy enterprise, la condivisione puo essere:
|
||||
|
||||
- **Disabilitata** completamente per requisiti di conformita e sicurezza
|
||||
- **Limitata** ai soli utenti autenticati tramite SSO
|
||||
- **Self-hosted** sulla tua infrastruttura
|
||||
|
||||
[Scopri di piu](/docs/enterprise) su come usare opencode nella tua organizzazione.
|
||||
222
packages/web/src/content/docs/it/skills.mdx
Normal file
222
packages/web/src/content/docs/it/skills.mdx
Normal file
@@ -0,0 +1,222 @@
|
||||
---
|
||||
title: "Competenze dell'agente"
|
||||
description: "Definisci comportamenti riutilizzabili tramite definizioni in SKILL.md"
|
||||
---
|
||||
|
||||
Le skill degli agenti permettono a OpenCode di individuare istruzioni riutilizzabili dal tuo repo o dalla home directory.
|
||||
Le skill vengono caricate on-demand tramite lo strumento nativo `skill`: gli agenti vedono le skill disponibili e possono caricarne il contenuto completo quando serve.
|
||||
|
||||
---
|
||||
|
||||
## Posiziona i file
|
||||
|
||||
Crea una cartella per ogni nome di skill e metti un `SKILL.md` al suo interno.
|
||||
OpenCode cerca in queste posizioni:
|
||||
|
||||
- Config di progetto: `.opencode/skills/<name>/SKILL.md`
|
||||
- Config globale: `~/.config/opencode/skills/<name>/SKILL.md`
|
||||
- Progetto compatibile con Claude: `.claude/skills/<name>/SKILL.md`
|
||||
- Globale compatibile con Claude: `~/.claude/skills/<name>/SKILL.md`
|
||||
- Progetto compatibile con agent: `.agents/skills/<name>/SKILL.md`
|
||||
- Globale compatibile con agent: `~/.agents/skills/<name>/SKILL.md`
|
||||
|
||||
---
|
||||
|
||||
## Comprendere la discovery
|
||||
|
||||
Per i percorsi locali al progetto, OpenCode risale dalla directory di lavoro corrente finche' non raggiunge il worktree git.
|
||||
Carica qualsiasi `skills/*/SKILL.md` corrispondente in `.opencode/` e qualsiasi `.claude/skills/*/SKILL.md` o `.agents/skills/*/SKILL.md` corrispondente lungo il percorso.
|
||||
|
||||
Le definizioni globali vengono caricate anche da `~/.config/opencode/skills/*/SKILL.md`, `~/.claude/skills/*/SKILL.md` e `~/.agents/skills/*/SKILL.md`.
|
||||
|
||||
---
|
||||
|
||||
## Scrivi il frontmatter
|
||||
|
||||
Ogni `SKILL.md` deve iniziare con frontmatter YAML.
|
||||
Sono riconosciuti solo questi campi:
|
||||
|
||||
- `name` (obbligatorio)
|
||||
- `description` (obbligatorio)
|
||||
- `license` (opzionale)
|
||||
- `compatibility` (opzionale)
|
||||
- `metadata` (opzionale, mappa stringa-a-stringa)
|
||||
|
||||
I campi di frontmatter sconosciuti vengono ignorati.
|
||||
|
||||
---
|
||||
|
||||
## Valida i nomi
|
||||
|
||||
`name` deve:
|
||||
|
||||
- Essere lungo 1-64 caratteri
|
||||
- Essere alfanumerico minuscolo con separatori `-` singoli
|
||||
- Non iniziare o finire con `-`
|
||||
- Non contenere `--` consecutivi
|
||||
- Corrispondere al nome della directory che contiene `SKILL.md`
|
||||
|
||||
Regex equivalente:
|
||||
|
||||
```text
|
||||
^[a-z0-9]+(-[a-z0-9]+)*$
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Rispetta le regole di lunghezza
|
||||
|
||||
`description` deve essere lunga 1-1024 caratteri.
|
||||
Tieni la descrizione abbastanza specifica da permettere all'agente di scegliere correttamente.
|
||||
|
||||
---
|
||||
|
||||
## Usa un esempio
|
||||
|
||||
Crea `.opencode/skills/git-release/SKILL.md` cosi':
|
||||
|
||||
```markdown
|
||||
---
|
||||
name: git-release
|
||||
description: Create consistent releases and changelogs
|
||||
license: MIT
|
||||
compatibility: opencode
|
||||
metadata:
|
||||
audience: maintainers
|
||||
workflow: github
|
||||
---
|
||||
|
||||
## What I do
|
||||
|
||||
- Draft release notes from merged PRs
|
||||
- Propose a version bump
|
||||
- Provide a copy-pasteable `gh release create` command
|
||||
|
||||
## When to use me
|
||||
|
||||
Use this when you are preparing a tagged release.
|
||||
Ask clarifying questions if the target versioning scheme is unclear.
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Riconoscere la descrizione dello strumento
|
||||
|
||||
OpenCode elenca le skill disponibili nella descrizione dello strumento `skill`.
|
||||
Ogni voce include il nome della skill e la descrizione:
|
||||
|
||||
```xml
|
||||
<available_skills>
|
||||
<skill>
|
||||
<name>git-release</name>
|
||||
<description>Create consistent releases and changelogs</description>
|
||||
</skill>
|
||||
</available_skills>
|
||||
```
|
||||
|
||||
L'agente carica una skill chiamando lo strumento:
|
||||
|
||||
```
|
||||
skill({ name: "git-release" })
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Configura i permessi
|
||||
|
||||
Controlla a quali skill gli agenti possono accedere usando permessi basati su pattern in `opencode.json`:
|
||||
|
||||
```json
|
||||
{
|
||||
"permission": {
|
||||
"skill": {
|
||||
"*": "allow",
|
||||
"pr-review": "allow",
|
||||
"internal-*": "deny",
|
||||
"experimental-*": "ask"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
| Permesso | Comportamento |
|
||||
| -------- | -------------------------------------------- |
|
||||
| `allow` | La skill viene caricata immediatamente |
|
||||
| `deny` | Skill nascosta all'agente, accesso negato |
|
||||
| `ask` | L'utente viene invitato ad approvare il load |
|
||||
|
||||
I pattern supportano wildcard: `internal-*` corrisponde a `internal-docs`, `internal-tools`, ecc.
|
||||
|
||||
---
|
||||
|
||||
## Sovrascrivi per agente
|
||||
|
||||
Dai ad agenti specifici permessi diversi dai default globali.
|
||||
|
||||
**Per agenti personalizzati** (nel frontmatter dell'agente):
|
||||
|
||||
```yaml
|
||||
---
|
||||
permission:
|
||||
skill:
|
||||
"documents-*": "allow"
|
||||
---
|
||||
```
|
||||
|
||||
**Per agenti integrati** (in `opencode.json`):
|
||||
|
||||
```json
|
||||
{
|
||||
"agent": {
|
||||
"plan": {
|
||||
"permission": {
|
||||
"skill": {
|
||||
"internal-*": "allow"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Disabilita lo strumento skill
|
||||
|
||||
Disabilita completamente le skill per agenti che non dovrebbero usarle:
|
||||
|
||||
**Per agenti personalizzati**:
|
||||
|
||||
```yaml
|
||||
---
|
||||
tools:
|
||||
skill: false
|
||||
---
|
||||
```
|
||||
|
||||
**Per agenti integrati**:
|
||||
|
||||
```json
|
||||
{
|
||||
"agent": {
|
||||
"plan": {
|
||||
"tools": {
|
||||
"skill": false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Quando e' disabilitato, la sezione `<available_skills>` viene omessa completamente.
|
||||
|
||||
---
|
||||
|
||||
## Risoluzione problemi di caricamento
|
||||
|
||||
Se una skill non compare:
|
||||
|
||||
1. Verifica che `SKILL.md` sia scritto in maiuscolo
|
||||
2. Controlla che il frontmatter includa `name` e `description`
|
||||
3. Assicurati che i nomi delle skill siano unici in tutte le posizioni
|
||||
4. Controlla i permessi: le skill con `deny` vengono nascoste agli agenti
|
||||
369
packages/web/src/content/docs/it/themes.mdx
Normal file
369
packages/web/src/content/docs/it/themes.mdx
Normal file
@@ -0,0 +1,369 @@
|
||||
---
|
||||
title: Temi
|
||||
description: Seleziona un tema integrato o definiscine uno tuo.
|
||||
---
|
||||
|
||||
Con OpenCode puoi scegliere tra diversi temi integrati, usare un tema che si adatta al tema del tuo terminale oppure definire un tema personalizzato.
|
||||
|
||||
Per impostazione predefinita, OpenCode usa il tema `opencode`.
|
||||
|
||||
---
|
||||
|
||||
## Requisiti del terminale
|
||||
|
||||
Per visualizzare correttamente i temi con l'intera palette, il terminale deve supportare **truecolor** (colore a 24 bit). La maggior parte dei terminali moderni lo supporta di default, ma potrebbe essere necessario abilitarlo:
|
||||
|
||||
- **Verifica supporto**: esegui `echo $COLORTERM` - dovrebbe stampare `truecolor` o `24bit`
|
||||
- **Abilita truecolor**: imposta la variabile d'ambiente `COLORTERM=truecolor` nel profilo della shell
|
||||
- **Compatibilita del terminale**: assicurati che l'emulatore supporti il colore a 24 bit (la maggior parte dei terminali moderni come iTerm2, Alacritty, Kitty, Windows Terminal e le versioni recenti di GNOME Terminal)
|
||||
|
||||
Senza truecolor, i temi potrebbero apparire con colori meno accurati oppure fare fallback alla migliore approssimazione a 256 colori.
|
||||
|
||||
---
|
||||
|
||||
## Temi integrati
|
||||
|
||||
OpenCode include diversi temi integrati.
|
||||
|
||||
| Nome | Descrizione |
|
||||
| ---------------------- | ------------------------------------------------------------------------- |
|
||||
| `system` | Si adatta al colore di sfondo del terminale |
|
||||
| `tokyonight` | Basato sul tema [Tokyonight](https://github.com/folke/tokyonight.nvim) |
|
||||
| `everforest` | Basato sul tema [Everforest](https://github.com/sainnhe/everforest) |
|
||||
| `ayu` | Basato sul tema scuro [Ayu](https://github.com/ayu-theme) |
|
||||
| `catppuccin` | Basato sul tema [Catppuccin](https://github.com/catppuccin) |
|
||||
| `catppuccin-macchiato` | Basato sul tema [Catppuccin](https://github.com/catppuccin) |
|
||||
| `gruvbox` | Basato sul tema [Gruvbox](https://github.com/morhetz/gruvbox) |
|
||||
| `kanagawa` | Basato sul tema [Kanagawa](https://github.com/rebelot/kanagawa.nvim) |
|
||||
| `nord` | Basato sul tema [Nord](https://github.com/nordtheme/nord) |
|
||||
| `matrix` | Tema verde su nero in stile hacker |
|
||||
| `one-dark` | Basato sul tema Dark [Atom One](https://github.com/Th3Whit3Wolf/one-nvim) |
|
||||
|
||||
E altri ancora: aggiungiamo costantemente nuovi temi.
|
||||
|
||||
---
|
||||
|
||||
## Tema di sistema
|
||||
|
||||
Il tema `system` e progettato per adattarsi automaticamente allo schema colori del tuo terminale. A differenza dei temi tradizionali con colori fissi, il tema _system_:
|
||||
|
||||
- **Genera una scala di grigi**: crea una scala di grigi personalizzata in base al colore di sfondo del terminale, garantendo un contrasto ottimale.
|
||||
- **Usa colori ANSI**: sfrutta i colori ANSI standard (0-15) per evidenziazione della sintassi ed elementi UI, rispettando la palette del terminale.
|
||||
- **Preserva i default del terminale**: usa `none` per testo e sfondo per mantenere l'aspetto nativo del terminale.
|
||||
|
||||
Il tema di sistema e pensato per chi:
|
||||
|
||||
- Vuole che OpenCode corrisponda all'aspetto del terminale
|
||||
- Usa schemi colori personalizzati del terminale
|
||||
- Preferisce un aspetto coerente tra tutte le applicazioni da terminale
|
||||
|
||||
---
|
||||
|
||||
## Usare un tema
|
||||
|
||||
Puoi selezionare un tema aprendo la selezione temi con il comando `/theme`. In alternativa, puoi specificarlo nella tua [configurazione](/docs/config).
|
||||
|
||||
```json title="opencode.json" {3}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"theme": "tokyonight"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Temi personalizzati
|
||||
|
||||
OpenCode supporta un sistema di temi flessibile basato su JSON che permette di creare e personalizzare temi facilmente.
|
||||
|
||||
---
|
||||
|
||||
### Gerarchia
|
||||
|
||||
I temi vengono caricati da piu directory nel seguente ordine, dove le directory successive sovrascrivono le precedenti:
|
||||
|
||||
1. **Temi integrati** - incorporati nel binario
|
||||
2. **Directory di configurazione utente** - in `~/.config/opencode/themes/*.json` o `$XDG_CONFIG_HOME/opencode/themes/*.json`
|
||||
3. **Directory root del progetto** - in `<project-root>/.opencode/themes/*.json`
|
||||
4. **Directory di lavoro corrente** - in `./.opencode/themes/*.json`
|
||||
|
||||
Se piu directory contengono un tema con lo stesso nome, verra usato il tema della directory con priorita piu alta.
|
||||
|
||||
---
|
||||
|
||||
### Creare un tema
|
||||
|
||||
Per creare un tema personalizzato, crea un file JSON in una delle directory dei temi.
|
||||
|
||||
Per temi a livello utente:
|
||||
|
||||
```bash no-frame
|
||||
mkdir -p ~/.config/opencode/themes
|
||||
vim ~/.config/opencode/themes/my-theme.json
|
||||
```
|
||||
|
||||
E per temi specifici del progetto.
|
||||
|
||||
```bash no-frame
|
||||
mkdir -p .opencode/themes
|
||||
vim .opencode/themes/my-theme.json
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Formato JSON
|
||||
|
||||
I temi usano un formato JSON flessibile che supporta:
|
||||
|
||||
- **Colori hex**: `"#ffffff"`
|
||||
- **Colori ANSI**: `3` (0-255)
|
||||
- **Riferimenti colore**: `"primary"` o definizioni personalizzate
|
||||
- **Varianti scuro/chiaro**: `{"dark": "#000", "light": "#fff"}`
|
||||
- **Nessun colore**: `"none"` - usa il colore predefinito del terminale o trasparente
|
||||
|
||||
---
|
||||
|
||||
### Definizioni dei colori
|
||||
|
||||
La sezione `defs` e opzionale e ti permette di definire colori riutilizzabili che possono essere referenziati nel tema.
|
||||
|
||||
---
|
||||
|
||||
### Valori predefiniti del terminale
|
||||
|
||||
Il valore speciale `"none"` puo essere usato per qualunque colore per ereditare il colore predefinito del terminale. E particolarmente utile per creare temi che si fondono con lo schema colori del terminale:
|
||||
|
||||
- `"text": "none"` - usa il colore del testo predefinito del terminale
|
||||
- `"background": "none"` - usa il colore di sfondo predefinito del terminale
|
||||
|
||||
---
|
||||
|
||||
### Esempio
|
||||
|
||||
Ecco un esempio di tema personalizzato:
|
||||
|
||||
```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/it/tools.mdx
Normal file
379
packages/web/src/content/docs/it/tools.mdx
Normal file
@@ -0,0 +1,379 @@
|
||||
---
|
||||
title: Strumenti
|
||||
description: Gestisci gli strumenti che un LLM puo' usare.
|
||||
---
|
||||
|
||||
Gli strumenti permettono all'LLM di eseguire azioni nel tuo codebase. OpenCode include un set di strumenti integrati, ma puoi estenderlo con [strumenti personalizzati](/docs/custom-tools) o con [server MCP](/docs/mcp-servers).
|
||||
|
||||
Di default, tutti gli strumenti sono **abilitati** e non richiedono permessi per essere eseguiti. Puoi controllare il comportamento degli strumenti tramite i [permessi](/docs/permissions).
|
||||
|
||||
---
|
||||
|
||||
## Configura
|
||||
|
||||
Usa il campo `permission` per controllare il comportamento degli strumenti. Puoi consentire, negare o richiedere approvazione per ciascuno.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"edit": "deny",
|
||||
"bash": "ask",
|
||||
"webfetch": "allow"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Puoi anche usare wildcard per controllare piu' strumenti insieme. Per esempio, per richiedere approvazione per tutti gli strumenti di un server MCP:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"mymcp_*": "ask"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
[Scopri di piu'](/docs/permissions) su come configurare i permessi.
|
||||
|
||||
---
|
||||
|
||||
## Integrati
|
||||
|
||||
Ecco tutti gli strumenti integrati disponibili in OpenCode.
|
||||
|
||||
---
|
||||
|
||||
### bash
|
||||
|
||||
Esegui comandi di shell nel tuo ambiente di progetto.
|
||||
|
||||
```json title="opencode.json" {4}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"bash": "allow"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Questo strumento permette all'LLM di eseguire comandi da terminale come `npm install`, `git status` o qualunque altro comando di shell.
|
||||
|
||||
---
|
||||
|
||||
### edit
|
||||
|
||||
Modifica file esistenti usando sostituzioni esatte di stringhe.
|
||||
|
||||
```json title="opencode.json" {4}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"edit": "allow"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Questo strumento esegue modifiche precise ai file sostituendo corrispondenze di testo esatte. E' il modo principale con cui l'LLM modifica il codice.
|
||||
|
||||
---
|
||||
|
||||
### write
|
||||
|
||||
Crea nuovi file o sovrascrive quelli esistenti.
|
||||
|
||||
```json title="opencode.json" {4}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"edit": "allow"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Usalo per consentire all'LLM di creare nuovi file. Sovrascrivera' i file esistenti se sono gia' presenti.
|
||||
|
||||
:::note
|
||||
Lo strumento `write` e' controllato dal permesso `edit`, che copre tutte le modifiche ai file (`edit`, `write`, `patch`, `multiedit`).
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
### read
|
||||
|
||||
Leggi il contenuto dei file dal tuo codebase.
|
||||
|
||||
```json title="opencode.json" {4}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"read": "allow"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Questo strumento legge i file e ne restituisce il contenuto. Supporta la lettura di intervalli di righe specifici per file grandi.
|
||||
|
||||
---
|
||||
|
||||
### grep
|
||||
|
||||
Cerca nel contenuto dei file usando espressioni regolari.
|
||||
|
||||
```json title="opencode.json" {4}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"grep": "allow"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Ricerca rapida nel contenuto su tutto il codebase. Supporta la sintassi completa delle regex e il filtro per pattern di file.
|
||||
|
||||
---
|
||||
|
||||
### glob
|
||||
|
||||
Trova file tramite pattern matching.
|
||||
|
||||
```json title="opencode.json" {4}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"glob": "allow"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Cerca file usando pattern glob come `**/*.js` o `src/**/*.ts`. Restituisce i percorsi corrispondenti ordinati per data di modifica.
|
||||
|
||||
---
|
||||
|
||||
### list
|
||||
|
||||
Elenca file e directory in un percorso specifico.
|
||||
|
||||
```json title="opencode.json" {4}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"list": "allow"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Questo strumento elenca il contenuto di una directory. Accetta pattern glob per filtrare i risultati.
|
||||
|
||||
---
|
||||
|
||||
### lsp (experimental)
|
||||
|
||||
Interagisci con i server LSP configurati per ottenere funzionalita' di code intelligence come definizioni, riferimenti, hover info e call hierarchy.
|
||||
|
||||
:::note
|
||||
Questo strumento e' disponibile solo quando `OPENCODE_EXPERIMENTAL_LSP_TOOL=true` (oppure `OPENCODE_EXPERIMENTAL=true`).
|
||||
:::
|
||||
|
||||
```json title="opencode.json" {4}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"lsp": "allow"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Le operazioni supportate includono `goToDefinition`, `findReferences`, `hover`, `documentSymbol`, `workspaceSymbol`, `goToImplementation`, `prepareCallHierarchy`, `incomingCalls` e `outgoingCalls`.
|
||||
|
||||
Per configurare quali server LSP sono disponibili per il tuo progetto, vedi [LSP Servers](/docs/lsp).
|
||||
|
||||
---
|
||||
|
||||
### patch
|
||||
|
||||
Applica patch ai file.
|
||||
|
||||
```json title="opencode.json" {4}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"edit": "allow"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Questo strumento applica file patch al tuo codebase. Utile per applicare diff e patch da varie fonti.
|
||||
|
||||
:::note
|
||||
Lo strumento `patch` e' controllato dal permesso `edit`, che copre tutte le modifiche ai file (`edit`, `write`, `patch`, `multiedit`).
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
### skill
|
||||
|
||||
Carica una [skill](/docs/skills) (un file `SKILL.md`) e ne restituisce il contenuto nella conversazione.
|
||||
|
||||
```json title="opencode.json" {4}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"skill": "allow"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### todowrite
|
||||
|
||||
Gestisci todo list durante le sessioni di coding.
|
||||
|
||||
```json title="opencode.json" {4}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"todowrite": "allow"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Crea e aggiorna liste di task per tracciare i progressi durante operazioni complesse. L'LLM lo usa per organizzare attivita' multi-step.
|
||||
|
||||
:::note
|
||||
Questo strumento e' disabilitato per i subagenti di default, ma puoi abilitarlo manualmente. [Scopri di piu'](/docs/agents/#permissions)
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
### todoread
|
||||
|
||||
Leggi le todo list esistenti.
|
||||
|
||||
```json title="opencode.json" {4}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"todoread": "allow"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Legge lo stato corrente della todo list. Usato dall'LLM per tenere traccia di quali task sono in sospeso o completati.
|
||||
|
||||
:::note
|
||||
Questo strumento e' disabilitato per i subagenti di default, ma puoi abilitarlo manualmente. [Scopri di piu'](/docs/agents/#permissions)
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
### webfetch
|
||||
|
||||
Recupera contenuti dal web.
|
||||
|
||||
```json title="opencode.json" {4}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"webfetch": "allow"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Permette all'LLM di recuperare e leggere pagine web. Utile per consultare documentazione o ricercare risorse online.
|
||||
|
||||
---
|
||||
|
||||
### websearch
|
||||
|
||||
Cerca informazioni sul web.
|
||||
|
||||
:::note
|
||||
Questo strumento e' disponibile solo quando usi il provider OpenCode o quando la variabile d'ambiente `OPENCODE_ENABLE_EXA` e' impostata a un valore truthy (ad esempio `true` o `1`).
|
||||
|
||||
Per abilitarlo all'avvio di OpenCode:
|
||||
|
||||
```bash
|
||||
OPENCODE_ENABLE_EXA=1 opencode
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
```json title="opencode.json" {4}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"websearch": "allow"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Esegue ricerche web usando Exa AI per trovare informazioni rilevanti online. Utile per ricercare argomenti, trovare eventi attuali o raccogliere informazioni oltre il cutoff dei dati di addestramento.
|
||||
|
||||
Non e' richiesta alcuna API key: lo strumento si connette direttamente al servizio MCP ospitato da Exa AI senza autenticazione.
|
||||
|
||||
:::tip
|
||||
Usa `websearch` quando devi trovare informazioni (discovery) e `webfetch` quando devi recuperare contenuti da un URL specifico (retrieval).
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
### question
|
||||
|
||||
Fai domande all'utente durante l'esecuzione.
|
||||
|
||||
```json title="opencode.json" {4}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"question": "allow"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Questo strumento permette all'LLM di porre domande all'utente durante un task. E' utile per:
|
||||
|
||||
- Raccogliere preferenze o requisiti dell'utente
|
||||
- Chiarire istruzioni ambigue
|
||||
- Ottenere decisioni sulle scelte di implementazione
|
||||
- Offrire opzioni su che direzione prendere
|
||||
|
||||
Ogni domanda include un header, il testo della domanda e una lista di opzioni. Gli utenti possono selezionare dalle opzioni fornite o digitare una risposta personalizzata. Quando ci sono piu' domande, gli utenti possono navigare tra di esse prima di inviare tutte le risposte.
|
||||
|
||||
---
|
||||
|
||||
## Strumenti personalizzati
|
||||
|
||||
Gli strumenti personalizzati ti permettono di definire funzioni che l'LLM puo' chiamare. Sono definiti nel tuo file di configurazione e possono eseguire codice arbitrario.
|
||||
|
||||
[Scopri di piu'](/docs/custom-tools) su come creare strumenti personalizzati.
|
||||
|
||||
---
|
||||
|
||||
## Server MCP
|
||||
|
||||
I server MCP (Model Context Protocol) permettono di integrare strumenti e servizi esterni. Questo include accesso a database, integrazioni API e servizi di terze parti.
|
||||
|
||||
[Scopri di piu'](/docs/mcp-servers) su come configurare i server MCP.
|
||||
|
||||
---
|
||||
|
||||
## Interni
|
||||
|
||||
Internamente, strumenti come `grep`, `glob` e `list` usano [ripgrep](https://github.com/BurntSushi/ripgrep) sotto al cofano. Di default, ripgrep rispetta i pattern di `.gitignore`, quindi i file e le directory elencati in `.gitignore` vengono esclusi da ricerche ed elenchi.
|
||||
|
||||
---
|
||||
|
||||
### Pattern di ignore
|
||||
|
||||
Per includere file che normalmente verrebbero ignorati, crea un file `.ignore` nella root del progetto. Questo file puo' consentire esplicitamente certi path.
|
||||
|
||||
```text title=".ignore"
|
||||
!node_modules/
|
||||
!dist/
|
||||
!build/
|
||||
```
|
||||
|
||||
Per esempio, questo file `.ignore` permette a ripgrep di cercare dentro `node_modules/`, `dist/` e `build/` anche se sono elencate in `.gitignore`.
|
||||
299
packages/web/src/content/docs/it/troubleshooting.mdx
Normal file
299
packages/web/src/content/docs/it/troubleshooting.mdx
Normal file
@@ -0,0 +1,299 @@
|
||||
---
|
||||
title: Risoluzione dei problemi
|
||||
description: Problemi comuni e come risolverli.
|
||||
---
|
||||
|
||||
Per diagnosticare problemi con OpenCode, inizia controllando i log e i dati locali che salva su disco.
|
||||
|
||||
---
|
||||
|
||||
## Log
|
||||
|
||||
I file di log vengono scritti in:
|
||||
|
||||
- **macOS/Linux**: `~/.local/share/opencode/log/`
|
||||
- **Windows**: premi `WIN+R` e incolla `%USERPROFILE%\.local\share\opencode\log`
|
||||
|
||||
I file di log hanno nomi con timestamp (ad es. `2025-01-09T123456.log`) e vengono conservati i 10 file di log piu recenti.
|
||||
|
||||
Puoi impostare il livello di log con l'opzione a riga di comando `--log-level` per ottenere informazioni di debug piu dettagliate. Per esempio: `opencode --log-level DEBUG`.
|
||||
|
||||
---
|
||||
|
||||
## Archiviazione
|
||||
|
||||
opencode salva i dati delle sessioni e altri dati dell'applicazione su disco in:
|
||||
|
||||
- **macOS/Linux**: `~/.local/share/opencode/`
|
||||
- **Windows**: premi `WIN+R` e incolla `%USERPROFILE%\.local\share\opencode`
|
||||
|
||||
Questa directory contiene:
|
||||
|
||||
- `auth.json` - dati di autenticazione come chiavi API, token OAuth
|
||||
- `log/` - log dell'applicazione
|
||||
- `project/` - dati specifici del progetto come dati di sessione e messaggi
|
||||
- Se il progetto e dentro un repository Git, viene salvato in `./<project-slug>/storage/`
|
||||
- Se non e un repository Git, viene salvato in `./global/storage/`
|
||||
|
||||
---
|
||||
|
||||
## App desktop
|
||||
|
||||
OpenCode Desktop esegue in background un server locale di OpenCode (il sidecar `opencode-cli`). La maggior parte dei problemi e causata da un plugin che si comporta male, da una cache corrotta o da un'impostazione del server errata.
|
||||
|
||||
### Controlli rapidi
|
||||
|
||||
- Chiudi completamente l'app e riaprila.
|
||||
- Se l'app mostra una schermata di errore, fai clic su **Restart** e copia i dettagli dell'errore.
|
||||
- Solo macOS: menu `OpenCode` -> **Reload Webview** (utile se l'interfaccia e vuota o bloccata).
|
||||
|
||||
---
|
||||
|
||||
### Disabilita i plugin
|
||||
|
||||
Se l'app desktop va in crash all'avvio, si blocca o si comporta in modo strano, inizia disabilitando i plugin.
|
||||
|
||||
#### Controlla la configurazione globale
|
||||
|
||||
Apri il tuo file di configurazione globale e cerca la chiave `plugin`.
|
||||
|
||||
- **macOS/Linux**: `~/.config/opencode/opencode.jsonc` (or `~/.config/opencode/opencode.json`)
|
||||
- **macOS/Linux** (older installs): `~/.local/share/opencode/opencode.jsonc`
|
||||
- **Windows**: premi `WIN+R` e incolla `%USERPROFILE%\.config\opencode\opencode.jsonc`
|
||||
|
||||
Se hai plugin configurati, disabilitali temporaneamente rimuovendo la chiave o impostandola a un array vuoto:
|
||||
|
||||
```jsonc
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"plugin": [],
|
||||
}
|
||||
```
|
||||
|
||||
#### Controlla le directory dei plugin
|
||||
|
||||
OpenCode puo anche caricare plugin locali dal disco. Spostali temporaneamente altrove (o rinomina la cartella) e riavvia l'app desktop:
|
||||
|
||||
- **Plugin globali**
|
||||
- **macOS/Linux**: `~/.config/opencode/plugins/`
|
||||
- **Windows**: premi `WIN+R` e incolla `%USERPROFILE%\.config\opencode\plugins`
|
||||
- **Plugin del progetto** (solo se usi una configurazione per progetto)
|
||||
- `<your-project>/.opencode/plugins/`
|
||||
|
||||
Se l'app ricomincia a funzionare, riabilita i plugin uno alla volta per capire quale stia causando il problema.
|
||||
|
||||
---
|
||||
|
||||
### Svuota la cache
|
||||
|
||||
Se disabilitare i plugin non aiuta (o l'installazione di un plugin e bloccata), svuota la cache in modo che OpenCode possa ricostruirla.
|
||||
|
||||
1. Quit OpenCode Desktop completely.
|
||||
2. Elimina la directory della cache:
|
||||
|
||||
- **macOS**: Finder -> `Cmd+Shift+G` -> paste `~/.cache/opencode`
|
||||
- **Linux**: elimina `~/.cache/opencode` (oppure esegui `rm -rf ~/.cache/opencode`)
|
||||
- **Windows**: premi `WIN+R` e incolla `%USERPROFILE%\.cache\opencode`
|
||||
|
||||
3. Restart OpenCode Desktop.
|
||||
|
||||
---
|
||||
|
||||
### Risolvi problemi di connessione al server
|
||||
|
||||
OpenCode Desktop puo avviare il proprio server locale (predefinito) oppure connettersi a un URL server che hai configurato.
|
||||
|
||||
Se vedi una finestra **"Connection Failed"** (o l'app non supera mai la schermata di avvio), controlla se hai impostato un URL server personalizzato.
|
||||
|
||||
#### Cancella l'URL del server predefinito dell'app desktop
|
||||
|
||||
Dalla schermata Home, fai clic sul nome del server (con il pallino di stato) per aprire il selettore dei server. Nella sezione **Default server**, fai clic su **Clear**.
|
||||
|
||||
#### Rimuovi `server.port` / `server.hostname` dalla tua configurazione
|
||||
|
||||
Se il tuo `opencode.json(c)` contiene una sezione `server`, rimuovila temporaneamente e riavvia l'app desktop.
|
||||
|
||||
#### Controlla le variabili d'ambiente
|
||||
|
||||
Se hai `OPENCODE_PORT` impostato nell'ambiente, l'app desktop provera a usare quella porta per il server locale.
|
||||
|
||||
- Rimuovi `OPENCODE_PORT` (o scegli una porta libera) e riavvia.
|
||||
|
||||
---
|
||||
|
||||
### Linux: problemi Wayland / X11
|
||||
|
||||
Su Linux, alcune configurazioni Wayland possono causare finestre vuote o errori del compositor.
|
||||
|
||||
- Se sei su Wayland e l'app e vuota o va in crash, prova ad avviarla con `OC_ALLOW_WAYLAND=1`.
|
||||
- Se peggiora la situazione, rimuovilo e prova invece ad avviare sotto una sessione X11.
|
||||
|
||||
---
|
||||
|
||||
### Windows: runtime WebView2
|
||||
|
||||
Su Windows, OpenCode Desktop richiede **WebView2 Runtime** di Microsoft Edge. Se l'app si apre su una finestra vuota o non parte, installa/aggiorna WebView2 e riprova.
|
||||
|
||||
---
|
||||
|
||||
### Windows: problemi generali di prestazioni
|
||||
|
||||
Se riscontri prestazioni lente, problemi di accesso ai file o problemi del terminale su Windows, prova a usare [WSL (Windows Subsystem for Linux)](/docs/windows-wsl). WSL fornisce un ambiente Linux che funziona in modo piu fluido con le funzionalita di OpenCode.
|
||||
|
||||
---
|
||||
|
||||
### Notifiche non visualizzate
|
||||
|
||||
OpenCode Desktop mostra le notifiche di sistema solo quando:
|
||||
|
||||
- le notifiche sono abilitate per OpenCode nelle impostazioni del sistema operativo, e
|
||||
- la finestra dell'app non e in primo piano.
|
||||
|
||||
---
|
||||
|
||||
### Reimposta lo stato dell'app desktop (ultima risorsa)
|
||||
|
||||
Se l'app non si avvia e non riesci a ripulire le impostazioni dall'interfaccia, reimposta lo stato salvato dell'app desktop.
|
||||
|
||||
1. Quit OpenCode Desktop.
|
||||
2. Trova ed elimina questi file (si trovano nella directory dati dell'app OpenCode Desktop):
|
||||
|
||||
- `opencode.settings.dat` (desktop default server URL)
|
||||
- `opencode.global.dat` e `opencode.workspace.*.dat` (stato dell'interfaccia come server/progetti recenti)
|
||||
|
||||
Per trovare rapidamente la directory:
|
||||
|
||||
- **macOS**: Finder -> `Cmd+Shift+G` -> `~/Library/Application Support` (poi cerca i nomi file qui sopra)
|
||||
- **Linux**: cerca sotto `~/.local/share` i nomi file qui sopra
|
||||
- **Windows**: premi `WIN+R` -> `%APPDATA%` (poi cerca i nomi file qui sopra)
|
||||
|
||||
---
|
||||
|
||||
## Ottenere aiuto
|
||||
|
||||
Se riscontri problemi con OpenCode:
|
||||
|
||||
1. **Segnala i problemi su GitHub**
|
||||
|
||||
Il modo migliore per segnalare bug o richiedere funzionalita e tramite il nostro repository GitHub:
|
||||
|
||||
[**github.com/anomalyco/opencode/issues**](https://github.com/anomalyco/opencode/issues)
|
||||
|
||||
Prima di creare una nuova issue, cerca tra quelle esistenti per vedere se il problema e gia stato segnalato.
|
||||
|
||||
2. **Unisciti al nostro Discord**
|
||||
|
||||
Per supporto in tempo reale e discussioni con la community, unisciti al nostro server Discord:
|
||||
|
||||
[**opencode.ai/discord**](https://opencode.ai/discord)
|
||||
|
||||
---
|
||||
|
||||
## Problemi comuni
|
||||
|
||||
Ecco alcuni problemi comuni e come risolverli.
|
||||
|
||||
---
|
||||
|
||||
### OpenCode non si avvia
|
||||
|
||||
1. Controlla i log per eventuali messaggi di errore
|
||||
2. Prova a eseguire con `--print-logs` per vedere l'output nel terminale
|
||||
3. Assicurati di avere l'ultima versione con `opencode upgrade`
|
||||
|
||||
---
|
||||
|
||||
### Problemi di autenticazione
|
||||
|
||||
1. Prova a riautenticarti con il comando `/connect` nella TUI
|
||||
2. Controlla che le chiavi API siano valide
|
||||
3. Assicurati che la rete permetta connessioni all'API del provider
|
||||
|
||||
---
|
||||
|
||||
### Modello non disponibile
|
||||
|
||||
1. Controlla di esserti autenticato con il provider
|
||||
2. Verifica che il nome del modello nella configurazione sia corretto
|
||||
3. Alcuni modelli potrebbero richiedere accessi o abbonamenti specifici
|
||||
|
||||
Se incontri `ProviderModelNotFoundError`, probabilmente stai facendo riferimento a un modello in modo errato da qualche parte.
|
||||
I modelli vanno indicati in questo formato: `<providerId>/<modelId>`
|
||||
|
||||
Esempi:
|
||||
|
||||
- `openai/gpt-4.1`
|
||||
- `openrouter/google/gemini-2.5-flash`
|
||||
- `opencode/kimi-k2`
|
||||
|
||||
Per capire a quali modelli hai accesso, esegui `opencode models`
|
||||
|
||||
---
|
||||
|
||||
### ProviderInitError
|
||||
|
||||
Se incontri un ProviderInitError, probabilmente la tua configurazione e invalida o corrotta.
|
||||
|
||||
Per risolvere:
|
||||
|
||||
1. Per prima cosa, verifica che il provider sia configurato correttamente seguendo la [guida ai provider](/docs/providers)
|
||||
2. Se il problema persiste, prova a cancellare la configurazione salvata:
|
||||
|
||||
```bash
|
||||
rm -rf ~/.local/share/opencode
|
||||
```
|
||||
|
||||
Su Windows, premi `WIN+R` ed elimina: `%USERPROFILE%\.local\share\opencode`
|
||||
|
||||
3. Riautenticati con il provider usando il comando `/connect` nella TUI.
|
||||
|
||||
---
|
||||
|
||||
### AI_APICallError e problemi dei pacchetti provider
|
||||
|
||||
Se incontri errori nelle chiamate API, potrebbe dipendere da pacchetti provider non aggiornati. opencode installa dinamicamente i pacchetti provider (OpenAI, Anthropic, Google, ecc.) quando servono e li mette in cache localmente.
|
||||
|
||||
Per risolvere problemi coi pacchetti provider:
|
||||
|
||||
1. Svuota la cache dei pacchetti provider:
|
||||
|
||||
```bash
|
||||
rm -rf ~/.cache/opencode
|
||||
```
|
||||
|
||||
Su Windows, premi `WIN+R` ed elimina: `%USERPROFILE%\.cache\opencode`
|
||||
|
||||
2. Riavvia opencode per reinstallare i pacchetti provider piu recenti
|
||||
|
||||
Questo forzera opencode a scaricare le versioni piu recenti dei pacchetti provider, cosa che spesso risolve problemi di compatibilita con parametri dei modelli e cambiamenti delle API.
|
||||
|
||||
---
|
||||
|
||||
### Copy/paste not working on Linux
|
||||
|
||||
Su Linux e necessario avere installata una delle seguenti utility per gli appunti affinche copia/incolla funzioni:
|
||||
|
||||
**Per sistemi X11:**
|
||||
|
||||
```bash
|
||||
apt install -y xclip
|
||||
# or
|
||||
apt install -y xsel
|
||||
```
|
||||
|
||||
**Per sistemi Wayland:**
|
||||
|
||||
```bash
|
||||
apt install -y wl-clipboard
|
||||
```
|
||||
|
||||
**Per ambienti headless:**
|
||||
|
||||
```bash
|
||||
apt install -y xvfb
|
||||
# and run:
|
||||
Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 &
|
||||
export DISPLAY=:99.0
|
||||
```
|
||||
|
||||
opencode rilevera se stai usando Wayland e preferira `wl-clipboard`; altrimenti provera a trovare gli strumenti per gli appunti nell'ordine: `xclip` e `xsel`.
|
||||
387
packages/web/src/content/docs/it/tui.mdx
Normal file
387
packages/web/src/content/docs/it/tui.mdx
Normal file
@@ -0,0 +1,387 @@
|
||||
---
|
||||
title: TUI
|
||||
description: Usa l'interfaccia utente da terminale (TUI) di OpenCode.
|
||||
---
|
||||
|
||||
import { Tabs, TabItem } from "@astrojs/starlight/components"
|
||||
|
||||
OpenCode fornisce un'interfaccia interattiva da terminale (TUI) per lavorare sui tuoi progetti con un LLM.
|
||||
|
||||
Eseguire OpenCode avvia la TUI per la directory corrente.
|
||||
|
||||
```bash
|
||||
opencode
|
||||
```
|
||||
|
||||
Oppure puoi avviarla per una specifica working directory.
|
||||
|
||||
```bash
|
||||
opencode /path/to/project
|
||||
```
|
||||
|
||||
Una volta nella TUI, puoi inviare un messaggio come prompt.
|
||||
|
||||
```text
|
||||
Give me a quick summary of the codebase.
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Riferimenti ai file
|
||||
|
||||
Puoi riferirti ai file nei messaggi usando `@`. Questo esegue una ricerca fuzzy dei file nella working directory corrente.
|
||||
|
||||
:::tip
|
||||
Puoi anche usare `@` per riferirti ai file nei messaggi.
|
||||
:::
|
||||
|
||||
```text "@packages/functions/src/api/index.ts"
|
||||
How is auth handled in @packages/functions/src/api/index.ts?
|
||||
```
|
||||
|
||||
Il contenuto del file viene aggiunto automaticamente alla conversazione.
|
||||
|
||||
---
|
||||
|
||||
## Comandi bash
|
||||
|
||||
Inizia un messaggio con `!` per eseguire un comando shell.
|
||||
|
||||
```bash frame="none"
|
||||
!ls -la
|
||||
```
|
||||
|
||||
L'output del comando viene aggiunto alla conversazione come risultato di uno strumento.
|
||||
|
||||
---
|
||||
|
||||
## Comandi
|
||||
|
||||
Quando usi la TUI di OpenCode, puoi digitare `/` seguito dal nome di un comando per eseguire rapidamente azioni. Per esempio:
|
||||
|
||||
```bash frame="none"
|
||||
/help
|
||||
```
|
||||
|
||||
Molti comandi hanno anche una scorciatoia da tastiera che usa `ctrl+x` come tasto leader (predefinito). [Scopri di piu](/docs/keybinds).
|
||||
|
||||
Ecco tutti i comandi slash disponibili:
|
||||
|
||||
---
|
||||
|
||||
### connetti
|
||||
|
||||
Aggiunge un provider a OpenCode. Ti permette di selezionare tra i provider disponibili e aggiungere le relative chiavi API.
|
||||
|
||||
```bash frame="none"
|
||||
/connect
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### compatta
|
||||
|
||||
Compatta la sessione corrente. _Alias_: `/summarize`
|
||||
|
||||
```bash frame="none"
|
||||
/compact
|
||||
```
|
||||
|
||||
**Scorciatoia:** `ctrl+x c`
|
||||
|
||||
---
|
||||
|
||||
### dettagli
|
||||
|
||||
Attiva/disattiva i dettagli di esecuzione degli strumenti.
|
||||
|
||||
```bash frame="none"
|
||||
/details
|
||||
```
|
||||
|
||||
**Scorciatoia:** `ctrl+x d`
|
||||
|
||||
---
|
||||
|
||||
### editor
|
||||
|
||||
Apre un editor esterno per comporre messaggi. Usa l'editor impostato nella variabile d'ambiente `EDITOR`. [Scopri di piu](#editor-setup).
|
||||
|
||||
```bash frame="none"
|
||||
/editor
|
||||
```
|
||||
|
||||
**Scorciatoia:** `ctrl+x e`
|
||||
|
||||
---
|
||||
|
||||
### esci
|
||||
|
||||
Esce da OpenCode. _Alias_: `/quit`, `/q`
|
||||
|
||||
```bash frame="none"
|
||||
/exit
|
||||
```
|
||||
|
||||
**Scorciatoia:** `ctrl+x q`
|
||||
|
||||
---
|
||||
|
||||
### esporta
|
||||
|
||||
Esporta la conversazione corrente in Markdown e la apre nell'editor predefinito. Usa l'editor impostato nella variabile d'ambiente `EDITOR`. [Scopri di piu](#editor-setup).
|
||||
|
||||
```bash frame="none"
|
||||
/export
|
||||
```
|
||||
|
||||
**Scorciatoia:** `ctrl+x x`
|
||||
|
||||
---
|
||||
|
||||
### aiuto
|
||||
|
||||
Mostra la finestra di aiuto.
|
||||
|
||||
```bash frame="none"
|
||||
/help
|
||||
```
|
||||
|
||||
**Scorciatoia:** `ctrl+x h`
|
||||
|
||||
---
|
||||
|
||||
### inizializza
|
||||
|
||||
Crea o aggiorna il file `AGENTS.md`. [Scopri di piu](/docs/rules).
|
||||
|
||||
```bash frame="none"
|
||||
/init
|
||||
```
|
||||
|
||||
**Scorciatoia:** `ctrl+x i`
|
||||
|
||||
---
|
||||
|
||||
### modelli
|
||||
|
||||
Elenca i modelli disponibili.
|
||||
|
||||
```bash frame="none"
|
||||
/models
|
||||
```
|
||||
|
||||
**Scorciatoia:** `ctrl+x m`
|
||||
|
||||
---
|
||||
|
||||
### nuovo
|
||||
|
||||
Avvia una nuova sessione. _Alias_: `/clear`
|
||||
|
||||
```bash frame="none"
|
||||
/new
|
||||
```
|
||||
|
||||
**Scorciatoia:** `ctrl+x n`
|
||||
|
||||
---
|
||||
|
||||
### rifai
|
||||
|
||||
Rifai un messaggio precedentemente annullato. Disponibile solo dopo aver usato `/undo`.
|
||||
|
||||
:::tip
|
||||
Vengono ripristinate anche eventuali modifiche ai file.
|
||||
:::
|
||||
|
||||
Internamente usa Git per gestire le modifiche ai file. Quindi il progetto **deve essere un repository Git**.
|
||||
|
||||
```bash frame="none"
|
||||
/redo
|
||||
```
|
||||
|
||||
**Scorciatoia:** `ctrl+x r`
|
||||
|
||||
---
|
||||
|
||||
### sessioni
|
||||
|
||||
Elenca e passa tra le sessioni. _Alias_: `/resume`, `/continue`
|
||||
|
||||
```bash frame="none"
|
||||
/sessions
|
||||
```
|
||||
|
||||
**Scorciatoia:** `ctrl+x l`
|
||||
|
||||
---
|
||||
|
||||
### condividi
|
||||
|
||||
Condivide la sessione corrente. [Scopri di piu](/docs/share).
|
||||
|
||||
```bash frame="none"
|
||||
/share
|
||||
```
|
||||
|
||||
**Scorciatoia:** `ctrl+x s`
|
||||
|
||||
---
|
||||
|
||||
### temi
|
||||
|
||||
Elenca i temi disponibili.
|
||||
|
||||
```bash frame="none"
|
||||
/theme
|
||||
```
|
||||
|
||||
**Scorciatoia:** `ctrl+x t`
|
||||
|
||||
---
|
||||
|
||||
### ragionamento
|
||||
|
||||
Attiva/disattiva la visibilita dei blocchi thinking/reasoning nella conversazione. Quando abilitato, puoi vedere il ragionamento del modello per i modelli che supportano extended thinking.
|
||||
|
||||
:::note
|
||||
Questo comando controlla solo se i blocchi di thinking vengono **mostrati**: non abilita o disabilita le capacita di ragionamento del modello. Per cambiare le capacita di ragionamento effettive, usa `ctrl+t` per ciclare tra le varianti del modello.
|
||||
:::
|
||||
|
||||
```bash frame="none"
|
||||
/thinking
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### annulla
|
||||
|
||||
Annulla l'ultimo messaggio nella conversazione. Rimuove l'ultimo messaggio utente, tutte le risposte successive e qualsiasi modifica ai file.
|
||||
|
||||
:::tip
|
||||
Vengono annullate anche eventuali modifiche ai file.
|
||||
:::
|
||||
|
||||
Internamente usa Git per gestire le modifiche ai file. Quindi il progetto **deve essere un repository Git**.
|
||||
|
||||
```bash frame="none"
|
||||
/undo
|
||||
```
|
||||
|
||||
**Scorciatoia:** `ctrl+x u`
|
||||
|
||||
---
|
||||
|
||||
### annulla condivisione
|
||||
|
||||
Annulla la condivisione della sessione corrente. [Scopri di piu](/docs/share#un-sharing).
|
||||
|
||||
```bash frame="none"
|
||||
/unshare
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Configurazione dell'editor
|
||||
|
||||
Sia `/editor` sia `/export` usano l'editor specificato nella variabile d'ambiente `EDITOR`.
|
||||
|
||||
<Tabs>
|
||||
<TabItem label="Linux/macOS">
|
||||
```bash
|
||||
# Example for nano or vim
|
||||
export EDITOR=nano
|
||||
export EDITOR=vim
|
||||
|
||||
# For GUI editors, VS Code, Cursor, VSCodium, Windsurf, Zed, etc.
|
||||
# include --wait
|
||||
export EDITOR="code --wait"
|
||||
```
|
||||
|
||||
Per renderlo permanente, aggiungilo al profilo della shell;
|
||||
`~/.bashrc`, `~/.zshrc`, ecc.
|
||||
|
||||
</TabItem>
|
||||
|
||||
<TabItem label="Windows (CMD)">
|
||||
```bash
|
||||
set EDITOR=notepad
|
||||
|
||||
# For GUI editors, VS Code, Cursor, VSCodium, Windsurf, Zed, etc.
|
||||
# include --wait
|
||||
set EDITOR=code --wait
|
||||
```
|
||||
|
||||
Per renderlo permanente, usa **System Properties** > **Environment Variables**.
|
||||
|
||||
</TabItem>
|
||||
|
||||
<TabItem label="Windows (PowerShell)">
|
||||
```powershell
|
||||
$env:EDITOR = "notepad"
|
||||
|
||||
# For GUI editors, VS Code, Cursor, VSCodium, Windsurf, Zed, etc.
|
||||
# include --wait
|
||||
$env:EDITOR = "code --wait"
|
||||
```
|
||||
|
||||
Per renderlo permanente, aggiungilo al profilo PowerShell.
|
||||
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
Opzioni comuni per l'editor includono:
|
||||
|
||||
- `code` - Visual Studio Code
|
||||
- `cursor` - Cursor
|
||||
- `windsurf` - Windsurf
|
||||
- `nvim` - Neovim editor
|
||||
- `vim` - Vim editor
|
||||
- `nano` - Nano editor
|
||||
- `notepad` - Windows Notepad
|
||||
- `subl` - Sublime Text
|
||||
|
||||
:::note
|
||||
Alcuni editor come VS Code devono essere avviati con il flag `--wait`.
|
||||
:::
|
||||
|
||||
Alcuni editor richiedono argomenti da riga di comando per funzionare in modalita bloccante. Il flag `--wait` fa si che il processo dell'editor resti in attesa finche non viene chiuso.
|
||||
|
||||
---
|
||||
|
||||
## Configura
|
||||
|
||||
Puoi personalizzare il comportamento della TUI tramite il file di config di OpenCode.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"tui": {
|
||||
"scroll_speed": 3,
|
||||
"scroll_acceleration": {
|
||||
"enabled": true
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Opzioni
|
||||
|
||||
- `scroll_acceleration` - Abilita l'accelerazione di scroll in stile macOS per uno scorrimento fluido e naturale. Quando abilitata, la velocita aumenta con gesture rapide e resta precisa con movimenti lenti. **Questa impostazione ha precedenza su `scroll_speed` e lo sovrascrive quando attiva.**
|
||||
- `scroll_speed` - Controlla la velocita di scorrimento della TUI quando usi i comandi di scroll (minimo: `1`). Default: `3`. **Nota: viene ignorata se `scroll_acceleration.enabled` e impostato a `true`.**
|
||||
|
||||
---
|
||||
|
||||
## Personalizzazione
|
||||
|
||||
Puoi personalizzare vari aspetti della vista TUI usando la palette dei comandi (`ctrl+x h` o `/help`). Queste impostazioni persistono tra i riavvii.
|
||||
|
||||
---
|
||||
|
||||
#### Visualizzazione nome utente
|
||||
|
||||
Attiva/disattiva se lo username appare nei messaggi della chat. Puoi farlo da:
|
||||
|
||||
- Palette comandi: cerca "username" o "hide username"
|
||||
- L'impostazione viene salvata automaticamente e ricordata tra le sessioni TUI
|
||||
142
packages/web/src/content/docs/it/web.mdx
Normal file
142
packages/web/src/content/docs/it/web.mdx
Normal file
@@ -0,0 +1,142 @@
|
||||
---
|
||||
title: Web
|
||||
description: Usa OpenCode nel browser.
|
||||
---
|
||||
|
||||
OpenCode puo funzionare come applicazione web nel browser, offrendo la stessa potente esperienza di coding AI senza bisogno di un terminale.
|
||||
|
||||

|
||||
|
||||
## Per iniziare
|
||||
|
||||
Avvia l'interfaccia web eseguendo:
|
||||
|
||||
```bash
|
||||
opencode web
|
||||
```
|
||||
|
||||
Questo avvia un server locale su `127.0.0.1` con una porta disponibile scelta a caso e apre automaticamente OpenCode nel browser predefinito.
|
||||
|
||||
:::caution
|
||||
Se `OPENCODE_SERVER_PASSWORD` non e impostata, il server non sara protetto. Va bene per l'uso locale, ma va impostata per l'accesso in rete.
|
||||
:::
|
||||
|
||||
:::tip[Utenti Windows]
|
||||
Per la migliore esperienza, esegui `opencode web` da [WSL](/docs/windows-wsl) invece che da PowerShell. Questo garantisce accesso corretto al file system e integrazione col terminale.
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
## Configurazione
|
||||
|
||||
Puoi configurare il server web con i flag della riga di comando o nel tuo [file di config](/docs/config).
|
||||
|
||||
### Porta
|
||||
|
||||
Per impostazione predefinita, OpenCode sceglie una porta disponibile. Puoi specificare una porta:
|
||||
|
||||
```bash
|
||||
opencode web --port 4096
|
||||
```
|
||||
|
||||
### Nome host
|
||||
|
||||
Per impostazione predefinita, il server si lega a `127.0.0.1` (solo localhost). Per rendere OpenCode accessibile sulla rete:
|
||||
|
||||
```bash
|
||||
opencode web --hostname 0.0.0.0
|
||||
```
|
||||
|
||||
Usando `0.0.0.0`, OpenCode mostrera sia l'indirizzo locale sia quello di rete:
|
||||
|
||||
```
|
||||
Local access: http://localhost:4096
|
||||
Network access: http://192.168.1.100:4096
|
||||
```
|
||||
|
||||
### Scoperta mDNS
|
||||
|
||||
Abilita mDNS per rendere il server individuabile sulla rete locale:
|
||||
|
||||
```bash
|
||||
opencode web --mdns
|
||||
```
|
||||
|
||||
Questo imposta automaticamente l'hostname a `0.0.0.0` e pubblicizza il server come `opencode.local`.
|
||||
|
||||
Puoi personalizzare il nome di dominio mDNS per eseguire piu istanze sulla stessa rete:
|
||||
|
||||
```bash
|
||||
opencode web --mdns --mdns-domain myproject.local
|
||||
```
|
||||
|
||||
### CORS
|
||||
|
||||
Per consentire domini aggiuntivi per CORS (utile per frontend personalizzati):
|
||||
|
||||
```bash
|
||||
opencode web --cors https://example.com
|
||||
```
|
||||
|
||||
### Autenticazione
|
||||
|
||||
Per proteggere l'accesso, imposta una password usando la variabile d'ambiente `OPENCODE_SERVER_PASSWORD`:
|
||||
|
||||
```bash
|
||||
OPENCODE_SERVER_PASSWORD=secret opencode web
|
||||
```
|
||||
|
||||
Lo username predefinito e `opencode`, ma puo essere cambiato con `OPENCODE_SERVER_USERNAME`.
|
||||
|
||||
---
|
||||
|
||||
## Usa l'interfaccia web
|
||||
|
||||
Una volta avviata, l'interfaccia web ti da accesso alle tue sessioni OpenCode.
|
||||
|
||||
### Sessioni
|
||||
|
||||
Visualizza e gestisci le sessioni dalla homepage. Puoi vedere le sessioni attive e avviarne di nuove.
|
||||
|
||||

|
||||
|
||||
### Stato del server
|
||||
|
||||
Fai clic su "See Servers" per vedere i server connessi e il loro stato.
|
||||
|
||||

|
||||
|
||||
---
|
||||
|
||||
## Collegare un terminale
|
||||
|
||||
Puoi collegare una TUI da terminale a un server web gia in esecuzione:
|
||||
|
||||
```bash
|
||||
# Start the web server
|
||||
opencode web --port 4096
|
||||
|
||||
# In another terminal, attach the TUI
|
||||
opencode attach http://localhost:4096
|
||||
```
|
||||
|
||||
Questo ti permette di usare contemporaneamente interfaccia web e terminale, condividendo le stesse sessioni e lo stesso stato.
|
||||
|
||||
---
|
||||
|
||||
## File di configurazione
|
||||
|
||||
Puoi anche configurare le impostazioni del server nel file di config `opencode.json`:
|
||||
|
||||
```json
|
||||
{
|
||||
"server": {
|
||||
"port": 4096,
|
||||
"hostname": "0.0.0.0",
|
||||
"mdns": true,
|
||||
"cors": ["https://example.com"]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
I flag della riga di comando hanno precedenza sulle impostazioni del file di config.
|
||||
113
packages/web/src/content/docs/it/windows-wsl.mdx
Normal file
113
packages/web/src/content/docs/it/windows-wsl.mdx
Normal file
@@ -0,0 +1,113 @@
|
||||
---
|
||||
title: Windows (WSL)
|
||||
description: Esegui OpenCode su Windows con WSL per la migliore esperienza.
|
||||
---
|
||||
|
||||
import { Steps } from "@astrojs/starlight/components"
|
||||
|
||||
Anche se OpenCode puo essere eseguito direttamente su Windows, consigliamo di usare [Windows Subsystem for Linux (WSL)](https://learn.microsoft.com/en-us/windows/wsl/install) per la migliore esperienza. WSL fornisce un ambiente Linux che funziona in modo ottimale con le funzionalita di OpenCode.
|
||||
|
||||
:::tip[Perche WSL?]
|
||||
WSL offre prestazioni migliori del file system, supporto completo del terminale e compatibilita con gli strumenti di sviluppo su cui OpenCode fa affidamento.
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
## Configurazione
|
||||
|
||||
<Steps>
|
||||
|
||||
1. **Installa WSL**
|
||||
|
||||
Se non l'hai ancora fatto, [installa WSL](https://learn.microsoft.com/en-us/windows/wsl/install) seguendo la guida ufficiale Microsoft.
|
||||
|
||||
2. **Installa OpenCode in WSL**
|
||||
|
||||
Dopo aver configurato WSL, apri il terminale WSL e installa OpenCode usando uno dei [metodi di installazione](/docs/).
|
||||
|
||||
```bash
|
||||
curl -fsSL https://opencode.ai/install | bash
|
||||
```
|
||||
|
||||
3. **Usa OpenCode da WSL**
|
||||
|
||||
Vai nella directory del progetto (accedi ai file Windows tramite `/mnt/c/`, `/mnt/d/`, ecc.) ed esegui OpenCode.
|
||||
|
||||
```bash
|
||||
cd /mnt/c/Users/YourName/project
|
||||
opencode
|
||||
```
|
||||
|
||||
</Steps>
|
||||
|
||||
---
|
||||
|
||||
## App desktop + server WSL
|
||||
|
||||
Se preferisci usare l'app desktop di OpenCode ma vuoi eseguire il server in WSL:
|
||||
|
||||
1. **Avvia il server in WSL** con `--hostname 0.0.0.0` per consentire connessioni esterne:
|
||||
|
||||
```bash
|
||||
opencode serve --hostname 0.0.0.0 --port 4096
|
||||
```
|
||||
|
||||
2. **Collega l'app desktop** a `http://localhost:4096`
|
||||
|
||||
:::note
|
||||
Se `localhost` non funziona nella tua configurazione, usa l'indirizzo IP di WSL (da WSL: `hostname -I`) e collega `http://<wsl-ip>:4096`.
|
||||
:::
|
||||
|
||||
:::caution
|
||||
Quando usi `--hostname 0.0.0.0`, imposta `OPENCODE_SERVER_PASSWORD` per proteggere il server.
|
||||
|
||||
```bash
|
||||
OPENCODE_SERVER_PASSWORD=your-password opencode serve --hostname 0.0.0.0
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
## Client web + WSL
|
||||
|
||||
Per la migliore esperienza web su Windows:
|
||||
|
||||
1. **Esegui `opencode web` nel terminale WSL** invece che in PowerShell:
|
||||
|
||||
```bash
|
||||
opencode web --hostname 0.0.0.0
|
||||
```
|
||||
|
||||
2. **Accedi dal browser Windows** su `http://localhost:<port>` (OpenCode stampa l'URL)
|
||||
|
||||
Eseguire `opencode web` da WSL garantisce accesso corretto al file system e integrazione del terminale, restando comunque accessibile dal browser Windows.
|
||||
|
||||
---
|
||||
|
||||
## Accesso ai file Windows
|
||||
|
||||
WSL puo accedere a tutti i file Windows tramite la directory `/mnt/`:
|
||||
|
||||
- Unita `C:` → `/mnt/c/`
|
||||
- Unita `D:` → `/mnt/d/`
|
||||
- E cosi via...
|
||||
|
||||
Esempio:
|
||||
|
||||
```bash
|
||||
cd /mnt/c/Users/YourName/Documents/project
|
||||
opencode
|
||||
```
|
||||
|
||||
:::tip
|
||||
Per un'esperienza piu fluida, valuta di clonare o copiare il repository nel file system di WSL (per esempio in `~/code/`) ed eseguire OpenCode li.
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
## Suggerimenti
|
||||
|
||||
- Tieni OpenCode in esecuzione su WSL per i progetti salvati su unita Windows: l'accesso ai file e immediato
|
||||
- Usa l'[estensione WSL di VS Code](https://code.visualstudio.com/docs/remote/wsl) insieme a OpenCode per un flusso di lavoro integrato
|
||||
- Configurazione e sessioni di OpenCode sono salvate nell'ambiente WSL in `~/.local/share/opencode/`
|
||||
236
packages/web/src/content/docs/it/zen.mdx
Normal file
236
packages/web/src/content/docs/it/zen.mdx
Normal file
@@ -0,0 +1,236 @@
|
||||
---
|
||||
title: Zen
|
||||
description: Lista curata di modelli fornita da OpenCode.
|
||||
---
|
||||
|
||||
import config from "../../../../config.mjs"
|
||||
export const console = config.console
|
||||
export const email = `mailto:${config.email}`
|
||||
|
||||
OpenCode Zen e una lista di modelli testati e verificati dal team di OpenCode.
|
||||
|
||||
:::note
|
||||
OpenCode Zen e attualmente in beta.
|
||||
:::
|
||||
|
||||
Zen funziona come qualunque altro provider in OpenCode. Accedi a OpenCode Zen e ottieni la tua chiave API. E **completamente opzionale**: non devi usarlo per usare OpenCode.
|
||||
|
||||
---
|
||||
|
||||
## Contesto
|
||||
|
||||
Ci sono moltissimi modelli, ma solo pochi funzionano bene come agenti di coding. Inoltre, la maggior parte dei provider e configurata in modo molto diverso, quindi prestazioni e qualita possono variare parecchio.
|
||||
|
||||
:::tip
|
||||
Abbiamo testato un gruppo selezionato di modelli e provider che funzionano bene con OpenCode.
|
||||
:::
|
||||
|
||||
Quindi, se usi un modello tramite qualcosa come OpenRouter, non puoi mai essere sicuro di ottenere la migliore versione del modello che vuoi.
|
||||
|
||||
Per risolvere, abbiamo fatto alcune cose:
|
||||
|
||||
1. Abbiamo testato un gruppo selezionato di modelli e parlato coi loro team su come eseguirli al meglio.
|
||||
2. Poi abbiamo lavorato con alcuni provider per assicurarci che venissero serviti correttamente.
|
||||
3. Infine, abbiamo fatto benchmark delle combinazioni modello/provider e creato una lista che ci sentiamo di raccomandare.
|
||||
|
||||
OpenCode Zen e un gateway AI che ti da accesso a questi modelli.
|
||||
|
||||
---
|
||||
|
||||
## Come funziona
|
||||
|
||||
OpenCode Zen funziona come qualunque altro provider in OpenCode.
|
||||
|
||||
1. Accedi a **<a href={console}>OpenCode Zen</a>**, aggiungi i dettagli di fatturazione e copia la chiave API.
|
||||
2. Esegui il comando `/connect` nella TUI, seleziona OpenCode Zen e incolla la chiave API.
|
||||
3. Esegui `/models` nella TUI per vedere la lista dei modelli che consigliamo.
|
||||
|
||||
Paghi per richiesta e puoi aggiungere credito al tuo account.
|
||||
|
||||
---
|
||||
|
||||
## Endpoint
|
||||
|
||||
Puoi anche accedere ai nostri modelli tramite i seguenti endpoint API.
|
||||
|
||||
| Modello | ID modello | Endpoint | Pacchetto 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` |
|
||||
|
||||
Il [model id](/docs/config/#models) nella config di OpenCode usa il formato `opencode/<model-id>`. Per esempio, per GPT 5.2 Codex useresti `opencode/gpt-5.2-codex` nella config.
|
||||
|
||||
---
|
||||
|
||||
### Modelli
|
||||
|
||||
Puoi recuperare la lista completa dei modelli disponibili e i relativi metadati da:
|
||||
|
||||
```
|
||||
https://opencode.ai/zen/v1/models
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Prezzi
|
||||
|
||||
Supportiamo un modello pay-as-you-go. Qui sotto trovi i prezzi **per 1M token**.
|
||||
|
||||
| Modello | Input | Output | Lettura in cache | Scrittura in cache |
|
||||
| --------------------------------- | ------ | ------ | ---------------- | ------------------ |
|
||||
| Big Pickle | Gratis | Gratis | Gratis | - |
|
||||
| MiniMax M2.1 Free | Gratis | Gratis | Gratis | - |
|
||||
| MiniMax M2.1 | $0.30 | $1.20 | $0.10 | - |
|
||||
| GLM 4.7 Free | Gratis | Gratis | Gratis | - |
|
||||
| GLM 4.7 | $0.60 | $2.20 | $0.10 | - |
|
||||
| GLM 4.6 | $0.60 | $2.20 | $0.10 | - |
|
||||
| Kimi K2.5 Free | Gratis | Gratis | Gratis | - |
|
||||
| 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 | Gratis | Gratis | Gratis | - |
|
||||
|
||||
Potresti notare _Claude Haiku 3.5_ nella cronologia d'uso. E un [modello a basso costo](/docs/config/#models) usato per generare i titoli delle sessioni.
|
||||
|
||||
:::note
|
||||
Le commissioni della carta di credito vengono ribaltate al costo (4.4% + $0.30 per transazione); non addebitiamo nulla oltre a questo.
|
||||
:::
|
||||
|
||||
I modelli gratuiti:
|
||||
|
||||
- GLM 4.7 Free e disponibile su OpenCode per un periodo limitato. Il team usa questo tempo per raccogliere feedback e migliorare il modello.
|
||||
- Kimi K2.5 Free e disponibile su OpenCode per un periodo limitato. Il team usa questo tempo per raccogliere feedback e migliorare il modello.
|
||||
- MiniMax M2.1 Free e disponibile su OpenCode per un periodo limitato. Il team usa questo tempo per raccogliere feedback e migliorare il modello.
|
||||
- Big Pickle e un modello stealth gratuito su OpenCode per un periodo limitato. Il team usa questo tempo per raccogliere feedback e migliorare il modello.
|
||||
|
||||
<a href={email}>Contattaci</a> se hai domande.
|
||||
|
||||
---
|
||||
|
||||
### Ricarica automatica
|
||||
|
||||
Se il saldo scende sotto $5, Zen ricarica automaticamente $20.
|
||||
|
||||
Puoi cambiare l'importo della ricarica automatica. Puoi anche disabilitare completamente l'auto-reload.
|
||||
|
||||
---
|
||||
|
||||
### Limiti mensili
|
||||
|
||||
Puoi anche impostare un limite mensile di utilizzo per l'intero workspace e per ogni membro del team.
|
||||
|
||||
Per esempio, se imposti un limite mensile a $20, Zen non usera piu di $20 in un mese. Ma se hai l'auto-reload attivo, Zen potrebbe finire per addebitarti piu di $20 se il saldo scende sotto $5.
|
||||
|
||||
---
|
||||
|
||||
## Privacy
|
||||
|
||||
Tutti i nostri modelli sono ospitati negli US. I nostri provider seguono una policy di zero-retention e non usano i tuoi dati per training dei modelli, con le seguenti eccezioni:
|
||||
|
||||
- Big Pickle: durante il periodo gratuito, i dati raccolti potrebbero essere usati per migliorare il modello.
|
||||
- GLM 4.7 Free: durante il periodo gratuito, i dati raccolti potrebbero essere usati per migliorare il modello.
|
||||
- Kimi K2.5 Free: durante il periodo gratuito, i dati raccolti potrebbero essere usati per migliorare il modello.
|
||||
- MiniMax M2.1 Free: durante il periodo gratuito, i dati raccolti potrebbero essere usati per migliorare il modello.
|
||||
- OpenAI APIs: le richieste vengono conservate per 30 giorni in conformita alle [OpenAI's Data Policies](https://platform.openai.com/docs/guides/your-data).
|
||||
- Anthropic APIs: le richieste vengono conservate per 30 giorni in conformita alle [Anthropic's Data Policies](https://docs.anthropic.com/en/docs/claude-code/data-usage).
|
||||
|
||||
---
|
||||
|
||||
## Per i team
|
||||
|
||||
Zen funziona benissimo anche per i team. Puoi invitare colleghi, assegnare ruoli, curare i modelli usati dal team e altro.
|
||||
|
||||
:::note
|
||||
I workspace sono attualmente gratuiti per i team come parte della beta.
|
||||
:::
|
||||
|
||||
Gestire il workspace e attualmente gratuito per i team come parte della beta. Condivideremo presto piu dettagli sul pricing.
|
||||
|
||||
---
|
||||
|
||||
### Ruoli
|
||||
|
||||
Puoi invitare colleghi nel workspace e assegnare ruoli:
|
||||
|
||||
- **Admin**: gestisce modelli, membri, chiavi API e fatturazione
|
||||
- **Member**: gestisce solo le proprie chiavi API
|
||||
|
||||
Gli admin possono anche impostare limiti mensili di spesa per ogni membro per tenere i costi sotto controllo.
|
||||
|
||||
---
|
||||
|
||||
### Accesso ai modelli
|
||||
|
||||
Gli admin possono abilitare o disabilitare modelli specifici per il workspace. Le richieste verso un modello disabilitato restituiscono un errore.
|
||||
|
||||
Questo e utile quando vuoi disabilitare l'uso di un modello che raccoglie dati.
|
||||
|
||||
---
|
||||
|
||||
### Usa le tue chiavi
|
||||
|
||||
Puoi usare le tue chiavi API OpenAI o Anthropic continuando ad accedere agli altri modelli in Zen.
|
||||
|
||||
Quando usi le tue chiavi, i token vengono fatturati direttamente dal provider, non da Zen.
|
||||
|
||||
Per esempio, la tua organizzazione potrebbe avere gia una chiave per OpenAI o Anthropic e vuoi usare quella invece di quella fornita da Zen.
|
||||
|
||||
---
|
||||
|
||||
## Obiettivi
|
||||
|
||||
Abbiamo creato OpenCode Zen per:
|
||||
|
||||
1. Fare **benchmark** dei migliori modelli/provider per agenti di coding.
|
||||
2. Dare accesso alle opzioni di **massima qualita** senza ridurre le prestazioni o instradare verso provider piu economici.
|
||||
3. Trasferire eventuali **riduzioni di prezzo** vendendo al costo; l'unico markup copre le commissioni di elaborazione.
|
||||
4. Evitare **lock-in** permettendoti di usarlo con qualunque altro agente di coding e lasciandoti sempre usare anche altri provider con OpenCode.
|
||||
Reference in New Issue
Block a user