jlcodes99/cockpit-tools · error

PROVIDER_NAME_REQUIRED

PROVIDER_NAME_REQUIRED

Error message

PROVIDER_NAME_REQUIRED

What it means

createCodexModelProvider rejects provider creation when the sanitized name is empty, throwing the stable code PROVIDER_NAME_REQUIRED. sanitizeName trims/normalizes input.name, so blank or whitespace-only names fail this guard.

Source

Thrown at src/services/codexModelProviderService.ts:585

  modelContextWindows?: Record<string, number>;
  supportsVision?: boolean;
  modelCapabilities?: Record<string, { supportsVision?: boolean }>;
  visionRoutingModel?: string;
  boundInstanceId?: string;
  website?: string;
  apiKeyUrl?: string;
  wireApi?: CodexProviderWireApi;
  supportsWebsockets?: boolean;
  enableModePreference?: CodexProviderEnableModePreference;
  integrationType?: 'sub2api' | 'new_api';
  boundOauthAccountId?: string | null;
  initialApiKey?: string;
  initialApiKeyName?: string;
}): Promise<CodexModelProvider> {
  const name = sanitizeName(input.name);
  const baseUrl = normalizeBaseUrlForStore(input.baseUrl);
  const normalizedBaseUrl = normalizeCodexModelProviderBaseUrl(baseUrl);
  if (!name) throw new Error('PROVIDER_NAME_REQUIRED');
  if (!normalizedBaseUrl) throw new Error('PROVIDER_BASE_URL_INVALID');
  const providers = await ensureProvidersLoaded();
  if (providers.some((item) => normalizeCodexModelProviderBaseUrl(item.baseUrl) === normalizedBaseUrl)) {
    throw new Error('PROVIDER_BASE_URL_EXISTS');
  }
  const now = Date.now();
  const wireApi = normalizeWireApi(input.wireApi);
  const provider: CodexModelProvider = {
    id: createProviderId(),
    name,
    baseUrl,
    sourceTag: sanitizeName(input.sourceTag ?? '') || undefined,
    integrationType: normalizeIntegrationType(input.integrationType),
    modelCatalog:
      normalizeModelCatalog(input.modelCatalog) ??
      presetModelCatalogForBaseUrl(baseUrl),
    modelContextWindows: normalizeModelContextWindows(
      input.modelContextWindows,

View on GitHub (pinned to 1ed8b77992)

Solutions

  1. Enter a non-empty provider name in the form before saving
  2. Check that sanitizeName isn't stripping legitimate characters from the name
  3. Add required-field validation on the name input in handleSaveProvider before calling create
  4. Catch PROVIDER_NAME_REQUIRED and highlight the name field with an inline error

Example fix

// before
await createCodexModelProvider({ name: formData.name.trim(), ... });
// after
if (!formData.name.trim()) { setNameError('Provider name is required'); return; }
await createCodexModelProvider({ name: formData.name, ... });
Defensive patterns

Strategy: validation

Validate before calling

const name = input.name.trim();
if (!name) throw new Error('PROVIDER_NAME_REQUIRED');
await createCodexModelProvider({ ...input, name });

Type guard

function hasName(input: { name?: string }): input is { name: string } {
  return typeof input.name === 'string' && input.name.trim().length > 0;
}

Try / catch

try {
  await createCodexModelProvider(input);
} catch (e) {
  if (e instanceof Error && e.message === 'PROVIDER_NAME_REQUIRED') {
    setNameFieldError('Provider name is required');
  } else throw e;
}

Prevention

When it happens

Trigger: handleSaveProvider calls createCodexModelProvider with input.name empty, whitespace-only, or reduced to empty by sanitizeName.

Common situations: Submitting the provider form without filling the name field, name consisting only of spaces, UI state reset clearing the input before save.

Understand the failure class

Background: "missing required argument" and "the following required arguments were not provided": what required-argument errors mean and how to fix them — this error's family across 20 libraries.

Related errors


AI-assisted analysis of jlcodes99/cockpit-tools@1ed8b77992 (2026-09-05). Data as JSON: /api/errors/07662be1bfd0a90d. Report an issue: GitHub.