+
    D#j                       ^ RI Ht ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RI	t	^ RI
t
^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ RIHtHt ^ RIHtH t H!t!H"t"H#t# ^ R	I$H%t% ^ R
I&H't'H(t(H)t)H*t* ^ RI+H,t, ^ RI-H.t. ^ RI/H0t0 Rt1Rt2Rt3Rt4Rt5RRRRRR/t6]7! ],4      t8Rt9]Pt                  ! R4      t;]Pt                  ! R4      t<]! R4      t=Rt>Rt?]Pt                  ! R4      t@]A! 0 Rm4      tBRtC]D! ],P                  ! 4       4      tF]D! ]6P                  4       4      tG]FtH. ]6O]HO5tI]1tJ]2tKRtL]L U UUu/ uF  w  rp],V,          VbK  	  uppp tM]D;QJ d    . R ]L 4       F  NK  	  5M! R ]L 4       4      tN ! R  R!]O4      tP ! R" R#]P4      tQ ! R$ R%]P4      tR ! R& R']P4      tS]! R(R(R)7       ! R* R+4      4       tTR, R- ltUR. R/ ltVRR0 R1 lltWR2 R3 ltXR4 R5 ltYRR6 R7 lltZR8 R9 lt[R: R; lt\R< R= lt]R> R? lt^R@ RA lt_RB RC lt`RD RE ltaRF RG ltb]! R(R(R)7       ! RH RI4      4       tc]Pt                  ! RJ4      tdRKRLRMRLRNRORPRORQRRRSRR/teRT RU ltfRV RW ltgRX RY lthRZ R[ ltiR\ R] ltjR^ R_ ltkR` Ra ltlRb Rc ltmRd Re ltnRf Rg ltoRh Ri ltpRj Rk ltq]! R(R(R)7       ! Rl Rm4      4       tr]! R(R(R)7       ! Rn Ro4      4       tsRp Rq lttRr Rs ltuRt Ru ltvRv Rw ltwRRx Ry lltxRRz R{ lltyRR| R} lltzRR~ R llt{R R lt|RR R llt}RR R llt~R R ltR R ltR R ltR R ltR R ltR R ltR R ltR R ltR R ltR R ltR R ltR R lt]R R l4       tR R ltR R ltR R ltR R ltR R ltR R ltR R ltR R ltR R ltR R ltR R ltR R ltR R ltR R lt]R8X  d8   ]EP6                  EP9                  RR4       ]! ]! ]EP<                  4      4      hR# u uppp i )    )annotationsN)Iterator)contextmanager)	dataclass)Path)AnyLiteral)AccountLockErrorAccountUseAuthorizationHumanOverrideErrorauthorize_account_userevalidate_account_use)AccountRegistry)ClaudeAdapterCodexAdapterCommandRouteraccount_spend_cap_block)MODEL_ALIASES)AllAccountsCappedError)runtime_dirzgpt-5.6-solzgpt-5.6-lunaCLAUDEX_PROXY_SCOPEzclaudex-proxy.slicez--dangerously-skip-permissionsfablezclaude-fable-5opuszclaude-opus-5sonnetzclaude-sonnet-5zcunsupported-security-boundary: remote seats accept only GPT-backed models (sol, terra, luna, gpt-*)z ^gpt-[A-Za-z0-9][A-Za-z0-9._-]*$z^claude-z#.local/state/overdeck/seat-bindingsi    z [\x00-\x08\x0b\x0c\x0e-\x1f\x7f]c              #  L   "   T F  w  p pR F  pRV RV 2x  K  	  K  	  R# 5i) ANTHROPIC_DEFAULT__MODELN)r   _NAME_DESCRIPTION_SUPPORTED_CAPABILITIES ).0slot_suffixs   &   X/home/user/overdeck-private-tests/subrouter-s5-systray-latest/modules/systray/claudex.py	<genexpr>r(      s7      (
aJ fVH-J .(s   "$c                      ] tR t^t^tRtR# )ClaudexErrorr"   N__name__
__module____qualname____firstlineno__	exit_code__static_attributes__r"       r'   r*   r*      s    Ir2   r*   c                      ] tR t^t^tRtR# )MissingBinaryErrorr"   Nr+   r"   r2   r'   r4   r4      s    Ir2   r4   c                      ] tR t^tRtR# )CredentialConflictErrorr"   N)r,   r-   r.   r/   r1   r"   r2   r'   r6   r6      s    r2   r6   c                  B   a  ] tR t^t^KtRR V 3R llltR R ltRtV ;t# )ClaudexCappedErrorc               $    V ^8  d   QhRRRRRR/# )   	resume_at
str | NonetoolstrreturnNoner"   )formats   "r'   __annotate__ClaudexCappedError.__annotate__   s!     # #* #C #d #r2   c                	:   < \         SV `  R V R24       Wn        R# )zclaudex: selected z account is spend-cappedN)super__init__r;   )selfr;   r=   	__class__s   &&&r'   rF   ClaudexCappedError.__init__   s     -dV3KLM"r2   c                   V ^8  d   QhRR/# r:   r?   r>   r"   )rA   s   "r'   rB   rC      s     : :c :r2   c                	|    R RRRRR/pV P                   e   V P                   VR&   \        P                  ! VRR7      # )	okFdetailzrate-limitedreasonzall-accounts-cappedr;   
separators,:)r;   jsondumps)rG   payloads   & r'   refusal_jsonClaudexCappedError.refusal_json   sD    %n+&

 >>%#'>>GK zz'j99r2   )r;   )Codex)	r,   r-   r.   r/   r0   rF   rX   r1   __classcell__)rH   s   @r'   r8   r8      s    I# #: :r2   r8   T)frozenslotsc                  R    ] tR t^t$ R]R&   R]R&   R]R&   RtR]R&   RtR	]R
&   RtR# )SelectedAccountr>   slugr   native_auth_pathproxy_config_dirNPath | Nonebase_dirAccountUseAuthorization | Noneauthorizationr"   r,   r-   r.   r/   __annotations__rd   rf   r1   r"   r2   r'   r_   r_      s(    
I Hk 48M18r2   r_   c                   V ^8  d   QhRR/# )r:   r?   ztuple[Path, Path]r"   )rA   s   "r'   rB   rB      s     6 6+ 6r2   c                 N    \        4       \        P                  ! 4       R ,          3# )z.codex-tray)r   r   homer"   r2   r'   _codex_tray_dirsrl      s    =$))+555r2   c                    V ^8  d   QhRRRR/# )r:   tokenr>   r?   ztuple[str, ...]r"   )rA   s   "r'   rB   rB      s      S _ r2   c                     \        4       P                  V 4      pVe   W8X  d   V 3# W3#   \        \        \        3 d    R p L*i ; iN)r   resolve_profile_tokenOSError
ValueErrorKeyError)rn   resolveds   & r'   _codex_account_candidatesrv      sT    "$::5A 8,x	 Z* s   + AAc               $    V ^8  d   QhRRRRRR/# )r:   r`   r>   	tray_dirsztuple[Path, ...] | Noner?   r_   r"   )rA   s   "r'   rB   rB      s)     O O
O1OOr2   c                8   Vf   \        4       MTp\        V 4       Fm  pV Fd  pVR,          V,          R,          R,          pVP                  4       '       g   K9  \        VVVP                  P                  R,          V4      u u # 	  Ko  	  \        RV : 24      h)Naccounts
CODEX_HOME	auth.jsonCLAUDEX_HOMEz+claudex: no Systray AI Codex account named )rl   rv   is_filer_   parentr*   )r`   rx   candidate_dirs	candidaterd   	auth_paths   &&    r'   _requested_codex_accountr      s     ,5+<%')N.t4	&H :-	9LH;VI  ""&$$++n<	  ' 5 DTHM
NNr2   c                    V ^8  d   QhRRRR/# )r:   r`   r>   r?   r@   r"   )rA   s   "r'   rB   rB      s     4 4 4 4r2   c                `    \        \        4       V 4      pVe   \        VP                  4      hR # rp   )r   r   r8   r;   )r`   blockeds   & r'   _require_codex_spend_headroomr      s,    %lnd;G !2!233 r2   c                    V ^8  d   QhRRRR/# )r:   requested_slugr<   r?   r@   r"   )rA   s   "r'   rB   rB      s     	
 	
j 	
T 	
r2   c                    V f   \        R4      h\        ;QJ d#    . R V P                  R4       4       F  NK  	  5M! R V P                  R4       4       4      p\        V4      ^8w  d   \        R4      hR # )N4--human-override-lock requires an explicit --accountc              3  p   "   T F,  qP                  4       '       g   K  VP                  4       x  K.  	  R # 5irp   )strip)r#   parts   & r'   r(   4_validate_human_override_selector.<locals>.<genexpr>   s"     U+D4

,$**,,+Ds   66rS   zH--human-override-lock requires exactly one explicit account per provider)r   tuplesplitlen)r   partss   & r'   !_validate_human_override_selectorr      sn     B
 	
 EU>+?+?+DUEEU>+?+?+DUUE
5zQ V
 	
 r2   c               $    V ^8  d   QhRRRRRR/# )r:   r   r<   human_override_lockboolr?   r_   r"   )rA   s   "r'   rB   rB      s&     8 888 8r2   c                   V'       d   \        V 4       \        4       pV^ ,          pV ex   \        W4      p\        VP                  4       VP
                  f   V# \        VRVP                  VRR7      p\        VP                  VP                  VP                  VV4      # . p\        V4       F  w  rxVR,          p	 V	P                  RR7      P                  4       p
V	P                  4       P                  pTR,          T
,          R,          R	,          pT
'       g   Kq  TP!                  4       '       g   K  TP#                  Y) YT34       K  	  V'       g   \%        R
4      h\'        V4      w   rr\        V
4       \        VRV
VRR7      pVP(                  P(                  p\        V
VVR,          VV4      #   \         d     EK  i ; i)r   codexTallow_lockedexplicit_accountdefault_slugutf-8encodingrz   r{   r|   z2claudex: no valid Systray AI default Codex accountFr}   )r   rl   r   r   r`   rd   r   r_   ra   rb   	enumerate	read_textr   statst_mtimerr   r~   appendr*   maxr   )r   r   rx   lock_policy_dir	requestedrf   
candidatesindexrd   default_pathr`   mtimer   r%   account_dirs   &&             r'   resolve_selected_accountr      s    ).9 "IlO!,^G	%inn5%-NN,!
 NN&&&&
 	
 <>J$Y/.0	))7);AACD %%'00E z)D0<?+M	4I%%''ufdxHI 0 OPP&)*o#Aq	!$')(M ""))Kn$ #  		s   >:F::G
	G
c                    V ^8  d   QhRRRR/# )r:   rn   r>   r?   intr"   )rA   s   "r'   rB   rB   &  s     
 
s 
s 
r2   c                    V P                  R 4      ^,          pR\        V4      ) ^,          ,          p\        P                  ! \        P
                  ! W,           4      4      pVR,          p\        T\        4      '       d   T^ 8:  d   \        R4      hTR,          #   \        \        \        \        \        P                  3 d   p\        R4      ThRp?ii ; i).=expz/claudex: Codex access token has no valid expiryN  )r   r   rU   loadsbase64urlsafe_b64decode
IndexErrorrt   	TypeErrorrs   JSONDecodeErrorr*   
isinstancer   )rn   segmentpaddingrW   r   excs   &     r'   _jwt_exp_msr   &  s    W++c"1%#g,*+**V55g6GHIen c33!8LMM:	 )Z9M9MN WLMSVVWs   A+B *CCCc               $    V ^8  d   QhRRRRRR/# )r:   valueobjectfieldr>   r?   r"   )rA   s   "r'   rB   rB   3  s!      F 3 3 r2   c                |    \        V \        4      '       d   V P                  4       '       g   \        R V R24      hV # )z)claudex: missing Codex credential field '')r   r>   r   r*   )r   r   s   &&r'   _required_stringr   3  s3    eS!!FugQOPPLr2   c                    V ^8  d   QhRRRR/# )r:   nativedict[str, object]r?   r"   )rA   s   "r'   rB   rB   9  s      !2 7H r2   c                .   V P                  R 4      p\        V\        4      '       g   \        R4      h\	        VP                  R4      R4      p\	        VP                  R4      R4      p\	        VP                  R4      R4      pRVR	VR
\        V4      RV/# )tokens)claudex: invalid native Codex auth formataccess_tokenztokens.access_tokenrefresh_tokenztokens.refresh_token
account_idztokens.account_idaccessrefreshexpires	accountId)getr   dictr*   r   r   )r   r   r   r   r   s   &    r'   native_to_proxy_authr   9  s    ZZ!Ffd##FGGfjj8:OPFvzz/:<RSG!&**\":<OPJ&7;v&Z	 r2   c                    V ^8  d   QhRRRR/# )r:   pathr   r?   dict[str, Any]r"   )rA   s   "r'   rB   rB   H  s      D ^ r2   c                     \         P                  ! V P                  R R7      4      p\        T\        4      '       g   \        RT  24      hT#   \        \         P                  3 d   p\        RT  24      ThRp?ii ; i)r   r   z"claudex: invalid credential file: N)rU   r   r   rr   r   r*   r   r   )r   rW   r   s   &  r'   _read_json_objectr   H  s|    Q**T^^W^=> gt$$?vFGGN	 T))* Q?vFGSPQs   &A A=)A88A=c               $    V ^8  d   QhRRRRRR/# )r:   r   r   rW   r   r?   r@   r"   )rA   s   "r'   rB   rB   R  s"     
  
 T 
 ,= 
 $ 
 r2   c                   V P                   P                  R R RR7       \        P                  ! V P                   R4       \        P
                  ! RRV P                   RR7      ;_uu_ 4       p\        P                  ! WRR7       VP                  R4       \        VP                  4      pR	R	R	4       \        P                  ! XR
4       \        P                  ! W04       R	#   + '       g   i     L?; i)T  parentsexist_okmodewr   F)r   dirdeleterP   
Ni  rR   )r   mkdiroschmodtempfileNamedTemporaryFilerU   dumpwriter   namereplace)r   rW   handle	temp_paths   &&  r'   _atomic_write_jsonr   R  s    KKdT>HHT[[% 		$	$g4;;u
 
			'j9T%	
 HHYJJy
 
s   ,?C""C2	c               (    V ^8  d   QhRRRRRRRR/# )r:   native_pathr   r   r   proxyr?   r@   r"   )rA   s   "r'   rB   rB   _  s0     , ,,, , 
	,r2   c                   VP                  R 4      p\        V\        4      '       g   \        R4      h\	        VP                  R4      R4      VR&   \	        VP                  R4      R4      VR&   \	        VP                  R4      R4      VR&   \
        P                  ! R\
        P                  ! 4       4      VR	&   \        W4       R
# )r   r   r   r   r   r   r   r   z%Y-%m-%dT%H:%M:%SZlast_refreshN)	r   r   r   r*   r   timestrftimegmtimer   )r   r   r   r   s   &&& r'   _export_proxy_to_nativer   _  s    
 ZZ!Ffd##FGG-eii.A8LF>.uyy/CYOF?+EIIk,BKPF<!]]+?OF>{+r2   c               $    V ^8  d   QhRRRRRR/# )r:   r   r   
proxy_pathr?   r@   r"   )rA   s   "r'   rB   rB   n  s!     5 5t 5 5$ 5r2   c                   \        V 4      p\        V4      pVP                  4       '       g   \        W4       R # \        V4      p\	        VP                  R4      R4      p\	        VP                  R4      R4      p\	        VP                  R4      R4      pWsR,          8w  d   \        R4      hVR,          p\        V\        4      '       g   \        R4      hTp	\        V4      p
\        VR,          4      pW8w  d   W8X  d   \        R4      hW8  d   \        WV4       R # W8  g   WSR,          8w  d   \        W4       R # R # )Nr   r   r   z4claudex: proxy credential belongs to another accountr   z*claudex: invalid native Codex token expiryzTclaudex: divergent Codex refresh tokens; re-authenticate selected Systray AI account)r   r   existsr   r   r   r6   r   r   r*   r   r>   r   )r   r   r   native_proxyr   proxy_accessproxy_refreshproxy_accountnative_exp_value
native_exp	proxy_expnative_refreshs   &&          r'   reconcile_credentialsr	  n  s   {+F'/L:4j)E#EIIh$7BL$UYYy%99EM$UYY{%;[IM[11%&\]]#I.&,,GHH!JL)Ii01N&:+B%b
 	
 U;		<3I#I:4 $Jr2   c                   V ^8  d   QhRR/# )r:   r?   r   r"   )rA   s   "r'   rB   rB     s     , ,S ,r2   c                    \         P                   ! \         P                  \         P                  4      ;_uu_ 4       p V P                  R4       \	        V P                  4       ^,          4      uuRRR4       #   + '       g   i     R# ; i)	127.0.0.1N)r  r   )socketAF_INETSOCK_STREAMbindr   getsockname)servers    r'   find_available_portr    sQ    	v~~v'9'9	:	:f$%6%%'*+ 
;	:	:	:s   1A88B		c                  :    ] tR tRt$ R]R&   R]R&   RtR]R&   RtR	# )
AccountOverridesi  r<   r   claudeFr   r   r"   N)r,   r-   r.   r/   rh   r   r1   r"   r2   r'   r  r    s     %%r2   r  z[0-9a-fA-F-]{8,}	--accountbothz	--profilez--codex-accountr   z--codex-profilez--claude-accountr  z--claude-profilec                    V ^8  d   QhRRRR/# r:   argv	list[str]r?   z"tuple[AccountOverrides, list[str]]r"   )rA   s   "r'   rB   rB     s     !  ! ) ! 0R ! r2   c                   / p. p^ pRpV\        V 4      8  d   W,          pVR8X  d   RpV^,          pK,  VP                  R4      '       d   \        R4      hVP                  R4      w  rgp\        P                  V4      p	V	f   VP                  V4       V^,          pK  V'       d   WV	&   V^,          pK  VP                  R4      '       g   V^,           \        V 4      8  d   \        RV R24      hW^,           ,          W&   V^,          pEK  VP                  R	4      p
\        VP                  R
V
4      VP                  RV
4      V4      pW3# )r   Fz--human-override-lockTz--human-override-lock=z4claudex: --human-override-lock does not take a valuer   	claudex: z requires an accountr  r   r  )	r   
startswithr*   	partitionACCOUNT_FLAGSr   r   endswithr  )r  chosen	forwardedr   r   argumentflagr%   inlineproviderr  	overridess   &           r'   parse_account_overridesr*    sL   FIE
#d)
;.."&QJE788UVV",,S1 $$T*X&QJE%8QJES!!UQY#d)%;4&0DEFF	?
::fD 

7D!

8T"I
 r2   c                    V ^8  d   QhRRRR/# r  r"   )rA   s   "r'   rB   rB     s     > >y >5W >r2   c                |    R V 9  d   \        V 4      # V P                  R 4      p\        V RV 4      w  r#V. VOWR O3# )--N)r*  r   )r  separator_indexrz   wrapper_argvs   &   r'   parse_seat_account_overridesr0    sT    4&t,,jj&O4T:J?5KLH=|=d+;&<===r2   c                    V ^8  d   QhRRRR/# r:   rn   r>   r?   r"   )rA   s   "r'   rB   rB     s     
 
s 
s 
r2   c                $  a  / \         C\        CpVP                  S 4      pVe   V# S '       db   \        ;QJ d    V 3R lR 4       F  '       g   K   RM	  RM! V 3R lR 4       4      '       g"   \	        RS  RRP                  V4       R24      hS # )	Nc              3  ,   <"   T F	  qS9   x  K  	  R # 5irp   r"   )r#   	separatorrn   s   & r'   r(   .resolve_claudex_model_token.<locals>.<genexpr>  s     M_	e+_   TFzclaudex: unknown model alias 'z' (valid aliases: z, )-r   /)r   NATIVE_MODEL_ALIASESr   anyr*   join)rn   aliasesru   s   f  r'   resolve_claudex_model_tokenr@    s    77"67G{{5!HSSM_MSSSM_MMM,UG 4#yy12!5
 	
 Lr2   c                    V ^8  d   QhRRRR/# )r:   r  r  r?   ztuple[str | None, list[str]]r"   )rA   s   "r'   rB   rB     s      i $@ r2   c                P   R p. p^ p0 \         m\        mpV\        V 4      8  Ed    W,          pVR9   d)   V^,           \        V 4      8  d   ^W^,           ,          rvMeVP                  R4      '       g   VP                  R4      '       d   ^VP	                  R^4      ^,          rvMVP                  V4       V^,          pK  \        V4      pW9   d   TpMDVP                  R4      '       d   VP                  RV.4       MVP                  WW6,            4       W6,          pEK  W3# )N-m--model-m=--model=r      rC  rD  )AVAILABLE_MODELSNATIVE_PICKER_MODELSr   r  r   r   r@  extend)	r  modelr$  r   known_modelsr%  widthrn   ru   s	   &        r'   parse_modelrN    s
   EIE=%=(<=L
#d)
;((UQYT-Bd19o5  ''8+>+>z+J+JhnnS!4Q75X&QJE.u5#E  &&i23T%-89r2   c                   V ^8  d   QhRR/# )r:   r?   dict[str, str]r"   )rA   s   "r'   rB   rB     s     	 	. 	r2   c                 |    / p \          F/  w  rp\        V,          pW@R V R2&   W0R V R2&   V R2V R V R2&   K1  	  V # )r   r   _MODEL_NAMEz through claude-code-proxy_MODEL_DESCRIPTION)PROXY_PICKER_SLOTSr   )pickerr$   aliaslabelrK  s        r'   proxy_picker_envrX    sk    F0Ue$49#D6019>#D656g/0 	#D6);<=	 1 Mr2   c                    V ^8  d   QhRRRR/# )r:   r  r  r?   r"   )rA   s   "r'   rB   rB     s     / /i /I /r2   c                .    \         V 9   d   V # \         .V O# rp   )DANGEROUS_PERMISSIONS_FLAGr  s   &r'   default_claude_argsr]    s    !T)&...r2   c               $    V ^8  d   QhRRRRRR/# )r:   r  r  settings_pathr   r?   r"   )rA   s   "r'   rB   rB   
  s&     B Bi B B Br2   c                >    V ^ ,          R\        V4      .V R,          O# )r   
--settings   NN)r>   )r  r_  s   &&r'   model_settings_argsrd  
  s!    G\3}#5ARAAr2   c                   V ^8  d   QhRR/# )r:   r?   r@   r"   )rA   s   "r'   rB   rB     s     # #4 #r2   c                    \         P                  P                  \        4      R 8X  d   R# \        P
                  ! R4      p V f   \        R4      hV RRRRRR	\         2R
\         P                  ! 4        R2R\         R2\        P                  ^ ,          .
\        P                  R,          Op\         P                  ! W4       R# )1Nzsystemd-runz/claudex: required binary not found: systemd-runz--userz--scopez--quietz	--collectz
--same-dirz--slice=z--unit=claudex-proxy-z.scopez	--setenv=z=1rb  )r   environr   PROXY_SCOPE_MARKERshutilwhichr4   PROXY_SLICEgetpidsysr  execv)systemd_runcommands     r'   enter_proxy_slicerr    s    	zz~~()S0,,}-K !RSS
;- 
		}F3
&'r* 
"G HH["r2   c                    V ^8  d   QhRRRR/# )r:   expected_parent_pidr   r?   r@   r"   )rA   s   "r'   rB   rB   $  s      # $ r2   c                N   \         P                  ! R RR7      pVP                  ^\        P                  4      ^ 8w  d6   \         P
                  ! 4       p\        V\        P                  ! V4      4      h\        P                  ! 4       V 8w  d   \        P                  ! ^4       R # R # )NT)	use_errno)ctypesCDLLprctlsignalSIGTERM	get_errnorr   r   strerrorgetppid_exit)rt  libcerrors   &  r'   _set_parent_death_signalr  $  sl    ;;tt,Dzz!V^^$)  "eR[[/00	zz|**
 +r2   c               $    V ^8  d   QhRRRRRR/# )r:   processsubprocess.Popen[str]portr   r?   r@   r"   )rA   s   "r'   rB   rB   -  s"     ; ;1 ; ; ;r2   c                   \         P                  ! 4       ^
,           pRV R2p\         P                  ! 4       V8  dp   V P                  4       e   \        R4      h \        P
                  P                  VRR7      ;_uu_ 4       pVP                  ^8X  d    RRR4       R#  RRR4       K  \        R4      h  + '       g   i     K  ; i  \        \        P                  P                  3 d    \         P                  ! R4        K  i ; i)	
   http://127.0.0.1:z/healthzNz&claudex: proxy exited before readinessg      ?timeoutg?z claudex: proxy readiness timeout)r   	monotonicpollr*   urllibrequesturlopenstatusrr   r  URLErrorsleep)r  r  deadlineurlresponses   &&   r'   wait_for_proxyr  -  s    ~~"$HdV8
,C
..
X
%<<>%GHH	''T'::h??c) ;:) ;:
 9
:: ;:: ../ 	JJt	s6   )C B7C "C 7C	C C ;D
	D
c                    V ^8  d   QhRRRR/# )r:   r   r>   r?   r"   )rA   s   "r'   rB   rB   <  s      # # r2   c                   \         P                  ! 4       R ,          R,          V ,          pVP                  4       '       dV   \        P                  ! V\        P
                  4      '       d+   VP                  4       P                  R8X  d   \        V4      # \        P                  ! V 4      pVf   \        RV  24      hV# ).claudebinz_tmpjail-shim.shz$claudex: required binary not found: )r   rk   r~   r   r   X_OKresolver   r>   rj  rk  r4   )r   shimr   s   &  r'   _require_binaryr  <  s     99;"U*T1D||~~"))D"''22<<>"44t9<<D| #Gv!NOOKr2   c                    V ^8  d   QhRRRR/# )r:   r  r  r?   r@   r"   )rA   s   "r'   rB   rB   J  s        -  $  r2   c                    V P                  4       e   R # V P                  4         V P                  ^R7       R #   \        P                   d'    T P                  4        T P                  ^R7        R # i ; i)Nr  )r  	terminatewait
subprocessTimeoutExpiredkill)r  s   &r'   
_terminater  J  s\    ||~! Q$$  Q s   : 7A54A5c                  R    ] tR tRt$ R]R&   R]R&   R]R&   RtR	]R
&   RtR]R&   RtR# )ClaudeAccountiU  r>   r`   r   rk   rP  envNrc   rd   re   rf   r"   rg   r"   r2   r'   r  r  U  s'    
I
J	 Hk 48M18r2   r  c                  ,    ] tR tRt$ R]R&   R]R&   RtR# )SeatWrapperModeli^  r>   rK  r  r  r"   N)r,   r-   r.   r/   rh   r1   r"   r2   r'   r  r  ^  s    J
Or2   r  c                    V ^8  d   QhRRRR/# )r:   r`   r>   r?   r   r"   )rA   s   "r'   rB   rB   d  s        r2   c                   \        \        4       4      pVP                  P                  4        FV  pVP                  P	                  W 4      pVf   K$  VP                  P                  W#4      P                  4       '       g   KU   R# 	  R# )NTF)r   r   adaptercandidate_tray_dirsrq   account_homer   )r`   routercandidate_dirresolved_slugs   &   r'   claude_account_existsr  d  sh    =?+F;;=<<]Q >>&&}DKKMM > r2   c                    V ^8  d   QhRRRR/# )r:   rz   r  r?   r<   r"   )rA   s   "r'   rB   rB   o  s      "2 z r2   c                    V P                   e   V P                  f   R # V P                   V P                  8w  d   R # V P                   # rp   )r   r  )rz   s   &r'   pinned_account_slugr  o  s5    ~~!8~~(>>r2   c                    V ^8  d   QhRRRR/# )r:   rz   r  r?   r   r"   )rA   s   "r'   rB   rB   w  s     + +7G +D +r2   c                D    \        V 4      pVf   R# \        V4      '       * # NF)r  r  )rz   r`   s   & r'   (should_run_codex_only_for_pinned_accountr  w  s"    x(D|$T***r2   c                    V ^8  d   QhRRRR/# )r:   r  r   r?   r   r"   )rA   s   "r'   rB   rB   ~  s     ! !d !s !r2   c                    ^ RI Hp V! V 4      # )r   )resolve_credentials)claude_credentialsr  )r  r  s   & r'   r  r  ~  s    A<  r2   c               $    V ^8  d   QhRRRRRR/# )r:   r   r<   r   r   r?   r  r"   )rA   s   "r'   rB   rB     s+     +R +R+R+R +Rr2   c                   V'       d   \        V 4       \        \        4       4      pV'       d   VP                  V V R J RR7      pMVP                  W R J R7      pVf   V e   \	        RV : 24      h\	        R4      h\        V\        4      '       d   \        VP                  R4      hVw  rEpVP                  P                  4       p\        VRVVV R JR7      pVP                  p	 V	P                  V4      ;'       g    . p
V
 F!  p\        RV 2\         P"                  R
7       K#  	  \%        Wx4       \'        V	P)                  V4      4      p\+        \-        V4      P.                  P0                  4      VR&   \3        WVWV4      #   \        \        3 d+   p. p
\        R	T 2\         P"                  R
7        R p?LR p?ii ; i)NT)notify_fallbackignore_locks)r  z,claudex: no Systray AI Claude account named z3claudex: no valid Systray AI default Claude accountClauder  r   z$claudex: shared state sync skipped: filez"claudex: kept per-account copy of CLAUDE_SECURESTORAGE_CONFIG_DIR)r   r   r   _resolve_accountr*   r   r   r8   r;   r  r   r   sync_before_execrr   RuntimeErrorprintrn  stderrr   r   	build_envr>   r  r   r   r  )r   r   r  ru   rd   r`   r  r   rf   r  	conflictsr   conflictr  s   &&            r'   resolve_claude_accountr    s    ).9=?+F***d2 + 
 **d,B + 
 %!MnM_`aaPQQ(233 !3!3X>>#+ HLnn446O)('t3M nnGM,,X6<<"	 28*=CJJO ?:
w  .
/C-01D\1R1W1W1^1^-_C)*S=QQ \" M	4SE:LLMs   &F >F G  F;;G c                    V ^8  d   QhRRRR/# )r:   r   r<   r?   r>   r"   )rA   s   "r'   rB   rB     s     7 7
 7c 7r2   c                ,    \        V 4      P                  # rp   )r  r`   )r   s   &r'   resolve_claude_account_slugr    s    !.1666r2   c                    V ^8  d   QhRRRR/# )r:   r   r<   r?   r"   )rA   s   "r'   rB   rB     s       z r2   c                   \        \        4       4      pVP                  pV eZ   VP                  4        FC  pVP	                  W04      pVf   K  VP                  W44      P                  4       '       g   KA  Vu # 	  R # VP                  VP                  4       4      pVf   R # VP                  VP                  VP                  4      P                  4       '       d   VP                  # R # rp   )
r   r   r  r  rq   r  r   selected_defaultrd   r`   )r   r  r  r  r  r  s   &     r'   existing_claude_account_slugr    s    =?+FnnG!$88:M#99-XM$##MAHHJJ$$ ; //0K0K0MN,557G7L7LMTTVV$$$r2   c               $    V ^8  d   QhRRRRRR/# )r:   account_slugr>   rk   rc   r?   r   r"   )rA   s   "r'   rB   rB     s!     < <C <{ <d <r2   c                f    Vf   \         P                  ! 4       MTpV\        ,          V  R2,          # )Nz.json)r   rk   SEAT_BINDING_REL)r  rk   roots   && r'   seat_binding_pathr    s+    ,499;DD""~U%;;;r2   c                   V ^8  d   QhRR/# )r:   r?   z
int | Noner"   )rA   s   "r'   rB   rB     s     	 	* 	r2   c                 8   \         P                  p \        \         R 4      '       d   V \         P                  ,          p \        \         R4      '       d   V \         P                  ,          p \        \         R4      '       g   R# V \         P
                  ,          p V # )	O_CLOEXEC
O_NONBLOCK
O_NOFOLLOWN)r   O_RDONLYhasattrr  r  r  )flagss    r'   _seat_binding_open_flagsr    sd    KKEr;r<  2|$$	R]]ELr2   c               $    V ^8  d   QhRRRRRR/# )r:   r  r>   rk   rc   r?   z-dict[str, object] | Literal['invalid'] | Noner"   )rA   s   "r'   rB   rB     s$     5 55(525r2   c                   \        W4      p\        4       pVf   R# RpRp \        P                  ! \	        V4      V4      p \        P
                  ! V4      p\        P                  ! TP                  4      '       d$    T^ 8  d    \        P                  ! T4       R# R# \        P                  ! TP                  4      '       g$    T^ 8  d    \        P                  ! T4       R# R# TP                  \        8  d$    T^ 8  d    \        P                  ! T4       R# R#  \        P                  ! T\        ^,           4      p\        T4      \        8  d$    T^ 8  d    \        P                  ! T4       R# R#  T^ 8  d    \        P                  ! T4       M  TP'                  RRR7      p \*        P,                  ! T4      p	\1        T	\2        4      '       g   R# \4         FC  p
T	P7                  T
4      p\1        T\        4      '       d   TP9                  4       '       d   KB   R# 	  T	#   \         d7     T^ 8  d,    \        P                  ! T4       R#   \         d     R# i ; iR# i ; i  \         d     R# i ; i  \         d     R# i ; i  \         d     R# i ; i  \         d7     T^ 8  d,    \        P                  ! T4       R#   \         d     R# i ; iR# i ; i  \         d     R# i ; i  \          d7     T^ 8  d,    \        P                  ! T4       R #   \         d     R # i ; iR # \         d   pTP"                  \"        P$                  8X  d9    R p?T^ 8  d,    \        P                  ! T4       R #   \         d     R # i ; iR #  R p?T^ 8  d,    \        P                  ! T4       R#   \         d     R# i ; iR# R p?ii ; i  \         d     ELQi ; i  T^ 8  d*    \        P                  ! T4       i   \         d     i i ; ii ; i  \(         d     R# i ; i  \*        P.                   d     R# i ; i)Ninvalidr2   r   strict)errors)r  r  r   openr>   fstatrr   closer   S_ISLNKst_modeS_ISREGst_sizeSEAT_BINDING_MAX_BYTESreadr   FileNotFoundErrorerrnoENOENTdecodeUnicodeDecodeErrorrU   r   r   r   r   SEAT_BINDING_REQUIRED_FIELDSr   r   )r  rk   r   r  fdrawstr   textrW   r   r   s   &&          r'   load_seat_bindingr    s    \0D$&E}	B
CWWSY&	"B <<

##$ 7 # ||BJJ''  7  ::.. 7 	''"4q89C s8,, 7  - 7 
zz'(z3**T" gt$$-E"%%%U[[]] . NQ  	( 7  +	0  7 7   	 7  	     7    99$ 7   7     7      s   K? H/ %K? I3 !%K? J *K? J #"J) K? "K- O  P' 2P9 /I0:K? I I*)I*/I00K? 3JJJJJ&%J&)K*4K? =K K$#K$)K**K? -K<;K<?O
O2 L+ +L:9L:?OO	O(O2 4N NN O2 ,O OOOO2  O/.O/2P$;PP$P P$P  P$'P65P69QQc               $    V ^8  d   QhRRRRRR/# )r:   r  r<   rk   rc   r?   r@   r"   )rA   s   "r'   rB   rB     s$      $/	r2   c                t    V f   R # \        W4      pVf   R # VR8X  d   \        R4      h\        RV : R24      h)Nr  zJclaudex: invalid seat binding record; use claudex --seat or repair bindingzclaudex: account z" is seat-bound; use claudex --seat)r  r*   )r  rk   bindings   && r'   enforce_local_seat_binding_gater    sT     3G)X
 	
 
L++MN r2   c                    V ^8  d   QhRRRR/# )r:   r  r  r?   ztuple[bool, list[str]]r"   )rA   s   "r'   rB   rB   #  s      ) (> r2   c                    V '       d   V ^ ,          R8w  d   RV 3# \        V 4      ^8  d*   V ^,          P                  R4      '       d   \        R4      hRV R,          3# )r   z--seatFz#claudex: unsupported seat flag formTrb  )r   r  r*   r\  s   &r'   parse_seat_flagr  #  sS    47h&d{
4y1}a++H55@AAb>r2   c                    V ^8  d   QhRRRR/# r2  r"   )rA   s   "r'   rB   rB   +  s     A AC AC Ar2   c                  a V P                  4       oS'       g   \        R 4      hS\        9   g   \        P	                  S4      '       d   \        \
        4      hS\        9   d   \        S,          # \        P                  S4      '       d   S# \        ;QJ d    V3R lR 4       F  '       g   K   RM	  RM! V3R lR 4       4      '       g   \        S4       \        RS 24      h) seat-remote: --model is requiredc              3  ,   <"   T F	  qS9   x  K  	  R # 5irp   r"   )r#   r5  r  s   & r'   r(   +resolve_seat_model_token.<locals>.<genexpr>5  s     AICr7  TFz seat-remote: unknown seat model r9  )r   r*   r<  SEAT_NATIVE_MODEL_REmatchSEAT_UNSUPPORTED_BOUNDARYSEAT_MODEL_ALIASESSEAT_GPT_MODEL_RE	fullmatchr=  r@  )rn   r  s   &@r'   resolve_seat_model_tokenr  +  s    
++-C=>>
""&:&@&@&E&E455
  !#&&""3''
3AA333AAAA#C(
9#?
@@r2   c                    V ^8  d   QhRRRR/# r:   r  r  r?   r@   r"   )rA   s   "r'   rB   rB   :  s     	V 	Vy 	VT 	Vr2   c                  a \        V 4       F  w  po\        S\        4      '       g   \        R V 24      h\        P                  S4      '       d   \        RV 24      hS\        9   d   \        RS 24      h\        ;QJ d#    V3R l\         4       F  '       g   K   RM	  RM! V3R l\         4       4      '       g   K  \        RS 24      h	  R# )z,claudex: forwarded argv not string at index z.claudex: forwarded control character at index z(claudex: forwarded security arg denied: c              3  F   <"   T F  pSP                  V4      x  K  	  R # 5irp   )r  )r#   prefixr%  s   & r'   r(   /validate_seat_forwarded_argv.<locals>.<genexpr>B  s!     T9Svx""6**9Ss   !TFN)	r   r   r>   r*   SEAT_CONTROL_REsearchSEAT_FORWARDED_EXACT_DENYr=  SEAT_FORWARDED_PREFIX_DENY)r  r   r%  s   & @r'   validate_seat_forwarded_argvr  :  s    $T?x(C((!MeWUVV!!(++!OPUwWXX00!I(TUU3T9ST333T9STTT!I(TUU +r2   c                    V ^8  d   QhRRRR/# )r:   r  r  r?   r  r"   )rA   s   "r'   rB   rB   F  s     '1 '19 '11A '1r2   c                "   . pR V 9   d#   V P                  R 4      pV RV pW^,           R pM\        V 4      pRpRp. p^ pV\        V4      8  d   W7,          pVR9   dC   V^,           \        V4      8  d   \        R4      hVe   RpW7^,           ,          pV^,          pKa  VP	                  R4      '       g   VP	                  R4      '       d+   Ve   RpVP                  R^4      ^,          pV^,          pK  VR8X  g   VP	                  R	4      '       d   \        R
4      hVP                  V4       V^,          pK  VP                  V4       V'       d   \        R4      hVf   \        R4      h\        V4      p	\        V4       \        W4      # )r-  NFr  TrE  rF  r   --fallback-model--fallback-model=z1claudex: --fallback-model is forbidden for --seatz-claudex: duplicate wrapper --model for --seatrG  )r   listr   r*   r  r   r   rJ  r  r  r  )
r  explicit_forwardedr.  r/  rK  	duplicater$  r   r%  ru   s
   &         r'   parse_seat_wrapper_modelr'  F  s   $&t|**T*,_-!A"5"78DzEIIE
#l#
#&((qyC--"#EFF  	 +EQJEu%%)<)<Z)H)H  	NN3*1-EQJE))X-@-@AT-U-URSS"
'(JKK}=>>'.H +H00r2   c                    V ^8  d   QhRRRR/# r  r"   )rA   s   "r'   rB   rB   p  s      I $ r2   c                   R pRV 9   g   RV 9   d   \        V4      h^ pV\        V 4      8  d   W,          pVR8X  dR   V^,           \        V 4      8  g%   W^,           ,          P                  R4      '       d   \        V4      hV^,          pKp  VR8X  d.   V^,           \        V 4      8  d   \        V4      hV^,          pK  V^,          pK  R# )zNclaudex: --seat requires an explicit session id (resume <id> or --resume <id>)z
--continuez-cresumer:  --resumeN)r*   r   r  )r  messager   r%  s   &   r'   validate_seat_resume_argvr-  p  s    ^Gttt|7##E
#d)
;xqyCI%ai)C)CC)H)H"7++QJEz!qyCI%"7++QJE
 r2   c                   V ^8  d   QhRR/# rK   r"   )rA   s   "r'   rB   rB     s     P PC Pr2   c                 <   \         P                  ! R 4      p V e   V # \        P                  ! 4       R,          R,          R ,          pVP	                  4       '       d7   \
        P                  ! V\
        P                  4      '       d   \        V4      # \        R4      h)zseat-remoter  r  z/claudex: required binary not found: seat-remote)
rj  rk  r   rk   r~   r   r   r  r>   r4   )r   	canonicals     r'   resolve_seat_remote_binaryr1    sn    <<&D		i'%/-?IryyBGG<<9~
N
OOr2   c                    V ^8  d   QhRRRR/# )r:   rz   r  r?   r_   r"   )rA   s   "r'   rB   rB     s     4 4.> 4? 4r2   c                    V P                   ;'       d    V P                  R JpV'       d   \        V P                  R4      # \        V P                  4      # NT)r   r   r   rz   overrides   & r'   _resolve_selected_for_overridesr7    sA    ++JJd0JH'==#HNN33r2   c                    V ^8  d   QhRRRR/# )r:   rz   r  r?   r  r"   )rA   s   "r'   rB   rB     s     3 3,< 3 3r2   c                    V P                   ;'       d    V P                  R JpV'       d   \        V P                  R4      # \        V P                  4      # r4  )r   r  r  r5  s   & r'   _resolve_claude_for_overridesr:    sA    ++KKt0KH%hoot<<!(//22r2   c                    V ^8  d   QhRRRR/# )r:   accountr_   r?   r@   r"   )rA   s   "r'   rB   rB     s     H H/ Hd Hr2   c                    V P                   e3   V P                  e#   \        V P                   V P                  4       R # R # R # rp   rd   rf   r   r<  s   &r'   _revalidate_selected_accountr@    8    #(=(=(Iw//1F1FG )J#r2   c                    V ^8  d   QhRRRR/# )r:   r<  r  r?   r@   r"   )rA   s   "r'   rB   rB     s     H H H$ Hr2   c                    V P                   e3   V P                  e#   \        V P                   V P                  4       R # R # R # rp   r>  r?  s   &r'   _revalidate_claude_accountrD    rA  r2   c               $    V ^8  d   QhRRRRRR/# r:   r  r  rz   r  r?   r   r"   )rA   s   "r'   rB   rB     s"        9  (8  S  r2   c                v   \        V 4      p\        VP                  4       \        V4      p\	        V4       \
        P                  ! 4       p\        4       pVR RRRVP                  R\        V4      RVP                  R.VP                  Op\	        V4       \        P                  ! VRR7      pVP                  # )	launchz--hostautor  z	--projectrD  r-  F)check)r'  r-  r  r:  rD  r   cwdr1  r`   r>   rK  r  run
returncode)r  rz   wrapperr<  projectbinaryrq  	completeds   &&      r'   run_seatrR    s    &t,Ggll++H5Gw'hhjG')FG 
G w'we4Ir2   c               (    V ^8  d   QhRRRRRRRR/# 	r:   rK  r>   r  r  rz   r  r?   r   r"   )rA   s   "r'   rB   rB     s)      c  6F 3 r2   c                   \        V4      p\        V4       VP                  p\        \        P
                  4      p. RO\        ORNRNRNRNRN F  pVP                  VR4       K  	  VP                  VP                  4       VR,          p\        VR\        \        4      /4       \        \        V4      V4      p\        V4       \        P                   ! \#        R	4      R
V .VOVRR7      p	V	P$                  # )ANTHROPIC_API_KEYANTHROPIC_DEFAULT_FABLE_MODELCLAUDE_CODE_SUBAGENT_MODELCCP_CONFIG_DIRCCP_BIND_ADDRESSCCP_CODEX_SERVICE_TIERNzclaudex-anthropic-settings.jsonavailableModelsr  rD  Fr  rJ  )rV  ANTHROPIC_BASE_URLANTHROPIC_AUTH_TOKEN)r:  rD  rk   r   r   rh  PROXY_SLOT_VARIABLESpopupdater  r   r$  rI  rd  r]  r  rL  r  rM  )
rK  r  rz   r<  r  
native_envvariabler_  native_argvresults
   &&&       r'   
run_nativerg    s   +H5Gw'<<Lbjj!J
 
	

 	(
 	%
 	
 	
 	!
 	x&
 gkk" #DDM}'8$?S:T&UV%&9$&?OKw'^^		"IuC{CF
 r2   c                    V ^8  d   QhRRRR/# )r:   selectedr_   r?   zIterator[int]r"   )rA   s   "r'   rB   rB     s     !N !N/ !Nm !Nr2   c              #  Z  a"   \        V 4       \        4        \        R 4      pV P                  R,          R,          p\	        V P
                  V4       \        4       p/ \        P                  CR\        V P                  4      RRRRR\        V4      /CpV P                  R	,          pVP                  P                  R
R
RR7       \        P                  ! 4       oVP                  RRR7      ;_uu_ 4       p\        V 4       \        P                  ! VRR.V\        P                   VVR
V3R lR7      p \#        Ws4       Vx  \%        V4       \	        V P
                  V4        RRR4       R#   \%        T4       \	        T P
                  T4       i ; i  + '       g   i     R# ; i5i)zclaude-code-proxyr   r|   rY  rZ  r  r[  fastPORTz	proxy.logTr   r   ar   r   servez--no-monitorc                    < \        S 4      # rp   )r  )
parent_pids   r'   <lambda>codex_proxy.<locals>.<lambda>  s    7
Cr2   )r  stdinstdoutr  r   
preexec_fnN)r@  rr  r  rb   r	  ra   r  r   rh  r>   r   r   rm  r  r  PopenDEVNULLr  r  )	ri  proxy_binaryproxy_auth_pathr  	proxy_envlog_path	proxy_logr   rp  s	   &       @r'   codex_proxyr}    sf     *"#67L//'9KGO(33_E D
**#h778K &D	I ((;6HOO$EBJ	sW	-	-$X.  7N3$$C
	N5'Ju!(";";_M! 
.	- u!(";";_M! 
.	-	-s6   C4F+7>F6E1!F'
F+1#FFF(	"	F+c               (    V ^8  d   QhRRRRRRRR/# )	r:   ri  r_   rK  r>   r  r   r?   rP  r"   )rA   s   "r'   rB   rB     s(       s # . r2   c           
        \        \        P                  4      pVP                  R R4       . \        ORNRNRNRN F  pVP                  VR4       K  	  VP                  RRV 2RR	R
VR\        /\        4       C\        V 4      C4       V# )rV  NrW  rX  (CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC*CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERYr^  r  r_  unusedANTHROPIC_MODELANTHROPIC_SMALL_FAST_MODEL)	r   r   rh  ra  r`  rb  SMALL_MODELrX  _shared_claude_env)ri  rK  r  
claude_envrd  s   &&&  r'   proxy_claude_envr    s    bjj!JNN&-	' 	% 	3	
 	5 	x&  1$85$k	
 
 X
&  r2   c               (    V ^8  d   QhRRRRRRRR/# )	r:   ri  r_   r<  r  base_urlr>   r?   rP  r"   )rA   s   "r'   rB   rB     s,      (5ADr2   c                    \        \        P                  4      pR R.\        ORNRNRN F  pVP	                  VR4       K  	  VP                  / VP                  CRVRRR	\        R
\        /C\        V 4      C4       V# )rV  r_  rW  rX  r  Nr^  r  rg  r  r  )
r   r   rh  r`  ra  rb  r  HYBRID_MODELHYBRID_SMALL_MODELr  )ri  r<  r  r  rd  s   &&&  r'   hybrid_claude_envr    s     bjj!J 
 	(	
 	% 	3 	x&  
++h4c<$&8 X
&  r2   c                   V ^8  d   QhRR/# )r:   r?   zlist[tuple[str, str]]r"   )rA   s   "r'   rB   rB   3  s     G G 5 Gr2   c                     \         P                  4        U u. uF  q ^ ,          \        8w  g   K  V NK  	  pp . VO\        \         \        ,          3N# u up i )zDCodex catalog entries; entries after the session model never render.)CODEX_MODEL_LABELSitemsr  )itemotherss     r'   gateway_catalog_modelsr  3  sM    1779U9t!W=Tdd9FUFVFl$6|$DEFF Vs
   AAc               $    V ^8  d   QhRRRRRR/# )r:   r  r   r  r>   r?   r@   r"   )rA   s   "r'   rB   rB   9  s!      t s t r2   c                    \        V R ,          R,          RTR\        \        P                  ! 4       R,          4      R\        4        UUu. uF  w  r#RVRV/NK  	  upp/4       R# u uppi )	cachezgateway-models.jsonbaseUrl	fetchedAtr   modelsiddisplay_nameN)r   r   r   r  )r  r  rK  rW  s   &&  r'   write_gateway_modelsr  9  sh    w!66xTYY[4/0$:$<$<LE une4$<	


s   
A&c                    V ^8  d   QhRRRR/# )r:   ri  r_   r?   rP  r"   )rA   s   "r'   rB   rB   G  s       ^ r2   c                l    R RRRRRRRRV P                   R\        V P                  P                  4      /# )	 CLAUDE_CODE_ALWAYS_ENABLE_EFFORTrg  $CLAUDE_CODE_MAX_TOOL_USE_CONCURRENCY3ENABLE_TOOL_SEARCHfalse)CLAUDE_CODE_DISABLE_NONSTREAMING_FALLBACKSYSTRAY_CODEX_ACCOUNT_SLUGSYSTRAY_CODEX_ACCOUNT_HOME)r`   r>   ra   r   )ri  s   &r'   r  r  G  s?    *C.g3S$hmm$c(*C*C*J*J&K r2   c               (    V ^8  d   QhRRRRRRRR/# rT  r"   )rA   s   "r'   rB   rB   R  s)     ! !S !	 !5E !# !r2   c           
        \        V4      p\        V4      p\        V4       \        R 4      pVP                  R,          p\        VR\        \        4      /4       \        W64      p\        V4      ;_uu_ 4       p\        V4       \        P                  ! V.VO\        W@V4      RR7      pVP                  uuRRR4       #   + '       g   i     R# ; i)r  zclaude-settings.jsonr\  Fr]  N)r]  r7  r@  r  rb   r   r$  rH  rd  r}  r  rL  r  rM  )	rK  r  rz   claude_argvri  claude_binaryr_  r  rf  s	   &&&      r'   	run_proxyr  R  s    %d+K.x8H *#H-M--0FFM}'8$?O:P&QR%kAK	X		$$X.)[) $7

    
			s   9=CC	c               $    V ^8  d   QhRRRRRR/# rF  r"   )rA   s   "r'   rB   rB   d  s"      Y *: s r2   c                   ^ RI Hp \        V 4      p\        V4      p\	        R4      p\        V4      p\        V4       \        V4       VP                  R,          p\        VR\        \        4      /4       \        W74      p\        V4      ;_uu_ 4       pV! V4      p	V	P                  4         \        VP                   V	P"                  4       \%        WFV	P"                  4      p
\        V4       \        V4       \&        P(                  ! V.VOV
RR7      pVP*                  V	P-                  4        uuRRR4       #   T	P-                  4        i ; i  + '       g   i     R# ; i)r   )HybridRouterr  zclaudex-hybrid-settings.jsonr\  Fr]  N)claudex_routerr  r]  r7  r  r:  r@  rD  rb   r   r$  HYBRID_PICKER_MODELSrd  r}  startr  rk   r  r  r  rL  rM  stop)r  rz   r  r  ri  r  r<  r_  r  r  r  rf  s   &&          r'   
run_hybridr  d  s   +%d+K.x8H#H-M+H5G *w'--0NNM}'8$?S:T&UV%kAK	X		$d#
	 v?*8fooNJ(2&w/^^--:UF $$KKM 
	 KKM 
		s%   E/A3D="E=EEE#	c                    V ^8  d   QhRRRR/# )r:   r  r  r?   r<   r"   )rA   s   "r'   rB   rB     s      Y : r2   c                
   \        V 4       Fs  w  rVP                  R 4      w  r4pVR9  d   K"  T;'       g)    V^,           \        V 4      8  d   W^,           ,          MRp\        P	                  V4      '       g   Kq  Vu # 	  R# )r   r   N>   -rr+  )r   r   r   SESSION_ID_PATTERNr  )r  r   r%  r&  r%   r'  r   s   &      r'   resumed_session_idr    sr    $T?",,S1))PP%!)c$i2GtAIR	''	22 + r2   c                   V ^8  d   QhRR/# )r:   r?   z
list[Path]r"   )rA   s   "r'   rB   rB     s      z r2   c                    \         P                  ! 4       R ,          R,          .p \        4       R,          pVP                  4       '       d'   V P	                  R VP                  4        4       4       / pV  F;  pVP                  4       '       g   K  VP                  VP                  4       R4       K=  	  \        V4      # )r  projectszclaude-accountsc              3  @   "   T F  qR ,          R,          x  K  	  R# 5i)CLAUDE_HOMEr  Nr"   )r#   r   s   & r'   r(   (session_projects_dirs.<locals>.<genexpr>  s      
H^-'*44H^s   N)	r   rk   r   is_dirrJ  iterdir
setdefaultr  r$  )rootsaccounts_dirseenr  s       r'   session_projects_dirsr    s    YY[9$z12E=#44L 
HTH\H\H^
 	
  D;;==OODLLND1  :r2   c                    V ^8  d   QhRRRR/# )r:   
session_idr>   r?   rc   r"   )rA   s   "r'   rB   rB     s      # + r2   c                    \        4        FL  pVP                  R V  R24       F0  p\        V4      pVf   K  VP                  4       '       g   K,  Vu u # 	  KN  	  R# )z*/z.jsonlN)r  glob_first_recorded_cwdr  )r  projects_dir
transcriptrecordeds   &   r'   session_working_directoryr    sT    -/&++bF,CDJ*:6H#(9(9 E 0
 r2   c                    V ^8  d   QhRRRR/# )r:   r  r   r?   rc   r"   )rA   s   "r'   rB   rB     s      D [ r2   c                    V P                  R R7      ;_uu_ 4       pV Fu  p \        P                  ! V4      p\	        T\
        4      '       g   K2  \	        TP                  R4      \        4      '       g   KY  \        TR,          4      u uuRRR4       # 	  RRR4       R#   \        P                   d     K  i ; i  + '       g   i     R# ; i  \         d     R# i ; i)r   r   rK  N)
r  rU   r   r   r   r   r   r>   r   rr   )r  r   lineentrys   &   r'   r  r    s    
__g_..& JJt,E eT**z%))E:JC/P/Pe-- /. /  ++ 	 /.   sh   C B>B"B>"B>8B>
C B>C "B;	7B>:B;	;B>>C		C C C! C!c                    V ^8  d   QhRRRR/# r  r"   )rA   s   "r'   rB   rB     s     ? ?i ?D ?r2   c                    \        V 4      pVf   R # \        V4      pVe   V\        P                  ! 4       8X  d   R # \        P
                  ! V4       \        RV 2\        P                  R7       R # )Nzclaudex: resuming in r  )	r  r  r   rK  r   chdirr  rn  r  )r  r  r  s   &  r'   relocate_to_resumed_sessionr    sW    #D)J(4H8txxz1HHX	!(
,3::>r2   c                    V ^8  d   QhRRRR/# r:   r  r  r?   r   r"   )rA   s   "r'   rB   rB     s     3 3i 3C 3r2   c                P   \        V 4      w  rV'       dD   \        V 4      w  r VP                  '       d   VP                  f   \	        R4      h\        W4      # \        V 4      w  r VP                  '       d(   VP                  f   VP                  f   \	        R4      h\        \        VP                  4      4       \        V 4       \        V 4      w  r4Vf-   \        V4      '       d   \        \        WB4      # \        WB4      # V\         9   d   \#        W4V4      # \        W4V4      # )Nr   )r  r0  r   r  r   rR  r*  r   r  r  r  rN  r  r  PROXY_MODELr  rI  rg  )r  	seat_moderz   rK  r  s   &    r'   rL  rL    s    %d+OI5d;'''HOO,C$F  '',T2NH###(>8??CZ B
 	
 $$@$QR%$T*E}3H==[+@@+00$$%h77U22r2   c                    V ^8  d   QhRRRR/# r  r"   )rA   s   "r'   rB   rB     s      y S r2   c                    \        V R ,          4      #   \         d     ^# \         dK   p\        T\        P
                  R7       \        TP                  4       4       TP                  u Rp?# Rp?i\         dd   p\        RT 2\        P
                  R7       \        \        P                  ! TP                  4       RR7      4       TP                  u Rp?# Rp?i\         d2   p\        T\        P
                  R7       TP                  u Rp?# Rp?i\         d*   p\        RT 2\        P
                  R7        Rp?^# Rp?ii ; i)rb  r  Nr  rP   rR   )rL  KeyboardInterruptr8   r  rn  r  rX   r0   r
   rU   rV   refusal_payloadr*   rr   )r  r   s   & r'   mainr    s    48}  c

#c !}} 	#cjj1djj,,.:FG}} c

#}} 	#cjj1sg    EEE?A1+E1E>E?ACEE*E+&DEE$E%E		E__main__STALL_GUARD_NOTIFYrg  )r<  seatIdhostrK  credentialFingerprint>   AgentWorkflowrC  --agentrD  --tools--agents--plugin	--plugins	--sandboxra  
--workflow--mcp-config--no-sandbox--plugin-dir--plugin-url--marketplace--allowedTools--allowed-toolsr"  --disallowedTools--enable-workflow--setting-sources--disallowed-tools--enable-workflows--strict-mcp-config)rE  rF  r#  z--settings=z--setting-sources=z--disallowedTools=z--allowedTools=z--disallowed-tools=z--allowed-tools=z--tools=z	--agents=z--strict-mcp-config=z--mcp-config=z	--plugin=z
--plugins=z--plugin-dir=z--plugin-url=z--marketplace=z--enable-workflows=z--enable-workflow=z--agent=z--workflow=z
--sandbox=z--no-sandbox=))OPUSsolzGPT-5.6 Sol)SONNETterrazGPT-5.6 Terra)HAIKUlunazGPT-5.6 Lunarp   r  )
__future__r   r   rw  r  rU   r   rerj  rz  r   r  r  rn  r   r   urllib.errorr  urllib.requestcollections.abcr   
contextlibr   dataclassesr   pathlibr   typingr   r	   account_lockr
   r   r   r   r   account_registryr   command_routerr   r   r   r   model_catalogr   routing_resolverr   runtime_pathsr   r  r  ri  rl  r[  r<  r   r  r  compiler  r  r  r  r  r  	frozensetr  r  r   valuesrH  rI  HYBRID_CODEX_MODELSr  r  r  rT  r  r`  r  r*   r4   r6   r8   r_   rl   rv   r   r   r   r   r   r   r   r   r   r   r	  r  r  r  r!  r*  r0  r@  rN  rX  r]  rd  rr  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r'  r-  r1  r7  r:  r@  rD  rR  rg  r}  r  r  r  r  r  r  r  r  r  r  r  r  rL  r  r,   rh  r  
SystemExitr  )r%   rV  rW  s   000r'   <module>r     sR   "     	 	      
     $ % !    -  ( 3 % * #= 
O 
 -(    JJBC zz+. =>     **@A% '  8 4 --/0 188:; & D-D0CD     8J7IOAeM%%7I  u (uu (  <  	l 	: :$ $d#9 9 $96O"4	
8v

 ,5<, $d#& & $& ZZ 34  ww! H>
4	/B#,;  $d#9 9 $9 $d#  $
+!+R\7&<
	5p"A	V'1T(P43H
H
 4@ !N !NH,0G!$8?34* zJJ.4
T#((^
$$ E#s   P