现象
在干净容器里(hub 已起、已登录、非 root):
anet node create oc1 --runtime opencode-cli --batch
→ [anet] ⚠ Vendor selector unavailable: User force closed the prompt with 0 null
[anet] vendor selector 不可用(非交互终端?用 --preset <model-id> 指定)
→ 节点未创建
改用提示里给的出路也不通:
printf 'opencode-cli\n' | anet node create oc1 --batch --preset __custom__
→ Runtime (claude-agent-sdk / codex-sdk / claude-code-cli) [claude-agent-sdk]:
← 列表里没有 opencode-cli
源码上的原因(不是猜)
node create 有两条路径,它们对 --runtime 的处理不一致:
| 路径 |
位置 |
是否消费 --runtime |
| 通用 create |
cli.ts:2883 runtimeForExecution(opts.runtime, "create node") |
✅ 消费 |
--batch 向导 |
createBatchWizardCommand()(cli.ts:12231) |
❌ 不看 --runtime |
--batch 分支里 runtime 完全来自 preset / vendor 选择(cli.ts:12300-12326):
} else if (opts.preset) {
const sel = findVendorByModel(opts.preset) || resolveVendorSelection(opts.preset);
runtime = sel.runtime; // ← runtime 由 vendor 决定
} else {
const sel = await selectVendorAndModel(); // ← 非 TTY 必失败
所以 --batch 与 --runtime 对 opencode-cli 事实上互斥:
加了 --batch 就被路由到只认 preset 的向导,而(据我所查)没有任何 vendor preset 映射到 opencode-cli。
影响
我没有验证的部分(不要当成已确认)
- 不加
--batch、只给 --runtime opencode-cli 在非 TTY 下能否成功 —— 我没测。
源码看是路径 A(消费 --runtime),但那条路后面可能还有别的交互点。
- 是否存在我没找到的 preset / flag 能选到 opencode-cli。
我查了 vendor 解析相关文件,没找到映射,但没有穷尽。
如果上面任一条其实可行,这条 issue 应当降级为文档问题(提示文案把人指向了走不通的 --preset)。
现象
在干净容器里(hub 已起、已登录、非 root):
改用提示里给的出路也不通:
源码上的原因(不是猜)
node create有两条路径,它们对--runtime的处理不一致:--runtimecli.ts:2883runtimeForExecution(opts.runtime, "create node")--batch向导createBatchWizardCommand()(cli.ts:12231)--runtime--batch分支里runtime完全来自 preset / vendor 选择(cli.ts:12300-12326):所以
--batch与--runtime对 opencode-cli 事实上互斥:加了
--batch就被路由到只认 preset 的向导,而(据我所查)没有任何 vendor preset 映射到opencode-cli。影响
漂移长期没被测试抓到的原因之一 —— 没有测试能非交互地把这个运行时创建出来。
我没有验证的部分(不要当成已确认)
--batch、只给--runtime opencode-cli在非 TTY 下能否成功 —— 我没测。源码看是路径 A(消费
--runtime),但那条路后面可能还有别的交互点。我查了 vendor 解析相关文件,没找到映射,但没有穷尽。
如果上面任一条其实可行,这条 issue 应当降级为文档问题(提示文案把人指向了走不通的
--preset)。