Skip to content

multi-review: follow-up improvements #104

@Svtter

Description

@Svtter

PR #103 已合并,实现基于 @opencode-ai/sdk 的 multi-review 重写。CI 评审中提出的阻塞项已全部修复,以下为剩余的建议项,按优先级排列。

MEDIUM

1. reasoning-effort / enable-thinking 配置链路隐式

action.yml bash step 写入 opencode.json,但 createOpencode() 只传 model,未显式传入 reasoningEffort / enableThinking。配置是否生效取决于 SDK 是否自动读取 opencode.json

建议:在 createOpencode() config 中显式读取 MULTI_REVIEW_REASONING_EFFORT / MULTI_REVIEW_ENABLE_THINKING 环境变量并传入,同时移除 bash step 中 opencode.json 写入逻辑。

2. 缺少请求重试/退避机制

所有 SDK 调用(session.createsession.promptsession.messages)均无重试逻辑。API 限流或网络抖动会导致整个 review 失败。

建议:为核心调用添加 1-2 次指数退避重试。

3. withTimeout() 不取消底层 SDK 请求(资源泄漏)

Promise.race 超时后仅 reject 外层 promise,底层 HTTP 请求仍在后台运行。大量超时可能堆积后台连接。

建议:确认 SDK 是否支持 AbortSignal,若支持则传入 signal 以实际取消请求。

LOW

4. gh pr diff 错误被 2>/dev/null 静默

action.yml 中 diff 获取失败时错误完全不可见,下游 reviewer 收到空 diff。建议至少输出错误到 stderr。

5. 自定义 YAML 解析器脆弱

parseYAML() 仅支持极简 YAML 子集,无法处理引号、转义、注释、嵌套。建议使用 js-yaml 库替代。

6. SDK 版本范围 ^1.0.0 过于宽松

建议锁定到具体版本,避免 minor/patch 自动升级导致行为不一致。

7. PR number 解析逻辑重复

comment.ts:resolvePRNumber()action.yml:pr-context step 各自独立解析 GITHUB_REF。建议复用 action.yml 的输出,消除重复。

8. comment.ts 冗余条件检查

第 63 行 if (!comment.body) continue; 已保证 body 非空,第 64 行 !comment.body.includes(...) 中的 body 非空检查冗余。

架构级(需团队讨论)

9. 架构范式分歧 — Node.js/TypeScript 维护轴

multi-review 是代码库中唯一使用 TypeScript + tsup + SDK 的 action,其他 7 个均为 bash + Python + CLI subprocess。需团队确认是否接受此分歧,或规划逐步迁移到 SDK 模式。

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions