{"record":{"id":"9e82c6971222f115","repo":"paperclipai/paperclip","slug":"paperclip-adapters-declares-adapter-type-s-with-n","errorCode":null,"errorMessage":"PAPERCLIP_ADAPTERS declares adapter type(s) with no installed adapter: ${missing.join(\", \")}","messagePattern":"PAPERCLIP_ADAPTERS declares adapter type\\(s\\) with no installed adapter: (.+?)","errorType":"validation","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"server/src/services/adapter-registry-bootstrap.ts","lineNumber":81,"sourceCode":"}\n\n/**\n * Reconcile availability: every known server adapter NOT enabled in the declared\n * registry is disabled; declared+enabled ones are enabled. Throws if a declared\n * adapterType has no installed adapter (cannot offer a harness with no\n * implementation). No-op when `registry` is null.\n */\nexport function reconcileAdapterAvailability(\n  registry: AdapterRegistryEntryParsed[] | null,\n): { enabled: string[]; disabled: string[] } {\n  if (!registry) return { enabled: [], disabled: [] };\n\n  const knownTypes = new Set(listServerAdapters().map((a) => a.type));\n  const declared = new Map(registry.map((e) => [e.adapterType, e]));\n\n  const missing = [...declared.keys()].filter((t) => !knownTypes.has(t));\n  if (missing.length > 0) {\n    throw new Error(\n      `PAPERCLIP_ADAPTERS declares adapter type(s) with no installed adapter: ${missing.join(\", \")}`,\n    );\n  }\n\n  const enabled: string[] = [];\n  const disabled: string[] = [];\n  for (const type of knownTypes) {\n    const entry = declared.get(type);\n    const shouldEnable = entry !== undefined && entry.enabled !== false;\n    setAdapterDisabled(type, !shouldEnable);\n    (shouldEnable ? enabled : disabled).push(type);\n  }\n\n  logger.info({ enabled, disabled }, \"reconciled adapter availability from PAPERCLIP_ADAPTERS\");\n  return { enabled, disabled };\n}\n","sourceCodeStart":63,"sourceCodeEnd":98,"githubUrl":"https://github.com/paperclipai/paperclip/blob/120ae5428fa29bee300bcf806491cd4d965fbb7c/server/src/services/adapter-registry-bootstrap.ts#L63-L98","documentation":"Reconciliation failure in reconcileAdapterAvailability: the declared registry enables adapter types that have no installed adapter implementation in the server. The server cannot offer a harness with no implementation, so it refuses to start and lists the missing types.","triggerScenarios":"Thrown at server/src/services/adapter-registry-bootstrap.ts:81 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Install the missing adapter package(s) named in the message, or remove them from PAPERCLIP_ADAPTERS."],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"120ae5428fa29bee300bcf806491cd4d965fbb7c","analyzedAt":"2026-08-18T22:49:45.177Z","contentChangedAt":"2026-08-18T22:49:45.177Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}