@@ -14,20 +14,36 @@ use crate::services::{LlmClient, XgenApiClient};
1414use crate :: services:: llm_client:: ChatMessage ;
1515use crate :: state:: AppState ;
1616
17- /// Open AI CLI in a separate window
17+ /// Open AI CLI in a separate window with auth token
1818#[ tauri:: command]
19- pub async fn open_cli_window ( app : AppHandle ) -> Result < ( ) > {
19+ pub async fn open_cli_window (
20+ app : AppHandle ,
21+ state : tauri:: State < ' _ , Arc < AppState > > ,
22+ xgen_token : Option < String > ,
23+ ) -> Result < ( ) > {
24+ // Store token in CLI session for later use
25+ if let Some ( token) = & xgen_token {
26+ let mut session = state. cli_session . write ( ) . await ;
27+ session. xgen_token = Some ( token. clone ( ) ) ;
28+ }
29+
2030 // If window already exists, focus it
2131 if let Some ( window) = app. get_webview_window ( "cli" ) {
2232 let _ = window. set_focus ( ) ;
2333 return Ok ( ( ) ) ;
2434 }
2535
26- // Create new CLI window
36+ // Pass token as query param so cli.html can use it
37+ let url = if let Some ( token) = & xgen_token {
38+ format ! ( "cli.html?token={}" , token)
39+ } else {
40+ "cli.html" . to_string ( )
41+ } ;
42+
2743 let _window = WebviewWindowBuilder :: new (
2844 & app,
2945 "cli" ,
30- tauri:: WebviewUrl :: App ( "cli.html" . into ( ) ) ,
46+ tauri:: WebviewUrl :: App ( url . into ( ) ) ,
3147 )
3248 . title ( "XGEN AI CLI" )
3349 . inner_size ( 700.0 , 500.0 )
@@ -72,8 +88,12 @@ pub async fn cli_send_message(
7288 let base_url = state. get_server_url ( ) . await
7389 . unwrap_or_else ( || "https://xgen.x2bee.com" . to_string ( ) ) ;
7490
75- // Use token from frontend auth (passed from cookie)
76- let xgen_api = XgenApiClient :: new ( base_url, xgen_token) ;
91+ // Use token: prefer passed token, fallback to session stored token
92+ let token = xgen_token. or_else ( || {
93+ let session = state. cli_session . try_read ( ) . ok ( ) ;
94+ session. and_then ( |s| s. xgen_token . clone ( ) )
95+ } ) ;
96+ let xgen_api = XgenApiClient :: new ( base_url, token) ;
7797
7898 // Create LLM client from XGEN backend config with optional provider/model
7999 let llm = LlmClient :: from_xgen (
@@ -158,7 +178,11 @@ pub async fn cli_list_providers(
158178) -> Result < Value > {
159179 let base_url = state. get_server_url ( ) . await
160180 . unwrap_or_else ( || "https://xgen.x2bee.com" . to_string ( ) ) ;
161- let xgen_api = XgenApiClient :: new ( base_url, xgen_token) ;
181+ let token = xgen_token. or_else ( || {
182+ let session = state. cli_session . try_read ( ) . ok ( ) ;
183+ session. and_then ( |s| s. xgen_token . clone ( ) )
184+ } ) ;
185+ let xgen_api = XgenApiClient :: new ( base_url, token) ;
162186 let providers = xgen_api. list_available_providers ( ) . await ?;
163187 Ok ( serde_json:: to_value ( providers) . unwrap_or_default ( ) )
164188}
0 commit comments