1212import secrets
1313import string
1414import time
15+ import uuid
1516from datetime import timedelta
1617from enum import Enum
1718from http import HTTPStatus
2627 wait_exponential ,
2728)
2829
30+ from purple_mcp import __version__
2931from purple_mcp .libs .purple_ai .config import (
3032 PurpleAIConfig ,
3133 PurpleAIConsoleDetails ,
@@ -67,12 +69,13 @@ def _build_graphql_request(
6769 end_time : int ,
6870 base_url : str ,
6971 version : str ,
70- account_id : str ,
71- team_token : str ,
72- email_address : str ,
73- user_agent : str ,
74- build_date : str ,
75- build_hash : str ,
72+ scalyr_account_id : str ,
73+ scalyr_team_token : str ,
74+ session_id : str | None ,
75+ email_address : str | None ,
76+ user_agent : str | None ,
77+ build_date : str | None ,
78+ build_hash : str | None ,
7679 conversation_id : str ,
7780) -> str :
7881 """Construct a GraphQL request with properly escaped string values.
@@ -87,8 +90,9 @@ def _build_graphql_request(
8790 end_time: End time in milliseconds since epoch
8891 base_url: Console base URL
8992 version: Console version
90- account_id: User account ID
91- team_token: User team token
93+ scalyr_account_id: Scalyr User account ID
94+ scalyr_team_token: Scalyr User team token
95+ session_id: User session ID
9296 email_address: User email address
9397 user_agent: User agent string
9498 build_date: Build date string
@@ -121,8 +125,9 @@ def _build_graphql_request(
121125 viewSelector: EDR
122126 contentType: NATURAL_LANGUAGE
123127 userDetails: {{
124- accountId: { json .dumps (account_id )}
125- teamToken: { json .dumps (team_token )}
128+ accountId: { json .dumps (scalyr_account_id )}
129+ teamToken: { json .dumps (scalyr_team_token )}
130+ sessionId: { json .dumps (session_id )}
126131 emailAddress: { json .dumps (email_address )}
127132 userAgent: { json .dumps (user_agent )}
128133 buildDate: { json .dumps (build_date )}
@@ -213,8 +218,9 @@ def _generate_query(self, query: str, conversation_id_for_tests: str | None = No
213218 end_time = current_time_millis ,
214219 base_url = self .config .console_details .base_url ,
215220 version = self .config .console_details .version ,
216- account_id = self .config .user_details .account_id ,
217- team_token = self .config .user_details .team_token ,
221+ scalyr_account_id = self .config .user_details .account_id ,
222+ scalyr_team_token = self .config .user_details .team_token ,
223+ session_id = self .config .user_details .session_id ,
218224 email_address = self .config .user_details .email_address ,
219225 user_agent = self .config .user_details .user_agent ,
220226 build_date = self .config .user_details .build_date ,
@@ -519,16 +525,17 @@ async def main() -> None:
519525 """Run a test query against Purple AI."""
520526 config = PurpleAIConfig (
521527 user_details = PurpleAIUserDetails (
522- account_id = "AIMONITORING" ,
523- team_token = "AIMONITORING" ,
524- email_address = "ai+purple-mcp@sentinelone.com" ,
525- user_agent = "IsaacAsimovMonitoringInc" ,
526- build_date = "02/28/2025, 00:00:00 AM" ,
527- build_hash = "N/A" ,
528+ account_id = "0" ,
529+ team_token = "0" ,
530+ session_id = uuid .uuid4 ().hex ,
531+ email_address = None ,
532+ user_agent = f"sentinelone/purple-mcp (version { __version__ } )" ,
533+ build_date = None ,
534+ build_hash = None ,
528535 ),
529536 console_details = PurpleAIConsoleDetails (
530537 base_url = "https://console.example.com" ,
531- version = "S-25.1.1#30 " ,
538+ version = "S" ,
532539 ),
533540 )
534541 result = await ask_purple (config , "What's the weather in Tokyo?" )
0 commit comments