{"record":{"id":"dc7cf1d05bef1c7f","repo":"paperclipai/paperclip","slug":"hostname-is-required","errorCode":null,"errorMessage":"Hostname is required","messagePattern":"Hostname is required","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"cli/src/config/hostnames.ts","lineNumber":4,"sourceCode":"export function normalizeHostnameInput(raw: string): string {\n  const input = raw.trim();\n  if (!input) {\n    throw new Error(\"Hostname is required\");\n  }\n\n  try {\n    const url = input.includes(\"://\") ? new URL(input) : new URL(`http://${input}`);\n    const hostname = url.hostname.trim().toLowerCase();\n    if (!hostname) throw new Error(\"Hostname is required\");\n    return hostname;\n  } catch {\n    throw new Error(`Invalid hostname: ${raw}`);\n  }\n}\n\nexport function parseHostnameCsv(raw: string): string[] {\n  if (!raw.trim()) return [];\n  const unique = new Set<string>();\n  for (const part of raw.split(\",\")) {\n    const hostname = normalizeHostnameInput(part);\n    unique.add(hostname);","sourceCodeStart":1,"sourceCodeEnd":22,"githubUrl":"https://github.com/paperclipai/paperclip/blob/120ae5428fa29bee300bcf806491cd4d965fbb7c/cli/src/config/hostnames.ts#L1-L22","documentation":"normalizeHostnameInput got an empty trimmed input (first check), so there is no hostname to allowlist; a required-input guard for hostnames.","triggerScenarios":"Thrown at cli/src/config/hostnames.ts:4 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Provide a non-empty hostname value."],"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-23T08:17:48.524Z"}