@@ -1104,23 +1104,7 @@ func (r *REPL) sendToAI(input string, redirectType string, redirectTarget string
11041104
11051105 // Handle conversation history based on logging and reply settings
11061106 if r .configOptions .GetBool ("chat.log" ) {
1107- // When logging is enabled, use normal message history behavior
1108- if r .configOptions .GetBool ("chat.replies" ) {
1109- // Include all messages
1110- messages = append (messages , r .messages ... )
1111- } else {
1112- // Include only user messages
1113- for _ , msg := range r .messages {
1114- if msg .Role == "user" {
1115- messages = append (messages , msg )
1116- } else {
1117- msg2 := msg
1118- msg2 .Content = ""
1119- // include empty response from the llm
1120- messages = append (messages , msg2 )
1121- }
1122- }
1123- }
1107+ messages = append (messages , r .messagesForPrompt ()... )
11241108 }
11251109
11261110 if r .configOptions .GetBool ("mcp.use" ) {
@@ -1338,7 +1322,7 @@ func (r *REPL) sendToAI(input string, redirectType string, redirectTarget string
13381322 }
13391323
13401324 // Create assistant message
1341- assistantMessage := llm. Message { Role : "assistant" , Content : response }
1325+ assistantMessage := r . assistantMessageForLog ( response )
13421326
13431327 if r .configOptions .GetBool ("chat.log" ) {
13441328 // Save to conversation history when logging is enabled
@@ -1428,13 +1412,45 @@ func (r *REPL) regularResponse(input string) error {
14281412func (r * REPL ) getLastAssistantReply () (string , error ) {
14291413 // Iterate backwards through messages to find the last assistant message
14301414 for i := len (r .messages ) - 1 ; i >= 0 ; i -- {
1431- if r .messages [i ].Role == "assistant" {
1432- return r .messages [i ].Content , nil
1415+ if strings . EqualFold ( r .messages [i ].Role , "assistant" ) {
1416+ return r .messageForLog ( r . messages [i ]) .Content , nil
14331417 }
14341418 }
14351419 return "" , fmt .Errorf ("no assistant replies found in conversation history" )
14361420}
14371421
1422+ func (r * REPL ) assistantMessageForLog (response string ) llm.Message {
1423+ return r .messageForLog (llm.Message {Role : "assistant" , Content : response })
1424+ }
1425+
1426+ func (r * REPL ) messageForLog (msg llm.Message ) llm.Message {
1427+ if strings .EqualFold (msg .Role , "assistant" ) && ! r .configOptions .GetBool ("chat.replythink" ) {
1428+ msg .Content = strings .TrimLeft (llm .StripThink (msg .Content ), " \t \r \n " )
1429+ }
1430+ return msg
1431+ }
1432+
1433+ func (r * REPL ) messagesForLog () []llm.Message {
1434+ messages := make ([]llm.Message , 0 , len (r .messages ))
1435+ for _ , msg := range r .messages {
1436+ messages = append (messages , r .messageForLog (msg ))
1437+ }
1438+ return messages
1439+ }
1440+
1441+ func (r * REPL ) messagesForPrompt () []llm.Message {
1442+ messages := make ([]llm.Message , 0 , len (r .messages ))
1443+ includeReplies := r .configOptions .GetBool ("chat.replies" )
1444+ for _ , msg := range r .messages {
1445+ msg = r .messageForLog (msg )
1446+ if strings .EqualFold (msg .Role , "assistant" ) && ! includeReplies {
1447+ msg .Content = ""
1448+ }
1449+ messages = append (messages , msg )
1450+ }
1451+ return messages
1452+ }
1453+
14381454// handleShellInput processes input starting with '$' as hybrid AI/shell mode
14391455func (r * REPL ) handleShellInput (input string ) error {
14401456 // Handle redirection first, before substitutions
@@ -1758,7 +1774,7 @@ func (r *REPL) executeLLMQueryWithoutStreaming(query string) (string, error) {
17581774
17591775 // Add conversation history if we should include replies
17601776 if r .configOptions .GetBool ("chat.replies" ) && len (r .messages ) > 0 {
1761- messages = append (messages , r .messages ... )
1777+ messages = append (messages , r .messagesForPrompt () ... )
17621778 }
17631779
17641780 // Add the user query
@@ -1830,7 +1846,7 @@ func (r *REPL) displayConversationLog() string {
18301846 fmt .Fprintf (& output , "[%d] %s: " , i + 1 , role )
18311847
18321848 // For log display, use a larger truncation limit
1833- content := msg .Content
1849+ content := r . messageForLog ( msg ) .Content
18341850 if len (content ) > 100 {
18351851 content = content [:97 ] + "..."
18361852 }
@@ -1842,8 +1858,9 @@ func (r *REPL) displayConversationLog() string {
18421858 }
18431859
18441860 fmt .Fprintf (& output , "Total messages: %d\r \n " , len (r .messages ))
1845- fmt .Fprintf (& output , "Settings: replies=%t, streaming=%t, reasoning=%s, logging=%t\r \n " ,
1861+ fmt .Fprintf (& output , "Settings: replies=%t, replythink=%t, streaming=%t, reasoning=%s, logging=%t\r \n " ,
18461862 r .configOptions .GetBool ("chat.replies" ),
1863+ r .configOptions .GetBool ("chat.replythink" ),
18471864 r .configOptions .GetBool ("llm.stream" ),
18481865 r .configOptions .Get ("think.reason" ),
18491866 r .configOptions .GetBool ("chat.log" ))
@@ -1879,7 +1896,7 @@ func (r *REPL) displayFullConversationLog() string {
18791896
18801897 output .WriteString ("# Full conversation log:\r \n " )
18811898
1882- for i , msg := range r .messages {
1899+ for i , msg := range r .messagesForLog () {
18831900 role := formatRole (msg .Role )
18841901
18851902 fmt .Fprintf (& output , "\r \n ## [%d] %s:\r \n " , i + 1 , role )
@@ -2305,7 +2322,7 @@ func (r *REPL) handleCompactCommand(extra ...string) error {
23052322 var conversationText strings.Builder
23062323 conversationText .WriteString ("# Conversation History\n \n " )
23072324
2308- for i , msg := range r .messages {
2325+ for i , msg := range r .messagesForLog () {
23092326 role := formatRole (msg .Role )
23102327 fmt .Fprintf (& conversationText , "## %s %d:\n \n %s\n \n " , role , i + 1 , msg .Content )
23112328 }
@@ -2348,7 +2365,7 @@ func (r *REPL) handleCompactCommand(extra ...string) error {
23482365 }
23492366
23502367 // Create the assistant response message
2351- assistantMessage := llm. Message { Role : "assistant" , Content : response }
2368+ assistantMessage := r . assistantMessageForLog ( response )
23522369
23532370 // Replace the conversation with just the compact message and response
23542371 r .messages = []llm.Message {
@@ -2439,7 +2456,7 @@ func (r *REPL) saveConversation(path string) error {
24392456 Messages []llm.Message `json:"messages"`
24402457 }{
24412458 SystemPrompt : r .currentSystemPrompt (),
2442- Messages : r .messages ,
2459+ Messages : r .messagesForLog () ,
24432460 }
24442461
24452462 // Convert to JSON
0 commit comments