diff --git a/src/kimi_cli/soul/kimisoul.py b/src/kimi_cli/soul/kimisoul.py index dfe99eac4..197ecbdd3 100644 --- a/src/kimi_cli/soul/kimisoul.py +++ b/src/kimi_cli/soul/kimisoul.py @@ -21,6 +21,7 @@ from kosong.message import Message from tenacity import RetryCallState, retry_if_exception, stop_after_attempt, wait_exponential_jitter +from kimi_cli.exception import MCPRuntimeError from kimi_cli.approval_runtime import ( ApprovalSource, get_current_approval_source_or_none, @@ -679,6 +680,8 @@ async def _agent_loop(self) -> TurnOutcome: wire_send(MCPLoadingBegin()) try: await self.wait_for_background_mcp_loading() + except MCPRuntimeError as exc: + logger.warning("MCP server loading failed, continuing without MCP tools: {}", exc) finally: if loading: wire_send(StatusUpdate(mcp_status=self._mcp_status_snapshot())) diff --git a/src/kimi_cli/web/runner/process.py b/src/kimi_cli/web/runner/process.py index 91bfe7eb0..c0f2ff3b3 100644 --- a/src/kimi_cli/web/runner/process.py +++ b/src/kimi_cli/web/runner/process.py @@ -355,6 +355,8 @@ async def _read_loop(self) -> None: raise except Exception as e: logger.warning(f"Unexpected error in read loop: {e.__class__.__name__} {e}") + self._in_flight_prompt_ids.clear() + await self._emit_status("error", reason="read_loop_error", detail=str(e)) async def _handle_out_message(self, message: JSONRPCOutMessage) -> None: """Handle outbound message from worker."""