
    i                     t   d Z ddlmZmZmZ ddlmZmZmZ ddl	m
Z
mZ ddlmZ d  ej                    D             Zdded	ee         d
ee         fdZddedee         d	ee         fdZd
ee         fdZdee         d
ee         fdZd
ee         fdZdee         dee         d
ee         fdZddZdS )a{  
Skills configuration for Hermes Agent.
`hermes skills` enters this module.

Toggle individual skills or categories on/off, globally or per-platform.
Config stored in ~/.hermes/config.yaml under:

  skills:
    disabled: [skill-a, skill-b]          # global disabled list
    platform_disabled:                    # per-platform overrides
      telegram: [skill-c]
      cli: []
    )ListOptionalSet)cfg_getload_configsave_config)Colorscolor)	PLATFORMSc                 0    i | ]\  }}|d k    ||j         S )
api_server)label).0kinfos      7/usr/local/lib/hermes-agent/hermes_cli/skills_config.py
<dictcomp>r      s*    RRRwq$\@Q@QQ
@Q@Q@Q    Nconfigplatformreturnc                     |                      di           }t          |                     dg                     }||S t          |d|          }||S t          |          S )zIReturn disabled skill names. Platform-specific list falls back to global.skillsdisabledNplatform_disabled)getsetr   )r   r   
skills_cfgglobal_disabledr   s        r   get_disabled_skillsr       sj    Hb))J*..R8899O
,?JJ  !!!r   r   c                     |                      di            |t          |          | d         d<   n:| d                              di            t          |          | d         d         |<   t          |            dS )z'Persist disabled skill names to config.r   Nr   r   )
setdefaultsortedr   )r   r   r   s      r   save_disabled_skillsr$   '   s    
h###'-h'7'7x$$x##$7<<<:@:J:Jx,-h7r   c                  L    	 ddl m}   | d          S # t          $ r g cY S w xY w)z6Return all installed skills (ignoring disabled state).r   _find_all_skillsT)skip_disabled)tools.skills_toolr'   	Exceptionr&   s    r   _list_all_skillsr+   4   sQ    666666d3333   			s    ##r   c                 4    t          d | D                       S )z>Return sorted unique category names (None -> 'uncategorized').c                 "    h | ]}|d          pdS )categoryuncategorized r   ss     r   	<setcomp>z"_get_categories.<locals>.<setcomp>?   s!    DDD1Z=3ODDDr   )r#   )r   s    r   _get_categoriesr4   =   s    DDVDDDEEEr   c                     dgt          t                                                    z   } t                       t          t	          dt
          j                             t          | d          D ]\  }\  }}t          d| d|            t                       	 t          t	          dt
          j	                            
                                }n# t          t          f$ r Y dS w xY w|sdS 	 t          |          dz
  }d|cxk    rt          |           k     rn n| |         d         }|d	k    rdn|S n# t          $ r Y nw xY wdS )
z0Ask user which platform to configure, or global.)globalzAll platforms (global default)z  Configure skills for:   z  z.   Select [1]: Nr   r6   )listr   itemsprintr
   r	   BOLD	enumerateinputYELLOWstripKeyboardInterruptEOFErrorintlen
ValueError)optionsikeyr   rawidxs         r   _select_platformrK   D   ss   ;<tIOODUDU?V?VVG	GGG	%)6;
7
7888$Wa00 ! !<C1    	GGGE*FM::;;AACCx(   tt t#hhl""""c'll"""""#,q/C(??443   4s%   9C C,+C,4AD< <
E	E	c                   
 ddl m} t          |           }g }t                      }t	          |          D ]k\  }

fd| D             }|                    
 dt          |           d           t          fd|D                       s|                    |           l |d|||          }t                    }	t	          |          D ]"\  }

fd	| D             }||v r|	|z  }	|	|z  }	#|	S )
z(Toggle all skills in a category at once.r   curses_checklistc                 <    g | ]}|d          pdk    |d         S r.   r/   namer0   r   r2   cats     r   
<listcomp>z'_toggle_by_category.<locals>.<listcomp>g   1    ]]]AAjM4T_Y\3\3\ai3\3\3\r   z (z skills)c              3       K   | ]}|v V  	d S Nr0   )r   r2   r   s     r   	<genexpr>z&_toggle_by_category.<locals>.<genexpr>i   s'      55Q1=555555r   u'   Categories — toggle entire categoriescancel_returnsc                 <    h | ]}|d          pdk    |d         S rP   r0   rR   s     r   r3   z&_toggle_by_category.<locals>.<setcomp>s   rU   r   )	hermes_cli.curses_uirN   r4   r   r=   appendrD   alladd)r   r   rN   
categories
cat_labelspre_selectedrG   
cat_skillschosennew_disabledrS   s    `        @r   _toggle_by_categoryrf   ^   sS   555555 ((JJ55LJ''    3]]]]]]]
S==C
OO===>>>5555*55555 	 Q1L  F
 x==LJ'' ' '3]]]]]]]
;;J&LLJ&LLr   c                   
 ddl m} t                      }t                      s)t	          t          dt          j                             dS t                      }|rt          
                    |d          nd}t	                       t	          t          d| t          j                             t	                       t	          d           t	          d           t	                       	 t          t          d	t          j                                                            pd
}n# t          t          f$ r Y dS w xY wt!          ||          |dk    rt#                    }nbd D             }fdt%                    D             } |d| |||          

fdt'          t)                              D             }|k    r)t	          t          dt          j                             dS t+          |||           t)                    t)          |          z
  }	t	          t          d|	 dt)          |           d| dt          j                             dS )z Entry point for `hermes skills`.r   rM   z  No skills installed.NzAll platformsz  Configure for: z  1. Toggle individual skillsz  2. Toggle by categoryr8   12c           	      Z    g | ](}|d           d|d         pd d|d         dd          )S )rQ   z  (r.   r/   u   )  —  descriptionN7   r0   r1   s     r   rT   z"skills_command.<locals>.<listcomp>   s\     
 
 
 y^^Qz]=o^^qGWX[Y[X[G\^^
 
 
r   c                 .    h | ]\  }}|d          v|S rQ   r0   )r   rG   r2   r   s      r   r3   z!skills_command.<locals>.<setcomp>   s+    UUUda1V9H;T;T;T;T;Tr   zSkills for rY   c                 4    h | ]}|v|         d          S rn   r0   )r   rG   rd   r   s     r   r3   z!skills_command.<locals>.<setcomp>   s(    YYYaRXq	&)r   z  No changes.u   ✓ Saved: z
 enabled, z disabled (z).)r\   rN   r   r+   r;   r
   r	   DIMrK   r   r   r>   r?   r@   rA   rB   r    rf   r=   rangerD   r$   GREEN)argsrN   r   r   platform_labelmodere   labelsrb   enabled_countrd   r   r   s             @@@r   skills_commandrx   }   s   555555]]FF e,fj99:::  !!HAI^Y]]8_===N 
GGG	%4N44fj
A
ABBB	GGG	
)***	
#$$$	GGGU+V];;<<BBDDKx(    #6844Hs{{*68<<
 

 
 

 VUUUi&7&7UUU!!*.**L
 
 

 ZYYYY5V3E3EYYYxeOVZ00111x888KK#l"3"33M	%gmggs<7H7HggUcgggioiu
v
vwwwwws   1;D- -EErW   )__doc__typingr   r   r   hermes_cli.configr   r   r   hermes_cli.colorsr	   r
   hermes_cli.platformsr   
_PLATFORMSr:   dictstrr    r$   r+   r4   rK   rf   rx   r0   r   r   <module>r      s    ' & & & & & & & & & ? ? ? ? ? ? ? ? ? ? + + + + + + + + 8 8 8 8 8 8
 SR*:**:*<*<RRR		" 	" 	" 	"S 	" 	" 	" 	"  S Xc]    $t*    FDJ F49 F F F F(3-    4T
 c#h 3s8    >4x 4x 4x 4x 4x 4xr   