Skip to content

feat: add bilingual (zh/en) language support#74

Closed
Svtter wants to merge 11 commits into
mainfrom
bilingual-support
Closed

feat: add bilingual (zh/en) language support#74
Svtter wants to merge 11 commits into
mainfrom
bilingual-support

Conversation

@Svtter

@Svtter Svtter commented May 14, 2026

Copy link
Copy Markdown
Collaborator

Summary

  • All actions 新增 language 输入参数(默认 zh),支持 zh(中文)和 en(英文)
  • language: en 时,Python 脚本自动在 prompt 末尾追加英文回复指令
  • 所有 prompt 的判定关键词已更新为双语格式(如 无需审计 / SKIP可合并 / CAN MERGE
  • README.md 新增完整中文文档部分,与英文文档并列

使用方式

直接设置:

- name: Run OpenCode review (English)
  uses: Svtter/opencode-actions/review@v2
  with:
    github-token: ${{ secrets.GITHUB_TOKEN }}
    language: en

从仓库变量读取:

language: ${{ vars.OPENCODE_LANGUAGE }}

改动文件

  • github-run-opencode/run-github-opencode.py — 读取 GITHUB_RUN_OPENCODE_LANGUAGE 环境变量,追加语言指令
  • github-run-opencode/action.yml — 新增 language 输入
  • review/action.yml — 新增 language 输入,prompt 增加双语判定关键词
  • feature-missing/action.yml — 同上
  • spec-coverage/action.yml — 同上
  • README.md — 新增中文文档部分

Test plan

  • 设置 language: zh(或不设置),验证 agent 以中文回复
  • 设置 language: en,验证 agent 以英文回复,使用英文判定关键词
  • 通过 vars.OPENCODE_LANGUAGE 配置语言,验证能正确读取

🤖 Generated with Claude Code

@Svtter Svtter force-pushed the bilingual-support branch from 3bb965f to fdda36d Compare May 14, 2026 14:48
@github-actions

Copy link
Copy Markdown

无遗漏

PR 的 4 项需求均已完整实现:

  1. All actions 新增 language 输入 — 4 个 action.yml 均定义了 language 输入(默认 zh),并传递为 GITHUB_RUN_OPENCODE_LANGUAGE 环境变量
  2. Python 脚本追加英文指令run-github-opencode.py:202-211 读取环境变量,当值为 en 时在 PROMPT 末尾追加英文回复指令
  3. 双语判定关键词 — 3 个 wrapper action 的 prompt 均已更新为双语格式(如 可合并 / CAN MERGE无遗漏 / NO GAPS无需审计 / SKIP 等)
  4. README 中文文档 — 新增完整 # 中文文档 章节,包含语言配置说明和用法示例

所有文件变更与 PR 自述范围一致,无遗漏项。

New%20session%20-%202026-05-14T14%3A48%3A51.830Z
opencode session  |  github run

@github-actions

Copy link
Copy Markdown

经过对全部 6 个变更文件的全面审查,结论如下:

可合并

本 PR 设计清晰,功能完整地实现了所有 action 的中英文双语支持。结构合理:YAML 层新增 language 入参 → Python 层读取环境变量并追加语言指令 → prompt 模板使用双语判定关键词,联动正确。

阻塞项:无

建议项:

  1. review/action.yml:91feature-missing/action.yml:95spec-coverage/action.yml:106 — prompt 模板中硬编码了 Please respond in Chinese.,当 language: en 时,Python 虽追加了英文覆盖指令,但 prompt 内部仍存在冲突的中英文要求。建议将语言指令从模板中移除,完全交由 run-github-opencode.py 统一控制;或在英文模式下动态替换该句。
  2. run-github-opencode.py:206 — 语言覆盖直接修改 os.environ["PROMPT"],与周围使用 set_env() 的风格不一致。虽然功能等价,建议统一调用方式以降低维护成本。
  3. run-github-opencode.py:202-203 — 对 language 的值只校验了 "en",其他值(如 "fr""ja")静默回退到中文。建议在非 zh/en 时输出一条 warning 日志,帮助用户及时发现配置错误。
  4. README.md — 中文文档中的 YAML 示例均使用 uses: Svtter/opencode-actions/review@v2,但该 PR 新增的 language 输入实际指向的是这个 PR 合入后的版本。建议统一使用 @v2 或等到发版时确认路径,确保文档与 tag 版本一致。

New%20session%20-%202026-05-14T14%3A48%3A51.863Z
opencode session  |  github run

@github-actions

Copy link
Copy Markdown

发现遗漏

摘要

PR 的 4 项需求基本实现,但存在 1 个严重的设计问题。

CRITICAL

Python 语言覆盖机制在 English 模式下与 prompt 模板内的硬编码中文指令冲突

  • 缺失内容review/action.yml:91feature-missing/action.yml:95spec-coverage/action.yml:106 的 prompt 模板中均硬编码了 Please respond in Chinese.。当 language: en 时,Python 脚本(run-github-opencode.py:206-211)虽在 prompt 末尾追加了英文回复指令,但 prompt 中部仍保留着要求中文回复的句子。虽然"末尾覆盖"在实践中可能有效,但这并非可靠机制——部分模型可能优先遵循 prompt 中部的明确指令,导致英文模式下仍输出中文。

  • 涉及的 spec 要求:PR 第 2 项"当 language: en 时,Python 脚本自动在 prompt 末尾追加英文回复指令"。该实现方式存在冲突,不是可靠的覆盖机制。当模型在 prompt 中部看到 "Please respond in Chinese." 而末尾又看到 "Respond entirely in English" 时,行为取决于模型实现,不可保证一致。

  • 建议修复:应当将 prompt 模板中的 Please respond in Chinese. 替换为动态占位符,由 run-github-opencode.py 统一根据 language 值插入对应的语言指令(中文或英文),而非在已有中文指令后再追加英文覆盖。涉及文件:review/action.yml:91feature-missing/action.yml:95spec-coverage/action.yml:106run-github-opencode.py:201-211

New%20session%20-%202026-05-14T14%3A51%3A50.942Z
opencode session  |  github run

@github-actions

Copy link
Copy Markdown

可合并

本 PR 设计清晰,完整实现了所有 action 的中英文双语支持。YAML 层新增 language 入参 → Python 层读取环境变量追加语言指令 → prompt 模板使用双语判定关键词,联动正确,功能可用。

阻塞项:无

建议项:

  1. 三个 wrapper action prompt 中的 "Please respond in Chinese." 与 language: en 冲突review/action.yml:91feature-missing/action.yml:95spec-coverage/action.yml:106 均硬编码了中文回复指令。虽然 Python 脚本会追加英文覆盖指令(run-github-opencode.py:206-211),但 prompt 内仍存在相互矛盾的语言要求。建议将语言指令从模板中移除,统一由 Python 脚本控制
  2. run-github-opencode.py:206 直接修改 os.environ["PROMPT"] — 风格不统一。该文件其余地方均使用 set_env() 工具函数(第 20-22 行),建议保持一致
  3. 语言值未做输入校验run-github-opencode.py:202-203 只检查了 "en",其他非法值(如 "eng""cn")静默回退中文。建议对非 zh/en 的值打印一条 warning 日志,帮助用户发现配置错误
  4. feature-missing/action.yml:265 存在多余的转义符 \>\/dev/null 与其余 action 的 >/dev/null 写法不一致,虽不影响功能,建议统一

New%20session%20-%202026-05-14T14%3A51%3A51.222Z
opencode session  |  github run

@github-actions

Copy link
Copy Markdown

无遗漏

PR 的 4 项需求均已完整实现:

  1. All actions 新增 language 输入github-run-opencode/action.ymlreview/action.ymlfeature-missing/action.ymlspec-coverage/action.yml 均定义了 language 输入(默认 zh),并正确传递为 GITHUB_RUN_OPENCODE_LANGUAGE 环境变量。

  2. Python 脚本追加英文指令run-github-opencode.py:201-217 读取 GITHUB_RUN_OPENCODE_LANGUAGE,当值为 en 时在 PROMPT 末尾追加英文回复指令,其他值(含 zh)追加中文回复指令。

  3. 双语判定关键词 — 3 个 wrapper action 的 prompt 均已更新为双语格式:

    • review/action.yml:93-110可合并 / CAN MERGE有条件合并 / CONDITIONAL MERGE不可合并 / CANNOT MERGE阻塞项 / Blocking Issues建议项 / Suggestions
    • feature-missing/action.yml:99-101无遗漏 / NO GAPS发现遗漏 / GAPS FOUND
    • spec-coverage/action.yml:110-112无需审计 / SKIP全覆盖 / FULL COVERAGE发现遗漏 / GAPS FOUND
  4. README 中文文档README.md:272-452 新增完整 # 中文文档 章节,包含语言配置说明、用法示例、各 action 描述等,与英文文档并列。

New%20session%20-%202026-05-14T16%3A07%3A49.714Z
opencode session  |  github run

@github-actions

Copy link
Copy Markdown

有条件合并

总结

PR 实现了所有 action 的 language 输入参数和 Python 层的语言指令追加,双语判定关键词更新正确,README 中文文档完整。但 prompt 模板中的硬编码中文指令与英文覆盖指令存在冲突,是核心设计缺陷。

阻塞项

prompt 模板硬编码语言指令与 language: en 冲突

三个 wrapper action 的 prompt 模板中均硬编码了 Please respond in Chinese.review/action.yml:91feature-missing/action.yml:95spec-coverage/action.yml:106)。当 language: en 时,Python 虽在末尾追加英文回复指令(run-github-opencode.py:206-211),但 prompt 中段仍保留着要求中文回复的句子。不同模型对矛盾指令的处理行为不一致,英文模式下可能仍输出中文。

应移除模板中的语言指令,统一由 run-github-opencode.py 根据 language 值动态插入。

建议项

  1. run-github-opencode.py:206 直接修改 os.environ["PROMPT"],与文件其余地方使用 set_env() 的风格不一致,建议统一调用方式。

  2. run-github-opencode.py:202language 只校验了 "en",其他非法值(如 "eng""ja")静默回退到中文,建议对无效值输出 warning 日志帮助用户发现配置错误。

  3. feature-missing/action.yml:265 存在多余的转义符 \>\/dev/null),其余 action 均为 >/dev/null,建议统一写法。

New%20session%20-%202026-05-14T16%3A07%3A46.898Z
opencode session  |  github run

@github-actions

Copy link
Copy Markdown

可合并

PR 实现清晰:YAML 层定义 language 输入 → Python 层读取环境变量追加语言指令 → prompt 模板使用双语判定关键词,联动正确。各文件变更与 PR 描述一致。

阻塞项:无

建议项:

  1. 语言输入校验run-github-opencode.py:202 只检查 "en",其他值(如 "eng""ja")静默回退中文,建议对无效值输出 warning 日志
  2. set_env 风格不一致run-github-opencode.py:206 使用 set_env("PROMPT", ...),而 MODEL 赋值(191-196 行)直接用 os.environ["MODEL"] = ...,同一逻辑层建议统一调用风格
  3. README 中的 uses 路径 — 中文文档中的 YAML 示例使用 Svtter/opencode-actions/review@v2,确认该路径正确反映合入后的版本后再合并即可

New%20session%20-%202026-05-14T16%3A12%3A38.444Z
opencode session  |  github run

@github-actions

Copy link
Copy Markdown

无遗漏

PR 的 4 项需求均已完整实现:

  1. language 输入参数 — 4 个相关 action(github-run-opencodereviewfeature-missingspec-coverage)均在 action.yml 中新增了 language 输入(默认 zh),并通过 GITHUB_RUN_OPENCODE_LANGUAGE 环境变量传递给 Python 脚本

  2. Python 脚本语言指令追加run-github-opencode.py:201-217 读取环境变量,en 时追加英文回复指令,否则追加中文回复指令,且所有 4 个 action 均调用同一 Python 脚本,集成完整

  3. 双语判定关键词 — 3 个 wrapper action 的 prompt 模板均已更新:

    • review: 可合并 / CAN MERGE有条件合并 / CONDITIONAL MERGE不可合并 / CANNOT MERGE阻塞项 / Blocking Issues建议项 / Suggestions
    • feature-missing: 无遗漏 / NO GAPS发现遗漏 / GAPS FOUND
    • spec-coverage: 无需审计 / SKIP全覆盖 / FULL COVERAGE发现遗漏 / GAPS FOUND

    同时 prompt 中的硬编码 Please respond in Chinese. 已被移除,避免了语言指令冲突问题

  4. README 中文文档 — 新增完整章节(行 272-452),包含 action 介绍、语言配置说明和用法示例

setup-opencoderun-opencode 为底层工具 action,不涉及 prompt/language 概念,无需添加 language 输入,与 PR 设计范围一致。

New%20session%20-%202026-05-14T16%3A12%3A44.495Z
opencode session  |  github run

@github-actions

Copy link
Copy Markdown

可合并

本 PR 的 5 次提交已完整实现了双语支持:YAML 层定义 language 输入 → Python 层根据 GITHUB_RUN_OPENCODE_LANGUAGE 追加语言指令 → prompt 模板采用双语判定关键词。早期 review 中提出的所有问题(硬编码中文指令、set_env 风格、非法语言值警告、>/dev/null 多余转义)均已被后续 fix commit 修复。

阻塞项:无

建议项:

  1. MODEL 赋值风格不统一run-github-opencode.py:191-196 使用 os.environ["MODEL"] = ...,而同一函数内其他环境变量(包括 PR 新增的语言覆盖代码)均使用 set_env()。建议统一为 set_env 以降低维护认知负担。
  2. README 中的 uses 路径 — 英文和中文文档中 YAML 示例均使用 Svtter/opencode-actions/review@v2,而 npx skills add 命令行使用 sun-praise/opencode-actions,建议合并前确认目标仓库的 owner 并统一文档中的引用。

New%20session%20-%202026-05-14T16%3A18%3A30.156Z
opencode session  |  github run

@github-actions

Copy link
Copy Markdown

无遗漏

PR 的 4 项需求均已完整实现:

  1. language 输入参数 — 4 个涉及 agent/prompt 的 action(github-run-opencodereviewfeature-missingspec-coverage)均已新增 language 输入(默认 zh),并通过 GITHUB_RUN_OPENCODE_LANGUAGE 环境变量传递给 Python 脚本。setup-opencoderun-opencode 为底层工具 action,不涉及 prompt/agent 输出,按设计无需添加。

  2. Python 脚本语言指令追加run-github-opencode.py:201-230 读取环境变量,对 en 追加英文回复指令、对 zh 追加中文回复指令、对非法值输出 warning 并回退中文、对空 PROMPT 跳过追加,覆盖完整。

  3. 双语判定关键词 — 3 个 wrapper action prompt 均已更新:

    • review: 可合并 / CAN MERGE有条件合并 / CONDITIONAL MERGE不可合并 / CANNOT MERGE阻塞项 / Blocking Issues建议项 / Suggestions
    • feature-missing: 无遗漏 / NO GAPS发现遗漏 / GAPS FOUND
    • spec-coverage: 无需审计 / SKIP全覆盖 / FULL COVERAGE发现遗漏 / GAPS FOUND

    且此前 review 指出的 Please respond in Chinese. 硬编码冲突已在最新版本中移除。

  4. README 中文文档README.md:272-452 新增完整中文文档章节,包含快速开始、action 介绍、语言配置说明和用法示例。

New%20session%20-%202026-05-14T16%3A18%3A31.259Z
opencode session  |  github run

@github-actions

Copy link
Copy Markdown

无遗漏

PR 陈述的 4 项需求均已完整实现:

  1. language 输入参数 — 4 个涉及 agent/prompt 的 action(github-run-opencodereviewfeature-missingspec-coverage)均在 action.yml 中新增了 language 输入(默认 zh),并通过 GITHUB_RUN_OPENCODE_LANGUAGE 环境变量传递给 Python 脚本。setup-opencoderun-opencode 为底层工具 action,不涉及 prompt/agent 输出,按设计无需添加。

  2. Python 脚本语言指令追加run-github-opencode.py:201-225 正确读取 GITHUB_RUN_OPENCODE_LANGUAGE,对 en 追加英文回复指令、对 zh 追加中文指令、对非法值输出 warning 并回退中文、对空 PROMPT 跳过追加,各分支均完整处理。

  3. 双语判定关键词 — 3 个 wrapper action 的 prompt 模板均已更新为双语格式(review: 可合并 / CAN MERGE 等;feature-missing: 无遗漏 / NO GAPS / 发现遗漏 / GAPS FOUNDspec-coverage: 无需审计 / SKIP / 全覆盖 / FULL COVERAGE / 发现遗漏 / GAPS FOUND)。且此前 review 指出的硬编码中文指令已移除,不存在语言指令冲突。

  4. README 中文文档README.md:272-452 新增完整中文章节,包含快速开始、action 介绍、语言配置说明、用法示例,与英文文档并列。

New%20session%20-%202026-05-14T16%3A21%3A43.899Z
opencode session  |  github run

@github-actions

Copy link
Copy Markdown

可合并

PR 实现了所有 action 的中英文双语支持。此前 review 中提出的阻塞性问题(prompt 模板中的硬编码中文指令、非法语言值缺少 warning、>/dev/null 多余转义)均已被后续 fix commit 修复。当前代码功能完整,联动正确。

阻塞项:无

建议项:

  1. run-github-opencode.py:191-196 MODEL 赋值使用 os.environ["MODEL"] = ... 而非 set_env() — 虽为 PR 引入前的既有代码,但与本 PR 新增的语言覆盖代码风格不统一,可一并清理。
  2. feature-missing/action.yml 缺少 extra-env 输入review/action.ymlspec-coverage/action.yml 均已包含该输入,feature-missing 却未添加,长期来看可能导致功能不一致。

New%20session%20-%202026-05-14T16%3A21%3A51.483Z
opencode session  |  github run

@github-actions

Copy link
Copy Markdown

可合并

PR 功能完整、设计清晰:YAML 层定义 language 输入 → Python 层读取环境变量追加语言指令 → prompt 模板使用双语判定关键词,联动正确。此前 review 提出的所有问题(硬编码中文指令、非法语言值缺少 warning、>\/dev/null 多余转义)均已在当前版本中修复。

阻塞项:无

建议项:

  1. run-github-opencode.py:191-196, 315 — MODEL 赋值使用 set_env()(192-196 行)和直接 os.environ["MODEL"] = ...(315 行)两种方式混用,与本 PR 新增的语言代码风格不一致,建议统一为 set_env
  2. README.md — 英文和中文文档中的 YAML 示例使用 Svtter/opencode-actions/review@v2,而 npx skills add 命令使用 sun-praise/opencode-actions,合并前请确认目标仓库 owner 并统一文档中的引用路径

New%20session%20-%202026-05-14T16%3A25%3A44.962Z
opencode session  |  github run

@github-actions

Copy link
Copy Markdown

无遗漏

PR 陈述的 4 项需求均已完整实现:

  1. language 输入参数 — 4 个涉及 agent/prompt 的 action(github-run-opencodereviewfeature-missingspec-coverage)均在 action.yml 中新增了 language 输入(默认 zh),并通过 GITHUB_RUN_OPENCODE_LANGUAGE 环境变量传递给 Python 脚本。setup-opencoderun-opencode 为底层工具 action,不涉及 agent 输出,按 PR 的设计范围无需添加。

  2. Python 脚本语言指令追加run-github-opencode.py:201-225 正确读取 GITHUB_RUN_OPENCODE_LANGUAGEen 追加英文回复指令、zh 追加中文回复指令、非法值输出 warning 并回退中文、空 PROMPT 跳过追加,各分支完整。

  3. 双语判定关键词 — 3 个 wrapper action 的 prompt 模板均已更新为双语格式:

    • review: 可合并 / CAN MERGE有条件合并 / CONDITIONAL MERGE不可合并 / CANNOT MERGE阻塞项 / Blocking Issues建议项 / Suggestions
    • feature-missing: 无遗漏 / NO GAPS发现遗漏 / GAPS FOUND
    • spec-coverage: 无需审计 / SKIP全覆盖 / FULL COVERAGE发现遗漏 / GAPS FOUND

    且此前 review 指出的 prompt 模板中硬编码的中文指令(Please respond in Chinese.)已在最新版本中移除,不存在语言指令冲突。

  4. README 中文文档README.md 尾部新增完整的 # 中文文档 章节,包含快速开始、action 介绍、语言配置说明和用法示例,与英文文档并列。

New%20session%20-%202026-05-14T16%3A25%3A51.129Z
opencode session  |  github run

@github-actions

Copy link
Copy Markdown

PR 无关联 issue,从 PR 标题和正文提取需求共 4 项,逐项对照实现如下:

需求 1:All actions 新增 language 输入参数

  • 涉及 agent/prompt 的 4 个 actions 均已新增:github-run-opencode/action.yml:113review/action.yml:143feature-missing/action.yml:159spec-coverage/action.yml:171,均默认 zh,并通过 GITHUB_RUN_OPENCODE_LANGUAGE 环境变量传递给 Python。
  • setup-opencoderun-opencode 为底层工具 action,不涉及 prompt/agent,按设计无需添加。

需求 2:language: en 时 Python 脚本追加英文指令

  • run-github-opencode.py:201-225 完整实现:读取环境变量,en 时追加英文回复指令,zh 时追加中文指令,非法值输出 warning 并回退中文,空 PROMPT 跳过追加。

需求 3:prompt 判定关键词更新为双语格式

  • 3 个 wrapper action 均已更新:
    • review/action.yml:93-110可合并 / CAN MERGE有条件合并 / CONDITIONAL MERGE不可合并 / CANNOT MERGE阻塞项 / Blocking Issues建议项 / Suggestions
    • feature-missing/action.yml:99-101无遗漏 / NO GAPS发现遗漏 / GAPS FOUND
    • spec-coverage/action.yml:110-112无需审计 / SKIP全覆盖 / FULL COVERAGE发现遗漏 / GAPS FOUND
  • 此前硬编码的 Please respond in Chinese. 已从所有 prompt 模板中移除。

需求 4:README 新增中文文档

  • README.md:272-452 新增完整中文章节,包含快速开始、action 介绍、语言配置说明和用法示例。

无遗漏

New%20session%20-%202026-05-14T16%3A29%3A52.357Z
opencode session  |  github run

@github-actions

Copy link
Copy Markdown

可合并

本 PR 设计清晰:4 个 action 的 YAML 层定义 language 输入 → Python 层读取 GITHUB_RUN_OPENCODE_LANGUAGE 并追加语言指令 → 3 个 wrapper action 的 prompt 模板均已采用双语判定关键词。此前 review 中提到的所有问题(硬编码中文指令、非法language 值缺少 warning、>/dev/null 多余转义)已在当前版本中全部修复,代码功能完整且联动正确。

阻塞项:无

建议项:

  1. run-github-opencode.py:318os.environ["MODEL"] = eligible_models[0] 使用直接赋值,而本 PR 新增的语言覆盖代码(以及文件其余部分)均使用 set_env() 工具函数,建议统一调用风格。
  2. feature-missing/action.yml — 缺少 extra-env 输入定义(虽然运行时 env 中有传递)。reviewspec-coverage 均已包含该输入,feature-missing 未添加,长期可能造成功能不一致。

New%20session%20-%202026-05-14T16%3A29%3A57.093Z
opencode session  |  github run

@github-actions

Copy link
Copy Markdown

PR 无关联 issue,从 PR 正文提取需求共 4 项,逐项对照:

无遗漏

需求 1:All actions 新增 language 输入参数(默认 zh
涉及 agent/prompt 的 4 个 action 均已完成:

  • github-run-opencode/action.yml:116-121 — 输入定义,默认 zh,通过 GITHUB_RUN_OPENCODE_LANGUAGE 传递(行 224)
  • review/action.yml:148-152 — 同上,传递至行 257
  • feature-missing/action.yml:164-168 — 同上,传递至行 272
  • spec-coverage/action.yml:176-180 — 同上,传递至行 285

setup-opencoderun-opencode 为底层工具 action,不涉及 prompt/agent 输出,按 PR 改动文件列表无需添加。

需求 2:language: en 时 Python 脚本追加英文回复指令
run-github-opencode.py:204-231 完整覆盖:读取环境变量,en 追加英文指令,zh 追加中文指令,非法值输出 warning 并回退中文,空 PROMPT 跳过追加,各分支均处理。

需求 3:prompt 判定关键词更新为双语格式
3 个 wrapper action 均已更新:

  • review/action.yml:92-110可合并 / CAN MERGE有条件合并 / CONDITIONAL MERGE不可合并 / CANNOT MERGE阻塞项 / Blocking Issues建议项 / Suggestions
  • feature-missing/action.yml:97-101无遗漏 / NO GAPS发现遗漏 / GAPS FOUND
  • spec-coverage/action.yml:108-112无需审计 / SKIP全覆盖 / FULL COVERAGE发现遗漏 / GAPS FOUND

prompt 模板中无硬编码语言指令,由 Python 层统一控制。

需求 4:README 中文文档
README.md:272-452 新增完整中文章节,包含快速开始、action 介绍、语言配置说明、用法示例,与英文文档并列。

New%20session%20-%202026-05-14T16%3A37%3A50.187Z
opencode session  |  github run

@github-actions

Copy link
Copy Markdown

无遗漏

PR 陈述的 4 项需求均已完整实现:

  1. language 输入参数 — 4 个涉及 agent/prompt 的 action(github-run-opencodereviewfeature-missingspec-coverage)均在 action.yml 中新增了 language 输入(默认 zh),并通过 GITHUB_RUN_OPENCODE_LANGUAGE 环境变量传递给 Python 脚本。setup-opencoderun-opencode 为底层工具 action,不涉及 agent 输出,按设计无需添加。

  2. Python 脚本语言指令追加run-github-opencode.py:204-231 读取 GITHUB_RUN_OPENCODE_LANGUAGE,对 en 追加英文回复指令,对 zhSUPPORTED_LANGUAGES 内语言追加中文指令,非法值输出 warning 并回退中文,空 PROMPT 跳过追加,各分支均完整处理。

  3. 双语判定关键词 — 3 个 wrapper action 的 prompt 模板均已更新为双语格式:

    • review: 可合并 / CAN MERGE有条件合并 / CONDITIONAL MERGE不可合并 / CANNOT MERGE阻塞项 / Blocking Issues建议项 / Suggestions
    • feature-missing: 无遗漏 / NO GAPS发现遗漏 / GAPS FOUND
    • spec-coverage: 无需审计 / SKIP全覆盖 / FULL COVERAGE发现遗漏 / GAPS FOUND

    此前 review 指出的硬编码 Please respond in Chinese. 已在当前版本中移除,不存在语言指令冲突。

  4. README 中文文档README.md:272-452 新增完整中文章节,包含快速开始、action 介绍、语言配置说明、用法示例、发布清单等,与英文文档并列。

New%20session%20-%202026-05-14T16%3A38%3A06.085Z
opencode session  |  github run

@github-actions

Copy link
Copy Markdown

可合并

本 PR 功能完整、设计清晰,所有 action 的 language 输入已正确串联(YAML 输入 → 环境变量 → Python 层语言指令追加),prompt 模板中硬编码中文指令已移除,双语判定关键词和 README 中文文档均完整。此前多轮 review 中提出的阻塞问题(prompt 模板的中文指令冲突、非法 language 值缺少 warning、>\/dev/null 多余转义)已在当前 HEAD 中全部修复。

阻塞项:无

建议项:

  1. run-github-opencode.py:325os.environ["MODEL"] = eligible_models[0] 使用直接赋值而非 set_env(),虽为 PR 引入前的既有代码,但与语言覆盖逻辑的风格不一致,建议统一。
  2. README 仓库 owner 路径 — YAML 示例使用 Svtter/opencode-actions,而 npx skills add 命令行使用 sun-praise/opencode-actions,合并前请确认目标仓库 owner 并统一文档中的引用路径。

New%20session%20-%202026-05-14T16%3A37%3A58.667Z
opencode session  |  github run

@github-actions

Copy link
Copy Markdown

可合并

PR 功能完整、设计清晰,此前 review 提出的所有问题(硬编码中文指令、非法语言值缺少 warning、>/dev/null 多余转义、extra-env 缺失)均已在当前版本中修复。

阻塞项:无

建议项:

  1. run-github-opencode.py:209-212zh_instruction 变量在 language == "en" 时也会被构造但未被使用。建议将 zh_instruction 移到对应的 elif/else 分支内延迟构造,与英文指令的惰性创建方式保持一致。
  2. run-github-opencode.py:324os.environ["MODEL"] = eligible_models[0] 使用直接赋值,而同一函数内其他环境变量(含本 PR 新增的语言覆盖代码)均使用 set_env(),风格不统一。PR 虽未引入该行,可一并清理。

New%20session%20-%202026-05-14T16%3A38%3A09.295Z
opencode session  |  github run

@github-actions

Copy link
Copy Markdown

无遗漏

PR 声明的 4 项需求均已完整实现:

  1. language 输入参数 — 涉及 agent/prompt 的 4 个 action(github-run-opencodereviewfeature-missingspec-coverage)均已新增 language 输入(默认 zh),并通过 GITHUB_RUN_OPENCODE_LANGUAGE 环境变量传递给 Python 脚本。setup-opencoderun-opencode 为底层工具 action,不涉及 agent 输出,按 PR 设计范围无需添加。

  2. Python 脚本语言指令追加run-github-opencode.py:206-233 正确读取 GITHUB_RUN_OPENCODE_LANGUAGEen 追加英文回复指令、zh 追加中文指令、非法值输出 warning 并回退中文、空 PROMPT 跳过追加,各分支均完整处理。此前多轮审查指出的 prompt 模板中硬编码中文指令冲突问题已在当前版本中修复。

  3. 双语判定关键词 — 3 个 wrapper action 的 prompt 模板均已更新为双语格式:

    • review: 可合并 / CAN MERGE有条件合并 / CONDITIONAL MERGE不可合并 / CANNOT MERGE阻塞项 / Blocking Issues建议项 / Suggestions
    • feature-missing: 无遗漏 / NO GAPS发现遗漏 / GAPS FOUND
    • spec-coverage: 无需审计 / SKIP全覆盖 / FULL COVERAGE发现遗漏 / GAPS FOUND
  4. README 中文文档README.md:272-452 新增完整中文章节,包含快速开始、action 介绍、语言配置说明、用法示例、发布清单等,与英文文档并列。

New%20session%20-%202026-05-14T16%3A41%3A44.745Z
opencode session  |  github run

@github-actions

Copy link
Copy Markdown

可合并

本 PR 设计清晰,中英文双语支持功能完整实现:4 个 action 的 YAML 层新增 language 输入 → Python 层根据 GITHUB_RUN_OPENCODE_LANGUAGE 动态追加语言指令 → 3 个 wrapper action 的 prompt 模板使用双语判定关键词。此前多轮 review 提出的所有问题(硬编码中文指令冲突、非法语言值缺少 warning、set_env 风格不统一、extra-env 缺失、>/dev/null 多余转义)均已在后续 fix commits 中修复。

阻塞项:无

建议项:

  1. run-github-opencode.py:211-214zh_instruction 在函数作用域顶部无条件构造,但 language == "en" 分支中并不使用。建议将 zh_instruction 移到 elif language == "zh" 分支内惰性构造,与英文指令的内联方式保持一致。
  2. run-github-opencode.py:225-227elif language in SUPPORTED_LANGUAGES 分支在当前 SUPPORTED_LANGUAGES = {"zh", "en"} 下不可达(zhen 已在前面分支处理)。虽为未来扩展预留的防御代码,但建议加一行注释说明意图,避免后续维护者困惑。
  3. run-github-opencode.py:329os.environ["MODEL"] = eligible_models[0] 使用直接赋值而非 set_env(),与本 PR 统一使用的 set_env 风格不一致。PR 虽未引入该行(既有代码),但一并清理可使风格更一致。
  4. README.md — 英文文档中 npx skills add sun-praise/opencode-actions(行 30)与 YAML 示例中的 Svtter/opencode-actions(行 15)仓库 owner 不一致。中文文档也有相同问题(行 301 vs 行 286)。合并前建议确认目标仓库 owner 并统一。

New%20session%20-%202026-05-14T16%3A41%3A48.338Z
opencode session  |  github run

Svtter and others added 7 commits June 3, 2026 17:49
Add a `language` input (default: `zh`) to all actions that controls the
agent's response language. When set to `en`, the Python script appends
an English language override instruction to the prompt.

Changes:
- `run-github-opencode.py`: read `GITHUB_RUN_OPENCODE_LANGUAGE` env var,
  append English instruction to prompt when language is `en`
- `github-run-opencode/action.yml`: add `language` input
- `review/action.yml`: add `language` input, update prompt with bilingual
  verdict keywords (可合并/CAN MERGE, etc.)
- `feature-missing/action.yml`: add `language` input, update prompt with
  bilingual verdict keywords (无遗漏/NO GAPS, etc.)
- `spec-coverage/action.yml`: add `language` input, update prompt with
  bilingual verdict keywords (无需审计/SKIP, etc.)
- `README.md`: add complete Chinese documentation section

Users can configure language via input or from repository variables:
  language: ${{ vars.OPENCODE_LANGUAGE }}

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Prevents runtime crash when user passes non-object JSON (e.g. 'true',
'42', '[1,2]') as GITHUB_RUN_OPENCODE_PERMISSION. Now prints a clear
error message and exits instead of failing with AttributeError in
_deep_merge.
Move language-specific response instructions to Python layer where they
are dynamically appended based on the language input parameter. This
eliminates the conflict when language: en is set but prompt templates
contained hardcoded 'Please respond in Chinese.'

- Remove 'Please respond in Chinese.' from review, feature-missing, and
  spec-coverage action.yml prompt templates
- Add explicit zh language instruction in Python (append Chinese
  response directive when language != 'en')
…ature-missing

- Replace os.environ["MODEL"] = ... with set_env() for consistency
- Add extra-env input to feature-missing/action.yml, matching review and spec-coverage
Svtter added 4 commits June 3, 2026 17:49
…g for extra-env

- Define SUPPORTED_LANGUAGES set for easier language support extension
- Add warning when extra-env key starts with GITHUB_RUN_OPENCODE_ prefix
- Addresses review suggestions from AI code review
…ndling

- Split 'zh' into explicit branch so future languages hit debug warning
- Add comment explaining intentional os.environ use in extra-env
- Add maintenance comment to SENSITIVE_ENV_KEYS
@Svtter Svtter force-pushed the bilingual-support branch from 7b72274 to 9055808 Compare June 3, 2026 09:49
@github-actions

github-actions Bot commented Jun 3, 2026

Copy link
Copy Markdown

无遗漏

PR 声明的 4 项需求均已在当前 HEAD 中完整实现,无任何遗漏:

需求 1:所有 action 新增 language 输入参数(默认 zh

  • github-run-opencode/action.yml:131-136 — 定义 language 输入,默认 zh
  • review/action.yml:167-171 — 同上
  • feature-missing/action.yml:179-183 — 同上
  • spec-coverage/action.yml:191-195 — 同上
  • 4 个 action 均在 env: 中传递 GITHUB_RUN_OPENCODE_LANGUAGE: ${{ inputs.language }}

需求 2:Python 脚本追加语言指令

  • run-github-opencode.py:440-464 — 读取 GITHUB_RUN_OPENCODE_LANGUAGE 环境变量
  • en 追加英文回复指令(行 447-453)
  • zh 或默认追加中文回复指令(行 454-458)
  • 非法值输出 ::warning:: 并回退中文(行 459-464)
  • 空 PROMPT 跳过追加(行 446)
  • SUPPORTED_LANGUAGES = {"zh", "en"} 集合定义在第 16 行

需求 3:双语判定关键词

  • review/action.yml:92-110可合并 / CAN MERGE有条件合并 / CONDITIONAL MERGE不可合并 / CANNOT MERGE阻塞项 / Blocking Issues建议项 / Suggestions
  • feature-missing/action.yml:97-101无遗漏 / NO GAPS发现遗漏 / GAPS FOUND
  • spec-coverage/action.yml:110-112无需审计 / SKIP全覆盖 / FULL COVERAGE发现遗漏 / GAPS FOUND
  • 所有 prompt 模板中无硬编码语言指令,由 Python 层统一控制

需求 4:README 中文文档

  • README.md:344-524 新增完整中文章节,包含快速开始、action 介绍、语言配置说明、用法示例等,与英文文档并列

New%20session%20-%202026-06-03T09%3A50%3A04.756Z
opencode session  |  github run

@Svtter Svtter closed this Jun 3, 2026
@github-actions

github-actions Bot commented Jun 3, 2026

Copy link
Copy Markdown

综合代码审查报告

最终决策:不可合并

存在 1 项阻塞项(language 分支不可达死代码),需修复后重新提交。另含 11 项非阻塞建议。

注:quality reviewer 因 fetch 失败未产出审查结果,本报告缺少该维度,安全/架构判断可能不完整。


阻塞项

  1. language 分支存在不可达死代码github-run-opencode/run-github-opencode.py:440-456
    elif language in SUPPORTED_LANGUAGES:language == "zh"/language == "en" 已匹配后永远不可达(SUPPORTED_LANGUAGES = {"zh", "en"})。当前代码结构伪装成"已支持但无专门指令的语言",属误导性接口。应删除并简化为 if/else 二分支,或同步扩展 SUPPORTED_LANGUAGES 并填充逻辑。
    • 来源:architecture(标记阻塞)。按规则 5 采用最严重决策保留为阻塞项。

建议项

已确认(≥2 名 reviewer 同意)

  1. extra-env 可覆盖敏感运行时变量run-github-opencode.py:483-491
    extra-env 能在内部配置写入后再次覆盖 MODELGITHUB_TOKENZHIPU_API_KEY 等敏感变量(仅打印 ::warning:: 不阻断)。建议对 GITHUB_TOKEN*_API_KEY 等高敏键拒绝覆盖,或要求仅来自 with: 显式传入而不能来自 vars./env.
    • 来源:security + architecture。
  2. PROMPT 的 get_env/set_env 重复调用run-github-opencode.py:431-460
    每次都做 os.environ.get 字典查询,可先缓存 PROMPT 到局部变量,最后一次性 set_env 写回,省去冗余查找并提升可读性。
    • 来源:performance + architecture。

领域特定见解(单一 reviewer 提出)

  1. GitHub Actions 工作流命令日志注入run-github-opencode.py:438-454、484-485
    ::warning::... '{language}' ...::warning::extra-env key '{key}' ...language/key 仅做 strip(),未过滤内部 \r\n。攻击者可在输入中嵌入 \n::set-output::... 等序列向 runner 日志注入伪造工作流命令。建议写入前对用户控制值做换行过滤或按 GitHub 建议进行 :: 编码。
    • 来源:security。
  2. prompt 中追加的语言指令与自定义 prompt 可能相互覆盖
    existing_prompt 若含试图压过系统/后置指令的注入内容,模型行为不可控。建议在文档中提示自定义 prompt 时避免与 language 指令冲突的最高优先级指令。
    • 来源:security。
  3. README 示例 vars.OPENCODE_LANGUAGE 与触发器组合风险
    vars. 在 fork PR 中不可控,避免与 pull_request_target 等触发器组合,防止变量被 PR 内容侧信道控制。
    • 来源:security。
  4. extra-env 暴露面不一致
    底层 github-run-opencode/action.yml 未把 extra-env 暴露为 input(仅消费环境变量),但 feature-missing/review/spec-coverage 三个上层 action 均已暴露。建议要么全部暴露,要么统一不暴露并通过 README 说明。
    • 来源:architecture。
  5. language input 描述在四个 action.yml 间文案不一致
    github-run-opencode/action.yml 多出 "Appends a language override instruction to the prompt.",应统一以便用户预期。
    • 来源:architecture。
  6. SENSITIVE_ENV_KEYS 硬编码,shotgun surgery 隐患
    run-github-opencode.py:19 的密钥列表需与 _main() 同步维护。建议从统一输入元数据派生(如遍历 inputs 或维护 PROVIDER_KEYS 常量)。
    • 来源:architecture。
  7. README 中英文混排体积膨胀
    任意修改都要双写,建议拆分为 README.md + README.zh-CN.md 并互链。
    • 来源:architecture。
  8. permission 校验新增 dict 检查,其他字段未做对称防御
    run-github-opencode.py:499-505 新增"必须为 dict"检查,但 cleanup-error-comments 等可能为布尔/字符串的字段未做类似防御,建议统一梳理所有 GITHUB_RUN_OPENCODE_* 输入的解析点。
    • 来源:architecture。
  9. verdict 关键字依赖 prompt 自然语言理解的软契约
    英文指令中 "use their English equivalents" 假设下游 agent 会自行映射 verdict 关键字,未来增语言易脆弱。建议将 verdict 关键字结构化(JSON/标签)由 action 注入。
    • 来源:architecture。

📋 各 Reviewer 详细审查结果
quality

(审查失败: fetch failed)

security

存在风险

本次 PR 主要增加了 languageextra-env 两个输入参数,更新了中英双语 prompt 模板,并对 permission 字段做了 JSON 类型校验。整体上输入校验和文档化做得不错,但仍有几处需要关注。

阻塞项:无

建议项:

  1. extra-env 可覆盖敏感运行时变量(github-run-opencode/run-github-opencode.py:483-491)extra-env 允许在内部配置写入后再次覆盖 MODELGITHUB_TOKENZHIPU_API_KEY 等敏感变量。虽然脚本会输出 ::warning::,但仍实际生效。在多步骤工作流中,若 extra-env 来源于 vars. 或来自 PR/issue 内容(被注入),可能造成令牌泄漏或模型调用被重定向。建议至少对 GITHUB_TOKEN*_API_KEY 这类高敏键拒绝覆盖,或要求通过 with: 显式传入而不能来自 vars./env.

  2. GitHub Actions 命令日志注入(github-run-opencode/run-github-opencode.py:438-454、484-485)print(f"::warning::... '{language}' ...")print(f"::warning::extra-env key '{key}' ...")languagekey 直接拼入 workflow command。strip() 仅去除首尾空白,不会去除内部换行/回车;若调用方在输入中嵌入 \n::set-output::... 等序列,可向 runner 日志注入伪造的 workflow command。GitHub 已建议对所有写入日志的内容进行 \r\n 替换或使用 :: 编码。建议在写入日志前对用户控制值做换行过滤。

  3. PROMPT 中追加的语言指令可能与恶意 prompt 内容相互覆盖:当 existing_prompt 来自用户自定义输入,且其中包含试图压过系统/后置指令的指令注入内容时,模型行为不可控(这是 LLM 应用的固有限制,非本 PR 引入)。建议在文档中提示用户:自定义 prompt 时应避免包含与 language 指令冲突的最高优先级指令。

  4. README.md 暴露工作流调用形式:README 展示了 language: ${{ vars.OPENCODE_LANGUAGE }} 这种用法,本身无问题,但需提醒调用方:vars. 默认在 fork PR 中不可控,避免与 pull_request_target 等触发器组合,防止变量被 PR 内容侧信道控制。

performance

性能良好

本 PR 主要新增了 language 输入参数(中/英回复)和 extra-env 透传能力,并更新了 README/action.yml 中的 prompt 模板。代码层面仅涉及 github-run-opencode/run-github-opencode.py 中的一段顺序控制流和字符串拼接,逻辑简单且只会在 CI 启动时执行一次,无热点路径可优化。

阻塞项:无

建议项:

  • run-github-opencode.py:431-460 中对 PROMPT 的处理连续调用了 get_env/set_env 多次,每次都做 os.environ.get 字典查询。可在进入该段前把 PROMPT 缓存到一个局部变量,再用 os.environ[...] = ... 一次性写回,省去两次额外的 dict 查找(影响极小,仅作代码整洁性建议)。
  • run-github-opencode.py:461-468extra-env 解析仍是单次顺序遍历 O(n),符合预期,无需改动;如未来要支持引用展开或校验,去重等场景再考虑缓存即可。
  • 未发现 N+1 查询、内存泄漏、并发竞争或冗余 I/O;该脚本是短生命周期的单进程入口,不存在资源回收问题。
architecture

架构有疑虑

架构分析摘要:

本次 PR 围绕三个审查 action(review/feature-missing/spec-coverage)以及底层 github-run-opencode 增加了 language 输入与(部分 action 的)extra-env 输入,并将 prompt 中的中文硬编码改为按 language 动态追加指令。整体沿用了既有的"GITHUB_RUN_OPENCODE_* 环境变量透传"和"composite action 包装底层 action"的分层结构,没有破坏既有边界。

阻塞项:

  1. github-run-opencode/run-github-opencode.py:440-456language 分支控制流存在死代码:elif language in SUPPORTED_LANGUAGES:language == "zh"language == "en" 已经匹配后永远不可达(SUPPORTED_LANGUAGES = {"zh", "en"})。当前逻辑等价于"未知值走 warning,已知值走对应分支",但代码结构伪装成"已支持但无专门指令的语言",是误导性接口。如果保留该分支,应同步扩展 SUPPORTED_LANGUAGES;否则应删除并简化为 if/else 二分支。

建议项:

  1. extra-env 暴露面不一致:底层 github-run-opencode/action.yml 没有把 extra-env 作为 input 暴露(仅消费环境变量),但 feature-missing/review/spec-coverage 三个上层 action 都暴露了。从用户视角,"我能在 review 中用 extra-env,为什么在 github-run-opencode 中不能用?"会成为一致性问题。建议要么全部暴露,要么都不暴露并通过 README 说明。
  2. language input 的 description 在四个 action.yml 之间文案略有差异(github-run-opencode 多出 "Appends a language override instruction to the prompt."),应保持一致以便用户预期。
  3. extra-env 的敏感键集合 SENSITIVE_ENV_KEYSGITHUB_RUN_OPENCODE/run-github-opencode.py:19)是硬编码列表,且注释要求"添加新 API 密钥时同步更新"。这是一种 shotgun surgery 隐患:未来新增密钥需要同时改 _main()SENSITIVE_ENV_KEYS。建议改为从统一的密钥输入列表派生(例如遍历 inputs 元数据或维护一个 PROVIDER_KEYS 常量)。
  4. README.md 将中英文文档直接拼接在同一文件中,体积膨胀明显且未来维护成本高(任意修改都要双写)。建议拆分为 README.md + README.zh-CN.md 并用链接互通。
  5. set_env("PROMPT", ...)language 分支里被多次调用,每次都读 get_env("PROMPT", "") 再写回,可读性较差且重复。可改为先在局部变量中累积指令,最后一次性 set_env
  6. permission 校验新增了"必须为 dict"的检查(run-github-opencode.py:499-505),但 cleanup-error-comments 等其他可能为布尔/字符串的字段没有类似防御,建议统一梳理所有 GITHUB_RUN_OPENCODE_* 输入的解析点。
  7. prompt 中追加的英文指令 "use their English equivalents" 假设了下游 agent 会自行映射 verdict 关键字,属于"软契约"。如果未来增加更多语言,这种依赖 prompt 自然语言理解的实现会很脆弱,建议将 verdict 关键字做成结构化(JSON/标签)由 action 注入。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant