CoolFace
Apppublic

idxwze/SentinelOps

sourceHugging Faceupdated 6mo agoView on Hugging Face
0likes
app.cpython-314.pyc977 linesDownload Raw Back to __pycache__
1+
2 ��i����Z�^RIHt^RIt^RIt^RIHt^RIHtHtH	t	^RI3t^RIH
t^RIHt]!]4P$t]R,tR/RR	bR4RbRR
bRRbRRbRRbRRbRRbRRbRRbRRbRRbR R!bR"R#bR$R%bR&R'bR(R)b/R*R+bR,R-bR.R/bR0R1bR2R3bR4R5bR6R7bR8R9bR:R;bR<R=bR>R?bR@RAbRBRCbRDREbRFRGbRHRIbRJRKbC/RLRMbRNRObRPRQbRRRSbRTRUbRVRWbRXRYbRZR[bR\R]bR^R_bR`RabRbRcbRdRebRfRgbRhRibRjRkbRlRmbC/RnRobRpRqbRrRsbRtRubRvRwbRxRybRzR{bR|R}bR~RbR�R�bR�R�bR�R�bR�R�bR�R�bR�R�bR�R�bR�R�bCR�R�R�R�R�R�R�R�R�R�R�R�R�R�R�R�/CR�/RR�bR5R�bRR�bRR�bRR�bRR�bRRbRR�bRR�bRR�bRRbRR�bR R�bR"R�bR$R�bR&R�bR(R�b/R*R�bR,R�bR.R�bR0R�bR2R�bR4R�bR6R�bR8R�bR:R�bR<R�bR>R�bR@R�bRBR�bRDR�bRFRGbRHR�bRJR�bC/RLR�bRNR�bRPRQbRRR�bRTR�bRVR�bRXR�bRZR�bR\R�bR^R�bR`R�bRbR�bRdR�bRfR�bRhR�bRjR�bRlR�bC/RnR�bRpR�bRrR�bRtR�bRvR�bRxR�bRzR�bR|R�bR~R�bR�R�bR�R�bR�R�bR�R�bR�R�bR�R�bR�R�bR�R�bCR�R�R�R�R�R�R�R�R�R�R�R�R�R�R�R�/C/tR�R�R�R�R�R�R�R�/tR�R�R�R�R�R�R�R�R�R�/tR�R�ltR�t]!4wttt]Uu/uFqR�,VbK	uptR�R�ltERaERERlltERERlt ERERlt!ERERlt"ERER	lt#ERbERERllt$ER
ERlt%ERERlt&ERERlt'ERERlt(ERERlt)ERERlt*ERERlt+ERERlt,ERERlt-ERER lt.ER!ER"lt/ER#ER$lt0ER%ER&lt1ER'ER(lt2ER)ER*lt3ER+ER,lt4ER-ER.lt5ER/ER0lt6ER1ER2lt7ER3t8]Pr!ER4]8]PtPwER5ER6ER6ER7ER7ER87ER97;_uu_4t<]Pz!]1!R44t>]Pz!ER:4t?]P�!ER;.ER<7;_uu_4]P�!]#!RRER:44tB]P�!ER:ER=7;_uu_4]P�!^ER>ER?7;_uu_4]P�!]$!]!RR�4RRER:ER644tDRRR4]P�!^ER@ER?7;_uu_4]P�!ERA.ER<7;_uu_4]P�!4;_uu_4]P�!ERcERd.R]!RR4^ERB7tG]P�!.EReOR]!RR4^ERB7tI]P�!ER:]!RR4^ERC7tKRRR4RRR4RRR4RRR4]P�!ER:ERD.ERE7;_uu_4]P�!^ERFERG.ERH7;_uu_4]P�!]%!]!RR"4]!RR$444tL]P�!]'!RRRER:44tM]P�!]!!R4R]!RR&4ERI.ERJ7tNRRR4]P�!^	ERKER?7;_uu_4]P�!ER:ER=7;_uu_4]P�!^ERLERG.ERH7;_uu_4]P�!]%!]!RR(4]!RR*444tO]P�!])!RRRER:44tP]P�!]%!]!RR,4]!RR.444tQ]P�!].!RRER:4ERM.ER<7tS]P�!]%!]!RR04]!RR2444tT]P�!]/!RRER:4ERM.ER<7tURRR4]P�!^ERNER?7;_uu_4]P�!](!RRER:44tV]P�!ERG.ER<7;_uu_4]P�!]%!]!RR44]!RR6444tW]P�!]*!RRRER:44tXRRR4RRR4RRR4]P�!ER:ER=7;_uu_4]P�!^ER@ERG.ERH7;_uu_4]P�!]%!]!RR84]!RR:444tY]P�!]+!RRRER:44tZRRR4]P�!^ERNERG.ERH7;_uu_4]P�!]%!]!RR<4]!RR>444t[]P�!],!RRRER:44t\RRR4RRR4RRR4RRR4]P�!]&!R44t]]P�!]!RRf4ERO.ER<7t_]P�!ER:ERP.ERQ7;_uu_4t`]P�!ERR.ER<7;_uu_4]P�!]%!]!RRZ4]!RR\444ta]P�!]1!R4ERSERT]!RRZ4ERU.ERV7tc]P�!ER:]!RR^4ER:ERW.ERX7te]P�!4;_uu_4]P�!]!RRl4ERYER:ERZ.ER[7tf]P�!]!RRh4ER\.ER<7tgRRR4]P�!4;_uu_4]P�!]!RRn4ER:ER].ER^7th]P�!]!RRp4ER:ER].ER^7tiRRR4]P�!4;_uu_4]P�!]!RRr4ER:ER].ER^7tj]P�!]!RRt4ER:ER].ER^7tkRRR4]P�!]!RRv4ER:ER].ER^7tlRRR4RRR4RRR4]NP�]4]N]G]I]K.]M]P]S]U]X]Z]\]>]c]D]e]f]h]i]j]k]l]g]_.ER_7]GP�]IP�]KP�3FXtn]n!]3]G]N]I]K]?..]BN]DN]LN]MN]NN]GN]IN]KN]VN]ON]PN]QN]SN]TN]UN]WN]XN]YN]ZN][N]\N]aN]cN]eN]fN]hN]iN]jN]kN]lN]_N]`N]]N]>NER_7KZ	]_P�]5]?]G.]?]`]_.ER_7]gP�]5]?]G.]?]`]_.ER_7]fP�]6]e]>]N]G]I]K.]>]c]e]D.ER_7]eP�]6]e]>]N]G]I]K.]>]c]e]D.ER_7]hP�]7]h]>]N]G]I]K.]>]c]e]D.ER_7]iP�]7]i]>]N]G]I]K.]>]c]e]D.ER_7]jP�]7]j]>]N]G]I]K.]>]c]e]D.ER_7]kP�]7]k]>]N]G]I]K.]>]c]e]D.ER_7]lP�]7]l]>]N]G]I]K.]>]c]e]D.ER_7RRR4]qER`8Xd]<P�4R#R#uupi +'giEL�;i +'giEL;i +'giEL ;i +'giEL,;i +'giEL8;i +'giEL�;i +'giELt;i +'giEL�;i +'giEL�;i +'giEL�;i +'giEL�;i +'giEL,;i +'giEL8;i +'giELD;i +'giELP;i +'giEL;i +'giEL�;i +'giEL~;i +'giELj;i +'giELv;i +'giEL�;i +'giEL�;i(f�)�annotationsN)�Path)�Dict�List�Tuple)�
make_subplots�data�en�taglinez7AI incident copilot for reliability and security triage�subtitlezSReview live signals, isolate likely causes, and decide the next safe action faster.�workspace_statuszWorkspace status�language�Language�	text_sizez	Text size�contrastz
High contrast�compact�Compact�comfortable�Comfortable�large�Large�
nav_dashboard�	Dashboard�
nav_incidents�	Incidents�nav_copilot�Copilot�nav_profile�Profile�queue_titlezIncident queue�queue_subtitlez+Active incidents and current response state�incident_selectorzSelected incident�
summary_titlezIncident summary�summary_subtitlez0Current condition and recent operational context�signalszCore signals�signals_subtitlez3Latency and error behavior for the selected service�loadzInfrastructure and traffic�
load_subtitlez#Capacity pressure and request shape�dependencieszService dependencies�dependencies_subtitlez+Connected systems affected by this incident�7hypotheseszRanked hypotheses�hypotheses_subtitlez2Most likely explanations based on current evidence�actionszRecommended actions�actions_subtitlez.Practical next checks for the on-call engineer�
profile_titlezAnalyst profile�profile_subtitlez/Local prototype profile and working preferences�profile_name�Name�profile_role�Role�profile_team�Team�profile_languagezPreferred language�
profile_focuszAlert focus�profile_statuszOn-call status�profile_name_valuez	Maya Chen�profile_role_valuez8Junior SRE�profile_team_valuezPlatform Reliability�profile_focus_valuezPayments and authentication�profile_status_valuezPrimary on-call�copilotz9AI copilot�copilot_subtitlez3Incident-aware assistant for triage and explanation�copilot_placeholderzOAsk about likely cause, blast radius, recent changes, or the best next check...�
copilot_emptyz:Choose an incident to start a focused triage conversation.�copilot_closedzCopilot minimized�copilot_openz
Copilot ready�launcherzOpen Copilot�10close_chat�Close�suggested_promptszSuggested prompts�11ask_button�Send�why_checkoutzWhy is checkout failing?�recent_changeszWhat changed recently?�12root_causez#What is the most likely root cause?�check_firstzWhat should I check first?�security_concernzIs there a security concern?�
current_statez
Current state�
recent_changez
Recent change�affected_servicezAffected service�latency�Latency�13error_ratez14Error rate�cpu�CPU�requestszRequest volume�15confidence�16Confidence�17next_checkz18Next check�footer_notez<SentinelOps prototype for incident triage and reliability UX�status_loadingzLoading incident context�
status_loadedzIncident context loaded�status_no_incidentz*Select an incident to unlock the workspace�status_chat_blockedz+Select an incident before using the copilot�status_no_questionz#Enter a question or choose a prompt�assistant_introzmCopilot ready. I can summarize likely causes, recent changes, dependency impact, and recommended next checks.�empty_hypothesesz2No hypotheses are available for this incident yet.�empty_dependenciesz$No dependency impact data available.�empty_overviewzXSelect an incident from the queue to inspect service health, signals, and likely causes.�unavailable�Unavailable�frz;Copilote IA d'incident pour le triage fiabilite et securitezcAnalysez les signaux, isolez les causes probables et choisissez plus vite la prochaine action sure.zEtat de l'espace�LanguezTaille du textezContraste eleve�Confortable�Grand�Tableau�Copilote�ProfilzFile d'incidentsz*Incidents actifs et etat actuel de reponsezIncident selectionnezResume de l'incidentz+Etat actuel et contexte operationnel recentzSignaux principauxz?Comportement de latence et d'erreur pour le service selectionnezInfrastructure et traficz'Pression de capacite et forme du traficzDependances du servicez+Systemes connectes touches par cet incidentzHypotheses classeesz;Explications les plus probables selon les preuves actuelleszActions recommandeesz9Prochains controles concrets pour l'ingenieur d'astreintezProfil analystez3Profil local du prototype et preferences de travail�Nom�EquipezLangue prefereez
Focus alerteszStatut d'astreintez19SRE juniorzFiabilite plateformezPaiements et authentificationzAstreinte principalezCopilote IAz4Assistant contextuel pour le triage et l'explicationzpPosez une question sur la cause probable, la portee, les changements recents ou le meilleur prochain controle...zHChoisissez un incident pour commencer une conversation de triage ciblee.zCopilote reduitz
Copilote pretzOuvrir le copilote�FermerzInvites suggerees�Envoyerz"Pourquoi le checkout echoue-t-il ?z"Qu'est-ce qui a change recemment ?z&Quelle est la cause la plus probable ?z!Que dois-je verifier en premier ?z Y a-t-il un risque de securite ?zEtat actuelzChangement recentzService affecte�Latencez
Taux d'erreurzVolume de requetes�	ConfiancezProchain controlezAPrototype SentinelOps pour le triage d'incident et l'UX fiabilitez!Chargement du contexte d'incidentzContexte d'incident chargez9Selectionnez un incident pour activer l'espace de travailz5Selectionnez un incident avant d'utiliser le copilotez/Saisissez une question ou choisissez une invitez�Copilote pret. Je peux resumer les causes probables, les changements recents, l'impact sur les dependances et les prochains controles recommandes.z4Aucune hypothese n'est disponible pour cet incident.z0Aucune information sur l'impact des dependances.znSelectionnez un incident dans la file pour inspecter la sante du service, les signaux et les causes probables.�Indisponible�Criticalz#dc2626�High�#ea580c�Mediumz#ca8a04�Lowz#16a34a�
Investigatingz#b45309�20Mitigating�#2563eb�	Escalatedz#be123c�21Monitoring�#0f766e�	Contained�#7c3aedc��V^8�dQhRR/#)��pathr�)�formats"�app.py�__annotate__r��s����D��c��VPRRR7;_uu_4p\P!V4uuRRR4# +'giR#;i)�rzutf-8)�encodingN)�open�jsonr')r��files& r��	load_jsonr��s1��	
���3���	)�	)�T��y�y���22*�	)�	)�	)�s	�=�A	c��\\R,4p\\R,4p\\R,4pWV3#)zincidents.jsonzmetrics.jsonzhypotheses.json)r��DATA_DIR)�	incidents�metricsr+s   r��
load_datasetsr��s<���(�%5�5�6�I���>�1�2�G��8�&7�7�8�J��z�)�)r��idc�$�V^8�dQhRRRRRR/#)r��lang�str�key�returnr�)r�s"r�r�r��s!��4�4�C�4�c�4�c�4r�c�b�\PV\R,4PW4#)r23)�TEXT�get)r�r�s&&r��tr��s"���8�8�D�$�t�*�%�)�)�#�3�3r�c�$�V^8�dQhRRRRRR/#)r��value�float�unitr�r�r�)r�s"r�r�r��s!������c��3�r�c�x�VR8XdVR
R2#VR8Xd\V4R2#VR8Xd\V4R
R2#V#)�%z.1f�msz ms�rpm�,z rpm)�int)r�r�s&&r��
format_numberr��sQ���s�{����A����t�|��e�*��S�!�!��u�}��e�*�Q��t�$�$��W�r�c�$�V^8�dQhRRRRRR/#)r��incidentrr�r�r�r�)r�s"r�r�r��s&��[�[��[�S�[�S�[r�c�F�VRV2,RVR,RVR,2#)�title_z | �severity�servicer�)r�r�s&&r��get_incident_labelr��s1�����v��'�
(��H�Z�,@�+A��X�i�EX�DY�Z�Zr�c� �V^8�dQhRRRR/#)r�r�r�r�zList[Tuple[str, str]]r�)r�s"r�r�r��s��\�\�s�\�'<�\r�c�\�\Uu.uFp\W4VR,3NK	up#uupi)r�)�	INCIDENTSr�)r�r�s& r��get_incident_choicesr��s+��QZ�[�QZ�X�
��
/��$��@�QZ�[�[��[s�)c�$�V^8�dQhRRRRRR/#)r�rr�r�boolr�r�)r�s"r�r�r��s!��,�,��,��,��,r�c�2�V'dRMRpRV2pVRV2#)zcontrast-onzcontrast-offzsize-� r�)rr�contrast_class�24size_classs&&  r��get_accessibility_classesr��s)��&.�]�N�N����$�J��
�Q�z�l�+�+r�c�(�V^8�dQhRRRRRRRR/#�r�r�r�rrr�r�r�)r�s"r�r�r��s(����C��C��4��C�r�c���\W4pRVR\VR4R\VR4R\VR4R\VR4R\VR4R	\VR254R2#)z26    <div class="topbar-shell z�">27        <div class="brand-cluster">28            <div class="brand-mark">SO</div>29            <div class="brand-copy">30                <div class="brand-title">SentinelOps</div>31                <div class="brand-subtitle">rzt</div>32            </div>33        </div>34        <div class="nav-cluster">35            <div class="nav-item active">rz)</div>36            <div class="nav-item">rrrz�</div>37        </div>38        <div class="account-cluster">39            <div class="account-meta">40                <div class="account-label">r
z�</div>41                <div class="account-value">SentinelOps / MVP</div>42            </div>43            <div class="account-avatar">MC</div>44        </div>45    </div>46    �r�r�)r�rr�classess&&& r��build_header_htmlr��s���'�	�<�G��%�Y�'-�47./�t�Z�-@�,A�B*�+,�D�/�*B�)C�D#�#$�T�?�#;�"<�=#�#$�T�=�#9�":�;#�#$�T�=�#9�":�;,�-.�d�4F�,G�+H�I�#�r��neutralc�0�V^8�dQhRRRRRRRRRRRR/#)	r��messager�r�rrr��moder�r�)r�s"r�r�r�	s8����s��#��#����UX��il�r�c	�J�\W#4pRVRVR\VR4RVR2	#)z48    <div class="status-shell z mode-z%">49        <div class="status-label">r
z)</div>50        <div class="status-value">�</div>51    </div>52    r�)r�r�rrr�r�s&&&&& r��build_status_htmlr�	sI��'�	�<�G��%�Y�f�T�F�3#�#$�T�+=�#>�"?�@#�#*�)�,��r�c�$�V^8�dQhRRRRRR/#)r��titler�rr�r�)r�s"r�r�r�s!���������r�c��RVRVR2#)zF53    <div class="section-heading">54        <div class="section-title">z-</div>55        <div class="section-subtitle">r�r�)r�rs&&r��build_section_headingr�s%��$�$)�7�+'�'/�j�1��r�c� �V^8�dQhRRRR/#)r�r�r�r�r�)r�s"r�r�r�s����C��C�r�c�"�R\VR4R2#)zu56    <div class="footer-shell">57        <div class="footer-left">SentinelOps</div>58        <div class="footer-right">r\r��r��r�s&r��build_footer_htmlr�s%��#�$%�T�=�#9�":�;��r�c59�,�V^8�dQhRRRRRRRRRR/#)	r��selected_id�60str | Noner�r�rrr�r�r�)r�s"r�r�r�%s1����j������W[��`c�r�c��\W#4p.p\F�pVR,V8XdRMRp\PVR,R4p\PVR,R4p	VPRVRVRVR	VR,R61V	RV	R	VR,RVR
V2,RVR,RVR,RVRV2,R24K�	RP
V4#)r��selected�r��#64748b�statusz'62            <div class="incident-card r�zu">63                <div class="incident-card-top">64                    <span class="severity-pill" style="background:�;">zC</span>65                    <span class="status-pill" style="color:�; border-color:zK</span>66                </div>67                <div class="incident-title">r�z2</div>68                <div class="incident-meta">r�u • �	timestampz9</div>69                <div class="incident-description">�
short_status_�&</div>70            </div>71            �72)r�r��SEVERITY_COLORSr��
STATUS_COLORS�append�join)73r�r�rrr��cardsr��selected_class�severity_color�status_colors74&&&&      r��build_incident_cardsr�%s��'�	�<�G��E���'/��~��'D��"��(�,�,�X�j�-A�9�M��$�(�(��(�);�Y�G��
���'�'.�i�q��0@�AC�CQ�BR�RU�V^�_i�Vj�Uk�l<�<H�>��Ye�Xf�fi�jr�s{�j|�i}�~-�-5��t�f�o�-F�,G�H,�,4�Y�,?�+@��h�{�F[�E\�]3�3;�m�D�6�<R�3S�2T�U
�75
�	76�	�"�9�9�U��r�c�(�V^8�dQhRRRRRRRR/#r�r�)r�s"r�r�r�<s(��$�$�S�$�S�$�D�$�S�$r�c���\W4p\VR4\VR43\VR4\VR43\VR4\VR43\VR4R3\VR4\VR	43\VR774\VR43.pRPVUUu.uFwrVR
VRVR2NK	upp4pRVR\VR4R\VR4RVR2	#uuppi)r1r:r3r;r5r<r7zEN / FRr8r=r9r>r�zP78            <div class="profile-row">79                <div class="profile-key">z2</div>80                <div class="profile-value">r�z)81    <div class="panel-card profile-card z�">82        <div class="profile-top">83            <div>84                <div class="profile-avatar">MC</div>85            </div>86            <div class="profile-summary">87                <h3>r/z</h3>88                <p>r0zV</p>89            </div>90        </div>91        <div class="profile-grid">92            �93        </div>94    </div>95    )r�r�r�)r�rrr��items�labelr��rowss&&&     r��build_profile_htmlr�<s4��'�	�<�G�	96�4��	 �!�D�*>�"?�@�	97�4��	 �!�D�*>�"?�@�	98�4��	 �!�D�*>�"?�@�	99�4�#�	$�i�0�	100�4��	!�1�T�+@�#A�B�	101�4�!�	"�A�d�,B�$C�D�

�E��7�7�!&�	102�!&���
*�*/��1,�,1�7�3
�
�!&�	103�104�D�)�)0�	�2��t�_�-�.�/��d�.�/�0�1
��F�����	105s�C106c107�,�V^8�dQhRRRRRRRRRR/#�	r��incident_idr�r�r�rrr�r�r�)r�s"r�r�r�cs1��:�:�Z�:�s�:�s�:�VZ�:�_b�:r�c��\W#4pV'dV\9d!RVR\VR4R\VR4R2#\V,p\P	V/4pVP	R/4p\VR4\VP	R^4R	43\VR1084\VP	R^4R43\VR
4\VP	R^4R43\VR4\VP	R^4R43.pRP
VU	U109u.uFwr�RV	RV110R2NK	up111p	4p\P	VR,R4pRVR\VR4RVR,RVRVR,R\VR 4R!VR"V2,R#\VR$4R!VR%V2,R&\VR4R'VR(V2,R)VR*2#uup112p	i)+�/113        <div class="panel-card workspace-card �">114            <h3>r#�)</h3>115            <p class="empty-state">re�</p>116        </div>117        �
current_statsrS�118latency_msr�rU�error_rate_pctr�rV�cpu_pctrX�request_volume_rpmr�r�zM119            <div class="stat-card">120                <div class="stat-label">z/</div>121                <div class="stat-value">r�r�r��+122    <div class="panel-card workspace-card z^">123        <div class="workspace-top">124            <div>125                <div class="eyebrow">rRz</div>126                <h3>r�zS</h3>127            </div>128            <span class="severity-pill" style="background:r�z�</span>129        </div>130        <div class="info-grid">131            <div class="info-card">132                <div class="info-label">rPz.</div>133                <div class="info-body">�health_summary_zf</div>134            </div>135            <div class="info-card">136                <div class="info-label">rQ�recent_change_zq</div>137            </div>138        </div>139        <div class="summary-block">140            <div class="info-label">z</div>141            <p>�summary_z@</p>142        </div>143        <div class="stat-grid">144            r�)r��INCIDENT_MAPr��METRICSr�r�r�r�)
r�r�rrr�r��metric_payload�stats�145stat_itemsr�r��	stat_htmlr�s
&&&&         r��build_overview_htmlr	csb��'�	�<�G��+�\�9�/�/6�i�8��4��)�*�+$�$%�d�,<�$=�#>�?	��	��K�(�H��[�[��b�1�N������3�E�	146�4��	�]�5�9�9�\�1�+E�t�L�M�	147�4��	�
�e�i�i�8H�!�.L�c� R�S�	148�4����u�y�y��A�'>��D�E�	149�4��	�m�E�I�I�6J�A�,N�PU�V�W�	�J����!+�	150�!+���
)�).��0)�).��0
�
�!+�	151�152�I�%�(�(��*�)=�y�I�N�+�+2�)�4&�'(��.@�&A�%B�C��i�(�)�*;�;I�:J�#�h�Wa�Nb�Mc�d)�*+�4��)A�(B�C(�(0�?�4�&�1I�(J�'K�L)�*+�4��)A�(B�C(�(0�>�$��1H�(I�'J�K%�&'�t�_�%=�$>�?��8�D�6�*�+�,�-
��K��1���	153s�"G154c155�,�V^8�dQhRRRRRRRRRR/#r�r�)r�s"r�r�r��s1������3��3��Z^��cf�r�c��\W#4pV'dV\9d!RVR\VR4R\VR4R2#\V,PR.4pRP	VUu.uF?pRVR	,R156VR,P4RVR,R
VRV2,R2	NKA	up4pRVR\VR4RVR2#uupi)r�r�r)r�rdr��dependency_healthr�zX157            <div class="dependency-node">158                <div class="dependency-name">�namez<</div>159                <div class="dependency-status status-r�z">z6</div>160                <div class="dependency-impact">�impact_r�r�z-">161        <div class="section-inline-title">z,</div>162        <div class="dependency-grid">r�)r�rr�r�r��lower)r�r�rrr�r)�item�dependency_htmls&&&&    r��build_dependencies_htmlr�s,��'�	�<�G��+�W�4�/�/6�i�8��4��(�)�*$�$%�d�,@�$A�#B�C	��	��;�'�+�+�,?��D�L��g�g�%�		163�%��.�.2�6�l�^�<6�6:�8�n�6J�6J�6L�5M�R�PT�U]�P^�O_�`0�04�w�t�f�5E�0F�/G�H
�	
�%�		164��O�+�+2�)�4+�+,�T�>�+B�*C�D&�&5�%6�7����		165s�+AC
c166�,�V^8�dQhRRRRRRRRRR/#r�r�)r�s"r�r�r��s1�� � �z� �� �� �X\� �ad� r�c���\W#4p\PV.4pV'g!RVR\VR4R\VR4R2#.pVFxpVPRR4pVP	RVR	V2,R167VRVR\VR
4RVR,RVRV2,R\VR4RVRV2,R24Kz	RVRRPV4R2#)r�r�r+r�rcr��168risk_colorr�z�169            <div class="hypothesis-card">170                <div class="hypothesis-top">171                    <div class="hypothesis-title">r�zF</div>172                    <span class="confidence-pill" style="color:r�z;">173                        rY�: �confidence_scorezH%174                    </span>175                </div>176                <p>�explanation_z5</p>177                <div class="next-check"><strong>r[z:</strong> �recommended_action_r�r�z(">178        <div class="hypothesis-grid">r�r�)r��179HYPOTHESESr�r�r�r�)	r�r�rrr�r�r�rrs	&&&&     r��build_hypotheses_htmlr�sQ��'�	�<�G��N�N�;��+�E��/�/6�i�8��4��&�'�($�$%�d�,>�$?�#@�A	��	�
�E����X�X�l�I�6�180�
���3�48�&����3H�2I�J@�@J�|�?�[e�Zf�g��4��.�/�r�$�7I�2J�1K�L��<��v�.�/�0�11�12�4��1F�0G�{�SW�Zm�nr�ms�Xt�Su�Rv�w
�
�
	181�� +�+2�)�4&�&(�g�g�e�n�%5�6��r�c182�,�V^8�dQhRRRRRRRRRR/#r�r�)r�s"r�r�r��s1����J��c��c��UY��^a�r�c�L�\W#4p\PV.4pV'gRVR\VR4R2#RP	\VR,4UUu.uF,wrgRV^,RVRV2,R	VR183V2,R2NK.	upp4pRVR
VR2#uuppi)r�z&">184            <p class="empty-state">rcr�r�:N�NzP185            <div class="action-item">186                <div class="action-rank">z_</div>187                <div class="action-copy">188                    <div class="action-title">r�z4</div>189                    <div class="action-text">rz=</div>190                </div>191            </div>192            r�z$">193        <div class="action-list">r�)r�rr�r�r��	enumerate)	r�r�rrr�r��indexrr-s	&&&&     r��build_actions_htmlr!�s���'�	�<�G��N�N�;��+�E��/�/6�i�8$�$%�d�,>�$?�#@�A	��	��g�g� )��r��3�	194� 4���*�*/�!�)��5/�/3�f�T�F�O�/D�.E�F.�.2�5H���3O�.P�-Q�R
�
� 4�	195�
�G�+�+2�)�4"�")��+����	196s�2B 197c�(�V^8�dQhRRRRRRRR/#)r�r�r�r�rr�r��	go.Figurer�)r�s"r�r�r�s(����c�������r�c�(�RpRpRpV'dRp\P!4pVPRVVV\V^
R7\^^^6^R7\RR7\RR7\\	VR4R	R	R198R199R\^RR7R
7.R7	V#)�#0f172a�#ffffffz#020617�plotly_white��color�size��lr�r��bF��visibler_g�?�paperr�)r*r))�text�x�y�xref�yref�	showarrow�font)	�templater��
paper_bgcolor�plot_bgcolorr7�margin�xaxis�yaxisr)�go�Figure�
update_layout�dictr�)r�r�r�200font_color�paper_bg�plot_bg�figs&&&    r��build_empty_figurerFs����J��H��G���201�202�)�)�+�C��������
�203��
,��b�B�"��+��5�!��5�!���t�1�2�������r��3�
�204205���*�Jr�c�(�V^8�dQhRRRRRRRR/#�	r�r�r�r�r�rr�r�r#r�)r�s"r�r�r� s(��-�-�Z�-�s�-�d�-�y�-r�c���V'dV\9d\\VR4W4#\V,pVR,pVR,p\^^\VR4\VR43R7pVP	\206P!VVR,R\VR4\RR	R2077RRR
7^^R7VP	\208P!VVR,R\VR4\RR	R2097RRR
7^^R7VPR\VR4RR\R^
R7\^^^8^R7\RRRRRR7RR7VPRR%R R!7VPR"R#R#R$7V#)&r%�210timestamps�seriesrSrU�r��cols�subplot_titlesr��
lines+markersr}�@�r)�width�tozeroyzrgba(37,99,235,0.10)�r2r3r�r
�line�fill�	fillcolor��row�colr�rxzrgba(234,88,12,0.10)r'r&r%r(r+�h�bottom�H�z�G�?�right��?��orientation�yanchorr3�xanchorr2�@�r8r�r9r:r7r;�legend�heightF�#e2e8f0��showgrid�	tickangle�	linecolorT�#eef2f7�rj�	gridcolor�
zerolinecolor�����)rrFr�r�	add_tracer>�ScatterrAr@�update_xaxes�update_yaxes�r�r�r�payloadrJrKrEs&&&    r��build_signal_figurerx s����+�W�4�!�!�D�)�"4�d�E�E��k�"�G���&�J�
�X�
�F�211�Q�Q��$�	�8J�A�d�T`�La�7b�212c�C��M�M�213�214�215���\�"� ��4��#��I�S�1��,�	216�
�
����M�M�217�218�219���%�&� ��4��&��I�S�1��,�	220�
�
���������i� ���
�	��
+��b�B�"��+���X��w�RU�V���	����e�s�i��H����d�i�y��Q��Jr�c�(�V^8�dQhRRRRRRRR/#rHr�)r�s"r�r�r�Ps(��*�*�:�*�S�*�D�*�Y�*r�c���V'dV\9d\\VR4W4#\V,pVR,pVR,p\^^\VR4\VR43R7pVP	\221P!VVR,R\VR4\RR	R2227RRR
7^^R7VP	\223P!VVR,\VR4\RRR7R7^^R7VPR\VR4RR\R^
R7\^^^8^R7\RRRRRR7RR 7VPR!R'R"R#7VPR$R%R%R&7V#)(r'rJrKrVrXrLr�rOr�rPrQrSzrgba(15,118,110,0.10)rTrXr�r�g=224ףp=�?)r)�opacity)r2r3r
�markerr'r&r%r(r+r[r\r]r^r_r`rdreFrhriTrmrnrq)rrFr�rrrr>rsrA�Barr@rtrurvs&&&    r��build_load_figurer~Psu���+�W�4�!�!�D�&�/�4�B�B��k�"�G���&�J�
�X�
�F�225�Q�Q��$����$�PZ�H[�7\�226]�C��M�M�227�228�229���Y�� ��4����I�S�1��-�	230�
�
����M�M�231�����)�*��4��$��i��6�		232�
�
��	�������f�o���
�	��
+��b�B�"��+���X��w�RU�V���	����e�s�i��H����d�i�y��Q��Jr�c� �V^8�dQhRRRR/#)r�r�r�r�z	List[str]r�)r�s"r�r�r�}s������	�r�c�t�\VR4\VR4\VR4\VR4\VR4.#)rKrLrMrNrOr�r�s&r��get_suggested_promptsr�}s@��	�$���	�$� �!�	�$���	�$�
��	�$�"�#��r�c� �V^8�dQhRRRR/#)r�r�r�r�zList[Dict[str, str]]r�)r�s"r�r�r��s��J�J�C�J�$8�Jr�c�$�RRR\VR4/.#)�role�	assistant�contentrbr�r�s&r��get_copilot_intror��s��
�[�)�Q�t�5F�-G�H�I�Ir�c�(�V^8�dQhRRRRRRRR/#)r�r�r�r��questionr�r�)r�s"r�r�r��s(������3��#��#�r�c�a�\V,p\PV/.4^,pVR,pVP4o\;QJdV3RlR4F'gKRM	RM!V3RlR44'd
VRV2,#\;QJdV3RlR4F'gKRM	RM!V3RlR44'd
VRV2,#\;QJdV3RlR4F'gKRM	RM!V3RlR44'd
VR	V2,#\;QJdV3R233lR4F'gKRM	RM!V3R234lR44'd
VRV2,#\;QJdV3RlR4F'gKRM	RM!V3RlR44'd
VR
V2,#VPRV2\VR44pVPRV2\VR44pVR
V2,R\VR4RVR\VR4RVPR^4RVR2#)r�copilot_responsesc3�,<"�TF	qS9x�K	R#5i�Nr���.0�keyword�235normalizeds& �r��	<genexpr>�)build_copilot_response.<locals>.<genexpr>�s����236|�0{�W�j� �0{���TF�changes_c3�,<"�TF	qS9x�K	R#5ir�r�r�s& �r�r�r��s����237b�0a�W�j� �0a�r��root_cause_c3�,<"�TF	qS9x�K	R#5ir�r�r�s& �r�r�r��s����238d�0c�W�j� �0c�r��check_first_c3�,<"�TF	qS9x�K	R#5ir�r�r�s& �r�r�r��s����239k�0j�W�j� �0j�r��	security_c3�,<"�TF	qS9x�K	R#5ir�r�r�s& �r�r�r��s����240v�0u�W�j� �0u�r�rr�rfrr�r[rz. rYrz% on �.)�change�changed�recent�modificationz241change rec�242changement)�root�cause�likely�probable�racine)�check�first�verify�verifier�premier)�security�abuse�243credential�securite�attaque)�why�failing�downrS�timeout�pourquoi�echec)rrr�r�anyr�)	r�r�r�r��top_hypothesis�	responses�fallback_title�fallback_actionr�s	&&&     @r��build_copilot_responser��s�����K�(�H��^�^�K�"��6�q�9�N��,�-�I����!�J�244�s�245|�0{�246|�s�s�s�247|�0{�248|�|�|��8�D�6�*�+�+�249�s�250b�0a�251b�s�s�s�252b�0a�253b�b�b��;�t�f�-�.�.�254�s�255d�0c�256d�s�s�s�257d�0c�258d�d�d��<��v�.�/�/�259�s�260k�0j�261k�s�s�s�262k�0j�263k�k�k��9�T�F�+�,�,�264�s�265v�0u�266v�s�s�s�267v�0u�268v�v�v��8�D�6�*�+�+�#�'�'�&�����4��9O�P�N�$�(�(�+>�t�f�)E�q��}�G]�^�O��x��v�&�'�269(���T�<� �270!��O�#4�B��T�<� �271!��N�$6�$6�7I�1�$M�#N�e�Tb�Sc�cd�	f�r�c272�,�V^8�dQhRRRRRRRRRR/#)	r�r�r��selected_incidentr�rrr��	chat_openr�)r�s"r�r�r��s1��*�*�#�*�*�*��*�PT�*�ae�*r�c�b�VRJp\Y'dRMR4pV'dRMRp\V4p\V4p	V'g	V'dR\VR42MR\VR42p273.\WV4N\	W`W#V4N\\VR	4\VR27444N\
WW#4N\P!\V4\VR4VR7N\P!\VR
4R7N\P!\VR4R7N\P!\VR4R7N\WV4N\\VR4\VR44N\WW#4N\\VR4\VR44N\WV4N\\VR4\VR44N\WV4N\\VR4\VR44N\WW#4N\\VR4\VR44N\WW#4N\\VR4\VR44N\!WW#4N\\VR4\VR44N\P!V	\VR4R7N\P!\VR4VR 7N\P!\VR!4VR"7N\P!V^,VR"7N\P!V^,VR"7N\P!V^,VR"7N\P!V^,VR"7N\P!V^,VR"7N\P!V275R#7N\P!VR$7N\#V4NV	N5#)%Nr^r_�healthyr��● r?�○ rEr r!r")�choicesr�r�r)r�rrr#r$r%r&r'r(r)r*r+r,r-r.r@)r�r�rA)�placeholder�interactiverI)r�r��r�r.)r�r�r�r�r�r�r��gr�updater�r�r	rxr~rrr!r�)r�r�rrr��enabled�status_message�status_mode�prompts�276chat_valuerEs&&&&&      r��sync_uir��s����t�+�G��t��_�=Q�R�N�&�)�I�K�#�D�)�G�"�4�(�J�.7�7��a��i�(�)�*�$�q�QU�Wa�Ob�Nc�Hd�H�#��$�8�4�#��.�	�[�Q�#�	�a��m�4�a��>N�6O�P�#�	�.�i�J�	#�277	�	�	�.�t�4�A�d�DW�<X�`q�r�#�	�	�	��$�278�+�,�
#�	�	�	��$��,�-�#�	�	�	��$�279�+�,�#�	�4�H�5�#�	�a��o�6��$�@R�8S�T�#�	�-�Y�I�#�	�a��i�0�!�D�:L�2M�N�#�	�-�X�>�#�	�a��f�o�q���/G�H�#�	�+�8�<�#� 	�a��n�5�q��?V�7W�X�!#�"	 � 1��M�##�$	�a��l�3�Q�t�=R�5S�T�%#�&	�/�y�K�'#�(	�a��i�0�!�D�:L�2M�N�)#�*	�,�I�H�+#�,	�a��i�0�!�D�:L�2M�N�-#�.	�	�	�280�!�D�)�*<�=�/#�0	�	�	�a��&;�<�'�R�1#�2	�	�	��$��-�7�C�3#�4	�	�	���281��8�5#�6	�	�	���282��8�7#�8	�	�	���283��8�9#�:	�	�	���284��8�;#�<	�	�	���285��8�=#�>	�	�	��!�?#�@	�	�	�)�$�A#�B	�$��C#�D	�E#�#r�c�(�V^8�dQhRRRRRRRR/#)r�r�r�r�r�rrr�r�)r�s"r�r�r��s/��D�D�J�D�c�D�c�D�]a�Dr�c#�*"�\WW#4p\V4pV'EgEV\RWV4\RW4\	RW4\RWV4\
RWV4\RWV4VV\\VR4WVR4\P!R\VR4R7\P!RR7\P!RR7\P!RR7\P!RR7\P!RR7\P!RR7\P!RR7\P!R\VR42R	73x�R#V\RWV4\\VR2864W4\\VR4W4\RWV4\
RWV4\RWV4VV\\VR4WVR
4\P!R\VR4R7\P!RR7\P!RR7\P!RR7\P!RR7\P!RR7\P!RR7\P!RR7\P!R\VR42R	73x�\P!R4V\WW#4\WV4\	WV4\WW#4\
WW#4\WW#4VV\\VR4WVR4\P!R\VR4R7\P!RR7\P!RR7\P!RR7\P!RR7\P!RR7\P!RR7\P!RR7\P!R\VR42R	73x�R#5i)Nr_r�FrA)r�r�)r�r�rEr�r%r'r]�loadingr�r?g�?r^r�T)r�r�r	rxr~rrr!r�r�r�r�rF�time�sleep)r�r�rrr��
intro_historys&&&&  r��update_incident_viewr��s��� �!2�)�N�E�%�d�+�M������d�x�@���d�5��d�D�3�#�D�$�8�D�!�$���B��t�T�h�?����a��&:�;�T�h�Xa�b��I�I�%�Q�t�=R�5S�T��I�I�%�(��I�I�%�(��I�I�%�(��I�I�%�(��I�I�%�(��I�I�%�(��I�I�%�(��I�I�d�1�T�:�#6�"7�8�9�'287�	288�*	�
��D�$�8�<��1�T�9�-�t�>��1�T�6�?�D�;���d�x�@��d�D�X�>��4��(�;����!�D�"2�3�T�h�PY�Z�289�	�	�e��4�9N�1O�P�290�	�	�e�$�291�	�	�e�$�292�	�	�e�$�293�	�	�e�$�294�	�	�e�$�295�	�	�e�$�296�	�	�e�$�297�	�	�$�q��y�1�2�3�4�'��*	�J�J�t��
��-�Y�I��-�X�>��+�8�<�� 1��M��/�y�K��,�I�H����!�D�/�2�D�X�y�Y�298�	�	�d��$�8M�0N�O�299�	�	�d�#�300�	�	�d�#�301�	�	�d�#�302�	�	�d�#�303�	�	�d�#�304�	�	�d�#�305�	�	�d�#�306�	�	�$�q��y�1�2�3�4�'��s�PPc� �V^8�dQhRRRR/#)r�r�r�r�r�r�)r�s"r�r�r�s��[�[�4�[�s�[r�c���V'*pV'd
\VR4M\VR4pV'dRMRpV\P!VR7\P!VRV2R73#)r?rEu●u○r.r�r�)r�r�r�)r�r��307next_stater��prefixs&&   r��toggle_chatr�sV����J�",�A�d�I��!�D�*�2E�E� �U�e�F��r�y�y��4�b�i�i���PQ�RW�QX�FY�6Z�Z�Zr�c�0�V^8�dQhRRRRRRRRRRR	R308/#)r�r�r��history�List[Dict[str, str]] | Noner�r�r�rrr�r�)r�s"r�r�r�sL��s�s�
�s�
(�s�"�s��	s�309�s��
sr�c310���T;'g.pV'g;VPRRR\VR4/4WR\\VR4W4VR43#V'dVP4'gWR\\VR4W4VR43#\	W#VP44pVPRRRVP4/4VPRRRV/4WR\\VR4W4VR	43#)311r�r�r�r`r��warningra�userr^r�)r�r�r��stripr�)r�r�r�r�rr�answers&&&&&& r��submit_chatr�s����m�m��G�������Y��$�@U�8V�W�X���%6�q��?T�7U�W[�hp�r{�%|�|�|��'�-�-�/�/���%6�q��?S�7T�VZ�go�qz�%{�{�{�
#�$5�W�]�]�_�
M�F��N�N�F�F�I�w�}�}��?�@��N�N�F�K��F�;�<��R�!2�1�T�?�3K�T�^f�hq�!r�r�rr�c�0�V^8�dQhRRRRRRRRRRR	R312/#)r��promptr�r�r�r�r�r�rrr�r�)r�s"r�r�r�2sL��V�V��V�
(�V�"�V��	V�313�V��
Vr�c��\WW#WE4#r�)r�)r�r�r�r�rrs&&&&&&r��314use_promptr�2s���v�(9��U�Ur�a,315:root {316  --bg: #f5f7fb;317  --bg-soft: #eef2f7;318  --panel: #ffffff;319  --panel-soft: #fbfcfe;320  --panel-accent: #f2f7ff;321  --text: #0f172a;322  --text-soft: #475569;323  --text-faint: #64748b;324  --border: #e6ebf2;325  --border-strong: #d4dce8;326  --accent: #2563eb;327  --accent-soft: #dbeafe;328  --success: #15803d;329  --warning: #b45309;330  --danger: #dc2626;331  --shadow-sm: 0 1px 2px rgba(15, 23, 42, 0.04);332  --shadow-md: 0 12px 32px rgba(15, 23, 42, 0.06);333  --radius-xl: 18px;334  --radius-lg: 16px;335  --radius-md: 12px;336}337 338body, .gradio-container {339  font-family: Inter, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif !important;340  background:341    radial-gradient(circle at top left, rgba(37, 99, 235, 0.035), transparent 26%),342    linear-gradient(180deg, #f8fafc 0%, #f5f7fb 100%);343  color: var(--text);344}345 346.gradio-container {347  max-width: 1560px !important;348  padding: 20px 18px 28px !important;349}350 351.gradio-container .block,352.gradio-container .gr-box,353.gradio-container .gr-group {354  border: none !important;355  box-shadow: none !important;356  background: transparent !important;357}358 359.gradio-container button,360.gradio-container input,361.gradio-container textarea,362.gradio-container select,363.gradio-container label,364.gradio-container div,365.gradio-container span,366.gradio-container p {367  font-family: Inter, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif !important;368}369 370.app-shell {371  gap: 16px !important;372}373 374.topbar-shell {375  background: rgba(255, 255, 255, 0.88);376  backdrop-filter: blur(10px);377  border: 1px solid var(--border);378  border-radius: 18px;379  box-shadow: var(--shadow-sm);380  padding: 14px 18px;381  display: grid;382  grid-template-columns: 1.3fr 1fr 0.9fr;383  align-items: center;384  gap: 18px;385}386 387.brand-cluster,388.account-cluster {389  display: flex;390  align-items: center;391  gap: 12px;392}393 394.brand-mark {395  width: 40px;396  height: 40px;397  border-radius: 12px;398  background: linear-gradient(180deg, #eff6ff, #dbeafe);399  color: var(--accent);400  display: flex;401  align-items: center;402  justify-content: center;403  font-weight: 800;404  font-size: 14px;405}406 407.brand-title {408  font-size: 16px;409  font-weight: 700;410  color: var(--text);411}412 413.brand-subtitle {414  margin-top: 2px;415  font-size: 12px;416  color: var(--text-faint);417}418 419.nav-cluster {420  display: flex;421  align-items: center;422  justify-content: center;423  gap: 8px;424}425 426.nav-item {427  padding: 8px 12px;428  border-radius: 10px;429  color: var(--text-faint);430  font-size: 13px;431  font-weight: 600;432  border: 1px solid transparent;433}434 435.nav-item.active {436  background: var(--panel-accent);437  color: var(--accent);438  border-color: #bfdbfe;439}440 441.account-meta {442  margin-left: auto;443  text-align: right;444}445 446.account-label {447  font-size: 11px;448  color: var(--text-faint);449  text-transform: uppercase;450  letter-spacing: 0.06em;451  font-weight: 700;452}453 454.account-value {455  margin-top: 3px;456  font-size: 13px;457  color: var(--text-soft);458}459 460.account-avatar,461.profile-avatar {462  width: 38px;463  height: 38px;464  border-radius: 999px;465  background: #eff6ff;466  color: var(--accent);467  display: flex;468  align-items: center;469  justify-content: center;470  font-weight: 700;471}472 473.settings-shell,474.status-shell,475.pane-shell,476.panel-card,477.chat-popup {478  background: var(--panel);479  border: 1px solid var(--border);480  box-shadow: var(--shadow-sm);481}482 483.settings-shell {484  border-radius: 16px;485  padding: 14px 16px 8px;486}487 488.status-shell {489  border-radius: 16px;490  padding: 16px 18px;491}492 493.status-label,494.eyebrow,495.info-label,496.stat-label,497.profile-key,498.dependency-impact {499  font-size: 11px;500  color: var(--text-faint);501  text-transform: uppercase;502  letter-spacing: 0.06em;503  font-weight: 700;504}505 506.status-value {507  margin-top: 8px;508  font-size: 15px;509  color: var(--text);510  font-weight: 700;511}512 513.mode-healthy .status-value { color: var(--success); }514.mode-warning .status-value { color: var(--warning); }515.mode-loading .status-value { color: var(--accent); }516 517.section-heading {518  padding: 2px 2px 10px;519}520 521.section-title {522  font-size: 15px;523  font-weight: 700;524  color: var(--text);525}526 527.section-subtitle {528  margin-top: 3px;529  font-size: 12px;530  color: var(--text-faint);531}532 533.master-detail {534  gap: 16px !important;535  align-items: start !important;536}537 538.pane-shell {539  border-radius: 18px;540  padding: 14px;541}542 543.incident-card {544  background: var(--panel);545  border: 1px solid var(--border);546  border-radius: 14px;547  padding: 14px;548  margin-bottom: 10px;549  transition: border-color 0.16s ease, background 0.16s ease, box-shadow 0.16s ease;550}551 552.incident-card:hover {553  border-color: var(--border-strong);554  box-shadow: var(--shadow-sm);555}556 557.incident-card.selected {558  background: var(--panel-accent);559  border-color: #93c5fd;560  box-shadow: inset 3px 0 0 var(--accent);561}562 563.incident-card-top,564.workspace-top,565.hypothesis-top,566.profile-top {567  display: flex;568  align-items: flex-start;569  justify-content: space-between;570  gap: 10px;571}572 573.incident-title,574.hypothesis-title,575.action-title {576  margin-top: 10px;577  color: var(--text);578  font-weight: 700;579  font-size: 15px;580  line-height: 1.35;581}582 583.incident-meta,584.incident-description,585.info-body,586.summary-block p,587.hypothesis-card p,588.next-check,589.action-text,590.profile-summary p,591.empty-state {592  color: var(--text-soft);593  font-size: 13px;594  line-height: 1.55;595}596 597.incident-meta,598.incident-description {599  margin-top: 7px;600  color: var(--text-faint);601  font-size: 12px;602}603 604.severity-pill,605.status-pill,606.confidence-pill {607  display: inline-flex;608  align-items: center;609  justify-content: center;610  border-radius: 999px;611  padding: 4px 9px;612  font-size: 11px;613  font-weight: 700;614}615 616.severity-pill {617  color: white;618}619 620.status-pill,621.confidence-pill {622  background: #ffffff;623  border: 1px solid var(--border-strong);624}625 626.workspace-card,627.profile-card {628  border-radius: 16px;629  padding: 18px;630}631 632.workspace-card h3,633.profile-summary h3 {634  margin: 0;635  font-size: 16px;636  color: var(--text);637}638 639.info-grid,640.stat-grid,641.dependency-grid,642.hypothesis-grid,643.workspace-two-up {644  display: grid;645  gap: 14px;646}647 648.info-grid {649  grid-template-columns: repeat(2, minmax(0, 1fr));650  margin: 18px 0;651}652 653.stat-grid {654  grid-template-columns: repeat(4, minmax(0, 1fr));655  margin-top: 18px;656}657 658.dependency-grid,659.hypothesis-grid {660  grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));661}662 663.info-card,664.stat-card,665.dependency-node,666.hypothesis-card,667.action-item,668.profile-row {669  background: var(--panel-soft);670  border: 1px solid var(--border);671  border-radius: 14px;672  padding: 14px;673}674 675.stat-value {676  margin-top: 8px;677  font-size: 21px;678  font-weight: 700;679  color: var(--text);680}681 682.summary-block {683  margin-top: 2px;684}685 686.section-inline-title {687  margin-bottom: 14px;688  font-size: 14px;689  font-weight: 700;690  color: var(--text);691}692 693.dependency-name,694.profile-value {695  color: var(--text);696  font-weight: 600;697}698 699.dependency-status {700  margin: 8px 0;701  font-size: 11px;702  font-weight: 700;703  text-transform: uppercase;704  letter-spacing: 0.06em;705}706 707.status-healthy { color: #15803d; }708.status-degraded { color: #c2410c; }709.status-failed { color: #dc2626; }710.status-monitoring { color: #2563eb; }711 712.profile-grid,713.action-list {714  display: grid;715  gap: 10px;716  margin-top: 16px;717}718 719.profile-top {720  align-items: center;721}722 723.profile-summary p {724  margin: 4px 0 0;725  font-size: 12px;726}727 728.profile-row,729.action-item {730  display: flex;731  align-items: flex-start;732  gap: 12px;733}734 735.action-rank {736  width: 28px;737  height: 28px;738  border-radius: 999px;739  background: var(--accent-soft);740  color: var(--accent);741  display: flex;742  align-items: center;743  justify-content: center;744  font-size: 12px;745  font-weight: 700;746  flex: 0 0 auto;747}748 749.workspace-section {750  gap: 14px !important;751}752 753.plot-shell {754  border: 1px solid var(--border);755  border-radius: 16px;756  overflow: hidden;757}758 759.settings-shell label,760.settings-shell .wrap label,761.settings-shell .label-wrap > label {762  color: var(--text-faint) !important;763  font-size: 12px !important;764  font-weight: 600 !important;765}766 767.settings-shell .gradio-dropdown > div,768.settings-shell .gradio-radio label,769.settings-shell .gradio-checkbox label,770.queue-select .gradio-radio label {771  background: #ffffff !important;772  border: 1px solid var(--border) !important;773  border-radius: 12px !important;774  box-shadow: none !important;775  color: var(--text) !important;776}777 778.queue-select .gradio-radio label.selected {779  border-color: #93c5fd !important;780  background: var(--accent-soft) !important;781}782 783.floating-launcher {784  position: fixed !important;785  right: 24px;786  bottom: 24px;787  z-index: 40;788}789 790.floating-launcher button {791  border-radius: 999px !important;792  padding: 12px 16px !important;793  background: #0f172a !important;794  color: white !important;795  border: none !important;796  box-shadow: var(--shadow-md) !important;797  font-weight: 700 !important;798}799 800.chat-panel-shell {801  position: fixed !important;802  right: 24px;803  bottom: 84px;804  z-index: 45;805  width: 360px;806  max-width: calc(100vw - 32px);807}808 809.chat-popup {810  border-radius: 18px;811  padding: 14px;812  box-shadow: var(--shadow-md);813}814 815.chat-shell {816  border: 1px solid var(--border);817  border-radius: 14px;818  overflow: hidden;819  background: var(--panel-soft);820}821 822.chat-shell .message.user {823  background: var(--accent-soft) !important;824  border: 1px solid #bfdbfe !important;825  border-radius: 14px !important;826}827 828.chat-shell .message.bot {829  background: #ffffff !important;830  border: 1px solid var(--border) !important;831  border-radius: 14px !important;832}833 834.copilot-input textarea {835  background: #ffffff !important;836  color: var(--text) !important;837  border: 1px solid var(--border) !important;838  border-radius: 12px !important;839}840 841.send-btn button {842  background: #0f172a !important;843  color: #ffffff !important;844  border: none !important;845  border-radius: 12px !important;846  font-weight: 700 !important;847}848 849.chat-close button {850  background: #ffffff !important;851  color: var(--text-soft) !important;852  border: 1px solid var(--border) !important;853  border-radius: 12px !important;854}855 856.prompt-chip button {857  background: #ffffff !important;858  color: var(--text-soft) !important;859  border: 1px solid var(--border) !important;860  border-radius: 12px !important;861  font-size: 12px !important;862}863 864.footer-shell {865  display: flex;866  align-items: center;867  justify-content: space-between;868  gap: 12px;869  padding: 10px 4px 0;870  color: var(--text-faint);871  font-size: 12px;872}873 874.footer-left {875  font-weight: 700;876  color: var(--text-soft);877}878 879.contrast-on.topbar-shell,880.contrast-on.status-shell,881.contrast-on.pane-shell,882.contrast-on.panel-card,883.contrast-on.chat-popup {884  border-color: #0f172a !important;885}886 887.size-compact { font-size: 0.95rem; }888.size-comfortable { font-size: 1rem; }889.size-large { font-size: 1.08rem; }890 891@media (max-width: 1280px) {892  .topbar-shell {893    grid-template-columns: 1fr;894  }895 896  .nav-cluster {897    justify-content: flex-start;898    flex-wrap: wrap;899  }900 901  .account-meta {902    margin-left: 0;903    text-align: left;904  }905 906  .stat-grid {907    grid-template-columns: repeat(2, minmax(0, 1fr));908  }909}910 911@media (max-width: 900px) {912  .info-grid,913  .stat-grid,914  .dependency-grid,915  .hypothesis-grid {916    grid-template-columns: 1fr;917  }918 919  .chat-panel-shell {920    right: 12px;921    left: 12px;922    width: auto;923  }924 925  .floating-launcher {926    right: 12px;927    bottom: 12px;928  }929}930�SentinelOps�blue�slate�md)�primary_hue�
secondary_hue�neutral_hue�radius_sizer)r��css�themeFz	app-shell)�elem_classes)�equal_heightil)�scale�	min_widthi�zsettings-shell)r�r�r�r�)r�r�r�z
master-detail)r�r�i6z931pane-shell)r�r�r�zqueue-select)r�r�r�r�i�iz932plot-shellrdzfloating-launcherzchat-panel-shell)r/r�z933chat-popup�messagesihz934chat-shell)r��typergr�r�z
copilot-input)�935show_labelr�r�r��primaryzsend-btn)�variantr�r�z936chat-closezprompt-chip)r�r�)�fn�inputs�outputs�__main__)r�)r�)�ENr937)�FRrh)rrr)s�938__future__rr�r��pathlibr�typingrrr�gradior��plotly.graph_objects�
graph_objectsr>�plotly.subplotsr�__file__�parent�BASE_DIRr�r�r�r�r�r�r�rrrr�r�r�r�r�r�r�r�r�r�r�r	rrr!rFrxr~r�r�r�r�r�r�r�r��939CUSTOM_CSS�Blocks�themes�Base�demo�State�940chat_state�chat_open_state�Column�HTML�header_html�Row�status_html�Group�Dropdownr�Radior�Checkboxr�
queue_heading�incident_cardsr"�summary_heading�
overview_html�signals_heading�Plot�signal_chart�load_heading�941load_chart�profile_html�deps_heading�dependencies_html�hypotheses_heading�hypotheses_html�actions_heading�actions_html�footer_html�Button�
chat_launcher�942chat_popup�copilot_heading�Chatbot�chatbot�Textbox�
copilot_input�send_buttonrF�943prompt_one�944prompt_two�prompt_three�prompt_four�prompt_fiver��trigger�click�submit�__name__�launch)r�s0r��<module>rBsk��"����$�$��!�)���>� � ���f���	�M��L�M��i�M�	�.�M�	�J�	M�945	�[�M�	�O�
M�	�9�M�	�}�M�	��M�	��M�	��M�	�y�M�	�y�M�	�'�M�	�G�M� 	�0�!M�"	�+�#M�$	�N�%M�&	�>�'M�(	�Q�)M�*	�,�+M�,	�>�-M�.	�.�/M�0	 �!N�1M�2	�)�3M�4	�S�5M�6	�(�7M�8	�L�9M�:	�*�;M�<	�M�=M�>	��?M�@	��AM�B	��CM�D	�0�EM�F	��GM�H	�*�IM�J	�k�KM�L	�l�MM�N	�4�OM�P	�<�QM�R	� 1�SM�T	�<�UM�V	�Q�WM�X	�p�YM�Z	�U�[M�\	�-�]M�^	��_M�`	�N�aM�b	�g�cM�d	�0�eM�f	�f�gM�h	�2�iM�j	�2�kM�l	�;�mM�n	�3�oM�p	�:�qM�r	��sM�t	��uM�v	�.�wM�x	�9�yM�z	�l�{M�|	�u�}M�~	�$�M�@	�l�AM�B	�l�CM�D	�U�EM�F	�4�GM�H	�2�IM�J	�J��L��C��K��P��D��t��}�YM�\	�M��P�M��y�M�	�.�M�	�H�	M�946	�&�M�	�%�
M�	�9�M�	�}�M�	��M�	��M�	��M�	�z�M�	�x�M�	�)�M�	�F�M� 	�3�!M�"	�/�#M�$	�I�%M�&	�'�'M�(	�]�)M�*	�*�+M�,	�B�-M�.	�0�/M�0	 �!N�1M�2	�+�3M�4	�\�5M�6	�)�7M�8	�W�9M�:	�*�;M�<	�Q�=M�>	��?M�@	��AM�B	��CM�D	�-�EM�F	��GM�H	�.�IM�J	�k�KM�L	�l�MM�N	�4�OM�P	�>�QM�R	� 6�SM�T	�=�UM�V	�R�WM�X	� R�YM�Z	�c�[M�\	�+�]M�^	��_M�`	�(�aM�b	�h�cM�d	�0�eM�f	�i�gM�h	�<�iM�j	�>�kM�l	�>�mM�n	�:�oM�p	�>�qM�r	��sM�t	�,�uM�v	�-�wM�x	�9�yM�z	�o�{M�|	�u�}M�~	�(�M�@	�k�AM�B	�)�CM�D	�Z�EM�F	�=�GM�H	�5�IM�J	�Y��V��O��p��R��P��K��~�YM�_]��B�	�947�I��i�	�9�	���Y��)����)����
��948*�"/���	�7�J�9B�C��X����(��C��4���[�\�,��8�����.$�N:�z�> �F�>�>-�`*�Z�J��0*�ZD�N[�s�(V�h	�949�V�Y�Y�950��951�)�)�.�.��������952�953�954����+�D�1�2�J��h�h�u�o�O�	����
�	.�	.��g�g�/��m�U�K�L��
�V�V��
'�
'�����c�2�2� �g�g�&7��$�@T�8U�W[�]j�lq�s|�&}�~��3�����c�2�2��X�X�,<�+=�>�>������#%�;�;�%1�<�$@�"&�"#�D�*�"5�"#�	$��%'�H�H�$G�"/�"#�D�+�"6�"#�	%�	�$&�;�;�U�!�D�*�BU�]^�#_��"�?�3�(�(�V�V��o�5F�
G�
G�����c���O�O� "���(=�a��m�>T�VW�X\�^n�Vo�(p� q�
�!#���)=�d�D�-�Y^�)_�!`��$&�H�H�0��6���D�"5�6�"0�!1�	%�!�P�����c�2�2��V�V��/�/�����c���W�W�*,�'�'�2G��$�P_�H`�bc�dh�j|�b}�2~�*��(*���0C�D�$�P]�_d�0e�(f�
�*,�'�'�2G��$�PY�HZ�\]�^b�dv�\w�2x�*y��')�w�w�/B�4��u�/U�eq�dr�'s��')�w�w�/D�Q�t�V�_�VW�X\�^m�Vn�/o�'p��%'�W�W�->�t�T�5�-Q�am�`n�%o�955�X�����c�:�:�')�w�w�/A�$�
�W\�/]�'^���X�X�L�>�B�B�+-�7�7�3H��4�Q_�I`�bc�dh�kB�cC�4D�,E�L�02���8O�PT�VZ�\i�kp�8q�0r�-�C�;�0�"�V�V��/�/�����c���W�W�-/�W�W�5J�1�T�S_�K`�bc�dh�j�cA�6B�.C�*�*,�'�'�2G��d�Ta�ch�2i�*j��X�����c���W�W�*,�'�'�2G��$�PY�HZ�\]�^b�dv�\w�2x�*y��')�w�w�/A�$��m�]b�/c�'d��X�	0�%3�H�J�g�g�/��5�6���	�	�!�D�*�"5�EX�DY�Z�
�
�Y�Y�u�4F�3G�
H�
H�J�����~�6�6�"$�'�'�*?��$�	�@R�TU�VZ�\n�To�*p�"q���*�*�+�D�1�#���D�)�,�".����!#�956�957�$� !�$�(=� >� %�"1�!2�	!�
��V�V�X�X�"$�)�)�A�d�L�,A�9�bg�xB�wC�#D�K�!#���1�T�<�+@�P\�~�!^�J���V�V�X�X�!#���1�T�>�+B�PU�er�ds�!t�J�!#���1�T�3C�+D�RW�gt�fu�!v�J���V�V�X�X�#%�9�9�Q�t�\�-B�PU�er�ds�#t�L�"$�)�)�A�d�M�,B�PU�er�ds�"t�K��!�i�i��$�0B�(C�QV�fs�et�u��17�I�958/�t����!�8�Y��A��������������������'959���4�O�O�Y�%5�%5�x���G�����/��H�o�V�#��#��#��#��	#�960"�#��
#��#��#��#� �#��#� �#��#��#��#� �!#�""�##�$#�%#�& �'#�( �)#�*�+#�, �-#�.�/#�0�1#�2�3#�4�5#�6�7#�8�9#�:�;#�<�=#�>�?#�@�A#�B�C#�D�E#�'	961�'	962�H�T������*� �*�m�<���963������*� �*�m�<��������z�+<�h�	�S[�\��W�m�[�A���964�����z�+<�h�	�S[�\��W�m�[�A���965�����J�(9�8�Y�PX�Y��W�m�[�A���966�����J�(9�8�Y�PX�Y��W�m�[�A���967�����j�*;�X�y�RZ�[��W�m�[�A���968�����Z�):�H�i�QY�Z��W�m�[�A���969�����Z�):�H�i�QY�Z��W�m�[�A���k970�x�z���K�K�M���m-D�X'3�2�2��"����?�>�>��3�2�2��(�
'�
'��*P�O�O��X�W�W��C�B�B��;�:�:��0�/�/��$X�W�W��X�W�W��	0�/�/��%3�2�2��H�
G�
G��p�X�X���X�X���X�X��+7�6�6��I�
H�
H��971/�	.�	.��972�973�974�s�s0�5A975z�?9z	�8u
�&s5�=&u
�#t1�t�A"t	�>t�t1�u
�(z	�>"x

� A*u�976&x

�0w9�"v)�0Cu-�&v)�(:v�"Av�&v�.v)�6%w9�"w%�=Av=�)w%�*Aw�.w%�6w9�>x

�Az	�$y1
�By�Ax!�!y�1Ax5�2!y�Ay	�(y�<y1
�z	�Gz�5t�	u
�	t�	t�t.�(	t1�1u�<	u
�u�	z	�u*�$	x

�-u>�8	v)�v!�	v�v&� 	v)�)v:�4	w9�=w�	w%�w"�	w%�%w6�0	w9�9x977�	x

�
x�	z	�!x2�,	y�5y�	y�	y�	y�y.�(	y1
�1z�<	z	�z
�	z�z*