§
    ÷žyjV% ã                  óä  — d Z ddlmZ ddlZddlZddlZddlZddlZddlZddl	m
Z
 ddlmZmZmZmZ ddlmZ ddlmZ  ej        e¦  «        Zddddd	œdUd„Zda ej        dej        ¦  «        Z ej        d¦  «        ZdZdVd„ZdWd„ZddœdXd „Z d!d"œdYd$„Z!dZd[d)„Z"d\d+„Z#d]d.„Z$	 d^d_d0„Z%d^d`d3„Z&h d4£Z'h d5£Z(d6Z)d7d8œdad:„Z*ddd;dd<œdbd@„Z+dddAœdcdD„Z,ddddEœdddI„Z-dedK„Z.dedL„Z/dfdO„Z0ddPœdgdT„Z1dS )hu‚  Codex Responses API adapter.

Pure format-conversion and normalization logic for the OpenAI Responses API
(used by OpenAI Codex, xAI, GitHub Models, and other Responses-compatible endpoints).

Extracted from run_agent.py to isolate Responses API-specific logic from the
core agent loop. All functions are stateless â€” they operate on the data passed
in and return transformed results.
é    )ÚannotationsN)ÚSimpleNamespace)ÚAnyÚDictÚListÚOptional©Údeterministic_call_id)ÚDEFAULT_AGENT_IDENTITYF©Úis_xai_responsesÚis_github_responsesÚis_codex_backendÚbase_urlr   Úboolr   r   r   úOptional[str]ÚreturnÚstrc                ó,   — | rdS |rdS |rdS |rd|› �S dS )aå  Stable identifier for the Responses endpoint that mints encrypted_content.

    ``reasoning.encrypted_content`` is sealed to the endpoint that issued it:
    replaying a Codex-minted blob against xAI (or vice versa) deterministically
    returns HTTP 400 ``invalid_encrypted_content``. Stamping the issuer on
    persisted reasoning items and filtering at replay time lets a single
    conversation switch models without poisoning history with un-decryptable
    reasoning blocks.
    Úxai_responsesÚgithub_responsesÚcodex_backendzother:Úother© r   s       úC/home/ragecks/.hermes/hermes-agent/agent/codex_responses_adapter.pyÚ_classify_responses_issuerr      sG   € ð  ð ØˆØð "Ø!Ð!Øð ØˆØð #Ø"˜Ð"Ð"Ð"Øˆ7ó    z)(?:^|[\s>|])to=functions\.[A-Za-z_][\w.]*z7<\|(start|end|channel|message|constrain|return|call)\|>u   ï½œÚtextc                ó|  — | rd| vsd| vr| S dt           › dt           › d�}t          d„ | D ¦   «         ¦  «        st                               || ¦  «        S g }g }t	          | ¦  «        D ]H\  }}t          j        |¦  «        dk    rŒ|                     |¦  «         |                     |¦  «         ŒId                     |¦  «        }t          t           
                    |¦  «        ¦  «        }|s| S g }d}	|D ]•}
||
                     ¦   «                  }||
                     ¦   «         d	z
           d	z   }|                     | |	|…         ¦  «         |                     dt           › |
                     d	¦  «        › t           › d�¦  «         |}	Œ–|                     | |	d
…         ¦  «         d                     |¦  «        S )zCKeep Harmony source readable without emitting reserved wire tokens.Ú<Ú|z\1Ú>c              3  óF   K  — | ]}t          j        |¦  «        d k    V — ŒdS )ÚCfN)ÚunicodedataÚcategory)Ú.0Úchars     r   ú	<genexpr>z-_neutralize_harmony_tokens.<locals>.<genexpr>_   s2   è è € ÐCÐC°d�{Ô# DÑ)Ô)¨TÒ1ÐCÐCÐCÐCÐCÐCr   r$   Ú r   é   N)Ú_FULLWIDTH_PIPEÚanyÚ_HARMONY_CONTROL_TOKEN_REÚsubÚ	enumerater%   r&   ÚappendÚjoinÚlistÚfinditerÚstartÚendÚgroup)r   ÚreplacementÚvisible_charsÚoriginal_positionsÚindexr(   Úvisible_textÚmatchesÚresultÚoriginal_cursorÚmatchÚoriginal_startÚoriginal_ends                r   Ú_neutralize_harmony_tokensrC   Y   sÙ  € àð �3˜d�?�? c° o oØˆà<•Ð<Ð<­/Ð<Ð<Ð<€KÝÐCÐC¸dÐCÑCÔCÑCÔCð @Ý(×,Ò,¨[¸$Ñ?Ô?Ð?ð  "€MØ$&ÐÝ  ‘”ð )ð )‰ˆˆtÝÔ Ñ%Ô%¨Ò-Ð-ØØ×Ò˜TÑ"Ô"Ð"Ø×!Ò! %Ñ(Ô(Ð(Ð(à—7’7˜=Ñ)Ô)€LÝÕ,×5Ò5°lÑCÔCÑDÔD€GØð Øˆà€FØ€OØð 'ð 'ˆØ+¨E¯KªK©M¬MÔ:ˆØ)¨%¯)ª)©+¬+¸©/Ô:¸QÑ>ˆØ�Š�d˜?¨>Ð9Ô:Ñ;Ô;Ð;Ø�ŠÐM�/ÐM¨5¯;ª;°q©>¬>ÐM½?ÐMÐMÐMÑNÔNÐNØ&ˆˆØ
‡M‚M�$�Ð'Ð'Ô(Ñ)Ô)Ð)Ø�7Š7�6‰?Œ?Ðr   Úvaluer   c                ó–  — t          | t          ¦  «        rt          | ¦  «        S t          | t          t          f¦  «        rd„ | D ¦   «         S t          | t
          ¦  «        rgi }|                      ¦   «         D ]N\  }}t          |t          ¦  «        r"t          |¦  «        |k    rt          d¦  «        ‚t          |¦  «        ||<   ŒO|S | S )zãNeutralize JSON-like values; normalize tuples and reject unsafe keys.

    Rewriting an object key could desynchronize a tool schema from the executor
    contract, so a reserved token there is rejected explicitly instead.
    c                ó,   — g | ]}t          |¦  «        ‘ŒS r   )Ú_neutralize_harmony_structure)r'   Úitems     r   ú
<listcomp>z1_neutralize_harmony_structure.<locals>.<listcomp>ˆ   s!   € ÐFÐFÐF¸Õ-¨dÑ3Ô3ÐFÐFÐFr   zaReserved Harmony tokens in a JSON object key cannot be neutralized without changing its contract.)	Ú
isinstancer   rC   r3   ÚtupleÚdictÚitemsÚ
ValueErrorrG   )rD   Ú
normalizedÚkeyrH   s       r   rG   rG      sà   € õ �%�ÑÔð 1Ý)¨%Ñ0Ô0Ð0Ý�%�$¥˜Ñ'Ô'ð GØFÐFÀÐFÑFÔFÐFÝ�%�ÑÔð 	Øˆ
ØŸš™œð 	Bð 	B‰IˆC�Ý˜#�sÑ#Ô#ð Õ(BÀ3Ñ(GÔ(GÈ3Ò(NÐ(NÝ ðAñô ð õ <¸DÑAÔAˆJ�s‰OˆOØÐØ€Lr   Úuser©ÚroleÚcontentrS   úList[Dict[str, Any]]c               óÐ  — |dk    rdnd}t          | t          ¦  «        sg S g }| D �]¾}t          |t          ¦  «        r|r|                     ||dœ¦  «         Œ3t          |t          ¦  «        sŒIt          |                     d¦  «        pd¦  «                             ¦   «                              ¦   «         }|dv rE|                     d¦  «        }t          |t          ¦  «        r|r|                     ||dœ¦  «         ŒÚ|d	v rà|                     d
¦  «        }|                     d¦  «        }t          |t          ¦  «        r,|                     d¦  «        }	|                     d|¦  «        }n|}	t          |	t          ¦  «        r|	s�Œdd|	dœ}
t          |t          ¦  «        r+|                     ¦   «         r|                     ¦   «         |
d<   |                     |
¦  «         �ŒÀ|S )uÕ  Convert chat-style multimodal content to Responses API input parts.

    Input:  ``[{"type":"text"|"image_url", ...}]`` (native OpenAI Chat format)
    Output: ``[{"type":"input_text"|"output_text"|"input_image", ...}]`` (Responses format)

    The ``role`` parameter controls the text content type:
    - ``"user"`` (default) â†’ ``"input_text"``
    - ``"assistant"`` â†’ ``"output_text"``

    The Responses API rejects ``input_text`` inside assistant messages and
    ``output_text`` inside user messages, so callers MUST pass the correct
    role for the message being converted.

    Returns an empty list when ``content`` is not a list or contains no
    recognized parts â€” callers fall back to the string path.
    Ú	assistantÚoutput_textÚ
input_text©Útyper   r[   r*   >   r   rY   rX   r   >   Ú	image_urlÚinput_imager\   ÚdetailÚurlr]   ©r[   r\   )rJ   r3   r   r1   rL   ÚgetÚstripÚlower)rT   rS   Ú	text_typeÚ	convertedÚpartÚptyper   Ú	image_refr^   r_   Ú
image_parts              r   Ú _chat_content_to_responses_partsrj   š   s   € ð" "&¨Ò!4Ð!4��¸,€IÝ�g�tÑ$Ô$ð Øˆ	Ø&(€IØð )ñ )ˆÝ�d�CÑ Ô ð 	Øð DØ× Ò ¨)¸TÐ!BÐ!BÑCÔCÐCØÝ˜$¥Ñ%Ô%ð 	ØÝ�D—H’H˜VÑ$Ô$Ð*¨Ñ+Ô+×1Ò1Ñ3Ô3×9Ò9Ñ;Ô;ˆØÐ9Ð9Ð9Ø—8’8˜FÑ#Ô#ˆDÝ˜$¥Ñ$Ô$ð D¨ð DØ× Ò ¨)¸TÐ!BÐ!BÑCÔCÐCØØÐ0Ð0Ð0ØŸš Ñ-Ô-ˆIØ—X’X˜hÑ'Ô'ˆFÝ˜)¥TÑ*Ô*ð  Ø—m’m EÑ*Ô*�Ø"Ÿš x°Ñ8Ô8��à�Ý˜c¥3Ñ'Ô'ð ¨sð ÙØ2?ÈcÐ)RÐ)RˆJÝ˜&¥#Ñ&Ô&ð 6¨6¯<ª<©>¬>ð 6Ø'-§|¢|¡~¤~�
˜8Ñ$Ø×Ò˜ZÑ(Ô(Ð(ùØÐr   Ú )Úseprl   c               óú  — | €dS t          | t          ¦  «        r| S t          | t          ¦  «        �r*g }d}| D ]Ü}t          |t          ¦  «        r|r|                     |¦  «         Œ/t          |t          ¦  «        sŒEt          |                     d¦  «        pd¦  «                             ¦   «                              ¦   «         }|dv rB|                     d¦  «        }t          |t          ¦  «        r|r|                     |¦  «         ŒÓ|dv r|dz  }ŒÝ|                     |¦  «                             ¦   «         }|rd	|› d
|dk    rdnd› d�}|r|› d|› �n|}|S 	 t          | ¦  «        S # t          $ r Y dS w xY w)uô  Flatten message content to a plain-text summary.

    Multimodal messages arrive as a list of ``{type:"text"|"image_url", ...}``
    parts from the API server.  Several consumers want a plain string:

    - Logging, spinner previews, and trajectory files (the default ``sep=" "``).
    - External memory providers, which feed the text to regexes
      (``sanitize_context``) and text APIs â€” a raw list crashes the sync with
      ``expected string or bytes-like object, got 'list'`` (use ``sep="\n"``).

    Text parts are joined with ``sep``; images become a ``[N image(s)]`` marker
    so the turn isn't recorded as if the attachment never existed.  Returns an
    empty string for empty lists and ``str(content)`` for unexpected scalar
    types.
    Nr*   r   r[   >   r   rY   rX   r   >   r\   r]   r+   Ú[z imageÚsÚ]rk   )
rJ   r   r3   r1   rL   ra   rb   rc   r2   Ú	Exception)	rT   rl   Ú	text_bitsÚimage_countrf   rg   r   ÚsummaryÚnotes	            r   Ú_summarize_user_message_for_logrv   Í   sÎ  € ð  €ØˆrÝ�'�3ÑÔð ØˆÝ�'�4Ñ Ô ñ Ø!ˆ	ØˆØð 	!ð 	!ˆDÝ˜$¥Ñ$Ô$ð Øð +Ø×$Ò$ TÑ*Ô*Ð*ØÝ˜d¥DÑ)Ô)ð ØÝ˜Ÿš Ñ(Ô(Ð.¨BÑ/Ô/×5Ò5Ñ7Ô7×=Ò=Ñ?Ô?ˆEØÐ=Ð=Ð=Ø—x’x Ñ'Ô'�Ý˜d¥CÑ(Ô(ð +¨Tð +Ø×$Ò$ TÑ*Ô*Ð*øØÐ6Ð6Ð6Ø˜qÑ �øØ—(’(˜9Ñ%Ô%×+Ò+Ñ-Ô-ˆØð 	?ØL�{ÐLÐL°ÀÒ1AÐ1A¨#¨#ÀrÐLÐLÐLˆDØ-4Ð>˜Ð)Ð) Ð)Ð)Ð)¸$ˆGØˆðÝ�7‰|Œ|ÐøÝð ð ð Øˆrˆrðøøøs   ÅE, Å,
E:Å9E:Úfn_nameÚ	argumentsr;   Úintc                ó$   — t          | ||¦  «        S )u–  Generate a deterministic call_id from tool call content.

    Thin wrapper over the single policy owner
    ``agent.message_sanitization.deterministic_call_id`` (audit F4) â€” kept
    as a module-level name because run_agent and tests import it from here.
    Deterministic IDs prevent cache invalidation â€” random UUIDs would
    make every API call's prefix unique, breaking OpenAI's prompt cache.
    r	   )rw   rx   r;   s      r   Ú_deterministic_call_idr{     s   € õ ! ¨)°UÑ;Ô;Ð;r   Úcall_idc                óÆ   — t          | ¦  «        t          k    r| S t          j        |                      dd¬¦  «        ¦  «                             ¦   «         dd…         }d|› �S )ug  Keep a ``call_id`` within the Responses API's 64-char limit (#73492).

    The codex app-server namespaces MCP tool call ids as
    ``codex_mcp__<server>__<tool>_<codex_call_id>``; with an ``exec-<uuid>``
    component the built-in ``hermes-tools`` server already overflows 64 chars,
    and the Responses API rejects the whole payload with a non-retryable HTTP
    400 that then replays every turn â€” permanently bricking the session.

    Sibling defect to #10788 (which clamped ``input[*].id``), applied here to
    ``call_id``. The surrogate is a pure, deterministic function of the
    original, so the ``function_call`` and its matching ``function_call_output``
    â€” which carry the same original id â€” map to the same surrogate and stay
    paired without correlating the two items. Short ids pass through unchanged,
    preserving prompt-cache prefixes.
    úutf-8Úreplace)ÚerrorsNé    Úcall_)ÚlenÚ_MAX_RESPONSES_ITEM_ID_LENGTHÚhashlibÚsha256ÚencodeÚ	hexdigest)r|   Údigests     r   Ú_clamp_responses_call_idrŠ     s`   € õ  ˆ7�|„|Õ4Ò4Ð4ØˆÝŒ^˜GŸNšN¨7¸9˜NÑEÔEÑFÔF×PÒPÑRÔRÐSVÐTVÐSVÔW€FØ�6ÐÐÐr   Úraw_idú#tuple[Optional[str], Optional[str]]c                ó4  — t          | t          ¦  «        sdS |                      ¦   «         }|sdS d|v rI|                     dd¦  «        \  }}|                     ¦   «         pd}|                     ¦   «         pd}||fS |                     d¦  «        rd|fS |dfS )z8Split a stored tool id into (call_id, response_item_id).)NNr!   r+   NÚfc_)rJ   r   rb   ÚsplitÚ
startswith)r‹   rD   r|   Úresponse_item_ids       r   Ú_split_responses_tool_idr’   #  s´   € å�f�cÑ"Ô"ð ØˆzØ�LŠL‰NŒN€EØð ØˆzØ
ˆe€|€|Ø$)§K¢K°°QÑ$7Ô$7Ñ!ˆÐ!Ø—-’-‘/”/Ð) TˆØ+×1Ò1Ñ3Ô3Ð;°tÐØÐ(Ð(Ð(Ø×Ò˜ÑÔð Ø�Uˆ{ÐØ�$ˆ;Ðr   r‘   c                ór  — t          |t          ¦  «        r+|                     ¦   «         }|                     d¦  «        r|S | pd                     ¦   «         }|                     d¦  «        r|S |                     d¦  «        r:t	          |¦  «        t	          d¦  «        k    rd|t	          d¦  «        d…         › �S t          j        dd|¦  «        }|                     d¦  «        r|S |                     d¦  «        r:t	          |¦  «        t	          d¦  «        k    rd|t	          d¦  «        d…         › �S |rd|dd…         › �S |p(t          |pd¦  «        pt          j        ¦   «         j	        }t          j        |                     d¦  «        ¦  «                             ¦   «         dd…         }d|› �S )	zCBuild a valid Responses `function_call.id` (must start with `fc_`).rŽ   r*   r‚   Nz[^A-Za-z0-9_-]é0   r~   é   )rJ   r   rb   r�   rƒ   Úrer/   ÚuuidÚuuid4Úhexr…   Úsha1r‡   rˆ   )r|   r‘   Ú	candidateÚsourceÚ	sanitizedÚseedr‰   s          r   Ú"_derive_responses_function_call_idrŸ   4  s¶  € õ
 Ð"¥CÑ(Ô(ð Ø$×*Ò*Ñ,Ô,ˆ	Ø×Ò Ñ&Ô&ð 	ØÐàˆm˜×"Ò"Ñ$Ô$€FØ×Ò˜ÑÔð ØˆØ×Ò˜Ñ!Ô!ð -¥c¨&¡k¤kµC¸±L´LÒ&@Ð&@Ø,�V�C ™LœL˜M˜MÔ*Ð,Ð,Ð,å”Ð(¨"¨fÑ5Ô5€IØ×Ò˜EÑ"Ô"ð ØÐØ×Ò˜GÑ$Ô$ð 0­¨Y©¬½#¸g¹,¼,Ò)FÐ)FØ/�Y�s 7™|œ|˜}˜}Ô-Ð/Ð/Ð/Øð &Ø%�Y˜s ˜s”^Ð%Ð%Ð%àÐD•SÐ)Ð/¨RÑ0Ô0ÐDµD´J±L´LÔ4D€DÝŒ\˜$Ÿ+š+ gÑ.Ô.Ñ/Ô/×9Ò9Ñ;Ô;¸C¸R¸CÔ@€FØ�ˆ>ˆ>Ðr   ÚtoolsúOptional[List[Dict[str, Any]]]c                ó„  — | sdS g }| D ]´}t          |t          ¦  «        r|                     di ¦  «        ni }|                     d¦  «        }t          |t          ¦  «        r|                     ¦   «         sŒn|                     d||                     dd¦  «        d|                     ddi d	œ¦  «        d
œ¦  «         Œµ|pdS )zIConvert chat-completions tool schemas to Responses function-tool schemas.NÚfunctionÚnameÚdescriptionr*   FÚ
parametersÚobject)r[   Ú
properties©r[   r¤   r¥   Ústrictr¦   )rJ   rL   ra   r   rb   r1   )r    re   rH   Úfnr¤   s        r   Ú_responses_toolsr¬   U  så   € àð Øˆtà&(€IØð ð ˆÝ)3°D½$Ñ)?Ô)?ÐGˆT�XŠX�j "Ñ%Ô%Ð%ÀRˆØ�vŠv�f‰~Œ~ˆÝ˜$¥Ñ$Ô$ð 	¨D¯JªJ©L¬Lð 	ØØ×ÒØØØŸ6š6 -°Ñ4Ô4ØØŸ&š& ¸ÐPRÐ/SÐ/SÑTÔTð
ð 
ñ 	ô 	ð 	ð 	ð Ð˜Ðr   >   Ú
web_searchÚfile_searchÚlocal_shellÚcode_interpreterÚimage_generationÚweb_search_previewÚcomputer_use_preview>   Ú	completedÚ
incompleteÚin_progressé@   r´   )Údefaultr¸   c               óâ   — t          | t          ¦  «        rY|                      ¦   «                              ¦   «                              dd¦  «                             dd¦  «        }|t
          v r|S |S )a%  Normalize a Responses assistant message status for replay.

    The API accepts completed/incomplete/in_progress on replayed assistant
    output messages.  Preserve those exactly (modulo case/hyphen spelling) so
    incomplete Codex continuation turns don't get falsely marked completed.
    Ú-Ú_rk   )rJ   r   rb   rc   r   Ú_RESPONSE_MESSAGE_STATUSES)rD   r¸   Ústatuss      r   Ú#_normalize_responses_message_statusr¾   Œ  se   € õ �%�ÑÔð Ø—’‘”×$Ò$Ñ&Ô&×.Ò.¨s°CÑ8Ô8×@Ò@ÀÀcÑJÔJˆØÕ/Ð/Ð/ØˆMØ€Nr   T)r   r   Úreplay_encrypted_reasoningÚcurrent_issuer_kindÚmessagesr¿   rÀ   c          	     óH  ‡*— g }t          ¦   «         }| D �]Œ}t          |t          ¦  «        sŒ|                     d¦  «        }|dk    rŒ5|dv �r|                     dd¦  «        }	t          |	t          ¦  «        r=t          |	|¬¦  «        }
|dk    rdnd	Š*d                     ˆ*fd
„|
D ¦   «         ¦  «        }ng }
|	�t          |	¦  «        nd}|dk    �r`|r|                     d¦  «        nd}d}t          |t          ¦  «        rÜ|D ]Ù}t          |t          ¦  «        rÂ|                     d¦  «        r­|                     d¦  «        }|r||v rŒH|                     d¦  «        }|�.|�,||k    r&t          st           
                    d||¦  «         daŒ�d„ |                     ¦   «         D ¦   «         }|                     |¦  «         |r|                     |¦  «         d}ŒÚ|                     d¦  «        }d}t          |t          ¦  «        �r4|D �]0}t          |t          ¦  «        sŒ|                     d¦  «        dk    s|                     d¦  «        dk    rŒL|                     d¦  «        }t          |t          ¦  «        sŒwg }|D ]©}t          |t          ¦  «        sŒt          |                     d¦  «        pd¦  «                             ¦   «         }|dvrŒS|                     dd¦  «        }|€d}t          |t          ¦  «        st          |¦  «        }|                     d|dœ¦  «         Œª|s�Œ)ddt          |                     d¦  «        ¦  «        |dœ}|                     d¦  «        }|sZt          |t          ¦  «        rE|                     ¦   «         r1|                     ¦   «         }t!          |¦  «        t"          k    r||d<   |                     d¦  «        }t          |t          ¦  «        r+|                     ¦   «         r|                     ¦   «         |d<   |                     |¦  «         |dz  }�Œ2|dk    rnb|
r|                     d|
dœ¦  «         nG|                     ¦   «         r|                     d|dœ¦  «         n|r|                     dddœ¦  «         |                     d ¦  «        }t          |t          ¦  «        �r]|D �]Y}t          |t          ¦  «        sŒ|                     d!i ¦  «        }|                     d"¦  «        }t          |t          ¦  «        r|                     ¦   «         sŒnt%          |                     d¦  «        ¦  «        \  } }!|                     d#¦  «        }"t          |"t          ¦  «        r|"                     ¦   «         s| }"t          |"t          ¦  «        r|"                     ¦   «         s¦t          |!t          ¦  «        rP|!                     d$¦  «        r;t!          |!¦  «        t!          d$¦  «        k    rd%|!t!          d$¦  «        d…         › �}"nAt          |                     d&d'¦  «        ¦  «        }#t)          ||#t!          |¦  «        ¦  «        }"|"                     ¦   «         }"|                     d&d'¦  «        }$t          |$t          ¦  «        rt+          j        |$d¬(¦  «        }$n$t          |$t          ¦  «        st          |$¦  «        }$|$                     ¦   «         pd'}$|                     d)t/          |"¦  «        ||$d*œ¦  «         �Œ[�Œ|
r|                     ||
dœ¦  «         n|                     ||dœ¦  «         �ŒS|d+k    �r2|                     d,¦  «        }%t%          |%¦  «        \  }"}&t          |"t          ¦  «        r|"                     ¦   «         s=t          |%t          ¦  «        r(|%                     ¦   «         r|%                     ¦   «         }"t          |"t          ¦  «        r|"                     ¦   «         s�Œ|                     d¦  «        }'t          |'t          ¦  «        rt          |'d-¬¦  «        }(|(r|(})nd})nt          |'pd¦  «        })|                     d.t/          |"¦  «        |)d/œ¦  «         �ŒŽ|S )0ux
  Convert internal chat-style messages to Responses input items.

    ``is_xai_responses`` is kept for transport signature compatibility but
    no longer suppresses encrypted reasoning replay.  Earlier (PR #26644,
    May 2026) we believed xAI's OAuth/SuperGrok ``/v1/responses`` surface
    rejected replayed ``encrypted_content`` reasoning items minted by
    prior turns, and we stripped them.  That decision was wrong â€” xAI
    explicitly relies on Hermes threading encrypted reasoning back across
    turns for cross-turn coherence (the whole point of their partnership
    integration).  We now replay encrypted reasoning on every Responses
    transport (xAI, native Codex, custom relays) and let xAI tell us
    explicitly if a specific surface ever rejects a payload.

    ``replay_encrypted_reasoning`` is the per-session kill switch.  Some
    OpenAI-compatible relays accept the request but later reject the
    replayed encrypted blob with HTTP 400 ``invalid_encrypted_content``;
    when that happens the retry loop calls
    ``AIAgent._disable_codex_reasoning_replay`` which both strips cached
    items from the conversation history and threads ``replay_enabled=False``
    through this converter so subsequent turns send no reasoning items.

    ``is_github_responses`` drops the ``id`` field from replayed
    ``codex_message_items`` regardless of length. The Copilot backend
    (api.githubcopilot.com/responses) binds these ids to a specific
    backend "connection" â€” credential-pool rotation, a gateway restart,
    or routine load-balancer churn between turns all invalidate it â€” and
    rejects a stale id with HTTP 401 "input item ID does not belong to
    this connection" even for short ids (see #32716). ``phase``/
    ``status``/``content`` are still replayed; only ``id`` is unsafe to
    reuse across a Copilot connection.

    ``current_issuer_kind`` enables a per-item cross-issuer guard. The
    Responses API's ``encrypted_content`` blob is decryptable only by the
    endpoint that minted it â€” replaying a Codex-issued blob against xAI
    (or vice versa) always yields HTTP 400 ``invalid_encrypted_content``
    and breaks every subsequent turn in the same session.  When this
    argument is provided and a reasoning item carries an ``_issuer_kind``
    stamp from a different endpoint, the item is dropped from the replayed
    input.  Legacy items without a stamp are still replayed
    (backwards-compatible).  The two guards compose:
    ``replay_encrypted_reasoning=False`` is the session-wide kill switch
    (drops ALL replay); ``current_issuer_kind`` is the per-item filter
    that runs only when replay is still enabled.
    rS   Úsystem>   rQ   rW   rT   r*   rR   rW   rX   rY   c              3  óv   •K  — | ]3}|                      d ¦  «        ‰k    ¯|                      dd¦  «        V — Œ4dS )r[   r   r*   N)ra   )r'   Úprd   s     €r   r)   z4_chat_messages_to_responses_input.<locals>.<genexpr>Ý  sO   øè è € ð 'ð 'Ø*+ÀÇÂÀfÁÄÐQZÒ@ZÐ@Z�A—E’E˜& "Ñ%Ô%Ð@ZÐ@ZÐ@ZÐ@Zð'ð 'r   NÚcodex_reasoning_itemsFÚencrypted_contentÚidÚ_issuer_kindu«   Dropping reasoning item minted by %s while calling %s â€” encrypted_content is sealed to its issuer. This happens when a session switches model providers mid-conversation.Tc                ó"   — i | ]\  }}|d v¯	||“ŒS ))rÈ   rÉ   r   )r'   ÚkÚvs      r   ú
<dictcomp>z5_chat_messages_to_responses_input.<locals>.<dictcomp>  s4   € ð +ð +ð +Ù)-¨¨AØ#$Ð,BÐ#BÐ#Bð !" 1Ø#BÐ#BÐ#Br   Úcodex_message_itemsr   r[   Úmessage>   r   rX   r   rZ   r½   ©r[   rS   r½   rT   Úphaser+   ©rS   rT   Ú
tool_callsr£   r¤   r|   rŽ   r‚   rx   ú{}©Úensure_asciiÚfunction_call©r[   r|   r¤   rx   ÚtoolÚtool_call_idrQ   Úfunction_call_output©r[   r|   Úoutput)ÚsetrJ   rL   ra   r3   rj   r2   r   Ú_CROSS_ISSUER_WARN_EMITTEDÚloggerÚwarningrM   r1   Úaddrb   r¾   rƒ   r„   r’   r�   r{   ÚjsonÚdumpsrŠ   )+rÁ   r   r   r¿   rÀ   rM   Úseen_item_idsÚmsgrS   rT   Úcontent_partsÚcontent_textÚcodex_reasoningÚhas_codex_reasoningÚriÚitem_idÚitem_issuerÚreplay_itemrÎ   Úreplayed_message_itemsÚraw_itemÚraw_content_partsÚnormalized_content_partsrf   Ú	part_typer   Ústripped_idrÑ   rÓ   Útcr«   rw   Úembedded_call_idÚembedded_response_item_idr|   Ú	_raw_argsrx   Úraw_tool_call_idr»   Útool_contentre   Úoutput_valuerd   s+                                             @r   Ú!_chat_messages_to_responses_inputrü   š  sa	  ø€ ðh #%€EÝ™œ€Màð bñ bˆÝ˜#�tÑ$Ô$ð 	ØØ�wŠw�v‰ŒˆØ�8ÒÐØàÐ(Ð(Ñ(Ø—g’g˜i¨Ñ,Ô,ˆGÝ˜'¥4Ñ(Ô(ð KÝ @ÀÈtÐ TÑ TÔ T�Ø-1°[Ò-@Ð-@˜M˜MÀl�	Ø!Ÿwšwð 'ð 'ð 'ð 'Ø/<ð'ñ 'ô 'ñ  ô  ��ð !#�Ø/6Ð/B�s 7™|œ|˜|È�à�{Ò"Ñ"ð 2ð�C—G’GÐ3Ñ4Ô4Ð4àð  ð
 ',Ð#Ý˜o­tÑ4Ô4ð +7Ø-ð *7ð *7˜Ý% b­$Ñ/Ô/ð )7°B·F²FÐ;NÑ4OÔ4Oð )7Ø&(§f¢f¨T¡l¤l˜GØ&ð )¨7°mÐ+CÐ+CØ (ð +-¯&ª&°Ñ*@Ô*@˜Kà 3Ð ?Ø$/Ð$;Ø$/Ð3FÒ$FÐ$Fõ (Bð !FÝ$*§N¢Nð)Uð )4Ð5Hñ%&ô %&ð %&ð BFÐ$>Ø (ð+ð +Ø13·²±´ð+ñ +ô +˜Kð "ŸLšL¨Ñ5Ô5Ð5Ø&ð ;Ø -× 1Ò 1°'Ñ :Ô :Ð :Ø26Ð/øð '*§g¢gÐ.CÑ&DÔ&DÐ#Ø)*Ð&ÝÐ1µ4Ñ8Ô8ñ .4Ø$7ð -4ñ -4˜Ý)¨(µDÑ9Ô9ð %Ø$Ø#Ÿ<š<¨Ñ/Ô/°9Ò<Ð<ÀÇÂÈVÑ@TÔ@TÐXcÒ@cÐ@cØ$Ø,4¯LªL¸Ñ,CÔ,CÐ)Ý)Ð*;½TÑBÔBð %Ø$à35Ð0Ø$5ð cð c˜DÝ#-¨dµDÑ#9Ô#9ð )Ø (Ý(+¨D¯HªH°VÑ,<Ô,<Ð,BÀÑ(CÔ(C×(IÒ(IÑ(KÔ(K˜IØ(Ð0GÐGÐGØ (Ø#'§8¢8¨F°BÑ#7Ô#7˜DØ#˜|Ø') Ý#-¨dµCÑ#8Ô#8ð 1Ý'*¨4¡y¤y Ø4×;Ò;À]Ð\`Ð<aÐ<aÑbÔbÐbÐbà7ð %Ù$ð %.Ø$/Ý&IÈ(Ï,Ê,ÐW_ÑJ`ÔJ`Ñ&aÔ&aØ'?ð	'ð '˜ð #+§,¢,¨tÑ"4Ô"4˜à 3ð@å *¨7µCÑ 8Ô 8ð@ð !(§¢¡¤ð@ð
 +2¯-ª-©/¬/˜KÝ" ;Ñ/Ô/Õ3PÒPÐPØ4? ¨DÑ 1Ø (§¢¨WÑ 5Ô 5˜Ý% e­SÑ1Ô1ð A°e·k²k±m´mð AØ38·;²;±=´=˜K¨Ñ0ØŸš [Ñ1Ô1Ð1Ø.°!Ñ3Ð.Ñ.à)¨AÒ-Ð-ØØ"ð 
GØ—L’L¨+À-Ð!PÐ!PÑQÔQÐQÐQØ!×'Ò'Ñ)Ô)ð GØ—L’L¨+À,Ð!OÐ!OÑPÔPÐPÐPØ(ð Gð —L’L¨+À"Ð!EÐ!EÑFÔFÐFà ŸWšW \Ñ2Ô2�
Ý˜j­$Ñ/Ô/ñ 'Ø(ð &ñ &˜Ý)¨"­dÑ3Ô3ð %Ø$ØŸVšV J°Ñ3Ô3˜Ø"$§&¢&¨¡.¤.˜Ý)¨'µ3Ñ7Ô7ð %¸w¿}º}¹¼ð %Ø$åF^ØŸFšF 4™LœLñGô GÑCÐ(Ð*Cð #%§&¢&¨Ñ"3Ô"3˜Ý)¨'µ3Ñ7Ô7ð 7¸w¿}º}¹¼ð 7Ø&6˜GÝ)¨'µ3Ñ7Ô7ð 	a¸w¿}º}¹¼ð 	aå *Ð+DÅcÑ JÔ Jðaà$=×$HÒ$HÈÑ$OÔ$Oðaõ %(Ð(AÑ$BÔ$BÅSÈÁZÄZÒ$OÐ$Oà*ZÐ2KÍCÐPUÉJÌJÈKÈKÔ2XÐ*ZÐ*Z  å,/°·²°{ÀDÑ0IÔ0IÑ,JÔ,J 	Ý*@ÀÈ)ÕUXÐY^ÑU_ÔU_Ñ*`Ô*` Ø")§-¢-¡/¤/˜à$&§F¢F¨;¸Ñ$=Ô$=˜	Ý% iµÑ6Ô6ð 7Ý(,¬
°9È5Ð(QÑ(QÔ(Q˜I˜IÝ!+¨IµsÑ!;Ô!;ð 7Ý(+¨I©¬˜IØ$-§O¢OÑ$5Ô$5Ð$=¸˜	àŸšØ$3Ý'?ÀÑ'HÔ'HØ$+Ø)2ð	&ð &ñ ô ð ñ ñ ð ð FØ—’ d°}ÐEÐEÑFÔFÐFÐFà—’ d°|ÐDÐDÑEÔEÐEÙà�6Š>‰>Ø"Ÿwšw ~Ñ6Ô6ÐÝ1Ð2BÑCÔC‰JˆG�QÝ˜g¥sÑ+Ô+ð 7°7·=²=±?´?ð 7ÝÐ.µÑ4Ô4ð 7Ð9I×9OÒ9OÑ9QÔ9Qð 7Ø.×4Ò4Ñ6Ô6�GÝ˜g¥sÑ+Ô+ð °7·=²=±?´?ð Ùð Ÿ7š7 9Ñ-Ô-ˆLå˜,­Ñ-Ô-ð 	7Ý<Ø  vðñ ô �	ð ð &Ø#,�L�Là#%�L�Lå" <Ð#5°2Ñ6Ô6�à�LŠLØ.Ý3°GÑ<Ô<Ø&ðð ñ ô ð ùð €Lr   ©r   Úsanitize_harmony_tokensÚ	raw_itemsrþ   c               ó²  — t          | t          ¦  «        st          d¦  «        ‚|rt          nd„ }g }t	          ¦   «         }t          | ¦  «        D �
]…\  }}t          |t          ¦  «        st          d|› d�¦  «        ‚|                     d¦  «        }|dk    �rg|                     d¦  «        }	|                     d¦  «        }
t          |	t          ¦  «        r|	 	                    ¦   «         st          d|› d	�¦  «        ‚t          |
t          ¦  «        r|
 	                    ¦   «         st          d|› d
�¦  «        ‚|                     dd¦  «        }t          |t          ¦  «        rt          j        |d¬¦  «        }n$t          |t          ¦  «        st          |¦  «        } || 	                    ¦   «         pd¦  «        }|                     d|	 	                    ¦   «         |
 	                    ¦   «         |dœ¦  «         �Œ±|dk    �r5|                     d¦  «        }	t          |	t          ¦  «        r|	 	                    ¦   «         st          d|› d�¦  «        ‚|                     dd¦  «        }|€d}t          |t          ¦  «        �rZg }|D �]#}t          |t          ¦  «        sŒ|                     d¦  «        }|dk    rN|                     d¦  «        }t          |t          ¦  «        r#|r!|                     d ||¦  «        dœ¦  «         Œ‚|dk    r›|                     d¦  «        }t          |t          ¦  «        rq|rod|dœ}|                     d¦  «        }t          |t          ¦  «        r+| 	                    ¦   «         r| 	                    ¦   «         |d<   |                     |¦  «         �Œ%|                     d|	 	                    ¦   «         |r|nddœ¦  «         �Œ“t          |t          ¦  «        st          |¦  «        }|                     d|	 	                    ¦   «          ||¦  «        dœ¦  «         �Œí|dk    rÕ|                     d¦  «        }t          |t          ¦  «        r©|r§|                     d¦  «        }t          |t          ¦  «        r|r||v r�ŒQ|                     |¦  «         d|dœ}|                     d ¦  «        }t          |t          ¦  «        r|rt          |¦  «        n||d <   ng |d <   |                     |¦  «         �ŒÈ|d!k    rF|                     d¦  «        }t          |t          ¦  «        r|r|                     d!|dœ¦  «         �Œ|d"k    �rW|                     d#¦  «        }|d$k    rt          d|› d%�¦  «        ‚|                     d&¦  «        }t          |t          ¦  «        st          d|› d'�¦  «        ‚g }t          |¦  «        D ]Á\  }}t          |t          ¦  «        st          d|› d(|› d�¦  «        ‚|                     d¦  «        }|d)vrt          d|› d(|› d*|›d+�¦  «        ‚|                     dd¦  «        }|€d}t          |t          ¦  «        st          |¦  «        }|                     d, ||¦  «        dœ¦  «         ŒÂ|st          d|› d-�¦  «        ‚d"d$t          |                     d.¦  «        ¦  «        |d/œ}|                     d¦  «        }|sZt          |t          ¦  «        rE| 	                    ¦   «         r1| 	                    ¦   «         }t!          |¦  «        t"          k    r||d<   |                     d0¦  «        }t          |t          ¦  «        r+| 	                    ¦   «         r| 	                    ¦   «         |d0<   |                     |¦  «         �Œr|                     d#¦  «        }|d1v �râ|                     d&d¦  «        }|€d}t          |t          ¦  «        �rk|d$k    rd,nd} g }!t          |¦  «        D �]4\  }}t          |t          ¦  «        r$|r!|!                     |  ||¦  «        dœ¦  «         Œ?t          |t          ¦  «        st          d|› d2|› d3�¦  «        ‚t          |                     d¦  «        pd¦  «         	                    ¦   «                              ¦   «         }|d4v r_|                     dd¦  «        }t          |t          ¦  «        st          |pd¦  «        }|!                     |  ||¦  «        dœ¦  «         �Œ|d5v rñ|                     dd¦  «        }"|                     d¦  «        }t          |"t          ¦  «        r-|"                     d6d¦  «        }|"                     d|¦  «        }n|"}t          |t          ¦  «        st          |pd¦  «        }d|dœ}#t          |t          ¦  «        r+| 	                    ¦   «         r| 	                    ¦   «         |#d<   |!                     |#¦  «         �Œ
t          d|› d2|› d*|                     d¦  «        ›d+�¦  «        ‚|                     ||!d7œ¦  «         �
Œ't          |t          ¦  «        st          |¦  «        }|                     | ||¦  «        d7œ¦  «         �
Œnt          d|› d8|›d9|›d:�¦  «        ‚|S );Nz4Codex Responses input must be a list of input items.c                ó   — | S ©Nr   )r   s    r   ú<lambda>z._preflight_codex_input_items.<locals>.<lambda>È  s   € ˜$€ r   zCodex Responses input[ú] must be an object.r[   r×   r|   r¤   z#] function_call is missing call_id.z ] function_call is missing name.rx   rÔ   FrÕ   rØ   rÛ   z*] function_call_output is missing call_id.rÝ   r*   rY   r   rZ   r]   r\   r`   r^   rÜ   Ú	reasoningrÇ   rÈ   ©r[   rÇ   rt   Ú
compactionrÏ   rS   rW   z+] message items must have role='assistant'.rT   z&] message item must have content list.z] message content[>   r   rX   ú] has unsupported type ú.rX   z3] message item must contain at least one text part.r½   rÐ   rÑ   >   rQ   rW   z
].content[z] must be an object or string.>   r   rY   rX   >   r\   r]   r_   rÒ   z#] has unsupported item shape (type=z, role=z).)rJ   r3   rN   rC   rÞ   r0   rL   ra   r   rb   rã   rä   r1   râ   rG   r¾   rƒ   r„   rc   )$rÿ   r   rþ   Úsanitize_textrO   Úseen_idsÚidxrH   Ú	item_typer|   r¤   rx   rÝ   Úcleanedrf   rg   r   r_   Úentryr^   Ú	encryptedrì   Úreasoning_itemrt   rS   rT   Únormalized_contentÚpart_idxró   Únormalized_itemrô   rÑ   rd   Ú	validatedrh   ri   s$                                       r   Ú_preflight_codex_input_itemsr  ¼  sÝ  € õ �i¥Ñ&Ô&ð QÝÐOÑPÔPÐPð #ð	Õ"Ð"àÐð ð
 (*€JÝ‘E”E€HÝ˜yÑ)Ô)ð _
ñ _
‰	ˆˆTÝ˜$¥Ñ%Ô%ð 	QÝÐO°cÐOÐOÐOÑPÔPÐPà—H’H˜VÑ$Ô$ˆ	Ø˜Ò'Ñ'Ø—h’h˜yÑ)Ô)ˆGØ—8’8˜FÑ#Ô#ˆDÝ˜g¥sÑ+Ô+ð d°7·=²=±?´?ð dÝ Ð!b¸#Ð!bÐ!bÐ!bÑcÔcÐcÝ˜d¥CÑ(Ô(ð a°·
²
±´ð aÝ Ð!_¸#Ð!_Ð!_Ð!_Ñ`Ô`Ð`àŸš ¨dÑ3Ô3ˆIÝ˜)¥TÑ*Ô*ð +Ý œJ y¸uÐEÑEÔE�	�	Ý 	­3Ñ/Ô/ð +Ý 	™NœN�	Ø%˜ i§o¢oÑ&7Ô&7Ð&?¸4Ñ@Ô@ˆIà×Òà+Ø&Ÿ}š}™œØ ŸJšJ™LœLØ!*ð	ð ñô ð ñ àÐ.Ò.Ñ.Ø—h’h˜yÑ)Ô)ˆGÝ˜g¥sÑ+Ô+ð k°7·=²=±?´?ð kÝ Ð!i¸#Ð!iÐ!iÐ!iÑjÔjÐjØ—X’X˜h¨Ñ+Ô+ˆFØˆ~Ø�õ
 ˜&¥$Ñ'Ô'ñ ð 13�Ø"ð 2ñ 2�DÝ% d­DÑ1Ô1ð !Ø Ø ŸHšH VÑ,Ô,�EØ Ò,Ð,Ø#Ÿxšx¨Ñ/Ô/˜Ý% d­CÑ0Ô0ð `°Tð `Ø#ŸNšN°LÈ-È-ÐX\ÑJ]ÔJ]Ð+^Ð+^Ñ_Ô_Ð_øØ -Ò/Ð/Ø"Ÿhšh {Ñ3Ô3˜Ý% c­3Ñ/Ô/ð 2°Cð 2Ø=JÐY\Ð4]Ð4]˜EØ%)§X¢X¨hÑ%7Ô%7˜FÝ)¨&µ#Ñ6Ô6ð A¸6¿<º<¹>¼>ð AØ28·,²,±.´.  h¡Ø#ŸNšN¨5Ñ1Ô1Ð1ùØ×!Ò!à 6Ø#*§=¢=¡?¤?Ø-4Ð"< ' '¸"ðð ñô ð ñ Ý˜f¥cÑ*Ô*ð %Ý˜V™œ�à×Òà2Ø&Ÿ}š}™œØ+˜m¨FÑ3Ô3ðð ñô ð ñ à˜Ò#Ð#ØŸšÐ!4Ñ5Ô5ˆIÝ˜)¥SÑ)Ô)ð 2¨ið 2ØŸ(š( 4™.œ.�Ý˜g¥sÑ+Ô+ð *°ð *Ø (Ð*Ð*Ù Ø—L’L Ñ)Ô)Ð)à'Ø)2ð2ð 2�ð Ÿ(š( 9Ñ-Ô-�Ý˜g¥tÑ,Ô,ð 3ð 3ð%Õ5°gÑ>Ô>Ð>à$ð # 9Ñ-Ð-ð 13�N 9Ñ-Ø×!Ò! .Ñ1Ô1Ð1Ùà˜Ò$Ð$ð ŸšÐ!4Ñ5Ô5ˆIÝ˜)¥SÑ)Ô)ð ¨ið Ø×!Ò!Ø)À	ÐJÐJñô ð ñ à˜	Ò!Ñ!Ø—8’8˜FÑ#Ô#ˆDØ�{Ò"Ð"Ý Ð!j¸#Ð!jÐ!jÐ!jÑkÔkÐkØ—h’h˜yÑ)Ô)ˆGÝ˜g¥tÑ,Ô,ð gÝ Ð!e¸#Ð!eÐ!eÐ!eÑfÔfÐfØ!#ÐÝ"+¨GÑ"4Ô"4ð `ð `‘�˜$Ý! $­Ñ-Ô-ð Ý$Øf°ÐfÐfÈÐfÐfÐfñô ð ð !ŸHšH VÑ,Ô,�	ØÐ$;Ð;Ð;Ý$Øw°ÐwÐwÈÐwÐwÐirÐwÐwÐwñô ð ð —x’x ¨Ñ+Ô+�Ø�<Ø�DÝ! $­Ñ,Ô,ð %Ý˜t™9œ9�DØ"×)Ò)°=È-È-ÐX\ÑJ]ÔJ]Ð*^Ð*^Ñ_Ô_Ð_Ð_Ø%ð tÝ Ð!r¸#Ð!rÐ!rÐ!rÑsÔsÐsà!Ø#Ý=¸d¿hºhÀxÑ>PÔ>PÑQÔQØ-ð	/ð /ˆOð —h’h˜t‘n”nˆGà'ð8å˜w­Ñ,Ô,ð8ð —M’M‘O”Oð8ð
 &Ÿmšm™oœo�Ý�{Ñ#Ô#Õ'DÒDÐDØ,7�O DÑ)Ø—H’H˜WÑ%Ô%ˆEÝ˜%¥Ñ%Ô%ð 9¨%¯+ª+©-¬-ð 9Ø+0¯;ª;©=¬=� Ñ(Ø×Ò˜oÑ.Ô.Ð.Ùà�xŠx˜ÑÔˆØÐ(Ð(Ñ(Ø—h’h˜y¨"Ñ-Ô-ˆGØˆØ�Ý˜'¥4Ñ(Ô(ñ *ð .2°[Ò-@Ð-@˜M˜MÀl�	Ø24�	Ý&/°Ñ&8Ô&8ð  ñ  ‘N�H˜dÝ! $­Ñ,Ô,ð !Øð _Ø%×,Ò,°iÈÈÐW[ÑI\ÔI\Ð-]Ð-]Ñ^Ô^Ð^Ø Ý% d­DÑ1Ô1ð Ý(Øl°SÐlÐlÀHÐlÐlÐlñô ð õ   §¢¨Ñ 0Ô 0Ð 6°BÑ7Ô7×=Ò=Ñ?Ô?×EÒEÑGÔG�EØÐ EÐEÐEØ#Ÿxšx¨°Ñ3Ô3˜Ý)¨$µÑ4Ô4ð 3Ý#& t z¨r¡?¤?˜DØ!×(Ò(°)À]À]ÐSWÑEXÔEXÐ)YÐ)YÑZÔZÐZÑZØÐ">Ð>Ð>Ø$(§H¢H¨[¸"Ñ$=Ô$=˜	Ø!%§¢¨(Ñ!3Ô!3˜Ý% iµÑ6Ô6ð ,Ø"+§-¢-°°rÑ":Ô":˜CØ%.§]¢]°8¸VÑ%DÔ%D˜F˜Fà"+˜CÝ)¨#­sÑ3Ô3ð 1Ý"% c i¨R¡.¤.˜CØ>KÐZ]Ð5^Ð5^˜
Ý% f­cÑ2Ô2ð B°v·|²|±~´~ð BØ39·<²<±>´>˜J xÑ0Ø!×(Ò(¨Ñ4Ô4Ð4Ñ4å(Øz°SÐzÐzÀHÐzÐzÐei×emÒemÐntÑeuÔeuÐzÐzÐzñô ð ð ×!Ò!¨4¸IÐ"FÐ"FÑGÔGÐGÙÝ˜g¥sÑ+Ô+ð 'Ý˜g™,œ,�à×Ò t¸¸ÀgÑ8NÔ8NÐOÐOÑPÔPÐPÙåØk SÐkÐkÈYÐkÐkÐaeÐkÐkÐkñ
ô 
ð 	
ð Ðr   )Úallow_streamr   rþ   Ú
api_kwargsr  úDict[str, Any]c          	     ó@  ‡ ‡(— t          ‰ t          ¦  «        st          d¦  «        ‚h d£}ˆ fd„|D ¦   «         }|r3t          dd                     t	          |¦  «        ¦  «        › d�¦  «        ‚‰                      d¦  «        }t          |t          ¦  «        r|                     ¦   «         st          d¦  «        ‚|                     ¦   «         }‰                      d	¦  «        }|€d
}t          |t          ¦  «        st          |¦  «        }|                     ¦   «         pt          }|rt          |¦  «        }t          ‰                      d¦  «        ||¬¦  «        }‰                      d¦  «        }	d }
|	��t          |	t          ¦  «        st          d¦  «        ‚g }
t          |	¦  «        D �]Ñ\  }}t          |t          ¦  «        st          d|› d�¦  «        ‚|                     d¦  «        }|t          v r#|
                     t          |¦  «        ¦  «         Œo|dk    r)t          d|› d|                     d¦  «        ›d�¦  «        ‚|                     d¦  «        }|                     d¦  «        }t          |t          ¦  «        r|                     ¦   «         st          d|› d�¦  «        ‚t          |t          ¦  «        st          d|› d�¦  «        ‚|                     dd
¦  «        }|€d
}t          |t          ¦  «        st          |¦  «        }|                     dd¦  «        }t          |t          ¦  «        st          |¦  «        }|
                     d|                     ¦   «         |||dœ¦  «         �ŒÓ|r|
�t!          |
¦  «        }
‰                      dd¦  «        }|durt          d¦  «        ‚h d£Š(|||ddœ}|
�|
|d<   ‰                      d ¦  «        }t          |t          ¦  «        r||d <   ‰                      d!¦  «        }t          |t          ¦  «        r||d!<   ‰                      d"¦  «        }t          |t          ¦  «        r+|                     ¦   «         r|                     ¦   «         |d"<   ‰                      d#¦  «        }t          |t"          t$          f¦  «        r|d$k    rt#          |¦  «        |d#<   ‰                      d%¦  «        }t          |t"          t$          f¦  «        rQt          |t          ¦  «        s<d$t%          |¦  «        cxk     rt%          d&¦  «        k     rn nt%          |¦  «        |d%<   ‰                      d'¦  «        }t          |t"          t$          f¦  «        rt%          |¦  «        |d'<   d(D ]}‰                      |¦  «        }|�|||<   Œ‰                      d)¦  «        }t          |t          ¦  «        r|r||d)<   ‰                      d*¦  «        }|�¦t          |t          ¦  «        st          d+¦  «        ‚i }|                     ¦   «         D ]d\  }} t          |t          ¦  «        r|                     ¦   «         st          d,¦  «        ‚| €Œ@t          | ¦  «        ||                     ¦   «         <   Œe|r||d*<   ‰                      d-¦  «        }!|!�8t          |!t          ¦  «        st          d.¦  «        ‚|!rt          |!¦  «        |d-<   |rI‰                      d/¦  «        }"|"�|"d0urt          d1¦  «        ‚|"d0u rd0|d/<   ‰(                     d/¦  «         nd/‰ v rt          d2¦  «        ‚t          ‰                      d¦  «        pd
¦  «                             ¦   «         }#|#                     d3¦  «        }$|$rD|                     d¦  «        r/	 d$d4lm}%  |%|d         ¦  «        \  |d<   }&n# t2          $ r Y nw xY wt	          ˆ(fd5„‰ D ¦   «         ¦  «        }'|'r&t          d6d                     |'¦  «        › d�¦  «        ‚|S )7Nz'Codex Responses request must be a dict.>   ÚinputÚmodelÚinstructionsc                ó   •— g | ]}|‰v¯|‘Œ	S r   r   )r'   rP   r  s     €r   rI   z/_preflight_codex_api_kwargs.<locals>.<listcomp>»  s#   ø€ Ð@Ð@Ð@�s¨#°ZÐ*?Ð*?ˆsÐ*?Ð*?Ð*?r   z3Codex Responses request missing required field(s): z, r	  r  z;Codex Responses request 'model' must be a non-empty string.r  r*   r  rý   r    z=Codex Responses request 'tools' must be a list when provided.zCodex Responses tools[r  r[   r£   r  r¤   r¦   z] is missing a valid name.z] is missing valid parameters.r¥   rª   Fr©   Ústorez6Codex Responses contract requires 'store' to be false.>   r  r  r  r    ÚincludeÚtimeoutr  Ú
extra_bodyÚtemperatureÚtool_choicer  Úservice_tierÚextra_headersÚprompt_cache_keyÚmax_output_tokensÚcontext_managementÚparallel_tool_callsÚprompt_cache_retention)r  r  r  r  r  r   r%  r(  r   r!  Úinfr#  )r$  r*  r'  r+  r)  r&  z:Codex Responses request 'extra_headers' must be an object.zGCodex Responses request 'extra_headers' keys must be non-empty strings.r"  z7Codex Responses request 'extra_body' must be an object.ÚstreamTz/Codex Responses 'stream' must be true when set.zKCodex Responses stream flag is only allowed in fallback streaming requests.)zgrok-z
x-ai/grok-)Ústrip_slash_enumc              3  ó$   •K  — | ]
}|‰v¯|V — Œd S r  r   )r'   rP   Úallowed_keyss     €r   r)   z._preflight_codex_api_kwargs.<locals>.<genexpr>…  s-   øè è € ÐMÐM °SÀÐ5LÐ5L˜Ð5LÐ5LÐ5LÐ5LÐMÐMr   z2Codex Responses request has unsupported field(s): )rJ   rL   rN   r2   Úsortedra   r   rb   r   rC   r  r3   r0   Ú_RESPONSES_BUILTIN_TOOL_TYPESr1   r   rG   ry   ÚfloatrM   râ   rc   r�   Útools.schema_sanitizerr.  rq   ))r  r  r   rþ   ÚrequiredÚmissingr  r  Únormalized_inputr    Únormalized_toolsr  rÙ   Ú	tool_typer¤   r¦   r¥   rª   r  rO   r  r   r%  r(  r!  r#  Úpassthrough_keyÚvalr)  r&  Únormalized_headersrP   rD   r"  r-  Úmodel_name_for_provider_checkÚis_xai_modelr.  r»   Ú
unexpectedr0  s)   `                                       @r   Ú_preflight_codex_api_kwargsr@  °  sñ  øø€ õ �j¥$Ñ'Ô'ð DÝÐBÑCÔCÐCà1Ð1Ð1€HØ@Ð@Ð@Ð@˜hÐ@Ñ@Ô@€GØð nÝÐlÈtÏyÊyÕY_Ð`gÑYhÔYhÑOiÔOiÐlÐlÐlÑmÔmÐmà�NŠN˜7Ñ#Ô#€EÝ�e�SÑ!Ô!ð X¨¯ª©¬ð XÝÐVÑWÔWÐWØ�KŠK‰MŒM€Eà—>’> .Ñ1Ô1€LØÐØˆÝ�l¥CÑ(Ô(ð )Ý˜<Ñ(Ô(ˆØ×%Ò%Ñ'Ô'ÐAÕ+A€LØð @Ý1°,Ñ?Ô?ˆå3Ø�Š�wÑÔØ/Ø 7ðñ ô Ðð �NŠN˜7Ñ#Ô#€EØÐØÑÝ˜%¥Ñ&Ô&ð 	^ÝÐ\Ñ]Ô]Ð]ØÐÝ" 5Ñ)Ô)ð .	ñ .	‰IˆC�Ý˜d¥DÑ)Ô)ð UÝ Ð!S¸#Ð!SÐ!SÐ!SÑTÔTÐTàŸš Ñ(Ô(ˆIð Õ9Ð9Ð9Ø ×'Ò'­¨T©
¬
Ñ3Ô3Ð3Øà˜JÒ&Ð&Ý Ð!k¸#Ð!kÐ!kÐVZ×V^ÒV^Ð_eÑVfÔVfÐ!kÐ!kÐ!kÑlÔlÐlà—8’8˜FÑ#Ô#ˆDØŸš ,Ñ/Ô/ˆJÝ˜d¥CÑ(Ô(ð [°·
²
±´ð [Ý Ð!Y¸#Ð!YÐ!YÐ!YÑZÔZÐZÝ˜j­$Ñ/Ô/ð _Ý Ð!]¸#Ð!]Ð!]Ð!]Ñ^Ô^Ð^àŸ(š( =°"Ñ5Ô5ˆKØÐ"Ø �Ý˜k­3Ñ/Ô/ð /Ý! +Ñ.Ô.�à—X’X˜h¨Ñ.Ô.ˆFÝ˜f¥dÑ+Ô+ð &Ý˜f™œ�à×#Ò#à&Ø ŸJšJ™LœLØ#.Ø$Ø",ðð ñô ð ñ ð ð KÐ#3Ð#?Ý8Ð9IÑJÔJÐà�NŠN˜7 EÑ*Ô*€EØ�EÐÐÝÐQÑRÔRÐRðð ð €Lð Ø$Ø!Øð	"ð "€Jð Ð#Ø.ˆ
�7Ñð —’˜{Ñ+Ô+€IÝ�)�TÑ"Ô"ð ,Ø"+ˆ
�;ÑØ�nŠn˜YÑ'Ô'€GÝ�'�4Ñ Ô ð (Ø 'ˆ
�9ÑØ—>’> .Ñ1Ô1€LÝ�,¥Ñ$Ô$ð :¨×);Ò);Ñ)=Ô)=ð :Ø%1×%7Ò%7Ñ%9Ô%9ˆ
�>Ñ"ð #ŸšÐ':Ñ;Ô;ÐÝÐ#¥c­5 \Ñ2Ô2ð AÐ7HÈ1Ò7LÐ7LÝ*-Ð.?Ñ*@Ô*@ˆ
Ð&Ñ'Ø�nŠn˜YÑ'Ô'€Gå�7�S¥%˜LÑ)Ô)ð/å˜7¥DÑ)Ô)ð/ð •�g‘”Ð-Ð-Ò-Ð-¥ u¡¤Ò-Ð-Ð-Ð-Ð-å % g¡¤ˆ
�9ÑØ—.’. Ñ/Ô/€KÝ�+¥¥U˜|Ñ,Ô,ð 7Ý$)¨+Ñ$6Ô$6ˆ
�=Ñ!ðð .ð .ˆð �nŠn˜_Ñ-Ô-ˆØˆ?Ø*-ˆJ�Ñ'øð
 $ŸšÐ(<Ñ=Ô=ÐÝÐ$¥dÑ+Ô+ð >Ð0Bð >Ø+=ˆ
Ð'Ñ(à—N’N ?Ñ3Ô3€MØÐ Ý˜-­Ñ.Ô.ð 	[ÝÐYÑZÔZÐZØ-/ÐØ'×-Ò-Ñ/Ô/ð 	9ð 	9‰JˆC�Ý˜c¥3Ñ'Ô'ð l¨s¯yªy©{¬{ð lÝ Ð!jÑkÔkÐkØˆ}ØÝ.1°%©j¬jÐ˜sŸyšy™{œ{Ñ+Ð+Øð 	=Ø*<ˆJ�Ñ'à—’ Ñ-Ô-€JØÐÝ˜*¥dÑ+Ô+ð 	XÝÐVÑWÔWÐWð ð 	8Ý'+¨JÑ'7Ô'7ˆJ�|Ñ$àð hØ—’ Ñ)Ô)ˆØÐ &°Ð"4Ð"4ÝÐNÑOÔOÐOØ�Tˆ>ˆ>Ø#'ˆJ�xÑ Ø×Ò˜Ñ"Ô"Ð"Ð"Ø	�ZÐ	Ð	ÝÐfÑgÔgÐgõ %(¨
¯ª°wÑ(?Ô(?Ð(EÀ2Ñ$FÔ$F×$LÒ$LÑ$NÔ$NÐ!Ø0×;Ò;Ð<SÑTÔT€LØð ˜
Ÿš wÑ/Ô/ð ð	Ø?Ð?Ð?Ð?Ð?Ð?Ø%5Ð%5°jÀÔ6IÑ%JÔ%JÑ"ˆJ�wÑ  øÝð 	ð 	ð 	ØˆDð	øøøõ ÐMÐMÐMÐM zÐMÑMÔMÑMÔM€JØð 
ÝØYÀÇÂÈ:ÑAVÔAVÐYÐYÐYñ
ô 
ð 	
ð Ðs   Þ-_ ß
_ß_rH   c                óT  — t          | dd¦  «        }t          |t          ¦  «        sdS g }|D ]U}t          |dd¦  «        }|dvrŒt          |dd¦  «        }t          |t          ¦  «        r|r|                     |¦  «         ŒVd                     |¦  «                             ¦   «         S )z<Extract assistant text from a Responses message output item.rT   Nr*   r[   >   r   rX   r   ©ÚgetattrrJ   r3   r   r1   r2   rb   )rH   rT   Úchunksrf   rg   r   s         r   Ú_extract_responses_message_textrE  ’  s·   € å�d˜I tÑ,Ô,€GÝ�g�tÑ$Ô$ð Øˆrà€FØð  ð  ˆÝ˜˜f dÑ+Ô+ˆØÐ/Ð/Ð/ØÝ�t˜V TÑ*Ô*ˆÝ�d�CÑ Ô ð 	  Tð 	 Ø�MŠM˜$ÑÔÐøØ�7Š7�6‰?Œ?× Ò Ñ"Ô"Ð"r   c                ó¤  — t          | dd¦  «        }t          |t          ¦  «        rmg }|D ]?}t          |dd¦  «        }t          |t          ¦  «        r|r|                     |¦  «         Œ@|r'd                     |¦  «                             ¦   «         S t          | dd¦  «        }t          |t          ¦  «        r|r|                     ¦   «         S dS )zAExtract a compact reasoning text from a Responses reasoning item.rt   Nr   Ú
r*   rB  )rH   rt   rD  rf   r   s        r   Ú!_extract_responses_reasoning_textrH  £  sÙ   € å�d˜I tÑ,Ô,€GÝ�'�4Ñ Ô ð -ØˆØð 	$ð 	$ˆDÝ˜4 ¨Ñ.Ô.ˆDÝ˜$¥Ñ$Ô$ð $¨ð $Ø—’˜dÑ#Ô#Ð#øØð 	-Ø—9’9˜VÑ$Ô$×*Ò*Ñ,Ô,Ð,Ý�4˜ Ñ&Ô&€DÝ�$�ÑÔð  ð Ø�zŠz‰|Œ|ÐØˆ2r   Ú	error_objÚresponse_statusc                ó’  — d}d}t          | t          ¦  «        r+|                      d¦  «        }|                      d¦  «        }n$| �"t          | dd¦  «        }t          | dd¦  «        }t          |t          ¦  «        r!t	          |¦  «                             ¦   «         n$|r!t	          |¦  «                             ¦   «         nd}t          |t          ¦  «        r!t	          |¦  «                             ¦   «         n$|r!t	          |¦  «                             ¦   «         nd}|r	|r|› d|› �S |r|S |r|S | rt	          | ¦  «        S d|› d�S )ac  Build a human-readable error string from a Responses ``response.error`` payload.

    The OpenAI Responses API carries failure details under ``response.error``
    on terminal ``response.failed`` events, in the shape
    ``{"code": "rate_limit_exceeded", "message": "Slow down", "param": ...}``.
    Earlier code only surfaced ``message``, which left users staring at bare
    strings like ``"Slow down"`` while the failure mode (rate limit vs
    context-length vs internal_error vs model-overloaded) was hidden in
    ``code``. We now prefix ``code`` when both are present so consumers can
    distinguish failure modes without parsing the bare message.

    Falls back to ``code`` alone when ``message`` is empty, and to a stable
    default referencing the response status when no error payload is
    available at all. Adapted from anomalyco/opencode#28757.
    NÚcoderÏ   r*   z: zResponses API returned status 'ú')rJ   rL   ra   rC  r   rb   )rI  rJ  rL  rÏ   Úcode_strÚmessage_strs         r   Ú_format_responses_errorrP  ´  s_  € ð" €DØ€GÝ�)�TÑ"Ô"ð 6Ø�}Š}˜VÑ$Ô$ˆØ—-’- 	Ñ*Ô*ˆˆØ	Ð	Ý�y &¨$Ñ/Ô/ˆÝ˜) Y°Ñ5Ô5ˆå$.¨tµSÑ$9Ô$9Ðb�s�4‰yŒy�ŠÑ Ô Ð ÐUYÐ@aÅÀDÁ	Ä	ÇÂÑ@QÔ@QÐ@QÐ_a€HÝ*4°W½cÑ*BÔ*BÐq•#�g‘,”,×$Ò$Ñ&Ô&Ð&ÐahÐIpÍÈWÉÌ×I[ÒI[ÑI]ÔI]ÐI]Ðnp€Kàð ,�Kð ,ØÐ+Ð+˜kÐ+Ð+Ð+Øð ØÐØð ØˆØð õ �9‰~Œ~ÐØ?¨_Ð?Ð?Ð?Ð?r   )Úissuer_kindÚresponserQ  útuple[Any, str]c               ó–  — t          | dd¦  «        }t          |t          ¦  «        r'|                     ¦   «                              ¦   «         }nd}t          | dd¦  «        }d}t          |t
          ¦  «        rIt          |                     d¦  «        pd¦  «                             ¦   «                              ¦   «         }nF|�Dt          t          |dd¦  «        pd¦  «                             ¦   «                              ¦   «         }|dk    o|dk    }t          | dd¦  «        }t          |t          ¦  «        r|sßt          | d	d¦  «        }t          |t          ¦  «        rŒ|                     ¦   «         rxt           	                    d
t          |                     ¦   «         ¦  «        ¦  «         t          dddt          d	|                     ¦   «         ¬¦  «        g¬¦  «        g}|| _        n-|rt          dddg ¬¦  «        g}|| _        nt          d¦  «        ‚|dv r0t          | dd¦  «        }t          ||¦  «        }	t          |	¦  «        ‚g }
g }g }g }g }|dv }|dv }d}d}d}h d£}|D �]9}t          |dd¦  «        }t          |dd¦  «        }t          |t          ¦  «        r'|                     ¦   «                              ¦   «         }nd}|dv r||vrd}d}|dk    �r t          |dd¦  «        }d}d}t          |t          ¦  «        r5|                     ¦   «                              ¦   «         }|dv rd}d}n|dv rd}t          |¦  «        }|rŽ|r|                     |¦  «         n|
                     |¦  «         ddt#          |¦  «        d	|dœgdœ}t          |dd¦  «        }t          |t          ¦  «        r|r||d<   |r||d<   |                     |¦  «         �Œv|dk    �rYd}t%          |¦  «        }|r|                     |¦  «         t          |dd¦  «        }t          |t          ¦  «        �r|�rd|dœ} |r|| d <   t          |dd¦  «        }t          |t          ¦  «        r2|                     d!¦  «        rt           	                    d"|¦  «         �Œ3t          |t          ¦  «        r|r|| d<   t          |d#d¦  «        }!t          |!t          ¦  «        rJg }"|!D ]@}#t          |#d$d¦  «        }$t          |$t          ¦  «        r|"                     d%|$dœ¦  «         ŒA|"| d#<   |                     | ¦  «         �ŒÖ|d&k    rst          |dd¦  «        }t          |t          ¦  «        rK|rId&|dœ} |r|| d <   |                     | ¦  «         t                               d't          |¦  «        ¦  «         �ŒO|d(k    �rr|dv r�Œ\t          |d)d¦  «        pd}%t          |d*d+¦  «        }&t          |&t          ¦  «        st+          j        |&d¬,¦  «        }&t          |d-d¦  «        }'t          |dd¦  «        }(t/          |(¦  «        \  })}*t          |'t          ¦  «        r|'                     ¦   «         r|'n|)}+t          |+t          ¦  «        r|+                     ¦   «         st1          |%|&t          |¦  «        ¦  «        }+|+                     ¦   «         }+t          |(t          ¦  «        r|(nd},t3          |+|,¦  «        },|                     t          |+|+|,d.t          |%|&¬/¦  «        ¬0¦  «        ¦  «         �ŒÈ|d1k    �rjt          |d)d¦  «        pd}%t          |d2d+¦  «        }&t          |&t          ¦  «        st+          j        |&d¬,¦  «        }&t          |d-d¦  «        }'t          |dd¦  «        }(t/          |(¦  «        \  })}*t          |'t          ¦  «        r|'                     ¦   «         r|'n|)}+t          |+t          ¦  «        r|+                     ¦   «         st1          |%|&t          |¦  «        ¦  «        }+|+                     ¦   «         }+t          |(t          ¦  «        r|(nd},t3          |+|,¦  «        },|                     t          |+|+|,d.t          |%|&¬/¦  «        ¬0¦  «        ¦  «         �Œ;d3                     d4„ |
D ¦   «         ¦  «                             ¦   «         }-|-sNt7          | d	¦  «        r>|r|r:t          | d	d¦  «        }t          |t          ¦  «        r|                     ¦   «         }-d}.|-rC|sAt8                               |-¦  «        r'd}.t                               d5|-dd6…         ¦  «         d}-|d7k    rØ|-sÖ|sÔ|rÒd8                     |¦  «        }/|/                     d9¦  «        }0|0d:k    r¢|/|0t          d9¦  «        z   d…         }1|1                      d;¦  «        }2|2d:k    r
|1d|2…         }1|1                     ¦   «         }1|1rMt                               d<t          |1¦  «        ¦  «         |1}-|/d|0…                              ¦   «         }3|3r|3gng }t          |-||r'd8                     |¦  «                             ¦   «         nddd|pd|pd¬=¦  «        }4|rd>}5n2|rd}5n-|.rd}5n(|rd}5n#|s|r|sd}5n|s|s|r|-s|dk    r|d?vrd@}5nd}5nd@}5|4|5fS )Aar  Normalize a Responses API object to an assistant_message-like object.

    ``issuer_kind`` (when provided) is stamped onto each reasoning item the
    response yields, so future replays can detect when the active endpoint
    differs from the one that minted the encrypted_content blob and drop
    the item instead of triggering HTTP 400 invalid_encrypted_content.
    r½   NÚincomplete_detailsr*   Úreasonrµ   Úcontent_filterrÝ   rX   z`Codex response has empty output but output_text is present (%d chars); synthesizing output item.rÏ   rW   r´   rZ   rÐ   z&Responses API returned no output items>   ÚfailedÚ	cancelledÚerror>   Úqueuedrµ   r¶   >   r[  r¶   F>   Úmcp_callÚcomputer_callÚweb_search_callÚfile_search_callÚlocal_shell_callÚcode_interpreter_callÚimage_generation_callr[   TrÑ   >   ÚanalysisÚ
commentary>   ÚfinalÚfinal_answerrÈ   r  rÇ   r  rÉ   Úrs_tmp_z@Skipping transient Codex reasoning item during normalization: %srt   r   Úsummary_textr  z?Native Responses compaction item captured (%d chars encrypted).r×   r¤   rx   rÔ   rÕ   r|   r£   )r¤   rx   )rÈ   r|   r‘   r[   r£   Úcustom_tool_callr  rG  c                ó   — g | ]}|¯|‘ŒS r   r   )r'   rÅ   s     r   rI   z-_normalize_codex_response.<locals>.<listcomp>Û  s   € Ð:Ð:Ð: !¸Ð:˜AÐ:Ð:Ð:r   zÌCodex response contains leaked tool-call text in assistant content (no structured function_call items). Treating as incomplete so the continuation path can re-elicit a proper tool call. Leaked snippet: %ri,  r   z

z
<response>éÿÿÿÿz</response>z…xAI response delivered its final answer inside the reasoning channel (<response> delimiter); promoting %d chars to assistant content.)rT   rÓ   r  Úreasoning_contentÚreasoning_detailsrÆ   rÎ   rÓ   )r   r   r   Ústop)!rC  rJ   r   rb   rc   rL   ra   r3   rà   Údebugrƒ   r   rÝ   ÚRuntimeErrorrP  rE  r1   r¾   rH  r�   Úinforã   rä   r’   r{   rŸ   r2   ÚhasattrÚ_TOOL_CALL_LEAK_PATTERNÚsearchrá   ÚrfindÚfind)6rR  rQ  rJ  rU  Úincomplete_reasonÚ"response_incomplete_content_filterrÝ   Úout_textrI  Ú	error_msgrç   Úreasoning_partsÚreasoning_items_rawÚmessage_items_rawrÓ   Úhas_incomplete_itemsÚ saw_streaming_or_item_incompleteÚsaw_commentary_phaseÚsaw_final_answer_phaseÚsaw_reasoning_itemÚ_SERVER_SIDE_TOOL_CALL_TYPESrH   r  Úitem_statusÚ
item_phaseÚnormalized_phaseÚis_commentary_phaseÚmessage_textÚraw_message_itemrì   Úreasoning_textr  rð   rt   Úraw_summaryrf   r   rw   rx   Úraw_call_idÚraw_item_idrö   r»   r|   r‘   Ú
final_textÚleaked_tool_call_textÚjoined_reasoningÚmarkerÚsalvagedÚclosingÚreasoning_prefixÚassistant_messageÚfinish_reasons6                                                         r   Ú_normalize_codex_responser—  â  sé  € õ ˜h¨°$Ñ7Ô7€OÝ�/¥3Ñ'Ô'ð Ø)×/Ò/Ñ1Ô1×7Ò7Ñ9Ô9ˆˆàˆå  Ð+?ÀÑFÔFÐØÐÝÐ$¥dÑ+Ô+ð aÝÐ 2× 6Ò 6°xÑ @Ô @Ð FÀBÑGÔG×MÒMÑOÔO×UÒUÑWÔWÐÐØ	Ð	'Ý¥Ð(:¸HÀbÑ IÔ IÐ OÈRÑPÔP×VÒVÑXÔX×^Ò^Ñ`Ô`Ðà˜<Ò'ÐQÐ,=ÐAQÒ,Qð 'õ �X˜x¨Ñ.Ô.€FÝ�f�dÑ#Ô#ð I¨6ð Iõ ˜8 ]°DÑ9Ô9ˆÝ�h¥Ñ$Ô$ð 	I¨¯ªÑ)9Ô)9ð 	IÝ�LŠLð,Ý-0°·²Ñ1AÔ1AÑ-BÔ-Bñô ð õ &Ø [¸Ý(¨mÀ(Ç.Â.ÑBRÔBRÐSÑSÔSÐTðñ ô ð ˆFð %ˆHŒOˆOØ/ð 
	Iõ
 &Ø [¸Èbðñ ô ð ˆFð %ˆHŒOˆOåÐGÑHÔHÐHàÐ1Ð1Ð1Ý˜H g¨tÑ4Ô4ˆ	Ý+¨I°ÑGÔGˆ	Ý˜9Ñ%Ô%Ð%à!€MØ!#€OØ02ÐØ.0ÐØ€JØ*Ð.UÐUÐØ'6Ð:SÐ'SÐ$Ø ÐØ"ÐØÐð&$ð $ð $Ð ð ð Tñ TˆÝ˜D &¨$Ñ/Ô/ˆ	Ý˜d H¨dÑ3Ô3ˆÝ�k¥3Ñ'Ô'ð 	Ø%×+Ò+Ñ-Ô-×3Ò3Ñ5Ô5ˆKˆKàˆKð ÐBÐBÐBØÐ!=Ð=Ð=à#'Ð Ø/3Ð,à˜	Ò!Ñ!Ý   w°Ñ5Ô5ˆJØ#ÐØ"'ÐÝ˜*¥cÑ*Ô*ð 2Ø#-×#3Ò#3Ñ#5Ô#5×#;Ò#;Ñ#=Ô#=Ð Ø#Ð'AÐAÐAØ+/Ð(Ø*.Ð'Ð'Ø%Ð)BÐBÐBØ-1Ð*Ý:¸4Ñ@Ô@ˆLØð ;ð 'ð 7Ø#×*Ò*¨<Ñ8Ô8Ð8Ð8à!×(Ò(¨Ñ6Ô6Ð6à%Ø'ÝAÀ+ÑNÔNØ)6ÀÐ MÐ MÐNð	4ð 4Ð õ " $¨¨dÑ3Ô3�Ý˜g¥sÑ+Ô+ð 5°ð 5Ø-4Ð$ TÑ*Ø#ð AØ0@Ð$ WÑ-Ø!×(Ò(Ð)9Ñ:Ô:Ð:ùØ˜+Ò%Ñ%Ø!%ÐÝ>¸tÑDÔDˆNØð 7Ø×&Ò& ~Ñ6Ô6Ð6õ   Ð&9¸4Ñ@Ô@ˆIÝ˜)¥SÑ)Ô)ñ 5¨iñ 5Ø$/ÀiÐPÐP�ð
 ð ;Ø/:�H˜^Ñ,Ý! $¨¨dÑ3Ô3�Ý˜g¥sÑ+Ô+ð °×0BÒ0BÀ9Ñ0MÔ0Mð Ý—L’LØZØñô ð ñ Ý˜g¥sÑ+Ô+ð -°ð -Ø%,�H˜T‘Nå! $¨	°4Ñ8Ô8�Ý˜g¥tÑ,Ô,ð 6Ø"$�KØ 'ð Wð W˜Ý& t¨V°TÑ:Ô:˜Ý% d­CÑ0Ô0ð WØ'×.Ò.¸ÐPTÐ/UÐ/UÑVÔVÐVøØ*5�H˜YÑ'Ø#×*Ò*¨8Ñ4Ô4Ð4ùØ˜,Ò&Ð&õ   Ð&9¸4Ñ@Ô@ˆIÝ˜)¥SÑ)Ô)ð ¨ið Ø$0ÀyÐQÐQ�Øð ;Ø/:�H˜^Ñ,Ø#×*Ò*¨8Ñ4Ô4Ð4Ý—’ØUÝ˜	‘N”Nñô ð ùð ˜/Ò)Ñ)ØÐEÐEÐEÙÝ˜d F¨BÑ/Ô/Ð5°2ˆGÝ  k°4Ñ8Ô8ˆIÝ˜i­Ñ-Ô-ð FÝ œJ y¸uÐEÑEÔE�	Ý! $¨	°4Ñ8Ô8ˆKÝ! $¨¨dÑ3Ô3ˆKÝ":¸;Ñ"GÔ"GÑÐ˜aÝ%/°½SÑ%AÔ%AÐoÀk×FWÒFWÑFYÔFYÐo�k�kÐ_oˆGÝ˜g¥sÑ+Ô+ð V°7·=²=±?´?ð VÝ0°¸)ÅSÈÁ_Ä_ÑUÔU�Ø—m’m‘o”oˆGÝ.8¸ÅcÑ.JÔ.JÐT˜{˜{ÐPTÐÝAÀ'ÐK[Ñ\Ô\ÐØ×Ò�oØØØ!1ØÝ(¨gÀÐKÑKÔKðñ ô ñ ô ð ñ ð Ð,Ò,Ñ,Ý˜d F¨BÑ/Ô/Ð5°2ˆGÝ  g¨tÑ4Ô4ˆIÝ˜i­Ñ-Ô-ð FÝ œJ y¸uÐEÑEÔE�	Ý! $¨	°4Ñ8Ô8ˆKÝ! $¨¨dÑ3Ô3ˆKÝ":¸;Ñ"GÔ"GÑÐ˜aÝ%/°½SÑ%AÔ%AÐoÀk×FWÒFWÑFYÔFYÐo�k�kÐ_oˆGÝ˜g¥sÑ+Ô+ð V°7·=²=±?´?ð VÝ0°¸)ÅSÈÁ_Ä_ÑUÔU�Ø—m’m‘o”oˆGÝ.8¸ÅcÑ.JÔ.JÐT˜{˜{ÐPTÐÝAÀ'ÐK[Ñ\Ô\ÐØ×Ò�oØØØ!1ØÝ(¨gÀÐKÑKÔKðñ ô ñ ô ð ùð —’Ð:Ð: }Ð:Ñ:Ô:Ñ;Ô;×AÒAÑCÔC€Jàð*å�H˜mÑ,Ô,ð*ð &ð*ð /Eð*õ
 ˜8 ]°BÑ7Ô7ˆÝ�h¥Ñ$Ô$ð 	*Ø!ŸšÑ)Ô)ˆJð& "ÐØð ˜*ð Õ)@×)GÒ)GÈ
Ñ)SÔ)Sð Ø $ÐÝ�ŠðUð �t˜�tÔñ		
ô 	
ð 	
ð ˆ
ð" 	�Ò&Ð&Øð 	'àð 	'ð ð 	'ð
 "Ÿ;š; Ñ7Ô7ÐØ!×'Ò'¨Ñ5Ô5ˆØ�RŠ<ˆ<Ø'¨µ°\Ñ1BÔ1BÑ(BÐ(CÐ(CÔDˆHØ—m’m MÑ2Ô2ˆGØ˜"Š}ˆ}Ø# H W HÔ-�Ø—~’~Ñ'Ô'ˆHØð 	QÝ—’ð5õ ˜‘M”Mñ	ô ð ð &�
Ø#3°G°V°GÔ#<×#BÒ#BÑ#DÔ#DÐ Ø8HÐ"PÐ#3Ð"4Ð"4Èb�å'ØØØ:IÐS�&—+’+˜oÑ.Ô.×4Ò4Ñ6Ô6Ð6ÈtØØØ1Ð9°TØ-Ð5°ðñ ô Ðð ð #Ø$ˆˆØ	+ð !Ø(ˆˆØ	ð Ø$ˆˆØ	)ð Ø$ˆˆØ
ð Ð"6ð Ð@Vð Ø$ˆˆØ
ð  ð Ð4Fð ÐPZð ð  ˜kÒ)Ð)¨kð B
ð /
ð /
ð
 #ˆMˆMà(ˆMˆMàˆØ˜mÐ+Ð+r   )
r   r   r   r   r   r   r   r   r   r   )r   r   r   r   )rD   r   r   r   )rT   r   rS   r   r   rU   )rT   r   rl   r   r   r   )r   )rw   r   rx   r   r;   ry   r   r   )r|   r   r   r   )r‹   r   r   rŒ   r  )r|   r   r‘   r   r   r   )r    r¡   r   r¡   )rD   r   r¸   r   r   r   )rÁ   rU   r   r   r   r   r¿   r   rÀ   r   r   rU   )rÿ   r   r   r   rþ   r   r   rU   )
r  r   r  r   r   r   rþ   r   r   r  )rH   r   r   r   )rI  r   rJ  r   r   r   )rR  r   rQ  r   r   rS  )2Ú__doc__Ú
__future__r   r…   rã   Úloggingr–   r%   r—   Útypesr   Útypingr   r   r   r   Úagent.message_sanitizationr
   Úagent.prompt_builderr   Ú	getLoggerÚ__name__rà   r   rß   ÚcompileÚ
IGNORECASErs  r.   r,   rC   rG   rj   rv   r{   rŠ   r’   rŸ   r¬   r2  r¼   r„   r¾   rü   r  r@  rE  rH  rP  r—  r   r   r   ú<module>r£     s|  ððð ð #Ð "Ð "Ð "Ð "Ð "à €€€Ø €€€Ø €€€Ø 	€	€	€	Ø Ð Ð Ð Ø €€€Ø !Ð !Ð !Ð !Ð !Ð !Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,à <Ð <Ð <Ð <Ð <Ð <Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7à	ˆÔ	˜8Ñ	$Ô	$€ð
 #Ø %Ø"Ø"ðð ð ð ð ð ð: #Ð ð %˜"œ*Ø0Ø„Mñô Ð ð '˜BœJØ>ñô Ð ð €ð#ð #ð #ð #ðLð ð ð ð6 CIð 0ð 0ð 0ð 0ð 0ð 0ðf ADð -ð -ð -ð -ð -ð -ðh	<ð 	<ð 	<ð 	<ð 	<ðð ð ð ð,ð ð ð ð& '+ðð ð ð ð ðBð ð ð ð ð<!ð !ð !Ð ð HÐGÐGÐ ð !#Ð ð GRð ð ð ð ð ð ð" #Ø %Ø'+Ø)-ð[ð [ð [ð [ð [ð [ðJ	 !&Ø$)ð	qð qð qð qð qð qðn Ø %Ø$)ð[ð [ð [ð [ð [ð [ðD#ð #ð #ð #ð"ð ð ð ð"'@ð '@ð '@ð '@ðb "&ðw,ð w,ð w,ð w,ð w,ð w,ð w,ð w,r   