@@ -118,6 +118,40 @@ const autoConfirmTimers: Record<string, ReturnType<typeof setTimeout>> = {};
118118// Track active SSE connections for proper cleanup
119119const activeSSEControllers : Record < string , AbortController > = { } ;
120120
121+ const normalizeToolkitMessage = ( value : unknown ) => {
122+ if ( typeof value === "string" ) return value ;
123+ if ( value == null ) return "" ;
124+ try {
125+ return JSON . stringify ( value ) ;
126+ } catch {
127+ return String ( value ) ;
128+ }
129+ } ;
130+
131+ const resolveProcessTaskIdForToolkitEvent = (
132+ tasksById : Record < string , Task > ,
133+ currentTaskId : string ,
134+ agentName : string | undefined ,
135+ processTaskId : unknown
136+ ) => {
137+ const direct = typeof processTaskId === "string" ? processTaskId : "" ;
138+ if ( direct ) return direct ;
139+
140+ const running = tasksById [ currentTaskId ] ?. taskRunning ?? [ ] ;
141+ // Prefer a task owned by the same agent
142+ const match = running . findLast (
143+ ( t : any ) =>
144+ typeof t ?. id === "string" &&
145+ t . id &&
146+ ( agentName ? t . agent ?. type === agentName : true )
147+ ) ;
148+ if ( match ?. id ) return match . id as string ;
149+ // Fallback to the latest running task id
150+ const last = running . at ( - 1 ) ;
151+ if ( typeof last ?. id === "string" && last . id ) return last . id ;
152+ return "" ;
153+ } ;
154+
121155const chatStore = ( initial ?: Partial < ChatStore > ) => createStore < ChatStore > ( ) (
122156 ( set , get ) => ( {
123157 activeTaskId : null ,
@@ -1152,12 +1186,15 @@ const chatStore = (initial?: Partial<ChatStore>) => createStore<ChatStore>()(
11521186 }
11531187 // Activate Toolkit
11541188 if ( agentMessages . step === "activate_toolkit" ) {
1155- if ( agentMessages . data . method_name === 'send message to user' ) {
1156- return
1157- }
11581189 // add log
11591190 let taskAssigning = [ ...tasks [ currentTaskId ] . taskAssigning ]
1160- const assigneeAgentIndex = taskAssigning ! . findIndex ( ( agent : Agent ) => agent . tasks . find ( ( task : TaskInfo ) => task . id === agentMessages . data . process_task_id ) ) ;
1191+ const resolvedProcessTaskId = resolveProcessTaskIdForToolkitEvent (
1192+ tasks ,
1193+ currentTaskId ,
1194+ agentMessages . data . agent_name ,
1195+ agentMessages . data . process_task_id
1196+ ) ;
1197+ const assigneeAgentIndex = taskAssigning ! . findIndex ( ( agent : Agent ) => agent . tasks . find ( ( task : TaskInfo ) => task . id === resolvedProcessTaskId ) ) ;
11611198 if ( assigneeAgentIndex !== - 1 ) {
11621199 const message = filterMessage ( agentMessages )
11631200 if ( message ) {
@@ -1169,20 +1206,20 @@ const chatStore = (initial?: Partial<ChatStore>) => createStore<ChatStore>()(
11691206
11701207 if ( agentMessages . data . toolkit_name === 'Browser Toolkit' && agentMessages . data . method_name === 'browser visit page' ) {
11711208 console . log ( 'match success' )
1172- addWebViewUrl ( currentTaskId , agentMessages . data . message ? .replace ( / u r l = / g, '' ) . replace ( / ' / g, '' ) as string , agentMessages . data . process_task_id as string )
1209+ addWebViewUrl ( currentTaskId , normalizeToolkitMessage ( agentMessages . data . message ) . replace ( / u r l = / g, '' ) . replace ( / ' / g, '' ) as string , resolvedProcessTaskId )
11731210 }
11741211 if ( agentMessages . data . toolkit_name === 'Browser Toolkit' && agentMessages . data . method_name === 'visit page' ) {
11751212 console . log ( 'match success' )
1176- addWebViewUrl ( currentTaskId , agentMessages . data . message as string , agentMessages . data . process_task_id as string )
1213+ addWebViewUrl ( currentTaskId , normalizeToolkitMessage ( agentMessages . data . message ) as string , resolvedProcessTaskId )
11771214 }
11781215 if ( agentMessages . data . toolkit_name === 'ElectronToolkit' && agentMessages . data . method_name === 'browse_url' ) {
1179- addWebViewUrl ( currentTaskId , agentMessages . data . message as string , agentMessages . data . process_task_id as string )
1216+ addWebViewUrl ( currentTaskId , normalizeToolkitMessage ( agentMessages . data . message ) as string , resolvedProcessTaskId )
11801217 }
11811218 if ( agentMessages . data . method_name === 'browser_navigate' && agentMessages . data . message ?. startsWith ( '{"url"' ) ) {
11821219 try {
1183- const urlData = JSON . parse ( agentMessages . data . message ) ;
1220+ const urlData = JSON . parse ( normalizeToolkitMessage ( agentMessages . data . message ) ) ;
11841221 if ( urlData ?. url ) {
1185- addWebViewUrl ( currentTaskId , urlData . url as string , agentMessages . data . process_task_id as string )
1222+ addWebViewUrl ( currentTaskId , urlData . url as string , resolvedProcessTaskId )
11861223 }
11871224 } catch ( error ) {
11881225 console . error ( 'Failed to parse browser_navigate URL:' , error ) ;
@@ -1191,21 +1228,21 @@ const chatStore = (initial?: Partial<ChatStore>) => createStore<ChatStore>()(
11911228 }
11921229 let taskRunning = [ ...tasks [ currentTaskId ] . taskRunning ]
11931230
1194- const taskIndex = taskRunning . findIndex ( ( task ) => task . id === agentMessages . data . process_task_id ) ;
1231+ const taskIndex = taskRunning . findIndex ( ( task ) => task . id === resolvedProcessTaskId ) ;
11951232
11961233 if ( taskIndex !== - 1 ) {
11971234 const { toolkit_name, method_name } = agentMessages . data ;
11981235 if ( toolkit_name && method_name && assigneeAgentIndex !== - 1 ) {
11991236
12001237 if ( assigneeAgentIndex !== - 1 ) {
1201- const task = taskAssigning [ assigneeAgentIndex ] . tasks . find ( ( task : TaskInfo ) => task . id === agentMessages . data . process_task_id ) ;
1238+ const task = taskAssigning [ assigneeAgentIndex ] . tasks . find ( ( task : TaskInfo ) => task . id === resolvedProcessTaskId ) ;
12021239 const message = filterMessage ( agentMessages )
12031240 if ( message ) {
12041241 const toolkit = {
12051242 toolkitId : generateUniqueId ( ) ,
12061243 toolkitName : toolkit_name ,
12071244 toolkitMethods : method_name ,
1208- message : message . data . message as string ,
1245+ message : normalizeToolkitMessage ( message . data . message ) ,
12091246 toolkitStatus : "running" as AgentStatus ,
12101247 }
12111248 if ( task ) {
@@ -1230,18 +1267,24 @@ const chatStore = (initial?: Partial<ChatStore>) => createStore<ChatStore>()(
12301267
12311268 // add log
12321269 let taskAssigning = [ ...tasks [ currentTaskId ] . taskAssigning ]
1233- const assigneeAgentIndex = taskAssigning ! . findIndex ( ( agent : Agent ) => agent . tasks . find ( ( task : TaskInfo ) => task . id === agentMessages . data . process_task_id ) ) ;
1270+ const resolvedProcessTaskId = resolveProcessTaskIdForToolkitEvent (
1271+ tasks ,
1272+ currentTaskId ,
1273+ agentMessages . data . agent_name ,
1274+ agentMessages . data . process_task_id
1275+ ) ;
1276+ const assigneeAgentIndex = taskAssigning ! . findIndex ( ( agent : Agent ) => agent . tasks . find ( ( task : TaskInfo ) => task . id === resolvedProcessTaskId ) ) ;
12341277 if ( assigneeAgentIndex !== - 1 ) {
12351278 const message = filterMessage ( agentMessages )
12361279 if ( message ) {
1237- const task = taskAssigning [ assigneeAgentIndex ] . tasks . find ( ( task : TaskInfo ) => task . id === agentMessages . data . process_task_id ) ;
1280+ const task = taskAssigning [ assigneeAgentIndex ] . tasks . find ( ( task : TaskInfo ) => task . id === resolvedProcessTaskId ) ;
12381281 if ( task ) {
1239- let index = task . toolkits ?. findIndex ( ( toolkit ) => {
1282+ let index = task . toolkits ?. findIndex ( ( toolkit : any ) => {
12401283 return toolkit . toolkitName === agentMessages . data . toolkit_name && toolkit . toolkitMethods === agentMessages . data . method_name && toolkit . toolkitStatus === 'running'
12411284 } )
12421285
12431286 if ( task . toolkits && index !== - 1 && index !== undefined ) {
1244- task . toolkits [ index ] . message += '\n' + message . data . message as string
1287+ task . toolkits [ index ] . message = ` ${ normalizeToolkitMessage ( task . toolkits [ index ] . message ) } \n ${ normalizeToolkitMessage ( message . data . message ) } ` . trim ( )
12451288 task . toolkits [ index ] . toolkitStatus = "completed"
12461289 }
12471290 // task.toolkits?.unshift({
@@ -1280,7 +1323,7 @@ const chatStore = (initial?: Partial<ChatStore>) => createStore<ChatStore>()(
12801323 taskRunning ! [ taskIndex ] . toolkits ?. unshift ( {
12811324 toolkitName : toolkit_name ,
12821325 toolkitMethods : method_name ,
1283- message : targetMessage . data . message as string ,
1326+ message : normalizeToolkitMessage ( targetMessage . data . message ) ,
12841327 toolkitStatus : "completed" ,
12851328 } ) ;
12861329 }
@@ -2447,11 +2490,13 @@ const filterMessage = (message: AgentMessage) => {
24472490 message . data . method_name = 'search'
24482491 }
24492492
2493+ message . data . message = normalizeToolkitMessage ( message . data . message ) ;
2494+
24502495 if ( message . data . toolkit_name === 'Note Taking Toolkit' ) {
2451- message . data . message = message . data . message ! . replace ( / c o n t e n t = ' / g, '' ) . replace ( / ' , u p d a t e = F a l s e / g, '' ) . replace ( / ' , u p d a t e = T r u e / g, '' )
2496+ message . data . message = message . data . message . replace ( / c o n t e n t = ' / g, '' ) . replace ( / ' , u p d a t e = F a l s e / g, '' ) . replace ( / ' , u p d a t e = T r u e / g, '' )
24522497 }
24532498 if ( message . data . method_name === 'scrape' ) {
2454- message . data . message = message . data . message ! . replace ( / u r l = ' / g, '' ) . slice ( 0 , - 1 )
2499+ message . data . message = message . data . message . replace ( / u r l = ' / g, '' ) . slice ( 0 , - 1 )
24552500 }
24562501 return message
24572502}
@@ -2460,4 +2505,4 @@ const filterMessage = (message: AgentMessage) => {
24602505
24612506export const useChatStore = chatStore ;
24622507
2463- export const getToolStore = ( ) => chatStore ( ) . getState ( ) ;
2508+ export const getToolStore = ( ) => chatStore ( ) . getState ( ) ;
0 commit comments