> ## 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.

# Fichier de licence de Devin en air gap

> Installez, inspectez et renouvelez le fichier de licence hors ligne que Devin Desktop et la CLI en air gap valident au démarrage, avec les identifiants de la clé attendus et les codes d'erreur LIC.

> [!NOTE]
>
> Cette documentation concerne les déploiements fédéraux de Devin. [Retour à la documentation de Devin](/fr/get-started/devin-intro)

Les builds en air gap de Devin Desktop et de la Devin CLI ne nécessitent aucune connexion au cloud. L'accès est contrôlé par un **fichier de licence signé**, que le produit valide entièrement hors ligne à chaque démarrage. Chaque licence est attribuée depuis le portail à un seul utilisateur et consomme une licence du quota en air gap de votre équipe.

## Emplacement de la licence

| | |
| - | - |
| Chemin par défaut | `/etc/devin/license.devin-onprem-license` |
| Chemin par défaut (Windows) | `C:\ProgramData\Devin\license.devin-onprem-license` |
| Dérogation | `DEVIN_LICENSE_FILE=<path>` |

L'agent intégré à Desktop et la CLI autonome lisent le même fichier. Installez-le avant le premier lancement ; voir [Installation → Étape 4](/fr/federal/air-gapped/install#step-4-place-the-license-and-models-file). Les utilisateurs de Desktop peuvent également installer une licence depuis les paramètres de Devin : l'agent intégré valide alors le fichier hors ligne, refuse d'écraser un fichier appartenant à un autre utilisateur et consigne un événement d'audit `license_installed`. Sous Windows, si le fichier de licence appartient à un administrateur, un utilisateur standard ne peut pas le remplacer depuis Desktop (l'installation est refusée avec l'erreur `LIC001`), contrairement à un administrateur. [Verrouillez `C:\ProgramData\Devin\`](/fr/federal/air-gapped/install#windows-lock-down-the-configuration-folder) avant d'y placer le fichier.

## Émettre une licence depuis le portail

1. Connectez-vous au portail et ouvrez votre page **Team**. La section **Air-gapped licenses** indique le nombre de licences utilisées, la période de droits et la durée de licence par défaut.
2. Cliquez sur **Generate license**.
3. Saisissez un **libellé** (par exemple le hostname ou le nom de l'utilisateur), l'**e-mail du responsable** et la **durée en jours**. Par défaut, la durée correspond à celle définie dans vos droits ; elle est plafonnée à la fois par la durée maximale autorisée par vos droits et par la fin de la période de droits. L'étape de revue affiche la date d'expiration prévue.
4. Confirmez. Le portail affiche **License generated** et propose **Download license file**. Le fichier téléchargé est le fichier signé `.devin-onprem-license` ; transférez-le vers l'hôte en air gap via votre procédure approuvée de transfert sur support amovible.

Le tableau **Issued licenses** répertorie toutes les licences avec leur statut (**Active**, **Expiring soon**, **Expired**, **Revoked**). Vous pouvez retélécharger une licence active depuis ce tableau. La révocation ou la réémission d'une licence, ainsi que la libération d'une licence lorsque toutes les licences sont occupées, sont prises en charge par votre équipe d'assistance.

## Contenu du fichier

Le fichier contient un unique JSON Web Token au format compact (`header.payload.signature`), signé avec EdDSA (Ed25519). Le champ `kid` de l'en-tête identifie la clé publique ayant servi à la signature ; le produit embarque la clé publique de chaque environnement, si bien qu'aucune clé n'est récupérée au moment de la validation. Revendications :

| Revendication | Signification |
| - | - |
| `license_id` | ID unique de cette licence |
| `account_id` | Votre compte |
| `seat_label` | Le titulaire de la licence, généralement une adresse e-mail |
| `iat` / `nbf` | Début de validité (secondes Unix) |
| `exp` | Fin de validité (secondes Unix) |
| `product` | Toujours `devin-onprem` |
| `entitlements` | Liste de droits sous forme de chaînes de caractères ; peut être vide |

La validation vérifie la signature à l'aide de la clé embarquée désignée par `kid`, la fenêtre `nbf`/`exp` (avec une tolérance de décalage d'horloge de 24 heures dans chaque sens) ainsi que la revendication `product`.

## Inspecter une licence

### Vérifier l'identifiant de la clé

Décodez l'en-tête du JWT et lisez la valeur `kid`. Cette commande d'une ligne fonctionne aussi bien sous Linux que sous macOS : elle convertit le base64url en base64 et ajoute le remplissage nécessaire, car la version BSD de `base64` fournie avec macOS tronque sans avertissement les entrées dépourvues de remplissage.

```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
```

Valeurs attendues :

| Environnement du portail | `kid` attendu |
| - | - |
| FedStart production (`windsurf.fedstart.com`) | `fedstart-key-1` |
| FedStart staging | `fedstart-staging-key-1` |

Si le `kid` est différent ou si le résultat est vide, le fichier n'est pas une licence émise pour ce produit, ou il a été corrompu lors du transfert.

### Vérifier la licence, le compte et la date d'expiration

`devin auth status` fonctionne même lorsque la licence est absente ou invalide : vous pouvez donc l'utiliser pour diagnostiquer le problème :

```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` correspond à l’identité locale utilisée pour la mention d’auteur (nom d’utilisateur du système d’exploitation et `git config user.email`) ; elle est enregistrée dans le journal d’audit et ne dépend pas de la licence. Si le fichier ne peut pas être validé, la dernière ligne est remplacée par `License:       INVALID — LIC00X: <reason>`.

La vérification `license` de `devin airgap doctor` affiche la même licence, le même compte et la même date d’expiration, et passe à `warn` dans les 30 jours précédant l’expiration.

## Comportement au démarrage et lors de la revalidation

* À chaque démarrage, la CLI valide la licence et affiche une ligne sur stderr :

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

  Si la licence expire dans les 30 jours, une ligne `Warning: license expires in N day(s)` s'affiche à la suite.
* Les processus de longue durée (l'agent fourni avec Desktop, le REPL de la CLI) revérifient le fichier au plus une fois par heure, **avant de démarrer une nouvelle session ou un nouveau tour**. Le travail en cours n'est jamais interrompu.
* Une licence expirée depuis plus de 24 heures bloque les nouvelles sessions et les nouveaux tours. Dans Desktop, le panneau de chat affiche l'erreur ACP `-32019 license_invalid` ; la cause précise (`LIC00X`) est indiquée dans **View → Output → Devin ACP**.
* Les échecs ne sont pas mis en cache : un fichier renouvelé prend effet dès le tour suivant, sans redémarrage.
* Quelques commandes fonctionnent sans licence valide afin de vous permettre de réparer un hôte : `devin auth status`, `devin airgap doctor`, `devin doctor`, `devin diagnostics`, `devin models validate` et `devin version`.

## Renouveler ou remplacer une licence

1. Générez depuis le portail une nouvelle licence pour le même titulaire de licence (voir ci-dessus). Si la licence est déjà utilisée, demandez d'abord à votre équipe d'assistance de révoquer l'ancienne.
2. Remplacez le fichier existant par le nouveau à l'emplacement `/etc/devin/license.devin-onprem-license` (ou au chemin défini dans `DEVIN_LICENSE_FILE`). Le fichier doit appartenir au compte qui exécute Devin, ou à root avec un accès en lecture pour ce compte. Sous Windows, le chemin par défaut est `C:\ProgramData\Devin\license.devin-onprem-license` ; remplacez le fichier depuis une session avec privilèges élevés.
3. Vérifiez :

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

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

Aucun redémarrage n'est nécessaire : le nouveau fichier est pris en compte dès la prochaine session ou le prochain tour.

## Codes d'erreur

Tous les échecs liés à la licence s'affichent sous la forme `LIC00X: <message>`, suivis du chemin vérifié et de la manière de le remplacer.

| Code | Signification | Que faire |
| - | - | - |
| `LIC001` | Fichier de licence manquant ou illisible | Installez le fichier au chemin par défaut ou définissez `DEVIN_LICENSE_FILE` ; vérifiez les autorisations du fichier pour l'utilisateur qui exécute Devin |
| `LIC002` | Fichier mal formé : JWT EdDSA non valide, ou aucun `kid` dans l'en-tête | Téléchargez à nouveau la licence depuis le portail ; assurez-vous que le fichier a été transféré tel quel (sans saut de ligne ajouté, retour à la ligne automatique ni changement d'encodage) |
| `LIC003` | Échec de la vérification de la signature | La charge utile a été modifiée après la signature. Téléchargez à nouveau la licence |
| `LIC004` | `kid` inconnu (aucune clé publique intégrée correspondante) | Vérifiez le `kid` comme indiqué ci-dessus. La licence a été émise par un autre environnement, ou votre build est antérieur à une rotation de clé ; installez la version actuelle |
| `LIC005` | Expirée depuis plus de 24 heures (au-delà de la période de grâce) | Renouvelez la licence |
| `LIC006` | Pas encore valide (date d'émission située plus de 24 heures dans le futur) | Vérifiez l'horloge de l'hôte ; si elle est correcte, contactez votre équipe d'assistance |
| `LIC007` | Revendication `product` incorrecte (différente de `devin-onprem`) | Le fichier n'est pas une licence Devin en air gap. Téléchargez-la à nouveau depuis le portail |

Le catalogue complet, tous espaces de noms confondus, est disponible dans [Codes d'erreur](/fr/federal/air-gapped/error-codes).


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