ó
    }«j÷&  ã                  óz  • S r SSKJr  SSKrSSKJr  SSKJrJrJ	r	  SSK
r
SSKJrJr  SSKJr  \ " S S	5      5       r " S
 S\	5      r " S S\	5      r " S S5      r " S S5      r " S S5      r " S S5      rS"S#S jjrS"S$S jjr\" 1 Sk5      rSS.S%S jjrS&S jrSS.       S'S jjrS(S  jrS)S! jrg)*zBConfluence + repository retrieval for Requirement Analyst context.é    )ÚannotationsN)Ú	dataclass)ÚListÚOptionalÚProtocol)ÚSettingsÚget_settings)Úsanitize_textc                  óB   • \ rS rSr% S\S'   S\S'   S\S'   SrS\S'   S	rg)
ÚKnowledgeHité   ÚstrÚsourceÚtitleÚsnippetNúOptional[str]Úurl© )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__annotations__r   Ú__static_attributes__r   ó    Ú5/var/www/html/gaurav/packages/knowledge/retrievers.pyr   r      s   ‡ àƒKØƒJØƒLØ€CˆÖr   r   c                  ó"   • \ rS rSrSSS jjrSrg)ÚConfluenceRetrieveré   c              ƒ  ó   #   • g 7f©Nr   ©ÚselfÚqueryÚlimits      r   ÚsearchÚConfluenceRetriever.search   ó   é € Ècùó   ‚r   N©é   ©r$   r   r%   ÚintÚreturnúList[KnowledgeHit]©r   r   r   r   r&   r   r   r   r   r   r      ó   † ßQÑQr   r   c                  ó"   • \ rS rSrSSS jjrSrg)ÚRepoRetrieveré   c              ƒ  ó   #   • g 7fr!   r   r"   s      r   r&   ÚRepoRetriever.search   r(   r)   r   Nr*   r,   r0   r   r   r   r3   r3      r1   r   r3   c                  ó6   • \ rS rSrSS jrSS jrS	S
S jjrSrg)ÚMockConfluenceRetrieveré   c                ó>   • [        SSSSS9[        SSSSS9/U l        g )	NÚ
confluencezSalesforce Naming ConventionszXCustom fields use PascalCase with __c suffix. Apex classes use Service/Handler suffixes.z5https://example.atlassian.net/wiki/spaces/ENG/pages/1©r   r   r   r   zArchitecture StandardszUPrefer record-triggered Flows for simple automation; use Apex for complex bulk logic.z6https://example.atlassian.net/wiki/spaces/ARCH/pages/2)r   Úpages©r#   s    r   Ú__init__Ú MockConfluenceRetriever.__init__    s5   € äØ#Ø5ØrØKñ	ô Ø#Ø.ØoØLñ	ð
ˆ�
r   c                ó<   • U R                   R                  SU5        g )Nr   )r=   Úinsert)r#   Úhits     r   ÚseedÚMockConfluenceRetriever.seed0   s   € Ø�
‰
×Ñ˜!˜SÕ!r   c           
   ƒ  ó°  ^#   • UR                  5       nU R                   V^s/ sH2  m[        U4S jUR                  5       S S  5       5      (       d  M0  TPM4     nnU(       d  [	        U R                  S U 5      nUS U  Vs/ sH@  n[        UR                  UR                  [        UR                  5      UR                  S9PMB     sn$ s  snf s  snf 7f)Nc              3  ó¢   >#   • U HE  oTR                   R                  5       ;   =(       d    UTR                  R                  5       ;   v •  MG     g 7fr!   ©r   Úlowerr   )Ú.0ÚtÚps     €r   Ú	<genexpr>Ú1MockConfluenceRetriever.search.<locals>.<genexpr>5   ó9   øé € Ð,sÑerÐ`a°!·'±'·-±-³/Ñ-A×-[ÀQÈ!Ï)É)Ï/É/ÓJ[ÑE[Ô-[Òerùó   ƒAAr+   r<   )rI   r=   ÚanyÚsplitÚlistr   r   r   r
   r   r   )r#   r$   r%   ÚqrL   ÚhitsÚhs       `  r   r&   ÚMockConfluenceRetriever.search3   s¾   øé € Ø�K‰K‹MˆØŸ:š:Ôt™:�a¬Ô,sÐef×elÑelÓenÐoqÐpqÑerÓ,s×)s—™:ˆÐtÞÜ˜Ÿ
™
 6 EÐ*Ó+ˆDð ˜&˜5‘\ó
ñ "�ô Ø—x‘xØ—g‘gÜ% a§i¡iÓ0Ø—E‘Eô	ñ "ñ
ð 	
ùò uùò
ùs#   ƒ C£.CÁCÁ(CÂACÃ	C)r=   N©r.   ÚNone)rC   r   r.   rY   r*   r,   )r   r   r   r   r?   rD   r&   r   r   r   r   r8   r8      s   † ô
ô "÷
ñ 
r   r8   c                  óL   • \ rS rSrSr  S     S	S jjrS
SS jjrSS jrSrg)ÚHttpConfluenceRetrieveréC   z=Live Confluence search using Confluence Cloud content search.Nc                ó  • U=(       d
    [        5       U l        X l        U R                  R                  =(       d    U R                  R                  U R                  R
                  =(       d    U R                  R                  4U l        g r!   )r	   ÚsettingsÚ	transportÚconfluence_emailÚ
jira_emailÚconfluence_api_tokenÚjira_api_tokenÚ_auth)r#   r^   r_   s      r   r?   Ú HttpConfluenceRetriever.__init__F   sX   € ð
 !×2¤L£NˆŒØ"Œà�M‰M×*Ñ*×F¨d¯m©m×.FÑ.FØ�M‰M×.Ñ.×N°$·-±-×2NÑ2Nð
ˆ�
r   c              ƒ  ó  #   • [        XR                  R                  5      nU[        S[	        US5      5      SS.n[
        R                  " SU R                  U R                  S9 IS h  v•N nUR                  U R                  S5      US9I S h  v•N nUR                  5         UR                  5       nS S S 5      IS h  v•N   [        WU R                  R                  US	9$  Nz NU N'! , IS h  v•N  (       d  f       N<= f7f)
Né   é   zbody.storage)Úcqlr%   Úexpandg      >@)ÚtimeoutÚauthr_   z/rest/api/content/search)Úparams©r%   )Ú_build_confluence_cqlr^   Úconfluence_space_key_listÚmaxÚminÚhttpxÚAsyncClientrd   r_   ÚgetÚ_urlÚraise_for_statusÚjsonÚ _parse_confluence_search_resultsÚconfluence_base_url)r#   r$   r%   ri   rm   ÚclientÚrespÚdatas           r   r&   ÚHttpConfluenceRetriever.searchR   sÝ   é € Ü# E¯=©=×+RÑ+RÓSˆàÜ˜œC  r›NÓ+Ø$ñ
ˆô
 ×$Ò$ØØ—‘Ø—n‘n÷
ò 
ð ØŸ™ D§I¡IÐ.HÓ$IÐRX˜ÐY×YˆDØ×!Ñ!Ô#Ø—9‘9“;ˆD÷
÷ 
ô 0°°d·m±m×6WÑ6WÐ_dÑeÐeñ
ñ
 Z÷
÷ 
÷ 
ð 
üsZ   ‚A(DÁ*C%Á+DÁ.#C+ÂC'Â$C+Â6DÃC)Ã$DÃ'C+Ã)DÃ+DÃ1C4Ã2DÃ>Dc                óT   • U R                   R                  R                  S5       U 3$ )NÚ/)r^   rz   Úrstrip)r#   Úpaths     r   rv   ÚHttpConfluenceRetriever._urlc   s'   € Ø—-‘-×3Ñ3×:Ñ:¸3Ó?Ð@ÀÀÐGÐGr   )rd   r^   r_   )NN)r^   úOptional[Settings]r_   z"Optional[httpx.AsyncBaseTransport]r.   rY   r*   r,   )r‚   r   r.   r   )	r   r   r   r   Ú__doc__r?   r&   rv   r   r   r   r   r[   r[   C   s:   † ÙGð (,Ø8<ð

à$ð

ð 6ð

ð 
õ	

öf÷"Hr   r[   c                  ó,   • \ rS rSrSS jrSSS jjrSrg)	ÚMockRepoRetrieverég   c                óN   • [        SSSS9[        SSSS9[        SSSS9/U l        g )	NÚgitz1force-app/main/default/classes/AccountService.clszSpublic with sharing class AccountService { /* pattern for Account domain logic */ })r   r   r   zHforce-app/main/default/objects/Account/fields/Industry__c.field-meta.xmluG   Custom field Industry__c on Account â€” example field metadata pattern.z;force-app/main/default/lwc/accountSummary/accountSummary.jsz<Lightning Web Component pattern for Account summary display.)r   Úfilesr>   s    r   r?   ÚMockRepoRetriever.__init__h   sB   € äØØIØmñô
 ØØ`Øañô
 ØØSØVñð
ˆ�
r   c           	   ƒ  óþ   ^#   • UR                  5       nU R                   V^s/ sH2  m[        U4S jUR                  5       S S  5       5      (       d  M0  TPM4     nnU(       d  U R                  S U nUS U $ s  snf 7f)Nc              3  ó¢   >#   • U HE  oTR                   R                  5       ;   =(       d    UTR                  R                  5       ;   v •  MG     g 7fr!   rH   )rJ   rK   Úfs     €r   rM   Ú+MockRepoRetriever.search.<locals>.<genexpr>}   rO   rP   r+   )rI   r‹   rQ   rR   )r#   r$   r%   rT   r�   rU   s       ` r   r&   ÚMockRepoRetriever.search{   sn   øé € Ø�K‰K‹MˆØŸ:š:Ôt™:�a¬Ô,sÐef×elÑelÓenÐoqÐpqÑerÓ,s×)s—™:ˆÐtÞØ—:‘:˜f˜uÐ%ˆDØ�F�Uˆ|Ðùò uùs   ƒ A=£.A8ÁA8Á"A=)r‹   NrX   r*   r,   )r   r   r   r   r?   r&   r   r   r   r   r‡   r‡   g   s   † ô
÷&ñ r   r‡   c                  óD   • \ rS rSr   S       SS jjrSS	S jjrSrg)
ÚKnowledgeServiceéƒ   Nc                óÀ   • U=(       d
    [        5       U l        U=(       d    [        U R                  5      U l        U=(       d    [	        U R                  5      U l        g r!   )r	   r^   Úget_confluence_retrieverr;   Úget_repo_retrieverÚrepo)r#   r;   r˜   r^   s       r   r?   ÚKnowledgeService.__init__„   s>   € ð !×2¤L£NˆŒØ$×OÔ(@ÀÇÁÓ(OˆŒØ×=Ô.¨t¯}©}Ó=ˆ�	r   c              ƒ  óž   #   • U R                   R                  XS9I S h  v•N nU R                  R                  XS9I S h  v•N nX4-   $  N) N
7f)Nrn   )r;   r&   r˜   )r#   r$   r%   Úconfr˜   s        r   ÚgatherÚKnowledgeService.gatherŽ   sJ   é € Ø—_‘_×+Ñ+¨EÐ+Ð?×?ˆØ—Y‘Y×%Ñ% eÐ%Ð9×9ˆØ‰{Ðñ @Ù9ùs!   ‚AŸA	  AÁ AÁ	AÁA)r;   r˜   r^   )NNN)r;   zOptional[ConfluenceRetriever]r˜   zOptional[RepoRetriever]r^   r„   r.   rY   r*   r,   )r   r   r   r   r?   rœ   r   r   r   r   r“   r“   ƒ   sB   † ð 59Ø(,Ø'+ð	>à1ð>ð &ð>ð %ð	>ð
 
õ>÷ñ r   r“   c                ór   • U =(       d
    [        5       n U R                  S:X  a  [        U 5      $ [        5       $ )NÚhttp)r	   Úconfluence_providerr[   r8   ©r^   s    r   r–   r–   ”   s0   € Ø×)œ<›>€HØ×#Ñ# vÓ-Ü& xÓ0Ð0Ü"Ó$Ð$r   c                ó<   • U =(       d
    [        5       n [        5       $ r!   )r	   r‡   r¡   s    r   r—   r—   ›   s   € Ø×)œ<›>€HÜÓÐr   >'   ÚaddÚandÚforÚhasÚtheÚalsoÚeachÚfromÚhaveÚintoÚjustÚneedÚnovaÚontoÚtestÚthatÚthisÚwhenÚwillÚwithÚaddedÚagentÚcheckÚneedsÚpointÚstoryÚusingÚcreateÚpleaseÚretestÚshouldÚticketÚupdateÚcreatedÚtestingÚsemanticÚ	duplicateÚ
duplicatesÚintentionallyé   )Ú	max_termsc               ó  • [         R                  " SSU =(       d    SR                  5       5      nU(       d  / $ [         R                  " SU5      n/ n/ n[	        5       nU H™  nUR                  5       nU[        ;   d  X†;   a  M$  [         R                  " SU5      (       d  [         R                  " SU5      (       a  M^  UR                  U5        SU;   a  UR                  U5        Mˆ  UR                  U5        M›     XT-   SU $ )	zMExtract short significant terms for Confluence CQL (full phrases often miss).ú\s+Ú Ú z[A-Za-z][A-Za-z0-9_]{2,}zpoint\d+[a-z]?z
an[-_]?\d+Ú__cN)
ÚreÚsubÚstripÚfindallÚsetrI   Ú_CQL_STOPWORDSÚ	fullmatchr£   Úappend)	r$   rË   ÚrawÚtokensÚfield_termsÚother_termsÚseenÚtokenÚlows	            r   Ú_confluence_search_termsrà   Í   sÔ   € ä
�&Š&�˜˜uŸ{¨×1Ñ1Ó3Ó
4€CÞØˆ	Ü�ZŠZÐ3°SÓ9€FØ€KØ€KÜ“U€DÛˆØ�k‰k‹mˆØ”.Ó  C£KÙä�<Š<Ð)¨3×/Ñ/´2·<²<ÀÈs×3SÑ3SÙØ�‰�ŒØ�C‹<Ø×Ñ˜uÖ%à×Ñ˜uÖ%ñ ð Ñ% z¨	Ð2Ð2r   c                ó\  • SnU(       a  SR                  S U 5       5      nSU S3n[        R                  " SSU =(       d    SR                  5       5      nU(       a,  [	        U5      S::  a  UR                  S	S
5      nU SU SU S3$ [        U 5      nU(       d,  US S R                  S	S
5      nU(       d  U S3$ U SU SU S3$ U Vs/ sH>  nSUR                  [        S5      S5       SUR                  [        S5      S5       S	3PM@     nnU SSR                  U5       S3$ s  snf )NrÏ   z, c              3  ó,   #   • U H  nS U S 3v •  M     g7f)Ú"Nr   )rJ   Úspaces     r   rM   Ú(_build_confluence_cql.<locals>.<genexpr>é   s   é € Ð<±V¨E˜Q˜u˜g Q�<²Vùs   ‚z
space in (z) AND rÍ   rÎ   é(   rã   z\"ztype = page AND (title ~ "z" OR text ~ "z")ztype = pagez	title ~ "é"   ztype = page AND (z OR Ú))ÚjoinrÑ   rÒ   rÓ   ÚlenÚreplacerà   Úchr)	r$   ÚspacesÚspace_clauseÚquotedrÙ   ÚsafeÚtermsrK   Úpartss	            r   ro   ro   æ   s?  € Ø€LÞØ—‘Ñ<±VÓ<Ó<ˆØ# F 8¨6Ð2ˆä
�&Š&�˜˜uŸ{¨×1Ñ1Ó3Ó
4€Cæ
Œs�3‹x˜2‹~Ø�{‰{˜3 Ó&ˆØ�Ð9¸$¸¸}ÈTÈFÐRTÐUÐUä$ UÓ+€EÞØ�3�Bˆx×Ñ  UÓ+ˆÞØ"�^ ;Ð/Ð/Ø�Ð9¸$¸¸}ÈTÈFÐRTÐUÐUáafÓgÑafÐ\]ˆy˜Ÿ™¤3 r£7¨BÓ/Ð0°¸a¿i¹iÌÈBËÐQSÓ>TÐ=UÐUVÓWÑaf€EÐgØˆ^Ð,¨V¯[©[¸Ó-?Ð,@ÀÐBÐBùò hs   ÃAD)r+   rn   c          
     ó¨  • U R                  S5      =(       d    / n/ nUS U  GH«  nUR                  S5      =(       d    Un[        UR                  S5      =(       d    UR                  S5      =(       d    S5      n[        [        UR                  S5      =(       d    UR                  S5      =(       d    S5      5      nUR                  S5      =(       d    0 R                  S5      =(       d    0 R                  S	5      =(       dJ    UR                  S5      =(       d    0 R                  S5      =(       d    0 R                  S	5      =(       d    Sn	[        [        U	=(       d    UR                  S
5      =(       d    S5      SS9n
[	        XR                  S5      (       a  UOUU5      nUR                  [        SUU
=(       d    SUS95        GM®     U$ )NÚresultsÚcontentÚidrÏ   r   ÚUntitledÚbodyÚstorageÚvalueÚexcerpti�  )Úmax_lenÚ_linksr;   z(no excerpt available)r<   )ru   r   r
   Ú_html_to_textÚ	_page_urlrØ   r   )ÚpayloadÚbase_urlr%   rô   rU   Úresultrõ   Úpage_idr   rù   rû   r   s               r   ry   ry   ý   sm  € ð �k‰k˜)Ó$×*¨€GØ!€DØ˜&˜5”/ˆØ—*‘*˜YÓ'×1¨6ˆÜ�g—k‘k $Ó'×A¨6¯:©:°dÓ+;×A¸rÓBˆÜœc '§+¡+¨gÓ"6×"[¸&¿*¹*ÀWÓ:M×"[ÐQ[Ó\Ó]ˆà�{‰{˜6Ó"×( b×-Ñ-¨iÓ8×>¸B×CÑCÀGÓL÷ Ø—*‘*˜VÓ$×*¨×/Ñ/°	Ó:×@¸b×EÑEÀgÓN÷àð 	ô
  ¤¨g×.T¸¿¹ÀIÓ9N×.TÐRTÓ UÐ_bÑcˆÜ˜¯[©[¸×-BÑ-B¡'ÈÐPWÓXˆØ�‰ÜØ#ØØ×;Ð#;Øñ	÷	
ñ "ð& €Kr   c                ó(  • UR                  S5      =(       d    0 nUR                  S5      nU(       aC  UR                  S5      (       d  UR                  S5      (       a  U$ U R                  S5       U 3$ U(       a  U R                  S5       SU 3$ g )Nrý   Úwebuizhttp://zhttps://r€   z/spaces/pages/)ru   Ú
startswithr�   )r  rõ   r  Úlinksr  s        r   rÿ   rÿ     s†   € Ø�K‰K˜Ó!×' R€EØ�I‰I�gÓ€EÞØ×Ñ˜I×&Ñ&¨%×*:Ñ*:¸:×*FÑ*FØˆLØ—/‘/ #Ó&Ð'¨ wÐ/Ð/ÞØ—/‘/ #Ó&Ð' ~°g°YÐ?Ð?Ør   c                ó  • [         R                  " SSU =(       d    S5      nUR                  SS5      nUR                  SS5      R                  SS5      R                  S	S
5      n[         R                  " SSU5      nUR                  5       $ )Nz<[^>]+>rÎ   rÏ   z&nbsp;z&lt;Ú<z&gt;Ú>z&amp;Ú&rÍ   )rÑ   rÒ   rë   rÓ   )rú   Útexts     r   rþ   rþ   '  sp   € Ü�6Š6�*˜c 5§;¨BÓ/€DØ�<‰<˜ #Ó&€DØ�<‰<˜ Ó$×,Ñ,¨V°SÓ9×AÑAÀ'È3ÓO€DÜ�6Š6�&˜#˜tÓ$€DØ�:‰:‹<Ðr   r!   )r^   r„   r.   r   )r^   r„   r.   r3   )r$   r   rË   r-   r.   ú	List[str])r$   r   rí   r  r.   r   )r   Údictr  r   r%   r-   r.   r/   )r  r   rõ   r  r  r   r.   r   )rú   r   r.   r   ) r…   Ú
__future__r   rÑ   Údataclassesr   Útypingr   r   r   rs   Úpackages.configr   r	   Úpackages.integrations.sanitizer
   r   r   r3   r8   r[   r‡   r“   r–   r—   Ú	frozensetrÖ   rà   ro   ry   rÿ   rþ   r   r   r   Ú<module>r     så   ðÙ Hå "ã 	Ý !ß +Ñ +ã ç 2Ý 8ð ÷ð ó ðôR˜(ô RôR�Hô R÷!
ñ !
÷H!Hñ !H÷Hñ ÷8ñ ö"%öñ
 ò(ó*€ðZ >?÷ 3ô2Cð6 ñ	Øðàðð ð	ð
 õô<	õr   