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

# Apps

> Apps 是 AI SRE 中管理「已授权的外部应用」的地方，每个应用以一张卡片呈现，目前为 GitHub（未来可扩展到 GitLab 等）。授权后，AI SRE 能在会话里直接进入你的代码仓库：读代码、调查变更 / 提交 / PR、追溯 PR，并在你需要时改缺陷、开 PR、提 issue。它主要让云端沙箱也能安全地访问你的仓库。

<Info>
  **内测功能**：AI SRE 目前处于内测阶段，专业版及以上用户可申请免费试用。请通过 [AI SRE 内测申请表](https://c9xudyniiq.feishu.cn/share/base/form/shrcn0ngCfdoygiaHnAT80BfZiH) 提交申请，审核通过后将开通白名单；内测期间功能与界面可能调整。
</Info>

## 概述

***

**Apps** 是管理「已授权的外部应用」的地方。每个外部应用以一张**应用卡片**呈现——你在它的卡片上完成授权、管理安装、并随时启停或撤销。

目前 Apps 下只有 **GitHub** 一个应用（未来可能扩展到 GitLab 等更多代码托管平台）。授权 GitHub 之后，AI SRE 就能在会话里**直接进入你的代码仓库工作**：读懂并探索代码、调查最近的变更 / 提交 / PR、从一张变更工单追溯到对应 PR、回答关于代码库的问题，并在你需要时改一处缺陷、开一个 PR 或提一个 issue——全程用原生 `gh` / `git`，就像一名工程师在终端里干活。

## 主要场景：让云端沙箱访问你的仓库

***

AI SRE 的会话默认运行在 **Flashduty 云端沙箱**里。沙箱是干净、隔离的临时环境，**不带你的任何 git 登录凭证**——这正是 App 要解决的问题。授权 GitHub App 后，沙箱里的 Agent 才能 clone 你的仓库、读 diff、开 PR，而**你无需向它交出任何密码或 token**；它的访问被限制在你授权的那些仓库，且仅为完成任务所需的最小权限。**这是 GitHub App 的主要用途。**

<Note>
  **BYOC（自托管 Runner）一般用不到它。** Runner 跑在你自己的机器上，那台机器通常**已经配好了 `gh` / `git` 凭证**（你平时就在上面操作仓库）。这种情况下 Agent 直接用宿主机自带的 `gh` 即可，**不需要再授权 GitHub App**。（若宿主机恰好没配 `gh`，授权 App 同样能让 BYOC 会话用上。）运行环境的差异见 [运行环境（BYOC）](/zh/ai-sre/environments)。
</Note>

## 位置

***

进入 **插件 → Apps**。Apps 是插件区的**第一个、也是默认**标签页——打开插件区即落在这里。

<Note>
  查看 Apps 标签页需要相应权限；没有权限时该标签页不可见。授权、撤销、启用 / 禁用各自还需对应的操作权限——无权限时对应按钮以禁用态显示。
</Note>

## GitHub 应用

***

下面以当前唯一的应用 **GitHub** 为例，介绍授权、安装管理与仓库授权的调整。

### 连接 GitHub 组织

在 GitHub 卡片上发起授权，整个安装在一个弹窗里、通过 GitHub 官方的安装页完成，回调后列表自动刷新。

<Steps>
  <Step title="发起授权">
    在 GitHub 卡片上点击 **去授权**（如果该 App 已有安装，按钮显示为 **关联新的组织**）。前端随即打开一个弹窗，加载 GitHub 官方的安装页。
  </Step>

  <Step title="在 GitHub 上选择组织与仓库">
    选择要安装到的**组织**（或个人账户），并授予仓库范围——**所有仓库（All repositories）**或**仅选定仓库（Only select repositories）**。授予的仓库集合决定了 AI SRE 之后能访问哪些仓库。
  </Step>

  <Step title="确认后自动刷新">
    你在 GitHub 上确认后，弹窗自动关闭，Apps 页提示 **授权成功** 并刷新安装列表，新组织随即出现。
  </Step>
</Steps>

<Note>
  若你不是该组织的所有者，GitHub 会把请求转交给组织所有者走「请求安装」的审批流程；审批通过后该安装才会激活。安装到哪个组织、授予哪些仓库，完全由 GitHub 侧的安装页决定，Flashduty 不在中间代为选择。
</Note>

### 安装管理

每授权一个组织，就在 GitHub 卡片下多出一行安装记录。每行展示：

| 元素  | 说明                                   |
| --- | ------------------------------------ |
| 组织名 | 安装所在的 GitHub 组织 / 账户登录名              |
| 状态点 | 一个彩色小圆点 + 文案：**已连接**、**已暂停**、**已撤销** |
| 仓库数 | 该安装当前授予的仓库数量                         |

<AccordionGroup>
  <Accordion title="启用 / 禁用（暂停 / 恢复）" icon="toggle-on">
    卡片右上角的开关在「启用」与「禁用」之间切换。**禁用 = 暂停**：暂停后 Agent 无法再访问这些仓库，但 **GitHub 上的安装本身保留**，可随时一键重新启用、无需再走一遍 GitHub 授权。一个 App 只要还有至少一个**已连接**的安装，就视为「已启用」。
  </Accordion>

  <Accordion title="撤销" icon="trash">
    在某一行点击 **撤销**，确认后该安装置为 **已撤销**，AI SRE 从此不再能访问该组织的仓库。撤销后该安装从卡片上隐去，重新授权同一组织即可恢复。
  </Accordion>
</AccordionGroup>

<Note>
  **暂停**与**撤销**的区别：暂停是临时关掉、保留 GitHub 安装、可一键恢复；撤销是断开这次授权、需要重新走 GitHub 授权才能再用。
</Note>

### 新增或调整仓库授权

某个组织已经连接好了，但你想让 AI SRE 访问该组织里更多的仓库——不必撤销重连。在 **插件 → Apps** 里，对该组织再次点击 **去授权 / 关联新的组织**（或直接打开该 App 在 GitHub 上的 **Configure** 页），GitHub 会展示 **Repository access** 选择界面；勾选你要新增的仓库并保存，AI SRE 会**自动重新同步**已授予的仓库列表，新仓库无需重建连接就能用。

<Note>
  **兜底**：如果新加的仓库在会话里仍报「无法访问 / 404 / 403」，到 GitHub 上打开该 App 的页面（如 `github.com/apps/flashduty`）→ **Configure** → 选中对应组织 → 拉到底部的 **Danger zone** → **Uninstall** 卸载该安装。然后回到 Flashduty 的 **插件 → Apps** 重新授权该组织，并在这一次里一并勾选你需要的**全部**仓库。
</Note>

## AI SRE 如何在仓库里工作

***

授权之后你无需任何额外配置。当你在会话里让 AI SRE 处理某个仓库的任务时，它会像一名加入项目的工程师那样工作——先理解，再动手，最后验证。这套行为由内置的 `github` Skill 约束。

**典型动作**

* **进入仓库**：把仓库 clone 进自己的工作区，并优先阅读仓库自带的约定（`CLAUDE.md`、`AGENTS.md`、`README`、`CONTRIBUTING`）。
* **调查变更 / PR**：用 `git log`、`gh pr list`、`gh pr view`、`gh pr diff`、`gh search prs` 追溯故障 / 变更工单里提到的 PR、看某次发布包含了什么、在决策前读懂一段 diff。
* **改动并提交**：新建分支、用最小的 diff 改动、`gh pr create` 开一个可评审的 PR，或 `gh issue create` 提一个 issue，并把 PR / issue 链接回报给你。

**硬性护栏**——这些规则 Agent 绝不逾越：

* **绝不强推**（`git push --force`），**绝不直接推默认分支**——一律走「分支 + PR」。
* **一个 PR 只装一处逻辑变更**，保持可评审；改动一旦膨胀超出聚焦的 diff，就停下把分析交回给你。
* 绝不删分支、关闭他人的 issue / PR，或改动仓库设置；绝不提交密钥、凭证或构建产物。

<Note>
  如果在云会话里 Agent 报告无法访问仓库，通常是账户尚未授权 GitHub App、或没授予目标仓库——到 **插件 → Apps** 授权并授予对应仓库即可。Agent **不会**向你索要任何令牌。
</Note>

## 权限与范围

***

GitHub App 的**授权**与**撤销**是**账户级**操作。**账户是唯一的安全边界**，团队在这里只是归属 / 审计标记：账户内任何具备相应权限的成员都可以授权新组织、撤销任意安装、或启停整个 App；会话在用到某仓库时，也从账户内**任意一个已连接的安装**取得访问凭证。账户内的成员共享同一套授权——这与 AI SRE 其它资源「使用 = 账户级、归属 = 团队标记」的模型一致。

## 相关页面

***

<CardGroup cols={2}>
  <Card title="MCP（外部工具）" icon="plug" href="/zh/ai-sre/mcp">
    通过 Model Context Protocol 接入外部工具与数据源。
  </Card>

  <Card title="控制台" icon="comments" href="/zh/ai-sre/sessions">
    在会话中观察 Agent 如何 clone 仓库、读 diff、开 PR。
  </Card>

  <Card title="运行环境（BYOC）" icon="server" href="/zh/ai-sre/environments">
    BYOC 会话用 Runner 宿主机自带的 gh，一般不需要 GitHub App。
  </Card>

  <Card title="Skill" icon="wrench" href="/zh/ai-sre/skills">
    内置的 github Skill 约束 Agent 在仓库里的工作方式。
  </Card>
</CardGroup>
