66from agent_chat_cli .components .chat_history import ChatHistory
77from agent_chat_cli .components .messages import (
88 AgentMessage as AgentMessageWidget ,
9- MessageType ,
9+ Message ,
10+ RoleType ,
1011 ToolMessage ,
1112)
12- from agent_chat_cli .core .agent_loop import AgentMessage
13- from agent_chat_cli .utils .enums import AgentMessageType , ContentType
13+ from agent_chat_cli .core .agent_loop import AppEvent
14+ from agent_chat_cli .utils .enums import AppEventType , ContentType
1415from agent_chat_cli .utils .logger import log_json
1516
1617if TYPE_CHECKING :
@@ -32,31 +33,48 @@ def __init__(self, app: "AgentChatCLIApp") -> None:
3233 self .app = app
3334 self ._stream = StreamBuffer ()
3435
35- async def render_message (self , message : AgentMessage ) -> None :
36- match message .type :
37- case AgentMessageType .STREAM_EVENT :
38- await self ._render_stream_event (message )
36+ async def handle_app_event (self , event : AppEvent ) -> None :
37+ match event .type :
38+ case AppEventType .STREAM_EVENT :
39+ await self ._render_stream_event (event )
3940
40- case AgentMessageType .ASSISTANT :
41- await self ._render_assistant_message (message )
41+ case AppEventType .ASSISTANT :
42+ await self ._render_assistant_message (event )
4243
43- case AgentMessageType .SYSTEM :
44- await self ._render_system_message (message )
44+ case AppEventType .SYSTEM :
45+ await self ._render_system_message (event )
4546
46- case AgentMessageType .USER :
47- await self ._render_user_message (message )
47+ case AppEventType .USER :
48+ await self ._render_user_message (event )
4849
49- case AgentMessageType .TOOL_PERMISSION_REQUEST :
50- await self ._render_tool_permission_request (message )
50+ case AppEventType .TOOL_PERMISSION_REQUEST :
51+ await self ._render_tool_permission_request (event )
5152
52- case AgentMessageType .RESULT :
53+ case AppEventType .RESULT :
5354 await self ._on_complete ()
5455
55- if message .type is not AgentMessageType .RESULT :
56+ if event .type is not AppEventType .RESULT :
5657 await self .app .ui_state .scroll_to_bottom ()
5758
58- async def _render_stream_event (self , message : AgentMessage ) -> None :
59- text_chunk = message .data .get ("text" , "" )
59+ async def add_message (self , type : RoleType , content : str ) -> None :
60+ match type :
61+ case RoleType .USER :
62+ message = Message .user (content )
63+ case RoleType .SYSTEM :
64+ message = Message .system (content )
65+ case RoleType .AGENT :
66+ message = Message .agent (content )
67+ case _:
68+ raise ValueError (f"Unsupported message type: { type } " )
69+
70+ chat_history = self .app .query_one (ChatHistory )
71+ chat_history .add_message (message )
72+
73+ self .app .ui_state .start_thinking ()
74+ await self .app .ui_state .scroll_to_bottom ()
75+
76+ async def _render_stream_event (self , event : AppEvent ) -> None :
77+ text_chunk = event .data .get ("text" , "" )
6078
6179 if not text_chunk :
6280 return
@@ -77,8 +95,8 @@ async def _render_stream_event(self, message: AgentMessage) -> None:
7795 markdown = self ._stream .widget .query_one (Markdown )
7896 markdown .update (self ._stream .text )
7997
80- async def _render_assistant_message (self , message : AgentMessage ) -> None :
81- content_blocks = message .data .get ("content" , [])
98+ async def _render_assistant_message (self , event : AppEvent ) -> None :
99+ content_blocks = event .data .get ("content" , [])
82100 chat_history = self .app .query_one (ChatHistory )
83101
84102 for block in content_blocks :
@@ -97,35 +115,27 @@ async def _render_assistant_message(self, message: AgentMessage) -> None:
97115
98116 await chat_history .mount (tool_msg )
99117
100- async def _render_system_message (self , message : AgentMessage ) -> None :
101- system_content = (
102- message .data if isinstance (message .data , str ) else str (message .data )
103- )
118+ async def _render_system_message (self , event : AppEvent ) -> None :
119+ system_content = event .data if isinstance (event .data , str ) else str (event .data )
104120
105- await self .app .actions .add_message_to_chat_history (
106- MessageType .SYSTEM , system_content
107- )
121+ await self .add_message (RoleType .SYSTEM , system_content )
108122
109- async def _render_user_message (self , message : AgentMessage ) -> None :
110- user_content = (
111- message .data if isinstance (message .data , str ) else str (message .data )
112- )
123+ async def _render_user_message (self , event : AppEvent ) -> None :
124+ user_content = event .data if isinstance (event .data , str ) else str (event .data )
113125
114- await self .app .actions .add_message_to_chat_history (
115- MessageType .USER , user_content
116- )
126+ await self .add_message (RoleType .USER , user_content )
117127
118- async def _render_tool_permission_request (self , message : AgentMessage ) -> None :
128+ async def _render_tool_permission_request (self , event : AppEvent ) -> None :
119129 log_json (
120130 {
121131 "event" : "showing_permission_prompt" ,
122- "tool_name" : message .data .get ("tool_name" , "" ),
132+ "tool_name" : event .data .get ("tool_name" , "" ),
123133 }
124134 )
125135
126136 self .app .ui_state .show_permission_prompt (
127- tool_name = message .data .get ("tool_name" , "" ),
128- tool_input = message .data .get ("tool_input" , {}),
137+ tool_name = event .data .get ("tool_name" , "" ),
138+ tool_input = event .data .get ("tool_input" , {}),
129139 )
130140
131141 async def _on_complete (self ) -> None :
0 commit comments