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:
@@ -143,13 +143,37 @@ function normalizeServerApplicationSteps(rawSteps = []) {
|
||||
return [...new Set(mappedSteps)]
|
||||
}
|
||||
|
||||
function resolveModelTasks(rawPlan = {}) {
|
||||
return Array.isArray(rawPlan?.tasks) ? rawPlan.tasks : []
|
||||
}
|
||||
|
||||
function isModelTravelApplicationTask(task = {}) {
|
||||
if (!task || typeof task !== 'object') {
|
||||
return false
|
||||
}
|
||||
const taskType = String(task?.task_type || task?.taskType || '').trim()
|
||||
const assignedAgent = String(task?.assigned_agent || task?.assignedAgent || '').trim()
|
||||
return taskType === 'expense_application' || assignedAgent === 'application_assistant'
|
||||
}
|
||||
|
||||
function findModelTravelApplicationTask(rawPlan = {}) {
|
||||
const tasks = Array.isArray(rawPlan?.tasks) ? rawPlan.tasks : []
|
||||
return tasks.find((task) => {
|
||||
return resolveModelTasks(rawPlan).find(isModelTravelApplicationTask) || null
|
||||
}
|
||||
|
||||
function resolveModelRemainingTasks(rawPlan = {}, selectedTask = null) {
|
||||
const tasks = resolveModelTasks(rawPlan)
|
||||
const selectedIndex = tasks.findIndex((task) => task === selectedTask)
|
||||
if (selectedIndex < 0) {
|
||||
return []
|
||||
}
|
||||
return tasks.slice(selectedIndex + 1).filter((task) => {
|
||||
if (!task || typeof task !== 'object') {
|
||||
return false
|
||||
}
|
||||
const taskType = String(task?.task_type || task?.taskType || '').trim()
|
||||
const assignedAgent = String(task?.assigned_agent || task?.assignedAgent || '').trim()
|
||||
return taskType === 'expense_application' || assignedAgent === 'application_assistant'
|
||||
}) || null
|
||||
return Boolean(taskType || assignedAgent)
|
||||
})
|
||||
}
|
||||
|
||||
function resolveCandidateFlows(rawPlan = {}) {
|
||||
@@ -211,7 +235,7 @@ export function normalizeWorkbenchAiIntentPlan(rawPlan = {}, options = {}) {
|
||||
task.requested_action ||
|
||||
task.requestedAction ||
|
||||
rawPlan.requested_action ||
|
||||
rawPlan.requestedAction ||
|
||||
rawPlan.requestedAction ||
|
||||
''
|
||||
).trim() || normalizePromptAction(prompt)
|
||||
const serverSteps = normalizeServerApplicationSteps(task.action_steps || task.actionSteps)
|
||||
@@ -226,7 +250,8 @@ export function normalizeWorkbenchAiIntentPlan(rawPlan = {}, options = {}) {
|
||||
missingFields: Array.isArray(task.missing_fields || task.missingFields)
|
||||
? task.missing_fields || task.missingFields
|
||||
: [],
|
||||
steps: serverSteps.length ? serverSteps : buildApplicationSteps(requestedAction)
|
||||
steps: serverSteps.length ? serverSteps : buildApplicationSteps(requestedAction),
|
||||
stewardRemainingTasks: resolveModelRemainingTasks(rawPlan, task)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -275,7 +300,7 @@ export function resolveExecutableTravelApplicationPlan(plan = null) {
|
||||
return null
|
||||
}
|
||||
const requestedSubmit = plan.steps.includes(WORKBENCH_AI_STEP_SUBMIT_APPLICATION)
|
||||
return {
|
||||
const request = {
|
||||
expenseType: 'travel',
|
||||
expenseTypeLabel: '差旅费',
|
||||
sourceText: String(plan.sourceText || '').trim(),
|
||||
@@ -285,6 +310,11 @@ export function resolveExecutableTravelApplicationPlan(plan = null) {
|
||||
requestedSubmit,
|
||||
submitRequiresConfirmation: requestedSubmit
|
||||
}
|
||||
const stewardRemainingTasks = Array.isArray(plan.stewardRemainingTasks) ? plan.stewardRemainingTasks : []
|
||||
if (stewardRemainingTasks.length) {
|
||||
request.stewardRemainingTasks = stewardRemainingTasks
|
||||
}
|
||||
return request
|
||||
}
|
||||
|
||||
export function isLowConfidenceTravelApplicationPlan(plan = null) {
|
||||
|
||||
Reference in New Issue
Block a user