{"record":{"id":"b18ff5ea9b811523","repo":"HKUDS/Vibe-Trading","slug":"signal-cli-daemon-not-responding-e","errorCode":null,"errorMessage":"signal-cli daemon not responding: {e}","messagePattern":"signal-cli daemon not responding: (.+?)","errorType":"error_code","errorClass":"ConnectionRefusedError","httpStatus":null,"severity":"critical","filePath":"agent/src/channels/signal.py","lineNumber":481,"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":463,"sourceCodeEnd":499,"githubUrl":"https://github.com/HKUDS/Vibe-Trading/blob/80ffdda44c5c4db0dd84d70e051cca591cea67df/agent/src/channels/signal.py#L463-L499","documentation":"Generic wrapper raised when the connection check to signal-cli raises any exception (connection refused, timeout, DNS failure); the original error is included in the message.","triggerScenarios":"start() in HTTP mode when /api/v1/check cannot be reached at all: daemon not running, wrong port, firewall, or TLS failure.","commonSituations":"signal-cli daemon not started, container networking misconfiguration, or signal_endpoint typo.","solutions":["Start signal-cli in REST mode and confirm the port","Fix signal_endpoint URL/port in config","Check firewall/container network rules allowing the connection"],"exampleFix":null,"handlingStrategy":"retry","validationCode":"import socket, httpx\n# fail fast if TCP is unreachable\nsocket.create_connection((host, port), timeout=3).close()","typeGuard":null,"tryCatchPattern":"except ConnectionRefusedError as e:\n    if 'not responding' in str(e):\n        await asyncio.sleep(min(backoff, 60)); backoff *= 2; retry_start()","preventionTips":["Health-check signal-cli before starting the channel","Watch container exit/restart of the signal-cli service"],"tags":["signal","network","connection","startup"],"backgroundTag":"connection-refused","analyzedSha":"80ffdda44c5c4db0dd84d70e051cca591cea67df","analyzedAt":"2026-08-28T12:46:38.989Z","schemaVersion":2},"datasetVersion":"2026-08-28T16:17:29.566Z"}