
    PL
j-                     l   d Z ddlZddlZddlmZ ddlmZmZmZ  ee	          j
        j
                                        Zej                            d ee                     ddlmZmZ ddeee                  deee                  fdZd	 ZddefdZd Zd Zd Zd ZdedededefdZd ZdS )z
Cron subcommand for hermes CLI.

Handles standalone cron management commands like list, create, edit,
pause/resume/run/remove, status, and tick.
    N)Path)IterableListOptional)Colorscolorskillsreturnc                     || d S | g}nt          |          }g }|D ]@}t          |pd                                          }|r||vr|                    |           A|S )N )liststrstripappend)single_skillr	   	raw_items
normalizeditemtexts         3/home/kuhnn/.hermes/hermes-agent/hermes_cli/cron.py_normalize_skillsr      s    ~4!N		LL	J $ $4:2$$&& 	$D
**d###    c                  B    ddl m} t          j         |di |           S )Nr   )cronjob )tools.cronjob_toolsr   jsonloads)kwargscronjob_tools     r   	_cron_apir!   #   s4    ;;;;;;:ll,,V,,---r   Fshow_allc           	      x   ddl m}  ||           }|sPt          t          dt          j                             t          t          dt          j                             dS t                       t          t          dt          j                             t          t          dt          j                             t          t          d	t          j                             t                       |D ]+}|                    d
d          }|                    dd          }|                    d|                    di                               dd                    }|                    d|                    dd          rdnd          }|                    dd          }|                    di           }	|	                    d          }
|	                    dd          }|
r| d|
 nd}|                    ddg          }t          |t                    r|g}d
                    |          }|                    d          p|                    d           r	|d          gng }|dk    rt          d!t          j                  }nl|dk    rt          d"t          j                  }nK|                    dd          rt          d#t          j                  }nt          d$t          j                  }t          d%t          |t          j                   d&|            t          d'|            t          d(|            t          d)|            t          d*|            t          d+|            |r%t          d,d
                    |                      |                    d-          }|rt          d.|            |                    d/          r+t          d0t          d1t          j                   d2           |                    d3          }|rt          d4|            |                    d5          }|r|                    d6d          }|d7k    rt          d7t          j                  }n3t          | d8|                    d9d           t          j                  }t          d:| d%|            |                    d;          }|r-t          d<t          d=t          j                   d&|            t                       -dd>lm}  |            st          t          d?t          j                             t          t          d@t          j                             t          t          dAt          j                             t                       dS dS )BzList all scheduled jobs.r   	list_jobsinclude_disabledzNo scheduled jobs.zFCreate one with 'hermes cron create ...' or the /cron command in chat.Nu   ┌─────────────────────────────────────────────────────────────────────────┐uO   │                         Scheduled Jobs                                  │u   └─────────────────────────────────────────────────────────────────────────┘id?namez	(unnamed)schedule_displayschedulevaluestateenabledT	scheduledpausednext_run_atrepeattimes	completed/u   ∞deliverlocal, r	   skillz[paused]z[completed]z[active]z
[disabled]   z    Name:      z    Schedule:  z    Repeat:    z    Next run:  z    Deliver:   z    Skills:    scriptz    Script:    no_agentz    Mode:      zno-agentz# (script stdout delivered directly)workdirz    Workdir:   last_statuslast_run_atokz: 
last_errorz    Last run:  last_delivery_errorz    u   ⚠ Delivery failed:find_gateway_pidsu@     ⚠  Gateway is not running — jobs won't fire automatically.z*     Start it with: hermes gateway installzI                    sudo hermes gateway install --system  # Linux servers)	cron.jobsr%   printr   r   DIMCYANget
isinstancer   joinYELLOWBLUEGREENREDhermes_cli.gatewayrF   )r"   r%   jobsjobjob_idr*   r,   r.   next_runrepeat_inforepeat_timesrepeat_completed
repeat_strr7   deliver_strr	   statusr=   r?   r@   last_runstatus_displaydelivery_errrF   s                           r   	cron_listr`   )   s   ######9h///D e(&*55666e\^d^hiijjj	GGG	%  t  v|  vA  B  B  C  C  C	%acicn
o
oppp	%  t  v|  vA  B  B  C  C  C	GGG : :s##wwv{++77-swwz2/F/F/J/J7TW/X/XYY	40H0H!VhWW77=#..ggh++"w//&??;::=IT(99<999u
'')gY//gs## 	 iGii((""R9I9I'QG~~rH:v}55FFk!!=&+66FFWWY%% 	5:v|44FF<44F:5//::&::;;;&&&'''***+++,
,,---***+++---... 	97DIIf$5$577888"" 	.,F,,---77: 	hfE*fj$A$Afffggg'')$$ 	/-G--... ggm,, 	Bww}c22Hd""!&tV\!:!:!&+'U'Us9S9S'U'UW]Wa!b!b@H@@@@AAAww455 	XV5v}EEVVVVWWW444444 eVX^Xeffggge@&*MMNNNe_agakllmmm	 r   c                  *    ddl m}   | d           dS )zRun due jobs once and exit.r   tickT)verboseN)cron.schedulerrc   rb   s    r   	cron_tickrf   ~   s-    ######Dr   c            	         ddl m}  ddlm} t	                        |            }|r`t	          t          dt          j                             t	          dd                    t          t          |                                nqt	          t          dt          j                             t	                       t	          d           t	          d	           t	          d
           t	          d           t	                        | d          }|rNd |D             }t	          dt          |           d           |rt	          dt          |                      nt	          d           t	                       dS )zShow cron execution status.r   r$   rE   u<   ✓ Gateway is running — cron jobs will fire automaticallyz  PID: r9   u6   ✗ Gateway is not running — cron jobs will NOT firez   To enable automatic execution:z9    hermes gateway install    # Install as a user servicezS    sudo hermes gateway install --system  # Linux servers: boot-time system servicez4    hermes gateway            # Or run in foregroundFr&   c                 b    g | ],}|                     d           |                     d           -S )r2   )rK   ).0js     r   
<listcomp>zcron_status.<locals>.<listcomp>   s5    PPPa155;O;OPQUU=))PPPr   r;   z active job(s)  Next run: z  No active jobsN)rG   r%   rR   rF   rH   r   r   rP   rM   mapr   rQ   lenmin)r%   rF   pidsrS   	next_runss        r   cron_statusrr      s   ######444444	GGGD 	FeRTZT`aabbb3		#c4..11334444eLfjYYZZZ0111IJJJcdddDEEE	GGG9e,,,D "PP4PPP	,3t99,,,--- 	31Y11222 !!!	GGGGGr   c                    t          d| j        | j        t          | dd           t          | dd           t          | dd           t          | dd           t	          t          | dd           t          | dd                     t          | dd           t          | dd           t          | d	d
          pd           }|                    d          s@t          t          d|                    dd           t          j	                             dS t          t          d|d          t          j
                             t          d|d                     t          d|d                     |                    d          r+t          dd                    |d                               |                    di           }|                    d          rt          d|d                     |                    d	          rt          d           |                    d          rt          d|d                     t          d|d                     dS )Ncreater*   r7   r3   r:   r	   r=   r?   r>   F)actionr,   promptr*   r7   r3   r:   r	   r=   r?   r>   successzFailed to create job: errorunknown error   zCreated job: rU     Name:   Schedule: r,   
  Skills: r9   rT   
  Script: 3  Mode: no-agent (script stdout delivered directly)  Workdir: rl   r2   r   )r!   r,   rv   getattrr   rK   rH   r   r   rQ   rP   rM   )argsresultjob_datas      r   cron_creater      sX   {T64((i..tXt,,dGT** w!=!=wtXW[?\?\]]tXt,,i..z5119T  F ::i   eSVZZ-Q-QSSU[U_``aaaq	%2x 022FL
A
ABBB	
%VF^
%
%&&&	
-
+
-
-...zz( :8499VH%56688999zz%$$H||H 1/8H-//000||J ECDDD||I 31HY/11222	
0.
0
01111r   c                    ddl m}m} 	  || j                  }n# |$ rx}t	          t          t          |          t          j                             |j	        D ]1}t	          d|d          d|
                    d          d           2Y d }~dS d }~ww xY w|s1t	          t          d	| j         t          j                             dS t          |
                    d
          p,|
                    d          sg n|
                    d          g          }t          t          | dd           t          | d
d                     }t          d t          | dd                     pg }t          t          d t          | dd                     pg           d }	t          | dd          rg }	n5||}	n0|sr,fd|D             }	|D ]}
|
|	vr|	                    |
           t!          d| j        t          | dd           t          | dd           t          | dd           t          | dd           t          | dd           |	t          | dd           t          | dd           t          | dd                     }|
                    d          s@t	          t          d|
                    dd           t          j                             dS |d         }t	          t          d|d           t          j                             t	          d!|d                     t	          d"|d                     |
                    d
          r,t	          d#d$                    |d
                               nt	          d%           |
                    d          rt	          d&|d                     |
                    d          rt	          d'           |
                    d          rt	          d(|d                     dS ))Nr   )AmbiguousJobReferenceresolve_job_refr;   r(   z	  (name: r*   )rz   zJob not found: r	   r:   
add_skillsremove_skillsclear_skillsFc                     g | ]}|v|	S r   r   )ri   r:   r   s     r   rk   zcron_edit.<locals>.<listcomp>   s#    YYY%e=>X>X>X>X>Xr   updater,   rv   r7   r3   r=   r?   r>   )ru   rU   r,   rv   r*   r7   r3   r	   r=   r?   r>   rw   zFailed to update job: rx   ry   rT   zUpdated job: rU   r{   r|   r}   r9   z  Skills: noner~   r   r   )rG   r   r   rU   rH   r   r   r   rQ   matchesrK   r   r   r   setr   r!   rP   rM   )r   r   r   rT   excmexisting_skillsreplacement_skillsr   final_skillsr:   r   updatedr   s                @r   	cron_editr      sZ   @@@@@@@@odk**    eCHHfj))*** 	= 	=A;qw;;v;;;<<<<qqqqq	
  e3dk33VZ@@AAAq3778,,d3777;K;K1cRURYRYZaRbRbQceeO*74$+G+GQUW_aeIfIfgg"4|T)J)JKKQrJ)$ot0T0TUU[Y[\\MLt^U++ +		')	 +} +YYYY?YYY 	+ 	+EL((##E***{z400tXt,,T64((i..tXt,,tXt,,i..z400  F ::i   eSVZZ-Q-QSSU[U_``aaaqUmG	%3 133V\
B
BCCC	
&WV_
&
&'''	
.,
.
.///{{8  9499WX%67799::::{{8 0.78,..///{{: ECDDD{{9 20GI.001111s    BA-BBru   rU   success_verbc                 x   t          | |          }|                    d          sCt          t          d|  d|                    dd           t          j                             dS |                    d          p|                    d	          pi }t          t          | d|                    d
|           d| dt          j                             | dv rG|                    di                               d          rt          d|d         d                     | dk    rt          d           dS )N)ru   rU   rw   z
Failed to z job: rx   ry   rz   rT   removed_jobr*   z (r   >   runresumer2   rl   r   z)  It will run on the next scheduler tick.r   )r!   rK   rH   r   r   rQ   rP   )ru   rU   r   r   rT   s        r   _job_actionr     s:   fV444F::i   eUUUvzz'?/S/SUUW]Wabbcccq
**U


>vzz-88
>BC	%<KKswwvv'>'>KK&KKKV\
Z
Z[[["""vzz%'<'<'@'@'O'O";VE]=9;;<<<9:::1r   c                 j   t          | dd          }||dk    r"t          | dd          }t          |           dS |dk    rt                       dS |dk    rt                       dS |d	v rt	          |           S |d
k    rt          |           S |dk    rt          d| j        d          S |dk    rt          d| j        d          S |dk    rt          d| j        d          S |dv rt          d| j        d          S t          d|            t          d           t          j
        d           dS )zHandle cron subcommands.cron_commandNr   allFr   r\   rc   >   addrt   editpausePausedr   Resumedr   	Triggered>   rmdeleteremover   RemovedzUnknown cron command: zIUsage: hermes cron [list|create|edit|pause|resume|run|remove|status|tick]rz   )r   r`   rr   rf   r   r   r   rU   rH   sysexit)r   subcmdr"   s      r   r   r     s[   T>400F~6))4..(qqq"""4   7DK:::8T[)<<<5$+{;;;+++8T[)<<<	
+6
+
+,,,	
UVVVHQKKKKKr   )NN)F)__doc__r   r   pathlibr   typingr   r   r   __file__parentresolvePROJECT_ROOTpathinsertr   hermes_cli.colorsr   r   r   r!   boolr`   rf   rr   r   r   intr   r   r   r   r   <module>r      s     



       + + + + + + + + + +tH~~$+3355 33|$$ % % % + + + + + + + + (3-1H T\]abe]fTg     . . .R R R R R Rj    B  B= = =@ S      % % % % %r   