@@ -638,6 +638,8 @@ func TestSimple(t *testing.T) {
638638 getResponseIDFunc func (streaming bool , resp * http.Response ) (string , error )
639639 createRequest func (* testing.T , string , []byte ) * http.Request
640640 expectedMsgID string
641+ userAgent string
642+ expectedClient string
641643 }{
642644 {
643645 name : config .ProviderAnthropic ,
@@ -648,6 +650,8 @@ func TestSimple(t *testing.T) {
648650 getResponseIDFunc : getAnthropicResponseID ,
649651 createRequest : createAnthropicMessagesReq ,
650652 expectedMsgID : "msg_01Pvyf26bY17RcjmWfJsXGBn" ,
653+ userAgent : "claude-cli/2.0.67 (external, cli)" ,
654+ expectedClient : aibridge .ClientClaude ,
651655 },
652656 {
653657 name : config .ProviderOpenAI ,
@@ -658,6 +662,8 @@ func TestSimple(t *testing.T) {
658662 getResponseIDFunc : getOpenAIResponseID ,
659663 createRequest : createOpenAIChatCompletionsReq ,
660664 expectedMsgID : "chatcmpl-BwoiPTGRbKkY5rncfaM0s9KtWrq5N" ,
665+ userAgent : "codex_cli_rs/0.87.0 (Mac OS 26.2.0; arm64)" ,
666+ expectedClient : aibridge .ClientCodex ,
661667 },
662668 {
663669 name : config .ProviderAnthropic + "_baseURL_path" ,
@@ -668,6 +674,8 @@ func TestSimple(t *testing.T) {
668674 getResponseIDFunc : getAnthropicResponseID ,
669675 createRequest : createAnthropicMessagesReq ,
670676 expectedMsgID : "msg_01Pvyf26bY17RcjmWfJsXGBn" ,
677+ userAgent : "GitHubCopilotChat/0.37.2026011603" ,
678+ expectedClient : aibridge .ClientCopilotVSC ,
671679 },
672680 {
673681 name : config .ProviderOpenAI + "_baseURL_path" ,
@@ -678,6 +686,8 @@ func TestSimple(t *testing.T) {
678686 getResponseIDFunc : getOpenAIResponseID ,
679687 createRequest : createOpenAIChatCompletionsReq ,
680688 expectedMsgID : "chatcmpl-BwoiPTGRbKkY5rncfaM0s9KtWrq5N" ,
689+ userAgent : "Zed/0.219.4+stable.119.abc123 (macos; aarch64)" ,
690+ expectedClient : aibridge .ClientZed ,
681691 },
682692 }
683693
@@ -726,6 +736,7 @@ func TestSimple(t *testing.T) {
726736 mockSrv .Start ()
727737 // When: calling the "API server" with the fixture's request body.
728738 req := tc .createRequest (t , mockSrv .URL , reqBody )
739+ req .Header .Set ("User-Agent" , tc .userAgent )
729740 client := & http.Client {}
730741 resp , err := client .Do (req )
731742 require .NoError (t , err )
@@ -756,6 +767,12 @@ func TestSimple(t *testing.T) {
756767 require .GreaterOrEqual (t , len (tokenUsages ), 1 )
757768 require .Equal (t , tokenUsages [0 ].MsgID , tc .expectedMsgID )
758769
770+ // Validate user agent and client have been recorded.
771+ interceptions := recorderClient .RecordedInterceptions ()
772+ require .Len (t , interceptions , 1 , "expected exactly one interception, got: %v" , interceptions )
773+ assert .Equal (t , tc .userAgent , interceptions [0 ].UserAgent )
774+ assert .Equal (t , tc .expectedClient , interceptions [0 ].Client )
775+
759776 recorderClient .VerifyAllInterceptionsEnded (t )
760777 })
761778 }
0 commit comments