Risoluzione dei Problemi: Integrazioni
Google Workspace
Token OAuth scaduto o revocato
I refresh token OAuth di Google possono essere revocati (dall'utente, da Google, o per inattività). Quando questo accade:
Google OAuth token exchange failedOppure si vedranno errori 401 sulle chiamate API Google.
Soluzione: Ri-autenticarsi:
bash
triggerfish connect googleQuesto apre un browser per il flusso di consenso OAuth. Dopo aver concesso l'accesso, i nuovi token vengono memorizzati nel portachiavi.
"No refresh token"
Il flusso OAuth ha restituito un access token ma nessun refresh token. Questo accade quando:
- Si è già autorizzata l'app in precedenza (Google invia il refresh token solo alla prima autorizzazione)
- La schermata di consenso OAuth non ha richiesto l'accesso offline
Soluzione: Revocare l'accesso dell'app nelle Impostazioni dell'Account Google, poi eseguire di nuovo triggerfish connect google. Questa volta Google invierà un nuovo refresh token.
Prevenzione del refresh concorrente
Se più richieste attivano un refresh del token contemporaneamente, Triggerfish le serializza in modo che venga inviata una sola richiesta di refresh. Se si vedono timeout durante il refresh del token, potrebbe essere che il primo refresh stia impiegando troppo tempo.
GitHub
"GitHub token not found in keychain"
L'integrazione GitHub memorizza il Personal Access Token nel portachiavi del SO sotto la chiave github-pat.
Soluzione:
bash
triggerfish connect github
# oppure manualmente:
triggerfish config set-secret github-pat ghp_...Formato del token
GitHub supporta due formati di token:
- PAT classici:
ghp_... - PAT fine-grained:
github_pat_...
Entrambi funzionano. La procedura guidata di configurazione verifica il token chiamando l'API GitHub. Se la verifica fallisce:
GitHub token verification failed
GitHub API request failedControllare che il token abbia gli scope richiesti. Per la funzionalità completa, sono necessari: repo, read:org, read:user.
Fallimenti del clone
Il tool di clone GitHub ha una logica di auto-retry:
- Primo tentativo: clona con il
--branchspecificato - Se il branch non esiste: ritenta senza
--branch(utilizza il branch predefinito)
Se entrambi i tentativi falliscono:
Clone failed on retry
Clone failedVerificare:
- Il token ha lo scope
repo - Il repository esiste e il token ha accesso
- Connettività di rete verso github.com
Limitazione della frequenza
Il limite di frequenza dell'API GitHub è di 5.000 richieste/ora per le richieste autenticate. Il conteggio rimanente del limite e l'orario di reset vengono estratti dagli header della risposta e inclusi nei messaggi di errore:
Rate limit: X remaining, resets at HH:MM:SSNon c'è backoff automatico. Attendere che la finestra del limite di frequenza si resetti.
Notion
"Notion enabled but token not found in keychain"
L'integrazione Notion richiede un token di integrazione interna memorizzato nel portachiavi.
Soluzione:
bash
triggerfish connect notionQuesto richiede il token e lo memorizza nel portachiavi dopo averlo verificato con l'API Notion.
Formato del token
Notion utilizza due formati di token:
- Token di integrazione interna:
ntn_... - Token legacy:
secret_...
Entrambi sono accettati. La procedura guidata di connessione valida il formato prima della memorizzazione.
Limitazione della frequenza (429)
L'API Notion è limitata a circa 3 richieste al secondo. Triggerfish ha limitazione della frequenza integrata (configurabile) e logica di retry:
- Frequenza predefinita: 3 richieste/secondo
- Tentativi: fino a 3 volte sui 429
- Backoff: esponenziale con jitter, a partire da 1 secondo
- Rispetta l'header
Retry-Afterdalla risposta di Notion
Se si raggiungono comunque i limiti di frequenza:
Notion API rate limited, retryingRidurre le operazioni concorrenti o abbassare il limite di frequenza nella configurazione.
404 Not Found
Notion: 404 Not FoundLa risorsa esiste ma non è condivisa con l'integrazione. In Notion:
- Aprire la pagina o il database
- Fare clic sul menu "..." > "Connessioni"
- Aggiungere l'integrazione Triggerfish
"client_secret removed" (Breaking Change)
In un aggiornamento di sicurezza, il campo client_secret è stato rimosso dalla configurazione Notion. Se si ha questo campo nel triggerfish.yaml, rimuoverlo. Notion ora utilizza solo il token OAuth memorizzato nel portachiavi.
Errori di rete
Notion API network request failed
Notion API network error: <message>L'API non è raggiungibile. Verificare la connessione di rete. Se si è dietro un proxy aziendale, l'API di Notion (api.notion.com) deve essere accessibile.
CalDAV (Calendario)
Risoluzione delle credenziali fallita
CalDAV credential resolution failed: missing username
CalDAV credential resolution failed: secret not foundL'integrazione CalDAV necessita di un nome utente e una password:
yaml
caldav:
server_url: "https://calendar.example.com/dav"
username: "your-username"
credential_ref: "secret:caldav:password"Memorizzare la password:
bash
triggerfish config set-secret caldav:password <your-password>Fallimenti nella scoperta
CalDAV utilizza un processo di scoperta multi-step:
- Trovare l'URL principal (PROPFIND sull'endpoint well-known)
- Trovare il calendar-home-set
- Elencare i calendari disponibili
Se un qualsiasi passaggio fallisce:
CalDAV principal discovery failed
CalDAV calendar-home-set discovery failed
CalDAV calendar listing failedCause comuni:
- URL del server errato (alcuni server necessitano di
/dav/principals/o/remote.php/dav/) - Credenziali rifiutate (nome utente/password errati)
- Il server non supporta CalDAV (alcuni server pubblicizzano WebDAV ma non CalDAV)
Discrepanza ETag su aggiornamento/eliminazione
ETag mismatch — the event was modified by another client. Fetch the latest version and retry.CalDAV utilizza gli ETag per il controllo della concorrenza ottimistica. Se un altro client (telefono, web) ha modificato l'evento tra la lettura e l'aggiornamento, l'ETag non corrisponderà.
Soluzione: L'agent dovrebbe recuperare nuovamente l'evento per ottenere l'ETag corrente, poi ritentare l'operazione. Questo viene gestito automaticamente nella maggior parte dei casi.
"CalDAV credentials not available, executor deferred"
L'esecutore CalDAV si avvia in stato differito se le credenziali non possono essere risolte all'avvio. Questo non è fatale; l'esecutore riporterà errori se si tenta di utilizzare i tool CalDAV.
Server MCP (Model Context Protocol)
Server non trovato
MCP server '<name>' not foundLa chiamata al tool fa riferimento a un server MCP che non è configurato. Verificare la sezione mcp_servers in triggerfish.yaml.
Binario del server non nel PATH
I server MCP vengono generati come sottoprocessi. Se il binario non viene trovato:
MCP server '<name>': <validation error>Problemi comuni:
- Il comando (es.
npx,python,node) non è nel PATH del daemon - Problema di PATH systemd/launchd: Il daemon cattura il PATH al momento dell'installazione. Se si è installato il tool del server MCP dopo l'installazione del daemon, reinstallare il daemon per aggiornare il PATH:
bash
triggerfish stop
triggerfish dive --install-daemonIl server si blocca
Se un processo server MCP si blocca, il ciclo di lettura termina e il server diventa non disponibile. Non c'è riconnessione automatica.
Soluzione: Riavviare il daemon per rigenerare tutti i server MCP.
Trasporto SSE bloccato
I server MCP che utilizzano il trasporto SSE (Server-Sent Events) sono soggetti ai controlli SSRF:
MCP SSE connection blocked by SSRF policyGli URL SSE che puntano a indirizzi IP privati sono bloccati. Questo è per design. Utilizzare il trasporto stdio per i server MCP locali.
Errori delle chiamate ai tool
tools/list failed: <message>
tools/call failed: <message>Il server MCP ha risposto con un errore. Questo è l'errore del server, non di Triggerfish. Controllare i log propri del server MCP per i dettagli.
Obsidian
"Vault path does not exist"
Vault path does not exist: /path/to/vaultIl percorso del vault configurato in plugins.obsidian.vault_path non esiste. Assicurarsi che il percorso sia corretto e accessibile.
Traversal del percorso bloccato
Path traversal rejected: <path>
Path escapes vault boundary: <path>Un percorso di nota ha tentato di uscire dalla directory del vault (es. utilizzando ../). Questo è un controllo di sicurezza. Tutte le operazioni sulle note sono confinate alla directory del vault.
Cartelle escluse
Path is excluded: <path>La nota si trova in una cartella elencata in exclude_folders. Per accedervi, rimuovere la cartella dalla lista di esclusione.
Applicazione della classificazione
Obsidian read blocked: classification exceeds session taint
Obsidian write-down blockedIl vault o una cartella specifica ha un livello di classificazione che è in conflitto con il taint della sessione. Vedere Risoluzione dei Problemi di Sicurezza per i dettagli sulle regole di write-down.
