> ## Documentation Index
> Fetch the complete documentation index at: https://docs.devin.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# File di licenza di Devin air-gapped

> Installa, ispeziona e rinnova il file di licenza offline che Devin Desktop e la CLI air-gapped convalidano all'avvio, con gli ID della chiave previsti e i codici di errore LIC.

> [!NOTE]
>
> Questa documentazione riguarda le distribuzioni di Devin per il governo federale. [Torna alla documentazione di Devin](/it/get-started/devin-intro)

Le build air-gapped di Devin Desktop e della Devin CLI non prevedono il login tramite cloud. L'accesso è regolato da un **file di licenza firmato**, che il prodotto convalida interamente offline a ogni avvio. Ogni licenza viene emessa dal portale a un singolo titolare di postazione e consuma una postazione del diritto di licenza air-gapped del tuo team.

## Dove si trova la licenza

| | |
| - | - |
| Percorso predefinito | `/etc/devin/license.devin-onprem-license` |
| Percorso predefinito (Windows) | `C:\ProgramData\Devin\license.devin-onprem-license` |
| Override | `DEVIN_LICENSE_FILE=<path>` |

L'agente incluso nel bundle di Desktop e la CLI standalone leggono lo stesso file. Installalo prima del primo avvio; consulta [Installazione → Passaggio 4](/it/federal/air-gapped/install#step-4-place-the-license-and-models-file). Gli utenti di Desktop possono anche installare una licenza dalle impostazioni di Devin: l'agente incluso nel bundle convalida il file offline, non sovrascrive un file di proprietà di un altro utente e registra un evento di audit `license_installed`. Su Windows, se il file di licenza è di proprietà di un amministratore, un utente standard non può sostituirlo da Desktop (l'installazione viene rifiutata con `LIC001`), mentre un amministratore sì. [Limita l'accesso a `C:\ProgramData\Devin\`](/it/federal/air-gapped/install#windows-lock-down-the-configuration-folder) prima di copiarvi il file.

## Emettere una licenza dal portale

1. Accedi al portale e apri la pagina **Team**. La sezione **Air-gapped licenses** mostra quante postazioni sono in uso, il periodo del diritto di licenza e la durata predefinita delle licenze.
2. Fai clic su **Generate license**.
3. Inserisci un'**etichetta** (ad esempio l'hostname o il nome dell'utente), l'**email dell'assegnatario** e la **durata in giorni**. Per impostazione predefinita, la durata corrisponde al valore predefinito del tuo diritto di licenza e non può superare né la durata massima prevista dal diritto di licenza né la fine del relativo periodo; il passaggio di revisione mostra la data di scadenza prevista.
4. Conferma. Il portale mostra il messaggio **License generated** e propone l'opzione **Download license file**. Il file scaricato è il file firmato `.devin-onprem-license`; trasferiscilo sull'host air-gapped tramite la procedura approvata per i supporti fisici.

La tabella **Issued licenses** elenca tutte le licenze con il relativo stato (**Active**, **Expiring soon**, **Expired**, **Revoked**). Da questa tabella puoi scaricare di nuovo una licenza attiva. La revoca o la riemissione di una licenza, così come la liberazione di una postazione quando sono tutte occupate, sono gestite dal tuo team di supporto.

## Contenuto del file

Il file è un singolo JSON Web Token in forma compatta (`header.payload.signature`), firmato con EdDSA (Ed25519). Il campo `kid` dell'intestazione identifica la chiave pubblica usata per la firma; il prodotto include le chiavi pubbliche di tutti gli ambienti, quindi in fase di convalida non viene recuperato nulla. Claim:

| Claim | Significato |
| - | - |
| `license_id` | ID univoco della licenza |
| `account_id` | Il tuo account |
| `seat_label` | Il titolare della postazione, in genere un indirizzo email |
| `iat` / `nbf` | Inizio della validità (secondi Unix) |
| `exp` | Fine della validità (secondi Unix) |
| `product` | Sempre `devin-onprem` |
| `entitlements` | Elenco di stringhe che rappresentano i diritti di licenza; può essere vuoto |

I controlli di convalida verificano la firma con la chiave incorporata selezionata tramite `kid`, l'intervallo `nbf`/`exp` (con una tolleranza di 24 ore in entrambe le direzioni per lo sfasamento dell'orologio) e il claim `product`.

## Esaminare una licenza

### Verificare l'ID della chiave

Decodifica l'intestazione del JWT e leggi il campo `kid`. Questo comando su una sola riga funziona sia su Linux sia su macOS: converte base64url in base64 e aggiunge il padding, perché la versione BSD di `base64` inclusa in macOS tronca senza alcun avviso l'input privo di padding.

```sh theme={null}
h=$(cut -d. -f1 < /etc/devin/license.devin-onprem-license | tr '_-' '/+')
while [ $(( ${#h} % 4 )) -ne 0 ]; do h="$h="; done
printf '%s' "$h" | base64 -d | jq -r .kid
```

```text theme={null}
fedstart-key-1
```

Valori previsti:

| Ambiente del portale | `kid` previsto |
| - | - |
| FedStart di produzione (`windsurf.fedstart.com`) | `fedstart-key-1` |
| FedStart di staging | `fedstart-staging-key-1` |

Se il `kid` è diverso o il risultato è vuoto, il file non è una licenza emessa per questo prodotto oppure si è danneggiato durante il trasferimento.

### Verifica la postazione, l'account e la scadenza

`devin auth status` funziona anche quando la licenza manca o non è valida, quindi puoi usarlo per diagnosticare il problema:

```sh theme={null}
devin auth status
```

```text theme={null}
Air-gapped build: access is license-based.
  License file:  /etc/devin/license.devin-onprem-license
  Identity:      alice <alice@example.gov>
  Seat:          alice@example.gov
  Account:       acme
  Expires:       2027-03-01 (340 day(s) left)
```

`Identity` è l'identità di attribuzione locale (nome utente del sistema operativo più `git config user.email`); viene registrata nel registro di audit ed è indipendente dalla licenza. Se non è possibile convalidare il file, l'ultima riga diventa invece `License:       INVALID — LIC00X: <reason>`.

Il controllo `license` di `devin airgap doctor` riporta gli stessi dati di postazione, account e scadenza, e passa a `warn` nei 30 giorni che precedono la scadenza.

## Comportamento all'avvio e alla riconvalida

* A ogni avvio, la CLI convalida la licenza e stampa una riga su stderr:

  ```text theme={null}
  Devin on-prem license: seat alice@example.gov (account acme), expires 2027-03-01. Local user: alice <alice@example.gov>.
  ```

  Se la licenza scade entro 30 giorni, viene stampata anche una riga `Warning: license expires in N day(s)`.
* I processi di lunga durata (l'agente incluso nel bundle di Desktop, la REPL della CLI) verificano nuovamente il file al massimo una volta all'ora, **prima di avviare una nuova sessione o un nuovo turn**. Il lavoro in corso non viene mai interrotto.
* Una licenza scaduta da più di 24 ore blocca l'avvio di nuove sessioni e nuovi turn. In Desktop, il pannello della chat mostra l'errore ACP `-32019 license_invalid`; la causa specifica (`LIC00X`) è riportata in **View → Output → Devin ACP**.
* Gli errori non vengono memorizzati nella cache: un file rinnovato, una volta installato, ha effetto dal turn successivo senza bisogno di riavviare.
* Alcuni comandi funzionano anche senza una licenza valida, così da poter ripristinare un host: `devin auth status`, `devin airgap doctor`, `devin doctor`, `devin diagnostics`, `devin models validate` e `devin version`.

## Rinnovare o sostituire una licenza

1. Genera dal portale una nuova licenza per lo stesso titolare della postazione (vedi sopra). Se la postazione è già in uso, chiedi prima al tuo team di supporto di revocare la vecchia licenza.
2. Sovrascrivi il file esistente in `/etc/devin/license.devin-onprem-license` (o nel percorso indicato in `DEVIN_LICENSE_FILE`) con quello nuovo. Il file deve restare di proprietà dell'account che esegue Devin, oppure di root con accesso in lettura per tale account. Su Windows il percorso predefinito è `C:\ProgramData\Devin\license.devin-onprem-license`; sostituisci il file da una sessione con privilegi elevati.
3. Verifica:

   ```sh theme={null}
   devin auth status | grep Expires
   ```

   ```text theme={null}
     Expires:       2028-03-01 (705 day(s) left)
   ```

Non è necessario alcun riavvio: il nuovo file viene rilevato alla sessione o al turn successivo.

## Codici di errore

Tutti gli errori di licenza vengono visualizzati nel formato `LIC00X: <message>`, seguiti dal percorso verificato e dalle istruzioni per sovrascriverlo.

| Codice | Significato | Cosa fare |
| - | - | - |
| `LIC001` | File di licenza mancante o illeggibile | Installa il file nel percorso predefinito oppure imposta `DEVIN_LICENSE_FILE`; verifica le autorizzazioni del file per l'utente che esegue Devin |
| `LIC002` | File malformato: non è un JWT EdDSA valido oppure manca `kid` nell'intestazione | Scarica di nuovo la licenza dal portale; assicurati che il file sia stato trasferito senza alcuna modifica (nessun ritorno a capo aggiunto, nessun a capo automatico né cambio di codifica) |
| `LIC003` | Verifica della firma non riuscita | Il payload è stato alterato dopo la firma. Scarica di nuovo la licenza |
| `LIC004` | `kid` sconosciuto (nessuna chiave pubblica incorporata corrispondente) | Verifica il `kid` come indicato sopra. La licenza è stata emessa da un ambiente diverso oppure la tua build è precedente a una rotazione delle chiavi; installa il rilascio attuale |
| `LIC005` | Scaduta oltre il periodo di tolleranza di 24 ore | Rinnova la licenza |
| `LIC006` | Non ancora valida (data di emissione oltre 24 ore nel futuro) | Verifica l'orologio dell'host; se è corretto, contatta il tuo team di supporto |
| `LIC007` | Claim `product` errato (diverso da `devin-onprem`) | Il file non è una licenza Devin air-gapped. Scaricala di nuovo dal portale |

Il catalogo completo per tutti i namespace è disponibile in [Codici di errore](/it/federal/air-gapped/error-codes).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.