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
- 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)