ó
    dî¨jj°  ã                  ó¦  • S r SSKJr  SSKrSSKrSSKJr  SSKJrJ	r	J
r
Jr  SSKrSSKJrJr  SSKJr  SSKJr  SS	KJr  SS
KJr  SSKJr  SSKJr  SSKJr  SSKJr  SSK J!r!  SSK"J#r#  SSK$J%r%  SSK&J'r'  SSK(J)r)  SSK*J+r+J,r,J-r-J.r.  SSK/J0r0J1r1J2r2J3r3  SSK4J5r5J6r6J7r7  SSK8J9r9J:r:J;r;  SSK<J=r=J>r>  SSK?J@r@JArAJBrB  SSKCJDrDJErEJFrFJGrG  SSKHJIrIJJrJ  \R–                  " \L5      rM\Rœ                  " S\Rž                  5      rP " S S\SS 9rQS+S! jrR S,           S-S" jjrSS.S# jrTS/S$ jrUS0S% jrVS1S& jrW " S' S(5      rXS2S) jrY S,       S3S* jjrZg)4u[   Orchestrator graph: â€¦ â†’ IMPLEMENTING â†’ REVIEWING â†’ TESTING â†’ PR_CREATED | FAILED.é    )ÚannotationsN)ÚPath)ÚAnyÚDictÚOptionalÚ	TypedDict)ÚENDÚ
StateGraph)Úselect)ÚAsyncSession)ÚCodeReviewer)Ú
QAEngineer)ÚRequirementAnalyst)ÚSalesforceDeveloper)ÚSolutionArchitect)ÚDesignArtifact)ÚImplementationArtifact)ÚRequirementsArtifact)ÚReviewArtifact)Úget_settings)ÚArtifactStore)ÚACTIVE_STATESÚ
AuditEventÚRunÚWorkflowState)ÚConfluencePublisherÚdesign_doc_storage_htmlÚdesign_doc_titleÚget_confluence_publisher)ÚDocReferenceÚbuild_doc_check_promptÚdoc_review_comment_body)Úbuild_duplicate_check_promptÚcandidate_search_jqlÚduplicate_review_comment_body)Ú	GitClientÚget_git_client)Ú
JiraClientÚ	JiraIssueÚget_jira_client)ÚApexTestRunnerÚSalesforceDeployerÚget_apex_test_runnerÚget_salesforce_deployer)ÚStaticAnalyzerÚget_static_analyzerz^(reject|rejected)\bc                  óŽ   • \ rS rSr% S\S'   S\S'   S\S'   S\S'   S\S	'   S\S
'   S\S'   S\S'   S\S'   S\S'   S\S'   S\S'   Srg)ÚOrchestratorStateé5   ÚstrÚrun_idÚjira_keyÚboolÚresumeúOptional[str]ÚerrorÚnext_actionÚdesign_decisionÚduplicate_decisionÚdoc_decisionÚfailure_phaseÚintÚreview_cycleÚfix_modeúDict[str, str]Úfile_map© N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__annotations__Ú__static_attributes__rE   ó    Ú3/var/www/html/gaurav/packages/orchestrator/graph.pyr2   r2   5   sF   ‡ ØƒKØƒMØƒLØÓØÓØÓØÓØÓØÓØÓØƒNØÖrL   r2   F)Útotalc              ƒ  óp   #   • U R                  [        U5      I S h  v•N nUc  [        SU 35      eU$  N7f)NzRun not found: )Úgetr   Ú
ValueError)Úsessionr5   Úruns      rM   Ú_get_runrT   D   s9   é € Ø—‘œC Ó(×
(€CØ
�{Ü˜?¨6¨(Ð3Ó4Ð4Ø€Jñ )ùs   ‚6œ4�6c           	   ƒ  óT   #   • U R                  [        UUUU=(       d    0 S95        g 7f)N)r5   Ú
event_typeÚmessageÚpayload)Úaddr   )rR   r5   rV   rW   rX   s        rM   Ú_auditrZ   K   s+   é € ð ‡K�KÜØØ!ØØ—M˜rñ		
õùs   ‚&(c                ó”   • U (       a  U R                  5       (       d  g[        [        R                  U R                  5       5      5      $ )NF)Ústripr7   Ú
_REJECT_REÚmatch)Úbodys    rM   Ú_is_design_reject_commentr`   \   s.   € Þ�t—z‘z—|‘|ØÜ”
× Ñ  §¡£Ó.Ó/Ð/rL   c                óÀ   • U (       a  U R                  5       (       d  g[        R                  SU R                  5       SS9R                  S5      R                  5       nU$ )zFStrip leading reject/rejected token; return remaining feedback if any.Ú é   )Úcountu    â€”-:)r\   r]   ÚsubÚlstrip)r_   Úcleaneds     rM   Ú_reject_feedback_hintrh   b   sE   € æ�t—z‘z—|‘|ØÜ�n‰n˜R §¡£°QˆnÐ7×>Ñ>¸xÓH×NÑNÓP€GØ€NrL   c                óŽ   • / SQnU (       a  UR                  SSU  S3/5        UR                  / SQ5        SR                  U5      $ )N)z!## Agent Nova needs clarificationrb   z!The previous design was rejected.rb   zYour reject note: "Ú")rb   zaPlease describe what should change in the design so Agent Nova can produce a new design document.rb   z@Next step: reply in a comment with your clarification to resume.Ú
)ÚextendÚjoin)ÚhintÚliness     rM   Ú!_design_reject_clarification_bodyrp   j   sK   € ò€Eö
 Ø�‰�bÐ/°¨v°QÐ7Ð8Ô9Ø	‡L�Lò	
ôð �9‰9�UÓÐrL   c                óê   • / nU  Hj  nUR                  S5      (       d  M  SU;  d  M#  [        U5      R                  nU(       d  MA  UR                  S5      (       a  MY  UR                  U5        Ml     U$ )Nz.clszTest.clsÚTest)Úendswithr   ÚstemÚappend)rD   ÚnamesÚpathÚnames       rM   Ú_apex_class_namesry   ~   sZ   € Ø€EÛˆØ�=‰=˜× Ó  Z°tÕ%;Ü˜“:—?‘?ˆDßˆt˜DŸM™M¨&×1Ó1Ø—‘˜TÖ"ñ	 ð
 €LrL   c                  óÄ  • \ rS rSr            S!                           S"S jjrS rS#S$S j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'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(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&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)*ÚOrchestratoréˆ   Nc                ó®  • Xl         U=(       d
    [        5       U l        U=(       d
    [        5       U l        U=(       d
    [        5       U l        U=(       d
    [        5       U l        U=(       d
    [        5       U l
        U=(       d
    [        5       U l        U=(       d
    [        5       U l        U	=(       d
    [        5       U l        U
=(       d
    [#        5       U l        U=(       d
    ['        5       U l        U=(       d
    [+        5       U l        [/        5       U l        U=(       d    [3        U R0                  5      U l        U R7                  5       U l        g ©N)rR   r*   Újirar   Úanalystr   Ú	architectr   Ú	developerr   Úreviewerr   Úqar'   Úgitr.   Údeployerr0   Ústatic_analysisr-   Úapex_runnerr   Ú	artifactsr   Úsettingsr   Ú
confluenceÚ_build_graphÚgraph)ÚselfrR   r   r€   r�   r‚   rƒ   r„   r…   r†   r‡   rˆ   r‰   r‹   s                 rM   Ú__init__ÚOrchestrator.__init__‰   sâ   € ð  ŒØ×-œOÓ-ˆŒ	Ø×6Ô"4Ó"6ˆŒØ"×9Ô&7Ó&9ˆŒØ"×;Ô&9Ó&;ˆŒØ ×2¤L£NˆŒØ×$œ
›ˆŒØ×*œ.Ó*ˆŒØ ×=Ô$;Ó$=ˆŒØ.×GÔ2EÓ2GˆÔØ&×@Ô*>Ó*@ˆÔØ"×5¤m£oˆŒÜ$›ˆŒØ$×OÔ(@ÀÇÁÓ(OˆŒØ×&Ñ&Ó(ˆ�
rL   c           
     óØ  • [        [        5      nUR                  SU R                  5        UR                  SU R                  5        UR                  SU R
                  5        UR                  SU R                  5        UR                  SU R                  5        UR                  SU R                  5        UR                  SU R                  5        UR                  SU R                  5        UR                  S	U R                  5        UR                  S
U R                  5        UR                  SU R                  5        UR                  SU R                  5        UR                  SU R                  5        UR                  SU R                   5        UR                  SU R"                  5        UR%                  S5        UR'                  SU R(                  SSS	SSS.5        UR+                  S[,        5        UR'                  SU R.                  SSSSSS.5        UR'                  SU R0                  SSS.5        UR'                  S
U R2                  SSS.5        UR'                  SU R4                  S
SSS.5        UR'                  SU R6                  SSS.5        UR'                  SU R8                  [,        SS.5        UR+                  S[,        5        UR+                  S[,        5        UR+                  S[,        5        UR+                  S[,        5        UR+                  S	[,        5        UR+                  SS
5        UR+                  S[,        5        UR;                  5       $ )NÚrouteÚanalyzeÚclarification_gateÚduplicate_review_gateÚdoc_review_gater�   Údesign_review_gateÚdesign_approveÚdesign_reject_clarifyÚ	implementÚreviewr„   Ú	create_prÚfailÚnoop)r“   r˜   r™   r�   rž   )r”   r•   r–   r�   r�   )r—   r�   )r›   r�   )rš   r„   r�   )rœ   r�   )Úendr�   )r
   r2   Úadd_nodeÚ_route_nodeÚ_analyze_nodeÚ_clarification_gate_nodeÚ_duplicate_review_gate_nodeÚ_doc_review_gate_nodeÚ_architect_nodeÚ_design_review_gate_nodeÚ_design_approve_nodeÚ_design_reject_clarify_nodeÚ_implement_nodeÚ_review_nodeÚ_qa_nodeÚ_create_pr_nodeÚ
_fail_nodeÚ
_noop_nodeÚset_entry_pointÚadd_conditional_edgesÚ_after_routeÚadd_edger	   Ú_after_analyzeÚ_after_architectÚ_after_implementÚ_after_reviewÚ	_after_qaÚ_after_create_prÚcompile)rŽ   r�   s     rM   rŒ   ÚOrchestrator._build_graph©   sÝ  € ÜÔ,Ó-ˆØ�‰�w × 0Ñ 0Ô1Ø�‰�y $×"4Ñ"4Ô5Ø�‰Ð+¨T×-JÑ-JÔKØ�‰Ð.°×0PÑ0PÔQØ�‰Ð(¨$×*DÑ*DÔEØ�‰�{ D×$8Ñ$8Ô9Ø�‰Ð+¨T×-JÑ-JÔKØ�‰Ð'¨×)BÑ)BÔCØ�‰Ð.°×0PÑ0PÔQØ�‰�{ D×$8Ñ$8Ô9Ø�‰�x ×!2Ñ!2Ô3Ø�‰�t˜TŸ]™]Ô+Ø�‰�{ D×$8Ñ$8Ô9Ø�‰�v˜tŸ™Ô/Ø�‰�v˜tŸ™Ô/à×Ñ˜gÔ&Ø×#Ñ#ØØ×Ñà$Ø"2Ø)@ØØñô
	
ð 	�‰�vœsÔ#Ø×#Ñ#ØØ×Ñà&:Ø)@Ø#4Ø(Øñô
	
ð 	×#Ñ#ØØ×!Ñ!Ø#7ÀÑHô	
ð
 	×#Ñ#ØØ×!Ñ!Ø¨Ñ0ô	
ð
 	×#Ñ#ØØ×ÑØ%¨T¸6ÑBô	
ð
 	×#Ñ#ØØ�N‰NØ%¨vÑ6ô	
ð
 	×#Ñ#ØØ×!Ñ!Ü Ñ(ô	
ð
 	�‰Ð+¬SÔ1Ø�‰Ð.´Ô4Ø�‰Ð(¬#Ô.Ø�‰Ð+¬SÔ1Ø�‰Ð.´Ô4Ø�‰Ð'¨Ô5Ø�‰�vœsÔ#Ø�}‰}‹ÐrL   c              ƒ  óþ   #   • [        U5      USSSS.nU R                  R                  U5      I S h  v•N   U R                  R	                  5       I S h  v•N   [        U R                  U5      I S h  v•N $  ND N$ N7f)Nr“   r   F)r5   r8   r;   rA   rB   )r4   r�   ÚainvokerR   ÚcommitrT   )rŽ   r5   r8   Úinitials       rM   rS   ÚOrchestrator.runõ   sn   é € ä˜&“kØØ$ØØñ&
ˆð �j‰j× Ñ  Ó)×)Ð)Ø�l‰l×!Ñ!Ó#×#Ð#Ü˜dŸl™l¨FÓ3×3Ð3ñ 	*Ù#Ù3ùs3   ‚0A=²A7³!A=ÁA9ÁA=Á2A;Á3A=Á9A=Á;A=c              ƒ  ó<  #   • [         R                  " US   5      n[        U R                  U5      I S h  v•N nUR	                  S5      (       Ga	  UR
                  [        R                  :X  aë  UR                  =(       d    0 R	                  S5      =(       d    SnUR                  =(       d    0 R	                  S5      =(       d    SnUS:X  a"  U(       a  SU 3OSUS	'   S
US'   SUS'   SUS'   U$ [        UR                  =(       d    0 5      nSUS'   UR                  SS 5        Xcl        U R                  R                  5       I S h  v•N   SUS'   SUS'   U$ UR	                  S5      (       aÕ  UR
                  [        R                  :X  a·  UR                  =(       d    0 R	                  S5      =(       d    SnUS:X  a  SUS	'   SUS'   SUS'   SUS'   U$ [        UR                  =(       d    0 5      nSUS'   SUS'   UR                  SS 5        Xcl        U R                  R                  5       I S h  v•N   SUS'   SUS'   U$ UR	                  S5      (       a›  UR
                  [        R                  :X  a}  UR                  =(       d    0 R	                  S5      =(       d    SnUS:X  d2  [        UR                  =(       d    0 R	                  S5      5      (       a  SUS'   SUS'   U$ SUS'   SUS'   U$ UR	                  S5      (       a€  UR
                  [        R                  [        R                   [        R"                  [        R$                  [        R&                  [        R(                  [        R*                  1;   a  SUS'   U$ SUS'   U$  GN^ GNM GNe7f)Nr5   r8   r=   rb   Úduplicate_ofÚclosezClosed as duplicate of zClosed as duplicater:   Ú	duplicater?   r�   r;   TÚduplicate_check_skippedr“   Úcontinuer>   zBClosed: functionality already documented/implemented in ConfluenceÚdocÚdoc_check_skippedr<   ÚapproveÚrejectÚdesign_resume_commentr™   r˜   rž   )ÚuuidÚUUIDrT   rR   rP   Ústater   ÚDUPLICATE_REVIEWr‰   ÚdictÚpopÚflushÚ
DOC_REVIEWÚDESIGN_REVIEWr`   ÚIMPLEMENTINGÚ	REVIEWINGÚTESTINGÚ
PR_CREATEDÚ	COMPLETEDÚFAILEDÚHUMAN_REVIEW)rŽ   rÎ   r5   rS   ÚdecisionÚoriginalÚartss          rM   r¡   ÚOrchestrator._route_node  sP  é € Ü—’˜5 ™?Ó+ˆÜ˜TŸ\™\¨6Ó2×2ˆØ�9‰9�X×Ò 3§9¡9´×0NÑ0NÓ#NØŸ™×+¨×0Ñ0Ð1EÓF×LÈ"ˆHØŸ™×+¨×0Ñ0°Ó@×FÀBˆHØ˜7Ó"æ<DÐ-¨h¨ZÑ8ÐJ_ð �g‘ð *5��oÑ&Ø'-��mÑ$Ø.5�Ð*Ñ+ð ˆLô ˜CŸM™M×/¨RÓ0�Ø26�Ð.Ñ/Ø—‘Ð-¨tÔ4Ø $”Ø—l‘l×(Ñ(Ó*×*Ð*Ø'0��mÑ$Ø.8�Ð*Ñ+ØˆLØ�9‰9�X×Ñ 3§9¡9´×0HÑ0HÓ#HØŸ™×+¨×0Ñ0°Ó@×FÀBˆHØ˜7Ó"àXð �g‘ð */��oÑ&Ø'-��mÑ$Ø(/��nÑ%ð ˆLô ˜CŸM™M×/¨RÓ0�Ø,0�Ð(Ñ)Ø26�Ð.Ñ/Ø—‘˜¨Ô.Ø $”Ø—l‘l×(Ñ(Ó*×*Ð*Ø'0��mÑ$Ø(2��nÑ%ØˆLØ�9‰9�X×Ñ 3§9¡9´×0KÑ0KÓ#KØŸ™×+¨×0Ñ0Ð1BÓC×PÀyˆHØ˜8Ó#Ô'@Ø—‘×$ "×)Ñ)Ð*AÓB÷(ñ (ð (?��mÑ$Ø+3�Ð'Ñ(ð ˆLð (8��mÑ$Ø+4�Ð'Ñ(ØˆLð �9‰9�X×Ñ 3§9¡9Ü×&Ñ&Ü×#Ñ#Ü×!Ñ!Ü×$Ñ$Ü×#Ñ#Ü× Ñ Ü×&Ñ&ð1
ó $
ð $*ˆE�-Ñ ØˆLØ(ˆˆmÑØˆòC 3ò" +ò& +ùs6   ‚3NµN¶DNÅ	NÅ
C*NÈ4NÈ5ENÎNÎNc              ƒ  ó   #   • U$ 7fr~   rE   ©rŽ   rÎ   s     rM   r¯   ÚOrchestrator._noop_nodeF  s
   é € Øˆùs   ‚c                ó6   • UR                  S5      =(       d    S$ )Nr;   r“   ©rP   rá   s     rM   r²   ÚOrchestrator._after_routeI  s   € Ø�y‰y˜Ó'×4¨9Ð4rL   c           	   ƒ  óª  #   • [         R                  " US   5      n[        U R                  U5      I S h  v•N n[        R
                  Ul        [        U R                  USSUR                   35      I S h  v•N    U R                  R                  UR                  5      I S h  v•N n[        UR                  =(       d    0 5      nUR                  S5      (       dO  U R                  X4U5      I S h  v•N nU(       a.  XSl        XaS'   U R                  R                  5       I S h  v•N   U$ UR                  S5      (       dO  U R!                  X4U5      I S h  v•N nU(       a.  XSl        XqS'   U R                  R                  5       I S h  v•N   U$ U R"                  R%                  U5      I S h  v•N nU R                  R'                  USU5      n	[)        U R                  R+                  U5      5      Ul        X•S'   XSl        [        U R                  USS	UR.                  UR0                  S
.5      I S h  v•N   UR                  US'   UR.                  (       d  SOSUS'   S Ul        U R                  R                  5       I S h  v•N   UR.                  US'   UR.                  (       d  UR5                  5       OS US'   XSl        U R                  R                  5       I S h  v•N   U$  GN· GNx GNM GN GNÒ GN£ GNs GNQ NË N} N"! [6         a<  n
[8        R;                  S[)        U5      S9  [)        U
5      US'   SUS'   Us S n
A
$ S n
A
ff = f7f)Nr5   zanalyze.startz
Analyzing rÅ   r;   rÈ   úrequirements.jsonzanalyze.completezRequirement analysis complete)Úis_clearÚ
confidencer6   r”   r�   rè   Úclarification_bodyÚanalyze_failed©r5   r:   r�   )rÌ   rÍ   rT   rR   r   Ú	ANALYZINGrÎ   rZ   r6   r   Ú	get_issuerÐ   r‰   rP   Ú_maybe_flag_duplicaterÒ   Ú_maybe_flag_existing_docsr€   r“   Ú
write_jsonr4   Úrun_dirÚartifact_dirrè   ré   r:   Úclarification_comment_bodyÚ	ExceptionÚloggerÚ	exception)rŽ   rÎ   r5   rS   ÚissuerÞ   Ú
dup_actionÚ
doc_actionÚartifactrw   Úexcs              rM   r¢   ÚOrchestrator._analyze_nodeL  sÍ  é € Ü—’˜5 ™?Ó+ˆÜ˜TŸ\™\¨6Ó2×2ˆÜ!×+Ñ+ˆŒ	Ü�T—\‘\ 6¨?¸jÈÏÉÈÐ<WÓX×XÐXð.	ØŸ)™)×-Ñ-¨c¯l©lÓ;×;ˆEÜ˜Ÿ™×+¨Ó,ˆDØ—8‘8Ð5×6Ñ6Ø#'×#=Ñ#=¸cÈ$Ó#O×O�
ÞØ$(”MØ+5˜-Ñ(ØŸ,™,×,Ñ,Ó.×.Ð.Ø �Là—8‘8Ð/×0Ñ0Ø#'×#AÑ#AÀ#ÈdÓ#S×S�
ÞØ$(”MØ+5˜-Ñ(ØŸ,™,×,Ñ,Ó.×.Ð.Ø �Là!Ÿ\™\×1Ñ1°%Ó8×8ˆHØ—>‘>×,Ñ,¨VÐ5HÈ(ÓSˆDÜ" 4§>¡>×#9Ñ#9¸&Ó#AÓBˆCÔØ(,Ð$Ñ%Ø ŒMÜØ—‘ØØ"Ø/Ø%×.Ñ.¸h×>QÑ>QÑRó÷ ð ð !$§¡ˆE�*ÑØ?G×?P×?PÑ#7ÐVaˆE�-Ñ ØˆCŒIØ—,‘,×$Ñ$Ó&×&Ð&Ø'×0Ñ0ˆD�Ñà=E×=N×=N�×3Ñ3Ô5ÐTXð Ð%Ñ&ð !ŒMØ—,‘,×$Ñ$Ó&×&Ð&ØˆLòY 3âXâ;ò Pò /ò Tò /ò 9ñ
ñ 'ñ 'øäó 	Ü×ÑÐ-´c¸&³kÐÑBÜ  ›XˆE�'‰NØ#)ˆE�-Ñ Ø�Lûð		üs  ‚3MµK,¶AMÁ7K/Á8MÁ=(L
 Â%K2Â&AL
 Ã3K5Ã42L
 Ä&K8Ä'L
 Ä,MÄ-+L
 ÅK;Å2L
 ÆK>ÆL
 ÆMÆL
 Æ0LÆ1BL
 È8LÈ9AL
 ÊLÊ	AL
 Ë%LË&L
 Ë+MË/MË2L
 Ë5L
 Ë8L
 Ë;L
 Ë>L
 ÌL
 ÌL
 ÌL
 ÌL
 Ì

MÌ1MÍMÍMÍMÍMc              ƒ  ó  #   •  UR                    SUR                   3R                  5       nU R                  R                  R
                  R                  USS9I Sh  v•N nU Vs/ sH-  ofR                  =(       d    SR                  5       S:X  d  M+  UPM/     nnU(       d  g[        X'5      nU R                  R                  R                  U5      I Sh  v•N n	[        U R                  UR                  SSU	R                  U	R                   [#        U5      U	R$                   V
s/ sH  oªR&                  U
R(                  S	.PM     sn
S
.5      I Sh  v•N   U	R                  (       a  U	R$                  (       d  gSUS'   U	R*                  US'   U	R                   US'   U	R$                   V
s/ sH&  oªR&                  U
R(                  U
R,                  S.PM(     sn
US'   [/        U	R$                  U	R*                  5      US'   g GN¥s  snf  GN4s  sn
f  N¾s  sn
f ! [0         a`  n[2        R5                  SUR6                  [9        U5      S9  [        U R                  UR                  SSU 35      I Sh  v•N     SnAgSnAff = f7f)zFReturn 'doc_review_gate' when Confluence suggests already implemented.Ú é   )ÚlimitNrb   r‹   z	doc.checkz.Confluence already-implemented check completed)ÚtitleÚurl)Úalready_implementedré   ÚhitsÚ
referencesTÚdoc_already_implementedÚdoc_rationaleÚdoc_confidence©r  r  ÚsnippetÚdoc_referencesÚdoc_review_bodyr–   Údoc_check_failed©r6   r:   zdoc.check_failedz*Confluence doc check failed (continuing): )ÚsummaryÚdescriptionr\   r€   Ú	knowledger‹   ÚsearchÚsourceÚlowerr!   ÚllmÚcheck_already_implementedrZ   rR   Úidr  ré   Úlenr  r  r  Ú	rationaler  r"   rõ   rö   Úwarningr6   r4   )rŽ   rS   rø   rÞ   Úqueryr  ÚhÚ	conf_hitsÚpromptÚresultÚrrü   s               rM   rð   Ú&Orchestrator._maybe_flag_existing_docs�  s1  é € ð&	Ø—}‘}�o Q u×'8Ñ'8Ð&9Ð:×@Ñ@ÓBˆEØŸ™×/Ñ/×:Ñ:×AÑAÀ%ÈqÐAÐQ×QˆDÙ$(ÓU¡D˜q¯X©X¯^¸×,BÑ,BÓ,DÈÑ,TŸ¡DˆIÐUÞØÜ+¨EÓ=ˆFØŸ<™<×+Ñ+×EÑEÀfÓM×MˆFÜØ—‘Ø—‘ØØ@à+1×+EÑ+EØ"(×"3Ñ"3Ü 	›NØMS×M^ÒM^Ó"_ÑM^È¯W©W¸Q¿U¹UÔ#CÑM^Ñ"_ñ	ó÷ ð ð ×-×-°V×5F×5FØØ.2ˆDÐ*Ñ+Ø$*×$4Ñ$4ˆD�Ñ!Ø%+×%6Ñ%6ˆDÐ!Ñ"àPV×PaÒPaó&ÙPaÈ1Ÿ'™'¨!¯%©%¸A¿I¹IÔFÑPañ&ˆDÐ!Ñ"ô '>¸f×>OÑ>OÐQW×QaÑQaÓ&bˆDÐ"Ñ#Ø$ò7 RùÚUò Nùò #`ñùò"&øô
 ó 	Ü�N‰NÐ-¸¿¹ÌCÐPSËHˆNÑUÜØ—‘Ø—‘Ø"Ø<¸S¸EÐBó	÷ ñ ô ûð	üs»   ‚J„AH ÁHÁH Á')HÂHÂ	H Â#JÂ$3H ÃHÃAH Ä'!HÅH ÅHÅ&H Å;JÅ<1H Æ-,HÇ)H ÈJÈH ÈH ÈH ÈH È
JÈ$AI?É4I7É5I?É:JÉ?JÊJc           
   ƒ  ó¨  #   • [         R                  " US   5      n[        U R                  U5      I S h  v•N n[	        UR
                  =(       d    0 5      nUR                  S5      =(       d    /  Vs/ sHm  n[        U[        5      (       d  M  [        UR                  S5      =(       d    SUR                  S5      =(       d    SUR                  S5      =(       d    SS9PMo     nnUR                  S5      =(       d#    [        XdR                  S	5      =(       d    S5      nU R                  R                  UR                  U5      I S h  v•N   [        R                  Ul        [!        U R                  US
SSUR                  S5      =(       d    / 0S9I S h  v•N   U R                  R#                  5       I S h  v•N   U$  GN�s  snf  N~ N2 N7f)Nr5   r  r  rb   r  r  r
  r  r  zdoc.review_postedz,Posted Confluence already-implemented reviewr  ©rX   )rÌ   rÍ   rT   rR   rÐ   r‰   rP   Ú
isinstancer    r"   r   Úadd_commentr6   r   rÓ   rÎ   rZ   rÒ   )rŽ   rÎ   r5   rS   rÞ   r!  Úrefsr_   s           rM   r¥   Ú"Orchestrator._doc_review_gate_node°  s‚  é € Ü—’˜5 ™?Ó+ˆÜ˜TŸ\™\¨6Ó2×2ˆÜ�C—M‘M×' RÓ(ˆð —h‘hÐ/Ó0×6°BÐ6ó
ñ 7�Ü˜!œT×"óŒLØ—e‘e˜G“n×*¨Ø—E‘E˜%“L×& BØŸ™˜iÓ(×.¨Bôñ
 7ð 	ð 
ð �x‰xÐ)Ó*÷ 
Ô.EØ—(‘(˜?Ó+×1¨ró/
ˆð �i‰i×#Ñ# C§L¡L°$Ó7×7Ð7Ü!×,Ñ,ˆŒ	ÜØ�L‰LØØØ:Ø! 4§8¡8Ð,<Ó#=×#CÀÐDñ
÷ 	
ð 	
ð �l‰l× Ñ Ó"×"Ð"Øˆò1 3ùò
ñ 	8ñ	
ñ 	#ùsZ   ‚3GµG¶>GÁ4GÂAGÃ'A&GÅGÅAGÆGÆ!GÆ=GÆ>GÇGÇGÇGc              ƒ  óÚ  #   •  UR                   =(       d    UR                  R                  S5      S   n[        XAR                  5      nU R                  R                  USS9I Sh  v•N nU(       d  g[        X&5      nU R                  R                  R                  U5      I Sh  v•N n[        U R                  UR                  SSUR                  UR                  UR                  [!        U5      S.5      I Sh  v•N   UR                  (       a  UR                  (       d  gUR                  US	'   UR"                  US
'   UR                  US'   [%        UR                  UR"                  5      US'   g GN NÒ N}! [&         a`  n	[(        R+                  SUR                  [-        U	5      S9  [        U R                  UR                  SSU	 35      I Sh  v•N     Sn	A	gSn	A	ff = f7f)zKReturn 'duplicate_review_gate' when a likely duplicate is found; else None.Ú-r   é   )Úmax_resultsNzduplicate.checkzDuplicate check completed)Úis_duplicateÚoriginal_keyré   Ú
candidatesrÂ   Úduplicate_rationaleÚduplicate_confidenceÚduplicate_review_bodyr•   Úduplicate_check_failedr  zduplicate.check_failedz%Duplicate check failed (continuing): )Úproject_keyr6   Úsplitr$   r   Úsearch_issuesr#   r€   r  Úcheck_duplicaterZ   rR   r  r-  r.  ré   r  r  r%   rõ   rö   r  r4   )
rŽ   rS   rø   rÞ   r4  Újqlr/  r  r   rü   s
             rM   rï   Ú"Orchestrator._maybe_flag_duplicateÌ  s¸  é € ð)	Ø×+Ñ+×I¨s¯|©|×/AÑ/AÀ#Ó/FÀqÑ/IˆKÜ& {·L±LÓAˆCØ#Ÿy™y×6Ñ6°sÈÐ6ÐK×KˆJÞØÜ1°%ÓDˆFØŸ<™<×+Ñ+×;Ñ;¸FÓC×CˆFÜØ—‘Ø—‘Ø!Ø+à$*×$7Ñ$7Ø$*×$7Ñ$7Ø"(×"3Ñ"3Ü"% j£/ñ	ó÷ ð ð ×&×&¨f×.A×.AØØ#)×#6Ñ#6ˆD�Ñ Ø*0×*:Ñ*:ˆDÐ&Ñ'Ø+1×+<Ñ+<ˆDÐ'Ñ(Ü,IØ×#Ñ# V×%5Ñ%5ó-ˆDÐ(Ñ)ð +ò3 Lñ Dñøô* ó 	Ü�N‰NØ(ØŸ™Ü˜#“hð ñ ô
 Ø—‘Ø—‘Ø(Ø7¸°uÐ=ó	÷ ñ ô ûð	üsŒ   ‚G+„A#E> Á'E7Á(E> Á3G+Á43E> Â'E:Â(AE> Ã>E<Ã?&E> Ä%G+Ä&AE> Å6G+Å7E> Å:E> Å<E> Å>
G(ÆAG#ÇGÇG#ÇG+Ç#G(Ç(G+c                ó6   • UR                  S5      =(       d    S$ ©Nr;   r�   rä   rá   s     rM   r´   ÚOrchestrator._after_analyzeþ  ó   € Ø�y‰y˜Ó'×1¨6Ð1rL   c              ƒ  óT  #   • [         R                  " US   5      n[        U R                  U5      I S h  v•N n[	        UR
                  =(       d    0 5      nUR                  S5      =(       d    SnUR                  S5      =(       d    [        U5      nU R                  R                  UR                  U5      I S h  v•N   [        R                  Ul        [        U R                  USSU 3SU0S9I S h  v•N   U R                  R                  5       I S h  v•N   U$  Nê Nc N, N7f)Nr5   rÂ   ÚUNKNOWNr2  zduplicate.review_postedzPosted possible duplicate of r$  )rÌ   rÍ   rT   rR   rÐ   r‰   rP   r%   r   r&  r6   r   rÏ   rÎ   rZ   rÒ   )rŽ   rÎ   r5   rS   rÞ   rÝ   r_   s          rM   r¤   Ú(Orchestrator._duplicate_review_gate_node  sø   é € Ü—’˜5 ™?Ó+ˆÜ˜TŸ\™\¨6Ó2×2ˆÜ�C—M‘M×' RÓ(ˆØ—8‘8˜NÓ+×8¨yˆØ�x‰xÐ/Ó0×[Ô4QÐRZÓ4[ˆØ�i‰i×#Ñ# C§L¡L°$Ó7×7Ð7Ü!×2Ñ2ˆŒ	ÜØ�L‰LØØ%Ø+¨H¨:Ð6Ø# XÐ.ñ
÷ 	
ð 	
ð �l‰l× Ñ Ó"×"Ð"Øˆñ 3ñ 	8ñ	
ñ 	#ùsF   ‚3D(µD ¶BD(Â>D"Â?8D(Ã7D$Ã8!D(ÄD&ÄD(Ä"D(Ä$D(Ä&D(c              ƒ  óð  #   • [         R                  " US   5      n[        U R                  U5      I S h  v•N nUR                  =(       d    0 R                  S5      =(       d    SnU R                  R                  UR                  U5      I S h  v•N   [        R                  Ul        [        U R                  USS5      I S h  v•N   U R                  R                  5       I S h  v•N   U$  N¸ N_ N, N7f)Nr5   rê   zAgent Nova needs clarification.zclarification.postedz&Posted clarification questions to Jira)rÌ   rÍ   rT   rR   r‰   rP   r   r&  r6   r   ÚNEEDS_CLARIFICATIONrÎ   rZ   rÒ   )rŽ   rÎ   r5   rS   r_   s        rM   r£   Ú%Orchestrator._clarification_gate_node  sÆ   é € Ü—’˜5 ™?Ó+ˆÜ˜TŸ\™\¨6Ó2×2ˆØ—‘×# ×(Ñ(Ð)=Ó>×cÐBcˆØ�i‰i×#Ñ# C§L¡L°$Ó7×7Ð7Ü!×5Ñ5ˆŒ	ÜØ�L‰LØØ"Ø4ó	
÷ 	
ð 	
ð �l‰l× Ñ Ó"×"Ð"Øˆñ 3á7ñ	
ñ 	#ùsF   ‚3C6µC.¶AC6ÂC0Â4C6ÃC2Ã!C6Ã'C4Ã(C6Ã0C6Ã2C6Ã4C6c           
   ƒ  ó  #   • [         R                  " US   5      n[        U R                  U5      I S h  v•N n[        R
                  Ul        [        U R                  USS5      I S h  v•N    UR                  =(       d    0 R                  S5      nU(       d  [        S5      eU R                  R                  US5      n[        R                  " U5      nU R                  R                  U5      I S h  v•N nU R                  R!                  USU5      n[#        UR                  =(       d    0 5      n	X‰S'   UR%                  5       U	S'   X“l        [        U R                  USS	UR&                  [)        UR*                  5      UR,                  S
.5      I S h  v•N   UR*                  (       d.  SUS'   SUS'   U R                  R/                  5       I S h  v•N   U$ SUS'   U R                  R/                  5       I S h  v•N   U$  GNÒ GN  GN Nu N: N! [0         a_  n
[2        R5                  S[7        U5      S9  [7        U
5      US'   SUS'   U R                  R/                  5       I S h  v•N    Us S n
A
$ S n
A
ff = f7f)Nr5   zarchitect.startzSolution Architect designingrç   z0requirements.json missing before architect stageúdesign.jsonÚdesign_review_bodyzarchitect.completez*Technical design and metadata plan written)Úout_of_allowlistÚ
plan_itemsré   uR   Design metadata plan empty after allowlist enforcement â€” human takeover requiredr:   r�   r;   r—   Úarchitect_failedrì   )rÌ   rÍ   rT   rR   r   ÚARCHITECTINGrÎ   rZ   r‰   rP   rQ   Ú	read_jsonr   Úmodel_validater�   Údesignrñ   rÐ   Údesign_review_comment_bodyrG  r  Úmetadata_planré   rÒ   rõ   rö   r÷   r4   )rŽ   rÎ   r5   rS   Úreq_pathÚrawÚrequirementsrM  rw   rÞ   rü   s              rM   r¦   ÚOrchestrator._architect_node"  s)  é € Ü—’˜5 ™?Ó+ˆÜ˜TŸ\™\¨6Ó2×2ˆÜ!×.Ñ.ˆŒ	Ü�T—\‘\ 6Ð+<Ð>\Ó]×]Ð]ð&	ØŸ™×+¨×0Ñ0Ð1DÓEˆHÞÜ Ð!SÓTÐTØ—.‘.×*Ñ*¨6Ð3FÓGˆCÜ/×>Ò>¸sÓCˆLØŸ>™>×0Ñ0°Ó>×>ˆFØ—>‘>×,Ñ,¨V°]ÀFÓKˆDÜ˜Ÿ™×+¨Ó,ˆDØ"&�ÑØ)/×)JÑ)JÓ)LˆDÐ%Ñ&Ø ŒMÜØ—‘ØØ$Ø<à(.×(?Ñ(?Ü"% f×&:Ñ&:Ó";Ø"(×"3Ñ"3ñó
÷ 
ð 
ð ×'×'àhð �g‘ð (.��mÑ$Ø—l‘l×(Ñ(Ó*×*Ð*Ø�Ø#7ˆE�-Ñ Ø—,‘,×$Ñ$Ó&×&Ð&ØˆLòG 3â]ò ?ñ
ñ  +ñ 'øäó 	Ü×ÑÐ/¼¸F»ÐÑDÜ  ›XˆE�'‰NØ#)ˆE�-Ñ Ø—,‘,×$Ñ$Ó&×&Ñ&Ø�Lûð	üs´   ‚3JµH¶4JÁ*H
Á+JÁ0BH Ã6HÃ7B#H ÆHÆ<H ÇHÇH ÇJÇ"H È HÈH ÈJÈ
JÈH ÈH ÈH ÈH È
I?È AI:É-I0É.I:É4I?É5JÉ:I?É?Jc                ó6   • UR                  S5      =(       d    S$ r;  rä   rá   s     rM   rµ   ÚOrchestrator._after_architectO  r=  rL   c           
   ƒ  ó’  #   • [         R                  " US   5      n[        U R                  U5      I S h  v•N nUR                  =(       d    0 R                  S5      nU(       dj  U R                  R                  US5      n[        R                  " U5      nUR                  5       n[        UR                  =(       d    0 5      nXGS'   Xsl        [        UR                  =(       d    0 5      nU R                  X#R                  U5      I S h  v•N nU(       a  U SU 3nXsl        U R                  R                  UR                  U5      I S h  v•N   [        R                   Ul        [%        U R                  USSSUR                  S5      0S9I S h  v•N   U R                  R'                  5       I S h  v•N   U$  GN‡ N² Nr N/ N7f)	Nr5   rF  rE  z

zdesign_review.postedzPosted design for human reviewÚconfluence_urlr$  )rÌ   rÍ   rT   rR   r‰   rP   rK  r   rL  rN  rÐ   Ú_publish_design_confluence_docr6   r   r&  r   rÔ   rÎ   rZ   rÒ   )	rŽ   rÎ   r5   rS   r_   rQ  rM  rÞ   Úconfluence_notes	            rM   r§   Ú%Orchestrator._design_review_gate_nodeR  sx  é € Ü—’˜5 ™?Ó+ˆÜ˜TŸ\™\¨6Ó2×2ˆØ—‘×# ×(Ñ(Ð)=Ó>ˆÞØ—.‘.×*Ñ*¨6°=ÓAˆCÜ#×2Ò2°3Ó7ˆFØ×4Ñ4Ó6ˆDÜ˜Ÿ™×+¨Ó,ˆDØ)-Ð%Ñ&Ø ŒMä�C—M‘M×' RÓ(ˆØ $× CÑ CÀFÏLÉLÐZ^Ó _×_ˆÞØ%Ð& d¨4¨&Ð1ˆDØŒà�i‰i×#Ñ# C§L¡L°$Ó7×7Ð7Ü!×/Ñ/ˆŒ	ÜØ�L‰LØØ"Ø,Ø% t§x¡xÐ0@Ó'AÐBñ
÷ 	
ð 	
ð �l‰l× Ñ Ó"×"Ð"Øˆò5 3ñ `ñ
 	8ñ	
ñ 	#ùsZ   ‚3GµF<¶CGÄF?ÄAGÅGÅAGÆGÆ!GÆ5GÆ6GÆ?GÇGÇGÇGc           
   ƒ  ó‚  #   • U R                   R                  nU(       d"  [        U R                  USS5      I Sh  v•N    g U R                  R                  US5      nU R                  R                  US5      n[        R                  " U5      n[        R                  " U5      n[        X(R                  5      n	[        Xx5      n
U R                  R                  XIU
5      I Sh  v•N nUR                  US'   UR                  US'   [        U R                  US	S
UR                  UR                  US.S9I Sh  v•N   SUR                   3$  GN Nk N! [          a\  n["        R%                  SU['        U5      ['        U5      S9  [        U R                  USSU 35      I Sh  v•N    SU S3s SnA$ SnAff = f7f)zHCreate Confluence design doc; soft-fail so design review still proceeds.zconfluence.create_failedz$No Confluence write space configuredNz_## Confluence design doc
Not created (set CONFLUENCE_WRITE_SPACE_KEY or CONFLUENCE_SPACE_KEYS).rç   rE  rW  Úconfluence_page_idzconfluence.createdzCreated Confluence design doc)r  Úpage_idÚ	space_keyr$  z## Confluence design doc
Úconfluence_create_failed)r6   r5   r:   z(Failed to create Confluence design doc: z&## Confluence design doc
Not created (z).)rŠ   Úconfluence_write_spacerZ   rR   r‰   rK  r   rL  r   r   r  r   r‹   Úcreate_pager  r  rõ   rö   r  r4   )rŽ   r5   r6   rÞ   r^  Úreq_rawÚ
design_rawrR  rM  r  ÚstorageÚpagerü   s                rM   rX  Ú+Orchestrator._publish_design_confluence_docp  s³  é € ð —M‘M×8Ñ8ˆ	ÞÜØ—‘ØØ*Ø6ó	÷ ð ðYðð	EØ—n‘n×.Ñ.¨vÐ7JÓKˆGØŸ™×1Ñ1°&¸-ÓHˆJÜ/×>Ò>¸wÓGˆLÜ#×2Ò2°:Ó>ˆFÜ$ X¯~©~Ó>ˆEÜ-¨lÓCˆGØŸ™×4Ñ4°YÀwÓO×OˆDØ%)§X¡XˆDÐ!Ñ"Ø)-¯©ˆDÐ%Ñ&ÜØ—‘ØØ$Ø/Ø $§¡°T·W±WÈ9ÑUñ÷ ð ð 0°·±¨zÐ:Ð:ò7ñ" Pñøô ó 	EÜ�N‰NØ*Ø!Ü˜6“{Ü˜#“hð	 ñ ô Ø—‘ØØ*Ø:¸3¸%Ð@ó	÷ ñ ð =¸S¸EÀÐDÕDûð	Eüsr   ‚9F?»E¼F?ÁB#E Ã&EÃ'AE Ä;EÄ<E ÅF?ÅE ÅE Å
F<Å AF7Æ&F)Æ'
F7Æ1F<Æ2F?Æ7F<Æ<F?c              ƒ  ó´  #   • [         R                  " US   5      n[        U R                  U5      I S h  v•N n[	        UR
                  =(       d    0 5      nSUS'   SUS'   XCl        [        R                  Ul        S Ul	        SUS'   SUS'   [        U R                  USS	5      I S h  v•N   U R                  R                  5       I S h  v•N   U$  Nœ N* N
7f)
Nr5   TÚdesign_approvedr   rA   FrB   zdesign.approvedz.Human approved design; starting implementation)rÌ   rÍ   rT   rR   rÐ   r‰   r   rÕ   rÎ   r:   rZ   rÒ   )rŽ   rÎ   r5   rS   rÞ   s        rM   r¨   Ú!Orchestrator._design_approve_node¤  sÍ   é € Ü—’˜5 ™?Ó+ˆÜ˜TŸ\™\¨6Ó2×2ˆÜ�C—M‘M×' RÓ(ˆØ"&ˆÐÑØ ˆˆ^ÑØŒÜ!×.Ñ.ˆŒ	ØˆŒ	Ø !ˆˆnÑØ!ˆˆjÑÜØ�L‰LØØØ<ó	
÷ 	
ð 	
ð �l‰l× Ñ Ó"×"Ð"Øˆñ! 3ñ	
ñ 	#ùs4   ‚3CµC¶A3CÂ)CÂ*!CÃCÃCÃCÃCc           	   ƒ  ó&  #   • [         R                  " US   5      n[        U R                  U5      I Sh  v•N nUR                  =(       d    0 R                  S5      =(       d    Sn[        U5      n[        U5      n[        UR                  =(       d    0 5      nUR                  SS5        UR                  SS5        XWS'   XgS'   [        UR                  S	5      =(       d    S
5      S-   US	'   Xsl        SUl        U R                  R                  UR                  U5      I Sh  v•N   [        R                   Ul        [%        U R                  USSXWS	   S.S9I Sh  v•N   U R                  R'                  5       I Sh  v•N   U$  GNS Nd N- N7f)zCAfter design reject: ask for clarification and pause (do not fail).r5   NrË   rb   r<   rh  Údesign_reject_hintrê   Údesign_revisionr   rc   z#design.rejected_needs_clarificationz8Design rejected; asked for clarification before redesign)rn   rl  r$  )rÌ   rÍ   rT   rR   r‰   rP   rh   rp   rÐ   rÑ   r@   r:   r   r&  r6   r   rB  rÎ   rZ   rÒ   )rŽ   rÎ   r5   rS   Úreject_commentrn   r_   rÞ   s           rM   r©   Ú(Orchestrator._design_reject_clarify_node¸  sZ  é € ä—’˜5 ™?Ó+ˆÜ˜TŸ\™\¨6Ó2×2ˆØŸ-™-×-¨2×2Ñ2Ð3JÓK×QÈrˆÜ$ ^Ó4ˆÜ0°Ó6ˆä�C—M‘M×' RÓ(ˆØ�‰Ð" DÔ)Ø�‰Ð" DÔ)Ø%)Ð!Ñ"Ø%)Ð!Ñ"Ü"% d§h¡hÐ/@Ó&A×&FÀQÓ"GÈ!Ñ"KˆÐÑØŒØˆŒ	à�i‰i×#Ñ# C§L¡L°$Ó7×7Ð7Ü!×5Ñ5ˆŒ	ÜØ�L‰LØØ1ØFØ!Ð;LÑ6MÑNñ
÷ 	
ð 	
ð �l‰l× Ñ Ó"×"Ð"Øˆò1 3ñ 	8ñ	
ñ 	#ùsF   ‚3FµF¶C0FÄ&FÄ'8FÅFÅ !FÆFÆFÆFÆFÆFc              ƒ  óÂ  #   • [        UR                  =(       d    0 5      nUR                  S5      (       d  [        S5      eUR                  S5      (       d  [        S5      e[        R
                  " U R                  R                  US5      5      nS nUR                  S5      (       a0  [        R
                  " U R                  R                  US5      5      nXEU4$ 7f)Nrh  z.design_approved missing before implement stagerE  z*design.json missing before implement stagerç   )rÐ   r‰   rP   rQ   r   rL  rK  r   )rŽ   r5   rS   rÞ   rM  rR  s         rM   Ú_load_contextÚOrchestrator._load_contextÕ  sº   é € ô �C—M‘M×' RÓ(ˆØ�x‰xÐ)×*Ñ*ÜÐMÓNÐNØ�x‰x˜×&Ñ&ÜÐIÓJÐJÜ×.Ò.¨t¯~©~×/GÑ/GÈÐP]Ó/^Ó_ˆØ7;ˆØ�8‰8Ð'×(Ñ(Ü/×>Ò>Ø—‘×(Ñ(¨Ð1DÓEóˆLð  TÐ)Ð)ùs   ‚CCc           
   ƒ  óP  #   • [         R                  " US   5      n[        U R                  U5      I S h  v•N n[        R
                  Ul        [        UR                  S5      5      n[        U R                  USU(       a  SOS5      I S h  v•N    U R                  X#5      I S h  v•N u  pVn[        UR                  S5      =(       d    0 5      nU(       aZ  U R                  R                  US5      n	[        R                  " U	5      n
U R                   R#                  U
UUUUS9I S h  v•N u  p¸OGU R                   R%                  XVU5      I S h  v•N u  p¸U R                  R'                  US	U5      nXÇS	'   U R                  R)                  U5      S
-  nU R*                  R-                  UUR.                  S9I S h  v•N nU R                  R'                  USU5      nX÷S'   Xsl        [        U R                  USUR0                  UR2                  UR4                  UR6                  S.5      I S h  v•N   UR2                  (       d%  [9        SUR4                   SUR0                   35      eX�S'   SUS'   SUS'   U R                  R;                  5       I S h  v•N   U$  GNk GN GNÿ GN~ GNZ Nï N} N! [<         ad  n[>        RA                  S[C        U5      S9  [C        U5      US'   SUS'   SUS'   U R                  R;                  5       I S h  v•N    Us S nA$ S nAff = f7f)Nr5   rB   zimplement.startzApplying fixesz!Salesforce Developer implementingrD   úreview.json)r›   rM  rR  r5   rD   úimplementation.jsonú	force-app)Ú
source_dirr6   údeploy.jsonzdeploy.complete)ÚsuccessÚstatusÚ
check_onlyz#Salesforce deploy validate failed (z): r›   r;   FÚimplement_failedrì   r:   rš   r?   r�   )"rÌ   rÍ   rT   rR   r   rÕ   rÎ   r7   rP   rZ   rp  rÐ   r‰   rK  r   rL  r‚   Úapply_fixesrš   rñ   rò   r†   Údeploy_validater6   rW   rx  ry  rz  ÚRuntimeErrorrÒ   rõ   rö   r÷   r4   )rŽ   rÎ   r5   rS   rB   rM  rR  rÞ   rD   Ú
review_rawr›   Úimpl_artifactÚ	impl_pathrv  Údeploy_resultÚdeploy_pathrü   s                    rM   rª   ÚOrchestrator._implement_nodeå  sù  é € Ü—’˜5 ™?Ó+ˆÜ˜TŸ\™\¨6Ó2×2ˆÜ!×.Ñ.ˆŒ	Ü˜Ÿ	™	 *Ó-Ó.ˆÜØ�L‰LØØÞ (ÑÐ.Qó	
÷ 	
ð 	
ð8	Ø/3×/AÑ/AÀ&Ó/N×)NÑ&ˆF $Ü˜EŸI™I jÓ1×7°RÓ8ˆHæØ!Ÿ^™^×5Ñ5°f¸mÓL�
Ü'×6Ò6°zÓB�Ø04·±×0JÑ0JØ!Ø!Ø!-Ø!Ø%ð 1Kð 1÷ +Ñ'�˜xð 15·±×0HÑ0HØ¨&ó1÷ +Ñ'�ð !ŸN™N×5Ñ5°fÐ>SÐUbÓc�	Ø.7Ð*Ñ+àŸ™×/Ñ/°Ó7¸+ÑEˆJØ"&§-¡-×"?Ñ"?Ø%ØŸ™ð #@ð #÷ ˆMð Ÿ.™.×3Ñ3°F¸MÈ=ÓYˆKØ"-�ÑØ ŒMÜØ—‘ØØ!Ø×%Ñ%à,×4Ñ4Ø+×2Ñ2Ø"/×":Ñ":ñó
÷ 
ð 
ð !×(×(Ü"Ø9¸-×:NÑ:NÐ9OÈsÐS`×ShÑShÐRiÐjóð ð !)�*ÑØ#+ˆE�-Ñ Ø %ˆE�*ÑØ—,‘,×$Ñ$Ó&×&Ð&ØˆLòu 3ò	
ò *Oò+ò+ññ
ñ& 'øäó 	Ü×ÑÐ/¼¸F»ÐÑDÜ  ›XˆE�'‰NØ%0ˆE�/Ñ"Ø#)ˆE�-Ñ Ø—,‘,×$Ñ$Ó&×&Ñ&Ø�Lûð	üsÏ   ‚3L&µJ ¶AL&ÂJ#ÂL&ÂJ5 Â'J&Â(BJ5 Ä+J)Ä,&J5 ÅJ,ÅA,J5 Æ?J/Ç A3J5 È3J1È4A%J5 ÊJ3ÊJ5 ÊL&Ê#L&Ê&J5 Ê)J5 Ê,J5 Ê/J5 Ê1J5 Ê3J5 Ê5
L#Ê?ALÌLÌLÌL#ÌL&ÌL#Ì#L&c                ó0   • UR                  S5      S:X  a  gg)Nr;   r�   r›   rä   rá   s     rM   r¶   ÚOrchestrator._after_implement*  s   € Ø�9‰9�]Ó# vÓ-ØØrL   c              ƒ  óÐ  #   • [         R                  " US   5      n[        U R                  U5      I S h  v•N n[        R
                  Ul        [        UR                  =(       d    0 5      n[        UR                  S5      =(       d    UR                  S5      =(       d    S5      n[        U R                  USSU 35      I S h  v•N    U R                  X#5      I S h  v•N u  pgnUc  [        S5      eU R                  R                  US5      n	[        R                   " U	5      n
[        UR                  S5      =(       d    0 5      nU R                  R#                  U5      S	-  nU R$                  R'                  US
9I S h  v•N nU R                  R)                  USU5      nXäS'   U R*                  R-                  UUU
UUUUS9I S h  v•N n[/        U R                  R#                  U5      S-  5      US'   US-  nXTS'   XSl        XCl        [        U R                  USUR2                  UR4                  U[7        UR8                  5      S.5      I S h  v•N   U R:                  R<                  nUR4                  (       a  SUS'   XQS'   X±S'   O©UR?                  5       (       ah  UU:  ab  SUS'   SUS'   XQS'   X±S'   U R@                  RC                  URD                  SU SU S[7        URG                  5       5       S35      I S h  v•N   O,UU:¼  a
  SU S3US'   OSUR2                   3US'   SUS'   S US'   U R                  RI                  5       I S h  v•N   U$  GN* GNœ GN… GNã GNž GN Ng N! [J         ad  n[L        RO                  S![/        U5      S"9  [/        U5      US'   SUS'   S US'   U R                  RI                  5       I S h  v•N    Us S nA$ S nAff = f7f)#Nr5   rA   r   zreview.startzCode review cycle z-requirements.json missing before review stagert  rD   ru  )rv  zpmd.json)rR  rM  ÚimplementationrD   r‡   Úcycler5   rs  rc   zreview.complete)Úpassedr‰  Úfindingsr„   r;   rš   TrB   z0## Agent Nova code review
Status: failed (cycle Ú/z)
Action: applying fixes for z blocking finding(s).zCode review failed after u%    cycles â€” human escalation requiredr:   z.Code review failed with non-fixable findings: r›   r?   r�   Úreview_failedrì   )(rÌ   rÍ   rT   rR   r   rÖ   rÎ   rÐ   r‰   r@   rP   rZ   rp  rQ   rK  r   rL  rò   r‡   r“   rñ   rƒ   r›   r4   Úretry_countr  rŠ  r  r‹  rŠ   Úmax_review_cyclesÚhas_fixable_blockingr   r&  r6   Úblocking_findingsrÒ   rõ   rö   r÷   )rŽ   rÎ   r5   rS   rÞ   r‰  rM  rR  Ú_Úimpl_rawrˆ  rD   rv  Ústatic_resultÚpmd_pathr›   Ú
max_cyclesrü   s                     rM   r«   ÚOrchestrator._review_node/  sÀ  é € Ü—’˜5 ™?Ó+ˆÜ˜TŸ\™\¨6Ó2×2ˆÜ!×+Ñ+ˆŒ	Ü�C—M‘M×' RÓ(ˆÜ�D—H‘H˜^Ó,×N°·	±	¸.Ó0I×NÈQÓOˆÜ�T—\‘\ 6¨>Ð=OÐPUÈwÐ;WÓX×XÐXðL	Ø,0×,>Ñ,>¸vÓ,K×&KÑ#ˆF !ØÑ#Ü Ð!PÓQÐQà—~‘~×/Ñ/°Ð8MÓNˆHÜ3×BÒBÀ8ÓLˆNÜ˜EŸI™I jÓ1×7°RÓ8ˆHàŸ™×/Ñ/°Ó7¸+ÑEˆJØ"&×"6Ñ"6×">Ñ">È*Ð">Ð"U×UˆMØ—~‘~×0Ñ0°¸À]ÓSˆHØ'�ÑàŸ=™=×/Ñ/Ø)ØØ-Ø!Ø -ØØð 0ð ÷ ˆFô #& d§n¡n×&<Ñ&<¸VÓ&DÀ}Ñ&TÓ"UˆD�ÑØ�Q‰JˆEØ#(�Ñ Ø#ŒOØ ŒMäØ—‘ØØ!Ø—‘Ø!Ÿ=™=°5ÄcÈ&Ï/É/ÓFZÑ[ó÷ ð ð Ÿ™×8Ñ8ˆJØ�}�}Ø'+��mÑ$Ø(-�nÑ%Ø$,�jÒ!Ø×,Ñ,×.Ñ.°5¸:Ó3EØ'2��mÑ$Ø$(��jÑ!Ø(-�nÑ%Ø$,�jÑ!Ø—i‘i×+Ñ+Ø—L‘Lð1Ø16°°q¸¸ð E6Ü69¸&×:RÑ:RÓ:TÓ6UÐ5Vð W/ð/ó÷ ñ ð ˜JÓ&à3°J°<Ð?dÐeð ˜'’Nð
 IÈÏÉÐHXÐYð ˜'‘Nð *2��oÑ&Ø'-��mÑ$à—,‘,×$Ñ$Ó&×&Ð&ØˆLòU 3ò 	Yâ&Kò Vòòñ$ñ* 'øäó 	Ü×Ñ˜_´S¸³[ÐÑAÜ  ›XˆE�'‰NØ%-ˆE�/Ñ"Ø#)ˆE�-Ñ Ø—,‘,×$Ñ$Ó&×&Ñ&Ø�Lûð	üsÐ   ‚3O&µM¶BO&ÃM"ÃO&ÃM5 Ã M%Ã!B$M5 ÆM(ÆAM5 ÇM+ÇB
M5 ÉM.ÉB0M5 Ì	M1Ì
AM5 ÍM3ÍM5 ÍO&Í"O&Í%M5 Í(M5 Í+M5 Í.M5 Í1M5 Í3M5 Í5
O#Í?AOÏOÏOÏO#ÏO&ÏO#Ï#O&c                óT   • UR                  S5      =(       d    SnUS:X  a  gUS:X  a  gg)Nr;   r�   rš   r„   rä   )rŽ   rÎ   Úactions      rM   r·   ÚOrchestrator._after_review„  s-   € Ø—‘˜=Ó)×3¨VˆØ�[Ó ØØ�T‹>ØØrL   c           
   ƒ  ó8  #   • [         R                  " US   5      n[        U R                  U5      I S h  v•N n[        R
                  Ul        [        U R                  USS5      I S h  v•N    U R                  X#5      I S h  v•N u  pEnUc  [        S5      e[        UR                  S5      =(       d    0 5      nU R                  R                  U5      S-  n[        U5      n	U R                  R!                  UUR"                  U	=(       d    S S9I S h  v•N n
U R$                  R'                  UUUU
US9I S h  v•N n[)        U R                  R                  U5      S	-  5      US	'   Xcl        [        U R                  US
UR*                  UR,                  [/        UR0                  5      S.5      I S h  v•N   UR,                  (       a
  SUS'   XqS'   OSUR*                   3US'   SUS'   SUS'   U R                  R3                  5       I S h  v•N   U$  GNâ GN° GN™ GN	 Næ Nm N! [4         ad  n[6        R9                  S[)        U5      S9  [)        U5      US'   SUS'   SUS'   U R                  R3                  5       I S h  v•N    Us S nA$ S nAff = f7f)Nr5   zqa.startzQA Engineer validatingz)requirements.json missing before QA stagerD   ru  )rv  r6   Úclass_names)rR  rM  rD   Úapex_resultr5   zqa-report.jsonzqa.complete)rŠ  Ú	scenariosrœ   r;   zQA failed: r:   r„   r?   r�   Ú	qa_failedrì   )rÌ   rÍ   rT   rR   r   r×   rÎ   rZ   rp  rQ   rÐ   rP   r‰   rò   ry   rˆ   Ú	run_testsr6   r„   Úrun_qar4   r  rŠ  r  Útest_matrixrÒ   rõ   rö   r÷   )rŽ   rÎ   r5   rS   rM  rR  rÞ   rD   rv  rœ  r�  Ú	qa_reportrü   s                rM   r¬   ÚOrchestrator._qa_nodeŒ  sk  é € Ü—’˜5 ™?Ó+ˆÜ˜TŸ\™\¨6Ó2×2ˆÜ!×)Ñ)ˆŒ	Ü�T—\‘\ 6¨:Ð7OÓP×PÐPð0	Ø/3×/AÑ/AÀ&Ó/N×)NÑ&ˆF $ØÑ#Ü Ð!LÓMÐMä˜EŸI™I jÓ1×7°RÓ8ˆHØŸ™×/Ñ/°Ó7¸+ÑEˆJÜ+¨HÓ5ˆKØ $× 0Ñ 0× :Ñ :Ø%ØŸ™Ø'×/¨4ð !;ð !÷ ˆKð #Ÿg™gŸn™nØ)ØØ!Ø'Øð -ð ÷ ˆIô &)¨¯©×)?Ñ)?ÀÓ)GÐJZÑ)ZÓ%[ˆDÐ!Ñ"Ø ŒMäØ—‘ØØØ×!Ñ!Ø$×+Ñ+¼#¸i×>SÑ>SÓ:TÑUó÷ ð ð ××Ø'2��mÑ$Ø$,�jÒ!à#.¨y×/@Ñ/@Ð.AÐ!B��g‘Ø)-��oÑ&Ø'-��mÑ$à—,‘,×$Ñ$Ó&×&Ð&ØˆLòY 3âPâ)Nòñññ  'øäó 	Ü×Ñ˜[´°V³ÐÑ=Ü  ›XˆE�'‰NØ%)ˆE�/Ñ"Ø#)ˆE�-Ñ Ø—,‘,×$Ñ$Ó&×&Ñ&Ø�Lûð	üs»   ‚3JµH¶4JÁ*HÁ+JÁ0H) ÂHÂBH) ÄH Ä$H) Ä<H#Ä=A:H) Æ7H%Æ8AH) ÈH'ÈH) ÈJÈJÈH) È H) È#H) È%H) È'H) È)
JÈ3AJÊJÊJÊJÊJÊJÊJc                ó0   • UR                  S5      S:X  a  gg)Nr;   rœ   r�   rä   rá   s     rM   r¸   ÚOrchestrator._after_qaÃ  s   € Ø�9‰9�]Ó# {Ó2ØØrL   c              ƒ  óø  #   • [         R                  " US   5      n[        U R                  U5      I S h  v•N n[	        U R                  USS5      I S h  v•N    U R
                  R                  US5      n[        R                  " U5      n[        UR                  S5      =(       d    0 5      nUR                  5        VVs0 sH%  u  pxUR                  S5      (       d  US:X  d  M#  Xx_M'     n	nnSUR                  R                  5        3n
U R                  R!                  UR                  U
UR"                  U	S	9I S h  v•N nUR$                  Ul        UR&                  Ul        S Ul        [*        R,                  Ul        U R
                  R                  US
5      nUR                  SS5      n[	        U R                  USSUR$                  UR&                  [1        UR2                  5      US.5      I S h  v•N   U R4                  R7                  UR                  SUR&                   SUR$                   SU S35      I S h  v•N   SUS'   U R                  R9                  5       I S h  v•N   U$  GN? GN"s  snnf  GN? Nˆ N> N! [:         ad  n[<        R?                  S[A        U5      S9  [A        U5      US'   SUS'   SUS'   U R                  R9                  5       I S h  v•N    Us S nA$ S nAff = f7f)Nr5   zcreate_pr.startzCreating draft PRrt  rD   z
force-app/zsfdx-project.jsonzagent-nova/)r6   Úbranch_nameÚcommit_messageÚfilesrw  ry  Úunknownzimplement.completezDraft PR created)r¨  Úpr_urlrª  Údeploy_statusz### Agent Nova draft PR created
PR: z	
Branch: z
Deploy validate: z
Code review: passed
QA: passedrŸ   r;   Úcreate_pr_failedrì   r:   rš   r?   r�   )!rÌ   rÍ   rT   rR   rZ   r‰   rK  r   rL  rÐ   rP   ÚitemsÚ
startswithr6   r  r…   Úcreate_draft_prr©  r¨  r¬  r:   r   rØ   rÎ   r  Úfiles_writtenr   r&  rÒ   rõ   rö   r÷   r4   )rŽ   rÎ   r5   rS   r“  r€  rD   rw   ÚcontentÚ	git_filesr¨  Ú
git_resultÚ
deploy_rawr­  rü   s                  rM   r­   ÚOrchestrator._create_pr_nodeÈ  sÅ  é € Ü—’˜5 ™?Ó+ˆÜ˜TŸ\™\¨6Ó2×2ˆÜ�T—\‘\ 6Ð+<Ð>QÓR×RÐRð9	Ø—~‘~×/Ñ/°Ð8MÓNˆHÜ2×AÒAÀ(ÓKˆMÜ˜EŸI™I jÓ1×7°RÓ8ˆHð &.§^¡^Ô%5ôá%5‘M�DØ—?‘? <×0Ñ0°DÐ<OÑ4Oó �’Ù%5ð ñ ð
 (¨¯©×(:Ñ(:Ó(<Ð'=Ð>ˆKØ#Ÿx™x×7Ñ7ØŸ™Ø'Ø,×;Ñ;Øð	  8ð  ÷ ˆJð )×4Ñ4ˆCŒOØ#×*Ñ*ˆCŒJØˆCŒIÜ%×0Ñ0ˆCŒIàŸ™×1Ñ1°&¸-ÓHˆJØ&ŸN™N¨8°YÓ?ˆMäØ—‘ØØ$Ø"à#-×#9Ñ#9Ø(×/Ñ/Ü  ×!<Ñ!<Ó=Ø%2ñ	ó÷ ð ð —)‘)×'Ñ'Ø—‘ðØ%×,Ñ,Ð-ð .Ø)×5Ñ5Ð6ð 7(Ø(5 ð 7!ð!ó
÷ 
ð 
ð $)ˆE�-Ñ Ø—,‘,×$Ñ$Ó&×&Ð&ØˆLòi 3ÚRùóòññ
ñ 'øäó 	Ü×ÑÐ/¼¸F»ÐÑDÜ  ›XˆE�'‰NØ%0ˆE�/Ñ"Ø#)ˆE�-Ñ Ø—,‘,×$Ñ$Ó&×&Ñ&Ø�Lûð	üs¼   ‚3K:µI4¶K:ÁI7ÁK:ÁA(J	 Ã!I:Ã(I:Ã.AJ	 ÅJ ÅB8J	 Ç:JÇ;AJ	 ÉJÉ&J	 É-JÉ.J	 É3K:É7K:É:J	 ÊJ	 ÊJ	 ÊJ	 Ê	
K7ÊAK2Ë%K(Ë&K2Ë,K7Ë-K:Ë2K7Ë7K:c                ó0   • UR                  S5      S:X  a  gg)Nr;   r�   rŸ   rä   rá   s     rM   r¹   ÚOrchestrator._after_create_pr  s   € Ø�9‰9�]Ó# vÓ-ØØrL   c              ƒ  ó†  #   • [         R                  " US   5      n[        U R                  U5      I S h  v•N n[        R
                  Ul        UR                  S5      =(       d    SUl        [        U R                  USUR                  5      I S h  v•N    UR                  S5      S:X  a  SnGOuUR                  S5      S	:X  a>  UR                  =(       d    0 R                  S
5      =(       d    SnU(       a  SU S3OSnGO"UR                  S5      S:X  aÃ  UR                  =(       d    0 R                  S5      =(       d    / n/ nU Hk  n[        U[        5      (       d  M  UR                  S5      (       d  M2  UR                  S5      (       a  SUS    3OSn	UR                  SUS    U	 35        Mm     U(       a  SR                  U5      S-   OSn
SU
 3nOJUR                  S5      S:X  a  SnO2UR                  S5      S:X  a  SnOUR                  S5      S:X  a  SnOSnU R                  R!                  UR"                  U SUR                   S35      I S h  v•N   U R                  R+                  5       I S h  v•N   U$  GNT GNù N.! [$         a!    [&        R)                  SUR"                  S 9   NVf = f N<7f)!Nr5   r:   zUnknown failurez
run.failedr<   rÊ   z## Agent Nova design rejected
r?   rÄ   rÂ   rb   z:## Agent Nova closed as duplicate
Original / main ticket: rk   z"## Agent Nova closed as duplicate
rÇ   r  r  r  u    â€” z- u8   ## Agent Nova closed â€” already documented/implemented
r›   z(## Agent Nova failed during code review
r„   z## Agent Nova failed during QA
rš   z+## Agent Nova failed during implementation
z%## Agent Nova failed during analysis
zError: z%
Next step: a human should take over.Úfailure_comment_failed)r6   )rÌ   rÍ   rT   rR   r   rÚ   rÎ   rP   r:   rZ   r‰   r%  rÐ   ru   rm   r   r&  r6   rõ   rö   r÷   rÒ   )rŽ   rÎ   r5   rS   ÚprefixrÝ   r'  Ú	ref_linesr!  ÚlinkÚ	ref_blocks              rM   r®   ÚOrchestrator._fail_node  st  é € Ü—’˜5 ™?Ó+ˆÜ˜TŸ\™\¨6Ó2×2ˆÜ!×(Ñ(ˆŒ	Ø—I‘I˜gÓ&×;Ð*;ˆŒ	Ü�T—\‘\ 6¨<¸¿¹ÓC×CÐCð$	NØ�y‰yÐ*Ó+¨xÓ7Ø:’Ø—‘˜?Ó+¨{Ó:ØŸM™M×/¨R×4Ñ4°^ÓD×JÈ�ö  ð/Ø/7¨j¸ñ<ð ?ò	 ð —‘˜?Ó+¨uÓ4ØŸ™×+¨×0Ñ0Ð1AÓB×HÀb�Ø�	Û�AÜ! !¤T×*Ó*¨q¯u©u°W¯~«~Ø56·U±U¸5·\±\  q¨¡x jÑ1Àr˜Ø!×(Ñ(¨2¨a°©j¨\¸$¸Ð)@ÖAñ ö >G˜TŸY™Y yÓ1°DÒ8ÈB�	àOØ �kð#ñ ð —‘˜?Ó+¨xÓ7ØD‘Ø—‘˜?Ó+¨tÓ3Ø;‘Ø—‘˜?Ó+¨{Ó:ØG‘àA�Ø—)‘)×'Ñ'Ø—‘Ø�(˜' #§)¡) Ð,RÐSó÷ ð ð �l‰l× Ñ Ó"×"Ð"ØˆòU 3ò 	Dñ@øô ó 	NÜ×ÑÐ5ÀÇÁÐÓMð	Núá"ùsr   ‚3KµJ	¶AKÂJÂKÂCJ Å%J Å=C#J É JÉ!J É%KÊJ?ÊKÊKÊJ Ê(J<Ê9KÊ;J<Ê<K)r€   rˆ   r�   r‰   r‹   r†   r‚   r…   r�   r   r„   rƒ   rR   rŠ   r‡   )NNNNNNNNNNNN)rR   r   r   zOptional[JiraClient]r€   zOptional[RequirementAnalyst]r�   zOptional[SolutionArchitect]r‚   zOptional[SalesforceDeveloper]rƒ   zOptional[CodeReviewer]r„   zOptional[QAEngineer]r…   zOptional[GitClient]r†   zOptional[SalesforceDeployer]r‡   zOptional[StaticAnalyzer]rˆ   zOptional[ApexTestRunner]r‰   zOptional[ArtifactStore]r‹   zOptional[ConfluencePublisher]ÚreturnÚNone)F)r5   ú	uuid.UUIDr8   r7   rÁ  r   )rÎ   r2   rÁ  r2   )rÎ   r2   rÁ  r4   )rS   r   rø   r)   rÞ   úDict[str, Any]rÁ  r9   )r5   rÃ  r6   r4   rÞ   rÄ  rÁ  r9   )r5   rÃ  rS   r   rÁ  zEtuple[DesignArtifact, Optional[RequirementsArtifact], Dict[str, Any]])"rF   rG   rH   rI   r�   rŒ   rS   r¡   r¯   r²   r¢   rð   r¥   rï   r´   r¤   r£   r¦   rµ   r§   rX  r¨   r©   rp  rª   r¶   r«   r·   r¬   r¸   r­   r¹   r®   rK   rE   rL   rM   r{   r{   ˆ   sâ  † ð &*Ø04Ø15Ø37Ø+/Ø#'Ø#'Ø15Ø48Ø04Ø-1Ø48ð)àð)ð #ð)ð .ð	)ð
 /ð)ð 1ð)ð )ð)ð !ð)ð !ð)ð /ð)ð 2ð)ð .ð)ð +ð)ð 2ð)ð 
õ)ò@JöX
4ôCôJô5ô3ðj-àð-ð ð-ð ð	-ð
 
ô-ô^ð80àð0ð ð0ð ð	0ð
 
ô0ôd2ôô$ô+ôZ2ôð<2Eàð2Eð ð2Eð ð	2Eð
 
ô2Eôhô(ð:*Øð*Ø&)ð*à	Nô*ô CôJô
Sôjô5ônô
=ô~÷
,rL   r{   c           
   ƒ  ó„  #   • U R                  [        [        5      R                  [        R                  U:H  [        R
                  R                  [        [        5      5      5      R                  [        R                  R                  5       5      R                  S5      5      I S h  v•N nUR                  5       $  N7f)Nrc   )Úexecuter   r   Úwherer6   rÎ   Úin_Úlistr   Úorder_byÚ
created_atÚdescr  Úscalar_one_or_none)rR   r6   r   s      rM   Úfind_active_runrÎ  ;  s|   é € Ø—?‘?ÜŒs‹ß	‰Œs�|‰|˜xÑ'¬¯©¯©´t¼MÓ7JÓ)KÓ	Lß	‰”#—.‘.×%Ñ%Ó'Ó	(ß	‰ˆq‹ó	÷ €Fð ×$Ñ$Ó&Ð&ñùs   ‚B'C Â)B>Â*C c              ƒ  ó°  #   • [        U[        R                  U0 S9nU R                  U5        U R	                  5       I S h  v•N   [        5       n[        UR                  UR                  5      5      Ul	        [        XR                  SSU 35      I S h  v•N   U R                  5       I S h  v•N   U R                  U5      I S h  v•N   U$  NŒ N9 N# N7f)N)r6   rÎ   Úidempotency_keyr‰   zrun.createdzRun created for )r   r   ÚRECEIVEDrY   rÒ   r   r4   rò   r  ró   rZ   r¾   Úrefresh)rR   r6   rÐ  rS   Ústores        rM   Ú
create_runrÔ  E  s·   é € ô
 ØÜ×$Ñ$Ø'Øñ	€Cð ‡K�K�ÔØ
�-‰-‹/×ÐÜ‹O€EÜ˜5Ÿ=™=¨¯©Ó0Ó1€CÔÜ
�Ÿ&™& -Ð3CÀHÀ:Ð1NÓ
O×OÐOØ
�.‰.Ó
×ÐØ
�/‰/˜#Ó
×ÐØ€Jñ ñ PÙÙùsH   ‚?CÁCÁACÂCÂCÂ.CÂ/CÃCÃCÃCÃCÃC)rR   r   r5   rÃ  rÁ  r   r~   )rR   r   r5   rÃ  rV   r4   rW   r4   rX   zOptional[Dict[str, Any]]rÁ  rÂ  )r_   r9   rÁ  r7   )r_   r9   rÁ  r4   )rn   r4   rÁ  r4   )rD   rC   rÁ  z	list[str])rR   r   r6   r4   rÁ  zOptional[Run])rR   r   r6   r4   rÐ  r9   rÁ  r   )[Ú__doc__Ú
__future__r   ÚrerÌ   Úpathlibr   Útypingr   r   r   r   Ú	structlogÚlanggraph.graphr	   r
   Ú
sqlalchemyr   Úsqlalchemy.ext.asyncior   Úpackages.agents.code_reviewerr   Úpackages.agents.qa_engineerr   Ú#packages.agents.requirement_analystr   Ú$packages.agents.salesforce_developerr   Ú"packages.agents.solution_architectr   Úpackages.artifacts.designr   Ú!packages.artifacts.implementationr   Úpackages.artifacts.requirementsr   Úpackages.artifacts.reviewr   Úpackages.configr   Úpackages.db.artifactsr   Úpackages.db.modelsr   r   r   r   Ú packages.integrations.confluencer   r   r   r   Ú$packages.integrations.doc_validationr    r!   r"   Ú packages.integrations.duplicatesr#   r$   r%   Úpackages.integrations.gitr&   r'   Úpackages.integrations.jirar(   r)   r*   Ú packages.integrations.salesforcer+   r,   r-   r.   Ú%packages.integrations.static_analysisr/   r0   Ú
get_loggerrF   rö   rº   Ú
IGNORECASEr]   r2   rT   rZ   r`   rh   rp   ry   r{   rÎ  rÔ  rE   rL   rM   Ú<module>ró     sN  ðÙ aå "ã 	Û Ý ß 1Ó 1ã ß +Ý Ý /å 6Ý 2Ý BÝ DÝ @Ý 4Ý DÝ @Ý 4Ý (Ý /ß LÓ L÷ó ÷ñ ÷
ñ ÷
 @ß MÑ Mß ~Ó ~ß Uà	×	Ò	˜hÓ	'€à�ZŠZÐ/°·±Ó?€
ô˜	¨ò ôð )-ðØðàðð ðð ð	ð
 &ðð 
õô"0ôôô(÷pñ pôf'ð &*ðØðàðð #ðð 	ö	rL   