
    `gj@                        d Z ddlmZ ddlZddl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 ddlmZ dd	lmZ dd
lmZmZmZmZ dZd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dZ"ddZ#y)u  CLI handlers for ``hermes secrets onepassword ...``.

Subcommands:
    setup    — verify the op CLI, set account / token env var, enable
    status   — show config + op binary + auth + configured references
    set      — map an env var to an ``op://…`` reference
    remove   — drop a mapping
    sync     — resolve references now and show what would be applied (dry-run)
    disable  — flip ``secrets.onepassword.enabled`` to False

Unlike Bitwarden, the ``op`` binary is NOT auto-installed: 1Password publishes
the CLI through OS package managers and signed installers, so Hermes expects
an already-installed, already-authenticated ``op`` and never downloads one.
    )annotationsN)Path)Optional)Console)Panel)Table)onepassword)get_env_pathload_configsave_configsave_env_valueOP_SERVICE_ACCOUNT_TOKENz5https://developer.1password.com/docs/cli/get-started/c                V   | j                  d      }|j                  dd      }|j                  dd       |j                  dd	t         d
       |j                  dd       |j                  dd       |j	                  t
               |j                  dd      }|j	                  t               |j                  dd      }|j                  dd       |j                  dd       |j	                  t               |j                  dd      }|j                  dd       |j	                  t               |j                  dd      }|j                  ddd        |j	                  t               |j                  d!d"      }|j	                  t               y#)$z>Attach the ``onepassword`` subcommand tree to a parent parser.secrets_op_command)destsetupz:Verify the op CLI, set account / token env var, and enable)help	--accountz=1Password account shorthand or sign-in address (op --account)z--token-envz1Env var holding a service-account token (default )z--tokenz8Service-account token to store in .env non-interactivelyz--binary-pathz2Absolute path to the op binary (skips PATH lookup))funcstatusz$Show config + op binary + referencessetz$Map an env var to an op:// referenceenv_varz.Environment variable name, e.g. OPENAI_API_KEY	referencez51Password reference, e.g. op://Private/OpenAI/api keyremoveu'   Remove an env-var → reference mappingz"Environment variable name to unmapsyncz.Resolve references now and report what changedz--apply
store_truezIActually export resolved values into the current shell (default: dry-run))actionr   disablez"Turn off the 1Password integrationN)add_subparsers
add_parseradd_argument_DEFAULT_TOKEN_ENVset_defaults	cmd_setup
cmd_statuscmd_set
cmd_removecmd_synccmd_disable)parent_parsersubr   r   set_pr   r   r   s           U/root/.hermes/venv/lib/python3.12/site-packages/hermes_cli/onepassword_secrets_cli.pyregister_clir/   -   s   

&
&,@
&
ACNNI  E 
L   
@AS@TTUV   
G   
A   
I&^^H+Q^RF
Z(NN5'MNNE	y'WX	{)`a	G$^^H+T^UF
	(LM
Z(>>&'W>XDX  
 	8$nnY-QnRGk*    c                   t               }|j                  t        j                  dt         dd             t               }|j                  di       j                  di       }|j                          |j                  d       | j                  xs |j                  dd	      xs d	j                         }t        j                  |      }|B|r|j                  d
| d       n|j                  d       |j                  dt                y|j                  d| dt        |       d       |r||d<   | j                  rO| j                  j                         r5| j                  j                         |d<   |j                  d|d    d       |j                          |j                  d       | j                  xs |j                  d      xs t        j                         }||d<   | j                   xs d	j                         }|r?t#        ||       |t$        j&                  |<   |j                  dt)                d|        n}t$        j&                  j                  |      r|j                  d|        nIt+        ||j                  dd	            }|r|j                  d| d       n|j                  d| d       d|d<   |j                  di        |j                  dd        |j                  d!d       t-        |       |j                          |j                  d"       |j                  d#       y$)%Nz[bold]1Password secret source setup[/bold]

Hermes resolves [cyan]op://vault/item/field[/cyan] references through your
already-installed, already-authenticated 1Password CLI (`op`).

Don't have it yet? Install + sign in: [cyan][/cyan]cyan)border_stylesecretsr	   z&[bold]Step 1[/bold]  Locate the op CLIbinary_path u     [red]✗ z& is not an executable op binary.[/red]u&     [red]✗ op not found on PATH.[/red]z  Install the 1Password CLI:    u     [green]✓[/green] z  (r   accountz  Account: [cyan]z#[bold]Step 2[/bold]  Authenticationservice_account_token_envu5     [green]✓[/green] service-account token stored in z as u6     [green]✓[/green] using service-account token from u0     [green]✓[/green] using existing op session (z  [yellow]No service-account token and no active op session detected.[/yellow]
  Either run [cyan]op signin[/cyan] (desktop/interactive) or set a service-account token in z, then re-run status.Tenabledenvcache_ttl_seconds,  override_existingu6   [green]✓ 1Password secret source is enabled.[/green]z  Map credentials:  [cyan]hermes secrets onepassword set OPENAI_API_KEY "op://Private/OpenAI/api key"[/cyan]
  Preview:          [cyan]hermes secrets onepassword sync[/cyan]
  Status:           [cyan]hermes secrets onepassword status[/cyan]r   )r   printr   fit	_DOCS_URLr   
setdefaultr6   getstripop_srcfind_op_op_versionr9   	token_envr#   tokenr   osenvironr
   
_op_whoamir   )	argsconsolecfgop_cfgr6   binaryrI   rJ   whos	            r.   r%   r%   d   s   iGMM		; <E+WN  	
 -C^^Ir*55mRHF MMOMM:;##Jvzz-'DJQQSK^^K(F~MMK}4Z[\MMBC5i[ABMM)&[5H4IKL +} ||**, LL..0y)&*;)<GDE MMOMM78 '6::.I#J '& *3F&'ZZ2$$&Ey%( %

9M%(YK9 	:			"NykZ[Ir!:;MMLSEQRSTMM, -6;6KM F9
eR 
)3/
)40MMOMMJKMM	M r0   c                   t               }t               }|j                  d      xs i j                  d      xs i }t        |j                  d            }t	        |j                  dd      xs d      j                         }|j                  dt              }t	        |j                  dd      xs d      j                         }t        |j                  d      t              r|j                  d      ni }t        t        j                  j                  |            }	t        j                  |      }
t        d	d d
      }|j                  dd       |j                  d       |j                  dt!        |             |j                  d|xs d       |j                  d|       |j                  dt!        |	             |j                  dt!        t        |j                  dd                         |j                  dt	        |j                  dd                   |
r"|j                  d|
 dt#        |
       d       n|j                  dd       |j                  dt	        t%        |                   |j'                  t)        |dd              |rpt        dd!      }|j                  d"d       |j                  d#       t+        |      D ]   }|j                  |t	        ||                " |j'                  |       |s|j'                  d$       y%|
r:|	s8t-        |
|      }|r|j'                  d&|        n|j'                  d'| d(       |s|j'                  d)       y%)*Nr5   r	   r;   r9   r7   r:   r6   r<   F)r      )show_headerboxpaddingboldstyleEnabledAccountz[dim]default[/dim]zToken env varzToken in envzOverride existingr?   TzCache TTL (s)r=   r>   z	op binaryz (r   z[yellow]not found[/yellow]
Referencesz1Password secret sourcer3   )titler4   rV   header_styleEnv var	Referencez?
  Run [cyan]hermes secrets onepassword setup[/cyan] to enable.r   z%
  [green]Active op session:[/green] z$
  [yellow]No active op session and uK    is unset — Hermes will warn and skip 1Password on next startup.[/yellow]uv   
  [yellow]No references mapped yet.[/yellow]  Add one: [cyan]hermes secrets onepassword set ENV_VAR "op://…"[/cyan])r   r   rD   boolstrrE   r#   
isinstancedictrK   rL   rF   rG   r   
add_columnadd_row_ynrH   lenr@   r   sortedrM   )rN   rO   rP   rQ   r;   r9   rI   r6   
references	token_setrR   table	ref_tablenamerS   s                  r.   r&   r&      s   iG
-Cggi &B++M:@bF6::i()G&**Y+1r288:G

68JKIfjj39r:@@BK&0E1BD&IE"rJRZZ^^I./I^^K(Fev>E	Rv&	R	MM)S\*	MM)W<(<=	MM/9-	MM.#i.1	MM%s4

;NPT0U+V'WX	MM/3vzz2Es'K#LMkfXRF0C/DA#FGk#?@	MM,C
O 45MM%%>VTUd@	Yf5[):& 	;DdC
4(8$9:	;i XYi)MMB3%HIMM7	{ CP P O	
 r0   c                `   t               }t        j                  | j                  | j                  i      \  }}| j                  |vr|D ]  }|j                  d| d        yt               }|j                  di       j                  di       }|j                  d      }t        |t              si }||d<   || j                     || j                  <   t        |       |j                  d| j                   d|| j                             |j                  d	      s|j                  d
       y)N[red][/red]r8   r5   r	   r<   u    [green]✓[/green] mapped [cyan]u   [/cyan] → r;   uy     [yellow]Note: the integration is disabled — run [cyan]hermes secrets onepassword setup[/cyan] to turn it on.[/yellow]r   )r   rF   _validate_referencesr   r   r@   r   rC   rD   rf   rg   r   )rN   rO   validwarningswrP   rQ   env_maps           r.   r'   r'      s   iG 114<<2PQOE8||5  	-AMME!F+,	-
-C^^Ir*55mRHFjjGgt$u!$,,/GDLLMM
*4<<.
	! ::i T	
 r0   c                |   t               }t               }|j                  di       j                  di       }|j                  d      }t	        |t
              r| j                  |vr |j                  d| j                   d       y|| j                  = t        |       |j                  d| j                   d       y	)
Nr5   r	   r<   z[yellow]z is not mapped.[/yellow]r8   u-   [green]✓[/green] removed mapping for [cyan]r2   r   )	r   r   rC   rD   rf   rg   r   r@   r   )rN   rO   rP   rQ   ry   s        r.   r(   r(     s    iG
-C^^Ir*55mRHFjjGgt$G(C.FGHMMA$,,wWXr0   c                   t               }t               }|j                  d      xs i j                  d      xs i }|j                  d      s|j                  d       yt	        |j                  d      t
              r|j                  d      ni }|s|j                  d       yt        |j                  d	d
      xs d
      j                         }|j                  dt              }t        |j                  dd
      xs d
      j                         }| j                  rIt        j                  d||||t        |j                  dd            d      }|j                  r |j                  d|j                   d       yt        dd      }	|	j                  dd       |	j                  d       t!        |j"                        D ]  }
|	j%                  |
d        t!        |j&                        D ]  }
|	j%                  |
d        |j                  |	       |j(                  D ]  }|j                  d|         |j                  dt+        |j"                         d       y	 t        j,                  ||||d      \  }}t        |j                  dd            }t        dd      }	|	j                  dd       |	j                  d       t!        |      D ]  }
|
|k(  r|	j%                  |
d       |
|vr|	j%                  |
d        2t0        j2                  j                  |
      r|s|	j%                  |
d!       ft        t0        j2                  j                  |
            }|	j%                  |
d"|rd#nd
z           |j                  |	       |D ]  }|j                  d|         |j                  d$       y# t.        $ r}|j                  d| d       Y d }~yd }~ww xY w)%Nr5   r	   r;   zb[yellow]1Password integration is disabled.  Run `hermes secrets onepassword setup` first.[/yellow]r8   r<   us   [yellow]No op:// references configured.  Add one with `hermes secrets onepassword set ENV_VAR "op://…"`.[/yellow]r   r9   r7   r:   r6   Tr?   )r;   r<   r9   r:   r6   r?   r=   rs   rt   rY   r`   rb   r3   rZ   Actionz[green]exported[/green]z,[dim]skipped (already set / token var)[/dim]z[yellow]warning:[/yellow] z
  [green]Exported z( secret(s) into current process.[/green]F)rm   r9   rI   r6   	use_cachez[dim]skip (token var)[/dim]z$[red]unresolved (see warnings)[/red]z[dim]skip (already set)[/dim]z[green]would export[/green]z (overrides)u   
  This was a dry-run — references resolve automatically on the next [cyan]hermes[/cyan] invocation.  Re-run with [cyan]--apply[/cyan] to export into the current shell instead.)r   r   rD   r@   rf   rg   re   rE   r#   applyrF   apply_onepassword_secretsrd   errorr   rh   rl   appliedri   skippedrw   rk   fetch_onepassword_secretsRuntimeErrorrK   rL   )rN   rO   rP   rQ   rm   r9   rI   r6   resultro   rq   rx   r5   rw   excoverridealreadys                    r.   r)   r)     s   iG
-Cggi &B++M:@bF::i A	
 &0E1BD&IE"rJN	
 &**Y+1r288:G

68JKIfjj39r:@@BK zz11&/#"6::.A4#HI
 <<MME&,,v67$V<&1"6>>* 	;DMM$ 9:	;6>>* 	PDMM$ NO	Pe 	<AMM6qc:;	<"3v~~#6"7 8 	
 
"<<!#
 FJJ2D9:Hd8E	Yf-	Xz" 9MM$ => MM$ FGZZ^^D!(MM$ ?@2::>>$/0GMM-7PRS MM% 821#678MM	*
 ;  cU&)*s   -O 	O0O++O0c                    t               }t               }|j                  di       j                  di       }d|d<   t        |       |j	                  d       y)Nr5   r	   Fr;   u   [green]Disabled.[/green]  1Password references will NOT be resolved on the next Hermes invocation.
  Your reference mappings are left in config.yaml — remove them with [cyan]hermes secrets onepassword remove ENV_VAR[/cyan] if you no longer need them.r   )r   r   rC   r   r@   )rN   rO   rP   rQ   s       r.   r*   r*   |  sU    iG
-C^^Ir*55mRHFF9MM	 r0   c                    | rdS dS )Nz[green]yes[/green]z[dim]no[/dim] )bs    r.   rj   rj     s    #$9/9r0   c                   	 t        j                  t        |       dgddd      }|j                  dk(  r9|j                  xs |j
                  j                         j                         d   S 	 y# t        t         j                  f$ r Y yw xY w)Nz	--versionT   capture_outputtexttimeoutr   zversion unknown)

subprocessrunre   
returncodestdoutstderrrE   
splitlinesOSErrorTimeoutExpired)rR   ress     r.   rH   rH     s    
nn[+&	
 >>QJJ,#**335@@B1EE   Z../ s   A+A0 0BBc                .   t        |       dg}|r|d|gz  }	 t        j                  |ddd      }|j
                  dk7  ry|j                  xs dj                         }|j                  d	d
      dd xs dS # t        t        j                  f$ r Y yw xY w)zAReturn a short identity string if op is authenticated, else None.whoamir   T
   r   Nr   r7   
 x   authenticated)	re   r   r   r   r   r   r   rE   replace)rR   r9   cmdr   outs        r.   rM   rM     s    v;
!CW%%nnSD"M ~~::
"
"
$C;;tS!$3':?: Z../ s   A8 8BB)r+   zargparse.ArgumentParserreturnNone)rN   zargparse.Namespacer   int)r   rd   r   re   )rR   r   r   re   )rR   r   r9   re   r   zOptional[str])$__doc__
__future__r   argparserK   r   pathlibr   typingr   rich.consoler   
rich.panelr   
rich.tabler   agent.secret_sourcesr	   rF   hermes_cli.configr
   r   r   r   r#   rB   r/   r%   r&   r'   r(   r)   r*   rj   rH   rM   r   r0   r.   <module>r      sy    #  	        6  0 C	/+nNb8v>\~*:;r0   