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

# 气隙版 Devin 许可证文件

> 安装、查看和续订离线许可证文件。气隙版 Devin Desktop 和 CLI 会在启动时校验该文件。本文还列出了预期的密钥 ID 和 LIC 错误代码。

> [!NOTE]
>
> 本文档适用于 Devin 的联邦部署。[返回 Devin 文档](/zh/get-started/devin-intro)

气隙版 Devin Desktop 和 Devin CLI 不支持云端登录，而是通过一个**已签名的许可证文件**控制访问权限。产品每次启动时都会完全离线地校验该文件。每个许可证均通过门户签发给一名席位持有人，并占用您的团队气隙版授权中的一个席位。

## 许可证文件的存放位置

| | |
| - | - |
| 默认路径 | `/etc/devin/license.devin-onprem-license` |
| 默认路径 (Windows) | `C:\ProgramData\Devin\license.devin-onprem-license` |
| 覆盖设置 | `DEVIN_LICENSE_FILE=<path>` |

Desktop 内置的智能体与独立 CLI 读取的是同一个文件。请在首次启动前安装该文件，参见[安装 → 步骤 4](/zh/federal/air-gapped/install#step-4-place-the-license-and-models-file)。Desktop 用户也可以在 Devin 设置中安装许可证：内置智能体会离线验证该文件，拒绝覆盖属于其他用户的文件，并记录一条 `license_installed` 审计事件。在 Windows 上，如果许可证文件归管理员所有，标准用户无法通过 Desktop 替换该文件 (安装会被拒绝，并返回 `LIC001`) ，只有管理员才能替换。放置该文件之前，请先[锁定 `C:\ProgramData\Devin\`](/zh/federal/air-gapped/install#windows-lock-down-the-configuration-folder)。

## 从门户签发许可证

1. 登录门户并打开**团队**页面。**气隙许可证**部分会显示已用席位数、授权期限以及默认许可证有效期。
2. 点击 **Generate license**。
3. 输入**标签** (例如主机名或用户姓名) 、**经办人邮箱**以及**有效天数**。有效期默认采用授权中设定的默认值，且不得超过授权允许的最长期限，也不得晚于授权期限的结束日期；审查步骤会显示预计到期日期。
4. 确认。门户会提示 **License generated**，并提供 **Download license file** 选项。下载所得为已签名的 `.devin-onprem-license` 文件；请按照经批准的介质流程将其传输到气隙主机。

**Issued licenses** 表格会列出所有许可证及其状态 (**Active**、**Expiring soon**、**Expired**、**Revoked**) 。你可以在该表格中重新下载活跃的许可证。如需撤销或重新签发许可证，或在席位全部占用时释放席位，请联系您的支持团队处理。

## 文件内容

该文件是一个紧凑格式 (`header.payload.signature`) 的 JSON Web Token，使用 EdDSA (Ed25519) 签名。标头中的 `kid` 指明了用于签名的公钥；产品内置了所有环境的公钥，因此验证时无需从外部获取任何内容。包含的声明如下：

| 声明 | 含义 |
| - | - |
| `license_id` | 此许可证的唯一 ID |
| `account_id` | 您的账户 |
| `seat_label` | 席位持有人，通常为电子邮件地址 |
| `iat` / `nbf` | 有效期开始时间 (Unix 秒) |
| `exp` | 有效期结束时间 (Unix 秒) |
| `product` | 始终为 `devin-onprem` |
| `entitlements` | 授权字符串列表；可以为空 |

验证检查包括：使用 `kid` 所选的内置密钥校验签名；检查 `nbf`/`exp` 有效期窗口 (前后各允许 24 小时的时钟偏差额度) ；以及检查 `product` 声明。

## 查看许可证

### 检查密钥 ID

解码 JWT 标头并读取 `kid`。以下单行命令在 Linux 和 macOS 上均适用：它会先将 base64url 转换为 base64 并补齐填充，因为 macOS 自带的 BSD `base64` 遇到未填充的输入时会静默截断。

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

预期值：

| 门户环境 | 预期 `kid` |
| - | - |
| FedStart 生产环境 (`windsurf.fedstart.com`) | `fedstart-key-1` |
| FedStart 预生产环境 | `fedstart-staging-key-1` |

如果 `kid` 不符或结果为空，则说明该文件并非为本产品签发的许可证，或在传输过程中已损坏。

### 检查席位、账户和到期时间

即使许可证缺失或无效，`devin auth status` 也能正常运行，因此你可以使用它来诊断问题：

```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` 是本地署名身份 (操作系统用户名加上 `git config user.email`) ，会记录到审计日志中，且与许可证无关。如果文件无法通过验证，最后一行将变为 `License:       INVALID — LIC00X: <reason>`。

`devin airgap doctor` 中的 `license` 检查会报告同样的席位、账户和到期时间，并在距到期不足 30 天时变为 `warn`。

## 启动与重新验证行为

* CLI 每次启动时都会验证许可证，并向 stderr 输出一行信息：

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

  如果许可证将在 30 天内过期，还会紧接着输出一行 `Warning: license expires in N day(s)`。
* 长时间运行的进程 (Desktop 的内置智能体、CLI REPL) 会**在开始新的会话或对话轮次之前**重新验证该文件，且最多每小时验证一次。正在进行的工作绝不会被中断。
* 许可证过期超过 24 小时后，将无法开始新的会话和对话轮次。在 Desktop 中，聊天面板会显示 ACP 错误 `-32019 license_invalid`；具体的 `LIC00X` 原因可在 **View → Output → Devin ACP** 中查看。
* 验证失败的结果不会被缓存：安装续期后的许可证文件后，无需重启，下一个对话轮次即可生效。
* 以下少数命令无需有效许可证即可运行，方便你修复主机：`devin auth status`、`devin airgap doctor`、`devin doctor`、`devin diagnostics`、`devin models validate` 和 `devin version`。

## 续订或替换许可证

1. 在门户中为同一席位持有人生成新的许可证 (见上文) 。如果该席位已被占用，请先联系您的支持团队撤销旧许可证。
2. 将新文件复制到 `/etc/devin/license.devin-onprem-license` (或 `DEVIN_LICENSE_FILE` 中指定的路径) ，覆盖现有文件。该文件的所有者应为运行 Devin 的账户；也可以归 root 所有，但需授予该账户读取权限。在 Windows 上，默认路径为 `C:\ProgramData\Devin\license.devin-onprem-license`，请在具有管理员权限的会话中替换该文件。
3. 验证：

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

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

无需重启，下一个会话或对话轮次将自动加载新文件。

## 错误代码

所有许可证错误都会以 `LIC00X: <message>` 的格式输出，随后显示所检查的路径以及如何覆盖该路径。

| 代码 | 含义 | 处理方法 |
| - | - | - |
| `LIC001` | 许可证文件缺失或无法读取 | 将文件安装到默认路径，或设置 `DEVIN_LICENSE_FILE`；检查运行 Devin 的用户是否具有该文件的访问权限 |
| `LIC002` | 文件格式错误：不是有效的 EdDSA JWT，或标头中缺少 `kid` | 从门户重新下载许可证；确保文件按原样传输 (未添加换行符、未折行、未更改编码) |
| `LIC003` | 签名验证失败 | 载荷在签名后被篡改。请重新下载许可证 |
| `LIC004` | 未知的 `kid` (没有匹配的内置公钥) | 按上文所示检查 `kid`。该许可证由其他环境签发，或您的构建版本早于某次密钥轮换；请安装当前发布版本 |
| `LIC005` | 已过期且超出 24 小时宽限期 | 续订许可证 |
| `LIC006` | 尚未生效 (签发时间比当前时间晚 24 小时以上) | 检查主机时钟；如果时钟无误，请联系您的支持团队 |
| `LIC007` | `product` 声明错误 (不是 `devin-onprem`) | 该文件不是气隙版 Devin 许可证。请从门户重新下载 |

所有命名空间的完整错误代码目录，请参阅[错误代码](/zh/federal/air-gapped/error-codes)。


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