fix(coding-agent): improve auth setup warnings

This commit is contained in:
Mario Zechner
2026-04-24 00:33:07 +02:00
parent 27c05b7faa
commit bffb760f4f
6 changed files with 43 additions and 24 deletions

View File

@@ -14,7 +14,7 @@
*/
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
import { basename, dirname, join, resolve } from "node:path";
import { basename, dirname, resolve } from "node:path";
import type {
Agent,
AgentEvent,
@@ -25,10 +25,10 @@ import type {
} from "@mariozechner/pi-agent-core";
import type { AssistantMessage, ImageContent, Message, Model, TextContent } from "@mariozechner/pi-ai";
import { isContextOverflow, modelsAreEqual, resetApiProviders, supportsXhigh } from "@mariozechner/pi-ai";
import { getDocsPath } from "../config.js";
import { theme } from "../modes/interactive/theme/theme.js";
import { stripFrontmatter } from "../utils/frontmatter.js";
import { sleep } from "../utils/sleep.js";
import { formatNoApiKeyFoundMessage, formatNoModelSelectedMessage } from "./auth-guidance.js";
import { type BashResult, executeBashWithOperations } from "./bash-executor.js";
import {
type CompactionResult,
@@ -341,6 +341,9 @@ export class AgentSession {
}> {
const result = await this._modelRegistry.getApiKeyAndHeaders(model);
if (!result.ok) {
if (result.error.startsWith("No API key found")) {
throw new Error(formatNoApiKeyFoundMessage(model.provider));
}
throw new Error(result.error);
}
if (result.apiKey) {
@@ -355,10 +358,7 @@ export class AgentSession {
`Run '/login ${model.provider}' to re-authenticate.`,
);
}
throw new Error(
`No API key found for ${model.provider}.\n\n` +
`Use /login or set an API key environment variable. See ${join(getDocsPath(), "providers.md")}`,
);
throw new Error(formatNoApiKeyFoundMessage(model.provider));
}
/**
@@ -1002,11 +1002,7 @@ export class AgentSession {
// Validate model
if (!this.model) {
throw new Error(
"No model selected.\n\n" +
`Use /login or set an API key environment variable. See ${join(getDocsPath(), "providers.md")}\n\n` +
"Then use /model to select a model.",
);
throw new Error(formatNoModelSelectedMessage());
}
if (!this._modelRegistry.hasConfiguredAuth(this.model)) {
@@ -1018,10 +1014,7 @@ export class AgentSession {
`Run '/login ${this.model.provider}' to re-authenticate.`,
);
}
throw new Error(
`No API key found for ${this.model.provider}.\n\n` +
`Use /login or set an API key environment variable. See ${join(getDocsPath(), "providers.md")}`,
);
throw new Error(formatNoApiKeyFoundMessage(this.model.provider));
}
// Check if we need to compact before sending (catches aborted responses)
@@ -1610,7 +1603,7 @@ export class AgentSession {
try {
if (!this.model) {
throw new Error("No model selected");
throw new Error(formatNoModelSelectedMessage());
}
const { apiKey, headers } = await this._getRequiredRequestAuth(this.model);