Skip to content

[cli] --batch 静默忽略 --runtime,且错误文案把人指向对四个运行时永远无解的 --preset #765

Description

@vansin

现象

在干净容器里(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)。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions