
    Ui                    T    d Z ddlmZ ddlZddlmZmZ d	d
dZdddZdddZ	dddZ
y)u   engine_v2/bot_api.py — 봇 호환용 str-반환 래퍼.

기존 engine.py의 call_claude/call_codex/call_gemini과 동일한 시그니처와 반환값(str)을 제공한다.
내부적으로 CLIRunner를 사용한다.
    )annotationsN)	CLIResult	CLIRunnerc                    | j                         }|D cg c]*  }t        j                  d|t        j                        s)|, }}|sydj	                  |      }|| d S c c}w )u@   stderr에서 'error' 포함 줄만 필터링하여 반환한다.error 
N)
splitlinesresearch
IGNORECASEjoin)stderr_text
max_lengthlineslineerror_linesfiltereds         @/home/jay/workspace/services/multimodel-bot/engine_v2/bot_api.py_filter_error_linesr      s_    ""$E$)VDRYYxr}}-U4VKVyy%HZKL!!	 Ws   *A  A c                N  K   t        j                  | ||       d{   }|j                  rd| dS |j                  dk7  rE|j                  s9t        |j                        }|rd|j                   d| S d|j                   dS |j                  r|j                  S d	S 7 w)
u   Claude CLI 호출 (str 반환).

    .. deprecated::
        engine.py 호환용 래퍼. 신규 코드는 CLIRunner.run_claude()을 직접 사용하세요.
    )timeoutcode_analysisN   ⏱ 응답 시간 초과 (   초)r   u   ❌ Claude CLI 에러 (exit ):    ): 상세 내용 없음u<   ⚠️ Claude CLI에서 빈 응답이 반환되었습니다.)r   
run_claude	timed_out
returncodestdoutr   stderr)promptr   r   resultr   s        r   call_clauder%      s      ''}]]F+G9D99Afmm&v}}51&2C2C1DCzRR-f.?.?-@@WXX"MM6==m/mm ^s   B%B#BB%c                  K   t        j                  | ||       d{   }|j                  rd| dS |j                  dk7  re|j                  j                         }d|v sd|v ryd	|v sd
|v ryt        |j                        }|rd|j                   d| S d|j                   dS |j                  r|j                  S dS 7 w)u   Codex CLI 호출 (str 반환).

    .. deprecated::
        engine.py 호환용 래퍼. 신규 코드는 CLIRunner.run_codex()을 직접 사용하세요.
    )r   modelNr   r   r   loginauthuM   🔑 Codex 로그인이 필요합니다. `codex login`을 실행해주세요.zusage limitzhit youruK   ⚠️ Codex 사용량 한도 초과. 잠시 후 다시 시도해주세요.u   ❌ Codex CLI 에러 (exit r   r   u;   ⚠️ Codex CLI에서 빈 응답이 반환되었습니다.)r   	run_codexr   r    r"   lowerr   r!   )r#   r'   r   r$   stderr_lowerr   s         r   
call_codexr-   )   s      &&vweLLF+G9D99A}}**,l"f&<bL(J,,F`&v}}501B1B0C3xjQQ,V->->,??VWW"MM6==l/ll Ms   CCB%Cc                B  K   t        j                  | |       d{   }|j                  rd| dS |j                  dk7  r@|j                  r|j                  j                         nd}d|j                   d|r| S d	 S |j                  r|j                  S d
S 7 w)u   Gemini CLI 호출 (str 반환).

    .. deprecated::
        engine.py 호환용 래퍼. 신규 코드는 CLIRunner.run_gemini()을 직접 사용하세요.
    )r   Nr   r   r   r   u   ❌ Gemini CLI 에러 (exit r   u   상세 내용 없음u8   ⚠️ Gemini에서 빈 응답이 반환되었습니다.)r   
run_geminir   r    r"   stripr!   )r#   r   r$   r"   s       r   call_geminir1   ?   s      ''@@F+G9D99A*0--$$&R-f.?.?-@fFCqrrZpCqrr"MM6==i/ii As   BBB B)i,  )r   strr   intreturnr2   )X  F)r#   r2   r   r3   r   boolr4   r2   )zgpt-5.1-codex-minir5   )r#   r2   r'   r2   r   r3   r4   r2   )r5   )r#   r2   r   r3   r4   r2   )__doc__
__future__r   r   engine_v2.cli_runnerr   r   r   r%   r-   r1        r   <module>r<      s,    # 	 5"n"m,jr;   