{"record":{"id":"e46fe4cdafd91e38","repo":"HKUDS/nanobot","slug":"signal-cli-daemon-not-responding-e","errorCode":null,"errorMessage":"signal-cli daemon not responding: {e}","messagePattern":"signal-cli daemon not responding: (.+?)","errorType":"exception","errorClass":"ConnectionRefusedError","httpStatus":null,"severity":"error","filePath":"nanobot/channels/signal/runtime.py","lineNumber":495,"sourceCode":"            try:\n                self.logger.info(\"Connecting to signal-cli daemon at {}...\", base_url)\n\n                # Create HTTP client\n                self._http = httpx.AsyncClient(\n                    timeout=self._HTTP_TIMEOUT_SECONDS, base_url=base_url\n                )\n\n                # Test connection\n                try:\n                    response = await self._http.get(\"/api/v1/check\")\n                    if response.status_code == 200:\n                        self.logger.info(\"Connected to signal-cli daemon\")\n                    else:\n                        raise ConnectionRefusedError(\n                            f\"signal-cli daemon check returned status {response.status_code}\"\n                        )\n                except Exception as e:\n                    raise ConnectionRefusedError(f\"signal-cli daemon not responding: {e}\")\n\n                # Reset reconnect delay after successful connection check.\n                reconnect_delay_s = 1.0\n\n                # Ensure account-level typing indicators are enabled.\n                await self._ensure_typing_indicators_enabled()\n\n                # Start SSE receiver and supervise it. If it exits while we're still\n                # running, treat it as a disconnect and reconnect.\n                self._sse_task = asyncio.create_task(self._sse_receive_loop())\n                await self._sse_task\n                if self._running:\n                    raise ConnectionError(\"Signal SSE stream ended unexpectedly\")\n\n            except asyncio.CancelledError:\n                break\n            except ConnectionRefusedError as e:\n                self.logger.error(","sourceCodeStart":477,"sourceCodeEnd":513,"githubUrl":"https://github.com/HKUDS/nanobot/blob/42f37dc4c0e409eac7818a82d165c5f2757bc075/nanobot/channels/signal/runtime.py#L477-L513","documentation":"Wrapper for any exception raised while probing the signal-cli daemon's /api/v1/check endpoint (connection refused, timeout, TLS error, etc.). It is re-raised as ConnectionRefusedError inside the _start_http_mode reconnect loop so transport-level failures are uniformly reported as 'daemon not responding'.","triggerScenarios":"Thrown at nanobot/channels/signal/runtime.py:495 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Confirm the signal-cli daemon (signal-cli-rest-api) is running and listening on the configured host/port","Open firewall/port access from the bot to the daemon host","Fix the daemon URL in the Signal channel configuration"],"exampleFix":null,"handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"42f37dc4c0e409eac7818a82d165c5f2757bc075","analyzedAt":"2026-08-26T00:18:52.276Z","contentChangedAt":"2026-08-26T00:18:52.276Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}