From e3e93712b61af9914b9ba0586e6d9305b7bb7417 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=89=E9=91=AB=E5=8D=87?= Date: Wed, 24 Jun 2026 22:33:09 +0800 Subject: [PATCH] =?UTF-8?q?feat(task-deeplink):=20xdfx=20=E5=BC=80?= =?UTF-8?q?=E5=9C=BA=E4=BF=A1=E6=81=AF=E8=BF=BD=E5=8A=A0=E8=A1=8C=E5=8A=A8?= =?UTF-8?q?=E6=A0=87=E9=A2=98=E4=B8=8E=E8=A1=8C=E5=8A=A8=E5=86=85=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit xdfx(行动分析)深链开场信息原先只附行动id(action_id),现额外 拼上行动标题(actionName)与行动内容(narration)。优先读登录时 缓存的行动详情(readActionDetail),无缓存再 fetchActionDetail,避免 重复请求。buildOpeningText 第三参数由 actionId 改为 ActionOpeningInfo。 Co-Authored-By: Claude Opus 4.8 (1M context) --- frontend-web/src/core/auth/task-deeplink.ts | 28 +++++++++++++++++---- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/frontend-web/src/core/auth/task-deeplink.ts b/frontend-web/src/core/auth/task-deeplink.ts index 0208f579..0ca46a84 100644 --- a/frontend-web/src/core/auth/task-deeplink.ts +++ b/frontend-web/src/core/auth/task-deeplink.ts @@ -233,16 +233,28 @@ export interface TaskDeeplinkTarget { state?: Record; } +/** xdfx(行动分析)开场信息里要追加的行动信息:行动标题 + 行动内容 + 行动id。 */ +interface ActionOpeningInfo { + /** 行动id(action_id)。 */ + actionId?: string; + /** 行动标题(行动名称 actionName)。 */ + actionName?: string; + /** 行动内容(行动叙事 narration)。 */ + narration?: string; +} + /** * 用 taskName / taskContent 拼出开场信息文本;末尾附上任务 id(task_id),供后端识别任务。 - * xdfx(行动分析)额外附上「行动id(action_id)」——传入 actionId 时追加该行。 + * xdfx(行动分析)额外附上「行动标题 / 行动内容 / 行动id(action_id)」——传入 action 时追加这几行。 */ -function buildOpeningText(detail: CopTaskDetail, taskId: string, actionId?: string): string { +function buildOpeningText(detail: CopTaskDetail, taskId: string, action?: ActionOpeningInfo): string { return [ detail.taskName ? `任务名称:${detail.taskName}` : "", detail.taskContent ? `任务内容:${detail.taskContent}` : "", taskId ? `任务id(task_id)为${taskId}` : "", - actionId ? `行动id(action_id)为${actionId}` : "", + action?.actionName ? `行动标题:${action.actionName}` : "", + action?.narration ? `行动内容:${action.narration}` : "", + action?.actionId ? `行动id(action_id)为${action.actionId}` : "", ] .filter(Boolean) .join("\n"); @@ -316,13 +328,19 @@ export async function resolveTaskDeeplinkTarget( // 暂存任务上下文(taskId + agentId + 开场信息),跳到 chats 索引,由工作区按 taskId 决定 // 开最新历史对话 / 新建。rwfx 在工作区里额外过「目的树闸门」;3qfx/xdfx 仅 1:N 列表, // 新建对话直接带开场信息自动发出(见 task-purpose / AgentChatPage 的 taskGate / taskBind)。 - // xdfx(行动分析):聊天记录按「行动id」划分(partitionByAction),且开场信息追加 action_id。 + // xdfx(行动分析):聊天记录按「行动id」划分(partitionByAction),且开场信息追加 + // 行动标题 / 行动内容 / action_id(行动详情登录解析任务id 时已缓存,优先读缓存避免重复请求)。 const isXdfx = parsed.businessCode === XDFX_BUSINESS_CODE; const actionId = rawId || taskId; + let actionInfo: ActionOpeningInfo | undefined; + if (isXdfx) { + const ad = rawId ? (readActionDetail() ?? (await fetchActionDetail(rawId))) : null; + actionInfo = { actionId, actionName: ad?.actionName, narration: ad?.narration }; + } persistTaskContext({ taskId, agentId, - openingText: buildOpeningText(detail, taskId, isXdfx ? actionId : undefined), + openingText: buildOpeningText(detail, taskId, actionInfo), actionId, partitionByAction: isXdfx, });