@@ -19,6 +19,7 @@ import { createAgentChatManager } from './agentStore/useAgentChat';
1919import { createAgentPlaceholderController } from './agentStore/useAgentPlaceholder' ;
2020import { createAgentSessionManager } from './agentStore/useAgentSessions' ;
2121import { createAgentSteerQueue } from './agentStore/useAgentSteerQueue' ;
22+ import { STEER_PERSIST_PREFIX } from './agentStore/constants' ;
2223
2324export const useAgentStore = defineStore ( 'agent' , ( ) => {
2425 const agentTransitions = useAgentTransitions ( ) ;
@@ -465,6 +466,19 @@ export const useAgentStore = defineStore('agent', () => {
465466 editingEnabled . value = enabled ;
466467 }
467468
469+
470+ function getCompiledMessageTextWithSteeredParts ( message : any ) : string {
471+ const currentTurnUserMessages = currentChat . value ?. messages . filter ( ( msg : any ) => msg . metadata ?. turnId === message ?. metadata ?. turnId && msg . role === 'user' ) ;
472+ let messageToCompile = '' ;
473+ for ( const msg of currentTurnUserMessages ) {
474+ const text = ( msg . parts ?? [ ] )
475+ . filter ( ( part : any ) => part . type === 'text' )
476+ . map ( ( part : any ) => part . text ?? '' )
477+ . join ( '' ) ;
478+ messageToCompile += text + ' ' ;
479+ }
480+ return messageToCompile . trim ( ) ;
481+ }
468482 // Enter edit mode for a user message: stash the current input, then load the
469483 // message's text into the textarea for the user to amend. Allowed mid-generation —
470484 // committing the edit stops the running turn (see submitEditMessage).
@@ -480,10 +494,7 @@ export const useAgentStore = defineStore('agent', () => {
480494 if ( editingMessageId . value === null ) {
481495 savedUserInput . value = userMessageInput . value ?? '' ;
482496 }
483- const text = ( message . parts ?? [ ] )
484- . filter ( ( part : any ) => part . type === 'text' )
485- . map ( ( part : any ) => part . text ?? '' )
486- . join ( '' ) ;
497+ const text = getCompiledMessageTextWithSteeredParts ( message ) ;
487498 editingMessageId . value = messageId ;
488499 editingMessageTurnId . value = turnId ;
489500 userMessageInput . value = text ;
@@ -506,20 +517,25 @@ export const useAgentStore = defineStore('agent', () => {
506517 nextTick ( ( ) => focusTextInput ( ) ) ;
507518 }
508519
509- async function submitEditMessage ( ) {
520+ async function submitEditMessage ( ) : Promise < boolean > {
510521 if ( editingMessageId . value === null ) {
511- return ;
522+ return false ;
512523 }
513524 const text = trimmedUserMessage . value ;
514525 if ( ! text ) {
515- return ;
526+ return false ;
516527 }
517528 const messageId = editingMessageId . value ;
518529 const turnId = editingMessageTurnId . value ! ;
519530 steerBuffer . clear ( ) ;
520531 // Restore the stashed input and leave edit mode before the regeneration streams in.
521532 exitEditMode ( ) ;
533+ const lastMessageText = getCompiledMessageTextWithSteeredParts ( currentChat . value ?. messages . find ( ( m : any ) => m . id === messageId ) ) ;
534+ if ( lastMessageText . trim ( ) === text . trim ( ) ) {
535+ return false ;
536+ }
522537 await sendEditMessage ( { messageId, turnId, text } ) ;
538+ return true ;
523539 }
524540
525541 function resolveInternalRoute ( href : string ) : string | null {
@@ -612,6 +628,7 @@ export const useAgentStore = defineStore('agent', () => {
612628 setEditingEnabled,
613629 isEditingMessage,
614630 editingMessageId,
631+ editingMessageTurnId,
615632 startEditMessage,
616633 cancelEditMessage,
617634 submitEditMessage,
0 commit comments