
    dj                    l   d Z ddlmZ ddlZddlmc mZ ddl	Z	ddl
mZ  ee      j                         j                  d   Z ee      e	j"                  vr"e	j"                  j%                  d ee             edz  dz  j'                  d	      Zd
 Z e       Zed   Zed   ZdZdZd Zd Zd Zd Zy)u&  task-2686 regression — dispatch.prompt chair_facing_session_id inline 검증.

회장 verbatim 7 항목 중 #2 (dispatch prompt 에 chair_facing_session_id 전달).
본 테스트는 ``dispatch.prompt._inline_chair_facing_sid`` 가:
  - SID 명시 시 prompt 끝에 ``## ANU chair-facing session`` 헤더 + SID + resume
    플래그 + cokacdir 강제 라인을 append 하는지
  - SID 누락 시 prompt 변경 0 (byte-0 backwards compatible) 인지
  - 동일 SID 가 이미 inline 돼 있으면 멱등 (중복 inline 방지) 인지
검증한다.
    )annotationsN)Path   dispatch	prompt.pyzutf-8)encodingc                 (   ddl } | j                  t              }g }|j                  D ]  }t	        || j
                        rQ|j                  D cg c]%  }t	        || j                        s|j                  ' }}d|v sX|j                  |       jt	        || j                        s|j                  dk(  s|j                  |        | j                  |g       }t        |t        t        dz  dz        d      }i }t!        ||       |S c c}w )	u   dispatch/prompt.py 에서 _inline_chair_facing_sid + 헤더 상수만 추출 실행.

    dispatch 본체 (utils.*, prompts.team_prompts) 의존을 회피.
    r   N_CHAIR_FACING_SID_HEADER_inline_chair_facing_sid)bodytype_ignoresr   r   exec)astparse_PROMPT_TEXTr   
isinstanceAssigntargetsNameidappendFunctionDefnameModulecompilestr_ROOTr   )	r   treekeepnodetr   modulecodenss	            q/home/jay/workspace/.worktrees/task-2696-dev7/tests/regression/callback_session_propagation/test_prompt_inline.py_extract_inline_helperr&      s    
 99\"DD		 dCJJ'%)\\MZ3885LqttMGM)W4D!coo.499@Z3ZKK ZZTZ3F63uz1K?@&IDBrNI Ns   D+Dr   r
   z$53e89540-5bed-4692-a726-ed857820758az"# task md

body line 1
body line 2c                    t        t        t              } t        | v }|st	        j
                  d|fdt        | f      dt        j                         v st	        j                  t              rt	        j                  t              nddt        j                         v st	        j                  |       rt	        j                  |       nddz  }dd|iz  }t        t	        j                  |            d }dt         }|| v }|st	        j
                  d|fd	|| f      t	        j                  |      dt        j                         v st	        j                  |       rt	        j                  |       ndd
z  }dd|iz  }t        t	        j                  |            d x}}d}|| v }|st	        j
                  d|fd	|| f      t	        j                  |      dt        j                         v st	        j                  |       rt	        j                  |       ndd
z  }dd|iz  }t        t	        j                  |            d x}}dt         }|| v }|st	        j
                  d|fd	|| f      t	        j                  |      dt        j                         v st	        j                  |       rt	        j                  |       ndd
z  }dd|iz  }t        t	        j                  |            d x}}| j                  } |t              }|sddt        j                         v st	        j                  |       rt	        j                  |       ndt	        j                  |      dt        j                         v st	        j                  t              rt	        j                  t              ndt	        j                  |      dz  }t        t	        j                  |            d x}}y )Ninz%(py0)s in %(py2)s_HEADERoutpy0py2assert %(py4)spy4zchair_facing_session_id: )z%(py1)s in %(py3)s)py1py3zassert %(py5)spy5zcallback_resume_required: truez
--session zLassert %(py5)s
{%(py5)s = %(py2)s
{%(py2)s = %(py0)s.startswith
}(%(py3)s)
}BASE_PROMPT)r.   r/   r3   r4   )r   r5   	CHAIR_SIDr+   
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_safereprAssertionError_format_explanation
startswith)	r,   @py_assert1@py_format3@py_format5@py_assert0@py_assert2@py_format4@py_format6@py_assert4s	            r%   "test_inline_appends_header_and_sidrH   9   s   
";	
:Cc>7c77cc&yk292c99992c9992999999c999c9999999+2+s2222+s222+222222s222s2222222	{#*#s****#s***#******s***s*******>>&>+&&&&&&&&3&&&3&&&>&&&&&&+&&&+&&&&&&&&&&    c                    d} t        t        |       }|t        k(  }|sKt        j                  d|fd|t        f      dt	        j
                         v st        j                  t               rt        j                  t               nddt	        j
                         v st        j                  t              rt        j                  t              ndt        j                  |       t        j                  |      dt	        j
                         v st        j                  t              rt        j                  t              nddz  }dd|iz  }t        t        j                  |            d x} x}}d } t        t        |       }|t        k(  }|sKt        j                  d|fd|t        f      dt	        j
                         v st        j                  t               rt        j                  t               nddt	        j
                         v st        j                  t              rt        j                  t              ndt        j                  |       t        j                  |      dt	        j
                         v st        j                  t              rt        j                  t              nddz  }dd|iz  }t        t        j                  |            d x} x}}y )	N ==)z9%(py5)s
{%(py5)s = %(py0)s(%(py1)s, %(py3)s)
} == %(py7)sr   r5   )r.   r2   r3   r4   py7zassert %(py9)spy9)
r   r5   r7   r8   r9   r:   r;   r<   r=   r>   )rD   rG   @py_assert6@py_format8@py_format10s        r%   "test_inline_skipped_when_sid_emptyrS   C   sj   13C#K4C4CCCC4CCCCCC#CCC#CCCCCCKCCCKCCCCCC4CCCCCCCCCCCCCCCC15E#K6E6+EEEE6+EEEEEE#EEE#EEEEEEKEEEKEEEEEE6EEEEEE+EEE+EEEEEEErI   c                    t        t        t              } t        | t              }| |k(  }|st        j                  d|fd| |f      dt        j                         v st        j                  |       rt        j                  |       nddt        j                         v st        j                  |      rt        j                  |      nddz  }t        j                  d      dz   d|iz  }t        t        j                  |            d }y )	NrL   )z%(py0)s == %(py2)soncetwicer-   uA   중복 inline 시 멱등이어야 한다 (header 검출로 skip).z
>assert %(py4)sr1   )r   r5   r6   r7   r8   r9   r:   r;   r<   _format_assertmsgr=   r>   )rU   rV   r@   rA   rB   s        r%   2test_inline_idempotent_when_header_already_presentrX   H   s    #K;D$T95E5=]]]45]]]]]]4]]]4]]]]]]5]]]5]]]]]]]]]]]rI   c                    t        dt              } t        | v }|st        j                  d|fdt        | f      dt        j                         v st        j                  t              rt        j                  t              nddt        j                         v st        j                  |       rt        j                  |       nddz  }dd|iz  }t        t        j                  |            d }t        | v }|st        j                  d|fdt        | f      d	t        j                         v st        j                  t              rt        j                  t              nd	dt        j                         v st        j                  |       rt        j                  |       nddz  }dd|iz  }t        t        j                  |            d }y )
NrK   r(   r*   r+   r,   r-   r0   r1   r6   )r   r6   r+   r7   r8   r9   r:   r;   r<   r=   r>   )r,   r@   rA   rB   s       r%   %test_inline_handles_empty_base_promptrZ   N   s    
"2y
1Cc>7c77cc999rI   )__doc__
__future__r   builtinsr9   _pytest.assertion.rewrite	assertionrewriter7   syspathlibr   __file__resolveparentsr   r   pathinsert	read_textr   r&   _NSr   r+   r6   r5   rH   rS   rX   rZ    rI   r%   <module>rk      s   	 #   
 X ((+u:SXXHHOOAs5z" 
"[0;;W;M. 9: 
(
)2	5'F
^rI   