> ## 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 在 macOS、Linux 和 Windows 上的固定文件位置，以及用于 SIEM 摄取的审计日志 JSONL schema 和示例。

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

气隙 CLI 和 Desktop 将所有状态数据保存在少数几个文件中，这些文件的格式均有文档说明且保持稳定。本页列出了各文件的存放位置、哪些文件需要你自行编写，以及审计日志的确切 schema，方便你将其转发到您的 SIEM。

***

## 文件位置

### 由你编写的文件

以下是全系统范围的输入文件。每个文件都有一个默认路径，并可通过对应的环境变量覆盖该路径；该变量必须在启动智能体的环境中设置 (有关如何在 Desktop 中进行设置，请参阅 [API 密钥环境变量](/zh/federal/air-gapped/models-file#api-key-environment-variables)) 。

| 文件 | 默认路径 | 覆盖变量 | 格式 | 相关文档 |
| - | - | - | - | - |
| 许可证 | `/etc/devin/license.devin-onprem-license` | `DEVIN_LICENSE_FILE` | 已签名令牌，单行 | [许可证](/zh/federal/air-gapped/license) |
| 模型文件 | `/etc/devin/models.json` | `DEVIN_MODELS_FILE` | JSON，`"version": 0` | [模型文件](/zh/federal/air-gapped/models-file) |
| 认证文件 (可选，用于启用 SSO (单点登录) ) | `/etc/devin/auth.json` | `DEVIN_AUTH_FILE` | JSON，`"version": 0` | [SSO](/zh/federal/air-gapped/sso) |
| CA 文件包 (可选) | 无 | `DEVIN_CA_BUNDLE` | PEM | [网络与证书](/zh/federal/air-gapped/network-and-certificates) |
| 全系统策略 (可选) | Linux `/etc/devin/system.json`，macOS `/Library/Application Support/Devin/system.json` | 无 | JSON | [CLI 系统配置](/zh/cli/enterprise/system-config) |

macOS 和 Linux 上的默认路径相同。在 Windows 上，许可证、模型文件和认证文件默认位于 `C:\ProgramData\Devin\` (`license.devin-onprem-license`、`models.json`、`auth.json`) ，全系统策略文件为 `C:\ProgramData\Devin\system.json`，覆盖变量与其他平台相同；在向该文件夹放入文件之前，请先[锁定该文件夹](/zh/federal/air-gapped/install#windows-lock-down-the-configuration-folder)。CLI 只会读取这些文件，从不写入，因此你可以使用配置管理工具来管理它们，并将其设为只读。

### CLI 写入的用户级状态

在 macOS 和 Linux 上，CLI **均**遵循 XDG 基础目录布局 (不会使用 `~/Library` 存储自身状态) 。如果设置了 `XDG_CONFIG_HOME` 和 `XDG_DATA_HOME`，CLI 会采用这些变量。

| 路径 | 内容 |
| - | - |
| `~/.config/devin/config.json` | 与标准 Devin CLI 共用的用户配置 (权限、`proxy` 等) 。不会包含任何凭据。参见 [CLI 配置文件参考](/zh/cli/reference/configuration/config-file)。 |
| `~/.config/devin/mcp_config.json` | 本地配置的 MCP 服务器。 |
| `~/.local/share/devin/sso_tokens.toml` | 由 `devin auth login` 写入的 SSO (单点登录) 令牌缓存，权限为仅所有者可访问 (`0600`) 。执行 `devin auth logout` 时会被删除。 |
| `~/.local/share/devin/cli-federal/sessions.db` | 会话历史 (SQLite) 。其中包含对话内容，请按敏感数据处理。 |
| `~/.local/share/devin/cli-federal/audit/` | 审计日志目录：包含 `audit.jsonl`、轮换生成的 `audit-<timestamp>.jsonl` 文件以及 `.audit.lock` 建议锁。schema 见下文。 |

`cli-federal` 是气隙构建使用的产品子目录，用于将这些状态与同一台机器上安装的标准 Devin CLI (使用 `cli`) 隔离开来。

在 Windows 上，CLI 不读取 `XDG_*` 变量，而是将相同的文件存放在 `%APPDATA%\devin\` 下，并将缓存存放在 `%LOCALAPPDATA%\devin\` 下：

| 路径 (Windows) | 内容 |
| - | - |
| `%APPDATA%\devin\config.json` | 用户配置，同上。 |
| `%APPDATA%\devin\mcp_config.json` | 本地配置的 MCP 服务器。 |
| `%APPDATA%\devin\sso_tokens.toml` | SSO 令牌缓存。 |
| `%APPDATA%\devin\cli-federal\sessions.db` | 会话历史 (SQLite) 。 |
| `%APPDATA%\devin\cli-federal\audit\` | 审计日志目录。 |

### Desktop 专属状态

Desktop 应用程序与同一台机器上安装的其他 Devin Desktop 或 Windsurf 相互隔离：

| 路径 | 内容 |
| - | - |
| `~/.devin-airgap-config/` | 一个独立的 `XDG_CONFIG_HOME`，由 Desktop 传递给内置智能体。其中的 `devin/config.json` 是指向实际 `~/.config/devin/config.json` 的符号链接，因此 CLI 与内置智能体共享同一份用户配置。`~/.config/devin/` 中的其他内容 (尤其是 `mcp_config.json`) 对 Desktop 内的智能体均不可见。 |
| `~/.devin-airgap/` | Desktop 扩展目录。 |
| `~/.codeium/windsurf-airgap/` | language-server 状态。 |
| Linux `~/.config/Devin - Airgap/`，macOS `~/Library/Application Support/Devin - Airgap/` | Desktop 用户数据：`User/settings.json` (包括 `devin.acp.agentEnv`) 、窗口状态。 |

仅当 `~/.devin-airgap-config/devin/config.json` 处不存在任何内容时，Desktop 才会在启动时创建该符号链接。如果该位置已有普通文件，Desktop 不会改动它，内置智能体将使用该文件而非共享文件，同时 **Devin ACP** 输出频道会记录一行 `WARNING: … is a regular file, not a symlink`。删除该文件并重启 Desktop 即可恢复链接。

Windows 上不使用符号链接。Desktop 内置智能体与 CLI 直接共享 `%APPDATA%\devin\config.json`，且 Desktop 不会加载用户的 `%APPDATA%\devin\mcp_config.json`。Desktop 用户数据位于 `%APPDATA%\Devin - Airgap\`。

如需彻底重装，只能安全删除 `~/.devin-airgap-config/` 和 `~/.devin-airgap/`。`~/.config/devin/` 和 `~/.local/share/devin/` 同时也供独立 CLI 使用。

## 审计日志

气隙版 CLI 会在本地写入仅追加的结构化审计日志。该日志始终启用 (无切换开关) ，其他任何 Devin 构建均不具备此功能。日志写入工作站，供你自行审查，也可供 SIEM 摄取。

### 位置与轮换

| 属性 | 值 |
| - | - |
| 当前活跃文件 | `~/.local/share/devin/cli-federal/audit/audit.jsonl` (Windows：`%APPDATA%\devin\cli-federal\audit\audit.jsonl`) |
| 格式 | JSON Lines：每行一个独立完整的 JSON 对象，UTF-8 编码 |
| 权限 | 目录和文件创建时仅所有者可访问 (`0600`) |
| 轮换 | 当 `audit.jsonl` 达到 10 MiB 时，会被重命名为 `audit-<UTC timestamp>.jsonl` (例如 `audit-20260127T234500123Z.jsonl`) ，随后开始写入新文件 |
| 保留 | 最多保留 10 个已轮换的文件，超出时优先删除最旧的文件 |
| 并发 | 轮换操作受 `.audit.lock` 建议锁保护，因此多个 CLI 进程并发运行时不会重复轮换 |

如需无限期保留日志，请在已轮换的文件被清理之前将其发送到您的 SIEM。由于 CLI 只追加写入、从不改写已有内容，使用标准的文件追踪收集器即可满足需求；请参阅[将审计日志转发到您的 SIEM](#forward-the-audit-log-to-your-siem)。

### 脱敏保证

事件仅携带路径和元数据。日志中绝不会包含提示、模型响应、代码、文件内容、敏感值、API 密钥或完整的 Shell 命令行；对于 Shell 工具，仅记录程序名称 (即第一个令牌) 。

### 信封结构 (schema 版本 1)

每一行都包含此信封结构；各事件特有的字段会展平后与信封字段并列。

| 字段 | 类型 | 描述 |
| - | - | - |
| `schema_version` | number | 当前为 `1`。仅在发生破坏性变更时递增。 |
| `ts` | string | 精确到毫秒的 RFC 3339 UTC 时间戳。 |
| `pid` | number | 发出该事件的 CLI 进程的进程 ID。 |
| `event` | string | 事件类型，决定其余字段的内容。 |

请将你的解析器配置为忽略未知字段和未知的 `event` 值：新增字段和事件类型时，`schema_version` 不一定会递增。

### 事件类型

#### `session_start`

在智能体会话开始时触发 (新建或恢复的根级会话) 。

| 字段 | 类型 | 描述 |
| - | - | - |
| `session_id` | string | CLI 会话 ID。可用于关联该会话的所有其他事件。 |
| `source` | string | 会话的启动方式 (例如 `startup`) 。 |
| `cli_version` | string | 已发布的 CLI 版本，与 `devin --version` 的输出一致。 |
| `actor` | object | 身份署名信息；参见 [`actor` 对象](#actor-object)。 |

```json theme={null}
{"schema_version":1,"ts":"2026-01-27T23:45:00.123Z","pid":4242,"event":"session_start","session_id":"a1b2","source":"startup","cli_version":"1.2.3","actor":{"os_user":"jsmith","git_user_name":"J. Smith","git_user_email":"jsmith@example.com","sso_issuer":"https://sso.example.com/realms/corp","sso_subject":"6f1c…","sso_user":"jsmith","sso_groups":["/devin-users"]}}
```

#### `session_end`

在会话结束或智能体关闭时触发。

| 字段 | 类型 | 描述 |
| - | - | - |
| `session_id` | string | CLI 会话 ID。 |
| `reason` | string | `prompt_input_exit`、`clear`、`resume`、`logout` 或 `other`。 |

```json theme={null}
{"schema_version":1,"ts":"2026-01-27T23:59:59.000Z","pid":4242,"event":"session_end","session_id":"a1b2","reason":"prompt_input_exit"}
```

正常退出时，每个 `session_start` 都会与同一 `session_id` 下的唯一一个 `session_end` 配对。CLI 会在子进程中运行智能体，并在清理阶段终止该子进程，因此会话结束时，由父进程为子会话记录 `session_end` (原因为 `other`) 。被 `SIGKILL` 终止或因断电中断的会话无法写入最终事件；如果某个 `session_start` 没有匹配的 `session_end`，应视为异常终止。

#### `tool_call`

智能体每执行完一个工具后触发。

| 字段 | 类型 | 描述 |
| - | - | - |
| `session_id` | string | CLI 会话 ID。 |
| `tool_name` | string | 工具名称 (例如 `read`、`write`、`exec`) 。 |
| `tool_id` | string | 本次工具调用的唯一 ID。 |
| `success` | boolean | 工具是否报告执行成功。 |
| `program` | string, optional | 仅适用于 shell 工具：只记录程序名称，从不包含参数。 |
| `paths` | string\[], optional | 工具作用范围所限定的文件系统路径。为空时省略。 |

```json theme={null}
{"schema_version":1,"ts":"2026-01-27T23:45:07.001Z","pid":4242,"event":"tool_call","session_id":"a1b2","tool_name":"exec","tool_id":"t_01","success":true,"program":"cargo"}
```

#### `file_read` 和 `file_write`

除 `tool_call` 外还会额外发出，工具解析后的权限作用域中每个路径各发出一次。它们描述的是该工具*被限定的访问范围*，而非经过验证的 I/O：如果某个工具获批对多个路径拥有读取作用域，即使它只访问了其中部分路径，也会为每个路径各发出一个 `file_read`；此外，无论工具调用是否成功，这些事件都会发出。

| 字段 | 类型 | 描述 |
| - | - | - |
| `session_id` | string | CLI 会话 ID。 |
| `path` | string | 文件系统路径。 |

```json theme={null}
{"schema_version":1,"ts":"2026-01-27T23:45:09.410Z","pid":4242,"event":"file_write","session_id":"a1b2","path":"/home/jsmith/repo/src/main.rs"}
```

#### `model_call`

每次向模型文件中的模型端点发出推理请求后触发。

| 字段 | 类型 | 描述 |
| - | - | - |
| `session_id` | string | CLI 会话 ID。 |
| `model` | string | 模型文件中的模型名称。 |
| `endpoint` | string, optional | 已配置端点的基础 URL。 |
| `input_tokens` | number, optional | 输入 token 总数 (含缓存读取) 。 |
| `output_tokens` | number, optional | 输出 token 数。 |
| `cache_read_tokens` | number, optional | 缓存读取 token 数 (仅当端点返回该数据时提供) 。 |
| `cache_creation_tokens` | number, optional | 缓存写入 token 数 (仅当返回该数据时提供) 。 |

如果端点未返回用量数据，则不包含 token 相关字段。

```json theme={null}
{"schema_version":1,"ts":"2026-01-27T23:45:12.900Z","pid":4242,"event":"model_call","session_id":"a1b2","model":"llama-3-70b","endpoint":"https://models.internal:8000/v1","input_tokens":5120,"output_tokens":384}
```

#### `auth`

| 字段 | 类型 | 描述 |
| - | - | - |
| `action` | string | 取值为下列操作之一。 |
| `actor` | object | 身份署名；参见 [`actor` 对象](#actor-object)。 |
| `error_code` | string, optional | 仅用于 `sso_login_denied` 和 `sso_revalidation_failed`：向用户显示的 `IDPnnn` 错误代码。操作成功时省略此字段。 |

| `action` | 描述 |
| - | - |
| `identity_resolved` | 在会话开始时以及每次执行 `devin auth` 命令后记录身份署名 (因此 `status` 会记录其所验证的登录身份，而 `logout` 则不记录任何身份) 。 |
| `license_validated` | 启动时许可证文件验证成功。 |
| `license_installed` | 已通过 Desktop 的设置页面写入许可证文件。不包含路径或文件内容。 |
| `sso_login` | SSO (单点登录) 登录完成 (通过 `devin auth login` 或 Desktop 登录) 。 |
| `sso_login_denied` | IdP 响应后 SSO 登录被拒绝：缺少必需的组 (`IDP004`) ，或返回的 ID 令牌未通过验证或缺失 (`IDP005`) 。若令牌验证通过，`actor` 会包含 IdP 所担保的身份；不会缓存任何内容。 |
| `sso_refresh` | 已向 IdP 刷新 SSO 令牌。 |
| `sso_logout` | SSO 登出 (通过 `devin auth logout` 或 Desktop 登出) 。 |
| `sso_revalidation_failed` | 运行中的智能体已失去 SSO 登录状态，正在关闭；参见[运行中会话的重新验证](/zh/federal/air-gapped/sso#revalidation-in-running-sessions)。 |

```json theme={null}
{"schema_version":1,"ts":"2026-01-27T23:44:58.000Z","pid":4241,"event":"auth","action":"sso_login","actor":{"os_user":"jsmith","git_user_name":"J. Smith","git_user_email":"jsmith@example.com","sso_issuer":"https://sso.example.com/realms/corp","sso_subject":"6f1c…","sso_user":"jsmith","sso_groups":["/devin-users"]}}
{"schema_version":1,"ts":"2026-01-28T08:10:02.512Z","pid":5150,"event":"auth","action":"sso_login_denied","error_code":"IDP004","actor":{"os_user":"rjones","sso_issuer":"https://sso.example.com/realms/corp","sso_subject":"a90d…","sso_user":"rjones","sso_groups":["/contractors"]}}
{"schema_version":1,"ts":"2026-01-28T09:00:00.000Z","pid":4242,"event":"auth","action":"sso_revalidation_failed","error_code":"IDP003","actor":{"os_user":"jsmith","sso_issuer":"https://sso.example.com/realms/corp","sso_subject":"6f1c…","sso_user":"jsmith","sso_groups":["/devin-users"]}}
```

### `actor` 对象

身份署名包括操作系统用户、本地 Git 身份，以及来自已验证 ID 令牌的身份 (仅在已配置 SSO (单点登录) 时) 。字段不可用时会被省略。

| 字段 | 类型 | 描述 |
| - | - | - |
| `os_user` | string，可选 | `$USER`。 |
| `git_user_name` | string，可选 | `git config user.name`。 |
| `git_user_email` | string，可选 | `git config user.email`。 |
| `sso_issuer` | string，可选 | 验证令牌时所依据的 IdP 签发方 URL。 |
| `sso_subject` | string，可选 | ID 令牌的 `sub` 声明。 |
| `sso_user` | string，可选 | `devin auth status` 输出的身份 (`preferred_username`、`email` 或 `sub`) 。 |
| `sso_groups` | string\[]，可选 | 令牌的组声明 (默认为 `groups`，或已配置的 `groups_claim`) 。 |

SSO 字段会出现在以下事件中：每个持有已验证令牌的 `auth` 事件 (`sso_login`、`sso_refresh`、`sso_logout`、`sso_login_denied`) ；`sso_revalidation_failed`，对应该进程验证过的登录 (若进程未验证任何登录，则对应令牌缓存中仍保留的登录) ；以及 `session_start` 和 `identity_resolved`，对应当前运行的进程在启动时验证的登录。`tool_call`、`file_read`、`file_write` 和 `model_call` 不包含 `actor`；请通过 `session_id` 将它们关联到对应的 `session_start` 来确定归属。

> [!NOTE]
>
> `sso_groups` 会在本机上记录每个用户的 IdP 组成员关系。审计目录和文件仅限所有者访问；如果组名在您的环境中属于敏感信息，请将其纳入数据处理审查范围。

### 将审计日志转发到您的 SIEM

Devin 不会将审计记录发送到任何地方。如需汇总多台工作站的用量，请将您的 SIEM 现有的日志采集智能体 (例如 Splunk 通用转发器 或 Elastic Agent) 指向每台工作站上的审计目录。此过程无需任何 Devin 设置。

按以下设置配置该智能体的文件输入：

| 设置 | 值 |
| - | - |
| 要采集的文件 | 审计目录中的 `audit*.jsonl`。该模式可同时匹配活跃文件和已轮换的文件。不要采集 `.audit.lock`。 |
| 工作站上所有用户的路径 | Linux：`/home/*/.local/share/devin/cli-federal/audit/audit*.jsonl`。macOS：`/Users/*/.local/share/devin/cli-federal/audit/audit*.jsonl`。这些路径仅覆盖 `/home` 和 `/Users` 下的主目录；如果主目录位于其他位置，或您的用户设置了 `XDG_DATA_HOME`，请相应调整。 |
| 记录格式 | 每行一个 JSON 对象，无需多行处理。 |
| 时间戳 | `ts` 字段：RFC 3339 格式，UTC，毫秒精度。 |
| 起始位置 | 文件开头，以便同时采集智能体安装前写入的记录。 |
| 轮换 | 轮换时会重命名活跃文件，并新建一个 `audit.jsonl`。智能体必须按文件身份而非文件名跟踪文件，以免重复读取已重命名的文件。请检查您的智能体如何处理重命名的文件。 |
| 未知字段 | 予以保留。新增字段和事件类型时，`schema_version` 不一定会变更。 |

> [!WARNING]
>
> 审计目录和文件仅其所属用户可读，且 Devin 每次打开日志时都会重置这些权限。请以 root 或该用户身份运行采集智能体。不要通过修改文件权限来授予其他账户访问权限，此类修改不会持久生效。

每个用户的工作站会保留活跃文件以及最多 10 个已轮换文件 (每个 10 MiB) ，总计约 110 MiB。超出部分的较旧记录会被删除，因此如果某台工作站在两次采集之间产生的数据超过该容量，最早的记录将会丢失。

要确认采集是否正常，请在一台工作站上启动并结束一个 Devin 会话，然后在您的 SIEM 中搜索 `session_id` 相同的 `session_start` 和 `session_end` 记录。

#### 示例：Splunk 通用转发器

在每台转发器上，将以下两个文件部署到某个应用中 (例如 `$SPLUNK_HOME/etc/apps/devin_audit/local/`) 。仅使用与工作站操作系统对应的 `monitor` 配置节，并将 `devin` 替换为你要使用的索引。

```ini inputs.conf theme={null}
[monitor:///home/*/.local/share/devin/cli-federal/audit/audit*.jsonl]
sourcetype = devin:airgap:audit
index = devin
disabled = 0

[monitor:///Users/*/.local/share/devin/cli-federal/audit/audit*.jsonl]
sourcetype = devin:airgap:audit
index = devin
disabled = 0
```

```ini props.conf theme={null}
[devin:airgap:audit]
INDEXED_EXTRACTIONS = json
KV_MODE = none
SHOULD_LINEMERGE = false
TIMESTAMP_FIELDS = ts
TIME_FORMAT = %Y-%m-%dT%H:%M:%S.%3NZ
TZ = UTC
```

`props.conf` 必须部署在转发器上，而不能只放在索引器上，因为 `INDEXED_EXTRACTIONS` 是在读取文件的位置生效的。请勿设置 `crcSalt`：这样转发器会根据文件内容识别已轮换的文件，不会因文件改名而重复读取。运行转发器所用的账户必须对通配符路径中的每个目录都具有读取权限；以非 root 服务账号身份安装的转发器无法读取仅限所有者访问的审计目录。

字段以索引字段的形式写入，并保留其 JSON 名称，因此可以直接搜索 `actor.sso_user`、`model` 和 `input_tokens`：

```text theme={null}
index=devin sourcetype="devin:airgap:audit" event=model_call | stats sum(input_tokens) sum(output_tokens) by model
```

#### 示例：Elastic (Filebeat 或 Elastic Agent)

将以下 `filestream` 输入添加到 `filebeat.yml` 中，并仅保留与该工作站操作系统对应的路径。

```yaml filebeat.yml theme={null}
filebeat.inputs:
  - type: filestream
    id: devin-airgap-audit
    paths:
      - /home/*/.local/share/devin/cli-federal/audit/audit*.jsonl
      - /Users/*/.local/share/devin/cli-federal/audit/audit*.jsonl
    prospector.scanner.fingerprint.length: 64
    parsers:
      - ndjson:
          target: devin
          add_error_key: true
    processors:
      - timestamp:
          field: devin.ts
          layouts:
            - "2006-01-02T15:04:05.999Z"
```

`ndjson` 解析器会将每条记录放在 `devin.` 前缀下 (`devin.event`、`devin.session_id`、`devin.actor.sso_user`) 。不要设置 `target: ""`：记录的 `event` 字段是字符串，会与 Elastic Common Schema 中的 `event` 对象冲突，导致 Elasticsearch 拒绝这些文档。`timestamp` 处理器会将 `ts` 复制到 `@timestamp`；Elastic 将此处理器标记为 beta，因此如有需要，也可以移除它，改为在摄取流水线中根据 `devin.ts` 设置 `@timestamp`。`id` 在您的所有 `filestream` 输入中必须唯一。Filebeat 默认以文件开头部分的指纹作为文件标识，即使轮换时文件被重命名，也能继续跟踪该文件，因此无需额外配置轮换。指纹长度从默认的 1024 字节降为 64 字节，这是因为 Filebeat 9.0 至 9.4 会忽略长度不足该值的文件，导致仅有少量记录的工作站被跳过。审计文件的前 64 字节包含第一条记录的 `ts` 和 `pid`，足以确保指纹互不相同。日后若更改该长度，Filebeat 会重新读取所有文件。

如果使用 Elastic Agent，请将 Custom Logs (Filestream) 集成添加到 Agent 策略中，填写相同的路径，并将上述 `parsers` 和 `processors` 块填入该集成的自定义配置字段。

> [!NOTE]
>
> Cognition 尚未在 Splunk 或 Elastic 部署中运行过这些示例。请先在您的环境中验证，并在部署到工作站之前，查阅与您所安装版本对应的供应商文档。

适合建立索引或进行搜索的字段：

| 问题 | 字段 |
| - | - |
| 谁在何时使用了 Devin | `event` = `session_start`，以及 `actor.sso_user` (或 `actor.os_user`) 和 `ts` |
| 部署的是哪个版本 | `session_start` 记录中的 `cli_version` |
| 按模型统计的词元用量 | `event` = `model_call`，以及 `model`、`input_tokens`、`output_tokens` |
| 失败的工具调用 | `event` = `tool_call`，且 `success` = `false` |
| 被拒绝的登录 | `event` = `auth`，且 `action` = `sso_login_denied`，以及 `error_code` |

只有 `session_start` 和 `auth` 记录包含用户信息。要将 `tool_call`、`file_read`、`file_write` 和 `model_call` 记录归属到具体用户，请通过相同的 `session_id` 将它们与对应的 `session_start` 记录关联。

## 诊断报告

`devin diagnostics` 会生成一份经过脱敏处理的纯文本报告，你可以先自行审查，再将其发送给 Cognition 支持团队。报告仅包含版本信息、配置结构 (各文件是否存在以及能否成功解析) 、模型名称、各 API 密钥变量是否已设置，以及审计日志统计数据；绝不会包含提示、代码、文件内容、敏感值、端点 URL 或环境变量的值。

```sh theme={null}
devin diagnostics
```

```text theme={null}
Diagnostics written to devin-diagnostics-20260127T234500Z.txt
The report is plain text and stays on this machine; review it before sharing.
```

使用 `--output <path>` 指定文件名。报告文件以仅所有者可访问的权限 (`0600`) 写入。有关提交支持请求时需要附带哪些信息，请参阅[故障排查](/zh/federal/air-gapped/troubleshooting)。


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