{"record":{"id":"11142f4a69482b31","repo":"paperclipai/paperclip","slug":"paperclip-bridge-api-key-is-required","errorCode":null,"errorMessage":"PAPERCLIP_BRIDGE_API_KEY is required","messagePattern":"PAPERCLIP_BRIDGE_API_KEY is required","errorType":"validation","errorClass":"UsageError","httpStatus":null,"severity":"error","filePath":"packages/adapters/hermes/skills/paperclip-task-bridge/paperclip-task.mjs","lineNumber":107,"sourceCode":"  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) {\n  const direct = readStringFlag(args, textFlag);\n  const file = readStringFlag(args, fileFlag);\n  if (direct && file) throw new UsageError(`Use either --${textFlag} or --${fileFlag}, not both`);\n  if (direct) return direct;\n  if (!file) return null;\n  if (file === \"-\") {\n    return await new Promise((resolve, reject) => {\n      let data = \"\";","sourceCodeStart":89,"sourceCodeEnd":125,"githubUrl":"https://github.com/paperclipai/paperclip/blob/120ae5428fa29bee300bcf806491cd4d965fbb7c/packages/adapters/hermes/skills/paperclip-task-bridge/paperclip-task.mjs#L89-L125","documentation":"Credential validation in getConfig: neither PAPERCLIP_BRIDGE_API_KEY nor PAPERCLIP_API_KEY is set (after trim), so the bridge skill has no bearer credential to authenticate to the Paperclip API. Export one of the env vars in the skill's environment before running the bridge.","triggerScenarios":"Thrown at packages/adapters/hermes/skills/paperclip-task-bridge/paperclip-task.mjs:107 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Set the PAPERCLIP_BRIDGE_API_KEY environment variable to a valid agent API key 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-14T00:17:10.932Z"}