@@ -64,6 +64,7 @@ use crate::api_client::model::{
64
64
UserInputMessageContext ,
65
65
} ;
66
66
use crate :: cli:: chat:: util:: shared_writer:: SharedWriter ;
67
+ use crate :: database:: Database ;
67
68
use crate :: mcp_client:: Prompt ;
68
69
use crate :: platform:: Context ;
69
70
@@ -222,12 +223,16 @@ impl ConversationState {
222
223
}
223
224
224
225
/// Sets the response message according to the currently set [Self::next_message].
225
- pub fn push_assistant_message ( & mut self , message : AssistantMessage ) {
226
+ pub fn push_assistant_message ( & mut self , message : AssistantMessage , database : & mut Database ) {
226
227
debug_assert ! ( self . next_message. is_some( ) , "next_message should exist" ) ;
227
228
let next_user_message = self . next_message . take ( ) . expect ( "next user message should exist" ) ;
228
229
229
230
self . append_assistant_transcript ( & message) ;
230
231
self . history . push_back ( ( next_user_message, message) ) ;
232
+
233
+ if let Ok ( cwd) = std:: env:: current_dir ( ) {
234
+ database. set_conversation_by_path ( cwd, self ) . ok ( ) ;
235
+ }
231
236
}
232
237
233
238
/// Returns the conversation id.
@@ -951,7 +956,8 @@ mod tests {
951
956
for i in 0 ..=( MAX_CONVERSATION_STATE_HISTORY_LEN + 100 ) {
952
957
let s = conversation_state. as_sendable_conversation_state ( true ) . await ;
953
958
assert_conversation_state_invariants ( s, i) ;
954
- conversation_state. push_assistant_message ( AssistantMessage :: new_response ( None , i. to_string ( ) ) ) ;
959
+ conversation_state
960
+ . push_assistant_message ( AssistantMessage :: new_response ( None , i. to_string ( ) ) , & mut database) ;
955
961
conversation_state. set_next_user_message ( i. to_string ( ) ) . await ;
956
962
}
957
963
}
@@ -977,13 +983,14 @@ mod tests {
977
983
let s = conversation_state. as_sendable_conversation_state ( true ) . await ;
978
984
assert_conversation_state_invariants ( s, i) ;
979
985
980
- conversation_state. push_assistant_message ( AssistantMessage :: new_tool_use ( None , i . to_string ( ) , vec ! [
981
- AssistantToolUse {
986
+ conversation_state. push_assistant_message (
987
+ AssistantMessage :: new_tool_use ( None , i . to_string ( ) , vec ! [ AssistantToolUse {
982
988
id: "tool_id" . to_string( ) ,
983
989
name: "tool name" . to_string( ) ,
984
990
args: serde_json:: Value :: Null ,
985
- } ,
986
- ] ) ) ;
991
+ } ] ) ,
992
+ & mut database,
993
+ ) ;
987
994
conversation_state. add_tool_results ( vec ! [ ToolUseResult {
988
995
tool_use_id: "tool_id" . to_string( ) ,
989
996
content: vec![ ] ,
@@ -1005,20 +1012,22 @@ mod tests {
1005
1012
let s = conversation_state. as_sendable_conversation_state ( true ) . await ;
1006
1013
assert_conversation_state_invariants ( s, i) ;
1007
1014
if i % 3 == 0 {
1008
- conversation_state. push_assistant_message ( AssistantMessage :: new_tool_use ( None , i . to_string ( ) , vec ! [
1009
- AssistantToolUse {
1015
+ conversation_state. push_assistant_message (
1016
+ AssistantMessage :: new_tool_use ( None , i . to_string ( ) , vec ! [ AssistantToolUse {
1010
1017
id: "tool_id" . to_string( ) ,
1011
1018
name: "tool name" . to_string( ) ,
1012
1019
args: serde_json:: Value :: Null ,
1013
- } ,
1014
- ] ) ) ;
1020
+ } ] ) ,
1021
+ & mut database,
1022
+ ) ;
1015
1023
conversation_state. add_tool_results ( vec ! [ ToolUseResult {
1016
1024
tool_use_id: "tool_id" . to_string( ) ,
1017
1025
content: vec![ ] ,
1018
1026
status: ToolResultStatus :: Success ,
1019
1027
} ] ) ;
1020
1028
} else {
1021
- conversation_state. push_assistant_message ( AssistantMessage :: new_response ( None , i. to_string ( ) ) ) ;
1029
+ conversation_state
1030
+ . push_assistant_message ( AssistantMessage :: new_response ( None , i. to_string ( ) ) , & mut database) ;
1022
1031
conversation_state. set_next_user_message ( i. to_string ( ) ) . await ;
1023
1032
}
1024
1033
}
@@ -1066,7 +1075,8 @@ mod tests {
1066
1075
1067
1076
assert_conversation_state_invariants ( s, i) ;
1068
1077
1069
- conversation_state. push_assistant_message ( AssistantMessage :: new_response ( None , i. to_string ( ) ) ) ;
1078
+ conversation_state
1079
+ . push_assistant_message ( AssistantMessage :: new_response ( None , i. to_string ( ) ) , & mut database) ;
1070
1080
conversation_state. set_next_user_message ( i. to_string ( ) ) . await ;
1071
1081
}
1072
1082
}
@@ -1134,7 +1144,8 @@ mod tests {
1134
1144
s. user_input_message. content
1135
1145
) ;
1136
1146
1137
- conversation_state. push_assistant_message ( AssistantMessage :: new_response ( None , i. to_string ( ) ) ) ;
1147
+ conversation_state
1148
+ . push_assistant_message ( AssistantMessage :: new_response ( None , i. to_string ( ) ) , & mut database) ;
1138
1149
conversation_state. set_next_user_message ( i. to_string ( ) ) . await ;
1139
1150
}
1140
1151
}
0 commit comments