( ctx context.Context, store database.Store, chatID uuid.UUID, )
| 1430 | } |
| 1431 | |
| 1432 | func latestSubagentAssistantMessage( |
| 1433 | ctx context.Context, |
| 1434 | store database.Store, |
| 1435 | chatID uuid.UUID, |
| 1436 | ) (string, error) { |
| 1437 | messages, err := store.GetChatMessagesByChatID(ctx, database.GetChatMessagesByChatIDParams{ |
| 1438 | ChatID: chatID, |
| 1439 | AfterID: 0, |
| 1440 | }) |
| 1441 | if err != nil { |
| 1442 | return "", xerrors.Errorf("get chat messages: %w", err) |
| 1443 | } |
| 1444 | |
| 1445 | sort.Slice(messages, func(i, j int) bool { |
| 1446 | if messages[i].CreatedAt.Equal(messages[j].CreatedAt) { |
| 1447 | return messages[i].ID < messages[j].ID |
| 1448 | } |
| 1449 | return messages[i].CreatedAt.Before(messages[j].CreatedAt) |
| 1450 | }) |
| 1451 | |
| 1452 | for i := len(messages) - 1; i >= 0; i-- { |
| 1453 | message := messages[i] |
| 1454 | if message.Role != database.ChatMessageRoleAssistant || |
| 1455 | message.Visibility == database.ChatMessageVisibilityModel { |
| 1456 | continue |
| 1457 | } |
| 1458 | |
| 1459 | content, parseErr := chatprompt.ParseContent(message) |
| 1460 | if parseErr != nil { |
| 1461 | continue |
| 1462 | } |
| 1463 | text := strings.TrimSpace(contentBlocksToText(content)) |
| 1464 | if text == "" { |
| 1465 | continue |
| 1466 | } |
| 1467 | return text, nil |
| 1468 | } |
| 1469 | |
| 1470 | return "", nil |
| 1471 | } |
| 1472 | |
| 1473 | // isSubagentDescendant reports whether targetChatID is a descendant |
| 1474 | // of ancestorChatID by walking up the parent chain from the target. |
no test coverage detected