diff --git a/.agents/skills/github-issue/SKILL.md b/.agents/skills/github-issue/SKILL.md index 15a68ebd3..c6ecc2de5 100644 --- a/.agents/skills/github-issue/SKILL.md +++ b/.agents/skills/github-issue/SKILL.md @@ -5,8 +5,9 @@ description: 整理与提交 GitHub Issue(问题反馈 / 功能建议)。用 # 整理与提交 Issue -本仓库流程见 [贡献与审查](../../../CONTRIBUTING.md),问题反馈使用当前的 -[YAML Issue Form](../../../.github/ISSUE_TEMPLATE/bug_report.yml)。从表单读取字段与必填项,不在技能中复制一份字段清单。 +本仓库流程见 [贡献与审查](../../../CONTRIBUTING.md),按场景选择当前的 +[接口问题反馈](../../../.github/ISSUE_TEMPLATE/api-bug-report.yml)、[常规问题反馈](../../../.github/ISSUE_TEMPLATE/general-bug-report.yml) +或 [功能建议](../../../.github/ISSUE_TEMPLATE/feature-request.yml) 表单。从表单读取字段与必填项,不在技能中复制一份字段清单。 用户指定其他仓库时,使用该仓库当前的贡献规则与 Issue 模板,不能把这里的表单套过去。 ## 确定目标和动作 @@ -21,7 +22,7 @@ description: 整理与提交 GitHub Issue(问题反馈 / 功能建议)。用 ## 证据与去重 1. 读取目标仓库实际 Issue 模板和配置,区分缺陷、功能建议与协作规则提案。 - 本仓库后两类允许普通 Issue;其他仓库按其配置选择入口。 + 本仓库功能建议有独立表单,协作规则提案允许普通 Issue;其他仓库按其配置选择入口。 2. 先搜索 open 和 closed Issues,结合关键词、错误信息与触发条件检查重复,而不只比较标题。 同时核对相关 PR 与发布记录,关联已有修复及其发布版本;仅主分支已修复时明确尚未发布。 同一问题已有记录且没有新增证据时返回已有链接;用户仍明确要求新建时按其要求处理。 diff --git a/.github/ISSUE_TEMPLATE/api-bug-report.yml b/.github/ISSUE_TEMPLATE/api-bug-report.yml new file mode 100644 index 000000000..19c73c5a1 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/api-bug-report.yml @@ -0,0 +1,174 @@ +name: 接口问题反馈 +description: 客户端调用模型、搜索等 API 时的报错、断流、超时或响应异常 +body: + - type: markdown + attributes: + value: | + 管理端页面、账号导入或服务部署的问题请选择“常规问题反馈”;新增能力请选择“功能建议”。 + 请提供最小复现信息。请求、日志和截图发布前请移除密钥、令牌、Cookie、代理认证及私人内容。 + + - type: textarea + id: description + attributes: + label: 问题描述 + description: 说明发生了什么、实际结果以及出现的频率;已有正常账号、模型或客户端的对照结果也可说明。 + validations: + required: true + + - type: input + id: version + attributes: + label: 服务版本 + description: 填写实际运行的完整版本号,不要只写“最新”或 latest;源码运行填写提交号。 + placeholder: 完整版本号或提交号 + validations: + required: true + + - type: dropdown + id: deployment + attributes: + label: 部署方式 + options: + - Docker Compose + - 其他容器部署 + - 二进制运行 + - 源码运行 + - 其他方式(请在环境信息中说明) + validations: + required: true + + - type: textarea + id: environment + attributes: + label: 环境信息 + description: 填写服务端与客户端的操作系统及版本;性能或超时问题可补充 CPU、内存和容器资源限制。 + placeholder: | + 服务端操作系统与版本: + 客户端操作系统与版本: + 相关资源限制(如有): + validations: + required: true + + - type: input + id: client-name + attributes: + label: 客户端名称 + description: 区分 CLI、桌面端、编辑器扩展、SDK 或自编脚本。 + placeholder: 例如 Codex CLI、Codex Desktop 或某个编辑器扩展 + validations: + required: true + + - type: input + id: client-version + attributes: + label: 客户端版本 + description: 填写完整版本号;Codex CLI 可填写 codex --version 的输出。无法取得时说明原因。 + placeholder: 完整版本号或相关 SDK 版本 + validations: + required: true + + - type: input + id: client-source + attributes: + label: 客户端安装来源与启动方式 + description: 说明安装来源,以及是否通过包装脚本、启动器或第三方修改版运行;不确定时填写已知部分。 + placeholder: 例如通过 npm 安装 @openai/codex,直接执行 codex + validations: + required: true + + - type: input + id: endpoint + attributes: + label: 请求方法与端点 + description: 填写发生异常的请求方法与路径,无需真实域名;不清楚端点时说明客户端当时执行的具体操作。 + placeholder: 例如 POST /v1/responses、POST /v1/alpha/search 或 WebSocket /v1/responses + validations: + required: true + + - type: dropdown + id: intermediary + attributes: + label: 是否经过中转或反向代理 + description: | + 指客户端到本服务之间的链路。API 中转包括 New API、One API、CCH 等;反向代理或 CDN 包括 Nginx、Caddy、Cloudflare Tunnel 等。 + 如有中转,请在下方填写链路详情;本服务到上游的出站代理请在补充信息中说明。 + options: + - 否,直接连接本服务 + - 是,仅经过 API 中转服务 + - 是,仅经过反向代理或 CDN + - 是,同时经过 API 中转和反向代理或 CDN + - 不确定 + validations: + required: true + + - type: textarea + id: request-chain + attributes: + label: 请求链路 + description: | + 按调用顺序填写中间服务的名称与版本,例如:Codex → New API → Nginx → 本服务。不确定时填写已知部分。 + 如果已测试过直连本服务,请说明是否仍能复现;未测试可注明,不要求先完成对照测试。 + placeholder: | + 调用顺序与各中间服务版本: + 是否启用请求参数或请求头改写(如已知): + 直连本服务的对照结果(如已测试): + + - type: textarea + id: account-model + attributes: + label: 平台、账号类型与模型 + description: 填写与失败请求相关的信息,不要提供账号凭据;不涉及模型或无法确认的信息请注明。 + placeholder: | + 平台与认证类型: + 账号套餐(如相关): + 请求模型与映射后的上游模型(如已知): + + - type: textarea + id: reproduction + attributes: + label: 复现步骤 + description: 描述触发问题的操作;无法稳定复现时,说明已知触发条件。 + placeholder: | + 1. 使用什么配置或输入 + 2. 执行什么操作 + 3. 出现什么结果 + validations: + required: true + + - type: textarea + id: expected-behavior + attributes: + label: 预期行为 + description: 说明原本期望得到的结果。 + validations: + required: true + + - type: textarea + id: request-response + attributes: + label: 请求、响应与诊断附件 + description: | + 提供脱敏后的最小请求、网关实际状态/响应片段和客户端显示,区分上游、中转、网关与客户端的错误来源。 + 可在此直接上传管理端默认诊断包并检查其缺失说明;原始错误与日志片段需另行审阅脱敏,粘贴时请使用 Markdown 代码块。 + 按部署文档的“请求错误排查”检查关联 ID、错误详情与 application 日志,不默认开启完整 dump;无法取得的信息请注明。 + placeholder: | + 发生时间与时区: + 传输(HTTP JSON / SSE / WebSocket): + 脱敏后的最小请求: + 网关关联 ID(x-gateway-request-id;配置的入口头请单独注明): + 上游关联 ID(x-request-id / x-oai-request-id,注明来源): + 网关实际状态、Content-Type 与响应片段: + 中转服务的状态与错误(如有): + 客户端显示的错误: + 诊断包或无法取得的信息: + + - type: textarea + id: additional-context + attributes: + label: 补充信息 + description: 最近有升级时填写升级前后版本及前后端是否同步更新;网络问题补充出站代理、系统代理、TUN 和自定义证书等相关环境。 + placeholder: | + 服务或客户端升级前版本 → 当前版本(如有): + 服务前后端是否同步更新(如有升级): + 最近的配置变更: + 其他相关环境: diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml deleted file mode 100644 index 2158aa77e..000000000 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ /dev/null @@ -1,120 +0,0 @@ -name: 问题反馈 -description: 提交可复现的问题,帮助定位和修复 -body: - - type: markdown - attributes: - value: | - 请提供最小复现信息。请求、日志和截图发布前请移除密钥、令牌、Cookie、代理认证及私人内容。 - - - type: dropdown - id: issue-type - attributes: - label: 问题类型 - options: - - 接口请求或响应异常 - - 页面或交互异常 - - 配置或部署异常 - - 其他问题 - validations: - required: true - - - type: textarea - id: description - attributes: - label: 问题描述 - description: 说明发生了什么、实际结果以及出现的频率。 - validations: - required: true - - - type: input - id: version - attributes: - label: 服务版本 - description: 填写具体版本号;从源码运行时填写提交号。 - placeholder: 版本号或提交号 - validations: - required: true - - - type: dropdown - id: deployment - attributes: - label: 部署方式 - options: - - Docker Compose - - 其他容器部署 - - 二进制运行 - - 源码运行 - - 其他方式(请在环境信息中说明) - validations: - required: true - - - type: textarea - id: environment - attributes: - label: 环境信息 - description: 填写操作系统与版本;页面问题同时填写浏览器与版本。 - placeholder: | - 操作系统与版本: - 浏览器与版本(页面问题): - validations: - required: true - - - type: textarea - id: account-client - attributes: - label: 账号与客户端 - description: 接口问题请填写平台、认证类型、模型和客户端信息,不要提供账号凭据。 - placeholder: | - 平台与认证类型: - 模型名称: - 客户端名称与版本: - - - type: textarea - id: reproduction - attributes: - label: 复现步骤 - description: 描述触发问题的操作;无法稳定复现时,说明已知触发条件。 - placeholder: | - 1. 使用什么配置或输入 - 2. 执行什么操作 - 3. 出现什么结果 - validations: - required: true - - - type: textarea - id: expected-behavior - attributes: - label: 预期行为 - description: 说明原本期望得到的结果。 - validations: - required: true - - - type: textarea - id: request-response - attributes: - label: 请求与响应 - description: | - 接口问题请提供脱敏后的最小请求、网关实际状态/响应片段和客户端终端显示,区分两者。 - 优先附管理端默认诊断包并检查其缺失说明;原始错误与日志片段需另行审阅脱敏。 - 先按部署文档的“请求错误排查”检查关联 ID、错误详情与 application 日志,不默认开启完整 dump。 - placeholder: | - 发生时间与时区: - 传输(HTTP JSON / SSE / WebSocket): - 网关关联 ID(x-gateway-request-id / 配置的入口头): - 上游关联 ID(x-request-id / x-oai-request-id,注明来源): - 网关实际状态与响应片段: - 客户端终端显示: - 诊断包或无法取得的信息: - render: text - - - type: textarea - id: screenshots - attributes: - label: 截图或录屏 - description: 页面或交互问题可在此拖入相关截图、录屏,并说明对应的操作。 - - - type: textarea - id: additional-context - attributes: - label: 补充信息 - description: 最近的升级或配置变更;网络问题补充系统代理、TUN 和自定义证书等相关环境。 diff --git a/.github/ISSUE_TEMPLATE/feature-request.yml b/.github/ISSUE_TEMPLATE/feature-request.yml new file mode 100644 index 000000000..716b9d2bc --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature-request.yml @@ -0,0 +1,39 @@ +name: 功能建议 +description: 说明使用场景、当前不便和期望行为,提出新能力或体验改进 +body: + - type: markdown + attributes: + value: | + 如果已有功能无法正常使用,请选择对应的故障模板。提交前可搜索已有 Issues,相关讨论请附链接。 + 每个 Issue 尽量围绕一个使用场景;截图和示例请移除密钥、令牌、Cookie、代理认证及私人内容。 + + - type: textarea + id: use-case + attributes: + label: 使用场景与当前不便 + description: 说明你希望完成什么任务、目前如何操作,以及现有能力有什么不足。 + placeholder: | + 希望完成的任务: + 当前做法与不便: + validations: + required: true + + - type: textarea + id: expected-behavior + attributes: + label: 期望行为 + description: 描述改进后希望如何使用,最好给出一个具体例子;不要求先设计技术方案。 + validations: + required: true + + - type: textarea + id: alternatives + attributes: + label: 已尝试的替代方案 + description: 如果已有配置、操作方式或其他工具能部分满足需求,说明仍缺少什么;未尝试可留空。 + + - type: textarea + id: additional-context + attributes: + label: 补充信息 + description: 可附当前使用的具体版本、相关 Issue、截图或参考链接;引用其他项目时说明希望借鉴的具体行为。 diff --git a/.github/ISSUE_TEMPLATE/general-bug-report.yml b/.github/ISSUE_TEMPLATE/general-bug-report.yml new file mode 100644 index 000000000..40afd8810 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/general-bug-report.yml @@ -0,0 +1,143 @@ +name: 常规问题反馈 +description: 管理端页面、账号导入、安装部署、升级或其他非客户端 API 问题 +body: + - type: markdown + attributes: + value: | + 客户端调用模型、搜索等 API 的问题请选择“接口问题反馈”;新增能力或体验改进请选择“功能建议”。 + 请提供最小复现信息。请求、日志和截图发布前请移除密钥、令牌、Cookie、代理认证及私人内容。 + + - type: dropdown + id: issue-type + attributes: + label: 问题类型 + options: + - 页面或交互异常 + - 配置或部署异常 + - 升级异常 + - 其他问题 + validations: + required: true + + - type: textarea + id: description + attributes: + label: 问题描述 + description: 说明发生了什么、实际结果以及出现的频率。 + validations: + required: true + + - type: input + id: version + attributes: + label: 服务版本 + description: 填写实际运行的完整版本号,不要只写“最新”或 latest;源码运行填写提交号。服务无法启动时填写准备运行的版本。 + placeholder: 完整版本号或提交号 + validations: + required: true + + - type: dropdown + id: deployment + attributes: + label: 部署方式 + options: + - Docker Compose + - 其他容器部署 + - 二进制运行 + - 源码运行 + - 其他方式(请在环境信息中说明) + validations: + required: true + + - type: textarea + id: environment + attributes: + label: 环境信息 + description: 填写操作系统与版本,并补充与问题相关的浏览器、访问方式或资源信息。 + placeholder: | + 操作系统与版本: + 浏览器与版本(页面问题): + 页面访问方式(HTTP / HTTPS,localhost / IP / 域名,无需真实地址): + CPU 核数与内存、容器资源限制(部署或性能问题): + Docker / Compose 版本(容器部署问题): + validations: + required: true + + - type: dropdown + id: intermediary + attributes: + label: 是否经过中转或反向代理 + description: | + 指客户端或浏览器到本服务之间的链路。API 中转包括 New API、One API、CCH 等;反向代理或 CDN 包括 Nginx、Caddy、Cloudflare Tunnel 等。 + 如有中转,请在下方填写链路详情;本服务到上游的出站代理请在补充信息中说明。 + options: + - 否,直接连接本服务 + - 是,仅经过 API 中转服务 + - 是,仅经过反向代理或 CDN + - 是,同时经过 API 中转和反向代理或 CDN + - 不确定 + - 不适用(例如服务尚未启动) + validations: + required: true + + - type: textarea + id: request-chain + attributes: + label: 请求链路 + description: | + 按调用顺序填写中间服务的名称与版本,例如:浏览器 → Cloudflare → Nginx → 本服务。不确定时填写已知部分。 + 如果已测试过直连本服务,请说明是否仍能复现;未测试可注明,不要求先完成对照测试。 + placeholder: | + 调用顺序与各中间服务版本: + 是否启用请求参数或请求头改写(如已知): + 直连本服务的对照结果(如已测试): + + - type: textarea + id: reproduction + attributes: + label: 复现步骤 + description: 描述触发问题的操作;批量操作补充数量,升级问题说明升级方式。无法稳定复现时,说明已知触发条件。 + placeholder: | + 1. 使用什么配置或输入 + 2. 执行什么操作 + 3. 出现什么结果 + validations: + required: true + + - type: textarea + id: expected-behavior + attributes: + label: 预期行为 + description: 说明原本期望得到的结果。 + validations: + required: true + + - type: textarea + id: logs + attributes: + label: 错误信息与日志 + description: | + 提供脱敏后的页面提示、浏览器控制台错误或相关启动、升级日志;如有失败请求,补充状态码与响应片段。 + 可以在此上传诊断包或日志附件;粘贴日志时请使用 Markdown 代码块。不要上传完整配置或请求转储。 + placeholder: | + 发生时间与时区: + 页面提示或终端错误: + 浏览器控制台 / 服务日志: + 失败请求的状态码与响应片段(如有): + + - type: textarea + id: screenshots + attributes: + label: 截图或录屏 + description: 页面或交互问题可在此拖入相关截图、录屏,并说明对应的操作。 + + - type: textarea + id: additional-context + attributes: + label: 补充信息 + description: 最近有升级时填写升级前后版本及前后端是否同步更新;网络问题补充出站代理、系统代理、TUN 和自定义证书等相关环境。 + placeholder: | + 升级前版本 → 当前版本(如有): + 前后端是否同步更新(如有升级): + 最近的配置变更: + 其他相关环境: diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 0620967ef..317cdd855 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -6,9 +6,9 @@ ## 提交 Issue -问题反馈使用仓库的 [Issue 表单](.github/ISSUE_TEMPLATE/bug_report.yml),填写问题类型、描述、版本与环境、复现步骤和预期结果。接口问题补充平台与认证类型、模型、客户端,以及脱敏后的请求、响应和请求 ID;页面问题附相关截图或录屏。 +按场景选择 [接口问题反馈](.github/ISSUE_TEMPLATE/api-bug-report.yml)、[常规问题反馈](.github/ISSUE_TEMPLATE/general-bug-report.yml) 或 [功能建议](.github/ISSUE_TEMPLATE/feature-request.yml) 表单,按对应提示提供信息。故障反馈填写实际运行版本和中转链路;接口问题区分客户端显示与网关实际响应,页面问题附相关截图或录屏。 -日志和配置只提供定位所需片段,不上传真实凭据或完整请求转储。功能建议与协作规则调整可直接提交 Issue,说明场景、原因和建议方案。 +日志和配置只提供定位所需片段,不上传真实凭据或完整请求转储。功能建议说明使用场景、当前不便和期望行为;协作规则调整可直接提交普通 Issue,说明原因和建议方案。 ## 问题与方案依据 diff --git a/deploy/README.md b/deploy/README.md index 341596974..55937ba3a 100644 --- a/deploy/README.md +++ b/deploy/README.md @@ -314,7 +314,7 @@ OpenAI 主动额度重置卡及其消费结果由上游持有,不写入 Postgr 按配置的保留窗口及组织的数据处理要求管理已生成文件。不要为普通请求排查开启 OAuth 恢复记录, 也不要直接上传整个日志目录或完整转储。 -反馈入口见 [Issue 表单](../.github/ISSUE_TEMPLATE/bug_report.yml);错误诊断与查询合同见 +请求问题反馈使用 [接口问题反馈表单](../.github/ISSUE_TEMPLATE/api-bug-report.yml);错误诊断与查询合同见 [API 文档](../docs/api.md#10-dashboard用量与错误)。 ## 密码语义