( messages: readonly Message[], toolOutput: string, )
| 304 | } |
| 305 | |
| 306 | function buildReactionTranscript( |
| 307 | messages: readonly Message[], |
| 308 | toolOutput: string, |
| 309 | ): string { |
| 310 | const lines: string[] = [] |
| 311 | const recentMessages = messages.slice(-REACTION_TRANSCRIPT_WINDOW) |
| 312 | |
| 313 | for (const message of recentMessages) { |
| 314 | if (message.type !== 'user' && message.type !== 'assistant') { |
| 315 | continue |
| 316 | } |
| 317 | if (message.isMeta) { |
| 318 | continue |
| 319 | } |
| 320 | |
| 321 | const text = |
| 322 | message.type === 'user' |
| 323 | ? getUserMessageText(message) |
| 324 | : getAssistantMessageText(message) |
| 325 | if (text) { |
| 326 | lines.push( |
| 327 | `${message.type === 'user' ? 'user' : 'claude'}: ${text.slice(0, MAX_MESSAGE_CHARS)}`, |
| 328 | ) |
| 329 | } |
| 330 | } |
| 331 | |
| 332 | if (toolOutput) { |
| 333 | lines.push(`[tool output]\n${toolOutput.slice(-MAX_TOOL_OUTPUT_CHARS)}`) |
| 334 | } |
| 335 | |
| 336 | return lines.join('\n') |
| 337 | } |
| 338 | |
| 339 | async function postBuddyReaction( |
| 340 | companion: Companion, |
no test coverage detected