diff --git a/src-tauri/capabilities/default.json b/src-tauri/capabilities/default.json index 6bc29af1..a857a72a 100644 --- a/src-tauri/capabilities/default.json +++ b/src-tauri/capabilities/default.json @@ -25,6 +25,7 @@ "fs:scope-app-recursive", "fs:scope-temp-recursive", "shell:allow-execute", + "shell:allow-open", "http:default" ] } diff --git a/src-tauri/src/ai/openai.rs b/src-tauri/src/ai/openai.rs index 6cb1685c..a5b85eb0 100644 --- a/src-tauri/src/ai/openai.rs +++ b/src-tauri/src/ai/openai.rs @@ -132,9 +132,13 @@ impl OpenAiProvider { let mut body = serde_json::json!({ "model": config.model, "prompt": prompt, - "userId": "user@motorolasolutions.com", // Default user ID }); + // Add userId if provided (CORE ID email) + if let Some(user_id) = &config.user_id { + body["userId"] = serde_json::Value::String(user_id.clone()); + } + // Add optional system message if let Some(system) = system_message { body["system"] = serde_json::Value::String(system); @@ -157,6 +161,7 @@ impl OpenAiProvider { .post(&url) .header(auth_header, auth_value) .header("Content-Type", "application/json") + .header("X-msi-genai-client", "tftsr-devops-investigation") .json(&body) .send() .await?; diff --git a/src-tauri/src/state.rs b/src-tauri/src/state.rs index 24dc838e..4aee86a0 100644 --- a/src-tauri/src/state.rs +++ b/src-tauri/src/state.rs @@ -29,6 +29,9 @@ pub struct ProviderConfig { /// Optional: Session ID for stateful APIs like MSI GenAI #[serde(skip_serializing_if = "Option::is_none")] pub session_id: Option, + /// Optional: User ID for MSI GenAI (CORE ID email) + #[serde(skip_serializing_if = "Option::is_none")] + pub user_id: Option, } #[derive(Debug, Clone, Serialize, Deserialize)] diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index 8d1f6343..4796e749 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -1,6 +1,6 @@ { "productName": "TFTSR", - "version": "0.2.2", + "version": "0.2.6", "identifier": "com.tftsr.devops", "build": { "frontendDist": "../dist", @@ -10,7 +10,7 @@ }, "app": { "security": { - "csp": "default-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data: asset: https:; connect-src 'self' http://localhost:11434 http://localhost:8765 https://api.openai.com https://api.anthropic.com https://api.mistral.ai https://generativelanguage.googleapis.com https://auth.atlassian.com https://*.atlassian.net https://login.microsoftonline.com https://dev.azure.com" + "csp": "default-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data: asset: https:; connect-src 'self' http://localhost:11434 http://localhost:8765 https://api.openai.com https://api.anthropic.com https://api.mistral.ai https://generativelanguage.googleapis.com https://auth.atlassian.com https://*.atlassian.net https://login.microsoftonline.com https://dev.azure.com https://genai-service.stage.commandcentral.com https://genai-service.commandcentral.com" }, "windows": [ { diff --git a/src/lib/tauriCommands.ts b/src/lib/tauriCommands.ts index cbe0e95f..4e29bfbd 100644 --- a/src/lib/tauriCommands.ts +++ b/src/lib/tauriCommands.ts @@ -15,6 +15,7 @@ export interface ProviderConfig { custom_auth_prefix?: string; api_format?: string; session_id?: string; + user_id?: string; } export interface Message { diff --git a/src/pages/Settings/AIProviders.tsx b/src/pages/Settings/AIProviders.tsx index 48f5f1a1..dec32ea1 100644 --- a/src/pages/Settings/AIProviders.tsx +++ b/src/pages/Settings/AIProviders.tsx @@ -32,6 +32,7 @@ const emptyProvider: ProviderConfig = { custom_auth_prefix: undefined, api_format: undefined, session_id: undefined, + user_id: undefined, }; export default function AIProviders() { @@ -351,6 +352,21 @@ export default function AIProviders() { Prefix added before API key (e.g., "Bearer " for OpenAI, empty for MSI GenAI)

+ + {/* MSI GenAI specific: User ID field */} + {form.api_format === "msi_genai" && ( +
+ + setForm({ ...form, user_id: e.target.value })} + placeholder="your.name@motorolasolutions.com" + /> +

+ Optional: Your Motorola CORE ID email. If omitted, costs are tracked to API key owner. +

+
+ )} )}