Release Smoke Test 是一个用于在正式发布到 npm 之前验证 oh-my-opencode-slim 候选版本的技能。它的核心原则是测试打包后的产物,而不是 @latest,也不是源码树。
用途 该技能用于在发布前对 oh-my-opencode-slim 的候选版本或缺陷修复进行冒烟验证,确保打包产物在隔离环境中能够正常运行,并且原始崩溃特征不再出现。
核心工作流
- 从发布准备分支或提交开始。
- 构建并打包候选版本。
- 将 tarball 安装到一个临时应用中。
- 创建隔离的 OpenCode 配置,指向已安装的 node_modules/oh-my-opencode-slim/dist/index.js。
- 运行 opencode debug config,并在进行隔离冒烟时验证 plugin_origins 仅包含预期的插件。
- 运行非纯模式的 opencode run --print-logs --log-level DEBUG。
- 在隔离日志中搜索原始崩溃特征。
- 在发布 issue 或 PR 上记录确切的产物、模型、OpenCode 版本、命令形态、结果和限制。
打包候选版本 使用临时目录,使发布验证不依赖本地包缓存。
SMOKE=/tmp/oh-my-opencode-slim-release-smoke rm -rf "$SMOKE" mkdir -p "$SMOKE/pkg" "$SMOKE/app" "$SMOKE/home" "$SMOKE/xdg/opencode" "$SMOKE/run"
bun run build npm pack --pack-destination "$SMOKE/pkg"
安装 tarball:
cd "$SMOKE/app" bun init -y bun add "$SMOKE/pkg"/oh-my-opencode-slim-*.tgz node -p "require('./node_modules/oh-my-opencode-slim/package.json').version"
隔离配置 写入最小 OpenCode 配置:
cat > "$SMOKE/xdg/opencode/opencode.json" <<EOF { "model": "opencode/deepseek-v4-flash-free", "plugin": [ "file://$SMOKE/app/node_modules/oh-my-opencode-slim/dist/index.js" ], "agent": { "orchestrator": { "model": "opencode/deepseek-v4-flash-free" } } } EOF
使用 env -i 获得最干净的冒烟环境。这会剥离宿主机的 OPENCODE_、ORCA_ 以及项目覆盖变量,这些变量可能静默添加插件或提供者别名。
env -i PATH="$PATH" HOME="$SMOKE/home" XDG_CONFIG_HOME="$SMOKE/xdg"
opencode debug config
确认:
- plugin_origins 恰好有一个条目。
- 该条目指向临时应用的打包 dist/index.js。
- 模型是本次冒烟预期的模型。
如果 OpenCode 需要来自宿主机环境的提供者别名,则运行第二次非隔离的、针对特定模型的冒烟,并明确标注其隔离性较弱。
运行时冒烟 使用超时运行实际提示:
env -i PATH="$PATH" HOME="$SMOKE/home" XDG_CONFIG_HOME="$SMOKE/xdg"
timeout 120
opencode run --print-logs --log-level DEBUG "Say OK only."
预期结果:
OK
在日志中搜索缺陷特征。对于 OpenCode 1.17.11 的 malformed-message 崩溃,使用:
rg "message\.info\.role|undefined is not an object|Cannot read properties of undefined|TypeError"
"$SMOKE/home/.local/share/opencode/log" -n 2>/dev/null || true
不应出现任何匹配。
OpenAI / 宿主提供者冒烟 如果完全隔离的环境无法解析 OpenAI 提供者别名,则在保持插件路径指向 tarball 安装的同时,运行单独的宿主提供者冒烟。
mkdir -p "$SMOKE/config" cat > "$SMOKE/config/opencode.json" <<EOF { "model": "openai/gpt-5.6-fast", "plugin": [ "file://$SMOKE/app/node_modules/oh-my-opencode-slim/dist/index.js" ], "agent": { "orchestrator": { "model": "openai/gpt-5.6-fast" } } } EOF
OPENCODE_CONFIG_DIR="$SMOKE/config"
timeout 120
opencode run --print-logs --log-level DEBUG "Say OK only."
将此报告为宿主提供者冒烟,因为现有的项目、用户或 Orca OpenCode 配置可能仍会合并进来。使用 opencode debug config 披露还加载了什么。
报告模板
Release-candidate smoke validation
- Commit under test:
- Tarball:
- Installed package version:
- OpenCode version:
- Config isolation: sanitized
env -i/ host-provider - Plugin origin:
- Model:
- Command:
- Result:
- Crash signature search:
- Limitations:
适用场景 适用于验证打包插件产物、发布分支、崩溃修复等发布前检查场景。
限制 资料未提供关于收费、价格、平台支持范围或效果保证的信息。该技能依赖 OpenCode、bun、npm、rg 等工具,具体版本要求暂未提供。