eyaltoledano/claude-task-master · error · TaskMasterError
${this.getName()} provider error: ${errorMessage}
Error message
${this.getName()} provider error: ${errorMessage} What it means
This is a wrapped provider error thrown by the base AI provider class. When a concrete provider's generateCompletion fails, the base class captures the underlying message and error code and re-throws it as a TaskMasterError prefixed with the provider name, tagged with operation 'generateCompletion' and resource '<provider-name>'. It gives a uniform error surface across all AI providers.
Source
Thrown at packages/tm-core/src/modules/ai/providers/base-provider.ts:269
provider: this.getName(),
timestamp: request.metadata.timestamp,
duration,
finishReason: result.finishReason
};
}
/**
* Handle errors with proper wrapping
*/
protected handleError(error: unknown): never {
if (error instanceof TaskMasterError) {
throw error;
}
const errorMessage = error instanceof Error ? error.message : String(error);
const errorCode = this.getErrorCode(error);
throw new TaskMasterError(
`${this.getName()} provider error: ${errorMessage}`,
errorCode,
{
operation: 'generateCompletion',
resource: this.getName(),
details:
error instanceof Error
? {
name: error.name,
stack: error.stack,
model: this.model
}
: { error: String(error), model: this.model }
},
error instanceof Error ? error : undefined
);
}
View on GitHub (pinned to c0c98d367c)
Solutions
- Read the inner message after 'provider error:' — it contains the underlying cause; fix that first
- Verify the provider's API key/credentials are set and valid (env vars or tm config)
- If network-related, check connectivity/proxy settings and retry
- Confirm the requested model name exists for the configured provider
- Catch TaskMasterError and inspect its code/details for provider-specific handling
Example fix
// before
const result = await provider.generateCompletion(prompt); // unhandled
// after
try {
const result = await provider.generateCompletion(prompt);
} catch (e) {
if (e instanceof TaskMasterError && e.details?.resource === 'zai') {
console.error('ZAI provider failed:', e.message);
}
throw e;
} Defensive patterns
Strategy: try-catch
Validate before calling
// before calling: ensure provider is configured
if (!providerConfig.apiKey) throw new Error('Provider API key missing'); Type guard
function isTaskMasterError(e: unknown): e is TaskMasterError {
return e instanceof TaskMasterError;
} Try / catch
try {
const res = await provider.generateCompletion(prompt);
} catch (e) {
if (e instanceof TaskMasterError) {
// e.code, e.details.operation, e.details.resource identify the provider failure
logger.error(`${e.details?.resource}: ${e.message}`);
}
throw e;
} Prevention
- Validate API keys and model names before calling generateCompletion
- Set explicit timeouts and retry with backoff for transient network failures
- Monitor rate limits for the configured provider
- Keep the provider package/config in sync with the backend's supported models
When it happens
Trigger: Calling generateCompletion() on any provider (ZAI, OpenAI-compatible, Anthropic, Ollama, etc.) whose internal HTTP/API call throws — e.g. invalid API key, network timeout, rate limit, malformed request, model not found.
Common situations: Missing or expired API key in env/config; unreachable local provider (Ollama not running); rate limiting during burst usage; wrong model name; proxy/firewall blocking outbound HTTPS.
Related errors
- Model "${model}" is not available for provider "${this.getNa
- Prompt must be a non-empty string
- Prompt cannot be empty or only whitespace
- AUTHENTICATION_ERROR
- VALIDATION_ERROR
AI-assisted analysis of eyaltoledano/claude-task-master@c0c98d367c (2026-08-29).
Data as JSON: /api/errors/c31807b14acc0be3.
Report an issue: GitHub.