
    `gj}                        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  ej                         D  ci c]  \  } }| dk7  s| |j                    c}} Zdee   f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y	c c}} w )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)	PLATFORMS
api_serverreturnc                     | 
t               S t        | t              r| g} 	 | D ch c]5  }t        |      j                         st        |      j                         7 c}S c c}w # t        $ r t               cY S w xY w)u  Normalize a config value into a set of skill names.

    Mirrors ``agent.skill_utils._normalize_string_set``: ``None`` (YAML null)
    means empty, a bare scalar (``disabled: my-skill``) means a single-item
    list — NOT a set of its characters (#13026).
    )set
isinstancestrstrip	TypeError)valuesvs     K/root/.hermes/venv/lib/python3.12/site-packages/hermes_cli/skills_config.py_normalize_skill_namesr      sf     ~u&#(.A1#a&,,.AAAA us(   A' A"A"A' "A' 'A=<A=Nconfigplatformc                     | j                  d      xs i }t        |t              s
t               S t	        |j                  d            }||S t        |d|      }||S |t	        |      z  S )aD  Return disabled skill names: the global list unioned with the
    platform-specific list when a platform is given.

    A globally-disabled skill stays disabled on every platform, so the
    platform list adds to the global list rather than replacing it. This
    mirrors ``agent.skill_utils.get_disabled_skill_names``.
    skillsdisabledplatform_disabled)getr   dictr   r   r   )r   r   
skills_cfgglobal_disabledr   s        r   get_disabled_skillsr"   ,   su     H%+Jj$'u,Z^^J-GHO
,?J 34EFFF    r   c                     | j                  di        |t        |      | d   d<   n)| d   j                  di        t        |      | d   d   |<   t        |        y)z'Persist disabled skill names to config.r   Nr   r   )
setdefaultsortedr   )r   r   r   s      r   save_disabled_skillsr'   @   sd    
h#'-h'7x$x##$7<:@:Jx,-h7r#   c                  D    	 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.   M   s)    6d33 	s    r   c                 L    t        | D ch c]  }|d   xs d c}      S c c}w )z>Return sorted unique category names (None -> 'uncategorized').categoryuncategorized)r&   )r   ss     r   _get_categoriesr3   V   s'    VD1Z=3O3DEEDs   !c                  &   dgt        t        j                               z   } t                t        t	        dt
        j                               t        | d      D ]  \  }\  }}t        d| d|         t                	 t        t	        dt
        j                              j                         }|sy	 t        |      dz
  }d|cxk  rt        |       k  rn y| |   d   }|d	k(  rdS |S 	 y# t        t        f$ r Y yw xY w# t        $ r Y yw xY w)
z0Ask user which platform to configure, or global.)globalzAll platforms (global default)z  Configure skills for:   z  z.   Select [1]: Nr   r5   )listr   itemsprintr
   r	   BOLD	enumerateinputYELLOWr   KeyboardInterruptEOFErrorintlen
ValueError)optionsikeylabelrawidxs         r   _select_platformrJ   ]   s   ;<tIOODU?VVG	G	%)6;;
78$Wa0 !<C1#Rw !	GE*FMM:;AAC #hl"c'l"
 	 #,q/C(?433 #
  x(   s0   1C/ 7$D D +D /D D	DDc                    ddl m} t        |       }g }t               }t	        |      D ]j  \  }}| D cg c]  }|d   xs d|k(  s|d    }	}|j                  | dt        |	       d       t        fd|	D              rZ|j                  |       l  |d	|||
      }
t              }t	        |      D ]3  \  }}| D ch c]  }|d   xs d|k(  s|d    }	}||
v r||	z  }/||	z  }5 |S c c}w c c}w )z(Toggle all skills in a category at once.r   curses_checklistr0   r1   namez (z skills)c              3   &   K   | ]  }|v  
 y wN ).0r2   r   s     r   	<genexpr>z&_toggle_by_category.<locals>.<genexpr>   s     5Q1=5s   u'   Categories — toggle entire categoriescancel_returns)	hermes_cli.curses_uirM   r3   r   r<   appendrB   alladd)r   r   rM   
categories
cat_labelspre_selectedrE   catr2   
cat_skillschosennew_disableds    `          r   _toggle_by_categoryra   w   s(   5 (JJ5LJ'  3)/]AAjM4T_Y\3\ai]
]SEC
O#4H=>5*55Q	  1LF
 x=LJ' '3)/]AAjM4T_Y\3\ai]
];J&LJ&L' # ^ ^s   C1C1C6C6c                    ddl m} t               }t               }|s$t	        t        dt        j                               yt               }|rt        j                  |d      nd}t	                t	        t        d| t        j                               t	                t	        d       t	        d       t	                	 t        t        d	t        j                              j                         xs d
}t!        ||      }|dk(  rt#        ||      }n|D 	cg c]  }	|	d    d|	d   xs d d|	d   dd   }
}	t%        |      D 	ch c]  \  }}	|	d   |vs| }}}	 |d| |
||      }t'        t)        |            D ch c]  }||vs||   d    }}||k(  r$t	        t        dt        j                               yt+        |||       t)        |      t)        |      z
  }t	        t        d| dt)        |       d| dt        j,                               y# t        t        f$ r Y yw xY wc c}	w c c}	}w c c}w )z Entry point for `hermes skills`.r   rL   z  No skills installed.NzAll platformsz  Configure for: z  1. Toggle individual skillsz  2. Toggle by categoryr7   12rN   z  (r0   r1   u   )  —  description7   zSkills for rT   z  No changes.u   ✓ Saved: z
 enabled, z disabled (z).)rV   rM   r   r.   r:   r
   r	   DIMrJ   r   r   r=   r>   r   r?   r@   r"   ra   r<   rangerB   r'   GREEN)argsrM   r   r   r   platform_labelmoder   r`   r2   labelsrE   r\   r_   enabled_counts                  r   skills_commandro      s/   5]FFe,fjj9:  !HAIY]]8_=N 
G	%#N#34fjj
AB	G	
)*	
#$	GU+V]];<BBDK #684Hs{*68<
 
 ykQz]=o>hqGWX[Y[G\F]^
 

 '0&7Uda1V9H;TUU!.)*L

 49V3EYaRXq	&)YYxeOVZZ01x8K#l"33M	%+m_Js<7H6IUcTddfgioiuiu
vw9 x( 

 V Zs0    5H !H3H8H8	H>
H>H0/H0rP   )__doc__typingr   r   r   hermes_cli.configr   r   r   hermes_cli.colorsr	   r
   hermes_cli.platformsr   
_PLATFORMSr9   rG   r   r   r   r"   r'   r.   r3   rJ   ra   ro   )kinfos   00r   <module>rx      s   ' & ? ? + 8
 +;**:*:*<Rwq$\@QQ

]R	c#h "G G GS G( S Xc] $t* FDJ F49 F(3- 4T
 c#h 3s8 >4x Ss   B=B=