feat: GitHub App manifest 扩到主机最大权限

仓库权限除 metadata 外全部拉到最高档(contents/pull_requests/
issues/actions/checks/workflows/administration 等全部 write,
members 只读),事件补齐 push/check_run/workflow_run 等;
旧权限 contents/pull_requests write + issues read 不再是上限。
风险明示:administration=write 含删库/转移,secrets=write
含管理 secret,配 All repositories 时影响面为全账号仓库。
注意:改代码只改以后新建 App 的 manifest,线上 App
(id 5476837) 仍需在 GitHub 设置里改权限并接受新权限。
This commit is contained in:
host committed 2026-10-30 02:53:46 +08:00
1 parent 4bbe6a99e3
commit 668c000394
2 files changed
+64 -5

No files matched your search

+56 -4
View File
@@ -45,14 +45,66 @@ SETUP_STATE_TTL_SECONDS = 3600
DEFAULT_APP_NAME = "codex-app-server"
DEFAULT_APP_URL = "https://github.com/openqj/codex-app-server"
# App 权限与事件:与当前 PAT 能力对齐(读仓库、推分支、建 PR、
# 读 issue),不多要;webhook 只订阅 /fix-review 与 PR 相关事件。
# App 权限与事件:主机最大权限(用户 2026-10-27 明确要求扩到
# 最高、所有能力)。这是 manifest 的默认值,只影响以后新建的
# App;已存在的线上 App(id 5476837)不会因改代码自动变权限,
# 必须在 GitHub App 设置里改权限并由安装方接受新权限后才生效。
# 风险明示:administration=write 含改仓库设置/删库/转移,
# secrets=write 含管理仓库 secret,配 All repositories 安装会把
# 影响面扩到该账号全部仓库——只装在自己信任的账号上。
# organization/enterprise/billing 类权限不在此列:它们不属于
# 主机跑任务的能力,且需组织/企业管理员另行审批,不应由一个
# 代码托管 App 默认索取。
APP_PERMISSIONS = {
# 仓库:除 metadata(GitHub 自动只读)外全部拉到最高档。
"actions": "write",
"actions_variables": "write",
"administration": "write",
"artifact_metadata": "write",
"attestations": "write",
"checks": "write",
"codespaces": "write",
"codespaces_metadata": "read",
"codespaces_secrets": "write",
"contents": "write",
"dependabot_secrets": "write",
"deployments": "write",
"discussions": "write",
"environments": "write",
"issues": "write",
"merge_queues": "write",
"packages": "write",
"pages": "write",
"pull_requests": "write",
"issues": "read",
"repository_advisories": "write",
"repository_custom_properties": "write",
"repository_hooks": "write",
"secret_scanning_alerts": "write",
"secrets": "write",
"security_events": "write",
"statuses": "write",
"vulnerability_alerts": "write",
"workflows": "write",
# 组织:只读成员,用于列协作者;不索取组织管理权。
"members": "read",
}
APP_EVENTS = ["issue_comment", "pull_request"]
APP_EVENTS = [
"push",
"create",
"delete",
"pull_request",
"pull_request_review",
"pull_request_review_comment",
"issue_comment",
"issues",
"check_run",
"check_suite",
"workflow_run",
"release",
"deployment",
"deployment_status",
"discussion",
]
class AppError(Exception):