feat(task): 添加任务修订功能和超时处理机制
添加了 `revise_task` 路由动作类型,允许用户修改、纠正或重新执行最新活动任务结果。 实现了工具失败指导原则,防止相同类别工具重复失败。 为任务规划器添加了超时处理机制,避免长时间等待。 BREAKING CHANGE: 任务路由逻辑已更新,新增 `revise_task` 动作类型。 fix(api): 修复任务详情API返回完整流程投影 修复了任务详情API端点,现在会包含过滤后的流程运行、事件和工件信息, 并确保时间戳字段正确序列化。 refactor(engine): 优化任务技能解析器摘要节点处理 改进了任务技能解析器对摘要节点的处理逻辑,对于仅依赖文本生成功能的摘要节 点不再分配具体技能,直接使用依赖项输出进行汇总。 test: 增加任务修订和超时处理测试用例 添加了测试用例验证任务修订输入记录反馈、超时回退到单模式以及 摘要节点技能解析等新功能。
This commit is contained in:
74
app-instance/frontend/lib/chat-messages.test.ts
Normal file
74
app-instance/frontend/lib/chat-messages.test.ts
Normal file
@ -0,0 +1,74 @@
|
||||
import { describe, expect, it } from 'vitest';
|
||||
|
||||
import { getTaskCardMessageIndexes, mergeServerWithPendingUsers } from '@/lib/chat-messages';
|
||||
import type { ChatMessage } from '@/types';
|
||||
|
||||
describe('chat message helpers', () => {
|
||||
it('keeps pending local user messages after server refreshes', () => {
|
||||
const serverMessages: ChatMessage[] = [
|
||||
{
|
||||
role: 'assistant',
|
||||
content: 'Earlier answer',
|
||||
timestamp: '2026-05-21T08:00:00.000Z',
|
||||
},
|
||||
];
|
||||
const localMessages: ChatMessage[] = [
|
||||
...serverMessages,
|
||||
{
|
||||
role: 'user',
|
||||
content: 'Please continue',
|
||||
timestamp: '2026-05-21T08:01:00.000Z',
|
||||
},
|
||||
];
|
||||
|
||||
expect(mergeServerWithPendingUsers(serverMessages, localMessages)).toEqual([
|
||||
...serverMessages,
|
||||
localMessages[1],
|
||||
]);
|
||||
});
|
||||
|
||||
it('does not duplicate local user messages already persisted by the server', () => {
|
||||
const serverMessages: ChatMessage[] = [
|
||||
{
|
||||
role: 'user',
|
||||
content: 'Please continue',
|
||||
timestamp: '2026-05-21T08:01:00.000Z',
|
||||
},
|
||||
];
|
||||
const localMessages: ChatMessage[] = [
|
||||
{
|
||||
role: 'user',
|
||||
content: 'Please continue',
|
||||
timestamp: '2026-05-21T08:01:01.000Z',
|
||||
},
|
||||
];
|
||||
|
||||
expect(mergeServerWithPendingUsers(serverMessages, localMessages)).toEqual(serverMessages);
|
||||
});
|
||||
|
||||
it('shows a task card only on the latest assistant message for the same task', () => {
|
||||
const messages: ChatMessage[] = [
|
||||
{
|
||||
role: 'assistant',
|
||||
content: 'I will start.',
|
||||
run_id: 'run-1',
|
||||
task_id: 'task-1',
|
||||
},
|
||||
{
|
||||
role: 'assistant',
|
||||
content: 'I found data.',
|
||||
run_id: 'run-1',
|
||||
task_id: 'task-1',
|
||||
},
|
||||
{
|
||||
role: 'assistant',
|
||||
content: 'Final answer.',
|
||||
run_id: 'run-1',
|
||||
task_id: 'task-1',
|
||||
task_status: 'awaiting_feedback',
|
||||
},
|
||||
];
|
||||
|
||||
expect(Array.from(getTaskCardMessageIndexes(messages))).toEqual([2]);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user