diff --git a/tools/session_search_tool.py b/tools/session_search_tool.py index d7cabcc9e..3ff36f940 100644 --- a/tools/session_search_tool.py +++ b/tools/session_search_tool.py @@ -392,23 +392,30 @@ def session_search( }, ensure_ascii=False) summaries = [] - for (session_id, match_info, _, _), result in zip(tasks, results): + for (session_id, match_info, conversation_text, _), result in zip(tasks, results): if isinstance(result, Exception): logging.warning( "Failed to summarize session %s: %s", - session_id, - result, - exc_info=True, + session_id, result, exc_info=True, ) - continue + result = None + + entry = { + "session_id": session_id, + "when": _format_timestamp(match_info.get("session_started")), + "source": match_info.get("source", "unknown"), + "model": match_info.get("model"), + } + if result: - summaries.append({ - "session_id": session_id, - "when": _format_timestamp(match_info.get("session_started")), - "source": match_info.get("source", "unknown"), - "model": match_info.get("model"), - "summary": result, - }) + entry["summary"] = result + else: + # Fallback: raw preview so matched sessions aren't silently + # dropped when the summarizer is unavailable (fixes #3409). + preview = (conversation_text[:500] + "\n…[truncated]") if conversation_text else "No preview available." + entry["summary"] = f"[Raw preview — summarization unavailable]\n{preview}" + + summaries.append(entry) return json.dumps({ "success": True,