用途:一次性安装器,为项目添加 SessionStart 钩子,在会话首次提示前检查 icp 与 ic-wasm 是否为最新版本,并按用户选择提示或自动升级。ic-wasm 与 icp 一同管理,因为官方 recipes(@dfinity/motoko、@dfinity/rust、@dfinity/static-site、@dfinity/asset-canister)每次构建都会调用它,只升级其一易导致构建失败。
主要能力:安装前询问模式——notify(默认,仅打印版本与升级命令)或 auto(会话开始时自动升级,需提高 timeout 至 300,因安装可能超过默认 60 秒)。脚本按二进制解析路径判断安装渠道:node_modules/@icp-sdk 用 npm install -g @icp-sdk/icp-cli@latest 或 @icp-sdk/ic-wasm@latest;Cellar 用 brew upgrade icp-cli 或 ic-wasm;cargo-dist receipt 用 icp-cli-update 或 ic-wasm-update;未知渠道只报告发布 URL,不猜测。auto 模式不运行 sudo,不可写 npm prefix 会提示 sudo 命令。检查结果在 .claude/.icp-upgrade-check 打时间戳,6 小时内不重复,可用 ICP_UPGRADE_CHECK_INTERVAL 或 --force 覆盖。
使用方式:先检查 curl、icp、ic-wasm 是否可用(缺失时提示 npm install -g @icp-sdk/icp-cli @icp-sdk/ic-wasm,但不擅自运行);用 curl 下载脚本到 .claude/upgrade-icp-cli.sh;幂等地在 .claude/settings.json 注册 SessionStart 钩子,不覆盖已有配置;手动运行一次验证,静默即表示均为最新。若项目提交 .claude/,应将 .claude/.icp-upgrade-check 加入 .gitignore。
适用场景:使用 IC 官方 recipes 构建的项目,希望会话开始时工具链保持最新。
限制:仅管理 icp 与 ic-wasm 两个二进制;不升级 icp.yaml 中的 recipe 版本或 Motoko 工具链(moc、mops、mops.toml 的 [toolchain] 固定),这些需分别使用 icp-cli 与 mops-cli。auto 模式会在项目打开时升级构建工具链并阻塞会话启动,可能改变构建行为。若升级后构建失败,应先查看 icp-cli 发布说明。