From a96006ae15e1587144a6b59b15761b319bbf1817 Mon Sep 17 00:00:00 2001 From: zbc Date: Thu, 28 May 2026 20:43:39 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BD=93=E9=98=9F=E5=88=97=E4=B8=BA=E7=A9=BA?= =?UTF-8?q?=E6=97=B6=EF=BC=8C=E9=9C=80=E8=A6=81=E6=A3=80=E6=9F=A5state.tas?= =?UTF-8?q?ks=E4=B8=AD=E7=9A=84=E4=BB=BB=E5=8A=A1=E6=98=AF=E5=90=A6?= =?UTF-8?q?=E9=83=BD=E5=B7=B2=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/services/rawDump/README.md | 2 +- src/services/rawDump/batchWorker.ts | 11 +++++++++-- src/services/rawDump/session.ts | 6 ++---- src/services/rawDump/worker.ts | 15 +++------------ 4 files changed, 15 insertions(+), 19 deletions(-) diff --git a/src/services/rawDump/README.md b/src/services/rawDump/README.md index 97484edc5..23dd3d012 100644 --- a/src/services/rawDump/README.md +++ b/src/services/rawDump/README.md @@ -119,7 +119,7 @@ reportTurn(sessionId, assistantMessage.uuid, cwd) | 字段 | 来源 | 说明 | |-----|------|------| | `task_id` | `sessionID` | 会话唯一标识 | -| `request_id` | `message.id` 或 `message.uuid` | assistant message ID | +| `request_id` | `message.uuid` | assistant message ID | | `prompt_mode` | `user.variant` | 用户消息变体(如 `normal` / `plan`) | | `mode` | `assistant.mode` / `assistant.agent` | 默认 `"code"` | | `model` | `assistant.message.model` | 使用的模型 | diff --git a/src/services/rawDump/batchWorker.ts b/src/services/rawDump/batchWorker.ts index 53c6b55c5..caf96ca9b 100644 --- a/src/services/rawDump/batchWorker.ts +++ b/src/services/rawDump/batchWorker.ts @@ -63,8 +63,15 @@ async function runBatch() { const newTasks = getQueue() if (newTasks.length === 0) { - log.debug('queue empty') - return + // 队列为空时,检查 state.tasks 是否有未完成的任务 + const hasIncomplete = Object.values(state.tasks).some( + r => !r.lastUploadAt, + ) + if (!hasIncomplete) { + log.debug('queue empty, no incomplete tasks') + return + } + log.debug('queue empty, but has incomplete tasks in state') } log.info(`processing ${newTasks.length} new tasks`) diff --git a/src/services/rawDump/session.ts b/src/services/rawDump/session.ts index d579cc649..5d1085f50 100644 --- a/src/services/rawDump/session.ts +++ b/src/services/rawDump/session.ts @@ -107,14 +107,12 @@ export async function loadSessionMessages( const hasSession = lines.some( m => m.sessionId === sessionId || - m.session_id === sessionId || - m.uuid === sessionId, + m.session_id === sessionId ) const hasMessage = messageId ? lines.some( m => - m.uuid === messageId || - (m.message as Record)?.id === messageId, + m.uuid === messageId, ) : false if (hasSession || hasMessage) { diff --git a/src/services/rawDump/worker.ts b/src/services/rawDump/worker.ts index 7311bac10..6597bfece 100644 --- a/src/services/rawDump/worker.ts +++ b/src/services/rawDump/worker.ts @@ -689,13 +689,10 @@ export async function uploadConversation( return true } -const SUMMARY_DEDUP_WINDOW_MS = 5 * 60 * 1000 // 同一 session 5 分钟内 summary 只上报一次 /** * 上报一个 session 的摘要信息到 /raw-store/task-summary - * 摘要以 session 为维度,5 分钟内同一 session 只上报一次(通过 state.summary 去重) - * 包含 session 的起止时间、用户信息、客户端信息等 - * 即使 conversation 上报失败,summary 仍会独立上报 + * SummaryPayload 的信息不会更新,同一 session 只上报一次(通过 state.summary 去重) */ export async function uploadSummary( payload: { @@ -711,15 +708,9 @@ export async function uploadSummary( messageCount: payload.messages.length, }) - const lastReported = state.summary[payload.sessionID] - if ( - lastReported && - Date.now() - new Date(lastReported).getTime() < SUMMARY_DEDUP_WINDOW_MS - ) { - log.info('summary skipped: reported recently', { + if (state.summary[payload.sessionID]) { + log.info('summary skipped: already uploaded', { task_id: payload.sessionID, - lastReported, - windowMs: SUMMARY_DEDUP_WINDOW_MS, }) return }