{"record":{"id":"09b3a01d8ad42d3c","repo":"paperclipai/paperclip","slug":"invalid-adapter-override-raw-use-slug-type","errorCode":null,"errorMessage":"Invalid --adapter-override \"${raw}\". Use slug=type.","messagePattern":"Invalid --adapter-override \"(.+?)\"\\. Use slug=type\\.","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"cli/src/commands/client/teams.ts","lineNumber":508,"sourceCode":"  for (const raw of values) {\n    const [key, value] = parseKeyValueOption(raw, \"--secret-value\", \"key=value\");\n    if (!key) {\n      throw new Error(`Invalid --secret-value \"${raw}\". Use key=value.`);\n    }\n    result[key] = value;\n  }\n  return result;\n}\n\nfunction parseAdapterOverrides(\n  values: string[] | undefined,\n): CatalogTeamInstallOptions[\"adapterOverrides\"] | undefined {\n  if (!values || values.length === 0) return undefined;\n  const result: NonNullable<CatalogTeamInstallOptions[\"adapterOverrides\"]> = {};\n  for (const raw of values) {\n    const [slug, adapterType] = parseKeyValueOption(raw, \"--adapter-override\", \"slug=type\");\n    if (!slug || !adapterType) {\n      throw new Error(`Invalid --adapter-override \"${raw}\". Use slug=type.`);\n    }\n    result[slug] = { adapterType };\n  }\n  return result;\n}\n\nfunction parseKeyValueOption(raw: string, flag: string, format: string): [string, string] {\n  const separator = raw.indexOf(\"=\");\n  if (separator <= 0) {\n    throw new Error(`Invalid ${flag} \"${raw}\". Use ${format}.`);\n  }\n  return [raw.slice(0, separator).trim(), raw.slice(separator + 1).trim()];\n}\n\nfunction removeUndefined<T extends Record<string, unknown>>(input: T): T {\n  return Object.fromEntries(Object.entries(input).filter(([, value]) => value !== undefined)) as T;\n}\n","sourceCodeStart":490,"sourceCodeEnd":526,"githubUrl":"https://github.com/paperclipai/paperclip/blob/67001ec6eb96ae601aa27bc91d9b2415d665334a/cli/src/commands/client/teams.ts#L490-L526","documentation":"Thrown by parseAdapterOverrides in the CLI teams command when an --adapter-override value splits on '=' but yields an empty slug or empty adapter type. The flag expects slug=type pairs that map a catalog adapter slug to an adapter type. It is a CLI argument validation error surfaced before any network call.","triggerScenarios":"Running `paperclipai ... teams install --adapter-override \"=claude\"` (empty slug), `--adapter-override \"codex=\"` (empty type), or `--adapter-override \"  =  \"` (whitespace only). parseKeyValueOption returns trimmed halves; if either is empty the post-split guard at teams.ts:510 fires.","commonSituations":"Shell quoting mistakes that drop one side of the pair, copy-pasting an override whose type was a variable that expanded to empty, or typos like `slug:type` (colon instead of equals).","solutions":["Re-run with a well-formed pair, e.g. --adapter-override \"my-slug=claude\".","Check shell expansion: quote the whole value and confirm the slug and type are non-empty after trim.","If passing multiple overrides, pass --adapter-override once per pair rather than comma-separating."],"exampleFix":"// before\n--adapter-override \"=claude\"\n// after\n--adapter-override \"my-agent=claude\"","handlingStrategy":"validation","validationCode":"function isValidAdapterOverride(raw: string): boolean {\n  const sep = raw.indexOf(\"=\");\n  if (sep <= 0) return false;\n  const slug = raw.slice(0, sep).trim();\n  const type = raw.slice(sep + 1).trim();\n  return slug.length > 0 && type.length > 0;\n}\n\nfor (const raw of overrides) {\n  if (!isValidAdapterOverride(raw)) {\n    console.error(`Skipping invalid --adapter-override \"${raw}\". Expected slug=type.`);\n    continue;\n  }\n}","typeGuard":"function isAdapterOverridePair(raw: string): raw is string {\n  const sep = raw.indexOf(\"=\");\n  if (sep <= 0) return false;\n  return raw.slice(0, sep).trim().length > 0 && raw.slice(sep + 1).trim().length > 0;\n}","tryCatchPattern":null,"preventionTips":["Quote the whole slug=type value so the shell passes it as one argv entry.","Validate override strings in your wrapper script before invoking the CLI.","Pass each override as a separate --adapter-override flag rather than comma-separated."],"tags":["cli","argument-validation","teams","adapters"],"backgroundTag":null,"analyzedSha":"67001ec6eb96ae601aa27bc91d9b2415d665334a","analyzedAt":"2026-08-12T12:05:45.408Z","schemaVersion":2},"datasetVersion":"2026-08-12T18:17:37.767Z"}