(messages: Message[])
| 3399 | } |
| 3400 | |
| 3401 | function getTaskReminderTurnCounts(messages: Message[]): { |
| 3402 | turnsSinceLastTaskManagement: number |
| 3403 | turnsSinceLastReminder: number |
| 3404 | } { |
| 3405 | let lastTaskManagementIndex = -1 |
| 3406 | let lastReminderIndex = -1 |
| 3407 | let assistantTurnsSinceTaskManagement = 0 |
| 3408 | let assistantTurnsSinceReminder = 0 |
| 3409 | |
| 3410 | // Iterate backwards to find most recent events |
| 3411 | for (let i = messages.length - 1; i >= 0; i--) { |
| 3412 | const message = messages[i] |
| 3413 | |
| 3414 | if (message?.type === 'assistant') { |
| 3415 | if (isThinkingMessage(message)) { |
| 3416 | // Skip thinking messages |
| 3417 | continue |
| 3418 | } |
| 3419 | |
| 3420 | // Check for TaskCreate or TaskUpdate usage BEFORE incrementing counter |
| 3421 | if ( |
| 3422 | lastTaskManagementIndex === -1 && |
| 3423 | 'message' in message && |
| 3424 | Array.isArray(message.message?.content) && |
| 3425 | message.message.content.some( |
| 3426 | block => |
| 3427 | block.type === 'tool_use' && |
| 3428 | (block.name === TASK_CREATE_TOOL_NAME || |
| 3429 | block.name === TASK_UPDATE_TOOL_NAME), |
| 3430 | ) |
| 3431 | ) { |
| 3432 | lastTaskManagementIndex = i |
| 3433 | } |
| 3434 | |
| 3435 | // Count assistant turns before finding events |
| 3436 | if (lastTaskManagementIndex === -1) assistantTurnsSinceTaskManagement++ |
| 3437 | if (lastReminderIndex === -1) assistantTurnsSinceReminder++ |
| 3438 | } else if ( |
| 3439 | lastReminderIndex === -1 && |
| 3440 | message?.type === 'attachment' && |
| 3441 | message.attachment!.type === 'task_reminder' |
| 3442 | ) { |
| 3443 | lastReminderIndex = i |
| 3444 | } |
| 3445 | |
| 3446 | if (lastTaskManagementIndex !== -1 && lastReminderIndex !== -1) { |
| 3447 | break |
| 3448 | } |
| 3449 | } |
| 3450 | |
| 3451 | return { |
| 3452 | turnsSinceLastTaskManagement: assistantTurnsSinceTaskManagement, |
| 3453 | turnsSinceLastReminder: assistantTurnsSinceReminder, |
| 3454 | } |
| 3455 | } |
| 3456 | |
| 3457 | async function getTaskReminderAttachments( |
| 3458 | messages: Message[] | undefined, |
no test coverage detected