+
    i((                     X   ^ RI t ^ RIt^ RIt^ RIt^ RIt^ RIHtHt ^ RIHtH	t	H
t
Ht ^ RItRtRtRtRt^tR tR	 R
 ltR R ltR R ltR R ltR R ltR(R R lltR R ltR R ltR R ltR R ltR R ltR R  ltR! R" ltR# R$ lt R% R& lt!]"R'8X  d   ]#! ]!! 4       4      hR# ))    N)datetimedate)DictListOptionalTuplezahmad@bigalc.com	186337367z7/Users/ahmad/.openclaw/workspace/clickup_credentials.mdzhttps://api.clickup.com/api/v2c                  8    \        V R \        P                  /  R# )fileN)printsysstderr)argss   *scripts/meeting_prep_cron.pyeprintr      s    	4!cjj!    c                F    V ^8  d   QhR\         \        ,          R\        /# )   cmdreturn)r   str)formats   "r   __annotate__r      s      T#Y 3 r   c                     \         P                  ! V R R R7      pVP                  ^ 8w  d9   \        RRP	                  V 4       RVP
                  P                  4        24      hVP                  # )T)capture_outputtextzCommand failed:  
)
subprocessrun
returncodeRuntimeErrorjoinr   stripstdout)r   ress   & r   r    r       sY    
..T
=C
~~-chhsm_Bszz?O?O?Q>RSTT::r   c                F    V ^8  d   QhR\         R\        \        ,          /# )r   valuer   )r   r   r   )r   s   "r   r   r       s      S Xh/ r   c                     V '       g   R #  \         P                  ! V P                  RR4      4      #   \         d     R # i ; i)NZz+00:00)r   fromisoformatreplace	Exception)r(   s   &r   	iso_to_dtr.       s;    %%emmC&BCC s   %2 A Ac                    V ^8  d   QhR\         R\        \        \        ,          \        \        ,          \        3,          /# r   eventr   )r   r   r   r   bool)r   s   "r   r   r   )   s1      t hx.@(8BTVZ.Z([ r   c                   V P                  R/ 4      pV P                  R/ 4      pRV9   d;   \        VP                  RR4      4      p\        VP                  RR4      4      pW4R3# RV9   d]   \        P                  ! VR,          R,           4      p\        P                  ! VP                  RVR,          4      R,           4      pW4R3# R	# )
z$Returns start_dt, end_dt, is_all_daystartenddateTime Fr   z	T00:00:00T)NNF)getr.   r   r+   )r1   sestart_dtend_dts   &    r   get_event_start_endr=   )   s    		'2A		%AQQUU:r23155R01&&{))!F)k*AB''vqy)A[(PQ%%r   c                0    V ^8  d   QhR\         R\        /# r0   )r   r   )r   s   "r   r   r   <   s     , ,t , ,r   c                     V P                  R / 4      pV P                  R/ 4      pRV9   d(   VP                  RR4       RVP                  RR4       2# VP                  RR4       R2# )r4   r5   r6   ?u    → r   z
 (all-day))r8   )r1   r9   r:   s   &  r   format_whenrA   <   sk    		'2A		%AQ%%
3'(aeeJs.C-DEEeeF3 
++r   c                $    V ^8  d   QhR\         /# r   r   r   )r   s   "r   r   r   D   s      C r   c                     \         P                  ! R R4      P                  4       p V '       d   V # \         P                  P	                  \
        4      '       g   \        R\
         24      h\        \
        RRR7      P                  4       p\        P                  ! RV4      pV'       g   \        R4      hVP                  ^ 4      # )CLICKUP_API_TOKENr7   zMissing credentials file: rzutf-8)encodingz\bpk_[A-Za-z0-9_]+\bz2No ClickUp token pattern found in credentials file)osgetenvr$   pathexistsCLICKUP_CREDENTIALS_FILEFileNotFoundErroropenreadresearch
ValueErrorgroup)	env_tokencontentms      r   load_clickup_tokenrX   D   s    		-r288:I77>>233"<=U<V WXX+S7CHHJG
		)73AMNN771:r   c                    V ^8  d   QhR\         R\         R\         R\        \        ,          R\        \        ,          R\        /# )r   methodendpointtokenpayloadparamsr   )r   r   r   )r   s   "r   r   r   S   sF     4 4C 43 4s 4Xd^ 4dlmqdr 4  C 4r   c                 `   \          R VP                  R 4       2pRVRR/p\        P                  ! WWcV^R7      pVP                  R8  d3   \        RV  RV RVP                   R	VP                  R
,           24      hVP                  P                  4       '       d   VP                  4       # / # )/AuthorizationzContent-Typezapplication/json)headersjsonr^   timeouti  zClickUp r    -> z: :Ni  N)	CLICKUP_BASElstriprequestsrequeststatus_coder"   r   r$   rc   )rZ   r[   r\   r]   r^   urlrb   resps   &&&&&   r   clickup_requestrm   S   s    N!HOOC01
2C~7IJGFv_abD3XfXQxjT=M=M<NbQUQZQZ[_Q`Pabcc))//++499;33r   c                0    V ^8  d   QhR\         R\         /# )r   task_idr   rD   )r   s   "r   r   r   \   s     2 2s 2s 2r   c                     R V  2# )zhttps://app.clickup.com/t/ )ro   s   &r   clickup_task_linkrr   \   s    'y11r   c                R    V ^8  d   QhR\         R\        \         \        3,          /# )r   r\   r   )r   r   )r   s   "r   r   r   `   s"      3 4T	? r   c                 (   ^ p/ p \        RR\         R2V RRR\        V4      /R7      pVP                  R. 4      pV'       g    V# V F2  pVP                  R	R
4      pVP	                  R4      '       g   K.  WRV&   K4  	  V^,          pV^8  g   K   V# )r   GETlist//taskinclude_closedtruepage)r^   tasksnamer7   zMeeting Prep:)rm   CLICKUP_LIST_IDr   r8   
startswith)r\   rz   existingdatar{   tr|   s   &      r   get_existing_meeting_prep_tasksr   `   s    D "H
O$E*$ffc$i@	
 "% O A55$D//!"  		"9Or   c                :    V ^8  d   QhR\         \        ,          /# rC   )r   r   )r   s   "r   r   r   w   s      T$Z r   c                     \        . RO4      p \        P                  ! V 4      pVP                  R. 4      p\        P
                  ! 4       p. pV F  pVP                  R4      R8X  d   K  \        V4      w  rgpV'       g   K3  T;'       g    Tp	VP	                  4       Tu;8:  d   V	P	                  4       8:  g   Kl  M Kp  VP                  V4       K  	  VP                  R R7       V# )gogeventsstatus	cancelledc                 V    \        V 4      ^ ,          ;'       g    \        P                  # )r   )r=   r   max)evs   &r   <lambda>%fetch_todays_events.<locals>.<lambda>   s    04Q7GG8<<Gr   )key)r   calendarlist--json)	r    rc   loadsr8   r   todayr=   appendsort)
rawr   r   r   outr   r;   r<   _end_cmps
             r   fetch_todays_eventsr   w   s    
3
4C::c?DXXh#FJJLE
C66({*1"5! $$H==?e5w||~55JJrN  HHHHIJr   c                0    V ^8  d   QhR\         R\         /# r   summaryr   rD   )r   s   "r   r   r      s      c c r   c                 b   \         P                  ! R V P                  4       4      p0 RmpV Uu. uF  q3V9  g   K  \        V4      ^8  g   K  VNK!  	  pp. p\	        4       pV F-  pW59  g   K  VP                  V4       VP                  V4       K/  	  RP                  VR,          4      # u upi )z[A-Za-z0-9]+r   :N   N>   andarefortheyoufromthatthiswithyourweeklymeeting)rQ   findalllowerlensetr   addr#   )r   tokensstopr   uniqseens   &     r   extract_keywordsr      s    ZZ9FkDAAD=aSVq[aaFAD5D=KKNHHQK  88DH Bs   B,B,B,c                F    V ^8  d   QhR\         R\        \        ,          /# r   )r   r   r   )r   s   "r   r   r      s       d r   c           	          \        V 4      pV'       g   . # V R 2p \        RRRR\        VR.4      p\        P                  ! V4      pVP                  R. 4      ;'       g    . pVR\         #   \         d    . u # i ; i)z newer_than:21dr   gmailrR   z	--accountr   threadsN)r   r    GOG_ACCOUNTrc   r   r8   MAX_EMAIL_CONTEXTr-   )r   keywordsqueryr   r   r   s   &     r   fetch_email_contextr      s    (H	j(E5'8[+uhWXzz#((9b)//R))** 	s   AA- !A- -A=<A=c                ^    V ^8  d   QhR\         R\        R\        \        \        3,          /# )r   r1   
email_hitsr   )r   intr   r   )r   s   "r   r   r      s)      $ C E#s(O r   c                 8  a V P                  R 4      ;'       g    RP                  4       oV P                  R4      ;'       g    . pV P                  R4      ;'       g    Rp^(p\        ;QJ d    V3R lR
 4       F  '       g   K   RM	  RM! V3R lR
 4       4      '       d
   V^,          pV'       d$   V\        ^\	        V4      ^,          4      ,          pV'       d
   V^,          pV\        ^
V^,          4      ,          pV^K8  d   RV3# V^78  d   RV3# R	V3# )r   r7   	attendeeslocationc              3   ,   <"   T F	  qS9   x  K  	  R # 5i)Nrq   ).0kr   s   & r   	<genexpr>!priority_score.<locals>.<genexpr>   s     
q!pA<!ps   TFHighMediumLow)clientreviewstrategyproposalpitchfouadkoalacryo)r8   r   anyminr   )r1   r   r   locscorer   s   &&   @r   priority_scorer      s    yy#))r002G		+&,,"I
))J

%
%2CE
s
q!p
qsss
q!p
qqqRY!+,,

	SZ!^$$E{u}{%<r   c                R    V ^8  d   QhR\         R\        \         ,          R\        /# )r   r1   	email_ctxr   )r   r   r   )r   s   "r   r   r      s%     9 9D 9T$Z 9C 9r   c                    V P                  R R4      p\        V 4      pV P                  R4      ;'       g    RpV P                  R4      ;'       g    / P                  RR4      pV P                  R4      ;'       g    . p. pVR,           FK  pVP                  R	4      ;'       g    VP                  R4      ;'       g    R
p	VP                  RV	 24       KM  	  V'       g   R.p\        V \	        V4      4      w  r. pV'       d[   V FS  pVP                  RR4      pVP                  RR4      pVP                  RR4      pVP                  RV RV RV 24       KU  	  MR.pV P                  R4      ;'       g    RpV'       d.   VP                  4       P                  R4      ^ ,          R,          MRp. R$OpRRV
 RV R2RV 2RV 2RV 2RRRV 2R V 2RR!.VORNR"NVORNR#NVOpRP                  V4      # )%r   
(no title)r   z	(not set)	organizeremailz	(unknown)r   :N   NdisplayNameUnknownz- z- (No attendee list available)subjectz(no subject)r   r   r7   z | z)- No relevant recent inbox threads found.descriptionr   :N   Nz(no description)z## Meeting Prep Briefz**Priority:** z (z/100)z
**When:** z**Location:** z**Organizer:** z### Objective (inferred)z- Context hint: z### Attendeesz%### Recent Related Emails (last ~21d)z### Prep Checklist)z,- [ ] Define target outcome for this meetingz(- [ ] Review prior communication/contextz"- [ ] Prepare 3 key talking pointsz,- [ ] Prepare 2 decisions/questions to closez%- [ ] Add post-meeting follow-up task)r8   rA   r   r   r   r$   splitr#   )r1   r   r   whenr   r   r   attendee_linesar|   
prio_label
prio_scoreemail_linesr   subjsenderddescdesc_snippet	checklistbriefs   &&                   r   build_prep_briefr      s<   ii	<0GuDyy$33H;'--2227KHI		+&,,"INr]]uu]#BBquuW~BB4&k*  :;+E3y>BJKA55N3DUU6;/Ffb!AA3c&TF;<	  CC99]#))rD8<4::<%%d+A.t4BTLI 	 
Bzl%8
TF

#
)%
"
WI
<.)
 
 	 	0 
  	!" 	#$ 
%E( 99Ur   c                    V ^8  d   QhR\         R\        R\        \         \        3,          R\        \         \         \        3,          /# )r   r\   r1   r   r   )r   r   r   r2   )r   s   "r   r   r      s?     5 5c 5$ 5$sDy/ 5eTWY\^bTbNc 5r   c                 n   R VP                  RR4       2pW29   d7   W#,          pVP                  RR4      \        VP                  RR4      4      R3# \        VP                  RR4      4      p\        W4      pRVRVR. RO/p\	        R	R
\
         R2W4      pVP                  RR4      p	V	\        V	4      R3# )zMeeting Prep: r   r   idr7   Fr|   r   tagsPOSTrv   rw   T)zMeeting PrepzOpenClaw-AutozAI-Prep)r8   rr   r   r   rm   r}   )
r\   r1   r   r|   r   r   r   r]   createdro   s
   &&&       r   create_or_get_taskr      s    EIIi=>?DNuuT2 1!%%b/ BEII#EIIi$<=IE-D 	t<G
 fo->e&DeUGkk$#G%g.44r   c                $    V ^8  d   QhR\         /# rC   )r   )r   s   "r   r   r     s     9 9c 9r   c            	      r   \        R 4        \        4       p \        RRV 4      p\        R\        VP	                  R. 4      4       R24        \        4       pT'       g   \        R	4       ^ #  \        T 4      p^ p^ p. pT F  pTP	                  RR4      p	RT	P                  4       9   g   RT	P                  4       9   d   KA   \        YT4      w  rpT'       d   T^,          p\        RT	 RT 24       MT^,          p\        RT	 RT 24       T'       d   TP                  T4       K  K  	  \        R4       \        R\        T4       24       \        RT 24       \        RT 24       T'       d#   \        R4       T F  p\        RT 24       K  	  ^ #   \
         d   p\        RT 24        Rp?^# Rp?ii ; i  \
         d   p\        RT 24        Rp?^# Rp?ii ; i  \
         d   p\        R
T 24       / p Rp?ELRp?ii ; i  \
         d   p\        RT	 RT 24        Rp?EK  Rp?ii ; i)zRunning Meeting Prep v2...ru   teamzClickUp auth OK (teams: teamsz).zAuth failed: Nz!Failed to fetch calendar events: zNo meetings found for today.z'Could not read existing ClickUp tasks: r   r   r   z[cancelled]u   ✅ Created: re   u   ↩️ Exists: u   ❌ Failed for 'z': z
Daily Meeting Prep Summaryz- meetings_today: z- created: z- existing: z- links:z  - )r   rX   rm   r   r8   r-   r   r   r   r   r   r   )r\   	team_datar:   r   r   created_countreused_countlinksr   r   ro   linkr   ls                 r   mainr    s(   	
&'"$#E659	(Y]]7B-G)H(ILM
$&
 ,-259
 MLE&&L1'--/)]gmmo-M	7%78%L"G7"gYd4&9:!yTF;<T"  " 

()	s6{m
,-	K
'(	L
'(jAD*  e  qc"#  21#67  8<=,  	7%gYc!566	7sf   ?F 
F> -G% AHHF;"F66F;>G"	GG"%H0HHH6H11H6__main__)NN)$rc   rI   rQ   r   r   r   r   typingr   r   r   r   rh   r   r}   rM   rf   r   r   r    r.   r=   rA   rX   rm   rr   r   r   r   r   r   r   r   r  __name__
SystemExitrq   r   r   <module>r     s     	 	  
 # . .  !T / "&,42.2*9x5(9x z
TV
 r   