SuperAPI AI 工具集

verify

编程与开发

查看项目

更新于 10-16 11:54

技能介绍

用途

该技能用于验证本仓库的构建/发布脚本,属于脚本层面的端到端验证,而不是库层面的单元测试。SDK 本身作为库通过 import claude_agent_sdk 使用,但 scripts/ 目录是一组由发布工作流运行的 CLI。因此验证方式是运行它们,而不是导入它们。

核心约束

绝对不能运行真正的安装器。scripts/download_cli.py 会通过 shell 调用 curl https://claude.ai/install.sh | bash(以及 PowerShell 等价命令)。真实运行会覆盖开发者机器上的 claude 二进制文件。不要运行 bash install.sh,也不要在真实网络下以 latest/stable(或任何大小写变体)调用 download_cli.py。

正确做法是:在临时 PATH 上放置桩 curl / bash / powershell,在 env -i 下配合隔离的 HOME 运行脚本,这样 find_installed_cli() 就无法发现真实二进制并将其复制到 src/claude_agent_sdk/_bundled/。

测试夹具

技能正文给出了搭建隔离测试环境的 shell 命令,包括创建临时目录、复制脚本、写入 _cli_version.py,以及定义桩 curl 与桩 bash。桩 curl 会把 argv 记录到 $MARKER 文件,并可根据 CURL_BODY 写出响应体,退出码由 CURL_EXIT 决定(默认 0)。桩 bash 会把参数计数与每个参数记录到 $MARKER。

运行命令为:

cd $SB/repo
env -i HOME=$SB/home PATH=$SB/stub:/usr/bin:/bin MARKER=$SB/m \
    CLAUDE_CLI_VERSION=2.1.208 .venv/bin/python scripts/download_cli.py

要点:run_command() 会捕获子进程输出,因此桩必须记录到 $MARKER 文件——打印到 stderr 会被吞掉。

值得驱动的流程

  • update_cli_version.py <version>:整个校验面都可以在这里触达。具体版本号会写入文件;latest/stable、v2.1.207、next、2.1 以及引号逃逸字符串各自以退出码 1 失败,并给出不同消息,且文件保持不变。
  • build_wheel.py --skip-sdist:读取 pin,然后链式调用 download_cli.py。在沙箱中把 _cli_version.py 改写为移动标签 / 单引号 / 垃圾内容或删除它:每种情况都必须在任何子进程被拉起之前失败。--cli-version <v> 会绕过 pin(这是有意的逃生通道;发布工作流不使用它)。
  • download_cli.py:把 CURL_BODY 设为 HTML 错误页或空字符串,以证明 body 检查会拒绝它且不重试;清空 PATH 以证明缺少 curl 会在一次尝试中快速失败;设 CURL_EXIT=22 以证明真正的瞬时失败仍会重试 3 次。

Windows 路径

Windows 路径在 Linux 上不可达,它位于 platform.system() == "Windows" 之后。可用一个小型 runner 驱动:patch.object(m.platform, "system", return_value="Windows"),并配合一个桩 powershell,读取 -Command 文本并遵守 $env:CLAUDE_CLI_INSTALL_SCRIPT。这是强制平台唯一正当的地方。

注意事项

  • ${CURL_BODY:-default} 会把空 body 视为未设置。要测试空 body 分支,需使用单独一个执行 : > "$out" 的桩。
  • 重试路径会真实睡眠(抖动最多 5 秒,然后 2 秒 + 4 秒)。完整的三次尝试运行约需 10 秒;应为此预留时间,而不是假定为卡死。