ExtractSessionID extracts session identifier from multiple sources. Priority order: 1. metadata.user_id (Claude Code format with _session_{uuid}) - highest priority for Claude Code clients 2. X-Session-ID header 3. Session_id header (Codex) 4. X-Client-Request-Id header (PI) 5. metadata.user_id (non
(headers http.Header, payload []byte, metadata map[string]any)
| 512 | // 6. conversation_id field in request body |
| 513 | // 7. Stable hash from first few messages content (fallback) |
| 514 | func ExtractSessionID(headers http.Header, payload []byte, metadata map[string]any) string { |
| 515 | primary, _ := extractSessionIDs(headers, payload, metadata) |
| 516 | return primary |
| 517 | } |
| 518 | |
| 519 | // extractSessionIDs returns (primaryID, fallbackID) for session affinity. |
| 520 | // primaryID: full hash including assistant response (stable after first turn) |