feat:优化会话历史中工具执行请求的处理逻辑
- 实现工具执行请求的检测和处理 - 关联工具执行结果与请求 - 跳过已处理的工具执行结果消息 - 构建包含工具执行信息的segments
This commit is contained in:
@ -42,9 +42,9 @@ const ENV_CONFIG: Record<Environment, IccoderConfig> = {
|
|||||||
},
|
},
|
||||||
/** 测试服务器环境 - 通过 Gateway 路由 */
|
/** 测试服务器环境 - 通过 Gateway 路由 */
|
||||||
test: {
|
test: {
|
||||||
backendUrl: "http://192.168.1.108:2029/iccoder",
|
backendUrl: "http://192.168.1.134:2233",
|
||||||
backendUrlStrongeLoop: "http://192.168.1.108:2029",
|
backendUrlStrongeLoop: "http://192.168.1.134:2233",
|
||||||
loginUrl: "http://192.168.1.108:2005/login",
|
loginUrl: "http://192.168.1.134/login",
|
||||||
timeout: 60000,
|
timeout: 60000,
|
||||||
userId: "default-user",
|
userId: "default-user",
|
||||||
serviceTier: "max",
|
serviceTier: "max",
|
||||||
|
|||||||
@ -45,6 +45,8 @@ export interface MessageSegment {
|
|||||||
toolDescription?: string;
|
toolDescription?: string;
|
||||||
askId?: string;
|
askId?: string;
|
||||||
questions?: import("../types/api").QuestionItem[];
|
questions?: import("../types/api").QuestionItem[];
|
||||||
|
answered?: boolean;
|
||||||
|
answers?: { [questionIndex: string]: string[] };
|
||||||
// 智能体相关字段
|
// 智能体相关字段
|
||||||
agentId?: string;
|
agentId?: string;
|
||||||
agentName?: string;
|
agentName?: string;
|
||||||
@ -1125,6 +1127,7 @@ export class DialogSession {
|
|||||||
// 直接调用 receiveAnswer,传递 taskId 作为 fallbackTaskId
|
// 直接调用 receiveAnswer,传递 taskId 作为 fallbackTaskId
|
||||||
// 如果 pendingQuestions 中有问题,走正常流程
|
// 如果 pendingQuestions 中有问题,走正常流程
|
||||||
// 如果没有,receiveAnswer 会使用 fallbackTaskId 直接发送到后端
|
// 如果没有,receiveAnswer 会使用 fallbackTaskId 直接发送到后端
|
||||||
|
this.markQuestionAnswered(askId, selected, customInput, answers);
|
||||||
await userInteractionManager.receiveAnswer(
|
await userInteractionManager.receiveAnswer(
|
||||||
askId,
|
askId,
|
||||||
selected,
|
selected,
|
||||||
@ -1133,6 +1136,30 @@ export class DialogSession {
|
|||||||
this.taskId
|
this.taskId
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private markQuestionAnswered(
|
||||||
|
askId: string,
|
||||||
|
selected?: string[],
|
||||||
|
customInput?: string,
|
||||||
|
answers?: { [questionIndex: string]: string[] }
|
||||||
|
): void {
|
||||||
|
const normalizedAnswers =
|
||||||
|
answers && Object.keys(answers).length > 0
|
||||||
|
? answers
|
||||||
|
: { "0": customInput ? [customInput] : selected || [] };
|
||||||
|
|
||||||
|
for (let i = this.segments.length - 1; i >= 0; i--) {
|
||||||
|
const segment = this.segments[i];
|
||||||
|
if (
|
||||||
|
segment.askId === askId &&
|
||||||
|
(segment.type === "question" || segment.type === "plan")
|
||||||
|
) {
|
||||||
|
segment.answered = true;
|
||||||
|
segment.answers = normalizedAnswers;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -147,8 +147,10 @@ export function getSegmentRendererScript(): string {
|
|||||||
options: segment.options || [],
|
options: segment.options || [],
|
||||||
multiSelect: false
|
multiSelect: false
|
||||||
}] : []);
|
}] : []);
|
||||||
const isAnswered = answeredQuestions.has(segment.askId);
|
const segmentAnswers = segment.answers || {};
|
||||||
const savedAnswers = answeredQuestions.get(segment.askId) || {};
|
const runtimeAnswers = answeredQuestions.get(segment.askId) || {};
|
||||||
|
const savedAnswers = Object.keys(segmentAnswers).length > 0 ? segmentAnswers : runtimeAnswers;
|
||||||
|
const isAnswered = segment.answered === true || answeredQuestions.has(segment.askId);
|
||||||
if (isAnswered) {
|
if (isAnswered) {
|
||||||
segmentDiv.classList.add('answered');
|
segmentDiv.classList.add('answered');
|
||||||
}
|
}
|
||||||
|
|||||||
@ -894,6 +894,9 @@ export function getWebviewContent(
|
|||||||
if (messagesContainer) {
|
if (messagesContainer) {
|
||||||
messagesContainer.innerHTML = '';
|
messagesContainer.innerHTML = '';
|
||||||
}
|
}
|
||||||
|
if (typeof answeredQuestions !== 'undefined' && answeredQuestions.clear) {
|
||||||
|
answeredQuestions.clear();
|
||||||
|
}
|
||||||
// 重置输入框布局到居中
|
// 重置输入框布局到居中
|
||||||
if (typeof window.resetInputAreaLayout === 'function') {
|
if (typeof window.resetInputAreaLayout === 'function') {
|
||||||
window.resetInputAreaLayout();
|
window.resetInputAreaLayout();
|
||||||
|
|||||||
Reference in New Issue
Block a user