+
    Oi                        R t ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RI	t^ RI
H
t
 ^ RIHt ]P                  ! 4       R,          R,          R,          ]! ]4      P                  R,          .tRtR R	 ltR
 R ltROR R lltRPR R llt ! R R4      tR R ltR R ltR^R^R^R^R^R^R^R^/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"R0 R1 lt#R2 R3 lt$R4 R5 lt%R6 R7 lt&R8 R9 lt'R: R; lt(R< t)R= t*R> t+R?]R@]RA]RB]RC]RD] RE]!RF]"RG]#RH]$RI]%RJ]&RK]'RL](/t,RM t-].RN8X  d
   ]-! 4        R# R# )Qub  
clickup.py — ClickUp API CLI for OpenClaw
Full read/write access to ClickUp: spaces, projects, lists, tasks

Usage:
    python3 clickup.py --help
    python3 clickup.py spaces
    python3 clickup.py tasks [list_id] --status open
    python3 clickup.py create --list [id] --title "My Task"

Config: ~/.config/clickup/config.json OR env CLICKUP_API_KEY
N)datetime)Path.configclickupconfig.jsonzhttps://api.clickup.com/api/v2c                $    V ^8  d   QhR\         /#    returndict)formats   "=/Users/tonyclaw/.openclaw/workspace/skills/clickup/clickup.py__annotate__r   &   s      T     c                    / p \          FM  pVP                  4       '       g   K  \        V4      ;_uu_ 4       p\        P                  ! V4      p RRR4        M	  \
        P                  P                  R4      ;p'       d   W0R&   \
        P                  P                  R4      ;p'       d   W@R&   \
        P                  P                  R4      ;p'       d   WPR&   V #   + '       g   i     L; i)z%Load config from file or environment.NCLICKUP_API_KEYapi_keyCLICKUP_WORKSPACE_IDworkspace_idCLICKUP_SPACE_IDdefault_space_id)CONFIG_PATHSexistsopenjsonloadosenvironget)configpathfr   ws_idspace_ids         r   load_configr%   &   s    F ;;==dq1 	  **..!233w3#y

566u6!&~::>>"455x5%-!"M s   CC-c                0    V ^8  d   QhR\         R\        /# )r	   r    r
   )r   str)r   s   "r   r   r   <   s     
 
 
 
r   c           
         V P                  RR4      pV'       d   VR8X  dL   \        \        P                  ! RRRRRR	/4      \        P
                  R
7       \        P                  ! ^4       V# )z'Get API key or exit with helpful error.r    YOUR_API_KEY_HEREerrorzNo API key configuredfixzKSet CLICKUP_API_KEY env var or add api_key to ~/.config/clickup/config.jsondocsz6Get your key at: https://app.clickup.com/settings/appsfile)r   printr   dumpssysstderrexit)r    keys   & r   get_api_keyr6   <   sb    
**Y
#C#,,djj,`L
  		
 	Jr   c                l    V ^8  d   QhR\         R\         R\         R\        R\        R\        R\        /# )r	   methodendpointr   dataparamsretriesr
   )r'   r   int)r   s   "r   r   r   M   sJ     ] ] ]s ]S ]]+/]]%)]r   c                

   \          RVP                  R4       2pV'       d.   VR\        P                  P	                  V4      ,           ,          pRVRR/pV'       d&   \
        P                  ! V4      P                  R4      MRp\        V4       F  p	 \        P                  P                  WhWpR7      p
\        P                  P                  V
^R	7      ;_uu_ 4       pVP                  4       pV'       g   / uuRRR4       u # \
        P                  ! VP                  R4      4      uuRRR4       u # 	  R#   + '       g   i     K  ; i  \        P                  P                    Edu   pTP"                  ^8X  d
   / u Rp?u # TP                  4       p \
        P                  ! TP                  R4      4      pM&  \$         d    R
TP                  RRR7      /p Mi ; iTP"                  R8X  d|   TP&                  P)                  RR4      p\+        \
        P                  ! RRR\-        T4      RRT R2/4      \.        P0                  R7       \.        P2                  ! ^4        Rp?EK  TP"                  R8X  dS   \+        \
        P                  ! RRRRRT/4      \.        P0                  R7       \.        P2                  ! ^4        Rp?EKD  TP"                  R8X  dV   \+        \
        P                  ! RRRRT 2RT/4      \.        P0                  R7       \.        P2                  ! ^4        Rp?EK  TP"                  R8  d4   Y^,
          8  d'   ^T	,          p\4        P6                  ! T4        Rp?EK  \+        \
        P                  ! RRTP"                   2R TRT/4      \.        P0                  R7       \.        P2                  ! ^4        Rp?EKM  Rp?i\        P                  P8                   d   pY^,
          8  d%   \4        P6                  ! ^T	,          4        Rp?EK  \+        \
        P                  ! RR!R\;        TP<                  4      R"R#/4      \.        P0                  R7       \.        P2                  ! ^4        Rp?EK  Rp?i\>         d`    Y^,
          8  d    EK$  \+        \
        P                  ! RR$RR%/4      \.        P0                  R7       \.        P2                  ! ^4        EKq  i ; i)&z:Make ClickUp API request with retry + rate limit handling./?AuthorizationzContent-Typezapplication/jsonzutf-8N)r:   headersr8   )timeoutrawreplace)errorsi  zRetry-After60r+   zRate limited (429)retry_after_secondsmessagez%ClickUp rate limit hit. Try again in zs.r.   i  zAuthentication failed (401)z6Invalid API key. Check CLICKUP_API_KEY or config file.detaili  zNot found (404)zResource not found: i  zHTTP r9   zNetwork errorhintzCheck your internet connectionzRequest timeoutz"ClickUp API did not respond in 30s) BASE_URLlstripurllibparse	urlencoder   r1   encoderangerequestRequesturlopenreadloadsdecoder+   	HTTPErrorcode	ExceptionrB   r   r0   r=   r2   r3   r4   timesleepURLErrorr'   reasonTimeoutError)r8   r9   r   r:   r;   r<   urlrB   bodyattemptreqresprD   e
body_byteserr_bodyretry_afterwaits   &&&&&&            r   api_requestrk   M   s    Ja,-
.CsV\\++F333 	*G
 044::d""7+D>L	..(((XC''R'88Diik 98 zz#**W"56	 98 " 988 ||%% 0	vv}	JQ::j&7&7&@A Q!:#4#4WY#4#OPQ vv}iimmM4@djj1)3{+;!F{mSUV"  	%
 3djj:Wh"  	%
 3djj.!5hZ@h"  	%
 37q[#8G|

4  djjuQVVH-h"  	%
 ||$$ 		1$

1<($**3qxx=8  ZZ	!
 HHQKK 	1$$***?  ZZ! HHQKK	s   A
ED:8
E$D:)
E:EEE T.O TO%F?>O? G"O!G""BO1AOAO:=O>AO T>T?*R0ART"T4A	TTc                $    V ^8  d   QhR\         /# )r	   pretty)bool)r   s   "r   r   r      s          r   c                    V'       d$   \        \        P                  ! V ^R7      4       R# \        \        P                  ! V 4      4       R# )zPrint JSON output.indentN)r0   r   r1   )r:   rm   s   &&r   outputrr      s)    djja()djjr   c                     a  ] tR t^t o V 3R lR ltR3V 3R lR lltV 3R lR ltV 3R lR	 ltV 3R
 lR ltV 3R lR lt	V 3R lR lt
R3V 3R lR lltV 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltR4V 3R lR lltV 3R  lR! ltR5V 3R" lR# lltR5V 3R$ lR% lltV 3R& lR' ltR6V 3R( lR) lltV 3R* lR+ ltV 3R, lR- ltV 3R. lR/ ltV 3R0 lR1 ltR2tV tR# )7
ClickUpAPIc                &   < V ^8  d   QhRS[ RS[/# )r	   r   r    r'   r   )r   __classdict__s   "r   r   ClickUpAPI.__annotate__   s       T r   c                    Wn         W n        R # Nr   r    )selfr   r    s   &&&r   __init__ClickUpAPI.__init__   s    r   Nc                ,   < V ^8  d   QhRS[ RS[RS[/# )r	   r9   r;   r
   rv   )r   rw   s   "r   r   rx      s'     I IS I$ I$ Ir   c                2    \        R WP                  VR7      # )GET)r;   rk   r   )r|   r9   r;   s   &&&r   _getClickUpAPI._get   s    5(LLHHr   c                ,   < V ^8  d   QhRS[ RS[RS[/# r	   r9   r:   r
   rv   )r   rw   s   "r   r   rx      s'     F Fc F F$ Fr   c                2    \        R WP                  VR7      # )POSTr:   r   r|   r9   r:   s   &&&r   _postClickUpAPI._post   s    68\\EEr   c                ,   < V ^8  d   QhRS[ RS[RS[/# r   rv   )r   rw   s   "r   r   rx      s'     E ES E E Er   c                2    \        R WP                  VR7      # )PUTr   r   r   s   &&&r   _putClickUpAPI._put   s    5(LLtDDr   c                &   < V ^8  d   QhRS[ RS[/# )r	   r9   r
   rv   )r   rw   s   "r   r   rx      s     = = = =r   c                .    \        R WP                  4      # )DELETEr   )r|   r9   s   &&r   _deleteClickUpAPI._delete   s    8X||<<r   c                    < V ^8  d   QhRS[ /# r   r   )r   rw   s   "r   r   rx      s     ! !$ !r   c                $    V P                  R 4      # )userr   r|   s   &r   get_userClickUpAPI.get_user       yy  r   c                    < V ^8  d   QhRS[ /# r   r   )r   rw   s   "r   r   rx      s     ! ! !r   c                $    V P                  R 4      # )teamr   r   s   &r   get_workspacesClickUpAPI.get_workspaces   r   r   c                &   < V ^8  d   QhRS[ RS[/# )r	   r   r
   rv   )r   rw   s   "r   r   rx      s     G Gs Gd Gr   c                   T;'       g    V P                   P                  R 4      pV'       g   V P                  4       pVP                  R4      '       d'   VR,          ^ ,          R,          pW P                   R &   MG\        \        P
                  ! RR/4      \        P                  R7       \        P                  ! ^4       V P                  RV R2RR	/4      # )
r   teamsidr+   z)No workspace_id configured and none foundr.   team/z/spacearchivedfalse)
r    r   r   r0   r   r1   r2   r3   r4   r   )r|   r   r#   r   s   &&  r   
get_spacesClickUpAPI.get_spaces   s    ?? ?'')Eyy!!gq)$/.3N+djj'+V!WX::'yy5v.W0EFFr   c                &   < V ^8  d   QhRS[ RS[/# r	   r$   r
   rv   )r   rw   s   "r   r   rx      s     . .# .$ .r   c                *    V P                  R V 24      # )space/r   r|   r$   s   &&r   	get_spaceClickUpAPI.get_space   s    yy6(,--r   c                &   < V ^8  d   QhRS[ RS[/# r   rv   )r   rw   s   "r   r   rx      s     L LC LD Lr   c                2    V P                  R V R2RR/4      # )r   z/folderr   r   r   r   s   &&r   get_foldersClickUpAPI.get_folders   s!    yy6(73j'5JKKr   c                &   < V ^8  d   QhRS[ RS[/# r	   	folder_idr
   rv   )r   rw   s   "r   r   rx      s     0 0C 0D 0r   c                *    V P                  R V 24      # )folder/r   r|   r   s   &&r   
get_folderClickUpAPI.get_folder   s    yy79+.//r   c                &   < V ^8  d   QhRS[ RS[/# r   rv   )r   rw   s   "r   r   rx      s     L L3 L4 Lr   c                2    V P                  R V R2RR/4      # )r   /listr   r   r   r   s   &&r   	get_listsClickUpAPI.get_lists   s!    yy79+U3j'5JKKr   c                &   < V ^8  d   QhRS[ RS[/# r   rv   )r   rw   s   "r   r   rx      s     J JS JT Jr   c                2    V P                  R V R2RR/4      # )r   r   r   r   r   r   s   &&r   get_folderless_listsClickUpAPI.get_folderless_lists   s!    yy6(51J3HIIr   c                &   < V ^8  d   QhRS[ RS[/# r	   list_idr
   rv   )r   rw   s   "r   r   rx      s     , , , ,r   c                *    V P                  R V 24      # )list/r   r|   r   s   &&r   get_listClickUpAPI.get_list   s    yy5	*++r   c                J   < V ^8  d   QhRS[ RS[ RS[ RS[RS[RS[RS[RS[/# )	r	   r   statusassigneedue_date_gtdue_date_ltpagesubtasksr
   )r'   r=   rn   r   )r   rw   s   "r   r   rx      sJ     9 9 9c 9C 9"98;99+/9<@9r   c                    R VR\        V4      P                  4       /pV'       d   W(R&   V'       d   W8R&   V'       d   WHR&   V'       d   WXR&   V P                  RV R2V4      # )r   r   z
statuses[]zassignees[]r   r   r   /task)r'   lowerr   )	r|   r   r   r   r   r   r   r   r;   s	   &&&&&&&& r   	get_tasksClickUpAPI.get_tasks   se     $
CM,?,?,AB#)< $,=!$/=!$/=!yy5	/88r   c                &   < V ^8  d   QhRS[ RS[/# r	   task_idr
   rv   )r   rw   s   "r   r   rx   	  s     J J J Jr   c                0    V P                  R V 2RR/4      # )task/include_subtaskstruer   r|   r   s   &&r   get_taskClickUpAPI.get_task	  s     yy5	*-?,HIIr   c                V   < V ^8  d   QhRS[ RS[ RS[ RS[ RS[RS[RS[RS[R	S[R
S[/
# )r	   r   titledescriptionr   prioritydue_date	assigneestagscustom_fieldsr
   r'   r=   listr   )r   rw   s   "r   r   rx     sb     8 83 8s 8 88258!8598 8 7;8 GK8r   c
                    R V/p
V'       d   W:R&   V'       d   WJR&   Ve   WZR&   V'       d   WjR&   V'       d   WzR&   V'       d   WR&   V	'       d   WR&   V P                  RV R	2V
4      # )
namer   r   r   r   r   r   r   r   r   r   )r|   r   r   r   r   r   r   r   r   r   r:   s   &&&&&&&&&& r   create_taskClickUpAPI.create_task  su     "-#N'' )L$1!zzE'%0$77r   c                P   < V ^8  d   QhRS[ RS[ RS[ RS[ RS[RS[RS[RS[R	S[/	# )
r	   r   r   r   r   r   r   assignees_addassignees_remr
   r   )r   rw   s   "r   r   rx   !  sV     2 23 2s 2 22252!29=2 $(2 482r   c	                   / p	V'       d   W)R &   Ve   W9R&   V'       d   WIR&   Ve   WYR&   Ve   WiR&   V'       g	   V'       d,   / V	R&   V'       d   WyR,          R&   V'       d   WR,          R&   V P                  RV 2V	4      # )	r   r   r   r   r   r   addremr   )r   )
r|   r   r   r   r   r   r   r   r   r:   s
   &&&&&&&&& r   update_taskClickUpAPI.update_task!  s      L""-#N''M "D+8[!%(+8[!%(yy5	*D11r   c                &   < V ^8  d   QhRS[ RS[/# r   rv   )r   rw   s   "r   r   rx   8  s     / /3 /4 /r   c                *    V P                  R V 24      # )r   )r   r   s   &&r   delete_taskClickUpAPI.delete_task8  s    ||eG9-..r   c                >   < V ^8  d   QhRS[ RS[ RS[RS[RS[RS[/# )r	   r   query	space_idsstatusesr   r
   )r'   r   r=   r   )r   rw   s   "r   r   rx   =  s:     7 7 7S 7T 7#7257>B7r   c                    T;'       g    V P                   P                  R 4      pRVRV/pV'       d   RP                  V4      VR&   V'       d   RP                  V4      VR&   V P                  RV R2V4      # )r   r  r   ,r  r  r   r   )r    r   joinr   )r|   r   r  r  r  r   r#   r;   s   &&&&&&  r   search_tasksClickUpAPI.search_tasks=  sp    ?? ?5&$/"%((9"5F;!$(!3F:yy5u-v66r   c                &   < V ^8  d   QhRS[ RS[/# r   rv   )r   rw   s   "r   r   rx   I  s     2 2c 2d 2r   c                ,    V P                  R V R24      # )r   z/fieldr   r   s   &&r   get_list_custom_fields!ClickUpAPI.get_list_custom_fieldsI  s    yy5	011r   c                ,   < V ^8  d   QhRS[ RS[ RS[/# )r	   r   field_idr
   rv   )r   rw   s   "r   r   rx   L  s'     P P Ps Pd Pr   c                6    V P                  R V RV 2RV/4      # )r   z/field/valuer   )r|   r   r  r  s   &&&&r   set_custom_fieldClickUpAPI.set_custom_fieldL  s%    zzE''(<w>NOOr   c                &   < V ^8  d   QhRS[ RS[/# r   rv   )r   rw   s   "r   r   rx   Q  s     4 4 4 4r   c                ,    V P                  R V R24      # )r   /commentr   r   s   &&r   get_task_commentsClickUpAPI.get_task_commentsQ  s    yy5	233r   c                ,   < V ^8  d   QhRS[ RS[ RS[/# )r	   r   commentr
   rv   )r   rw   s   "r   r   rx   T  s'     P P3 P P Pr   c                2    V P                  R V R2RV/4      # )r   r  comment_textr   )r|   r   r  s   &&&r   add_commentClickUpAPI.add_commentT  s!    zzE'(3ng5NOOr   r{   rz   )NNNN    F)NNNNNNN)NNr   )__name__
__module____qualname____firstlineno__r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r	  r  r  r  r  __static_attributes____classdictcell__)rw   s   @r   rt   rt      s	     I IF FE E= =
! !! !
G G. .
L L0 0
L LJ J, ,
9 9J J8 8*2 2./ /
7 72 2P P
4 4P Pr   rt   c                0    V ^8  d   QhR\         R\         /# )r	   taskr
   r   )r   s   "r   r   r   \  s      4 D r   c                   RpV P                  R4      '       d>    \        P                  ! \        V R,          4      R,          4      P	                  R4      pRV P                  R4      RV P                  R4      R\        V P                  R4      \        4      '       d"   V P                  R/ 4      P                  R4      MV P                  R4      R\        V P                  R4      \        4      '       d"   V P                  R/ 4      P                  R4      MRRTR	V P                  R	. 4       Uu. uF-  q"P                  R
4      ;'       g    VP                  RR4      NK/  	  upRV P                  R4      R\        V P                  R4      \        4      '       d#   V P                  R/ 4      P                  R4      /# R/#   \
         d    T R,          p ELi ; iu upi )z!Return a clean summary of a task.Nr     %Y-%m-%dr   r   r   r   r   usernameemailr)   ra   r   )r   r   fromtimestampr=   strftimer[   
isinstancer   )r(  dueas   &  r   fmt_task_summaryr3  \  s   
Cxx
	#((T*-=)>)EFOOPZ[C
 	dhhtn *TXXhEWY]:^:^$((8R(,,X6dhdldlmudv
488T^K_ae@f@fDHHZ,00<lpCtxxP[]_G`aG`!eeJ'==155"+==G`atxxJtxx?OQU4V4V$((0	 	 ]a	 	  	#z"C	# bs   <G  /GG GGc                0    V ^8  d   QhR\         R\        /# r	   sr
   r'   r=   )r   s   "r   r   r   q  s      c c r   c                   . ROpV P                  4       p V P                  4       R8X  dF   \        \        P                  ! 4       P                  ^^;^;R7      P                  4       R,          4      # V P                  4       R8X  d\   ^ RIHp \        P                  ! 4       V! ^R7      ,           p\        VP                  ^^;^;R7      P                  4       R,          4      # R F8  p \        \        P                  ! W4      P                  4       R,          4      u # 	  \        \        P                  ! RRV  2R	R
/4      \        P                  R7       \        P                  ! ^4       R#   \         d     K  i ; i)z)Parse a date string to Unix ms timestamp.tomorrowtoday)hourminutesecondr*  )	timedelta)daysr+   zCannot parse date: rK   zUse YYYY-MM-DD formatr.   N)r+  %m/%d/%Y%d/%m/%Yr9  r:  )r+  r@  rA  z%Y/%m/%d)stripr   r=   r   nowrE   	timestampr>  strptime
ValueErrorr0   r   r1   r2   r3   r4   )r6  formatsr>  dfmts   &    r   parse_due_daterJ  q  s!   GG		AwwyG8<<>))r"R)HRRTW[[\\wwyJ&LLNYA..199"R9;EEG$NOO?	x((0::<tCDD @ 
$**g!4QC8&BYZ
[zzHHQK  		s   %3E++E:9E:urgenthighnormallow1234c                0    V ^8  d   QhR\         R\        /# r5  r7  )r   s   "r   r   r     s     	 	c 	c 	r   c                "   \         P                  V P                  4       4      pVfh   \        \        P
                  ! RRV  2R\        \         P                  4       4      /4      \        P                  R7       \        P                  ! ^4       V# )z/Convert priority name or number to ClickUp int.r+   zInvalid priority: valid_valuesr.   )PRIORITY_MAPr   r   r0   r   r1   r   keysr2   r3   r4   )r6  vals   & r   parse_priorityrY    sp    


1779
%C
{djj)!-D!2!2!45
  	 	Jr   c                $    V ^8  d   QhR\         /# r	   apirt   )r   s   "r   r   r     s      J r   c                 <    V P                  4       p\        V4       R # rz   )r   rr   )r\  args_configr:   s   &&& r   
cmd_whoamira    s    <<>D
4Lr   c                $    V ^8  d   QhR\         /# r[  r]  )r   s   "r   r   r     s      
 r   c                     V P                  4       pVP                  R . 4      pV Uu. uF2  pRVR,          RVR,          R\        VP                  R. 4      4      /NK4  	  pp\        V4       R# u upi )r   r   r   membersN)r   r   lenrr   )r\  r_  r`  r:   r   tresults   &&&    r   cmd_workspacesrh    sj    DHHWb!E`ef`e[\tQtWfaiCiQS@T<UV`eFf
6N gs   8A.c                $    V ^8  d   QhR\         /# r[  r]  )r   s   "r   r   r           J r   c                 "   \        VR R4      ;'       g    VP                  R 4      pV P                  V4      pVP                  R. 4      pV Uu. uF)  pRVR,          RVR,          RVP                  RR4      /NK+  	  pp\        V4       R# u upi )r   Nspacesr   r   privateF)getattrr   r   rr   )r\  r_  r    r#   r:   rl  r6  rg  s   &&&     r   
cmd_spacesro    s    D.$/MM6::n3ME>>% DXXh#F^de^dYZtQtWfaiAEE)U<ST^dFe
6N fs   /Bc                $    V ^8  d   QhR\         /# r[  r]  )r   s   "r   r   r     s     
 
j 
r   c                    \        VR R4      ;'       g    VP                  R4      pV'       gJ   \        \        P                  ! RRRR/4      \
        P                  R7       \
        P                  ! ^4       V P                  V4      pVP                  R. 4      pV Uu. uFD  pR	VR	,          R
VR
,          RVP                  R^ 4      R\        VP                  R. 4      4      /NKF  	  pp\        V4       R# u upi )r$   Nr   r+   zspace_id requiredrK   zclickup projects [space_id]r.   foldersr   r   
task_count
list_countlists)rn  r   r0   r   r1   r2   r3   r4   r   re  rr   )r\  r_  r    r$   r:   rr  r"   rg  s   &&&     r   cmd_projectsrv    s    tZ.PP&**=O2PHdjj'#6@]^_::	??8$Dhhy"%G?FH?F! QtWfaiquu\ST?USw!346?F  H
6NHs   A
C8c                $    V ^8  d   QhR\         /# r[  r]  )r   s   "r   r   r     s      : r   c                 V   \        VR R4      p\        VRR4      ;'       g    VP                  R4      pV'       d%   V P                  V4      pVP                  R. 4      pMsV'       d%   V P                  V4      pVP                  R. 4      pMG\	        \
        P                  ! RR/4      \        P                  R7       \        P                  ! ^4       X Uu. uF:  pRVR,          R	VR	,          R
VP                  R
^ 4      RVP                  R4      /NK<  	  pp\        V4       R# u upi )r   Nr$   r   ru  r+   zfolder_id or space_id requiredr.   r   r   rs  r   )rn  r   r   r   r0   r   r1   r2   r3   r4   rr   )	r\  r_  r    r   r$   r:   ru  lrg  s	   &&&      r   	cmd_listsrz    s    k40ItZ.PP&**=O2PH}}Y'"%	''1"%djj'#CDECJJW 49:38a QtWfaiquu\ST?Ux*38  :
6N:s   A D&c                $    V ^8  d   QhR\         /# r[  r]  )r   s   "r   r   r     s      : r   c           
         \        VR R4      pV'       g   VP                  R/ 4      pV'       d&   \        \        VP	                  4       4      4      pTpMI\        \        P                  ! RRRR/4      \        P                  R7       \        P                  ! ^4       VP                  R/ 4      pW49   d	   WC,          pV P                  V\        VRR4      \        VR	R4      \        VR
R4      R7      pVP                  R. 4      p\        VRR4      '       d   V Uu. uF  p\        V4      NK  	  p	pMTp	\        V	4       R# u upi )r   Nlist_mappingsr+   zlist_id requiredrK   z%clickup tasks [list_id] --status openr.   r   r   r   F)r   r   r   taskssummary)rn  r   nextitervaluesr0   r   r1   r2   r3   r4   r   r3  rr   )
r\  r_  r    r   	lists_mapfirstr:   r~  rf  rg  s
   &&&       r   	cmd_tasksr    s   dIt,GJJ3	i..012EG$**g'96Cjklzz#HHQK 

?B/I$==tXt,z40z51	  D HHWb!EtY&&/45u!"1%u5
6N	 6s   Ec                $    V ^8  d   QhR\         /# r[  r]  )r   s   "r   r   r     s      * r   c                     VP                   pV P                  V4      p\        VR R4      '       d   \        \	        V4      4       R# \        V4       R# )r  FN)r   r   rn  rr   r3  r\  r_  r    r   r:   s   &&&  r   cmd_taskr    s=    llG<< DtY&&%&tr   c                $    V ^8  d   QhR\         /# r[  r]  )r   s   "r   r   r     s     *f *fJ *fr   c                    VP                   pV'       gJ   \        \        P                  ! R RRR/4      \        P
                  R7       \        P                  ! ^4       VP                  R/ 4      pW49   d	   WC,          pVP                  '       gH   \        \        P                  ! R R/4      \        P
                  R7       \        P                  ! ^4       Rp\        VRR4      '       d   \        VP                  4      pRp\        VR	R4      '       d   \        VP                  4      p. p\        VR
R4      '       dK   VP                  P                  R4       Uu. uF%  qP!                  4       '       g   K  \#        V4      NK'  	  pp. p	\        VRR4      '       dP   VP$                  P                  R4       U
u. uF*  qP!                  4       '       g   K  V
P!                  4       NK,  	  p	p
V P'                  VVP                  \        VRR4      \        VRR4      VVVV	R7      p\)        RRRVP                  R4      RVP                  R4      RVP                  R4      /4       R# u upi u up
i )r+   z--list requiredrK   z/clickup create --list LIST_ID --title 'My Task'r.   r}  z--title requiredNr1  r   r   r  r   r   r   )r   r   r   r   r   r   r   createdTr   r   ra   )r   r0   r   r1   r2   r3   r4   r   r   rn  rJ  r1  rY  r   r   splitrB  r=   r   r   rr   )r\  r_  r    r   r  due_date_mspriority_intr   r2  r   rf  r:   s   &&&         r   
cmd_creater    s   iiGdjj'#4f>opq::	 

?B/I$:::djj'#567cjjIKtUD!!$TXX.LtZ&&%dmm4ItZ&&%)]]%8%8%=K%=VSV%=	KDtVT""#'99??3#7E#7a779		#7E??jjD-6tXt,  	D ItT488D>6488F;KUTXT\T\]bTcde! L Fs   I)9I)<I.I.c                $    V ^8  d   QhR\         /# r[  r]  )r   s   "r   r   r   '  s     !f !fJ !fr   c                    VP                   pV'       gJ   \        \        P                  ! R RRR/4      \        P
                  R7       \        P                  ! ^4       Rp\        VRR4      '       d   \        VP                  4      pRp\        VRR4      '       d   \        VP                  4      p. p\        VRR4      '       dK   VP                  P                  R	4       Uu. uF%  qwP                  4       '       g   K  \        V4      NK'  	  pp. p\        VR
R4      '       dK   VP                   P                  R	4       Uu. uF%  qwP                  4       '       g   K  \        V4      NK'  	  ppV P#                  V\        VRR4      \        VRR4      \        VRR4      VVVVR7      p	\%        RRRV	P'                  R4      RV	P'                  R4      RV	P'                  R4      /4       R# u upi u upi )r+   ztask_id requiredrK   z$clickup update TASK_ID --status doner.   Nr1  r   add_assigneer  remove_assigneer   r   r   )r   r   r   r   r   r   r   updatedTr   r   ra   )r   r0   r   r1   r2   r3   r4   rn  rJ  r1  rY  r   r  r  rB  r=   r  r   rr   r   )
r\  r_  r    r   r  r  r   r2  r   r:   s
   &&&       r   
cmd_updater  '  s   llGdjj'#5v?efg::	KtUD!!$TXX.LtZ&&%dmm4Mt^T**)-):):)@)@)ES)EAQ)ESMt&--)-)=)=)C)CC)HV)HAGGIQ)HV??dGT*D-6tXt,##  	D ItT488D>6488F;KUTXT\T\]bTcde! T Ws   $G, G,G1G1c                $    V ^8  d   QhR\         /# r[  r]  )r   s   "r   r   r   K  s      J r   c                    VP                   p\        VR R4      '       d#   V P                  V4       \        RRRV/4       R	# \	        \
        P                  ! RRRV/4      \        P                  R7       \        P                  ! ^4       R	# )
confirmFdeletedTr   r+   zAdd --confirm to deleter   r.   N)
r   rn  r   rr   r0   r   r1   r2   r3   r4   )r\  r_  r    r   s   &&& r   
cmd_deleter  K  sf    llGtY&& 	4w/0djj'#<iQRY\YcYcdr   c                $    V ^8  d   QhR\         /# r[  r]  )r   s   "r   r   r   U  s      J r   c                    \        VR R4      ;'       g    VP                  R 4      pV'       g   V P                  4       pVP                  R4      '       d   VR,          ^ ,          R,          pMG\        \        P
                  ! RR/4      \        P                  R7       \        P                  ! ^4       Rp\        VRR4      '       d   VP                  .pRp\        VRR4      '       d   VP                  .pV P                  W1P                  WVR	7      pVP                  R
. 4      p\        VRR4      '       d'   \        V U	u. uF  p	\        V	4      NK  	  up	4       R# \        V4       R# u up	i )r   Nr   r   r+   zworkspace_id requiredr.   spacer   )r  r  r~  r  F)rn  r   r   r0   r   r1   r2   r3   r4   r  r   r	  r  rr   r3  )
r\  r_  r    r#   r   r  r  r:   r~  rf  s
   &&&       r   
cmd_searchr  U  s   D.$/MM6::n3ME""$99W'N1%d+E$**g'>?@szzRHHQKItWd##ZZL	HtXt$$KK=E::VDHHWb!EtY&&U3U #U34u 4s   E.c                $    V ^8  d   QhR\         /# r[  r]  )r   s   "r   r   r   q  s      Z r   c                     VP                   p\        VR R4      '       d<   V P                  W1P                  4      p\	        RRRVP                  R4      /4       R# V P                  V4      p\	        V4       R# )r   N	commentedT
comment_idr   )r   rn  r  r   rr   r   r  r  s   &&&  r   cmd_commentr  q  s\    llGtUD!!w1T<$@A$$W-tr   c                $    V ^8  d   QhR\         /# r[  r]  )r   s   "r   r   r   {  rj  r   c                     VP                   pV P                  V4      pVP                  R . 4      pV Uu. uF(  pRVR,          RVR,          RVP                  R4      /NK*  	  pp\        V4       R# u upi )fieldsr   r   typeN)r   r  r   rr   )r\  r_  r    r   r:   r  r"   rg  s   &&&     r   
cmd_fieldsr  {  sk    llG%%g.DXXh#FQWXQWAtQtWfaivGQWFX
6N Ys   .A1c                $    V ^8  d   QhR\         /# r[  r]  )r   s   "r   r   r     s        J  r   c                >   VP                   p\        VRR4      pV P                  V\        VRR4      R7      pVP                  R. 4      pVR8X  d   ^ RIp^ RIpVP                  4       p	VP                  V	. ROR7      p
V
P                  4        V F:  p\        V4      pRP                  VR,          4      VR&   V
P                  V4       K<  	  \        V	P                  4       4       R# R\        P                  ! 4       P!                  R4       2R.pV F  p\        V4      pVP#                  RVR	,           24       VP#                  RVR,           24       VP#                  RVR,           24       VP#                  RVR
,           24       VP#                  RVR,           24       VP#                  RRP                  VR,          4       24       VP#                  RVR,           24       VP#                  R4       K  	  \        RP                  V4      4       R# )z,Export tasks from a list to markdown or CSV.r   markdownr   N)r   r~  csvr   r   r   r   r   ra   )
fieldnamesz; u   # ClickUp Tasks — r+  r)   z## z
- **ID:** z- **Status:** z- **Priority:** z- **Due:** z- **Assignees:** z, z- **URL:** 
)r   r   r   r   r   r   ra   )r   rn  r   r   r  ioStringIO
DictWriterwriteheaderr3  r  writerowr0   getvaluer   rC  r/  append)r\  r_  r    r   rI  r:   r~  r  r  bufwriterrf  r6  liness   &&&           r   
cmd_exportr    s   llG
$*
-C==x)F=GDHHWb!E
e|kkm0tuA #A!YYq~6AkNOOA  	clln ((?(?
(K'LMrRA #ALL3qyk*+LL:agY/0LL>!H+78LL+AjM?;<LL;q}o67LL,TYYq~-F,GHILL;qxj12LL  	diir   c                    \        V4      pRV9   d,   VR,          R,          R,           VR,          RR ,           VR&   \        V4       R# )z(Show current config (redacting API key).r   :N   Nz...N)r   rr   )r\  r_  r    safes   &&& r   cmd_config_showr    sA    <DDy/"-5Y8LLY
4Lr   c                   \         P                  ! 4       R,          R,          R,          pVP                  P                  RRR7       RRRR	R
R	RRRRR//pVP	                  4       '       dh   \        VRR4      '       gU   \        \        P                  ! RRR\        V4      RR/4      \        P                  R7       \        P                  ! ^4       \        VR4      ;_uu_ 4       p\        P                  ! WE^R7       RRR4       VP                  R4       \!        RRR\        V4      RR/4       R#   + '       g   i     L=; i)z4Create config file at ~/.config/clickup/config.json.r   r   r   T)parentsexist_okr   r*   r   r)   r   r}  todoLIST_ID_HEREbacklogforceFr+   zConfig already existsr!   rK   zUse --force to overwriter.   wrp   Ni  r  r  z"Edit the file and add your API key)r   homeparentmkdirr   rn  r0   r   r1   r'   r2   r3   r4   r   dumpchmodrr   )r\  r_  r    r!   templater"   s   &&&   r   cmd_config_initr    s   99;"Y.>DKKdT2&BN~
	H {{}}WT7E::djj'#:FCI "<> ?EHZZ	Q	dCA		(a( 
JJu
ItVSY8\]^ 
s   'D55E	c                  j	   \         P                  ! R R\         P                  RR7      p V P                  RRR7      pVP	                  RRR	7      pVP	                  R
RR	7      pVP	                  RRR	7      pVP                  RRRR7       VP	                  RRR	7      pVP                  RRRR7       VP	                  RRR	7      pVP                  RRRR7       VP                  RRRR7       VP	                  RRR	7      pVP                  RRRR7       VP                  R R!R	7       VP                  R"R#R	7       VP                  R$R%R&R'7       VP                  R(R%R)R'7       VP	                  R*R+R	7      pVP                  R,R-R	7       VP                  R(R%R)R'7       VP	                  R.R/R	7      p	V	P                  R0R1R2R3R47       V	P                  R5R1R6R77       V	P                  R8R9R	7       V	P                  R R:R	7       V	P                  R;R<R	7       V	P                  R=R>R	7       V	P                  R"R?R	7       V	P                  R@RAR	7       VP	                  RBRCR	7      p
V
P                  R,RDR	7       V
P                  R5RER	7       V
P                  R8RFR	7       V
P                  R RGR	7       V
P                  R;RHR	7       V
P                  R=RIR	7       V
P                  RJRKRLR7       V
P                  RMRNROR7       VP	                  RPRQR	7      pVP                  R,RRR	7       VP                  RSR%RTR'7       VP	                  RURVR	7      pVP                  RWR1RXR77       VP                  RRYRZR7       VP                  R R[R	7       VP                  R\RR]R7       VP                  R(R%R)R'7       VP	                  R^R_R	7      pVP                  R,R-R	7       VP                  R`RaR	7       VP	                  RbRcR	7      pVP                  RRR	7       VP	                  RdReR	7      pVP                  RRR	7       VP                  RfRgRh.RgRiRj7       VP                  R R[R	7       VP	                  RkRlR	7      pVP                  RmRn7      pVP	                  RoRpR	7      pVP                  RqR%RrR'7       VP	                  RsRtR	7       V # )ur   u7   ClickUp CLI for OpenClaw — full read/write API accessa  
Examples:
  clickup spaces
  clickup projects 90131082312
  clickup lists 90131082312 --space
  clickup tasks 901303874101 --status open --summary
  clickup task abc123xyz
  clickup create --list 901303874101 --title "Review PR" --due 2026-03-01 --priority high
  clickup update abc123xyz --status done
  clickup search --query "bug fix" --status open
  clickup comment abc123xyz --add "Looks good!"
  clickup export 901303874101 --format csv

Config:
  clickup config init       # create ~/.config/clickup/config.json
  clickup config show       # show current config

Environment:
  CLICKUP_API_KEY           # API key
  CLICKUP_WORKSPACE_ID      # default workspace
  CLICKUP_SPACE_ID          # default space
)progr   formatter_classepilogcommandCommand)desthelpwhoamizShow authenticated user)r  
workspaceszList workspaces/teamsrl  zList spaces in workspacer   r@   z%Workspace ID (uses config if omitted))nargsr  projectsz"List projects (folders) in a spacer$   z)Space ID (uses config default if omitted)ru  zList lists in a folder or spacer   zFolder/project IDz--spacezSpace ID (for folderless lists)r~  zList tasks in a listr   zList IDz--statusz/Filter by status (e.g. open, done, in progress)z
--assigneezFilter by assignee user IDz
--subtasks
store_truezInclude subtasks)actionr  z	--summaryzReturn summary formatr(  zGet details of a single taskr   zTask IDcreatezCreate a new taskz--listTr   zList ID or friendly name)requiredr  r  z--titlez
Task title)r  r  z--descriptionzTask descriptionzInitial statusz
--priorityz'Priority: urgent/high/normal/low or 1-4z--duez*Due date: YYYY-MM-DD or 'today'/'tomorrow'z$Assignee user ID(s), comma-separatedz--tagszTags, comma-separatedupdatezUpdate a taskzTask ID to updatez	New titlezNew descriptionz1New status (e.g. open, in progress, done, closed)z+New priority: urgent/high/normal/low or 1-4z.New due date: YYYY-MM-DD or 'today'/'tomorrow'z--add-assigneer  zAdd assignee user ID(s)z--remove-assigneer  zRemove assignee user ID(s)deletez"Delete a task (requires --confirm)zTask ID to deletez	--confirmzConfirm deletion (required)searchzSearch tasks across workspacez--queryzSearch query stringr  zLimit to space IDzFilter by statusz--workspacezWorkspace IDr  zGet or add task commentsz--addzAdd a comment (text)r  zList custom fields for a listexportzExport tasks to markdown or CSVz--formatr  r  zOutput format)choicesdefaultr  r    zConfig managementconfig_action)r  initzCreate config filez--forcezOverwrite existing configshowzShow current config)argparseArgumentParserRawDescriptionHelpFormatteradd_subparsers
add_parseradd_argument)parsersubp_whop_wsp_spacesp_projp_listsp_tasksp_taskp_createp_updatep_delp_search	p_commentp_fieldsp_exportp_configp_config_subp_config_inits                      r   build_parserr    s   $$M <<	F8 

YY

?C NN8*CNDE >>,-D>ED ~~h-G~HH.:ab ^^J-Q^RF

#4_` nnW+LnMGC6IJ:[\ nnW+AnBG#I>*[\,HIlAST\@WX ^^F)G^HF
		2
L?VW ~~h-@~AH(TE_`)dF/0BC*+;<,-VW'(TU,-ST()@A ~~h_~=H)*=>)+6/0AB*+^_,-Z['(XY*F_`-4ELhi NN8*NNOE	y':;	{<>[\ ~~h-L~MH)d9NO)'8KL*+=>-n>R+lAXY y/IJI9957)?@ ~~h-L~MH))4 ~~h-N~OH))4*z5.A:\kl*+=> ~~h-@~AH***@L ++F9M+NMyD_`F)>?Mr   r  r  rl  r  ru  r~  r(  r  r  r  r  r  r  r  c                  R   \        4       p V P                  4       pVP                  '       g'   V P                  4        \        P
                  ! ^ 4       \        4       pVP                  R8X  dL   VP                  R8X  d   \        RW4       R# VP                  R8X  d   \        RW4       R# \        R4       R# \        V4      p\        W24      p\        P                  VP                  4      pV'       d   V! WAV4       R# V P                  4        \        P
                  ! ^4       R# )r   r    r  Nr  z!Usage: clickup config [init|show])r  
parse_argsr  
print_helpr2   r4   r%   r  r  r  r0   r6   rt   COMMAND_MAPr   )r  r_  r    r   r\  fns         r   mainr  Y  s    ^FD<<<]F ||x'D$/
 		 6)D$/ 	 56&!G
W
%C		&B	
3fr   __main__)NN   )T)/__doc__r  r   r   r2   r\   urllib.requestrN   urllib.errorurllib.parser   pathlibr   r  __file__r  r   rL   r%   r6   rk   rr   rt   r3  rJ  rV  rY  ra  rh  ro  rv  rz  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r!   r   r   <module>r     s     	 
       	IIK)i'-7NM)
 ,,
"]@ \P \PF*. !VQ!UAsAsAsTUWZ\]^	 

&D*fZ!fH8 D_6x@ j.jYY
Hjjjj{jj$> zF r   