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

  1. Read the inner message after 'provider error:' — it contains the underlying cause; fix that first
  2. Verify the provider's API key/credentials are set and valid (env vars or tm config)
  3. If network-related, check connectivity/proxy settings and retry
  4. Confirm the requested model name exists for the configured provider
  5. 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

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


AI-assisted analysis of eyaltoledano/claude-task-master@c0c98d367c (2026-08-29). Data as JSON: /api/errors/c31807b14acc0be3. Report an issue: GitHub.