> ## Documentation Index
> Fetch the complete documentation index at: https://test-8ad8522e-feat-ai-sre.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# 控制台

> AI SRE 会话承载您与 Agent 的一次完整对话，包含消息、流式响应、工具调用与产物；本文介绍会话的新建与管理、分享、消息发送、任务面板与后台任务、产物预览、会话 Fork、上下文压缩、团队绑定与会话数据导出。

<Info>
  **公测功能**：AI SRE 已全量开放公测，无需申请，登录控制台即可直接使用，公测期间免费。功能与界面可能继续调整。
</Info>

## 概述

***

会话（Session）是您与 AI SRE 的一次完整对话。它承载您发送的每一条消息、Agent 的流式回复、过程中的工具调用，以及 Agent 产出的产物（Artifacts，例如代码、报告、图表或 Skill 压缩包）。

每个会话相互独立，拥有自己的上下文、绑定的团队与运行环境。您在左侧边栏切换会话，在中间的对话区收发消息、查看回复与产物。

<Note>
  会话之间彼此隔离：上下文、绑定团队、运行环境互不影响。切换会话不会中断正在运行的回合——AI SRE 会持续把进展写入会话，您返回时可继续看到流式输出。
</Note>

## 新建与管理会话

***

左侧边栏是会话的统一入口。点击 **新对话** 即可开启一个全新会话；列表按最近活动倒序排列，初始显示最近的若干条，更多历史通过 **显示更多** 逐步展开。

在空白的 AI SRE 新会话中，输入框上方会显示四张场景建议卡片：**排查一个故障**、**用自然语言查数据**、**治理告警噪音**和**定时自动巡检**。点击卡片只会把预置提示填入输入框，不会立即发送；你可以修改后再按 Enter。

### 搜索与筛选

<Steps>
  <Step title="搜索对话">
    顶部搜索框按会话名称过滤；无结果时显示 **未找到匹配对话**。
  </Step>

  <Step title="按范围 / 状态 / 活动筛选">
    点击列表右上角的 **筛选** 图标打开筛选面板，按下列维度组合过滤；当存在非默认筛选时，筛选按钮上会出现一个小圆点提示。
  </Step>
</Steps>

筛选面板支持的维度：

| 维度   | 可选值                     | 说明                                                                                 |
| ---- | ----------------------- | ---------------------------------------------------------------------------------- |
| 范围   | 全部 / 个人 / 团队            | 选择 **团队** 后可在 **我的团队 / 指定团队** 之间切换，默认 **我的团队**；只有切到 **指定团队** 才会展开内联列表，可搜索并多选你所属的团队 |
| 状态   | 活跃 / 归档 / 全部            | 默认仅显示 **活跃** 会话；切到 **归档** 查看已归档会话                                                  |
| 最近活动 | 全部 / 24 小时 / 7 天 / 30 天 | 按会话最近一次活动时间收窄结果                                                                    |

面板底部提供 **重置**（恢复默认筛选）与 **完成**（关闭面板）。

### 会话可见性与操作权限

会话以账户为硬边界，跨账户永远不可访问。在同一账户内，个人会话和团队会话的读取、继续对话与管理权限不同：

| 会话类型        | 可读取 / 继续对话      | 可重命名、归档、删除或关联故障             |
| ----------- | --------------- | --------------------------- |
| 个人会话（未绑定团队） | 仅创建者本人          | 仅创建者本人                      |
| 团队会话（绑定团队）  | 同账户内拿到会话 ID 的成员 | 会话创建者、账户 Owner / 管理员、或该团队成员 |

置顶是个人偏好，不会修改会话本身；只要您有权读取这条会话，就可以为自己置顶或取消置顶。账户 Owner / 管理员可以管理团队会话，但不能读取或管理其他成员的个人会话。

### 分享会话

聊天页头部提供分享入口，仅当您对当前会话有管理权限时显示。点击 **复制分享链接** 按钮即可开启分享并把链接复制到剪贴板（提示「分享链接已复制」）；链接在当前会话地址上附加 `share_token`，令牌位于 URL 片段（`#` 之后）中。分享链接是**稳定链接**：分享保持开启期间，重复复制得到的是同一条链接。

| 事项       | 说明                                                                                                                |
| -------- | ----------------------------------------------------------------------------------------------------------------- |
| 谁能分享     | 对会话有管理权限的成员——个人会话的创建者，或团队会话的创建者 / 账户 Owner / 管理员 / 团队成员                                                           |
| 谁能打开     | 持有链接、且登录了**同一账户**的成员；链接不跨账户，也不支持匿名访问                                                                              |
| 持链接者看到什么 | 会话以**只读**模式打开，对话区提示「这是一个只读分享会话」：可查看完整上下文（消息、工具调用、产物），也可以点开 Subagent 派发卡片查看子会话的执行详情（同样只读）；但输入框被只读提示替换，不能继续对话或修改原会话 |
| 如何继续排查   | 持链接者可点击 **Fork 为新会话**，把会话派生为自己的新会话后继续处理                                                                           |
| 如何撤销     | 分享开启后头部出现 **取消分享** 按钮，点击后链接立即失效（提示「分享已取消」）；之后重新开启分享会生成新链接，旧链接不会恢复可用                                               |

分享主要改变**个人会话**的可见性：团队会话本来就允许同账户成员凭会话 ID 读取（见上表），而个人会话默认只有创建者可见，分享链接是同账户其他成员打开它的唯一方式。

<Note>
  隐身（incognito）会话不支持分享。

  Subagent / A2A 子会话本身也不能单独开启分享——分享只能在**根会话**上开启。但当你分享了根会话后，持链接者在只读视图里点开 Subagent 派发卡片时，可以一并只读查看对应的子会话执行详情；子会话是纯查看的，不提供 **Fork 为新会话**。撤销根会话的分享后，子会话的访问同时失效。
</Note>

### 单条会话操作

将鼠标悬停在会话行上，会显示置顶与归档操作；置顶的会话在名称左侧常驻一个图钉标记。

| 操作          | 入口                | 说明                                                                   |
| ----------- | ----------------- | -------------------------------------------------------------------- |
| 置顶对话 / 取消置顶 | 行内悬停的图钉按钮         | 置顶会话排在列表前列                                                           |
| 归档对话 / 取消归档 | 行内悬停的归档按钮         | 归档后默认从活跃列表隐藏，可在筛选中切到 **归档** 找回                                       |
| 重命名         | 对话标题处点击直接编辑       | 回车或失焦提交，Esc 取消；名称最长 60 字                                             |
| 删除          | 聊天页头部的删除按钮（需管理权限） | 确认后删除会话，对话历史不可恢复；删除会一并尽力终止会话仍在运行的后台命令 / 监视器进程——终止不成功也不阻塞删除，且不再发送任务通知 |

新会话无需手动命名：第一回合结束后，系统会在服务端根据会话内容自动生成标题，并通过会话流以 `session.renamed` 帧推送回来，前端据此就地更新侧边栏与标题；在生成完成前，会先用你的第一条消息派生一个临时标题占位，避免侧边栏长时间停在「未命名」。你随时可以**重命名**来覆盖自动生成的标题（标题最长 60 字）。

<Tip>
  在会话行上停留片刻，会弹出工具提示，显示完整会话名、所属团队与精确时间——便于在名称被截断时确认这是不是您要找的会话。
</Tip>

### 列表状态指示

每行右侧按优先级显示状态标记：会话正在运行时只显示转圈；否则可同时出现后台任务角标与未读点；都没有时显示相对时间。

| 标记        | 含义                                            |
| --------- | --------------------------------------------- |
| 旋转的圆圈     | 该会话的 Agent 正在运行（有回合在进行中，或正在等待子任务回报）；优先于其他所有标记 |
| 🔭 + 数字   | 该会话有对应数量存活的后台任务（监视器 / 后台命令），详见下文「任务面板与后台任务」   |
| 蓝色小圆点（未读） | Agent 产出了您尚未查看的新内容；可与 🔭 角标同时出现               |
| 相对时间      | 以上都没有时，显示最近活动的相对时间（如 `5m`、`3h`、`3d`）          |

打开会话即会清除该会话的未读小圆点。

## 发送消息与流式响应

***

在底部输入框输入消息后回车发送。输入框支持 Markdown，并支持以斜杠命令（输入 `/` 调出命令菜单）触发内置 Skill 与命令。

当控制台发布了新版本时，输入框上方会显示一条**版本更新提示**：「控制台已发布新版本，刷新页面后继续」。点击 **刷新** 会重新加载页面以使用新版本；点击关闭按钮可隐藏提示，同一版本不再重复提示（提示仅在全功能 Web 控制台显示，嵌入模式与私有化部署不显示）。

### 附件与上下文引用

<AccordionGroup>
  <Accordion title="上传附件" icon="paperclip">
    点击输入框左下角的加号按钮选择文件，或直接粘贴图片。支持图片、PDF、文本 / Markdown / CSV / HTML，以及 Office 文档（Word / Excel / PowerPoint），单个文件最大 **20MB**。HTML 文件按纯文本读取，并在沙箱中渲染，不会执行其中的脚本。单条消息最多上传 **9 个文件**，且全部附件总大小不超过 **50MB**；文件数与总量上限都会在选择附件时由前端立即校验并分别给出提示——此时附件只是本地暂存（以待发胶囊展示），发送消息时才统一实际上传。截图可直接在对话中粘贴。

    未在上面列出的扩展名（如 `.go`、`.py`、`.yaml` 等代码与配置文件），只要文件全文是合法的 UTF-8 文本，也会按纯文本接收；空文件除外，仍会被拒绝。

    除单个文件外，还可以**整个文件夹上传**：点击加号菜单中的 **上传文件夹** 选择本地文件夹，或直接把文件夹拖进输入区。文件夹按以下规则处理：

    * **文件数上限**：单个文件夹最多包含 **50 个文件**；超过上限时整个文件夹会被拒绝（提示「该文件夹超过 50 个文件上限，请选择更小的文件夹」），而不是只保留前 50 个。`node_modules` 目录与以 `.` 开头的文件 / 目录会被静默忽略，不计入文件数。
    * **逐文件校验**：文件夹内的每个文件仍按单文件规则校验（单文件 20MB、附件总量 50MB、类型校验）。不满足的文件会被跳过，选择文件夹后输入区会显示「已跳过 N 个文件」清单，逐条列出文件名与跳过原因（超过 20MB / 超出附件总量 50MB / 非文本文件 / 不支持的文件类型）。
    * **附件计数**：整个文件夹在一条消息里只算 **1 个附件**，同样计入单条消息 9 个附件的上限。
    * **目录结构保留**：文件夹内文件的相对路径（含顶层文件夹名）会被完整保留并 staging 进沙箱。Agent 看到的是一份按路径排序的文件清单（信封形式，含文件数与总大小），而不是把文件内容内联进上下文；它通过沙箱内的 read / bash / grep 等工具按需读取具体文件。

    **大文件的内联截断**：附件以解析出的文本形式内联进 Agent 上下文。解析文本超过 **64KB** 时，只内联开头 **32KB**（在有效的 UTF-8 边界截断），并在附件末尾附上完整文件在沙箱中的路径提示（形如 `~/.flashduty/attachments/...`）——Agent 需要完整内容时，会用沙箱内的 read / bash 等工具按该路径读取原文件，不会丢失内容。此外，超过 **3MB** 的 PDF 不再以原生形式直传模型，而是回退为文本抽取，同样受上述截断规则约束。
  </Accordion>

  <Accordion title="上下文引用" icon="link">
    从故障、告警、监控规则、监控对象等页面进入 AI SRE 时，相关对象会作为**引用胶囊**自动嵌入输入框——它是一枚内联的小标签，标明所引用对象的类型——故障、告警事件、告警、监控规则、主机、监控对象或告警分析——并随消息一起发送给 Agent，让它直接基于该对象开始分析。点击胶囊可在新标签页打开对应对象；点击胶囊上的关闭按钮即可在发送前移除引用。一条消息可携带多个引用。除了从相关页面自动携带引用外，也可以在任意会话的输入框里直接输入 `@` 触发故障搜索下拉（支持关键词模糊匹配与近期故障列表），选中后插入与自动携带相同的引用胶囊——这是一个随时可用的独立引用入口。输入邮箱地址不会误触发该下拉：当 `@` 紧跟在邮箱地址字符（字母、数字或 `._%+-`）之后时，选择器不会弹出；而空格之后、或与中文相邻的 `@` 仍正常触发。
  </Accordion>

  <Accordion title="知识库与 Skill" icon="book">
    会话启动时会按绑定团队自动加载对应的知识库与 Skill；详见下文 <a href="/zh/ai-sre/knowledge">知识库</a> 与 <a href="/zh/ai-sre/skills">Skill</a>。
  </Accordion>
</AccordionGroup>

### 实时流式输出

发送后，Agent 的回复实时流式返回——文本逐字显示，工具调用与思考过程也会即时呈现。

发送瞬间，前端会乐观地把回合标记为「运行中」；约 300ms 后由后端的运行状态确认接管，因此即便您切换页面再回来，运行状态也不会丢失。

<Note>
  回合运行期间，**发送按钮会变为停止按钮**。点击停止会立即中断当前回合：界面随即反馈，被中断的回合会带上「已中断」标记，刷新后依然可见。
</Note>

### 运行中继续输入（排队）

回合运行期间输入框依然可用：您可以继续输入并发送，消息会进入队列，在当前回合结束后依次执行。排队消息以一张可折叠的卡片展示在输入框上方，标题显示排队条数（如「3 条排队」）；队列中的消息可逐条编辑或移除，超过一条时卡片右上角还提供 **全部清空** 一键清空整个队列。

队列以服务端为准：已发送但 Agent（Actor）尚未读取的消息保存在服务端队列中，`POST /safari/session/get` 响应的 `pending_messages` 字段就是它的投影（按执行顺序排列）。在 Agent 开始处理前，您可以**撤回**一条这样的消息——撤回接口为 `POST /safari/session/message/cancel`，请求体携带 `session_id` 与 `invocation_id`（即发送消息时 202 回执 / `user_message_enqueued` 帧下发的调用 ID），响应中的 `result` 字段给出结果：

| 结果          | 含义                                                                                   |
| ----------- | ------------------------------------------------------------------------------------ |
| `removed`   | 消息已从队列移除，**永远不会执行**；服务端向所有订阅方推送 `user_message_cancelled` 帧，各客户端据此丢弃对应的待处理（pending）气泡 |
| `consumed`  | Agent 已读取该消息，它属于运行中的回合——撤回不生效，该回合照常执行（「来不及了」）                                        |
| `forbidden` | 只有消息作者本人可以撤回；非作者调用返回 `ErrAccessDenied`                                               |

撤回只触碰等待队列：Agent 已读取的信封不再可撤回（返回 `consumed`），想中断正在执行的回合请使用**停止**。只有「普通人类消息」可撤回——提问作答（`function_response`）、内部生产者（自动化、子会话通知、父会话初启消息等）的信封不在其列。该能力同样适用于 API 集成发送的排队消息。调用方需要具备该会话的**参与权限**（与发送消息、中断同一门控），并且只有消息作者本人能成功撤回——两个条件都满足才是 `removed`。

### 运行环境初始化

会话首次运行时，对话流中会出现一张 **运行环境初始化** 卡片，分步展示运行环境（沙箱）的就绪过程：**建立云端容器 → 启动运行时**；若云端模板本身带有启动脚本，新建或重建时还会追加第三个阶段 **运行 setup 脚本**（恢复已有沙箱时不会重跑该脚本）。各阶段串行推进，每次只显示当前正在进行的一步；全部完成后卡片折叠为一行结果，按本次是新建、恢复还是重建分别显示：

| 模式 | 折叠后的提示 | 含义                |
| -- | ------ | ----------------- |
| 新建 | 已初始化会话 | 首次为会话创建全新的云端容器    |
| 恢复 | 已恢复会话  | 复用此前的沙箱，文件保持不变    |
| 重建 | 已重建会话  | 原沙箱已被回收，已创建一个新的容器 |

<Note>
  绑定自托管 [BYOC Runner](/zh/ai-sre/environments#byoc-runner) 的会话不显示云端阶段：初始化卡片只含一个阶段——**正在连接自托管运行器**（新建、恢复、重建均是如此），连接成功后变为 **已连接自托管运行器**，随后同样折叠为对应的结果行。若连接自托管运行器失败，卡片会收缩为一行简短的错误提示 **连接自托管运行器失败**（附具体原因），不提供云端阶段历史展开。
</Note>

<Warning>
  当上一个沙箱因空闲被回收时，卡片会给出警示：**原沙箱因闲置 N 分钟被回收 — 已保存的文件被重置**。这意味着此前写入沙箱文件系统的内容已不复存在。请将需要长期留存的产出**保存为 Artifact 或沉淀到知识库**，而不要依赖沙箱内的临时文件。
</Warning>

<Warning>
  若初始化过程中出现错误，卡片会转为 **初始化失败** 的错误态，点击可展开查看各阶段的历史与具体错误信息。此时通常需要重试新建会话，或联系 Flashduty 支持。
</Warning>

## 工具调用与产物

***

Agent 在回合中调用的工具（读写文件、查询监控、执行命令、调用 MCP 工具等）以内联可折叠的形式呈现在对话流中，点击即可展开查看输入与输出，默认折叠以保持对话整洁。

### 任务计划（Todo List）

执行多步骤任务时，Agent 会在对话流中放置一枚可点击的进度徽标（形如「第 X / N 步」，带环形进度指示），点击展开为任务计划清单：每一步都带状态图标（未开始 / 执行中 / 已完成 / 已取消）与优先级标签（高 / 中 / 低）。当 Agent 结束回合但某一步仍处于「执行中」时，该步会呈现为「已暂停」，提示您需要发送新消息才能推进，而不是仍在后台运行。

任务计划只在**确实有人看清单**的渠道维护：`write_todos`（维护清单的内置工具）仅在控制台（`web`）与 IM 渠道会话中提供——web 面板渲染 TodoList 卡片，IM 侧渲染为进度卡。**自动化（`automation`）与 API（`api`）会话没有该工具**：Agent 在这些会话中调用不到 `write_todos`，也收不到「请维护待办清单」的提醒，多步任务直接执行、不产出进度清单（自动化运行仍可在控制台查看完整消息与工具调用记录，但没有清单）。被派发的子会话（Subagent / A2A）同样不提供该工具——待办状态按会话隔离，子会话写入会覆盖父会话的清单。

清单只在任务确实多步时才建立：**三个及以上独立步骤**的任务才会触发（此前按「2 次及以上工具调用」判定，已收紧）。单步查询、以及没有排查性质的纯对话不会生成清单。会话入口类型见上文「会话入口类型（entry\_kind）」。

### Agent 提问

排障过程中，Agent 可能需要您澄清信息，这时会在对话流中插入一张交互式提问卡片：单选（点击选项即自动进入下一题）、多选（勾选后需点击 **确认** / **下一步** 才继续）或自定义文本输入（回车提交）。卡片右上角的 **✕** 按钮可跳过整卡提问（必答题不显示该按钮）；多题批次时会额外显示「第 i / N 题」的翻页控件，可用键盘 ←→ 或点击翻页在题目间切换，切换回已答过的题目会保留之前的选择。支持键盘操作：↑↓ 移动选项、Enter 确认、Esc 跳过。

**挂起中的提问会被新消息自动跳过**：当模型停在提问卡片上等待回答（卡片挂起）时，您直接发送一条新消息，挂起的提问会被自动标记为跳过——服务端写入一条 `function_response`（`reason=user_replied_with_message`，多题批次按题逐条标记），**不驱动模型**；您的新消息作为下一回合立即执行，该回合模型同时看到「提问已跳过 + 你说的话」，不会被挂起的问题挡住。反过来，**迟到的作答不会恢复该提问分支**：对已经有过用户侧响应（已被自动跳过，或已在其它设备作答）的提问，再提交答案会被转换为一条普通消息（按「（已跳过）」或答案文本方式渲染）参与下一回合——同一个提问绝不会被恢复执行两次。

### 需要授权时

当工具或 MCP 调用因缺少凭证或未完成 OAuth 授权而受阻时，对话流中会内联出现一张 **授权〈资源名〉以继续** 卡片，按授权方式分两种：

* **密钥类**：点击卡片按钮弹出输入框，粘贴 API Key / Token 并保存后任务会自动继续；若配置了帮助链接，卡片会附带「如何获取密钥？」。
* **OAuth 类**：点击 **去授权** 在弹出的授权窗口中完成第三方授权；授权完成后卡片按钮变为 **继续任务**，需要您手动点击才会真正恢复被阻塞的工具调用。

<Note>
  OAuth 授权链接有过期时间；过期后卡片会提示「授权链接已过期，请重新触发任务」，需要重新发起一次任务才能拿到新的授权链接。
</Note>

### 子任务（Subagent）

Agent 委派子任务时，对话中会出现一行可点击的**派发引用**：状态环 + 类型徽标（Agent / A2A）+ 子任务名称与当前意图，右侧对齐显示状态与耗时；结束后补上工具调用数 / Token 用量 / 总耗时，失败时在下方附一行红色的失败原因。引用行是紧凑的一行，**不带停止按钮**——停止操作统一放在任务面板的详情头部（见下文「任务面板与后台任务」）。点击引用行会在右侧打开一个与主对话并排的子会话面板——主对话区域随之收窄，而不是被弹窗遮挡；面板可展开为占满主区域的全屏视图，也可以收起回并排布局。

除进行中、完成、失败、已中断外，子任务还可能处于两种「需要你」的状态：

* **等待授权**：引用行下方展开操作区，点击 **去授权** 弹出 OAuth 授权窗口；完成授权后按钮变为 **继续任务**，点击后主代理会在原任务上续跑，不会另起新任务。
* **等待输入**：子任务向您提问后挂起等待回答；问题文本在任务面板的对应任务行内查看，不再内联在引用行上。

孤儿任务（子会话的执行者丢失）在界面上按 **失败** 呈现；被平台终止的任务显示为 **已终止**。

### 任务面板与后台任务

除了子代理，Agent 还可以把耗时工作放到后台执行。会话中派生的任务分三类：

| 类型      | 来源                                | 说明                                                                                             |
| ------- | --------------------------------- | ---------------------------------------------------------------------------------------------- |
| agent   | Subagent / A2A 子代理派发              | 拥有独立子会话，见上文「子任务（Subagent）」                                                                     |
| shell   | `bash` 工具加 `run_in_background` 发起 | 一次性长命令（构建、批处理、数据拉取等），只需在结束时回报结果                                                                |
| monitor | `monitor` 工具发起                    | 监视器常驻任务：watch 一个条件直到命中或到达截止时间，脚本输出会作为事件分批回流给 Agent；一次性的延迟工作（如「半小时后检查一次」）用 monitor 加 `sleep` 实现 |

会话右侧提供统一的 **任务** 面板，集中跟踪本会话的所有任务，按 **需要你 / 运行中 / 已结束** 三组展示。打开入口有三个：

* **聊天页头部的任务按钮**：带数量角标，数字为「需要你 + 运行中」的任务数，超过 9 显示 `9+`；有任务需要您处理（等待授权 / 等待输入）时角标为红色，仅为运行中时角标为蓝色。
* **回合进行中的生成状态行**：显示「N 个任务 · X 需要你」，点击同样打开任务面板。
* **发起 monitor / 后台 bash 的工具行**：对话流中发起 `monitor` 或后台命令（`bash` 加 `run_in_background`）的工具行——单独成组时即该工具组的头部——本身就是该任务在对话中的句柄：行尾以外链图标标示可点击，悬停提示 **打开任务详情**，点击直接打开该任务的任务详情面板。这类行不再展开原始输入 / 输出（后台 bash 行展开后原本只有命令本身，没有状态与输出）。只读分享会话中打开的任务详情同样为只读。

任务详情按类型区分：点击 **agent** 任务打开子会话的执行转录（见上文）；点击 **shell / monitor** 任务打开它的事件时间线详情，包含状态（运行中的任务还会显示最近一次探活距今的秒数，探活约每 30 秒一次）、运行时长、事件数、输出字节数、monitor 的截止时间（无截止的常驻任务显示「常驻」）、退出码、完整命令，以及按序排列的事件时间线。**停止按钮位于详情头部**——shell / monitor 任务为 **停止任务**，子代理为 **停止子代理**，只中断该任务，不影响主会话。

对话流中的对应呈现：

* 发起后台命令的工具行显示 **Started background command**；同一回合前后台命令混合时，折叠的工具组按类别分别计数（如 `Ran 1 command, started 1 background command`）。
* monitor 每次命中条件，对话流中内联出现一条 🔭 系统行：首行显示监视器描述与该批输出的首行摘要，点击就地展开整批输出。
* 任务结束时对话流出现一条终止行，包含结束状态与结果摘要，以及退出码和备注（任务信封携带时）。
* monitor 工具行本身不展开输入 / 输出——点击该行会打开对应任务的任务详情面板，它返回的登记信息（任务 ID、输出文件、截止时间等）在详情中有更完整的呈现。

与后台任务相关的两个状态指示：

* **会话列表行的 🔭 角标**表示该会话有存活的后台任务（`standing_tasks`，数字为个数）；会话正在运行时优先显示转圈。
* 会话的 **「运行中」指示只反映 Agent 回合与子代理任务**：常驻的监视器 / 后台命令不会让会话保持「运行中」——只剩常驻任务存活的会话显示为空闲。

### Artifacts 预览

Agent 产出的文件会以产物形式提供预览。点击产物即在右侧打开预览面板，按类型渲染：

| 类型                  | 预览方式                                     |
| ------------------- | ---------------------------------------- |
| 代码（多语言）             | 语法高亮 + 行号                                |
| Markdown            | 默认渲染视图，可切换 **源码**                        |
| HTML                | 默认渲染视图（iframe 沙箱），可切换 **源码**             |
| 图片                  | 直接显示；加载失败时给出可重试提示                        |
| PDF                 | 浏览器内置查看器渲染                               |
| Skill 压缩包（`.skill`） | 左侧文件树 + 右侧内容，可整包下载，并可一键 **保存 Skill** 到账户 |

预览面板提供 **复制**、**下载** 与 **关闭** 操作。

<Tip>
  报告类产物（如运营洞察报告）可生成包含 Mermaid 图、图表的 HTML，并在渲染视图中直接查看。运营洞察相关能力见 <a href="/zh/ai-sre/insight">运营洞察报告</a>。
</Tip>

所有已发布的产物也可在左侧导航 **产物** 页统一查看与管理（列表、搜索、按个人 / 团队筛选、卡片 / 列表视图切换、按创建 / 修改时间排序、重命名、下载与删除），详见 <a href="/zh/ai-sre/artifacts">产物</a>。

### 状态页更新草稿

Agent 可以调用 `statuspage_draft` 工具，为公开状态页**起草**一份公告——新建故障或维护计划事件，或向已有事件追加一条更新。草稿保存在服务端，并在对话流中渲染为一张**状态页更新草稿卡**；但草稿**永远不会被自动发布**：发布状态页会立刻触达订阅者且不可撤回，所以这一步始终留给人工——在控制台的状态页发布表单里逐项核对后再点击发布。

#### 草稿卡上有什么

卡片复用控制台同类卡片（IncidentCard / MaintenanceCard）的视觉、字段顺序与组件状态图标，让审阅者看到的就是将要发布的内容：

| 内容        | 说明                                                                                                     |
| --------- | ------------------------------------------------------------------------------------------------------ |
| 标题        | 新建事件时为表单的 `name` 字段（后端 `title`，最长 255 字符）；追加更新时为其挂靠事件的标题——追加更新表单没有标题字段，此处仅作标识（未提供时显示「未命名状态页更新」）        |
| 状态 / 计划时间 | 新建维护计划显示「计划于 〈开始〉 → 〈结束〉」（未设置时显示「未设置计划时间」）；其余情况显示状态文案——故障：排查中 / 已定位 / 监控中 / 已恢复；维护追加更新：已排期 / 进行中 / 已完成 |
| 正文        | `message` 字段**完整渲染**为 Markdown——这是客户将要读到的话，审阅者必须看到全貌，不以纯文本形式出现                                         |
| 受影响组件     | 每个组件一枚芯片：组件状态图标 + 名称（悬停显示「名称 · 状态」）                                                                    |
| 目标与类型     | 底部左侧「将发布到 〈状态页〉」（追加更新显示「追加更新 · 〈事件标题〉」），右侧标明类型：故障 / 维护计划                                               |
| 警示条       | 草稿消息若含有状态页编辑器不支持、加载进表单时会被**静默丢弃**的 Markdown（标题、代码块、引用、图片、删除线、行内代码），卡片会以警示条逐条列出——这是起草时工具已检测到的           |

#### 卡片状态

| 状态          | 表现                                                                                                                                       |
| ----------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
| 起草中         | 骨架屏，底部显示「正在起草状态页更新…」                                                                                                                     |
| 工具报错        | 「没能生成草稿」+ 具体原因；可让 AI 再试一次，或直接去状态页手动创建                                                                                                    |
| 草稿不完整       | 「草稿不完整」+ 同样提示（工具返回了结果但缺少可用的草稿对象）                                                                                                         |
| 可审阅         | 按钮为 **审阅 →**：在新标签页打开控制台状态页对应表单，草稿内容自动填入（URL 约定见下）                                                                                        |
| 已发布         | 按钮变为禁用的 **已发布**；底部目标变为**已发布变更**的链接（`/status-page/{page_id}?menu=incidents\|maintenance&incident\|maintenance={change_id}`），可回看草稿最终发布成了什么 |
| 草稿已过期 / 不存在 | 按钮变为禁用的 **草稿已过期**，提示「草稿已过期或不存在，请让 AI 重新起草一份」——控制台查询返回 ResourceNotFound 或网络错误时都按此处理                                                       |

「是否已发布」是卡片自己无法观察的事实（发布发生在另一个标签页的控制台里），因此卡片会按草稿 ID 请求 `GET /status-page/draft/info?draft_id=...`，返回 `status: pending | published`。草稿仍为 pending 时，窗口每次重新获得焦点都会刷新（「在这里审阅、去那里发布、再回来」是常规路径）；`published` 与「草稿不存在」都是终态，结果缓存在当前页面的生命周期内。只读分享会话不渲染审阅按钮，对草稿状态的查询也一并跳过。

#### 审阅交接 URL

草稿本身保存在服务端（fc-statuspage 的草稿存储），跨到控制台的只有 `draft_id`：表单按 ID 从 `/status-page/draft/info` 拉取正文。URL 按「新建 / 追加」×「故障 / 维护」组合为四种：

| 场景     | URL                                                                                                  |
| ------ | ---------------------------------------------------------------------------------------------------- |
| 新建故障   | `/status-page/{page_id}?menu=incidents&incident=new&draft={draft_id}`                                |
| 新建维护计划 | `/status-page/{page_id}?menu=maintenance&maintenance=new&draft={draft_id}`                           |
| 追加故障更新 | `/status-page/{page_id}?menu=incidents&incident={change_id}&action=add-update&draft={draft_id}`      |
| 追加维护更新 | `/status-page/{page_id}?menu=maintenance&maintenance={change_id}&action=add-update&draft={draft_id}` |

`action=add-update` 让详情页自动展开追加更新表单；缺了它，路由只会打开事件本身，草稿不会被读取。`?draft=` 只携带草稿 ID——草稿是服务端状态，不是 URL 里的一段 JSON。

#### 工具要点

| 字段                                    | 说明                                                                                                                                                            |
| ------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `page_id` / `page_name`               | 目标状态页（必填）与其显示名（用于卡片展示）                                                                                                                                        |
| `type`                                | `incident`（故障）/ `maintenance`（维护计划）                                                                                                                           |
| `change_id`                           | 省略 = 新建事件；设置 = 向该事件追加更新。起草前工具会先查 `fduty status-page list` 与 `fduty status-page change-active-list`——目标已有进行中的事件时应追加，而不是再开一个（二次事件会被客户读成又一次独立故障）                 |
| `title` / `message`                   | 新建事件的标题（≤255 字符）与正文（必填，Markdown；状态页编辑器只保留加粗、斜体、链接、有序 / 无序列表、表格与 `---` 分隔线）                                                                                    |
| `status`                              | 新建故障：`investigating` / `identified` / `monitoring` / `resolved`；新建维护：省略（是否按计划自动推进由发布表单的开关决定）；追加维护更新：`scheduled` / `ongoing` / `completed`                     |
| `affected_components`                 | 受影响组件（`component_id` + `status`，可带显示名 `name`）；故障组件状态：`operational` / `degraded` / `partial_outage` / `full_outage`，维护组件状态：`operational` / `under_maintenance` |
| `start_at_seconds` / `end_at_seconds` | 仅新建维护计划：计划窗口起止，unix **秒**（毫秒与 ISO 字符串都会被视为非法）                                                                                                                 |

<Note>
  渠道差异：控制台（`web`）与自动化渠道渲染上述卡片；IM 与 API 渠道不渲染卡片——Agent 会在**回复开头**放一个「\[审阅并发布]\(〈同样的交接 URL〉)」链接，再用一两句话总结草稿要点（IM 消息截断不识别 Markdown，链接放开头才安全）。若草稿保存失败（没有 `review_url`），它会改为文字总结，并引导你到控制台的状态页手动核对。
</Note>

### 消息操作

将鼠标悬停在消息上会显示操作按钮：

| 操作   | 适用              | 说明                                                            |
| ---- | --------------- | ------------------------------------------------------------- |
| 复制   | 用户消息 / 产物       | 复制消息或文件内容到剪贴板                                                 |
| 重试   | 用户消息            | 以该消息重新发起回合                                                    |
| 编辑   | 用户消息            | 将该消息内容回填到输入框重新编辑；若当前有回合正在运行会先被中断，编辑期间无法添加附件，发送按钮文案变为 **发送回滚** |
| Fork | 已完成回合的 Agent 回复 | 从这条回复所在的完成回合派生一个新会话，继续尝试另一条排查路径                               |

<Note>
  编辑一条历史消息本质上是一次 **回滚（rewind）** 操作：提交后会从该消息处重新生成对话，这条消息之后的内容会被替换，请确认后再提交。若目标消息所在的回合仍在运行或正在停止，回滚会被拒绝（`rewind target invocation is still active`），请等待该回合结束后再提交。回滚生效时，被抹除回合派生的后台进程与已派发的子代理会被一并停止，对应的任务行随之从任务面板中删除。
</Note>

### Fork 会话

当一个回合已经完整结束后，Agent 回复右侧会出现 **Fork** 按钮。点击后会弹出「Fork 新对话」对话框：对话框会以源会话的范围和运行环境作为预填建议，但 Fork 必须明确选择目标范围与运行环境。你可以选择个人或可访问的团队，并从 **自动**、云端 Sandbox 或在线的 BYOC Runner 中选择运行环境；点击 **确认** 后才会从该回复所在的回合派生一个新会话，并自动打开。

Fork 适合在同一段排查上下文上尝试另一条路线：新会话保留截至所选回合为止的对话与工具调用记录，但不会在后端继承源会话的环境绑定。环境选项会按目标范围过滤；如果你不属于源团队，系统会改为个人范围；如果源环境已删除、离线、从未连接，或不属于目标范围，系统会改为 **自动**。后续回合不会带入新会话。新会话会写入一条「由 Chat 派生」分隔线，点击分隔线可回到原会话的来源位置。

<Note>
  只能从**已经完成**的主会话回合 Fork。源会话仍在运行、所选回合尚未完成，或目标是 Subagent 子会话时，系统会拒绝 Fork。
</Note>

如果被 Fork 的这段对话里派发过 Subagent 或 A2A 任务，那些派发卡片会连同各自的子会话一起复制到新会话下，点开仍能查看执行详情，不会指向你无权访问的原始任务。**已在源会话完成或失败的派发会保留其真实状态**（完成 / 失败），连同执行结果一并复制过来；只有 **Fork 时仍在进行中的派发**才会显示为「已中断」——新会话没有承接它的执行者，无法继续执行。需要重跑时，在新会话里重新发起一次派发即可。

Fork 会话会清理只属于运行中的临时状态，例如当前回合缓存、待挂载状态、未持久化的前端状态与本轮计数；已经持久化在历史中的消息、工具调用、可复用的压缩状态会保留，团队与环境绑定则按您在派生对话框中的选择写入新会话。Fork 后的新会话拥有独立的上下文，之后的消息、压缩与运行结果都不会写回原会话。

### 会话反馈

聊天页头部提供一对会话级反馈按钮 **有帮助** / **没帮助**（拇指向上 / 向下），用于对整个会话的质量打分。

点击 **没帮助** 会弹出一张反馈卡片，可勾选预置原因并补充说明：

| 预置原因    | 说明            |
| ------- | ------------- |
| 诊断/根因错误 | 诊断结论或定位的根因不正确 |
| 没定位到问题  | 没有找到真正的根因     |
| 处置建议不可用 | 给出的处置建议无法落地   |
| 答非所问    | 回复偏离了你的问题     |

卡片底部还有一个自由文本框，可补充具体问题（可选）。提交后反馈通过 `POST /safari/feedback/create` 持久化；重新打开该会话时，之前的评分会自动回填到头部按钮上。

## 上下文压缩

***

随着对话变长，会话上下文会逼近模型的上下文窗口上限。AI SRE 会自动压缩较早的对话历史——把它总结为一段摘要并保留最近内容，从而在不丢失关键信息的前提下腾出上下文空间。

每次压缩产生的边界摘要末尾还会附加一段确定性的**已折叠资源清单（Folded resources）**：列出本轮被折叠出上下文的资源及其重新获取方式——Skill 通过 `skill(name)` 重读、MCP 服务器的工具定义通过 `tool_search` 重新发现、A2A Agent 的使用说明会在下次派发 / 消息时自动重新投递。压缩后的回合可以据此按需恢复这些定义，而不必把它们长期留在上下文里。

压缩有四种触发方式：

| 方式        | 触发时机                                       |
| --------- | ------------------------------------------ |
| 自动（回合开始前） | 回合开始前，上下文占用超过阈值时自动压缩                       |
| 自动（回合进行中） | 回合进行中上下文继续增长并越过阈值时再次压缩                     |
| 自动（事件数触发） | 会话事件累计达到约 **500 条**时自动压缩，即使 token 占用仍在阈值以下 |
| 手动        | 您主动通过 `/compact` 命令触发压缩                    |

**事件数触发**是兜底机制：当会话由大量短小回合组成时，token 估算可能长期低于阈值，但事件（消息、工具调用等）数量持续增长。事件数达到约 500 条时强制压缩一次，避免历史窗口因逼近模型单次加载上限而冻结。若您观察到 Context 占用百分比远低于阈值时也发生了压缩，即属此情况。

### 您会看到什么

* **压缩进行中**：对话流中出现一行「正在压缩对话上下文…」的状态提示，并显示已用时长与进度，压缩完成后自动消失。
* **压缩完成**：对话保持连贯，无需您介入；最直接的指示是聊天页头部的 **Context** 占用百分比随之下降——它反映当前上下文窗口的利用率，将鼠标悬停可查看具体的 token 用量。
* **无需压缩**：当上下文无需压缩（如对话历史太短、已是压缩态）时，手动触发会给出相应提示，例如「上下文无需压缩」「对话历史太短，无需压缩」。

<Note>
  压缩对您是透明的：您感知到的是一段连续的对话。Agent 在后台保留了被压缩内容的摘要，因此后续回合仍能基于此前的关键结论继续工作。
</Note>

## 选择运行环境

***

新建会话时，输入区除了团队选择器外还有一个独立的 **运行环境** 选择器，用来决定 Agent 的工具、Skill 与 MCP 调用具体在哪里执行。选择器分三段：

| 选项             | 说明                                             |
| -------------- | ---------------------------------------------- |
| 自动（默认）         | 由后端自动选择一个可用环境；无可用项时回退到云端沙箱                     |
| 云端环境           | 使用 Flashduty 托管的云端沙箱（默认模板，或账户 / 团队下已创建的云端环境模板） |
| 指定 BYOC Runner | 从您账户内在线的自托管 Runner 中选择一台，让排障进入您的内网             |

自托管 Runner 会按当前状态展示：离线或从未连接过的 Runner 在列表中会置灰，无法选中；若已选中的 Runner 之后离线，也会阻止发送消息并给出提示。

环境选择在发送第一条消息、创建会话时即固定；如需切换，可参考下文「会话入口类型」中 IM 会话的就地切换能力，或 Fork 出一个新会话。

## 绑定团队

***

新建会话时可以为会话 **绑定团队**。绑定后，会话在启动时会自动加载该团队的知识库、Skill 与 MCP，让 Agent 一开始就具备这个团队的领域上下文与能力。未绑定团队时，会话以账户范围运行。

<Steps>
  <Step title="选择团队">
    在新建会话的输入区通过团队选择器挑选要绑定的团队；您上次的选择会被记住，省去每次重复选择。
  </Step>

  <Step title="自动加载团队上下文">
    会话启动即加载「账户范围 + 绑定团队」的知识库 / Skill / MCP 元数据，Agent 随即可用。
  </Step>

  <Step title="跨团队知识按需挂载">
    当 Agent 需要其它团队的知识时，会按需读取对应团队的知识目录，将该团队的知识与能力作为持久上下文挂载进当前会话——一次挂载在本会话内持续有效。
  </Step>
</Steps>

绑定的团队会随会话保留：重新打开同一会话时，仍是原先绑定的团队；该会话所属团队也会在侧边栏的会话提示中标注。

<Warning>
  故障 / 作战室与团队的自动联动仍在演进中。当前您可以为会话显式 **绑定团队**；后续故障场景下的自动绑定能力会持续完善。
</Warning>

资源的团队作用域（账户范围与团队范围、可见性与编辑权限）规则，详见各资源页面的「作用域」一节。

## 会话入口类型（entry\_kind）

***

每个会话在创建时都带有一个 **入口类型（entry\_kind）**，用于标识本次会话由哪个接入面产生。该字段持久化到数据库，并在创建响应中返回。

| 值            | 来源                            | 说明                               |
| ------------ | ----------------------------- | -------------------------------- |
| `web`        | 控制台                           | 默认值；未传入或传入未知值时自动归一为 `web`        |
| `im`         | IM 平台（飞书 / 钉钉 / 企业微信 / Slack） | 由 IM 渠道自动设置；启用会话的**就地切换**能力（见下方） |
| `api`        | 外部 API 调用                     | 用于程序化集成场景                        |
| `automation` | 自动化流程                         | 由自动化任务触发的会话                      |

通过 `POST /safari/session/create` 创建会话时，可在请求体中传入 `entry_kind`（可选，省略即为 `web`）。`entry_kind` 一经创建不可修改。

<Note>
  `entry_kind=im` 的会话支持**就地切换运行环境与团队范围**——即通过 IM 中的 `/env` 与 `/scope` 命令，在不中断对话的情况下重新绑定运行环境（BYOC Runner 或云端沙箱）或团队。控制台会话（`web`）的环境与团队在创建时固定，不支持就地切换。
</Note>

## 回复语言

***

每个会话在创建时会确定一个 **回复语言**，Agent 在整个会话期间都用该语言回复，不会中途切换；之后重新打开会话时也沿用该语言。

| 入口类型                                        | 回复语言来源                                 |
| ------------------------------------------- | -------------------------------------- |
| 控制台（`web`）                                  | 跟随创建会话时的控制台界面语言；创建后即固定，之后切换界面语言不影响已有会话 |
| IM / API / 自动化（`im` / `api` / `automation`） | 这些入口不携带界面语言信号，默认使用账户的通知语言              |

## 会话数据导出

***

通过 `POST /safari/session/export` 可以将一个会话的全部事件以 **NDJSON**（`application/x-ndjson`）格式流式导出，每行一个 JSON 对象。这一能力适用于审计、归档、离线分析或将会话数据接入外部系统等场景。

### 请求参数

| 字段                  | 类型     | 必填 | 说明                                        |
| ------------------- | ------ | -- | ----------------------------------------- |
| `session_id`        | string | 是  | 要导出的会话 ID                                 |
| `include_subagents` | bool   | 否  | 为 `true` 时递归包含所有子 Agent 会话的事件流；默认 `false` |

### 响应格式

响应的 `Content-Type` 为 `application/x-ndjson`，**第一行始终**是 `session_meta` 类型的会话元数据信封，后续各行为会话事件。启用 `include_subagents=true` 时，每遇到一条 `subagent_dispatch` 类型的行，其后紧跟该子会话的完整事件流，子会话同样以自己的 `session_meta` 行作为起始。

```
{"type":"session_meta","session_id":"s_...","app_name":"ai-sre","entry_kind":"web","started_at":"2026-09-08T08:00:00Z","ended_at":"2026-09-08T08:05:00Z","model":"deepseek-v4-pro"}   // 第一行：会话元数据（不携带 seq）
{"type":"user_message","seq":1,"session_id":"s_...","content":"帮我排查一下这个故障","ts":"2026-09-08T08:00:01Z"}   // 用户消息
{"type":"tool_call","seq":2,"session_id":"s_...","name":"bash","input":{"command":"..."},"status":"ok","call_id":"call_abc","ts":"2026-09-08T08:00:02Z"}   // 工具调用（模型请求侧）
{"type":"tool_call","seq":3,"session_id":"s_...","name":"bash","output":"...","output_bytes":123,"status":"ok","call_id":"call_abc","ts":"2026-09-08T08:00:03Z"}   // 工具调用（运行时回执侧）
{"type":"subagent_dispatch","seq":4,"session_id":"s_...","agent_name":"explore","call_id":"call_def","ts":"2026-09-08T08:00:04Z"}   // 子 Agent 派发
{"type":"session_meta","session_id":"sub-tsk_...","parent_session_id":"s_...","app_name":"ai-sre","entry_kind":"web","model":"deepseek-v4-pro"}   // 子会话元数据（include_subagents=true 时内联）
{"type":"user_message","seq":1,"session_id":"sub-tsk_...","content":"...","ts":"..."}   // 子会话事件
{"type":"final_answer","seq":5,"session_id":"s_...","content":"...","usage":{"input_tokens":0,"output_tokens":0,"cache_read":0,"cache_creation":0},"ts":"2026-09-08T08:05:00Z"}   // 回合结束的最终回答
```

#### 行类型

导出流只包含以下行类型（`type` 字段），不会出现其它类型：

| 行类型                 | 出现时机                                                                        | 关键字段                                                                                                                                                                        |
| ------------------- | --------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `session_meta`      | **每个会话的第一行**（主会话与内联子会话都有）                                                   | `session_id`、`account_id`、`app_name`、`parent_session_id`（子会话时）、`entry_kind`（`web` / `im` / `api` / `automation`，空值归一为 `web`）、`started_at` / `ended_at`（会话创建 / 更新时间）、`model` |
| `user_message`      | 用户消息事件                                                                      | `content`（提取的文本：多个 text part 按 `\n` 连接，推理 / thought part 跳过；用户消息不携带 `usage`）                                                                                                |
| `system_reminder`   | 以 `<system-reminder>` 开头的用户行                                                | `content`（locale / env / knowledge / memory / channel-guide / mount 等系统注入的上下文，不是用户输入）                                                                                       |
| `tool_call`         | 模型请求工具（`function_call` part）或运行时回执（`function_response` part），**每个 part 一行** | 请求侧：`name`、`input`（参数对象）、`status`（乐观标记 `ok`）、`call_id`；回执侧：`name`、`output`（回执 JSON 序列化为字符串）、`output_bytes`、`status`（`ok` / `error`；行级错误时另带 `error` 信息）、`call_id`            |
| `subagent_dispatch` | 模型发起 `agent_dispatch` 调用（每个调用一行）                                            | `agent_name`、`call_id`；`include_subagents=true` 时该行之后内联子会话的完整事件流                                                                                                            |
| `final_answer`      | 回合结束的 assistant 事件（优先于 `llm_call`）                                          | `content`、`usage`                                                                                                                                                           |
| `llm_call`          | 纯文本模型响应且携带 token 用量                                                         | `content`、`usage`、`model`、`ended_at`                                                                                                                                        |
| `agent_text`        | 无用量、非回合结束的助手文本（兜底类型）                                                        | `content`                                                                                                                                                                   |
| `session_fork`      | 「Fork 新对话」分隔线行                                                              | `content`                                                                                                                                                                   |
| `error`             | 流已开始后出错时追加在流末尾；或 `include_subagents` 下子会话不可用时内联                             | `content`（错误文本；消费方需检测该行以判断流是否完整，见下方 Warning）                                                                                                                                |

#### 字段与行为约定

* **`seq`**：从 1 开始、按**输出行**计数的单调序号（按子会话重置；跨分页不重置）。一个 DB 事件产生多行时（见下），多行按 part 顺序连续编号。`session_meta` 行不携带 `seq`。
* **`call_id`（配对依据）**：ADK `function_call` / `function_response` 的 ID（两侧共用同一个 `id`）。一个模型响应可以把多次工具调用**合并进一个 DB 事件**（例如同一事件里 2 个 `agent_dispatch` + 1 个 `bash`）；导出按 part 各输出一行（顺序与原事件一致），`call_id` 让消费方把回执行与对应的调用行重新配对，而不依赖输出顺序。
* **`usage`（token 用量）**：事件级计数（`input_tokens` / `output_tokens` / `cache_read` / `cache_creation`），无值时输出 `0` 而非省略。**只在事件的首行盖章**——一次批处理派发的多条行共享同一份用量，按行累计的消费方不会被多算 N 倍。
* **`model`**：`session_meta` 与 `llm_call` 行的模型取自**会话自身绑定的 chatmodel**（首次回合加权池抽取、以及后续故障切换重绑定的结果），可能与应用的配置默认不同（例如配置默认 qwen、会话实际 deepseek）；未绑定模型的会话回退到应用配置默认，应用未注册时为空。
* **时间与耗时**：`ts` 为事件写入时间（RFC 3339）。`llm_call` 与 `tool_call` 行以该时间近似**结束时间**（`ended_at`）；开始时间与耗时（`started_at` / `duration_ms`）当前不提供（为空 / 0）。
* **`include_subagents=true`**：每个 `subagent_dispatch` 行之后立即递归内联该子会话的完整导出流（批量派发的每个 dispatch 行都会内联一次）；子会话的 `seq` 从 1 重新计数，其 `session_meta` 携带 `parent_session_id`。子会话不存在或导出失败时不中断父流，输出一条内联的 `error` 行继续。
* 部分簿记行不产生导出行（例如 OAuth 授权成功标记），因此事件行数可能少于会话事件数。

<Warning>
  若流式传输已开始后发生错误，服务器**无法**切换回标准 JSON 错误包。此时会在流末尾追加一行 JSON 编码的错误对象，消费方需检测该行以判断流是否完整。
</Warning>

**权限**：导出端点使用与发送消息相同的权限门控（`CanChatSession`），即要求调用方具备该会话的消息收发权限，单纯的只读访问权限不够。个人会话只能由创建者导出；团队会话可由同账户内具备会话访问能力的成员导出。

## 相关页面

***

<CardGroup cols={2}>
  <Card title="概述" icon="robot" href="/zh/ai-sre/overview">
    了解 AI SRE 的定位、能力与适用场景。
  </Card>

  <Card title="使用洞察" icon="gauge-high" href="/zh/ai-sre/insight">
    基于会话数据生成团队的故障处理与运营洞察。
  </Card>

  <Card title="管理知识" icon="book" href="/zh/ai-sre/knowledge">
    为会话提供领域知识，按团队加载与跨团队按需挂载。
  </Card>

  <Card title="Skill" icon="wrench" href="/zh/ai-sre/skills">
    用斜杠命令调用的可复用 Skill。
  </Card>

  <Card title="MCP（外部工具）" icon="plug" href="/zh/ai-sre/mcp">
    通过 MCP 连接外部系统，扩展 Agent 的工具能力。
  </Card>

  <Card title="IM 平台" icon="comment-dots" href="/zh/ai-sre/im">
    在 Slack / 飞书 / 钉钉 / 企业微信里 @ Agent 排障，作战室自动诊断。
  </Card>
</CardGroup>
