Ë
    ãß²j   ã                   óz  — d Z ddlZddlmZmZmZmZmZ ddlm	Z	m
Z
mZ  ej                  e«      ZdPd„Zdedefd	„Zdedefd
„ZdddœZddddœZdddœZdZdZdZdddeeddddœddddœedœdgdœd œZd!d"dedd#dœedd$ddœed%œdd&gdœd œZd'd(dedd)dœdd*dœed+œg d,¢dœd œZd-d.dedd/dœed0œdd1gdœd œZ ed2d3d4d5ed6„ ¬7«      Z ed8d9d:d5ee¬7«      Z  ed,d;d<d=ed>„ d?„ d@¬A«      Z! edBdCdDd=edE„ d@¬F«      Z"eedGdHfee dIdHfee!dJdKfee"dLdKffD ]%  \  Z#Z$Z%Z& e	jN                  e#dM   dNe#e$eg de%e&¬O«	       Œ' ddl(Z(ddl)Z)y)QaD  Feishu Drive Tools -- document comment operations via Feishu/Lark API.

List / reply-to / add document comments through the generic BaseRequest path (lazy SDK
import), sharing client/request plumbing with feishu_doc_tool via ``tools.feishu_lark``.
The lark client is injected per-thread by the feishu_comment event handler.
é    N)Ú_check_feishuÚbuild_requestÚ
get_clientÚ	lark_callÚ
set_client)ÚregistryÚ
tool_errorÚtool_resultFc           	      óH   ‡ ‡‡‡‡‡‡‡— dt         dt        fˆˆˆ ˆˆˆˆˆfd„}|S )u  Handler factory: client check, then required ``keys`` (stripped) â†’ lark_call â†’ result.

    All keys except ``content`` are URI path params. ``queries(args)`` / ``body(args, values)``
    build the request pieces; ``flag_success`` adds ``success=True`` to the result (writes).
    ÚargsÚreturnc                 ó”  •‡ — t        «       }t        ˆ fd„‰D «       «      }|€t        d«      S t        |«      st        ‰«      S t	        |‰‰t        ‰|«      D ��ci c]  \  }}|dk7  sŒ||“Œ c}}‰xr  ‰‰ «      ‰	xr	  ‰	‰ |«      ¬«      \  }}}|dk7  rt        ‰› d|› d|› �«      S ‰
rt        d|¬	«      S t        |«      S c c}}w )
Nc              3   ó^   •K  — | ]$  }‰j                  |d «      j                  «       –— Œ& y­w)Ú N)ÚgetÚstrip)Ú.0Úkr   s     €ú</home/ubuntu/.hermes/hermes-agent/tools/feishu_drive_tool.pyú	<genexpr>z0_comment_op.<locals>._handler.<locals>.<genexpr>   s$   øè ø€ Ò=°1�t—x‘x  2“×,Ñ,×.Ñ=ùs   ƒ*-zFeishu client not availableÚcontent)ÚpathsÚqueriesÚbodyr   z failed: code=z msg=T)ÚsuccessÚdata)r   Útupler	   Úallr   Úzipr
   )r   ÚkwargsÚclientÚvaluesr   ÚvÚcodeÚmsgr   r   Úflag_successÚkeysÚlabelÚmethodÚmissing_msgr   Úuris   `        €€€€€€€€r   Ú_handlerz_comment_op.<locals>._handler   s×   ù€ Ü“ˆÜÓ=¸Ô=Ó=ˆØˆ>ÜÐ;Ó<Ð<Ü�6Œ{Ü˜kÓ*Ð*Ü#Ø�F˜C¼¸TÀ6Ó9J×']±°°AÈaÐS\Ën¨¨1©Ó']ØÒ-¡¨£°DÒ4O¹TÀ$ÈÓ=OôQ‰ˆˆc�4ð �1Š9Ü   ~°d°V¸5ÀÀÐFÓGÐGÙ7CŒ{ 4¨dÔ3ÐZÌÐUYÓIZÐZùó	 (^s   ÁCÁ)C)ÚdictÚstr)	r'   r*   r(   r)   r+   r   r   r&   r,   s	   ```````` r   Ú_comment_opr/      s&   ÿ€ ð[”tð [¬#÷ [ô [ð €Oó    r   r   c                 ó.   — | j                  dd«      xs dS )NÚ	file_typeÚdocx)r   )r   s    r   Ú
_file_typer4   +   s   € Ø�8‰8�K Ó(Ò2¨FÐ2r0   c           	      ó®   — dt        | «      fddt        | j                  dd«      «      fg|¢}| j                  dd«      }|r|j                  d|f«       |S )zUQuery params shared by the listing endpoints; page_token goes last (after any extra).r2   )Úuser_id_typeÚopen_idÚ	page_sizeéd   Ú
page_tokenr   )r4   r.   r   Úappend)r   Úextrar   r:   s       r   Ú_paged_queriesr=   /   sh   € ð 
”j Ó&Ð'Ð)DØ	”c˜$Ÿ(™( ;°Ó4Ó5Ð6ð@à9>ð@€Gð —‘˜,¨Ó+€JÙØ�‰˜ jÐ1Ô2Ø€Nr0   ÚstringzThe document file token.)ÚtypeÚdescriptionzFile type (default: docx).r3   )r?   r@   ÚdefaultzPagination token for next page.z./open-apis/drive/v1/files/:file_token/commentszB/open-apis/drive/v1/files/:file_token/comments/:comment_id/repliesz2/open-apis/drive/v1/files/:file_token/new_commentsÚfeishu_drive_list_commentsz[List comments on a Feishu document. Use is_whole=true to list whole-document comments only.ÚobjectÚbooleanz-If true, only return whole-document comments.Úintegerz&Number of comments per page (max 100).r9   )Ú
file_tokenr2   Úis_wholer8   r:   rF   )r?   Ú
propertiesÚrequired)Únamer@   Ú
parametersÚ!feishu_drive_list_comment_repliesz:List all replies in a comment thread on a Feishu document.z#The comment ID to list replies for.z%Number of replies per page (max 100).)rF   Ú
comment_idr2   r8   r:   rM   Úfeishu_drive_reply_commentz£Reply to a local comment thread on a Feishu document. Use this for local (quoted-text) comments. For whole-document comments, use feishu_drive_add_comment instead.zThe comment ID to reply to.z6The reply text content (plain text only, no markdown).)rF   rM   r   r2   )rF   rM   r   Úfeishu_drive_add_commentz˜Add a new whole-document comment on a Feishu document. Use this for whole-document comments or as a fallback when reply_comment fails with code 1069302.z8The comment text content (plain text only, no markdown).)rF   r   r2   r   )rF   zfile_token is requiredzList commentsÚGETc                 óJ   — t        | g| j                  dd«      rdg¢­Ž S g ¢­Ž S )NrG   F)rG   Útrue)r=   r   ©Úas    r   ú<lambda>rU   ¨   s*   € ”n QÐfÀAÇEÁEÈ*ÐV[ÔD\Ð+?Ð*@Òf€ ÐbdÒf€ r0   )r   )rF   rM   z&file_token and comment_id are requiredzList repliesz0file_token, comment_id, and content are requiredzReply commentÚPOSTc                 ó   — dt        | «      fgS )Nr2   ©r4   rS   s    r   rU   rU   ¯   s   € ¸{ÌJÐWXËMÐ>ZÐ=[€ r0   c                 ó    — dddd|d   idœgiiS )Nr   ÚelementsÚtext_runÚtextéÿÿÿÿ)r?   r[   © ©rT   r#   s     r   rU   rU   °   s%   € �y :¸ÐRXÐZ[Ð\^ÑZ_ÐQ`Ñ0aÐ/bÐ"cÐd€ r0   T)r   r   r&   )rF   r   z#file_token and content are requiredzAdd commentc                 ó,   — t        | «      d|d   dœgdœS )Nr\   r]   )r?   r\   )r2   Úreply_elementsrX   r_   s     r   rU   rU   ¶   s   € ¤J¨q£MÈvÐ_`ÐacÑ_dÑFeÐEfÑg€ r0   )r   r&   zList document commentsu   ðŸ’¬zList comment replieszReply to a document commentu   âœ‰ï¸�zAdd a whole-document commentrJ   Úfeishu_drive)	rJ   ÚtoolsetÚschemaÚhandlerÚcheck_fnÚrequires_envÚis_asyncr@   Úemoji)NNF)*Ú__doc__ÚloggingÚtools.feishu_larkr   r   r   r   r   Útools.registryr   r	   r
   Ú	getLoggerÚ__name__Úloggerr/   r-   r.   r4   Úlistr=   Ú_FILE_TOKEN_PROPÚ_FILE_TYPE_PROPÚ_PAGE_TOKEN_PROPÚ_COMMENTS_URIÚ_REPLIES_URIÚ_ADD_COMMENT_URIÚ!FEISHU_DRIVE_LIST_COMMENTS_SCHEMAÚ FEISHU_DRIVE_LIST_REPLIES_SCHEMAÚFEISHU_DRIVE_REPLY_SCHEMAÚFEISHU_DRIVE_ADD_COMMENT_SCHEMAÚ_handle_list_commentsÚ_handle_list_repliesÚ_handle_reply_commentÚ_handle_add_commentÚ_schemar,   Ú_descÚ_emojiÚregisterÚjsonÚ	threadingr^   r0   r   ú<module>r†      sÆ  ðñó ÷õ ÷ =Ñ <à	ˆ×	Ñ	˜8Ó	$€óð,3�Tð 3˜có 3ð˜ð ¨$ó ð %Ð5OÑPÐ Ø#Ð4PÐ]cÑd€Ø$Ð5VÑWÐ Ø@€ØS€ØGÐ ð )ð	Bð à*Ø(à!ØNØ ñð "ØGØñð
 +ñ
ð "�Nñ#ñ%Ð !ð: 0ØOàà*à ØDñð )à!ØFØñð
 +ñ
ð " <Ð0ñ!ñ$Ð  ð2 )ð	Mð
 à*à Ø<ñð
 !ØWñð )ñ
ò <ññÐ ð6 'ð	1ð
 à*à ØYñð )ñ
ð " 9Ð-ññ#Ð ñ, $ØÐ-¨ÀÀ}ÙfôhÐ ñ #Ø Ð"JÈNÐ\aØ˜.ô*Ð ñ $Ø+Ð-_Ø�V˜\Ñ3[Ù	dØô	Ð ñ "ØÐDÀmÐU[ØÙ	gØô	Ð ð 'Ð(=Ð?WÐYeÐfØ%Ð';Ð=SÐUaÐbØÐ 5Ð7TÐVdÐeØ$Ð&9Ð;YÐ[iÐjð	)ò bÑ$€GˆX�u˜fð €H×ÑØ�V‰_ n¸WÈhØ¨R¸%ÈUÐZ`öbðbó Ü r0   