From 49dd0b1cb5f9e382097bc14f3b05529aeb2a2b11 Mon Sep 17 00:00:00 2001 From: doer <840004959@qq.com> Date: Sat, 23 May 2026 16:28:06 +0800 Subject: [PATCH] feat(cli): include system prompts in HTML export --- hermes_cli/session_export_html.py | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/hermes_cli/session_export_html.py b/hermes_cli/session_export_html.py index d11cb791251..286e566e702 100644 --- a/hermes_cli/session_export_html.py +++ b/hermes_cli/session_export_html.py @@ -18,6 +18,7 @@ ICON_WRENCH = ' @@ -272,6 +273,12 @@ HTML_TEMPLATE = """ border-left: 4px solid var(--accent-color); }} + .message-system {{ + background-color: var(--bg-color); + border-left: 4px solid var(--secondary-text); + opacity: 0.9; + }} + .message-tool {{ background-color: #f8fafc; border-style: dotted; @@ -286,6 +293,11 @@ HTML_TEMPLATE = """ background-color: #041c1c; }} + .message-system {{ + background-color: #020617; + border-left: 4px solid var(--secondary-text); + }} + .message-tool {{ background-color: #0f172a; }} @@ -599,6 +611,8 @@ def _generate_messages_html(messages: List[Dict[str, Any]]) -> str: role_icon = ICON_USER elif role == "assistant": role_icon = ICON_BOT + elif role == "system": + role_icon = ICON_SHIELD # Handle multimodal or complex content if isinstance(content, list): @@ -725,7 +739,22 @@ def generate_multi_session_html_export(sessions: List[Dict[str, Any]]) -> str: model = s.get("model", "Unknown") started_at = _format_timestamp(s.get("started_at", 0)) messages = s.get("messages", []) - messages_html = _generate_messages_html(messages) + + # System Prompt Handling: Prepend if present in session metadata and not already in messages + system_prompt = s.get("system_prompt") + all_messages = [] + if system_prompt: + # Avoid duplicating if the first message in the list is already the system prompt + first_msg = messages[0] if messages else None + if not (first_msg and first_msg.get("role") == "system" and first_msg.get("content") == system_prompt): + all_messages.append({ + "role": "system", + "content": system_prompt, + "timestamp": s.get("started_at", 0) + }) + all_messages.extend(messages) + + messages_html = _generate_messages_html(all_messages) view_class = "session-view" if not is_multi: view_class += " active"