{"record":{"id":"bcc2121f80e72b26","repo":"paperclipai/paperclip","slug":"paperclip-api-url-is-required","errorCode":null,"errorMessage":"PAPERCLIP_API_URL is required","messagePattern":"PAPERCLIP_API_URL is required","errorType":"validation","errorClass":"UsageError","httpStatus":null,"severity":"error","filePath":"packages/adapters/hermes/skills/paperclip-task-bridge/paperclip-task.mjs","lineNumber":99,"sourceCode":"function readStringFlag(args, name) {\n  const value = args[name];\n  if (typeof value !== \"string\" || value.trim().length === 0) return null;\n  return value;\n}\n\nfunction requireStringFlag(args, name) {\n  const value = readStringFlag(args, name);\n  if (!value) throw new UsageError(`Missing required --${name}`);\n  return value;\n}\n\nfunction boolFlag(args, name) {\n  return args[name] === true;\n}\n\nfunction normalizeApiBaseUrl(raw) {\n  if (!raw || typeof raw !== \"string\" || raw.trim().length === 0) {\n    throw new UsageError(\"PAPERCLIP_API_URL is required\");\n  }\n  const trimmed = raw.trim().replace(/\\/+$/, \"\");\n  return trimmed.endsWith(\"/api\") ? trimmed : `${trimmed}/api`;\n}\n\nfunction getConfig() {\n  const apiKey = process.env.PAPERCLIP_BRIDGE_API_KEY?.trim() || process.env.PAPERCLIP_API_KEY?.trim();\n  if (!apiKey) throw new UsageError(\"PAPERCLIP_BRIDGE_API_KEY is required\");\n  return {\n    apiBaseUrl: normalizeApiBaseUrl(process.env.PAPERCLIP_API_URL),\n    apiKey,\n    runId: process.env.PAPERCLIP_RUN_ID?.trim() || null,\n    companyId: process.env.PAPERCLIP_COMPANY_ID?.trim() || null,\n    agentId: process.env.PAPERCLIP_AGENT_ID?.trim() || null,\n  };\n}\n\nasync function readBody(args, textFlag, fileFlag) {","sourceCodeStart":81,"sourceCodeEnd":117,"githubUrl":"https://github.com/paperclipai/paperclip/blob/120ae5428fa29bee300bcf806491cd4d965fbb7c/packages/adapters/hermes/skills/paperclip-task-bridge/paperclip-task.mjs#L81-L117","documentation":"Config validation in normalizeApiBaseUrl: the --api-url flag (or equivalent) is missing, empty, or whitespace-only, so the bridge cannot build its API base URL. Trailing slashes are trimmed and /api appended when valid; provide the Paperclip instance base URL to proceed.","triggerScenarios":"Thrown at packages/adapters/hermes/skills/paperclip-task-bridge/paperclip-task.mjs:99 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Set the PAPERCLIP_API_URL environment variable to your Paperclip instance URL before running the bridge."],"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-14T05:17:10.506Z"}