{"record":{"id":"db29f27116ad888e","repo":"paperclipai/paperclip","slug":"bridge-server-did-not-expose-a-tcp-address","errorCode":null,"errorMessage":"Bridge server did not expose a TCP address.","messagePattern":"Bridge server did not expose a TCP address\\.","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/adapter-utils/src/sandbox-callback-bridge.ts","lineNumber":2177,"sourceCode":"\n// A crashed gateway is a dead loopback port for the rest of the run: nothing\n// inside the sandbox respawns this process, and every later agent API call\n// then fails at the connection level. Once the gateway is ready, log an\n// uncaught fault to stderr (the host redirects it into logs/bridge.log) and\n// keep serving — the relay holds no state a fault can corrupt beyond the one\n// request it interrupted. Before readiness the same fault means the gateway\n// can never become usable (a failed bind, a failed readiness write), so exit\n// instead: surviving there only leaves an un-ready zombie behind while the\n// host waits out its readiness poll.\nlet gatewayReady = false;\nprocess.on(\"uncaughtException\", (error) => {\n  process.stderr.write(\n    \"[paperclip-bridge] uncaught exception: \" + (error && error.stack ? error.stack : String(error)) + \"\\\\n\",\n  );\n  if (!gatewayReady) {\n    process.exit(1);\n  }\n});\nprocess.on(\"unhandledRejection\", (reason) => {\n  const detail = reason && typeof reason === \"object\" && \"stack\" in reason ? reason.stack : String(reason);\n  process.stderr.write(\"[paperclip-bridge] unhandled rejection: \" + detail + \"\\\\n\");\n  if (!gatewayReady) {\n    process.exit(1);\n  }\n});\n\n// The embedded zero-dependency frame codec. The duplex gateway uses it; the file\n// gateway ignores it.\n${DUPLEX_GATEWAY_CODEC_SOURCE}\n\n// The embedded zero-dependency process body-byte ledger. Both gateway modes\n// use it: readBodyBytes reserves against it, and each mode's request\n// handler releases what it reserved once the body is no longer needed.\n${BRIDGE_PROCESS_BODY_LEDGER_SOURCE}\n\n// The multiplier matches HTTP2_BRIDGE_MAX_CONCURRENT_STREAMS (4) in","sourceCodeStart":2159,"sourceCodeEnd":2195,"githubUrl":"https://github.com/paperclipai/paperclip/blob/01ad8584922b5d85292b1723cae71fa0d9b07a19/packages/adapter-utils/src/sandbox-callback-bridge.ts#L2159-L2195","documentation":"Thrown by the sandbox callback bridge server startup. Fires after server.listen when server.address() returns null or a pipe/string instead of a TCP address object, meaning the OS did not give the bridge a bound TCP endpoint to publish in ready.json.","triggerScenarios":"Thrown at packages/adapter-utils/src/sandbox-callback-bridge.ts:1880 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Check the bridge server configuration so it binds a TCP address, and retry."],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"01ad8584922b5d85292b1723cae71fa0d9b07a19","analyzedAt":"2026-08-21T17:58:32.592Z","contentChangedAt":"2026-08-21T17:58:32.592Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}