§
    øžyjÏ  ã                  ó¦   — d Z ddlmZ ddlZddlmZ ddlmZ ddlm	Z	 ddl
mZmZmZmZmZmZmZ dd
„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„ZdS )aÁ  Implementation of the ``hermes bundles`` CLI subcommand.

Mirrors the structure of ``hermes_cli/skills_hub.py`` but for skill
bundles. Bundles are tiny YAML files that name a set of skills to load
together via a single ``/<bundle>`` slash command.

Subcommands:
- list: show all bundles
- show: dump one bundle's contents
- create: build a new bundle from arguments or interactively
- delete: remove a bundle
- reload: re-scan the bundles directory
é    )ÚannotationsN)ÚList©ÚConsole)ÚTable)Ú_bundles_dirÚdelete_bundleÚ
get_bundleÚlist_bundlesÚreload_bundlesÚsave_bundleÚscan_bundlesÚreturnr   c                 ó   — t          ¦   «         S )Nr   © ó    ú8/home/ragecks/.hermes/hermes-agent/hermes_cli/bundles.pyÚ_consoler   "   s   € õ ‰9Œ9Ðr   ÚNonec           	     óÞ  — t          ¦   «         }t          ¦   «         }|s'|                     dt          ¦   «         › d�¦  «         d S t	          dt          |¦  «        › d�d¬¦  «        }|                     dd¬	¦  «         |                     d
d¬	¦  «         |                     dd¬¦  «         |                     d¦  «         |D ]n}t          |                     dg ¦  «        ¦  «        }|                     d|d         › �|d         t          |¦  «        |                     d¦  «        pd¦  «         Œo|                     |¦  «         |                     dt          ¦   «         › d�¦  «         d S )Nz‰[dim]No bundles installed yet. Create one with:
  hermes bundles create <name> --skill skill1 --skill skill2[/]
Bundles directory: [bold]ú[/]zSkill Bundles (ú)F)ÚtitleÚ
show_linesÚCommandz	bold cyan)ÚstyleÚNameÚboldÚSkillsÚright)ÚjustifyÚDescriptionÚskillsú/ÚslugÚnameÚdescriptionÚ z
[dim]Bundles directory: )
r   r   Úprintr   r   ÚlenÚ
add_columnÚgetÚadd_rowÚstr)ÚargsÚcÚbundlesÚtableÚinfoÚskill_counts         r   Ú	_cmd_listr5   )   sŠ  € Ý‰
Œ
€AÝ‰nŒn€GØð Ø	�Šð<å(4©¬ð<ð <ð <ñ	
ô 	
ð 	
ð
 	ˆåÐ9­#¨g©,¬,Ð9Ð9Ð9ÀeÐLÑLÔL€EØ	×Ò�Y kÐÑ2Ô2Ð2Ø	×Ò�V 6ÐÑ*Ô*Ð*Ø	×Ò�X wÐÑ/Ô/Ð/Ø	×Ò�]Ñ#Ô#Ð#àð 
ð 
ˆÝ˜$Ÿ(š( 8¨RÑ0Ô0Ñ1Ô1ˆØ�ŠØ��V”ÐÐØ�ŒLÝ�ÑÔØ�HŠH�]Ñ#Ô#Ð) rñ		
ô 	
ð 	
ð 	
ð ‡G‚GˆE�N„N€NØ‡G‚GÐ<­©¬Ð<Ð<Ð<Ñ=Ô=Ð=Ð=Ð=r   c                ó®  — t          ¦   «         }t          | j        ¦  «        }|s2|                     d| j        ›d�¦  «         t	          j        d¦  «         |                     d|d         › d|d         › d�¦  «         |                     d	¦  «        r|                     d
|d	         › �¦  «         |                     d|d         › d�¦  «         |                     dt          |d         ¦  «        › d�¦  «         |d         D ]}|                     d|› �¦  «         Œ|                     d¦  «        r |                     d|d         › �¦  «         d S d S )Nz[bold red]Bundle z not found.[/]é   z[bold cyan]/r%   z[/]  [bold]r&   r   r'   z  z  [dim]File: Úpathz  [bold]Skills (r#   ú):[/]z    - Úinstructionz  [bold]Instruction:[/]
    )r   r
   r&   r)   ÚsysÚexitr,   r*   )r/   r0   r3   Úss       r   Ú	_cmd_showr>   F   sr  € Ý‰
Œ
€AÝ�d”iÑ Ô €DØð Ø	�ŠÐ? D¤IÐ?Ð?Ð?Ñ@Ô@Ð@ÝŒ�‰ŒˆØ‡G‚GÐE˜4 œ<ÐEÐE°D¸´LÐEÐEÐEÑFÔFÐFØ‡x‚x�ÑÔð ,Ø	�ŠÐ*�T˜-Ô(Ð*Ð*Ñ+Ô+Ð+Ø‡G‚GÐ-˜D œLÐ-Ð-Ð-Ñ.Ô.Ð.Ø‡G‚GÐ9�s 4¨¤>Ñ2Ô2Ð9Ð9Ð9Ñ:Ô:Ð:Ø�(Œ^ð ð ˆØ	�Š�˜��ÑÔÐÐØ‡x‚x�ÑÔð GØ	�ŠÐE°°]Ô0CÐEÐEÑFÔFÐFÐFÐFðGð Gr   c           	     ó  — t          ¦   «         }| j        }t          | j        pg ¦  «        }| j        pd}| j        pd}t          | j        ¦  «        }|s’|                     d¦  «         	 	 t          d¦  «         
                    ¦   «         }|sn|                     |¦  «         Œ:n@# t          t          f$ r, |                     d¦  «         t          j        d¦  «         Y nw xY w|s)|                     d¦  «         t          j        d¦  «         	 t!          |||||¬¦  «        }nƒ# t"          $ r7}	|                     d	|	› d
�¦  «         t          j        d¦  «         Y d }	~	nGd }	~	wt$          $ r7}	|                     d	|	› d�¦  «         t          j        d¦  «         Y d }	~	nd }	~	ww xY w|                     d|› �¦  «         t'          |¦  «        }
|
r7|                     d|
d         › dt)          |
d         ¦  «        › d�¦  «         d S d S )Nr(   zd[dim]No skills passed via --skill. Enter one skill name per line.
Submit an empty line to finish.[/]Tzskill> z
[yellow]Cancelled.[/]r7   z8[bold red]A bundle must reference at least one skill.[/])r'   r:   Ú	overwriteú
[bold red]z&[/]
[dim]Pass --force to overwrite.[/]r   z[bold green]Created bundle:[/] z  Invoke with: [bold cyan]/r%   z[/]  (loads r#   z skills))r   r&   ÚlistÚskillr'   r:   ÚboolÚforcer)   ÚinputÚstripÚappendÚEOFErrorÚKeyboardInterruptr;   r<   r   ÚFileExistsErrorÚ
ValueErrorr
   r*   )r/   r0   r&   r#   r'   r:   r@   Úliner8   Úexcr3   s              r   Ú_cmd_createrO   W   s…  € Ý‰
Œ
€AØŒ9€DÝ˜TœZÐ-¨2Ñ.Ô.€FØÔ"Ð( b€KØÔ"Ð( b€KÝ�T”ZÑ Ô €Iàð à	�Šð1ñ	
ô 	
ð 	
ð	ð$Ý˜YÑ'Ô'×-Ò-Ñ/Ô/�Øð ØØ—’˜dÑ#Ô#Ð#ð	$ð øåÕ+Ð,ð 	ð 	ð 	Ø�GŠGÐ-Ñ.Ô.Ð.ÝŒH�Q‰KŒKˆKˆKˆKð	øøøð ð Ø	�ŠÐJÑKÔKÐKÝŒ�‰ŒˆðÝØØØ#Ø#Øð
ñ 
ô 
ˆˆøõ ð ð ð Ø	�ŠÐI˜SÐIÐIÐIÑJÔJÐJÝŒ�‰ŒˆˆˆˆˆˆøøøøÝð ð ð Ø	�ŠÐ%˜SÐ%Ð%Ð%Ñ&Ô&Ð&ÝŒ�‰Œˆˆˆˆˆˆøøøøðøøøð ‡G‚GÐ4¨dÐ4Ð4Ñ5Ô5Ð5Ý�dÑÔ€DØð 
Ø	�Šð4¨$¨v¬,ð 4ð 4Ý˜$˜xœ.Ñ)Ô)ð4ð 4ð 4ñ	
ô 	
ð 	
ð 	
ð 	
ð
ð 
s6   Á*;B& Â&:C#Ã"C#ÄD' Ä'
F'Ä1-E#Å#F'Å0-F"Æ"F'c                ó  — t          ¦   «         }	 t          | j        ¦  «        }nD# t          $ r7}|                     d|› d�¦  «         t          j        d¦  «         Y d }~nd }~ww xY w|                     d|› �¦  «         d S )NrA   r   r7   z[bold green]Deleted bundle:[/] )r   r	   r&   ÚFileNotFoundErrorr)   r;   r<   )r/   r0   r8   rN   s       r   Ú_cmd_deleterR   ‹   s˜   € Ý‰
Œ
€AðÝ˜TœYÑ'Ô'ˆˆøÝð ð ð Ø	�ŠÐ%˜SÐ%Ð%Ð%Ñ&Ô&Ð&ÝŒ�‰Œˆˆˆˆˆˆøøøøðøøøð ‡G‚GÐ4¨dÐ4Ð4Ñ5Ô5Ð5Ð5Ð5s   �% ¥
A&¯-A!Á!A&c           
     ó€  — t          ¦   «         }t          ¦   «         }|d         rl|                     dt          |d         ¦  «        › d�¦  «         |d         D ]7}|                     d|d         › d|                     dd¦  «        › �¦  «         Œ8|d	         rU|                     d
t          |d	         ¦  «        › d�¦  «         |d	         D ] }|                     d|d         › �¦  «         Œ!|d         s)|d	         s!|                     d|d         › d�¦  «         d S |                     d|d         › d�¦  «         d S )NÚaddedz[bold green]Added (r9   z  + r&   u    â€” r'   r(   Úremovedz[bold red]Removed (z  - z[dim]No changes. Útotalz bundle(s) loaded.[/]z[dim]Total bundles now: r   )r   r   r)   r*   r,   )r/   r0   ÚdiffÚentrys       r   Ú_cmd_reloadrY   •   sl  € Ý‰
Œ
€AÝÑÔ€DØˆG„}ð OØ	�ŠÐ?¥c¨$¨w¬-Ñ&8Ô&8Ð?Ð?Ð?Ñ@Ô@Ð@Ø˜'”]ð 	Oð 	OˆEØ�GŠGÐM˜5 œ=ÐMÐM¨u¯yªy¸ÈÑ/KÔ/KÐMÐMÑNÔNÐNÐNØˆI„ð ,Ø	�ŠÐA¥c¨$¨y¬/Ñ&:Ô&:ÐAÐAÐAÑBÔBÐBØ˜)”_ð 	,ð 	,ˆEØ�GŠGÐ*˜5 œ=Ð*Ð*Ñ+Ô+Ð+Ð+Ø�Œ=ð ?  i¤ð ?Ø	�ŠÐH D¨¤MÐHÐHÐHÑIÔIÐIÐIÐIà	�ŠÐ=¨4°¬=Ð=Ð=Ð=Ñ>Ô>Ð>Ð>Ð>r   c                ó˜  — |                       d¬¦  «        }|                     dd¬¦  «        }|                     t          ¬¦  «         |                     dd¬¦  «        }|                     d	d
¬¦  «         |                     t
          ¬¦  «         |                     ddd¬¦  «        }|                     d	d¬¦  «         |                     dddg d¬¦  «         |                     dddd¬¦  «         |                     dddd¬¦  «         |                     dddd ¬!¦  «         |                     t          ¬¦  «         |                     d"d#¬¦  «        }|                     d	d
¬¦  «         |                     t          ¬¦  «         |                     d$d%¬¦  «        }|                     t          ¬¦  «         t          ¦   «          d&S )'zöBuild the ``hermes bundles`` argparse tree.

    Called from ``hermes_cli/main.py`` where it owns the top-level
    ``bundles`` subparser. Keeping registration here means the bundles
    subcommand's argparse tree lives next to its handlers.
    Úbundles_action)ÚdestrB   zList installed skill bundles)Úhelp)Ú_bundles_handlerÚshowzShow one bundle's contentsr&   zBundle nameÚcreatezCreate a new skill bundlezrCreate a new bundle. Skills can be passed via --skill (repeat for multiple) or entered interactively when omitted.)r]   r'   z(Bundle name (becomes the /slash command)z--skillz-srH   z+Skill name to include (repeat for multiple))ÚactionÚdefaultr]   z--descriptionz-dr(   zCHuman-readable description shown in /help and `hermes bundles list`)rb   r]   z--instructionz-iz4Extra guidance prepended to the loaded skill contentz--forcez-fÚ
store_truez/Overwrite an existing bundle with the same name)ra   r]   ÚdeletezDelete a skill bundleÚreloadz0Re-scan the bundles directory and report changesN)
Úadd_subparsersÚ
add_parserÚset_defaultsr5   Úadd_argumentr>   rO   rR   rY   r   )Ú	subparserÚsubsÚp_listÚp_showÚp_createÚp_deleteÚp_reloads          r   Úregister_clirq   ¦   s  € ð ×#Ò#Ð)9Ð#Ñ:Ô:€Dà�_Š_˜VÐ*Hˆ_ÑIÔI€FØ
×Ò­ÐÑ3Ô3Ð3à�_Š_˜VÐ*Fˆ_ÑGÔG€FØ
×Ò˜ ]ÐÑ3Ô3Ð3Ø
×Ò­ÐÑ3Ô3Ð3à�ŠØØ(ð?ð	 ñ ô €Hð ×Ò˜&Ð'QÐÑRÔRÐRØ×ÒØ�4 °"Ø:ð ñ ô ð ð ×ÒØ˜ rØRð ñ ô ð ð ×ÒØ˜ rØCð ñ ô ð ð ×ÒØ�4 Ø>ð ñ ô ð ð ×Ò­;ÐÑ7Ô7Ð7à�Š˜xÐ.EˆÑFÔF€HØ×Ò˜& }ÐÑ5Ô5Ð5Ø×Ò­;ÐÑ7Ô7Ð7à�ŠØÐIð ñ ô €Hð ×Ò­;ÐÑ7Ô7Ð7õ �N„N€N€N€Nr   c                ód   — t          | dd¦  «        }|€t          | ¦  «         dS  || ¦  «         dS )z>Dispatch ``hermes bundles <subcommand>`` to the right handler.r^   N)Úgetattrr5   )r/   Úhandlers     r   Úbundles_commandru   Þ   s:   € å�dÐ.°Ñ5Ô5€GØ€å�$‰ŒˆØˆØ€GˆD�M„M€M€M€Mr   )r   r   )r   r   )Ú__doc__Ú
__future__r   r;   Útypingr   Úrich.consoler   Ú
rich.tabler   Úagent.skill_bundlesr   r	   r
   r   r   r   r   r   r5   r>   rO   rR   rY   rq   ru   r   r   r   ú<module>r|      sl  ððð ð #Ð "Ð "Ð "Ð "Ð "à 
€
€
€
Ø Ð Ð Ð Ð Ð à  Ð  Ð  Ð  Ð  Ð  Ø Ð Ð Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð>ð >ð >ð >ð:Gð Gð Gð Gð"1
ð 1
ð 1
ð 1
ðh6ð 6ð 6ð 6ð?ð ?ð ?ð ?ð"5ð 5ð 5ð 5ðpð ð ð ð ð r   