Skip to content

Commit 1d39b30

Browse files
committed
Update chatStore.ts
1 parent 1e9b49f commit 1d39b30

1 file changed

Lines changed: 65 additions & 20 deletions

File tree

src/store/chatStore.ts

Lines changed: 65 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,40 @@ const autoConfirmTimers: Record<string, ReturnType<typeof setTimeout>> = {};
118118
// Track active SSE connections for proper cleanup
119119
const 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+
121155
const 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(/url=/g, '').replace(/'/g, '') as string, agentMessages.data.process_task_id as string)
1209+
addWebViewUrl(currentTaskId, normalizeToolkitMessage(agentMessages.data.message).replace(/url=/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(/content='/g, '').replace(/', update=False/g, '').replace(/', update=True/g, '')
2496+
message.data.message = message.data.message.replace(/content='/g, '').replace(/', update=False/g, '').replace(/', update=True/g, '')
24522497
}
24532498
if (message.data.method_name === 'scrape') {
2454-
message.data.message = message.data.message!.replace(/url='/g, '').slice(0, -1)
2499+
message.data.message = message.data.message.replace(/url='/g, '').slice(0, -1)
24552500
}
24562501
return message
24572502
}
@@ -2460,4 +2505,4 @@ const filterMessage = (message: AgentMessage) => {
24602505

24612506
export const useChatStore = chatStore;
24622507

2463-
export const getToolStore = () => chatStore().getState();
2508+
export const getToolStore = () => chatStore().getState();

0 commit comments

Comments
 (0)