(messages: Message[])
| 3324 | } |
| 3325 | |
| 3326 | function getTaskReminderTurnCounts(messages: Message[]): { |
| 3327 | turnsSinceLastTaskManagement: number |
| 3328 | turnsSinceLastReminder: number |
| 3329 | } { |
| 3330 | let lastTaskManagementIndex = -1 |
| 3331 | let lastReminderIndex = -1 |
| 3332 | let assistantTurnsSinceTaskManagement = 0 |
| 3333 | let assistantTurnsSinceReminder = 0 |
| 3334 | |
| 3335 | // Iterate backwards to find most recent events |
| 3336 | for (let i = messages.length - 1; i >= 0; i--) { |
| 3337 | const message = messages[i] |
| 3338 | |
| 3339 | if (message?.type === 'assistant') { |
| 3340 | if (isThinkingMessage(message)) { |
| 3341 | // Skip thinking messages |
| 3342 | continue |
| 3343 | } |
| 3344 | |
| 3345 | // Check for TaskCreate or TaskUpdate usage BEFORE incrementing counter |
| 3346 | if ( |
| 3347 | lastTaskManagementIndex === -1 && |
| 3348 | 'message' in message && |
| 3349 | Array.isArray(message.message?.content) && |
| 3350 | message.message.content.some( |
| 3351 | block => |
| 3352 | block.type === 'tool_use' && |
| 3353 | (block.name === TASK_CREATE_TOOL_NAME || |
| 3354 | block.name === TASK_UPDATE_TOOL_NAME), |
| 3355 | ) |
| 3356 | ) { |
| 3357 | lastTaskManagementIndex = i |
| 3358 | } |
| 3359 | |
| 3360 | // Count assistant turns before finding events |
| 3361 | if (lastTaskManagementIndex === -1) assistantTurnsSinceTaskManagement++ |
| 3362 | if (lastReminderIndex === -1) assistantTurnsSinceReminder++ |
| 3363 | } else if ( |
| 3364 | lastReminderIndex === -1 && |
| 3365 | message?.type === 'attachment' && |
| 3366 | message.attachment.type === 'task_reminder' |
| 3367 | ) { |
| 3368 | lastReminderIndex = i |
| 3369 | } |
| 3370 | |
| 3371 | if (lastTaskManagementIndex !== -1 && lastReminderIndex !== -1) { |
| 3372 | break |
| 3373 | } |
| 3374 | } |
| 3375 | |
| 3376 | return { |
| 3377 | turnsSinceLastTaskManagement: assistantTurnsSinceTaskManagement, |
| 3378 | turnsSinceLastReminder: assistantTurnsSinceReminder, |
| 3379 | } |
| 3380 | } |
| 3381 | |
| 3382 | async function getTaskReminderAttachments( |
| 3383 | messages: Message[] | undefined, |
no test coverage detected