@@ -15,6 +15,7 @@ import type { ChatMessage, ContentBlock, ToolContentBlock } from '../types/chat'
1515import type { SendMessageFn } from '../types/contracts/send-message'
1616import type { ParamsOf } from '../types/function-params'
1717import type { SetElement } from '../types/utils'
18+ import type { AgentMode } from '../utils/constants'
1819import type { AgentDefinition , ToolName } from '@codebuff/sdk'
1920import type { SetStateAction } from 'react'
2021
@@ -172,6 +173,8 @@ interface UseSendMessageOptions {
172173 availableWidth ?: number
173174 onTimerEvent ?: ( event : SendMessageTimerEvent ) => void
174175 setHasReceivedPlanResponse : ( value : boolean ) => void
176+ lastMessageMode : AgentMode | null
177+ setLastMessageMode : ( mode : AgentMode | null ) => void
175178}
176179
177180export const useSendMessage = ( {
@@ -201,6 +204,8 @@ export const useSendMessage = ({
201204 availableWidth = 80 ,
202205 onTimerEvent = ( ) => { } ,
203206 setHasReceivedPlanResponse,
207+ lastMessageMode,
208+ setLastMessageMode,
204209} : UseSendMessageOptions ) : {
205210 sendMessage : SendMessageFn
206211 clearMessages : ( ) => void
@@ -351,6 +356,10 @@ export const useSendMessage = ({
351356 // This is computed efficiently in the Zustand store
352357 const previousToggleIds = allToggleIds
353358
359+ // Check if mode changed and insert divider if needed
360+ // Also show divider on first message (when lastMessageMode is null)
361+ const shouldInsertDivider = lastMessageMode === null || lastMessageMode !== agentMode
362+
354363 // Add user message to UI first
355364 const userMessage : ChatMessage = {
356365 id : `user-${ Date . now ( ) } ` ,
@@ -360,7 +369,27 @@ export const useSendMessage = ({
360369 }
361370
362371 applyMessageUpdate ( ( prev ) => {
363- let newMessages = [ ...prev , userMessage ]
372+ let newMessages = [ ...prev ]
373+
374+ // Insert mode divider if mode changed
375+ if ( shouldInsertDivider ) {
376+ const dividerMessage : ChatMessage = {
377+ id : `divider-${ Date . now ( ) } ` ,
378+ variant : 'ai' ,
379+ content : '' ,
380+ blocks : [
381+ {
382+ type : 'mode-divider' ,
383+ mode : agentMode ,
384+ } ,
385+ ] ,
386+ timestamp : formatTimestamp ( ) ,
387+ }
388+ newMessages . push ( dividerMessage )
389+ }
390+
391+ newMessages . push ( userMessage )
392+
364393 if ( postUserMessage ) {
365394 newMessages = postUserMessage ( newMessages )
366395 }
@@ -369,6 +398,10 @@ export const useSendMessage = ({
369398 }
370399 return newMessages
371400 } )
401+
402+ // Update last message mode
403+ setLastMessageMode ( agentMode )
404+
372405 await yieldToEventLoop ( )
373406
374407 // Auto-collapse previous message toggles to minimize clutter.
@@ -1488,6 +1521,8 @@ export const useSendMessage = ({
14881521 scrollToLatest ,
14891522 availableWidth ,
14901523 setHasReceivedPlanResponse ,
1524+ lastMessageMode ,
1525+ setLastMessageMode ,
14911526 ] ,
14921527 )
14931528
0 commit comments