Skip to content

feat: CLI 参数解析迁移至 argparse (Issue #2)#20

Merged
urika merged 2 commits into
mainfrom
fix/issue-2-argparse-v2
May 30, 2026
Merged

feat: CLI 参数解析迁移至 argparse (Issue #2)#20
urika merged 2 commits into
mainfrom
fix/issue-2-argparse-v2

Conversation

@urika
Copy link
Copy Markdown
Owner

@urika urika commented May 29, 2026

Summary

修复 Issue #2: CLI 参数解析迁移至 argparse

修复

  • 添加 _build_parser() 构建所有子命令
  • run 子命令使用 argparse 处理所有参数
  • 其他子命令通过 _cmd_dispatch() 保持向后兼容
  • 支持标准 --help

测试

  • pytest tests/ -q (163 passed)

Checklist

  • 测试通过
  • argparse 已实现

@urika
Copy link
Copy Markdown
Owner Author

urika commented May 29, 2026

Code Review — PR #20: CLI 参数解析迁移至 argparse (v2)

🔴 Critical

1. parser.parse_args()cmd_run() 内调用,而非 main()

main() 入口执行 cmd = sys.argv[1] 进行分派,这意味着:

  • agent_go --help 不会显示 argparse 帮助,而是进入 main() 的 else 分支
  • agent_go resume --helpagent_go list --help 等均绕过 argparse
  • 只有 agent_go run ... 的参数被 argparse 处理

修复: 在 main() 中调用 parser.parse_args() 并从那里分派。

2. cmd_review() 签名与 argparse 定义不匹配

argparse 定义了 --comment--fix,但 cmd_review() 实际期望:

  • 位置参数: sys.argv[2] = repo 路径(必需)
  • --pr <N>: PR 编号
  • --yes/-y: 无头模式

_cmd_dispatch() 没有转发 repo 位置参数和 --pr--yes 标志,导致 agent_go review 完全损坏。

3. cmd_ci() 签名与 argparse 定义不匹配

argparse 定义了 --template,但 cmd_ci() 实际期望:

  • 可选位置参数: sys.argv[2] = repo 路径
  • --dry-run

--template 未被 cmd_ci() 识别,repo 位置参数也未定义。agent_go ci --template X 是静默空操作,agent_go ci /path/to/repo 会失败。

4. cmd_eval() 签名与 argparse 定义不匹配

argparse 定义了 --quality/--perf/--cost 等布尔 flag,但 cmd_eval() 实际期望:

  • sys.argv[2] = 子命令名称(quality/perf/cost/...)
  • sys.argv[3] = 可选 task-id 或 --all

_cmd_dispatch() 未将布尔 flag 转换为子命令位置参数。agent_go eval --quality 会因 len(sys.argv) < 3 而失败。

5. 缺少 cmd_pr()--offlinecmd_status()--no-tui/--verbose/-v 标志

  • cmd_pr() 支持 --offline,但 argparse 未定义
  • cmd_status() 支持 --no-tui--verbose/-v,但 argparse 未定义

运行这些命令的已有参数会在 argparse 层报错(未知参数)。

🟡 Major

6. _cmd_dispatch() 重建 sys.argv 是反模式

通过重建 sys.argv 让旧的 cmd_* 函数继续手动解析,这意味着:

  • 任何遗漏的参数都会静默丢失,没有错误提示
  • 测试必须设置 sys.argv 而非直接传参
  • 这是过渡性技术债务,应明确跟踪

7. main() 中的硬编码分派与 argparse 子命令冗余

main() 中的 if cmd == "run": cmd_run() 分派树与 argparse 子解析器镜像。新增子命令需要同时修改两处。

🟢 Minor

  1. PR feat: CLI 参数解析迁移至 argparse (Issue #2) #19 vs PR feat: CLI 参数解析迁移至 argparse (Issue #2) #20: 两者代码几乎相同,PR feat: CLI 参数解析迁移至 argparse (Issue #2) #19 有有用的节注释。建议关闭 PR feat: CLI 参数解析迁移至 argparse (Issue #2) #19 保留本 PR
  2. --issue 从字符串改为 type=int,改变了行为(原来接受任意字符串如 --issue abc),应记录

总结: 需修复 Critical #1-5 后方可合并。核心问题是 parser.parse_args() 应在 main() 中调用,且各子命令的参数定义需与实际实现完全对齐。

@urika
Copy link
Copy Markdown
Owner Author

urika commented May 29, 2026

📝 重复 PR 说明: PR #19 (fix/issue-2-argparse) 已关闭,本 PR (#20) 为保留版本。PR #19 中的有用节注释("重建 sys.argv 以保持向后兼容"、"设置全局 flags"、"调用原有命令")在修复时应参考保留。

jinsongwang and others added 2 commits May 30, 2026 09:21
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- status: 添加 --watch/-w --no-tui --verbose/-v
- pr: 添加 --offline 离线生成选项
- ci: repo 位置参数 + --dry-run
- review: repo 位置参数 + --pr + --yes 参数
- cache: 子命令 list/clean/clear/stats 替代 --clear flag
- workflow_gen.cmd_ci: 适配 argparse args 参数

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@urika urika force-pushed the fix/issue-2-argparse-v2 branch from baf8153 to a84935f Compare May 30, 2026 01:23
@urika urika merged commit 9782f6f into main May 30, 2026
1 check failed
@urika urika deleted the fix/issue-2-argparse-v2 branch May 30, 2026 01:26
urika added a commit that referenced this pull request May 30, 2026
Rebased onto main (after PRs #20, #21), conflicts resolved.\n\nFixes:\n- executor: _verify_changes 新增 sub_id 参数\n- test: 验证命令改用 pytest --co (适配新安全白名单)\n- test: _is_safe_verification_command 断言适配 (bool, reason) 元组返回值\n\nTests: 275 passed.
urika added a commit that referenced this pull request May 30, 2026
…sue #7)

Rebased onto main (after PRs #20, #21, #27), conflicts resolved.

Key changes:
- 14 modules: type annotations added to all public functions
- cli.py: argparse code preserved from PR #20
- executor.py: refactored functions preserved from PR #21, security functions from PR #27
- Fixed: logger definitions in eval.py, tui.py, git_utils.py

Tests: 277 passed.
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