
    Ti".                     n    S r SSKrSSKrSSKrSSKrSSKJrJr  SSKJ	r	J
r
  S rS
S jrS rS
S jrS	 rg)uG   
Augment CLI 辅助函数
用于调用Auggie CLI并管理Session Token
    N)sessiong)dbAugmentSessionTokenc                  .   [        [        S5      (       am  [        R                  (       aX  [        [        R                  S5      (       a  [        R                  R                  $ [        R                  R	                  S5      $ S[
        ;   a	  [
        S   $ g)u   获取当前用户IDuseriduser_idN)hasattrr   r   r	   getr        E   /Users/yu22x/Desktop/ddd_副本125/ctf/app/services/augment_helper.pyget_current_user_idr      sa     q&aff#AFFD11qvvyyGqvvzz$7GG Gy!! r   c                 b   U c
  [        5       n U (       d  g[        R                  R                  U SS9R	                  5       nU(       aI  SSKJn  UR                  5       Ul        [        R                  R                  5         UR                  5       $ [        R                  " 5       nU(       a  U$ g)u   
获取用户的Augment Session Token
如果用户没有设置自己的Token，则尝试使用全局Token

Args:
    user_id: 用户ID，如果为None则使用当前登录用户

Returns:
    str: Token字符串，如果未设置则返回None
NF)r
   	is_globalr   )datetime)r   r   query	filter_byfirstr   utcnow	last_usedr   r   commitget_full_tokenget_global_token)r
   token_recordr   global_tokens       r   get_user_augment_tokenr      s     %' ',,66 7  eg 
 %!)!2


**,, '779Lr   c                 d   U (       d  g [         R                  " U 5      nSU;   a  U $ 0 nSU;   a	  US   US'   OSU;   a  US   US'   SU;   a	  US   US'   OSU;   a	  US   US'   OSUS'   SU;   a	  US   US'   OSS	/US'   [         R                  " U5      $ ! [         R                   a    U s $ f = f)
uA  
将 Token 转换为 Augment CLI 期望的格式

数据库中可能存储的格式:
{"access_token": "...", "tenant_url": "...", ...}

Augment CLI 期望的格式:
{"accessToken": "...", "tenantURL": "...", "scopes": [...]}

Args:
    token_str: Token JSON 字符串

Returns:
    str: 转换后的 Token JSON 字符串
NaccessTokenaccess_token
tenant_url	tenantURLhttps://api.augmentcode.com/scopesreadwrite)jsonloadsdumpsJSONDecodeError)	token_str
token_data	converteds      r   convert_token_to_augment_formatr/   B   s       ZZ	*
 J& 	 Z''1.'AIm$j('1-'@Im$ :%%/%=Ik"J&%/%<Ik"%CIk" z!",X"6Ih#)7"3Ihzz)$$ s   B A-B B/.B/c                    [        U5      nU(       d  SSSS.$  [        R                  " U5      nUR                  S5      =(       d    UR                  S5      nUR                  SS5      nU(       d  SSS	S.$  S/nUR                  U 5        UR                  SS5      (       a  UR                  S5        SU;   a  UR                  SUS   /5        SU;   a  UR                  S[        US   5      /5        SU;   a  UR                  S[        US   5      /5        SU;   a  UR                  SUS   /5        [        R                  " SSSS9 nUR                  U5        UR                  n	SSS5         [        R                  R                  5       n
X:S'   [        R                   " USSU
SS9nUR"                  S:H  UR$                  UR&                  S. [        R(                  " W	5        $ ! [        R                   a	    SSS
S.s $ f = f! , (       d  f       N= f!    $ = f! [        R*                   a'    SSSS.s  [        R(                  " W	5        $ !    $ = f[,         a:  nSSS [        U5       3S.s SnA [        R(                  " W	5        $ !    $ = fSnAff = f!  [        R(                  " W	5        f !    f = f= f)!u  
调用Auggie CLI执行指令

Args:
    instruction: 要执行的指令
    user_id: 用户ID
    **kwargs: 其他Auggie参数
        - model: 模型名称
        - max_tokens: 最大令牌数
        - temperature: 温度
        - print_mode: 是否使用print模式 (默认True)
        - workspace_root: 工作空间根目录

Returns:
    dict: {
        'success': bool,
        'output': str,
        'error': str
    }
F uA   Augment Session Token未设置，请先在个人中心设置Token)successoutputerrorr    r!   r#   r$   u*   Token格式错误: 缺少accessToken字段u&   Token格式错误: 不是有效的JSONauggie
print_modeTz--printmodelz--model
max_tokensz--max-tokenstemperaturez--temperatureworkspace_rootz--workspace-rootwz.json)modedeletesuffixNAUGMENT_SESSION_AUTHi,  )capture_outputtextenvtimeoutr   u   命令执行超时u   执行失败: )r   r(   r)   r   r+   appendextendstrtempfileNamedTemporaryFiler'   nameosenvironcopy
subprocessrun
returncodestdoutstderrunlinkTimeoutExpired	Exception)instructionr
   kwargsr,   r-   r!   r"   cmdf
token_filerB   resultes                r   call_auggier\   x   s   * 'w/IX
 	

ZZ	*
!~~m4V
~8V^^K1OP
 E   *C JJ{ zz,%%

9&

Ivg/0v

NC|(<$=>?

OS)>%?@A6!

&/?(@AB 
	$	$#eG	LPQ		VV
 
M%jjoo&/"# 
 ((A-mm]]
(	IIj!K  
=
 	

< 
M	LP	# $$ 
)
 	
	IIj!	  
%c!fX.
 	
	IIj!	
	IIj!	s   AG, H4A H$ H,H	H	
HH!$J!>J$  II	J!'J8J!9J$ >JJJ!!J$ $K&J=<K=K?Kc                 ~    [         R                  " U 5      nSU;   nSU;   nU(       d  U(       d  SSS.$ UR                  S5      =(       d    UR                  S5      nUR                  SS5      nU(       a  [        U5      S:  a  SS	S.$  S
n[        R
                  " SSSSS9 nUR                  U5        UR                  nSSS5        [        R                  " SS9n	 [        R                  R                  5       n
X
S'   [        R                  " / SQU
SSSS9n[        UR                  5        UR                   S:X  af  SSUR                  S/ 5      UUR                  (       a  UR                  SS OSS.S. [        R"                  " W5         SSKnUR'                  U	SS9  $ UR(                  (       a  UR(                  R+                  5       OSnS UR-                  5       ;   d(  S!UR-                  5       ;   d  S"UR-                  5       ;   a4  SS#U 3S. [        R"                  " W5         SSKnUR'                  U	SS9  $ SS$U 3S. [        R"                  " W5         SSKnUR'                  U	SS9  $ ! , (       d  f       GN= f!    N= f!    $ = f!    Nn= f!    $ = f!    NH= f!    $ = f!  [        R"                  " W5        O!    O= f SSKnUR'                  U	SS9  f !    f = f= f! [        R.                   a    SS%S.s $ [0         a    SS&S.s $ [2         aR  n[5        U5      nS UR-                  5       ;   d  S!UR-                  5       ;   a  SS'U 3S.s SnA$ SS(U 3S.s SnA$ SnAff = f! [         R6                   a    SS)S.s $ [2         a  nSS*[5        U5       3S.s SnA$ SnAff = f)+u   
验证Augment Token是否有效

Args:
    token_str: Token字符串 (JSON格式)

Returns:
    dict: {
        'valid': bool,
        'message': str,
        'token_info': dict (可选)
    }
r!   r    Fu5   Token缺少必要字段: access_token 或 accessToken)validmessager#   r$       u   Token格式不正确1   请回复'OK'来确认你收到了这条消息。r;   z.mdzutf-8)r<   r=   r>   encodingNaugment_test_)prefixr?   )r5   z-ira   z-p   T)rB   rC   r@   rA   r   u2   Token验证成功（已通过实际对话测试）r%   d   r1   )r%   r"   test_response)r^   r_   
token_info)ignore_errorsu   Token验证失败authtokenunauthorizedu   Token无效或已过期: u   Token验证失败: uD   Token验证超时（网络问题或API响应慢），请稍后重试uW   Auggie CLI未安装，无法验证Token。请先安装: npm install -g @augmentcode/cliu   Token认证失败: u   Token验证出错: u   Token不是有效的JSON格式u   验证失败: )r(   r)   r   lenrG   rH   r'   rI   mkdtemprJ   rK   rL   rM   rN   printrP   rO   rR   shutilrmtreerQ   striplowerrS   FileNotFoundErrorrT   rF   r+   )r,   r-   has_access_tokenhas_accessTokenr!   r"   test_instructionrX   instruction_filetemp_cache_dirrB   test_resultrp   	error_msgr[   	error_strs                   r   validate_augment_tokenr}      s   D
ZZ	*

 *Z7':5R  "~~m4V
~8V^^K1OP
 s<0251 ]	R,,#eE\cdhi()#$66  e
 &--_EN9jjoo'.7*+ )nn
 #'
 k(()))Q. "&#W&0nnXr&B*4ITI[I[[-?-?-Eac'6II./!MM.ME/ ?J>P>P 2 2 8 8 :ViI !22gAR6RVdhqhwhwhyVy%*)B9+'N II./!MM.ME &+)<YK'H II./!MM.ME} edr


II./!MM.ME(( 	 a  ! 	 t   	AI**g9J.J"!4YK@  #!4YK@ 	  
7
 	
  
'Ax0
 	

sc  2M= AM= K4 %I8K4  BJ4 ;J
J'A0J4 J/JJ4 J&#J-8
JK4 
JK4 JK4 K4 JK4 J#!K4 #K4 &J*(K4 -J1/K4 1K4 4K16KK1KK1K*)K1*K.,K11K4 4M:M= M:M= 	M:(:M5"M:#M= (M5/M:0M= 5M::M= =N<	N<!N71N<7N<)N)__doc__rJ   rM   r(   rG   flaskr   r   app.models.database.modelsr   r   r   r   r/   r\   r}   r   r   r   <module>r      s<    
     >$N3lqfR
r   