paperclipai/paperclip · error

OpenCode requires `adapterConfig.model` in provider/model…

Error message

OpenCode requires `adapterConfig.model` in provider/model format.

What it means

Validation guard in requireOpenCodeModelId: the configured model string is empty or not in the required `provider/model` format (e.g. `anthropic/claude-sonnet-4`). OpenCode routes models by provider-prefixed id, so a bare model name cannot be resolved; the input at fault is adapterConfig.model.

Solutions

  1. Set adapterConfig.model in provider/model format, e.g. "anthropic/claude-sonnet-4-5".
Defensive patterns

Strategy: try-catch

When it happens

Trigger: Thrown at packages/adapters/opencode-local/src/server/models.ts:39 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of paperclipai/paperclip@01ad858492 (2026-09-10). Data as JSON: /api/errors/c8ee3926cfbe30b2. Report an issue: GitHub.

Appendix: source

Thrown at packages/adapters/opencode-local/src/server/models.ts:49

const discoveryCache = new Map<
  string,
  { expiresAt: number; models: AdapterModel[] }
>();
const VOLATILE_ENV_KEY_PREFIXES = ["PAPERCLIP_", "npm_", "NPM_"] as const;
const VOLATILE_ENV_KEY_EXACT = new Set([
  "PWD",
  "OLDPWD",
  "SHLVL",
  "_",
  "TERM_SESSION_ID",
  "HOME",
]);

export function requireOpenCodeModelId(input: unknown): string {
  const model = asString(input, "").trim();
  if (!isValidOpenCodeModelId(model)) {
    throw new Error(
      "OpenCode requires `adapterConfig.model` in provider/model format.",
    );
  }
  return model;
}

function dedupeModels(models: AdapterModel[]): AdapterModel[] {
  const seen = new Set<string>();
  const deduped: AdapterModel[] = [];
  for (const model of models) {
    const id = model.id.trim();
    if (!id || seen.has(id)) continue;
    seen.add(id);
    deduped.push({ id, label: model.label.trim() || id });
  }
  return deduped;
}

View on GitHub (pinned to 01ad858492)