feat(web): AI 工作台多 task 串行推进与会话适配
- useWorkbenchAiApplicationPreviewFlow/useWorkbenchAiActionRouter/useWorkbenchAiCommandIntents 支持 task1 完成后自动推进 task2,确认按钮直接拉起申请预览,草稿/提交成功后继续推进下一 task - workbenchAiIntentPlannerModel/workbenchAiMessageModel/workbenchAiCommandIntentModel 适配多 task 意图规划与消息结构 - aiApplicationPreviewActions/aiApplicationPrecheckModel/aiExpenseDraftModel/aiWorkbenchConversationStore 草稿与会话存储适配 - PersonalWorkbenchAiMode 与样式适配,更新 preview-actions/expense-draft/conversation-store/fast-preview/action-router/command-intent/intent-planner 测试
This commit is contained in:
@@ -85,7 +85,8 @@ export function useWorkbenchAiApplicationPreviewFlow({
|
||||
resolveLatestInlineUserPrompt,
|
||||
scrollInlineConversationToBottom,
|
||||
sending,
|
||||
toast
|
||||
toast,
|
||||
onApplicationActionCompleted = null
|
||||
}) {
|
||||
function isApplicationPreviewEstimatePending(message = {}) {
|
||||
return Boolean(message?.applicationPreview && isApplicationPreviewEstimatePendingPreview(message.applicationPreview))
|
||||
@@ -345,6 +346,9 @@ export function useWorkbenchAiApplicationPreviewFlow({
|
||||
const flowId = isApplication ? 'travel_application' : 'travel_reimbursement'
|
||||
const taskLabel = isApplication ? '出差申请' : '费用报销'
|
||||
const ontologyFields = nextTask.ontology_fields || nextTask.ontologyFields || {}
|
||||
// 透传去掉当前 nextTask 之后的剩余 task 列表,保证 task2 完成后 task3 也能继续推进,
|
||||
// 避免 3+ task 场景在 task2 处断链。
|
||||
const furtherRemainingTasks = remainingTasks.slice(1)
|
||||
return {
|
||||
label: `继续处理${taskLabel}`,
|
||||
description: `接下来处理${taskLabel}:${String(nextTask.summary || nextTask.title || '').slice(0, 40)}`,
|
||||
@@ -357,7 +361,8 @@ export function useWorkbenchAiApplicationPreviewFlow({
|
||||
expense_type: String(ontologyFields.expense_type || 'travel').trim() || 'travel',
|
||||
expense_type_label: String(ontologyFields.expense_type_label || '差旅费').trim() || '差旅费',
|
||||
ontology_fields: ontologyFields,
|
||||
original_message: String(nextTask.summary || nextTask.title || `继续处理${taskLabel}`).trim()
|
||||
original_message: String(nextTask.summary || nextTask.title || `继续处理${taskLabel}`).trim(),
|
||||
steward_remaining_tasks: furtherRemainingTasks
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -458,6 +463,12 @@ export function useWorkbenchAiApplicationPreviewFlow({
|
||||
targetMessage.suggestedActions = []
|
||||
const detailActions = buildInlineApplicationDetailAction(draftPayload)
|
||||
const nextTaskAction = buildApplicationPreviewNextTaskAction(targetMessage)
|
||||
const shouldAutoContinueNextTask = Boolean(
|
||||
nextTaskAction &&
|
||||
typeof onApplicationActionCompleted === 'function' &&
|
||||
Array.isArray(targetMessage.stewardRemainingTasks) &&
|
||||
targetMessage.stewardRemainingTasks.length
|
||||
)
|
||||
replaceInlineMessage(
|
||||
pendingMessage.id,
|
||||
createInlineMessage('assistant', buildInlineApplicationPreviewActionResultText(actionType, payload), {
|
||||
@@ -466,11 +477,16 @@ export function useWorkbenchAiApplicationPreviewFlow({
|
||||
streamStatus: 'completed',
|
||||
thinkingEvents: completeInlineThinkingEvents(resolveInlineThinkingEvents(pendingMessage))
|
||||
},
|
||||
suggestedActions: nextTaskAction ? [...detailActions, nextTaskAction] : detailActions
|
||||
suggestedActions: shouldAutoContinueNextTask
|
||||
? detailActions
|
||||
: (nextTaskAction ? [...detailActions, nextTaskAction] : detailActions)
|
||||
})
|
||||
)
|
||||
persistCurrentConversation()
|
||||
scrollInlineConversationToBottom({ force: inlineConversationAutoScrollPinned.value })
|
||||
if (shouldAutoContinueNextTask) {
|
||||
onApplicationActionCompleted(targetMessage.stewardRemainingTasks, targetMessage)
|
||||
}
|
||||
return true
|
||||
} catch (error) {
|
||||
replaceInlineMessage(
|
||||
@@ -599,6 +615,12 @@ export function useWorkbenchAiApplicationPreviewFlow({
|
||||
skipUserMessage: true,
|
||||
userText: options.userMessage || '保存草稿'
|
||||
})
|
||||
} else if (
|
||||
typeof options.onPreviewReadyForNextTask === 'function' &&
|
||||
Array.isArray(previewMessage.stewardRemainingTasks) &&
|
||||
previewMessage.stewardRemainingTasks.length
|
||||
) {
|
||||
options.onPreviewReadyForNextTask(previewMessage.stewardRemainingTasks, previewMessage)
|
||||
}
|
||||
} catch (error) {
|
||||
replaceInlineMessage(pendingMessage.id, createInlineMessage('assistant', error?.message || '申请核对表生成失败,请稍后重试。', {
|
||||
|
||||
Reference in New Issue
Block a user