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