MCPcopy Create free account
hub / github.com/Noumena-Network/code / getTodoReminderTurnCounts

Function getTodoReminderTurnCounts

src/utils/attachments.ts:3219–3271  ·  view source on GitHub ↗
(messages: Message[])

Source from the content-addressed store, hash-verified

3217}
3218
3219function getTodoReminderTurnCounts(messages: Message[]): {
3220 turnsSinceLastTodoWrite: number
3221 turnsSinceLastReminder: number
3222} {
3223 let lastTodoWriteIndex = -1
3224 let lastReminderIndex = -1
3225 let assistantTurnsSinceWrite = 0
3226 let assistantTurnsSinceReminder = 0
3227
3228 // Iterate backwards to find most recent events
3229 for (let i = messages.length - 1; i >= 0; i--) {
3230 const message = messages[i]
3231
3232 if (message?.type === 'assistant') {
3233 if (isThinkingMessage(message)) {
3234 // Skip thinking messages
3235 continue
3236 }
3237
3238 // Check for TodoWrite usage BEFORE incrementing counter
3239 // (we don't want to count the TodoWrite message itself as "1 turn since write")
3240 if (
3241 lastTodoWriteIndex === -1 &&
3242 'message' in message &&
3243 Array.isArray(message.message?.content) &&
3244 message.message.content.some(
3245 block => block.type === 'tool_use' && block.name === 'TodoWrite',
3246 )
3247 ) {
3248 lastTodoWriteIndex = i
3249 }
3250
3251 // Count assistant turns before finding events
3252 if (lastTodoWriteIndex === -1) assistantTurnsSinceWrite++
3253 if (lastReminderIndex === -1) assistantTurnsSinceReminder++
3254 } else if (
3255 lastReminderIndex === -1 &&
3256 message?.type === 'attachment' &&
3257 message.attachment.type === 'todo_reminder'
3258 ) {
3259 lastReminderIndex = i
3260 }
3261
3262 if (lastTodoWriteIndex !== -1 && lastReminderIndex !== -1) {
3263 break
3264 }
3265 }
3266
3267 return {
3268 turnsSinceLastTodoWrite: assistantTurnsSinceWrite,
3269 turnsSinceLastReminder: assistantTurnsSinceReminder,
3270 }
3271}
3272
3273async function getTodoReminderAttachments(
3274 messages: Message[] | undefined,

Callers 1

Calls 1

isThinkingMessageFunction · 0.85

Tested by

no test coverage detected