mirror of
https://github.com/Kaelio/ktx.git
synced 2026-07-16 11:31:02 +02:00
fix(setup): require explicit --llm-backend in non-interactive setup
Non-interactive setup (--no-input) silently defaulted the LLM backend to anthropic, the one backend that cannot self-configure without an extra flag, then failed with 'Missing Anthropic API key: pass --anthropic-api-key-env or --anthropic-api-key-file.' — an error that never mentioned --llm-backend. A user who passed --target claude-code had no way to discover the (hidden) --llm-backend claude-code flag from the error. - chooseBackend no longer silently picks anthropic in disabled mode; it fails with a message naming --llm-backend, listing every backend, and noting that claude-code/codex use local auth (no key). - The anthropic and embedding credential errors now name --llm-backend / --embedding-backend so a keyless backend is discoverable from the error. - --llm-backend and --embedding-backend use .choices(), so invalid values report the allowed set (and the bespoke parser fns are removed). Only invocations that already failed change behavior; they now fail with an actionable error instead of a cryptic one.
This commit is contained in:
parent
48676c74fa
commit
41acc5959c
6 changed files with 67 additions and 26 deletions
|
|
@ -135,7 +135,8 @@ const execFileAsync = promisify(execFile);
|
|||
|
||||
type ChooseBackendResult =
|
||||
| { status: 'ready'; backend: KtxSetupLlmBackend; prompted: boolean }
|
||||
| { status: 'back' };
|
||||
| { status: 'back' }
|
||||
| { status: 'missing-input' };
|
||||
|
||||
type VertexConfigChoice =
|
||||
| {
|
||||
|
|
@ -372,7 +373,10 @@ async function chooseCredentialRef(
|
|||
return { status: 'ready', ref, value };
|
||||
}
|
||||
if (args.inputMode === 'disabled') {
|
||||
io.stderr.write('Missing Anthropic API key: pass --anthropic-api-key-env or --anthropic-api-key-file.\n');
|
||||
io.stderr.write(
|
||||
'Missing Anthropic API key for --llm-backend anthropic: pass --anthropic-api-key-env or --anthropic-api-key-file ' +
|
||||
'(or use --llm-backend claude-code or --llm-backend codex for local subscription auth).\n',
|
||||
);
|
||||
return { status: 'missing-input' };
|
||||
}
|
||||
|
||||
|
|
@ -446,7 +450,16 @@ async function chooseBackend(
|
|||
return { status: 'ready', backend: explicit, prompted: false };
|
||||
}
|
||||
if (args.inputMode === 'disabled') {
|
||||
return { status: 'ready', backend: 'anthropic', prompted: false };
|
||||
// No safe default exists: anthropic/vertex need credentials and claude-code/codex
|
||||
// need local auth, so non-interactive setup must be told which backend to use rather
|
||||
// than silently picking one that cannot self-configure.
|
||||
io.stderr.write(
|
||||
'Missing LLM backend: pass --llm-backend with one of anthropic, vertex, claude-code, codex.\n' +
|
||||
' claude-code, codex — use your local subscription auth (no API key)\n' +
|
||||
' anthropic — also pass --anthropic-api-key-env or --anthropic-api-key-file\n' +
|
||||
' vertex — also pass --vertex-project (and optionally --vertex-location)\n',
|
||||
);
|
||||
return { status: 'missing-input' };
|
||||
}
|
||||
|
||||
const prompts = deps.prompts ?? createPromptAdapter();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue