ó
    dî¨j¢‡  ã                  ó&  • S r SSKJr  SSKrSSKJrJrJr  SSKJ	r	J
r
Jr  SSKJrJr  SSKJrJr  SSKJrJr  SS	KJrJr  SS
KJrJr  SSKJr   " S S\5      r " S S5      r " S S5      rSSS jjr SS jr!1 Skr"SS jr#SS jr$SS jr%SS jr&g) zLLM client interfaces.é    )ÚannotationsN)ÚDictÚOptionalÚProtocol)ÚDesignArtifactÚMetadataPlanItemÚV1_ALLOWLIST)ÚQAReportArtifactÚTestScenario)ÚClarificationQuestionÚRequirementsArtifact)ÚReviewArtifactÚReviewFinding)ÚSettingsÚget_settings)ÚDocCheckResultÚDocReference)ÚDuplicateCheckResultc                  óZ   • \ rS rSrSS jrSS jrSS jrSS jrSS jrSS jr	SS jr
S	rg
)Ú	LLMClienté   c              ƒ  ó   #   • g 7f©N© ©ÚselfÚprompts     Ú1/var/www/html/gaurav/packages/integrations/llm.pyÚanalyze_requirementsÚLLMClient.analyze_requirements   s   é € Èsùó   ‚c              ƒ  ó   #   • g 7fr   r   r   s     r   Údesign_solutionÚLLMClient.design_solution   s   é € ÀCùr!   c              ƒ  ó   #   • g 7fr   r   r   s     r   Úreview_codeÚLLMClient.review_code   s   é € Àùr!   c              ƒ  ó   #   • g 7fr   r   r   s     r   Úfix_codeÚLLMClient.fix_code   s   é € ¸Sùr!   c              ƒ  ó   #   • g 7fr   r   r   s     r   Úgenerate_qa_reportÚLLMClient.generate_qa_report   s   é € Èùr!   c              ƒ  ó   #   • g 7fr   r   r   s     r   Úcheck_duplicateÚLLMClient.check_duplicate   s   é € È#ùr!   c              ƒ  ó   #   • g 7fr   r   r   s     r   Úcheck_already_implementedÚ#LLMClient.check_already_implemented   s   é € Ècùr!   r   N©r   ÚstrÚreturnr   ©r   r5   r6   r   ©r   r5   r6   r   ©r   r5   r6   úDict[str, str]©r   r5   r6   r
   ©r   r5   r6   r   ©r   r5   r6   r   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r   r#   r&   r)   r,   r/   r2   Ú__static_attributes__r   ó    r   r   r      s   † ÜRäGäCä@äLäMçQrC   r   c                  ó^   • \ rS rSrSrSS jrSS jrSS jrSS jrSS jr	SS jr
SS	 jrS
rg)ÚMockLLMClienté!   z2Heuristic analyst/architect for offline/local use.c              ƒ  óÀ  ^^#   • [         R                  " SU[         R                  5      nU(       a  UR                  S5      R	                  5       OSnU(       a  UR                  S5      R	                  5       OSn[        U SU 35      nU Vs1 sH"  ofR                  S5      (       d  SU;   d  M   UiM$     nnS n[         R                  " SU[         R                  5       GH  n	U	R                  S5      R	                  5       U	R                  S5      R	                  5       U	R                  S5      R	                  5       smn
mU
S	:X  a  Sn
[        T ST 35      nU(       a  U(       d  MŠ  [        X[-  5      [        [        U5      S5      -  n[        U=(       a    X{-  5      n[        UU4S
 jS 5       5      nXÍ(       a  SOS-   U(       a  SOS-   nUb
  XøS   :”  d  Mÿ  UTU
T4nGM     U(       a\  US   S:¼  d  U(       aL  US   S:¼  aC  [        SSUS   S SUS    S3[        SSUS   S-  -   5      [        US   US   US   S S S9/S9$ [        SSSS9$ s  snf 7f)NzSNEW ticket:.*?Summary:\s*(.+?)\nDescription:\s*(.+?)(?:\n\nCONFLUENCE|\nCONFLUENCE)é   Ú é   Ú Ú__czG- Title:\s*(.+?)\n\s*URL:\s*(.+?)\n\s*Snippet:\s*(.+?)(?:\n- Title:|\Z)é   ú(none)c              3  óR   >#   • U H  nUT S T 3R                  5       ;   v •  M     g7f)rK   N)Úlower)Ú.0ÚwÚsnippetÚtitles     €€r   Ú	<genexpr>Ú:MockLLMClient.check_already_implemented.<locals>.<genexpr>=   s1   øé € ð %ád�Að ˜�w˜a ˜yÐ)×/Ñ/Ó1Ö1Údùs   ƒ$')Úimplementedzalready existsÚdeployedzin productionÚ	deliveredçffffffÖ?ç        çš™™™™™É?r   çÍÌÌÌÌÌÜ?TzMock LLM: Confluence overlap ú.2fz with 'Ú'çffffffî?ç      à?éÈ   ©rT   ÚurlrS   ©Úalready_implementedÚ	rationaleÚ
confidenceÚ
referencesFzCMock LLM: no Confluence hit strongly matches existing functionalityçš™™™™™Ù?©rf   rg   rh   )ÚreÚsearchÚSÚgroupÚstripÚ_significant_tokensÚendswithÚfinditerÚlenÚmaxÚboolÚanyr   Úminr   )r   r   ÚmÚnew_summaryÚnew_descÚ
new_tokensÚtÚfield_tokensÚbestÚhmrd   Úblob_tokensÚoverlapÚ	field_hitÚimplemented_signalÚscorerS   rT   s                   @@r   r2   Ú'MockLLMClient.check_already_implemented$   sE  ùé € Ü�IŠIØbØÜ�D‰Dó
ˆö
 ./�q—w‘w˜q“z×'Ñ'Ô)°BˆÞ*+�A—G‘G˜A“J×$Ñ$Ô&°ˆÜ(¨K¨=¸¸(¸Ð)DÓEˆ
Ù#-ÓQ¡:˜a·±¸E×1BÑ1BÀeÈqÁjŸ¡:ˆÐQà6:ˆÜ—+’+ØVØÜ�D‰D÷
ˆBð
 #%§(¡(¨1£+×"3Ñ"3Ó"5°r·x±xÀ³{×7HÑ7HÓ7JÈBÏHÉHÐUVËK×L]ÑL]ÓL_ÐˆE�3˜Ø�h‹Ø�Ü-°°°q¸¸	Ð.BÓCˆKÞ¦jÙÜ˜*Ñ2Ó3´c¼#¸j»/È1Ó6MÑMˆGÜ˜\×J¨|Ñ/IÓKˆIÜ!$õ %ádó%ó "Ðð ¥y™t°cÑ:ÖEW¹cÐ]`ÑaˆEØ‰|˜u¨A¡w�Ø˜u c¨7Ð3“ñ'
ö* �T˜!‘W “_®¸¸a¹ÀD»Ü!Ø$(Ø9¸$¸q¹'À#¸ÀgÈdÐSTÉgÈYÐVWÐXÜ˜t S¨4°©7°Q©;Ñ%6Ó7Ü(¨t°A©w¸DÀ¹GÈTÐRSÉWÐUYÐVYÈ]Ñ[Ð\ñ	ð ô Ø %Ø[Øñ
ð 	
ùò? Rùs    „BIÂIÂ1IÂ7D%IÇ A>Ic              ƒ  ó¶  #   • [         R                  " SU[         R                  5      nU(       a  UR                  S5      R	                  5       OSn[        U5      nU(       d  [        SSSS9$ SnS	n[         R                  " S
U[         R                  5       H‚  nUR                  S5      R	                  5       UR                  S5      R	                  5       p‡[        U5      n	U	(       d  MT  [        XI-  5      [        [        U5      S5      -  n
X¦:”  d  M~  U
nUnM„     U(       a)  US:¼  a#  [        SUSUS SU 3[        SSUS-  -   5      S9$ [        SSSS9$ 7f)zKMark duplicate when a candidate summary shares distinctive tokens with NEW.z5NEW ticket:.*?Summary:\s*(.+?)(?:\nDescription:|\n\n)rH   rI   FzNo comparable summaryr\   ©Úis_duplicaterg   rh   Nr[   zE- Key:\s*(\S+)\n\s*Summary:\s*(.+?)(?:\n\s*Description:|\n\s*Status:)rJ   ra   TzMock LLM: summary overlap r^   z with r`   ©r‰   Úoriginal_keyrg   rh   z#Mock LLM: no strong summary overlaprj   )rl   rm   rn   ro   rp   rq   r   rs   rt   ru   rx   )r   r   ry   rz   r|   Úbest_keyÚ
best_scoreÚkeyÚsummaryÚcand_tokensr‚   s              r   r/   ÚMockLLMClient.check_duplicateR   sG  é € ä�IŠIÐNÐPVÔXZ×X\ÑX\Ó]ˆÞ-.�q—w‘w˜q“z×'Ñ'Ô)°BˆÜ(¨Ó5ˆ
ÞÜ'°UÐF]ÐjmÑnÐnàˆØˆ
Ü—’ØTØÜ�D‰Dö
ˆAð
 Ÿ7™7 1›:×+Ñ+Ó-¨q¯w©w°q«z×/?Ñ/?Ó/A�Ü-¨gÓ6ˆKÞÙÜ˜*Ñ2Ó3´c¼#¸j»/È1Ó6MÑMˆGØÕ#Ø$�
Ø’ñ
ö ˜
 cÓ)Ü'Ø!Ø%Ø6°zÀ#Ð6FÀfÈXÈJÐWÜ˜t S¨:¸©>Ñ%9Ó:ñ	ð ô $ØØ;Øñ
ð 	
ùs   ‚DEÄAEc              ƒ  ó  #   • [        USS5      n[        USS5      n[        US5      n[        US5      n[        US5      nUR                  5        Vs/ sHO  nUR                  5       (       d  M  SUR	                  5       ;  d  M0  UR                  S	5      R                  5       PMQ     nnUR                  5        V	s/ sHn  n	U	R                  5       (       d  M  S
U	R	                  5       ;  d  M0  U	R	                  5       R                  S5      (       a  MV  SU	R	                  5       ;  d  Ml  U	PMp     n
n	SR                  U
5      n[        UR                  5       5      S:„  nU(       a
  U(       d  S/n[        UR                  5       5      S:  =(       a    U(       + U(       + SUR	                  5       ;   =(       a    U(       + =(       a    U(       + SUR                  5       ;   =(       d    SUR                  5       ;   =(       a    U(       + /nU SU SU 3R	                  5       n/ nSU;   a  SU;   a  UR                  S5        SU;   a  SU;   d  SU;   a  UR                  S5        [        U5      (       aÒ  U(       a  [        UR                  5       5      S:¼  d®  / nSnU(       d  UR                  [        USSS95        US-  n[        UR                  5       5      S:  a  UR                  [        USS S95        US-  nU(       d  UR                  [        SS!S"95        [        UUR                  5       UUS#S$[        U5      US%S&9	$ [        UUR                  5       U=(       d    S'// S(S)[        U5      US*S&9	$ s  snf s  sn	f 7f)+NúJira key:\s*(\S+)ÚUNKNOWNúSummary:\s*(.+)ÚUntitledzDescription:úAcceptance criteria:z	Comments:z(none provided)ú- zagent nova needs clarificationz- agent-novarN   Ú
é<   zAs clarified in Jira commentsé(   ÚimproveÚTBDÚTODOÚ
productionÚdeployz3Production deployment is out of Agent Nova v1 scopeÚsharingÚowdÚredesignz9Sharing/OWD redesign is outside the v1 metadata allowlistrH   z0What are the acceptance criteria for this story?z
Missing AC)ÚnumberÚquestionrg   zGPlease describe the desired Salesforce behavior, objects, and personas.zThin descriptionz?Please provide additional detail so implementation can proceed.)r¤   r¥   FrZ   z(Mock LLM flagged incomplete requirements©	Újira_keyr�   Úacceptance_criteriaÚclarification_questionsÚis_clearrh   Úreferenced_documentationÚout_of_scope_itemsÚnoteszAs described in the Jira storyTg=
×£p=ê?z'Mock LLM accepted requirements as clear)Ú_extractÚ_sectionÚ
splitlinesrp   rP   Ú
startswithÚjoinrt   ÚupperÚappendrw   r   r   Ú_refs)r   r   r§   r�   ÚdescriptionÚac_blockÚcomments_blockÚlÚ
acceptanceÚlnÚhuman_linesÚ
human_textÚhas_human_detailÚunclear_signalsÚreq_textÚout_of_scopeÚ	questionsÚns                     r   r   Ú"MockLLMClient.analyze_requirementsw   sg  é € Ü˜FÐ$8¸)ÓDˆÜ˜6Ð#5°zÓBˆÜ˜v ~Ó6ˆÜ˜FÐ$:Ó;ˆÜ! &¨+Ó6ˆð ×(Ñ(Ô*ó
á*�Ø�w‰w�yó "à.°a·g±g³iÑ?ó "ˆA�G‰G�D‹M×ÑÖ!Ù*ð 	ð 
ð %×/Ñ/Ô1ó
á1�Ø�x‰x�zó ð 1¸¿¹»
ÑBó ð —H‘H“J×)Ñ)¨.×9ó	 ð
  §¡£
Ñ*÷ Ù1ð 	ð 
ð —Y‘Y˜{Ó+ˆ
Ü˜z×/Ñ/Ó1Ó2°RÑ7ÐÞ¦JØ9Ð:ˆJô �×!Ñ!Ó#Ó$ rÑ)×BÐ2BÔ.BØŒNØ˜Ÿ™›Ñ(×T°¬^×TÐDTÔ@TØ�k×'Ñ'Ó)Ñ)×J¨V°{×7HÑ7HÓ7JÑ-J×dÐTdÔPdð	
ˆð �Y˜b  ¨R°¨zÐ:×@Ñ@ÓBˆØ"$ˆØ˜8Ó#¨°HÓ(<Ø×ÑÐ UÔVØ˜Ó  e¨xÓ&7¸:ÈÓ;QØ×ÑÐ [Ô\äˆ×Ñ®¼¸K×<MÑ<MÓ<OÓ8PÐTVÓ8VØˆIØˆAÞØ× Ñ Ü)Ø Ø!SØ".ñôð �Q‘�Ü�;×$Ñ$Ó&Ó'¨"Ó,Ø× Ñ Ü)Ø Ø!jØ"4ñôð �Q‘�ÞØ× Ñ Ü)Ø Ø!bñôô (Ø!ØŸ™›Ø$.Ø(1ØØÜ).¨v«Ø#/Ø@ñ
ð 
ô $ØØ—M‘M“OØ *× PÐ/OÐ.PØ$&ØØÜ%*¨6£]Ø+Ø;ñ

ð 
	
ùòQ
ùò
ùsC   ‚ANÁM7Á/M7Â#M7Â(NÂ<M<ÃM<Ã."M<ÄM<Ä*M<Ä0INc              ƒ  ó~	  #   • [        USS5      n[        USS5      R                  5       n[        US5      nU SU 3R                  5       n/ n/ nSnSn	S	 H  n
U
R                  5       U;   d  M  U
n	  O   S
U;   d  SU;   d  SU;   d  SU;   GaÇ  SU;   a  SOSn[        R
                  " SU SU 35      nU(       a  UR                  S5      nS/nSU;   GaT  S/n[        R
                  " SU SU 3[        R                  5      nU(       a@  UR                  SUR                  S5      R                  5       R                  S5       35        [        R
                  " SU SU 3[        R                  5      nU(       aJ  [        R                  " SUR                  S5      SS9S   nUR                  SUR                  5        35        [        R
                  " SU SU 3[        R                  5      nU(       a1  UR                  SUR                  S5      R                  5        35        UR                  [        SUS U	S!R                  U5      S"95        S#U;   a{  U	 S$3n[        R
                  " S%U SU 35      nU(       a  UR                  S5      nS&nS'U;   a  U(       a  US   R                  OSnS(U S)3nUR                  [        S*US U	US"95        S+U;   d  S,U;   a  UR                  [        S-U	 S.3S S/S095        S1U;   a%  S2U;   a  UR                  [        S3U	 S43S U	S5S"95        S6U;   d  S7U;   aC  S7U;   a  UR                  [        S8U	 S93S U	S:95        UR                  [        S;U	 S<3S U	S=S"95        S>U;   d  S?U;   a5  UR                  [        S@U	S   R                  5       U	SS  -    SA3S U	S:95        SBU;   a  SCU;   d  SDU;   a  SEnUR                  SF5        [        R
                  " SGU5      (       a  S+U;  a  SEnUR                  SH5        SIU;   a  SJU;   a  UR                  SK5        U(       d  UR                  [        SSLS U	SMS"95        U H9  nUR                  [        ;  d  M  SEnUR                  SNUR                   35        M;     [!        UUSOU	 SP3USQ/UUU(       a  U(       d  SRSTSU9	$ SSSTSU9	$ 7f)VNr“   r”   r•   r–   r—   r™   FÚAccount)rÆ   ÚContactÚOpportunityÚLeadÚCaseÚfieldrL   ÚpicklistÚcustomÚtierÚCustomer_Tier__cÚCustom_Field__cz([A-Za-z][A-Za-z0-9_]*__c)rH   zCustom field from requirementsÚPicklistz:(?:field\s+)?label\s+(?:as|is|:)\s+([A-Za-z][A-Za-z0-9 ]+)zlabel Ú.zK(?:picklist\s+)?values?\s*(?:are\s+|:)?\s*([A-Za-z0-9][A-Za-z0-9 ,/\-]{2,})z[.;]©Úmaxsplitr   zvalues z:(?:set\s+)?([A-Za-z][A-Za-z0-9 \-]+?)\s+as\s+the\s+defaultzdefault ÚCustomFieldÚcreatez; ©Úmetadata_typeÚapi_nameÚactionÚobjectr­   Ú
validationÚ_Validationz7([A-Za-z][A-Za-z0-9_]*_Required(?:_For_[A-Za-z0-9_]+)?)z(Validation rule from acceptance criteriaÚcustomerz%Block save when Type is Customer and z	 is blankÚValidationRulezpermission setÚpermissionsetÚPermissionSetÚ_Field_Accessz'Grant edit access for intended personas)rØ   rÙ   rÚ   r­   ÚflowÚrecordÚFlowÚ_RecordTriggeredzRecord-triggered Flow only (v1)ÚapexÚtriggerÚApexTriggerÚTrigger)rØ   rÙ   rÚ   rÛ   Ú	ApexClassÚHandlerzwith sharing handlerÚlwcÚ	lightningÚLightningComponentBundleÚ	Componentr¡   r¢   r£   Tu=   Sharing/OWD redesign is outside the v1 allowlist â€” escalatez\bprofiles?\bu9   Profile changes are outside the v1 allowlist â€” escalaterŸ   r    z0Production deployment is out of autonomous scopeÚTBD__cu=   Default plan placeholder â€” refine with clearer requirementsz$Metadata type outside v1 allowlist: z-Implement allowlisted Salesforce metadata on z_ per acceptance criteria; prefer configuration (fields/validation/permission sets) before Apex.z0Existing object layout / FLS for target personasg      è?r]   zMock Solution Architect design©	r§   r�   ÚapproachÚmetadata_planÚdependenciesÚrisks_or_escalationsÚout_of_allowlistrh   r­   )r®   rp   r¯   rP   rl   rm   ro   ÚIr´   ÚrstripÚsplitr   r²   rÙ   rØ   r	   r   )r   r   r§   r�   r·   rÀ   ÚplanÚrisksÚout_ofÚobjÚ	candidateÚapiry   Ú	note_bitsÚlabel_mÚvals_mÚvalsÚdef_mÚvr_nameÚvr_mÚvr_notesÚ	field_apiÚitems                          r   r#   ÚMockLLMClient.design_solutionÑ   s,  é € Ü˜FÐ$8¸)ÓDˆÜ˜6Ð#5°zÓB×HÑHÓJˆÜ˜FÐ$:Ó;ˆà�Y˜b  
Ð+×1Ñ1Ó3ˆØ')ˆØˆØˆð ˆÛNˆIØ�‰Ó  HÕ,Ø�Ùñ Oð
 �hÓ %¨8Ó"3°zÀXÓ7MÐQYÐ]eÔQeØ(.°(Ó(:Ñ$Ð@QˆCÜ—	’	Ð7¸G¸9ÀBÀxÀjÐ9QÓRˆAÞØ—g‘g˜a“j�Ø9Ð:ˆIØ˜XÔ%Ø'˜L�	ÜŸ)š)ØQØ�i˜r ( Ð,Ü—D‘Dó�ö
 Ø×$Ñ$ v¨g¯m©m¸AÓ.>×.DÑ.DÓ.F×.MÑ.MÈcÓ.RÐ-SÐ%TÔUÜŸšØbØ�i˜r ( Ð,Ü—D‘Dó�ö
 ÜŸ8š8 G¨V¯\©\¸!«_ÀqÑIÈ!ÑL�DØ×$Ñ$ w¨t¯z©z«|¨nÐ%=Ô>ÜŸ	š	ØQØ�i˜r ( Ð,Ü—D‘Dó�ö
 Ø×$Ñ$ x°·±¸A³×0DÑ0DÓ0FÐ/GÐ%HÔIØ�K‰KÜ Ø"/Ø Ø#ØØŸ)™) IÓ.ñôð ˜8Ó#Ø˜˜[Ð)ˆGÜ—9’9ØJØ�)˜2˜h˜ZÐ(óˆDö ØŸ*™* Q›-�ØAˆHØ˜XÓ%Þ04˜D ™G×,Ò,Ð:K�	ØBÀ9À+ÈYÐW�Ø�K‰KÜ Ø"2Ø$Ø#ØØ"ñôð ˜xÓ'¨?¸hÓ+FØ�K‰KÜ Ø"1Ø #˜u MÐ2Ø#ØCñ	ôð �XÓ (¨hÓ"6Ø�K‰KÜ Ø"(Ø #˜uÐ$4Ð5Ø#ØØ;ñôð �XÓ ¨hÓ!6Ø˜HÓ$Ø—‘Ü$Ø&3Ø$' 5¨ Ø'Ø"ñ	ôð �K‰KÜ Ø"-Ø #˜u G˜_Ø#ØØ0ñôð �HÓ ¨xÓ 7Ø�K‰KÜ Ø"<Ø # A¡§¡£°°Q°R°Ñ 8Ð9¸ÐCØ#Øñ	ôð ˜Ó  e¨xÓ&7¸:ÈÓ;QØˆFØ�L‰LÐXÔYÜ�9Š9Ð% x×0Ñ0Ð5EÈXÓ5UØˆFØ�L‰LÐTÔUØ˜8Ó#¨°HÓ(<Ø�L‰LÐKÔLæØ�K‰KÜ Ø"/Ø%Ø#ØØYñôó ˆDØ×!Ñ!¬Õ5Ø�Ø—‘ÐCÀD×DVÑDVÐCWÐXÖYñ ô
 ØØà?À¸uð EXð Xð ØLÐMØ!&Ø#Þ#®F�tØ2ñ
ð 	
ð 9=Ø2ñ
ð 	
ùs   ‚A)R=Á/O=R=Ñ0AR=c              ƒ  ó  #   • [        USS5      n[        [        USS5      5      n[        US5      n[        US5      n/ n[        U5      R	                  5        Hò  u  pxUR                  S5      (       a"  SU;   a  UR                  [        S	S
USSS95        UR                  S5      (       aU  SUR                  5       ;  aA  [        S UR                  5        5       5      (       a  UR                  [        S	SUSSS95        UR                  S5      (       d  MÀ  SUR                  5       ;  d  MÖ  UR                  [        SSUSSS95        Mô     [        US5      n	U	R                  5        Hx  n
U
R                  5       R                  S5      (       d  M)  SU
R                  5       ;  d  M?  UR                  [        S	SS U
R                  S5      R                  5       SS95        Mz     U Vs/ sH  o»R                  S;   d  M  UPM     nn[        U5      S:H  n[        S U 5       5      (       a  SOS nSU	R                  5       ;   d  U	R                  5       (       d  S n[        UUUUU(       a  S!OS"[        U5       S#3US$S%9$ s  snf 7f)&Nr“   r”   zReview cycle:\s*(\d+)Ú0zGenerated files:zMetadata plan:ú.clsúwithout sharingÚhighÚsecurityz/Apex class should use 'with sharing' by defaultT)ÚseverityÚcategoryÚfileÚmessageÚfixableú@istestc              3  ó*   #   • U H
  nS U;   v •  M     g7f)rë   Nr   )rQ   Úlines     r   rU   Ú,MockLLMClient.review_code.<locals>.<genexpr>‰  s   é € ÐSÑ7R¨t�{ dÖ*Ò7Rùs   ‚Útest_coveragez8Missing @IsTest companion class for Apex production codeú.triggerÚbulkÚmediumÚbulkificationz*Trigger should document bulk-safe handlingzStatic analysis violations:Ú-rN   Ústatic_analysisr˜   )Úcriticalr  r   c              3  ó<   #   • U H  oR                   S :H  v •  M     g7f)r!  N)r  )rQ   Úfs     r   rU   r  ­  s   é € Ð'ZÑQYÈA¯
©
Ð6GÖ(GÒQYùs   ‚ÚfailedÚpassedu+   Code review passed â€” no blocking findingszCode review failed with z blocking finding(s)zMock Code Reviewer©r§   r&  ÚcycleÚfindingsr�   Ústatic_analysis_statusr­   )r®   Úintr¯   Ú_parse_file_blocksÚitemsrr   r´   r   rP   rw   r°   rp   r±   r  rt   r   )r   r   r§   r(  Úfiles_blockÚmetadata_blockr)  ÚpathÚcontentÚstatic_blockr  r$  Úblockingr&  Ústatic_statuss                  r   r&   ÚMockLLMClient.review_codev  s_  é € Ü˜FÐ$8¸)ÓDˆÜ”H˜VÐ%=¸sÓCÓDˆÜ˜vÐ'9Ó:ˆÜ! &Ð*:Ó;ˆØ(*ˆä/°Ó<×BÑBÖD‰MˆDØ�}‰}˜V×$Ñ$Ð):¸gÓ)EØ—‘Ü!Ø!'Ø!+Ø!Ø QØ $ñôð �}‰}˜V×$Ñ$¨¸'¿-¹-»/Ó)IÜÑS°~×7PÑ7PÔ7RÓS×SÑSØ—O‘OÜ%Ø%+Ø%4Ø!%Ø$^Ø$(ñôð �}‰}˜Z×(Ó(¨V¸7¿=¹=»?Õ-JØ—‘Ü!Ø!)Ø!0Ø!Ø LØ $ñöñ/ EôB   Ð(EÓFˆØ ×+Ñ+Ö-ˆDØ�z‰z‹|×&Ñ& s×+Ó+°ÀÇ
Á
ÃÕ0LØ—‘Ü!Ø!'Ø!2Ø!Ø $§
¡
¨4Ó 0× 6Ñ 6Ó 8Ø $ñöñ .ñ  (ÓN™x˜!¯:©:Ð9MÑ+M—A™xˆÐNÜ�X“ !Ñ#ˆÜ$'Ñ'ZÑQYÓ'Z×$ZÑ$Z™Ð`hˆØ�|×)Ñ)Ó+Ó+°<×3EÑ3E×3GÑ3GØ$ˆMäØØØØö ñ >à/´°H³¨Ð>RÐSà#0Ø&ñ
ð 	
ùò Oùs3   ‚DJÄJÄ/A!JÆJÆ*AJÇ+JÈJÈB Jc              ƒ  ób  #   • [        [        US5      5      n[        US5      n0 nUR                  5        Hó  u  pVUnUR                  S5      (       a�  SU;   a  UR	                  SS5      nSUR                  5       ;  ac  SUR                  5       ;   aO  [        USS	5      nU S
3n	UR	                  SU S3SU	 S35      n
SU	 SU S3nX´U
'   U
R	                  SS5      nSXL'   UR                  S5      (       a&  SUR                  5       ;  a  UR	                  SS5      nXv:w  d  Mï  XtU'   Mõ     U$ 7f)NzFiles to fix:zFindings to address:r  r  zwith sharingr  r  zclass\s+(\w+)rì   ÚTestÚ/z@IsTest
private class z3 {
    @IsTest
    static void testRun() {
        z.run();
    }
}
z.cls-meta.xmlz®<?xml version="1.0" encoding="UTF-8"?>
<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>59.0</apiVersion>
    <status>Active</status>
</ApexClass>
r  r  z// Agent Nova stubuF   // Agent Nova stub â€” bulk-safe: processes Trigger.new in single pass)r,  r¯   r-  rr   ÚreplacerP   r®   )r   r   ÚfilesÚfindings_blockÚupdatedr0  r1  Únew_contentÚcls_nameÚ	test_nameÚ	test_pathÚ	test_bodyÚ	meta_paths                r   r)   ÚMockLLMClient.fix_code¿  s]  é € Ü"¤8¨F°OÓ#DÓEˆÜ! &Ð*@ÓAˆØ"$ˆà"Ÿ[™[ž]‰MˆDØ!ˆKØ�}‰}˜V×$Ñ$Ø$¨Ó3Ø"-×"5Ñ"5Ð6GÈÓ"X�KØ K×$5Ñ$5Ó$7Ó7¸OÈ~×OcÑOcÓOeÓ<eÜ'¨Ð5EÀyÓQ�HØ#+ *¨DÐ 1�IØ $§¡¨q°°
¸$Ð-?À1ÀYÀKÈtÐATÓ U�Ið%Øˆkð 	ð 
ˆ
ð ð	!�Ið *3˜IÑ&Ø )× 1Ñ 1°&¸/Ó J�Ið.�GÑ&ð �}‰}˜Z×(Ñ(¨V¸;×;LÑ;LÓ;NÓ-NØ)×1Ñ1Ø(Ø\ó�ð Õ%Ø +˜“ñ? +ðB ˆùs   ‚DD/Ä%
D/c              ƒ  ó>  #   • [        USS5      n[        US5      n[        US5      nUR                  5        Vs/ sHO  nUR                  5       (       d  M  SUR	                  5       ;  d  M0  UR                  S5      R                  5       PMQ     nn/ n/ n[        U=(       d    S/SS	9 H[  u  pšUR                  [        S
U	 3SSU
 3U
S95        UR                  [        SU	 3SSU
 3U
S95        UR                  SU
 35        M]     / nSnSnSnSUR	                  5       ;   aŠ  UR                  5        Hm  nUR                  5       R                  S5      (       d  M)  SUR	                  5       ;  d  M?  UR                  UR                  S5      R                  5       5        Mo     U(       a  SnSUR	                  5       ;   a9  [        [        USS5      5      n[        [        USS5      5      nUS:”  a  XÜ:  a  Sn[        UUUUUUUU(       a  SSS9	$ SSS9	$ s  snf 7f) Nr“   r”   r—   zApex test results:rN   r˜   zStory behaves as specifiedrH   )ÚstartÚ	positive_ÚpositivezVerify: ©ÚnameÚtyper¶   Úacceptance_criterionÚ	negative_Únegativez"Invalid input should not satisfy: zManual UI check for: r   Tz	failures:r   ÚnoneFz
tests_run:ztests_run:\s*(\d+)r  ztests_passed:\s*(\d+)u)   QA passed â€” acceptance criteria coveredu   QA failed â€” see failureszMock QA Engineer©	r§   r&  Útest_matrixÚapex_tests_runÚapex_tests_passedÚapex_failuresÚmanual_scenariosr�   r­   )r®   r¯   r°   rp   rP   Ú	enumerater´   r   r±   r+  r
   )r   r   r§   r·   Ú
apex_blockr¹   rº   ÚmatrixÚmanualÚiÚacrS  Ú	tests_runÚtests_passedr&  r  s                   r   r,   Ú MockLLMClient.generate_qa_reportç  s:  é € Ü˜FÐ$8¸)ÓDˆÜ˜FÐ$:Ó;ˆÜ˜fÐ&:Ó;ˆ
ð ×(Ñ(Ô*ó
á*�Ø�w‰w�yó "à%¨Q¯W©W«YÑ6ó "ˆA�G‰G�D‹M×ÑÖ!Ù*ð 	ð 
ð
 &(ˆØˆÜ˜z×KÐ.JÐ-KÐSTÔU‰EˆAØ�M‰MÜØ$ Q C˜Ø#Ø"*¨2¨$ Ø)+ñ	ôð �M‰MÜØ$ Q C˜Ø#Ø"DÀRÀDÐ IØ)+ñ	ôð �M‰MÐ1°"°Ð6Ö7ñ# Vð& $&ˆØˆ	ØˆØˆØ˜*×*Ñ*Ó,Ó,Ø"×-Ñ-Ö/�Ø—:‘:“<×*Ñ*¨3×/Ó/°FÀ$Ç*Á*Ã,Õ4NØ!×(Ñ(¨¯©°DÓ)9×)?Ñ)?Ó)AÖBñ 0ö Ø�Ø˜:×+Ñ+Ó-Ó-ÜœH ZÐ1FÈÓLÓMˆIÜœx¨
Ð4LÈcÓRÓSˆLØ˜1‹} Ó!9Ø�äØØØØ$Ø*Ø'Ø#ÞCIÐ?Ø$ñ

ð 
	
ð PlØ$ñ

ð 
	
ùòU
ùs*   ‚8HºHÁHÁ,#HÂC
HÅHÅ3B*Hr   Nr=   r<   r4   r7   r8   r9   r;   )r>   r?   r@   rA   Ú__doc__r2   r/   r   r#   r&   r)   r,   rB   r   rC   r   rE   rE   !   s1   † Ù<ô,
ô\#
ôJX
ôtc
ôJG
ôR&÷P8
rC   rE   c                  ón   • \ rS rSrSSS jjrS rSS jrSS jrSS jrSS jr	SS	 jr
SS
 jrSS jrSrg)ÚOpenAILLMClienti"  Nc                ó4   • U=(       d
    [        5       U l        g r   )r   Úsettings)r   rb  s     r   Ú__init__ÚOpenAILLMClient.__init__#  s   € Ø ×2¤L£Nˆ�rC   c                ó€   • SSK Jn  U" U R                  R                  U R                  R                  =(       d    S SS9$ )Nr   )Ú
ChatOpenAI)ÚmodelÚapi_keyÚtemperature)Úlangchain_openairf  rb  Úopenai_modelÚopenai_api_key)r   rf  s     r   Ú_chatÚOpenAILLMClient._chat&  s4   € Ý/áØ—-‘-×,Ñ,Ø—M‘M×0Ñ0×8°DØñ
ð 	
rC   c              ƒ  ó  ^#   • SSK JnJm   " U4S jSU5      nU R                  5       R	                  U5      nUR                  U5      I S h  v•N nUR                  =(       d    SR                  5       =(       d    S nUR                  (       a  U(       d  [        SSUR                  S9$ [        [        UR                  =(       a    U5      UR                  (       a  UOS UR                  =(       d    SUR                  S	9$  Nµ7f)
Nr   ©Ú	BaseModelÚFieldc                  óZ   >• \ rS rSr% S\S'   SrS\S'   SrS\S	'    Y " S
SSS9rS\S'   Srg)Ú-OpenAILLMClient.check_duplicate.<locals>._Outi2  rv   r‰   Nú
str | Noner‹   rI   r5   rg   ra   r[   ç      ð?©ÚdefaultÚgeÚleÚfloatrh   r   )	r>   r?   r@   rA   Ú__annotations__r‹   rg   rh   rB   ©rr  s   €r   Ú_Outrt  2  s0   ø‡ ØÓØ'+ˆL˜*Ó+ØˆI�sÓÚ %¨c°c¸cÑ BˆJ˜ÖBrC   r~  rI   Fz+Model marked duplicate without original_keyrˆ   rŠ   )Úpydanticrq  rr  rm  Úwith_structured_outputÚainvoker‹   rp   r‰   r   rh   rv   rg   )r   r   rq  r~  ÚllmÚresultrŽ   rr  s          @r   r/   ÚOpenAILLMClient.check_duplicate/  sÐ   øé € ß-÷	C�9ô 	Cð �j‰j‹l×1Ñ1°$Ó7ˆØ Ÿ[™[¨Ó0×0ˆØ×"Ñ"×( b×/Ñ/Ó1×9°TˆØ××¦sÜ'Ø"ØGØ!×,Ñ,ñð ô
 $Ü˜f×1Ñ1×9°cÓ:Ø &× 3× 3™¸Ø×&Ñ&×,¨"Ø×(Ñ(ñ	
ð 	
ñ 1ùs   ƒA
DÁDÁB6Dc           
   ƒ  ó   ^	#   • SSK JnJm	   " S SU5      n " U	4S jSU5      nU R                  5       R	                  U5      nUR                  U5      I S h  v•N nUR                   Vs/ sHb  nUR                  (       d  M  [        UR                  UR                  =(       d    SR                  5       UR                  =(       d    SS S S	9PMd     nnUR                  (       a  U(       d  [        S
SUR                  S9$ [        [        UR                  =(       a    U5      UR                   =(       d    SUR                  US9$  Nîs  snf 7f)Nr   rp  c                  ó<   • \ rS rSr% S\S'   SrS\S'   SrS\S'   Srg)	Ú7OpenAILLMClient.check_already_implemented.<locals>._RefiK  r5   rT   Nru  rd   rS   r   )r>   r?   r@   rA   r|  rd   rS   rB   r   rC   r   Ú_Refr‡  K  s   ‡ Ø‹JØ"ˆC�Ó"Ø"&ˆG�ZÖ&rC   rˆ  c                  ód   >• \ rS rSr% S\S'   SrS\S'    Y " SSS	S
9rS\S'    Y " \S9rS\S'   Sr	g)Ú7OpenAILLMClient.check_already_implemented.<locals>._OutiP  rv   rf   rI   r5   rg   ra   r[   rv  rw  r{  rh   ©Údefault_factoryz
list[_Ref]ri   r   N)
r>   r?   r@   rA   r|  rg   rh   Úlistri   rB   r}  s   €r   r~  rŠ  P  s5   ø‡ Ø!%Ó%ØˆI�sÓÚ %¨c°c¸cÑ BˆJ˜ÓBÚ%*¸4Ñ%@ˆJ˜
Ö@rC   r~  rI   i,  rc   Fz3Model marked already_implemented without referencesrk   re   )r  rq  rr  rm  r€  r�  ri   rT   r   rd   rp   rS   rf   r   rh   rv   rg   )
r   r   rq  rˆ  r~  r‚  rƒ  ÚrÚrefsrr  s
            @r   r2   Ú)OpenAILLMClient.check_already_implementedH  s  øé € ß-ô	'�9ô 	'÷
	A�9ô 	Að �j‰j‹l×1Ñ1°$Ó7ˆØ Ÿ[™[¨Ó0×0ˆð ×&Ò&ó
á&�Ø�w�wó dŒL˜qŸw™w¨Q¯U©U¯[°b×,?Ñ,?Ó,AÈAÏIÉIÏOÐY[Ð]aÐ^aÐKbÔcÙ&ð 	ð 
ð
 ×%×%®dä!Ø$)ØOØ!×,Ñ,ñð ô
 Ü $ V×%?Ñ%?×%HÀDÓ IØ×&Ñ&×,¨"Ø×(Ñ(Øñ	
ð 	
ñ 1ùò
ùs,   ƒAEÁEÁEÁ+E	ÂAE	ÃA5EÅ	Ec              ƒ  óˆ  ^#   • SSK JnJm   " U4S jSU5      nU R                  5       R	                  U5      nUR                  U5      I S h  v•N n[        USS5      n[        UUR                  UR                  UR                  UR                  UR                  UR                  UR                  UR                  S9	$  Nr7f)Nr   rp  c                  ó¤   >• \ rS rSr% S\S'    Y " \S9rS\S'    Y " \S9rS\S'   S	\S
'   S\S'    Y " \S9rS\S'    Y " \S9r	S\S'   Sr
S\S'   Srg)Ú2OpenAILLMClient.analyze_requirements.<locals>._Outin  r5   r�   r‹  ú	list[str]r¨   zlist[ClarificationQuestion]r©   rv   rª   r{  rh   r«   r¬   Nru  r­   r   )r>   r?   r@   rA   r|  r�  r¨   r©   r«   r¬   r­   rB   r}  s   €r   r~  r“  n  s_   ø‡ Ø‹LÚ-2À4Ñ-HÐ ÓHÚCHÐY]ÑC^Ð#Ð%@Ó^Ø‹NØÓÚ27ÈÑ2MÐ$ iÓMÚ,1À$Ñ,GÐ 	ÓGØ $ˆE�:Ö$rC   r~  r“   r”   r¦   )r  rq  rr  rm  r€  r�  r®   r   r�   r¨   r©   rª   rh   r«   r¬   r­   )r   r   rq  r~  r‚  rƒ  r§   rr  s          @r   r   Ú$OpenAILLMClient.analyze_requirementsk  s¤   øé € ß-÷	%�9ô 	%ð �j‰j‹l×1Ñ1°$Ó7ˆØ Ÿ[™[¨Ó0×0ˆÜ˜FÐ$8¸)ÓDˆÜ#ØØ—N‘NØ &× :Ñ :Ø$*×$BÑ$BØ—_‘_Ø×(Ñ(Ø%+×%DÑ%DØ%×8Ñ8Ø—,‘,ñ

ð 
	
ñ 1ùs   ƒA
CÁC ÁA3Cc              ƒ  óB  ^	#   • SSK JnJm	   " S SU5      n " U	4S jSU5      nU R                  5       R	                  U5      nUR                  U5      I S h  v•N n[        USS5      n[        UUR                  UR                  UR                   Vs/ sHB  n[        UR                  UR                  UR                  UR                  UR                   S	9PMD     snUR"                  UR$                  UR&                  UR(                  UR                   S
9	$  N¿s  snf 7f)Nr   rp  c                  óT   • \ rS rSr% S\S'   S\S'   SrS\S'   SrS\S	'   SrS\S
'   Srg)Ú.OpenAILLMClient.design_solution.<locals>._ItemiŠ  r5   rØ   rÙ   rÖ   rÚ   Nru  rÛ   r­   r   )	r>   r?   r@   rA   r|  rÚ   rÛ   r­   rB   r   rC   r   Ú_Itemr˜  Š  s+   ‡ ØÓØ‹MØ"ˆF�CÓ"Ø!%ˆF�JÓ%Ø $ˆE�:Ö$rC   r™  c                  óž   >• \ rS rSr% S\S'   S\S'    Y " \S9rS\S'    Y " \S9rS\S	'    Y " \S9rS\S
'   Sr	S\S'   Sr
S\S'   SrS\S'   Srg)Ú-OpenAILLMClient.design_solution.<locals>._Outi‘  r5   r�   ró   r‹  zlist[_Item]rô   r”  rõ   rö   Frv   r÷   gffffffæ?r{  rh   Nru  r­   r   )r>   r?   r@   rA   r|  r�  rô   rõ   rö   r÷   rh   r­   rB   r}  s   €r   r~  r›  ‘  sZ   ø‡ Ø‹LØ‹MÚ).¸tÑ)DˆM˜;ÓDÚ&+¸DÑ&AˆL˜)ÓAÚ.3ÀDÑ.IÐ  )ÓIØ%*Ð˜dÓ*Ø #ˆJ˜Ó#Ø $ˆE�:Ö$rC   r~  r“   r”   r×   rò   )r  rq  rr  rm  r€  r�  r®   r   r�   ró   rô   r   rØ   rÙ   rÚ   rÛ   r­   rõ   rö   r÷   rh   )
r   r   rq  r™  r~  r‚  rƒ  r§   rY  rr  s
            @r   r#   ÚOpenAILLMClient.design_solution‡  sý   øé € ß-ô	%�Iô 	%÷	%�9ô 	%ð �j‰j‹l×1Ñ1°$Ó7ˆØ Ÿ[™[¨Ó0×0ˆÜ˜FÐ$8¸)ÓDˆÜØØ—N‘NØ—_‘_ð  ×-Ò-ó	ñ .�Aô !Ø"#§/¡/ØŸZ™ZØŸ8™8ØŸ8™8ØŸ'™'ôñ .ñ	ð  ×,Ñ,Ø!'×!<Ñ!<Ø#×4Ñ4Ø×(Ñ(Ø—,‘,ñ%
ð 	
ñ 1ùò	ùs%   ƒADÁDÁ;DÂADÃ=DÄDc              ƒ  óv  ^	#   • SSK JnJm	   " S SU5      n " U	4S jSU5      nU R                  5       R	                  U5      nUR                  U5      I S h  v•N n[        USS5      n[        UUR                  UR                  UR                   Vs/ sHr  n[        UR                  =(       d    S	R                  5       R                  5       UR                  UR                   UR"                  UR$                  UR&                  S
9PMt     snUR(                  UR*                  UR,                  S9$  NÙs  snf 7f)Nr   rp  c                  ó^   • \ rS rSr% S\S'   S\S'   SrS\S'   SrS\S	'   S\S
'   SrS\S'   Srg)Ú-OpenAILLMClient.review_code.<locals>._Findingi¶  r5   r  r  Nru  r  z
int | Noner  r  Trv   r  r   )	r>   r?   r@   rA   r|  r  r  r  rB   r   rC   r   Ú_FindingrŸ  ¶  s/   ‡ Ø‹MØ‹MØ#ˆD�*Ó#Ø#ˆD�*Ó#Ø‹LØ ˆG�TÖ rC   r   c                  ój   >• \ rS rSr% S\S'   S\S'    Y " \S9rS\S'   S	\S
'   SrS	\S'   SrS\S'   Sr	g)Ú)OpenAILLMClient.review_code.<locals>._Outi¾  rv   r&  r+  r(  r‹  zlist[_Finding]r)  r5   r�   r*  Nru  r­   r   )
r>   r?   r@   rA   r|  r�  r)  r*  r­   rB   r}  s   €r   r~  r¢  ¾  s6   ø‡ Ø‹LØ‹JÚ',¸TÑ'BˆH�nÓBØ‹LØ*2Ð" CÓ2Ø $ˆE�:Ö$rC   r~  r“   r”   r  )r  r  r  r  r  r  r'  )r  rq  rr  rm  r€  r�  r®   r   r&  r(  r)  r   r  rp   rP   r  r  r  r  r  r�   r*  r­   )
r   r   rq  r   r~  r‚  rƒ  r§   r$  rr  s
            @r   r&   ÚOpenAILLMClient.review_code³  s  øé € ß-ô	!�yô 	!÷	%�9ô 	%ð �j‰j‹l×1Ñ1°$Ó7ˆØ Ÿ[™[¨Ó0×0ˆÜ˜FÐ$8¸)ÓDˆÜØØ—=‘=Ø—,‘,ð  Ÿšó
ñ )�Aô ØŸj™j×4¨H×;Ñ;Ó=×CÑCÓEØŸZ™ZØŸ™ØŸ™ØŸI™IØŸI™Iôñ )ñ
ð —N‘NØ#)×#@Ñ#@Ø—,‘,ñ#
ð 	
ñ 1ùò
ùs%   ƒAD9ÁD2Á;D9ÂA8D4Ä'D9Ä4D9c              ƒ  ó,  ^#   • SSK JnJm   " S SU5      n " U4S jSU5      nU R                  5       R	                  U5      nUR                  U5      I S h  v•N nUR                   Vs0 sH  owR                  UR                  _M     sn$  N4s  snf 7f)Nr   rp  c                  ó*   • \ rS rSr% S\S'   S\S'   Srg)Ú,OpenAILLMClient.fix_code.<locals>._FilePatchià  r5   r0  r1  r   N)r>   r?   r@   rA   r|  rB   r   rC   r   Ú
_FilePatchr¦  à  s   ‡ Ø‹IØŽLrC   r§  c                  ó0   >• \ rS rSr%  Y " \S9rS\S'   Srg)Ú&OpenAILLMClient.fix_code.<locals>._Outiä  r‹  zlist[_FilePatch]r:  r   N)r>   r?   r@   rA   r�  r:  r|  rB   r}  s   €r   r~  r©  ä  s   ø‡ Ú&+¸DÑ&AˆEÐ#ÖArC   r~  )	r  rq  rr  rm  r€  r�  r:  r0  r1  )	r   r   rq  r§  r~  r‚  rƒ  r$  rr  s	           @r   r)   ÚOpenAILLMClient.fix_codeÝ  sx   øé € ß-ô	˜ô 	÷	B�9ô 	Bð �j‰j‹l×1Ñ1°$Ó7ˆØ Ÿ[™[¨Ó0×0ˆØ+1¯<ª<Ó8©< a—‘˜Ÿ	™	Ò!©<Ñ8Ð8ñ 1ùÚ8ùs$   ƒABÁBÁBÁ+BÂ
BÂBc              ƒ  óv  ^	#   • SSK JnJm	   " S SU5      n " U	4S jSU5      nU R                  5       R	                  U5      nUR                  U5      I S h  v•N n[        USS5      n[        UUR                  UR                   Vs/ sH\  n[        UR                  UR                  =(       d    S	R                  5       R                  5       UR                  UR                   S
9PM^     snUR"                  UR$                  UR&                  UR(                  UR*                  UR,                  S9	$  NÙs  snf 7f)Nr   rp  c                  óB   • \ rS rSr% S\S'   S\S'   S\S'   SrS\S'   S	rg)
Ú5OpenAILLMClient.generate_qa_report.<locals>._Scenarioiî  r5   rI  rJ  r¶   Nru  rK  r   )r>   r?   r@   rA   r|  rK  rB   r   rC   r   Ú	_Scenarior­  î  s   ‡ Ø‹IØ‹IØÓØ/3Ð  *Ö3rC   r®  c                  óž   >• \ rS rSr% S\S'    Y " \S9rS\S'   SrS\S	'   SrS\S
'    Y " \S9r	S\S'    Y " \S9r
S\S'   S\S'   SrS\S'   Srg)Ú0OpenAILLMClient.generate_qa_report.<locals>._Outiô  rv   r&  r‹  zlist[_Scenario]rP  r   r+  rQ  rR  r”  rS  rT  r5   r�   Nru  r­   r   )r>   r?   r@   rA   r|  r�  rP  rQ  rR  rS  rT  r­   rB   r}  s   €r   r~  r°  ô  sZ   ø‡ Ø‹LÚ+0ÀÑ+FˆK˜ÓFØ"#ˆN˜CÓ#Ø%&Ð˜sÓ&Ú',¸TÑ'BˆM˜9ÓBÚ*/ÀÑ*EÐ˜iÓEØ‹LØ $ˆE�:Ö$rC   r~  r“   r”   rX  rH  rO  )r  rq  rr  rm  r€  r�  r®   r
   r&  rP  r   rI  rJ  rp   rP   r¶   rK  rQ  rR  rS  rT  r�   r­   )
r   r   rq  r®  r~  r‚  rƒ  r§   Úsrr  s
            @r   r,   Ú"OpenAILLMClient.generate_qa_reportë  s  øé € ß-ô	4˜	ô 	4÷	%�9ô 	%ð �j‰j‹l×1Ñ1°$Ó7ˆØ Ÿ[™[¨Ó0×0ˆÜ˜FÐ$8¸)ÓDˆÜØØ—=‘=ð  ×+Ò+óñ ,�Aô ØŸ™ØŸ&™&×, H×3Ñ3Ó5×;Ñ;Ó=Ø !§¡Ø)*×)?Ñ)?ô	ñ ,ñð "×0Ñ0Ø$×6Ñ6Ø ×.Ñ.Ø#×4Ñ4Ø—N‘NØ—,‘,ñ#
ð 	
ñ 1ùò
ùs&   ƒAD9ÁD2Á0D9Â	A"D4Ã+AD9Ä4D9©rb  r   )rb  úOptional[Settings]r6   ÚNoner<   r=   r4   r7   r8   r9   r;   )r>   r?   r@   rA   rc  rm  r/   r2   r   r#   r&   r)   r,   rB   r   rC   r   r`  r`  "  s2   † ö3ò
ô
ô2!
ôF
ô8*
ôX(
ôT9÷(
rC   r`  c                ór   • U =(       d
    [        5       n U R                  S:X  a  [        U 5      $ [        5       $ )NÚopenai)r   Úllm_providerr`  rE   r³  s    r   Úget_llm_clientr¹    s/   € Ø×)œ<›>€HØ×Ñ Ó(Ü˜xÓ(Ð(Ü‹?ÐrC   c                ób   • [         R                  " X5      nU(       a  UR                  S5      $ U$ )NrH   )rl   rm   ro   )ÚtextÚpatternrx  ry   s       r   r®   r®     s%   € Ü
�	Š	�'Ó €AÞˆ1�7‰7�1‹:Ð' Ð'rC   >   ÚaÚanÚinÚofÚonÚorÚtoÚaddÚandÚforÚnewÚtheÚnovaÚtestÚwithÚagentc                óJ  • [         R                  " SU =(       d    SR                  5       5      n[        5       nU Hd  nU[        ;  a  UR                  U5        UR                  S5       H1  n[        U5      S:¼  d  M  U[        ;  d  M   UR                  U5        M3     Mf     U$ )Nz[a-z0-9_]{3,}rI   Ú_rM   )rl   ÚfindallrP   ÚsetÚ
_STOPWORDSrÄ  rú   rt   )r»  ÚrawÚtokensr}   Úparts        r   rq   rq   6  s{   € Ü
�*Š*Ð%¨¯
°×'9Ñ'9Ó';Ó
<€CÜ“u€FÛˆØ”JÓØ�J‰J�qŒMØ—G‘G˜C–LˆDÜ�4‹y˜A�~ $¬jÕ"8Ø—
‘
˜4Ö ó !ñ ð €MrC   c                ó¤   • U R                  U5      nUS:  a  gX[        U5      -   S  n[        R                  " SUSS9nUS   R	                  5       $ )Nr   rI   z \n(?:Description|Acceptance criteria|Comments|Attachments|Confluence hits|Repository hits|v1 allowlist|Out of scope from analyst|Notes|Confidence from analyst):rH   rÓ   )Úfindrt   rl   rú   rp   )r»  ÚheaderÚidxÚrestÚpartss        r   r¯   r¯   B  s[   € Ø
�)‰)�FÓ
€CØ
ˆQƒwØØ”c˜&“kÑ!Ð#Ð$€Dä�HŠHð 	lØØñ€Eð
 �‰8�>‰>ÓÐrC   c                óþ  • / nSU ;   aw  [        U S5      nUR                  5        HW  nUR                  5       R                  S5      (       d  M)  UR	                  UR                  S5      R                  5       5        MY     SU ;   aw  [        U S5      nUR                  5        HW  nUR                  5       R                  S5      (       d  M)  UR	                  UR                  S5      R                  5       5        MY     U$ )NzConfluence hits:r   r˜   zRepository hits:)r¯   r°   rp   r±   r´   )r   r�  Úblockr  s       r   rµ   rµ   P  sÊ   € Ø€DØ˜VÓ#Ü˜Ð!3Ó4ˆØ×$Ñ$Ö&ˆDØ�z‰z‹|×&Ñ& s×+Ó+Ø—‘˜DŸJ™J tÓ,×2Ñ2Ó4Ö5ñ 'ð ˜VÓ#Ü˜Ð!3Ó4ˆØ×$Ñ$Ö&ˆDØ�z‰z‹|×&Ñ& s×+Ó+Ø—‘˜DŸJ™J tÓ,×2Ñ2Ó4Ö5ñ 'ð €KrC   c                ó°  • 0 nU R                  5       (       d  U$ [        R                  " SU [        R                  S9nSnU[	        U5      S-
  :  a„  X#   R                  5       nX#S-      n[        R
                  " SU[        R                  5      nU(       a%  UR                  S5      R                  S5      S-   X'   US-  nU[	        U5      S-
  :  a  M„  U$ )z@Parse '### path\n```\ncontent\n```' sections from prompt blocks.z^###\s+(.+)$)ÚflagsrH   z```(?:\w+)?\n(.*?)```r™   rJ   )	rp   rl   rú   Ú	MULTILINErt   rm   ÚDOTALLro   rù   )rÜ  r:  rÚ  rY  r0  Úbodyry   s          r   r,  r,  _  s¶   € à€EØ�;‰;�=‰=ØˆÜ�HŠH�_ e´2·<±<Ñ@€EØ	€AØ
Œc�%‹j˜1‰nÓ
Ø‰x�~‰~ÓˆØ˜‘U‰|ˆÜ�IŠIÐ.°´b·i±iÓ@ˆÞØŸ'™' !›*×+Ñ+¨DÓ1°DÑ8ˆE‰KØ	ˆQ‰ˆð Œc�%‹j˜1‰nÕ
ð €LrC   r   )rb  r´  r6   r   )r»  r5   r¼  r5   rx  r5   r6   r5   )r»  r5   r6   zset[str])r»  r5   r×  r5   r6   r5   )r   r5   r6   r”  )rÜ  r5   r6   r:   )'r^  Ú
__future__r   rl   Útypingr   r   r   Úpackages.artifacts.designr   r   r	   Úpackages.artifacts.qa_reportr
   r   Úpackages.artifacts.requirementsr   r   Úpackages.artifacts.reviewr   r   Úpackages.configr   r   Ú$packages.integrations.doc_validationr   r   Ú packages.integrations.duplicatesr   r   rE   r`  r¹  r®   rÑ  rq   r¯   rµ   r,  r   rC   r   Ú<module>rë     sy   ðÙ å "ã 	ß +Ñ +ç TÑ Tß Gß Wß Cß 2ß MÝ AôR�ô R÷ ~
ñ ~
÷Bq
ñ q
öhô(ò
€
ô(	ôôõrC   