§
    øžyjjm  ã                  ó*  — d Z ddlmZ ddlZddlZddlZddlZddlZddlZddl	m
Z
 ddlmZmZ ddlm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 ddlmZ d3d„Zd4d„Zd4d„Z d4d„Z!d4d„Z"d4d„Z#d4d„Z$d5d„Z%d6d „Z&d!d"œd7d(„Z'd!d"œd8d,„Z(d-d.gZ)d9d2„Z*dS ):uÌ  CLI handlers for ``hermes secrets bitwarden ...``.

Subcommands:
    setup    â€” interactive wizard: install bws, prompt for token + project, test fetch
    status   â€” show current config + binary version + token validation status
    sync     â€” run a fetch right now and show what would be applied (dry-run friendly)
    disable  â€” flip ``secrets.bitwarden.enabled`` to False
    install  â€” just download the bws binary (no token / project required)
é    )ÚannotationsN)ÚPath)ÚListÚOptional)ÚConsole)ÚPanel)ÚTable)Ú	bitwarden)Úget_env_pathÚload_configÚsave_configÚsave_env_value)Úmasked_secret_promptÚparent_parserúargparse.ArgumentParserÚreturnÚNonec                óî  — |                       d¬¦  «        }|                     dd¬¦  «        }|                     dd¬¦  «         |                     dd	¬¦  «         |                     d
d¬¦  «         |                     t          ¬¦  «         |                     dd¬¦  «        }|                     t
          ¬¦  «         |                     dd¬¦  «        }|                     dd¬¦  «         |                     ddd¬¦  «         |                     t          ¬¦  «         |                     dd¬¦  «        }|                     ddd¬¦  «         |                     t          ¬¦  «         |                     dd¬¦  «        }|                     t          ¬¦  «         |                     ddt          j
        › d�¬¦  «        }|                     ddd ¬¦  «         |                     t          ¬¦  «         d!S )"z§Attach the ``bitwarden`` subcommand tree to a parent parser.

    Called from ``hermes_cli.main`` as part of building the top-level
    ``hermes secrets`` parser.
    Úsecrets_bw_command)ÚdestÚsetupzAInteractive wizard: install bws, store access token, pick project)Úhelpú--project-idz.Pre-select a project UUID instead of promptingú--access-tokenzCProvide the access token non-interactively (will be stored in .env)ú--server-urlz¼Bitwarden region / self-hosted endpoint. Examples: https://vault.bitwarden.com (US, default), https://vault.bitwarden.eu (EU), or your self-hosted URL. Skips the interactive region prompt.)ÚfuncÚstatusz.Show config + binary + token validation statusÚtokenz@Rotate the access token: validate a new one and store it in .envz@Provide the new token non-interactively (default: masked prompt)z--no-verifyÚ
store_truez7Store without probing Bitwarden first (not recommended))Úactionr   Úsyncz)Fetch secrets now and report what changedz--applyzKActually export the secrets into the current shell's env (default: dry-run)Údisablez"Turn off the Bitwarden integrationÚinstallz,Download and verify the pinned bws binary (vú)z--forcez1Re-download even if a managed copy already existsN)Úadd_subparsersÚ
add_parserÚadd_argumentÚset_defaultsÚ	cmd_setupÚ
cmd_statusÚ	cmd_tokenÚcmd_syncÚcmd_disableÚbwÚ_BWS_VERSIONÚcmd_install)r   Úsubr   r   r   r!   r"   r#   s           ú</home/ragecks/.hermes/hermes-agent/hermes_cli/secrets_cli.pyÚregister_clir3   )   sr  € ð ×
&Ò
&Ð,@Ð
&Ñ
AÔ
A€Cà�NŠNØØPð ñ ô €Eð 
×ÒØØ=ð ñ ô ð ð 
×ÒØØRð ñ ô ð ð 
×ÒØð3ð ñ ô ð ð 
×Ò�IÐÑ&Ô&Ð&à�^Š^ØØ=ð ñ ô €Fð ×Ò�ZÐÑ(Ô(Ð(à�NŠNØØOð ñ ô €Eð 
×ÒØØOð ñ ô ð ð 
×ÒØØØFð ñ ô ð ð
 
×Ò�IÐÑ&Ô&Ð&à�>Š>˜&Ð'Rˆ>ÑSÔS€DØ×ÒØØØZð ñ ô ð ð
 	×Ò�8ÐÑ$Ô$Ð$à�nŠn˜YÐ-QˆnÑRÔR€GØ×Ò�kÐÑ*Ô*Ð*à�nŠnØØN½B¼OÐNÐNÐNð ñ ô €Gð ×ÒØØØ@ð ñ ô ð ð
 ×Ò�kÐÑ*Ô*Ð*Ð*Ð*ó    Úargsúargparse.NamespaceÚintc           	     ó¬  — t          ¦   «         }|                     t          j        dd¬¦  «        ¦  «         |                     ¦   «          |                     d¦  «         	 t	          j        d¬¦  «        }|€(|                     d¦  «         t	          j        ¦   «         }t          |¦  «        }|                     d|› d	|› d
�¦  «         nF# t          $ r9}|                     d|› d�¦  «         |                     d¦  «         Y d }~dS d }~ww xY wt          j
                             ¦   «         �sg }| j        r| j                             ¦   «         s|                     d¦  «         | j        r| j                             ¦   «         sGt           j                             dd¦  «                             ¦   «         s|                     d¦  «         | j        r| j                             ¦   «         s|                     d¦  «         |r.|                     dd                     |¦  «        › d�¦  «         dS |                     ¦   «          |                     d¦  «         t+          ¦   «         }|                     di ¦  «                             di ¦  «        }|                     dd¦  «        }| j        pd                     ¦   «         }	|	s%t/          d|› d�¦  «                             ¦   «         }	|	s|                     d¦  «         dS |	                     d¦  «        s|                     d ¦  «         t3          ||	¦  «         |	t           j        |<   |                     d!t5          ¦   «         › d"|› �¦  «         |                     ¦   «          |                     d#¦  «         t7          | ||¦  «        }
|
€dS |
r|                     d$|
› �¦  «         n|                     d%¦  «         | j        r4| j                             ¦   «         r| j                             ¦   «         }�n|                     ¦   «          |                     d&¦  «         d}t9          ||	||
¬'¦  «        }|€dS |s,|                     d(¦  «         |                     d)¦  «         dS t;          d*d+¬,¦  «        }|                     d-dd.¬/¦  «         |                     d0¦  «         |                     d1d2¬3¦  «         t?          |d¦  «        D ]Q\  }}|                      tC          |¦  «        |                     d4d5¦  «        |                     d6d5¦  «        ¦  «         ŒR|                     |¦  «         	 | "                    d7tG          |¦  «        › d8�¦  «                             ¦   «         }|sŒ<	 tI          |¦  «        }n%# tJ          $ r |                     d9¦  «         Y Œnw xY wd|cxk    rtG          |¦  «        k    rn n||dz
           d6         }n'|                     d:tG          |¦  «        › d;�¦  «         ŒÇ|                     ¦   «          | j        r| j                             ¦   «         sd<nd.}|                     d=|› d>�¦  «         	 t	          j&        |	||d|
¬?¦  «        \  }}n1# t          $ r$}|                     d@|› d�¦  «         Y d }~dS d }~ww xY w|s|                     dA¦  «         n§t;          d*d+¬,¦  «        }|                     d0d¬3¦  «         |                     dB¦  «         tO          |¦  «        D ]E}||k    rdC}n$t           j                             |¦  «        rdD}ndE}|                      ||¦  «         ŒF|                     |¦  «         |D ]}|                     dF|› �¦  «         Œd*|dG<   ||dH<   |
|dI<   |                     d|¦  «         |                     dJdK¦  «         |                     dLd*¦  «         |                     dMd*¦  «         tQ          |¦  «         |                     ¦   «          |                     dN¦  «         |                     dO¦  «         dPS )QNu  [bold]Bitwarden Secrets Manager setup[/bold]

Need an access token? In the Bitwarden web app:
  Secrets Manager â†’ Machine accounts â†’ [your account] â†’
  Access tokens â†’ Create access token

Copy the token (starts with [cyan]0.[/cyan]â€¦) â€” it cannot be retrieved later.Úcyan)Úborder_stylez([bold]Step 1[/bold]  Install the bws CLIF©Úinstall_if_missingu#     No bws on PATH â€” downloadingâ€¦u     [green]âœ“[/green] ú  (r$   u"     [red]âœ— Could not install bws: ú[/red]z>  Manual install: https://github.com/bitwarden/sdk-sm/releasesé   r   ÚBWS_SERVER_URLÚ r   r   zP  [red]Non-interactive mode (no TTY) requires all setup flags.[/red]
  Missing: z, z»

  Usage:
    hermes secrets bitwarden setup \
      --access-token '0.xxx' \
      --server-url 'https://vault.bitwarden.com' \
      --project-id 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'z.[bold]Step 2[/bold]  Provide your access tokenÚsecretsr
   Úaccess_token_envÚBWS_ACCESS_TOKENz  Paste access token (ú): z#  [red]Empty token, aborting.[/red]ú0.õ˜     [yellow]Warning: token doesn't start with '0.' â€” usually that means you pasted something other than a BSM access token.  Continuing anyway.[/yellow]u     [green]âœ“[/green] stored in ú as z,[bold]Step 3[/bold]  Pick a Bitwarden regionu     [green]âœ“[/green] using uN     [green]âœ“[/green] using bws default (US Cloud, https://vault.bitwarden.com)z#[bold]Step 4[/bold]  Pick a project©Ú
server_urlz?  [yellow]No projects visible to this machine account.[/yellow]ur     In the Bitwarden web app, open the machine account â†’ Projects tab and grant it access to at least one project.TÚbold©Úshow_headerÚheader_styleú#é   ©ÚstyleÚwidthÚNameÚIDÚdim©rR   Únameú?Úidz  Select project [1-z]: ú  [red]Enter a number.[/red]õ     [red]Out of range â€” pick 1-ú.[/red]é   z[bold]Step z[/bold]  Test fetch)Úaccess_tokenÚ
project_idÚbinaryÚ	use_cacherJ   u     [red]âœ— Fetch failed: zB  [yellow]Fetch succeeded but the project has no secrets.[/yellow]ÚStatusu5   [dim]bootstrap token â€” never overrides itself[/dim]z9[yellow]already set in env (will be overwritten)[/yellow]z[green]new[/green]z  [yellow]warning:[/yellow] Úenabledr`   rJ   Úcache_ttl_secondsé,  Úoverride_existingÚauto_installuv   [green]âœ“ Bitwarden Secrets Manager is enabled.[/green]  Secrets will be pulled at the start of every Hermes process.z¦  Status:  [cyan]hermes secrets bitwarden status[/cyan]
  Refresh: [cyan]hermes secrets bitwarden sync[/cyan]
  Disable: [cyan]hermes secrets bitwarden disable[/cyan]r   ))r   Úprintr   Úfitr.   Úfind_bwsÚinstall_bwsÚ_bws_versionÚ	ExceptionÚsysÚstdinÚisattyr_   ÚstripÚappendrJ   ÚosÚenvironÚgetr`   Újoinr   Ú
setdefaultr   Ú
startswithr   r   Ú_resolve_server_urlÚ_list_projectsr	   Ú
add_columnÚ	enumerateÚadd_rowÚstrÚinputÚlenr7   Ú
ValueErrorÚfetch_bitwarden_secretsÚsortedr   )r5   Úconsolera   ÚversionÚexcÚmissingÚcfgÚsecrets_cfgÚ	token_envr   rJ   r`   ÚprojectsÚtableÚiÚpÚchoiceÚidxÚstep_numrB   ÚwarningsÚkeyr   Úws                           r2   r)   r)   y   s4	  € Ý‰iŒi€GØ‡M‚MÝŒ	ð`ð
  ð	
ñ 	
ô 	
ñ	ô 	ð 	ð ‡M‚M�O„O€OØ‡M‚MÐ<Ñ=Ô=Ð=ðÝ”°Ð6Ñ6Ô6ˆØˆ>Ø�MŠMÐ?Ñ@Ô@Ð@Ý”^Ñ%Ô%ˆFÝ˜vÑ&Ô&ˆØ�ŠÐC¨fÐCÐC¸ÐCÐCÐCÑDÔDÐDÐDøÝð ð ð Ø�ŠÐF¸3ÐFÐFÐFÑGÔGÐGØ�Šð;ñ	
ô 	
ð 	
ð ˆqˆqˆqˆqˆqøøøøðøøøõ Œ9×ÒÑÔñ ØˆØÔ!ð 	- dÔ&7×&=Ò&=Ñ&?Ô&?ð 	-Ø�NŠNÐ+Ñ,Ô,Ð,Ø”ð 	/ D¤O×$9Ò$9Ñ$;Ô$;ð 	/å”:—>’>Ð"2°BÑ7Ô7×=Ò=Ñ?Ô?ð /Ø—’˜~Ñ.Ô.Ð.Ø”ð 	+ D¤O×$9Ò$9Ñ$;Ô$;ð 	+Ø�NŠN˜>Ñ*Ô*Ð*Øð 
	Ø�MŠMðLØ"Ÿiši¨Ñ0Ô0ðLð Lð Lñô ð ð �1ð ‡M‚M�O„O€OØ‡M‚MÐBÑCÔCÐCÝ
‰-Œ-€CØ—>’> )¨RÑ0Ô0ß ’j ¨bÑ1Ô1ð à—’Ð 2Ð4FÑGÔG€IàÔÐ$ "×+Ò+Ñ-Ô-€EØð VÝ$Ð%L¸iÐ%LÐ%LÐ%LÑMÔM×SÒSÑUÔUˆØð Ø�ŠÐ;Ñ<Ô<Ð<ØˆqØ×Ò˜DÑ!Ô!ð 
Ø�Šð_ñ	
ô 	
ð 	
õ
 �9˜eÑ$Ô$Ð$Ø!…B„JˆyÑØ‡M‚MÐSµL±N´NÐSÐSÈ	ÐSÐSÑTÔTÐTð ‡M‚M�O„O€OØ‡M‚MÐ@ÑAÔAÐAÝ$ T¨;¸Ñ@Ô@€JØÐØˆqØð 
Ø�ŠÐ@°JÐ@Ð@ÑAÔAÐAÐAà�Šð6ñ	
ô 	
ð 	
ð „ð %T˜4œ?×0Ò0Ñ2Ô2ð %TØ”_×*Ò*Ñ,Ô,ˆ
‰
à�Š‰ŒˆØ�ŠÐ;Ñ<Ô<Ð<Øˆ
Ý! &¨%°ÀZÐPÑPÔPˆØÐØ�1Øð 	Ø�MŠMÐ[Ñ\Ô\Ð\Ø�MŠMð?ñô ð ð �1å $°VÐ<Ñ<Ô<ˆØ×Ò˜ F°!ÐÑ4Ô4Ð4Ø×Ò˜Ñ Ô Ð Ø×Ò˜ UÐÑ+Ô+Ð+Ý˜h¨Ñ*Ô*ð 	Hð 	H‰DˆAˆqØ�MŠM�#˜a™&œ& !§%¢%¨°Ñ"4Ô"4°a·e²e¸DÀ#Ñ6FÔ6FÑGÔGÐGÐGØ�Š�eÑÔÐð	TØ—]’]Ð#L½#¸h¹-¼-Ð#LÐ#LÐ#LÑMÔM×SÒSÑUÔUˆFØð ØðÝ˜&‘k”k��øÝð ð ð Ø—’Ð<Ñ=Ô=Ð=Ø�ðøøøð �CÐ(Ð(Ò(Ð(�3˜x™=œ=Ò(Ð(Ð(Ð(Ð(Ø% c¨A¡gÔ.¨tÔ4�
ØØ�MŠMÐR½CÀ¹M¼MÐRÐRÐRÑSÔSÐSð	Tð ‡M‚M�O„O€OØœÐL¨T¬_×-BÒ-BÑ-DÔ-DÐLˆqˆqÈ1€HØ‡M‚MÐ= Ð=Ð=Ð=Ñ>Ô>Ð>ð
ÝÔ6ØØ!ØØØ!ð
ñ 
ô 
Ñˆ��øõ ð ð ð Ø�ŠÐ=°#Ð=Ð=Ð=Ñ>Ô>Ð>Øˆqˆqˆqˆqˆqøøøøðøøøð ð Ø�ŠÐZÑ[Ô[Ð[Ð[å $°VÐ<Ñ<Ô<ˆØ×Ò˜ vÐÑ.Ô.Ð.Ø×Ò˜Ñ"Ô"Ð"Ý˜'‘?”?ð 	'ð 	'ˆCØ�iÒÐØP��Ý”—’ Ñ$Ô$ð .ØT��à-�Ø�MŠM˜#˜vÑ&Ô&Ð&Ð&Ø�Š�eÑÔÐØð :ð :ˆØ�ŠÐ8°QÐ8Ð8Ñ9Ô9Ð9Ð9ð "€K�	ÑØ *€K�ÑØ *€K�ÑØ×ÒÐ-¨yÑ9Ô9Ð9Ø×ÒÐ.°Ñ4Ô4Ð4Ø×ÒÐ.°Ñ5Ô5Ð5Ø×Ò˜>¨4Ñ0Ô0Ð0Ý�ÑÔÐà‡M‚M�O„O€OØ‡M‚Mð	Gñô ð ð ‡M‚Mð	Cñô ð ð
 ˆ1sC   Á"A*C Ã
DÃ.DÄDÖV) Ö)W×
WÙ6Z Ú
[ÚZ<Ú<[c                óN  — t          ¦   «         }t          ¦   «         }|                     d¦  «        pi                      d¦  «        pi }t          |                     d¦  «        ¦  «        }|                     dd¦  «        }|                     dd¦  «        }t	          |                     dd¦  «        pd¦  «                             ¦   «         }t          j                             |d¦  «                             ¦   «         }t          |¦  «        }	t          j	        d	¬
¦  «        }
t          ||
||¬¦  «        \  }}t          d	d d¬¦  «        }|                     dd¬¦  «         |                     d¦  «         |                     dt          |¦  «        ¦  «         |                     d|¦  «         |                     dt          |	¦  «        ¦  «         |                     d|¦  «         |                     d|pd¦  «         |                     d|pd¦  «         |                     dt          t          |                     dd	¦  «        ¦  «        ¦  «        ¦  «         |                     dt	          |                     dd¦  «        ¦  «        ¦  «         |                     dt          t          |                     dd¦  «        ¦  «        ¦  «        ¦  «         |
r*|                     d |
› d!t          |
¦  «        › d"�¦  «         n|                     d d#¦  «         |                     t#          |d$d%¬&¦  «        ¦  «         |D ]}|                     |¦  «         Œ|s|                     d'¦  «         d(S |	s|                     d)|› d*�¦  «         |s|                     d+¦  «         d(S ),NrB   r
   rd   rC   rD   r`   rA   rJ   Fr;   )rd   ra   r   rJ   ©r   é   )rM   ÚboxÚpaddingrK   rW   ÚEnabledzToken env varzToken in envzToken validationz
Project IDz[dim](unset)[/dim]z
Server URLz:[dim]default (US Cloud, https://vault.bitwarden.com)[/dim]zOverride existingrg   zCache TTL (s)re   rf   zAuto-installrh   Tz
bws binaryz (r$   z[yellow]not installed[/yellow]zBitwarden Secrets Managerr9   )Útitler:   z=
  Run [cyan]hermes secrets bitwarden setup[/cyan] to enable.r   z
  [yellow]Enabled but uG    is not set â€” Hermes will skip BSM and warn on next startup.[/yellow]uC   
  [yellow]Enabled but no project_id â€” nothing to fetch.[/yellow])r   r   rv   Úboolr   rr   rt   ru   r.   rk   Ú_token_validation_statusr	   r|   r~   Ú_ynrm   ri   r   )r5   r…   r‰   Úbw_cfgrd   r‹   r`   rJ   r   Ú	token_setra   Útoken_validationÚvalidation_messagesr�   Úmessages                  r2   r*   r*   6  s’  € Ý‰iŒi€GÝ
‰-Œ-€CØ�gŠg�iÑ Ô Ð& B×+Ò+¨KÑ8Ô8Ð>¸B€Få�6—:’:˜iÑ(Ô(Ñ)Ô)€GØ—
’
Ð-Ð/AÑBÔB€IØ—’˜L¨"Ñ-Ô-€JÝ�V—Z’Z ¨bÑ1Ô1Ð7°RÑ8Ô8×>Ò>Ñ@Ô@€JÝŒJ�NŠN˜9 bÑ)Ô)×/Ò/Ñ1Ô1€EÝ�U‘”€IÝŒ[¨EÐ2Ñ2Ô2€FÝ,DØØØØð	-ñ -ô -Ñ)ÐÐ)õ ˜e¨°vÐ>Ñ>Ô>€EØ	×Ò�R˜vÐÑ&Ô&Ð&Ø	×Ò�RÑÔÐØ	‡M‚M�)¥S¨¡\¤\Ñ2Ô2Ð2Ø	‡M‚M�/ YÑ/Ô/Ð/Ø	‡M‚M�.¥S¨¡^¤^Ñ4Ô4Ð4Ø	‡M‚MÐ$Ð&6Ñ7Ô7Ð7Ø	‡M‚M�, ZÐ%GÐ3GÑHÔHÐHØ	‡M‚MØØÐRÐRñô ð ð 
‡M‚MÐ%¥s­4°·
²
Ð;NÐPUÑ0VÔ0VÑ+WÔ+WÑ'XÔ'XÑYÔYÐYØ	‡M‚M�/¥S¨¯ªÐ4GÈÑ)MÔ)MÑ%NÔ%NÑOÔOÐOØ	‡M‚M�.¥S­¨f¯jªj¸ÈÑ.NÔ.NÑ)OÔ)OÑ%PÔ%PÑQÔQÐQàð GØ�Š�l¨Ð%IÐ%Iµ,¸vÑ2FÔ2FÐ%IÐ%IÐ%IÑJÔJÐJÐJà�Š�lÐ%EÑFÔFÐFà‡M‚M•%˜Ð%@ÈvÐVÑVÔVÑWÔWÐWØ&ð ð ˆØ�Š�gÑÔÐÐàð Ø�ŠÐVÑWÔWÐWØˆqØð 
Ø�Šð1 yð 1ð 1ð 1ñ	
ô 	
ð 	
ð ð 
Ø�ŠØRñ	
ô 	
ð 	
ð ˆ1r4   c                óÞ  — t          ¦   «         }t          ¦   «         }|                     d¦  «        pi                      d¦  «        pi }|                     dd¦  «        }t          |                     dd¦  «        pd¦  «                             ¦   «         }| j        pd                     ¦   «         }|sot          j                             ¦   «         s| 	                    d¦  «         dS | 	                    d	¦  «         t          d
|› d�¦  «                             ¦   «         }|s| 	                    d¦  «         dS |                     d¦  «        s| 	                    d¦  «         | j        sýt          j        d¬¦  «        }|€| 	                    d¦  «         dS | 	                    d¦  «         t          ||||¬¦  «        }|€| 	                    d¦  «         dS | 	                    dt!          |¦  «        › dt!          |¦  «        dk    rdnd› d�¦  «         t          |                     dd¦  «        pd¦  «        }	|	r)|r'|	d„ |D ¦   «         vr| 	                    d|	› d�¦  «         t#          ||¦  «         |t$          j        |<   t          j        ¦   «          | 	                    dt+          ¦   «         › d|› d �¦  «         |                     d!¦  «        s| 	                    d"¦  «         d#S )$u-  Rotate the BSM access token without re-running the whole setup wizard.

    Prompts for (or accepts via ``--access-token``) a new machine-account
    token, probes Bitwarden with it (unless ``--no-verify``), and only then
    persists it to .env â€” so a bad paste never bricks the working token.
    rB   r
   rC   rD   rJ   rA   u9   [red]No TTY â€” pass the token with --access-token.[/red]r?   u‘   Create a new token in the Bitwarden web app:
  Secrets Manager â†’ Machine accounts â†’ [your account] â†’ Access tokens â†’ Create access token
zPaste new access token (rE   z![red]Empty token, aborting.[/red]rF   u‚   [yellow]Warning: token doesn't start with '0.' â€” usually that means you pasted something other than a BSM access token.[/yellow]Tr;   Nu`   [red]bws binary not available â€” cannot verify.  Re-run with --no-verify to store anyway.[/red]u   Verifying against Bitwardenâ€¦rI   u>   [red]âœ— New token was rejected â€” nothing was changed.[/red]u#   [green]âœ“ Token accepted[/green] (z projectÚsz
 visible).r`   c                ó   — h | ]
}|d          ’ŒS ©rZ   © ©Ú.0r�   s     r2   ú	<setcomp>zcmd_token.<locals>.<setcomp>¨  s   € Ð9TÐ9TÐ9TÀa¸!¸D¼'Ð9TÐ9TÐ9Tr4   z$[yellow]Warning: configured project z£ is not visible to this machine account.  Grant it access in the Bitwarden web app or re-run `hermes secrets bitwarden setup` to pick a different project.[/yellow]u   [green]âœ“[/green] stored in rH   z..  Takes effect on the next Hermes invocation.rd   u§   [yellow]Note: the Bitwarden integration is currently disabled â€” run `hermes secrets bitwarden setup` (or set secrets.bitwarden.enabled: true) to turn it on.[/yellow]r   )r   r   rv   r   rr   r_   ro   rp   rq   ri   r   ry   Ú	no_verifyr.   rk   r{   r�   r   rt   ru   Úclear_cachesr   )
r5   r…   r‰   r    r‹   rJ   r   ra   rŒ   r`   s
             r2   r+   r+   q  st  € õ ‰iŒi€GÝ
‰-Œ-€CØ�gŠg�iÑ Ô Ð& B×+Ò+¨KÑ8Ô8Ð>¸B€FØ—
’
Ð-Ð/AÑBÔB€IÝ�V—Z’Z ¨bÑ1Ô1Ð7°RÑ8Ô8×>Ò>Ñ@Ô@€JàÔÐ$ "×+Ò+Ñ-Ô-€EØð XÝŒy×ÒÑ!Ô!ð 	Ø�MŠMØKñô ð ð �1Ø�Šð6ñ	
ô 	
ð 	
õ
 %Ð%NÀ	Ð%NÐ%NÐ%NÑOÔO×UÒUÑWÔWˆØð Ø�ŠÐ9Ñ:Ô:Ð:ØˆqØ×Ò˜DÑ!Ô!ð 
Ø�ŠðKñ	
ô 	
ð 	
ð
 Œ>ð Ý”°Ð5Ñ5Ô5ˆØˆ>Ø�MŠMðAñô ð ð �1Ø�ŠÐ6Ñ7Ô7Ð7Ý! &¨%°ÀZÐPÑPÔPˆØÐØ�MŠMØPñô ð ð �1Ø�ŠðUÝ�H‘”ðUð UÝ.1°(©m¬m¸qÒ.@Ð.@ s sÀbðUð Uð Uñ	
ô 	
ð 	
õ ˜Ÿš L°"Ñ5Ô5Ð;¸Ñ<Ô<ˆ
Øð 	˜(ð 	 zÐ9TÐ9TÈ8Ð9TÑ9TÔ9TÐ'TÐ'TØ�MŠMð.°zð .ð .ð .ñô ð õ �9˜eÑ$Ô$Ð$Ø!…B„JˆyÑõ „OÑÔÐØ‡M‚Mð	6­©¬ð 	6ð 	6¸Ið 	6ð 	6ð 	6ñô ð ð �:Š:�iÑ Ô ð 
Ø�ŠðGñ	
ô 	
ð 	
ð
 ˆ1r4   c                ó˜  — t          ¦   «         }t          ¦   «         }|                     d¦  «        pi                      d¦  «        pi }|                     d¦  «        s|                     d¦  «         dS |                     dd¦  «        }t          j                             |d¦  «                             ¦   «         }|s|                     d	|› d
�¦  «         dS |                     dd¦  «        }|s|                     d¦  «         dS t          |                     dd¦  «        pd¦  «                             ¦   «         }	 t          j	        ||d|¬¦  «        \  }}	n1# t          $ r$}
|                     d|
› d�¦  «         Y d }
~
dS d }
~
ww xY w|s|                     d¦  «         dS t          |                     dd¦  «        ¦  «        p| j        }t          dd¬¦  «        }|                     dd¬¦  «         |                     d¦  «         d}t          |¦  «        D ]Â}||k    r|                     |d¦  «         Œt          t          j                             |¦  «        ¦  «        }|r|s|                     |d¦  «         Œf| j        r8||         t          j        |<   |dz  }|                     |d|rdndz   ¦  «         Œ¥|                     |d |rd!ndz   ¦  «         ŒÃ|                     |¦  «         |	D ]}|                     d"|› �¦  «         Œ| j        s|                     d#¦  «         n|                     d$|› d%�¦  «         dS )&NrB   r
   rd   z`[yellow]Bitwarden integration is disabled.  Run `hermes secrets bitwarden setup` first.[/yellow]r?   rC   rD   rA   z[red]z is not set.[/red]r`   z$[red]No project_id configured.[/red]rJ   F)r_   r`   rb   rJ   z[red]Fetch failed: r>   z'[yellow]No secrets in project.[/yellow]r   rg   TrK   rL   rT   r9   rW   ÚActionz![dim]skip (bootstrap token)[/dim]z[dim]skip (already set)[/dim]z[green]exported[/green]z (overrode)z[green]would export[/green]z (overrides)z[yellow]warning:[/yellow] uµ   
  This was a dry-run â€” secrets are picked up automatically on the next [cyan]hermes[/cyan] invocation.  Re-run with [cyan]--apply[/cyan] to export into the current shell instead.z
  [green]Exported z( secret(s) into current process.[/green])r   r   rv   ri   rt   ru   rr   r   r.   rƒ   rn   r�   Úapplyr	   r|   r„   r~   )r5   r…   r‰   r    r‹   r   r`   rJ   rB   r“   r‡   Úoverrider�   Úappliedr”   Úalreadyr•   s                    r2   r,   r,   Â  s´  € Ý‰iŒi€GÝ
‰-Œ-€CØ�gŠg�iÑ Ô Ð& B×+Ò+¨KÑ8Ô8Ð>¸B€FØ�:Š:�iÑ Ô ð Ø�Šð?ñ	
ô 	
ð 	
ð ˆqà—
’
Ð-Ð/AÑBÔB€IÝŒJ�NŠN˜9 bÑ)Ô)×/Ò/Ñ1Ô1€EØð Ø�ŠÐ;˜iÐ;Ð;Ð;Ñ<Ô<Ð<Øˆqà—’˜L¨"Ñ-Ô-€JØð Ø�ŠÐ<Ñ=Ô=Ð=Øˆqå�V—Z’Z ¨bÑ1Ô1Ð7°RÑ8Ô8×>Ò>Ñ@Ô@€Jð	ÝÔ6ØØ!ØØ!ð	
ñ 
ô 
Ñˆ��øõ ð ð ð Ø�ŠÐ7¨CÐ7Ð7Ð7Ñ8Ô8Ð8Øˆqˆqˆqˆqˆqøøøøðøøøð ð Ø�ŠÐ?Ñ@Ô@Ð@Øˆqå�F—J’JÐ2°EÑ:Ô:Ñ;Ô;ÐI¸t¼z€HÝ˜d°Ð8Ñ8Ô8€EØ	×Ò�V 6ÐÑ*Ô*Ð*Ø	×Ò�XÑÔÐØ€GÝ�g‰Œð dð dˆØ�)ÒÐØ�MŠM˜#ÐBÑCÔCÐCØÝ•r”z—~’~ cÑ*Ô*Ñ+Ô+ˆØð 	˜8ð 	Ø�MŠM˜#Ð>Ñ?Ô?Ð?ØØŒ:ð 	dØ% cœl�BŒJ�s‰OØ�q‰LˆGØ�MŠM˜#Ð8ÈWÐ<\¸M¸MÐZ\Ñ]Ñ^Ô^Ð^Ð^à�MŠM˜#Ð<ÐRYÐ@aÀÀÐ_aÑbÑcÔcÐcÐcà‡M‚M�%ÑÔÐØð 8ð 8ˆØ�ŠÐ6°1Ð6Ð6Ñ7Ô7Ð7Ð7àŒ:ð `Ø�Šð8ñ	
ô 	
ð 	
ð 	
ð 	�ŠÐ^¨WÐ^Ð^Ð^Ñ_Ô_Ð_Øˆ1s   ÅE Å
FÅ'FÆFc                óä   — t          ¦   «         }t          ¦   «         }|                     di ¦  «                             di ¦  «        }d|d<   t          |¦  «         |                     d¦  «         dS )NrB   r
   Frd   uÃ   [green]Disabled.[/green]  Bitwarden secrets will NOT be pulled on the next Hermes invocation.
  Your access token is left in .env â€” remove it manually if you also want to revoke the credential.r   )r   r   rx   r   ri   )r5   r…   r‰   r    s       r2   r-   r-     ss   € Ý‰iŒi€GÝ
‰-Œ-€CØ�nŠn˜Y¨Ñ+Ô+ß’˜K¨Ñ,Ô,ð à€Fˆ9ÑÝ�ÑÔÐØ‡M‚Mð	$ñô ð ð ˆ1r4   c                ó&  — t          ¦   «         }	 t          j        t          | j        ¦  «        ¬¦  «        }|                     d|› dt          |¦  «        › d�¦  «         dS # t          $ r$}|                     d|› d�¦  «         Y d }~dS d }~ww xY w)	N)Úforceu   [green]âœ“[/green] r=   r$   r   z[red]Install failed: r>   r?   )r   r.   rl   r�   r·   ri   rm   rn   )r5   r…   Úpathr‡   s       r2   r0   r0     s©   € Ý‰iŒi€GðÝŒ~¥D¨¬Ñ$4Ô$4Ð5Ñ5Ô5ˆØ�ŠÐJ¨DÐJÐJµ\À$Ñ5GÔ5GÐJÐJÐJÑKÔKÐKØˆqøÝð ð ð Ø�ŠÐ9¨cÐ9Ð9Ð9Ñ:Ô:Ð:Øˆqˆqˆqˆqˆqøøøøðøøøs   �AA" Á"
BÁ,BÂBÚbr�   r   c                ó   — | rdndS )Nz[green]yes[/green]z[dim]no[/dim]r©   )r¹   s    r2   rŸ   rŸ   ,  s   € Ø#$Ð9ÐÐ¨/Ð9r4   ra   r   c                ó  — 	 t          j        t          | ¦  «        dgddddd¬¦  «        }|j        dk    r8|j        p|j                             ¦   «                              ¦   «         d         S n# t          t           j	        f$ r Y nw xY wdS )	Nz	--versionTúutf-8Úreplacer^   )Úcapture_outputÚtextÚencodingÚerrorsÚtimeoutr   zversion unknown)
Ú
subprocessÚrunr   Ú
returncodeÚstdoutÚstderrrr   Ú
splitlinesÚOSErrorÚTimeoutExpired)ra   Úress     r2   rm   rm   0  s¦   € ð
ÝŒnÝ�‰[Œ[˜+Ð&ØØ °	Øð	
ñ 
ô 
ˆð Œ>˜QÒÐØ”JÐ, #¤*×3Ò3Ñ5Ô5×@Ò@ÑBÔBÀ1ÔEÐEð øå•ZÔ.Ð/ð ð ð ØˆðøøøàÐs   ‚A+A/ Á/BÂBrA   rI   rd   úOptional[Path]r   rJ   útuple[str, list[str]]c                ó¸  — | sdg fS |sdg fS |€dg fS g }|                      d¦  «        s|                     d¦  «         t          j        ¦   «         }t	          |dd¬¦  «        }t          ||||¬	¦  «        }|€_|                     d
¬¦  «                             ¦   «         }|r1|                     d„ | 	                    ¦   «         D ¦   «         ¦  «         d|fS d|fS )Nz-[dim]not checked[/dim] (integration disabled)z&[dim]not checked[/dim] (token missing)z*[dim]not checked[/dim] (bws not installed)rF   rG   TéÈ   )ÚfileÚrecordrS   rI   F)Ústylesc              3  ó>   K  — | ]}|                      ¦   «         V — Œd S )N)Úrstrip)r«   Úlines     r2   ú	<genexpr>z+_token_validation_status.<locals>.<genexpr>Z  s*   è è € ÐKÐK¨d˜DŸKšK™MœMÐKÐKÐKÐKÐKÐKr4   z[red]failed[/red]z[green]passed[/green])
ry   rs   ÚioÚStringIOr   r{   Úexport_textrr   ÚextendrÈ   )	rd   ra   r   rJ   ÚmessagesÚcaptureÚprobe_consolerŒ   Údetailss	            r2   rž   rž   ?  s  € ð ð CØ>ÀÐBÐBØð <Ø7¸Ð;Ð;Ø€~Ø;¸RÐ?Ð?à€HØ×Ò˜DÑ!Ô!ð 
Ø�Šð_ñ	
ô 	
ð 	
õ
 Œk‰mŒm€GÝ °¸SÐAÑAÔA€MÝ˜f e¨]ÀzÐRÑRÔR€HØÐØ×+Ò+°5Ð+Ñ9Ô9×?Ò?ÑAÔAˆØð 	LØ�OŠOÐKÐK°g×6HÒ6HÑ6JÔ6JÐKÑKÔKÑKÔKÐKØ" HÐ,Ð,Ø" HÐ,Ð,r4   r…   r   úOptional[List[dict]]c          	     ój  — ddl m}  |dd¬¦  «        }||d<   |                     dd¦  «         |r||d<   	 t          j        t          | ¦  «        d	d
ddg|ddddd¬¦  «        }n=# t          t          j        f$ r$}|                     d|› d�¦  «         Y d}~dS d}~ww xY w|j	        dk    r’|j
        p|j                             ¦   «         dd…         }|                     d|› d�¦  «         |                     ¦   «         }	d|	v sd|	v r|                     d¦  «         nd|	v sd|	v r|                     d¦  «         dS 	 t          j        |j        pd¦  «        }
n6# t          j        $ r$}|                     d|› d�¦  «         Y d}~dS d}~ww xY wt#          |
t$          ¦  «        sg S d„ |
D ¦   «         S ) zICall ``bws project list`` and return the parsed list, or None on failure.r   )Úbuild_subprocess_envF)Úscrub_secretsÚinherit_profile_homerD   ÚNO_COLORÚ1r@   ÚprojectÚlistz--outputÚjsonTr¼   r½   é   )Úenvr¾   r¿   rÀ   rÁ   rÂ   z  [red]Couldn't list projects: r>   Nrf   z   [red]bws project list failed: Úinvalid_clientz400 bad requesta$    [yellow]'invalid_client' from the US identity endpoint usually means the token is for a different Bitwarden region.  Re-run [cyan]hermes secrets bitwarden setup[/cyan] and pick EU or self-hosted at the region prompt, or set [cyan]secrets.bitwarden.server_url[/cyan] in config.yaml.[/yellow]ÚauthorizationÚinvalidzu  [yellow]This usually means the access token is wrong or revoked. Double-check it in the Bitwarden web app.[/yellow]z[]z  [red]bws returned non-JSON: c                óf   — g | ].}t          |t          ¦  «        ¯|                     d ¦  «        ¯,|‘Œ/S r¨   )Ú
isinstanceÚdictrv   rª   s     r2   ú
<listcomp>z"_list_projects.<locals>.<listcomp>‘  s6   € ÐCÐCÐC�!�z¨!­TÑ2Ô2ÐC°q·u²u¸T±{´{ÐCˆAÐCÐCÐCr4   )Útools.environments.localrá   rx   rÃ   rÄ   r   rÉ   rÊ   ri   rÅ   rÇ   rÆ   rr   Úlowerrè   ÚloadsÚJSONDecodeErrorrï   rç   )ra   r   r…   rJ   rá   rê   rË   r‡   ÚerrÚloweredÚdatas              r2   r{   r{   _  sV  € ð >Ð=Ð=Ð=Ð=Ð=Ø
Ð
¨UÈÐ
OÑ
OÔ
O€CØ#€CÐÑØ‡N‚N�:˜sÑ#Ô#Ð#Øð +Ø *ˆÐÑð
ÝŒnÝ�‰[Œ[˜) V¨Z¸Ð@ØØØ °	Øð
ñ 
ô 
ˆˆøõ •ZÔ.Ð/ð ð ð Ø�ŠÐC¸ÐCÐCÐCÑDÔDÐDØˆtˆtˆtˆtˆtøøøøðøøøð „~˜ÒÐØŒzÐ'˜SœZ×.Ò.Ñ0Ô0°°#°Ô6ˆØ�ŠÐD¸ÐDÐDÐDÑEÔEÐEØ—)’)‘+”+ˆØ˜wÐ&Ð&Ð*;¸wÐ*FÐ*FØ�MŠMð=ñô ð ð ð  Ð'Ð'¨9¸Ð+?Ð+?Ø�MŠMðEñô ð ð ˆtðÝŒz˜#œ*Ð,¨Ñ-Ô-ˆˆøÝÔð ð ð Ø�ŠÐB°sÐBÐBÐBÑCÔCÐCØˆtˆtˆtˆtˆtøøøøðøøøõ �d�DÑ!Ô!ð Øˆ	ØCÐC�tÐCÑCÔCÐCs/   ·-A% Á%BÁ;BÂBÅ E ÅFÅ+F
Æ
F)u7   US Cloud  (https://vault.bitwarden.com â€” bws default)rA   )z&EU Cloud  (https://vault.bitwarden.eu)zhttps://vault.bitwarden.eurŠ   rð   úOptional[str]c                ó"  — | j         r2| j                              ¦   «         r| j                              ¦   «         S t          j                             dd¦  «                             ¦   «         }|r|                     d|› d�¦  «         |S t          |                     dd¦  «        pd¦  «                             ¦   «         }|r|                     d|› d�¦  «         t          dd	d
d¬¦  «        }|                     ddd¬¦  «         |                     d¦  «         t          t          d¦  «        D ]+\  }\  }}|                     t          |¦  «        |¦  «         Œ,|                     t          t          t          ¦  «        dz   ¦  «        d¦  «         |                     |¦  «         t          t          ¦  «        dz   }		 d|	› d�}
|r|
dz  }
|
dz  }
|                     |
¦  «                             ¦   «         }|s|r|S |                     d¦  «         ŒV	 t          |¦  «        }n%# t          $ r |                     d¦  «         Y Œˆw xY wd|cxk    rt          t          ¦  «        k    rn nt          |dz
           d         S ||	k    rl|                     d¦  «                             ¦   «         }|s|                     d¦  «         d
S |                     d¦  «        s|                     d¦  «         |S |                     d|	› d�¦  «         �ŒP)a  Pick a Bitwarden server URL for setup.

    Resolution order:
      1. ``--server-url`` CLI flag (non-interactive)
      2. ``BWS_SERVER_URL`` env var (so users running with that already set
         in their shell don't have to re-enter it)
      3. Existing ``secrets.bitwarden.server_url`` value (for re-runs)
      4. Interactive menu: US / EU / self-hosted

    Returns the chosen URL as a string (empty string = bws default,
    i.e. US Cloud).  Returns None if the user aborted with an empty
    custom URL.
    r@   rA   z'  Detected [cyan]BWS_SERVER_URL[/cyan]=u    in your shell â€” using it.rJ   z  Existing config: [cyan]z?[/cyan]. Press Enter to keep, or pick a different option below.TrK   Nr—   )rM   rN   r™   rš   rO   r9   rP   rQ   zRegion / endpointr?   zSelf-hosted / custom URLz  Select region [1-Ú]z (Enter to keep current)z: r[   zD  Enter your Bitwarden server URL (e.g. https://vault.example.com): z!  [red]Empty URL, aborting.[/red])zhttp://zhttps://u]     [yellow]Warning: URL doesn't start with http:// or https:// â€” bws may reject it.[/yellow]r\   r]   )rJ   rr   rt   ru   rv   ri   r   r	   r|   r}   Ú_REGION_PRESETSr~   r�   r€   r7   r‚   ry   )r5   rŠ   r…   Úenv_urlÚexistingr�   rŽ   ÚlabelÚ_urlÚ
custom_idxÚpromptr�   r‘   Úcustoms                 r2   rz   rz   �  su  € ð$ „ð '˜4œ?×0Ò0Ñ2Ô2ð 'ØŒ×$Ò$Ñ&Ô&Ð&åŒj�nŠnÐ-¨rÑ2Ô2×8Ò8Ñ:Ô:€GØð Ø�ŠØ[°gÐ[Ð[Ð[ñ	
ô 	
ð 	
ð ˆå�;—?’? <°Ñ4Ô4Ð:¸Ñ;Ô;×AÒAÑCÔC€HØð 
Ø�ŠðE¨ð Eð Eð Eñ	
ô 	
ð 	
õ
 ˜d°¸TÈ6ÐRÑRÔR€EØ	×Ò�S ¨aÐÑ0Ô0Ð0Ø	×ÒÐ(Ñ)Ô)Ð)Ý%¥o°qÑ9Ô9ð %ð %Ñˆ‰=ˆE�4Ø�Š•c˜!‘f”f˜eÑ$Ô$Ð$Ð$Ø	‡M‚M•#•c�/Ñ*Ô*¨QÑ.Ñ/Ô/Ð1KÑLÔLÐLØ‡M‚M�%ÑÔÐå•_Ñ%Ô%¨Ñ)€Jð MØ4 zÐ4Ð4Ð4ˆØð 	1ØÐ0Ñ0ˆFØ�$‰ˆØ—’˜vÑ&Ô&×,Ò,Ñ.Ô.ˆØð 	Øð  Ø�Ø�MŠMÐ8Ñ9Ô9Ð9Øð	Ý�f‘+”+ˆCˆCøÝð 	ð 	ð 	Ø�MŠMÐ8Ñ9Ô9Ð9ØˆHð	øøøð �Ð+Ð+Ò+Ð+•s�?Ñ+Ô+Ò+Ð+Ð+Ð+Ð+Ý" 3¨¡7Ô+¨AÔ.Ð.Ø�*ÒÐØ—]’]ð5ñô ÷ Še‰gŒgð ð ð Ø—’ÐAÑBÔBÐBØ�tØ×$Ò$Ð%<Ñ=Ô=ð Ø—’ð?ñô ð ð ˆMØ�ŠÐK¸
ÐKÐKÐKÑLÔLÐLñA Ms   ÈH' È'I	ÉI	)r   r   r   r   )r5   r6   r   r7   )r¹   r�   r   r   )ra   r   r   r   )
rd   r�   ra   rÌ   r   r   rJ   r   r   rÍ   )
ra   r   r   r   r…   r   rJ   r   r   rß   )r5   r6   rŠ   rð   r…   r   r   rù   )+Ú__doc__Ú
__future__r   Úargparser×   rè   rt   rÃ   ro   Úpathlibr   Útypingr   r   Úrich.consoler   Ú
rich.panelr   Ú
rich.tabler	   Úagent.secret_sourcesr
   r.   Úhermes_cli.configr   r   r   r   Úhermes_cli.secret_promptr   r3   r)   r*   r+   r,   r-   r0   rŸ   rm   rž   r{   rü   rz   r©   r4   r2   ú<module>r     sq  ððð ð #Ð "Ð "Ð "Ð "Ð "à €€€Ø 	€	€	€	Ø €€€Ø 	€	€	€	Ø Ð Ð Ð Ø 
€
€
€
Ø Ð Ð Ð Ð Ð Ø !Ð !Ð !Ð !Ð !Ð !Ð !Ð !à  Ð  Ð  Ð  Ð  Ð  Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à 0Ð 0Ð 0Ð 0Ð 0Ð 0ðð ð ð ð ð ð ð ð ð ð ð ð :Ð 9Ð 9Ð 9Ð 9Ð 9ðH+ð H+ð H+ð H+ð`zð zð zð zðz8ð 8ð 8ð 8ðvNð Nð Nð NðbGð Gð Gð GðTð ð ð ð ð ð ð ð :ð :ð :ð :ðð ð ð ð( ð-ð -ð -ð -ð -ð -ðB FHð2Dð 2Dð 2Dð 2Dð 2Dð 2Dðr DØLð€ðLMð LMð LMð LMð LMð LMr4   