11import { Anthropic } from "@anthropic-ai/sdk"
2+ import OpenAI from "openai"
23
3- import { rooDefaultModelId , rooModels , type RooModelId } from "@roo-code/types"
4+ import { AuthState , rooDefaultModelId , rooModels , type RooModelId } from "@roo-code/types"
45import { CloudService } from "@roo-code/cloud"
56
67import type { ApiHandlerOptions } from "../../shared/api"
78import { ApiStream } from "../transform/stream"
89
910import type { ApiHandlerCreateMessageMetadata } from "../index"
11+ import { DEFAULT_HEADERS } from "./constants"
1012import { BaseOpenAiCompatibleProvider } from "./base-openai-compatible-provider"
1113
1214export class RooHandler extends BaseOpenAiCompatibleProvider < RooModelId > {
1315 constructor ( options : ApiHandlerOptions ) {
14- // Get the session token if available, but don't throw if not.
15- // The server will handle authentication errors and return appropriate status codes.
16- let sessionToken = ""
16+ let sessionToken : string | undefined = undefined
1717
1818 if ( CloudService . hasInstance ( ) ) {
19- sessionToken = CloudService . instance . authService ?. getSessionToken ( ) || ""
19+ sessionToken = CloudService . instance . authService ?. getSessionToken ( )
2020 }
2121
2222 // Always construct the handler, even without a valid token.
@@ -25,11 +25,25 @@ export class RooHandler extends BaseOpenAiCompatibleProvider<RooModelId> {
2525 ...options ,
2626 providerName : "Roo Code Cloud" ,
2727 baseURL : process . env . ROO_CODE_PROVIDER_URL ?? "https://api.roocode.com/proxy/v1" ,
28- apiKey : sessionToken || "unauthenticated" , // Use a placeholder if no token
28+ apiKey : sessionToken || "unauthenticated" , // Use a placeholder if no token.
2929 defaultProviderModelId : rooDefaultModelId ,
3030 providerModels : rooModels ,
3131 defaultTemperature : 0.7 ,
3232 } )
33+
34+ if ( CloudService . hasInstance ( ) ) {
35+ const cloudService = CloudService . instance
36+
37+ cloudService . on ( "auth-state-changed" , ( state : { state : AuthState } ) => {
38+ if ( state . state === "active-session" ) {
39+ this . client = new OpenAI ( {
40+ baseURL : this . baseURL ,
41+ apiKey : this . options . apiKey ,
42+ defaultHeaders : DEFAULT_HEADERS ,
43+ } )
44+ }
45+ } )
46+ }
3347 }
3448
3549 override async * createMessage (
0 commit comments