当队列为空时,需要检查state.tasks中的任务是否都已完成

This commit is contained in:
zbc 2026-05-28 20:43:39 +08:00
parent ae22ffd36e
commit a96006ae15
4 changed files with 15 additions and 19 deletions

View File

@ -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` | 使用的模型 |

View File

@ -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`)

View File

@ -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<string, unknown>)?.id === messageId,
m.uuid === messageId,
)
: false
if (hasSession || hasMessage) {

View File

@ -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
}