§
    ‰eîiäÍ  ã                  óÐ  — d Z ddlmZ ddlZddlZddlZddlmZmZm	Z	  ej
        e¦  «        ZddlmZ ddlmZmZmZmZ ddlmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z# ddl$m%Z%m&Z& dd	l'm(Z( dd
l)m*Z*m+Z+ d@d„Z,dAd„Z-dBd„Z.dCd„Z/dDd„Z0dEd„Z1dFdGd„Z2dHd „Z3h d!£Z4dId$„Z5dddd%œdJd-„Z6dFdKd/„Z7	 dFdLd2„Z8dMd3„Z9ddd4œdNd7„Z:ddd4œdOd8„Z;ddd4œdPd9„Z<ddd4œdQd:„Z=ddddd;œdRd<„Z>dSd?„Z?dS )TzGShared runtime provider resolution for CLI, gateway, cron, and helpers.é    )ÚannotationsN)ÚAnyÚDictÚOptional)Úauth)ÚCredentialPoolÚPooledCredentialÚget_custom_provider_pool_keyÚ	load_pool)Ú	AuthErrorÚDEFAULT_CODEX_BASE_URLÚDEFAULT_QWEN_BASE_URLÚPROVIDER_REGISTRYÚ_agent_key_is_usableÚformat_auth_errorÚresolve_providerÚ resolve_nous_runtime_credentialsÚ!resolve_codex_runtime_credentialsÚ resolve_qwen_runtime_credentialsÚ(resolve_gemini_oauth_runtime_credentialsÚ$resolve_api_key_provider_credentialsÚ-resolve_external_process_provider_credentialsÚhas_usable_secret)Úget_compatible_custom_providersÚload_config)ÚOPENROUTER_BASE_URL)Úbase_url_host_matchesÚbase_url_hostnameÚvalueÚstrÚreturnc                óv   — |                       ¦   «                              ¦   «                              dd¦  «        S )NÚ Ú-)ÚstripÚlowerÚreplace)r   s    ú=/home/div/.hermes/hermes-agent/hermes_cli/runtime_provider.pyÚ_normalize_custom_provider_namer)   #   s,   € Ø�;Š;‰=Œ=×ÒÑ Ô ×(Ò(¨¨cÑ2Ô2Ð2ó    ÚhostÚboolc                ó\   — | pd                      ¦   «                              d¦  «        }|dv S )NÚ ú.>   ú::1ú0.0.0.0Ú	localhostú	127.0.0.1)r&   Úrstrip)r+   Úhs     r(   Ú_loopback_hostnamer6   '   s1   € Ø	ˆ�×ÒÑÔ×#Ò# CÑ(Ô(€AØÐ<Ð<Ð<r*   Úcfg_base_urlÚcfg_providerc                óò   — |pd                      ¦   «                              ¦   «         }| pd                      ¦   «         }|sdS |dk    rdS t          |d¦  «        rdS t          t	          |¦  «        ¦  «        S )ae  Decide whether ``model.base_url`` may back bare ``custom`` runtime resolution.

    GitHub #14676: the model picker can select Custom while ``model.provider`` still reflects a
    previous provider. Reject non-loopback URLs unless the YAML provider is already ``custom``,
    so a stale OpenRouter/Z.ai base_url cannot hijack local ``custom`` sessions.
    r.   FÚcustomTúopenrouter.ai)r%   r&   r   r6   r   )r7   r8   Úcfg_provider_normÚbus       r(   Ú,_config_base_url_trustworthy_for_bare_customr>   ,   sˆ   € ð &Ð+¨×2Ò2Ñ4Ô4×:Ò:Ñ<Ô<ÐØ
Ð
˜"×	#Ò	#Ñ	%Ô	%€BØð ØˆuØ˜HÒ$Ð$ØˆtÝ˜R Ñ1Ô1ð ØˆuÝÕ/°Ñ3Ô3Ñ4Ô4Ð4r*   Úbase_urlúOptional[str]c                ó   — | pd                      ¦   «                              ¦   «                              d¦  «        }t          | ¦  «        }|dk    rdS |dk    rdS |                     d¦  «        rdS |dk    rd	|v rdS d
S )u‘  Auto-detect api_mode from the resolved base URL.

    - Direct api.openai.com endpoints need the Responses API for GPT-5.x
      tool calls with reasoning (chat/completions returns 400).
    - Third-party Anthropic-compatible gateways (MiniMax, Zhipu GLM,
      LiteLLM proxies, etc.) conventionally expose the native Anthropic
      protocol under a ``/anthropic`` suffix â€” treat those as
      ``anthropic_messages`` transport instead of the default
      ``chat_completions``.
    - Kimi Code's ``api.kimi.com/coding`` endpoint also speaks the
      Anthropic Messages protocol (the /coding route accepts Claude
      Code's native request shape).
    r.   ú/zapi.x.aiÚcodex_responseszapi.openai.comz
/anthropicÚanthropic_messageszapi.kimi.comz/codingN)r%   r&   r4   r   Úendswith)r?   Ú
normalizedÚhostnames      r(   Ú_detect_api_mode_for_urlrH   >   sŸ   € ð �.˜b×'Ò'Ñ)Ô)×/Ò/Ñ1Ô1×8Ò8¸Ñ=Ô=€JÝ  Ñ*Ô*€HØ�:ÒÐØ Ð ØÐ#Ò#Ð#Ø Ð Ø×Ò˜<Ñ(Ô(ð $Ø#Ð#Ø�>Ò!Ð! i°:Ð&=Ð&=Ø#Ð#Øˆ4r*   c                ó�  — | sdS 	 ddl }|                      d¦  «        }|                     d¦  «        s|dz  }|                     |dz   d¬¦  «        }|j        r[|                     ¦   «                              d	g ¦  «        }t          |¦  «        d
k    r |d                              dd¦  «        }|r|S n# t          $ r Y nw xY wdS )zFQuery a local server for its model name when only one model is loaded.r.   r   NrB   z/v1z/modelsé   )ÚtimeoutÚdataé   Úid)Úrequestsr4   rE   ÚgetÚokÚjsonÚlenÚ	Exception)r?   rO   ÚurlÚrespÚmodelsÚmodel_ids         r(   Ú_auto_detect_local_modelrY   Y   sä   € àð ØˆrðØˆˆˆØ�oŠo˜cÑ"Ô"ˆØ�|Š|˜EÑ"Ô"ð 	Ø�5‰LˆCØ�|Š|˜C )™O°Qˆ|Ñ7Ô7ˆØŒ7ð 	$Ø—Y’Y‘[”[—_’_ V¨RÑ0Ô0ˆFÝ�6‰{Œ{˜aÒÐØ! !œ9Ÿ=š=¨¨rÑ2Ô2�Øð $Ø#�OøøÝð ð ð Øˆðøøøàˆ2s   †B.B6 Â6
CÃCúDict[str, Any]c                 ór  — t          ¦   «         } |                      d¦  «        }t          |t          ¦  «        r¿t          |¦  «        }|                     d¦  «        s |                     d¦  «        r|d         |d<   |                     d¦  «        pd                     ¦   «         }|                     d¦  «        pd                     ¦   «         }d|v pd|v }| }|r|r|rt          |¦  «        }|r||d<   |S t          |t          ¦  «        r*|                     ¦   «         rd|                     ¦   «         iS i S )NÚmodelÚdefaultr.   r?   r2   r3   )r   rP   Ú
isinstanceÚdictr%   rY   r    )ÚconfigÚ	model_cfgÚcfgr]   r?   Úis_localÚis_fallbackÚdetecteds           r(   Ú_get_model_configrf   n   sB  € Ý‰]Œ]€FØ—
’
˜7Ñ#Ô#€IÝ�)�TÑ"Ô"ð Ý�9‰oŒoˆà�wŠw�yÑ!Ô!ð 	* c§g¢g¨gÑ&6Ô&6ð 	*Ø  œ\ˆC�	‰NØ—7’7˜9Ñ%Ô%Ð+¨×2Ò2Ñ4Ô4ˆØ—G’G˜JÑ'Ô'Ð-¨2×4Ò4Ñ6Ô6ˆØ (Ð*ÐE¨k¸XÐ.EˆØ!�kˆØð 	*˜ð 	*¨ð 	*Ý/°Ñ9Ô9ˆHØð *Ø!)��I‘Øˆ
Ý�)�SÑ!Ô!ð . i§o¢oÑ&7Ô&7ð .Ø˜9Ÿ?š?Ñ,Ô,Ð-Ð-Ø€Ir*   ÚproviderÚconfigured_providerc                óø   — | pd                      ¦   «                              ¦   «         }|pd                      ¦   «                              ¦   «         }|sdS |dk    r|dk    p|                     d¦  «        S ||k    S )aT  Check whether a persisted api_mode should be honored for a given provider.

    Prevents stale api_mode from a previous provider leaking into a
    different one after a model/provider switch.  Only applies the
    persisted mode when the config's provider matches the runtime
    provider (or when no configured provider is recorded).
    r.   Tr:   úcustom:)r%   r&   Ú
startswith)rg   rh   Únormalized_providerÚnormalized_configureds       r(   Ú$_provider_supports_explicit_api_modern   „   s�   € ð $˜> r×0Ò0Ñ2Ô2×8Ò8Ñ:Ô:ÐØ0Ð6°B×=Ò=Ñ?Ô?×EÒEÑGÔGÐØ ð ØˆtØ˜hÒ&Ð&Ø$¨Ò0Ð_Ð4I×4TÒ4TÐU^Ñ4_Ô4_Ð_Ø Ð$7Ò7Ð7r*   ra   Úapi_keyc                ó¼  — t          |                      d¦  «        pd¦  «                             ¦   «                              ¦   «         }t	          |                      d¦  «        ¦  «        }|rt          d|¦  «        r|S t          |                      d¦  «        pd¦  «                             ¦   «         }|sdS 	 ddlm}  |||¬	¦  «        S # t          $ r Y dS w xY w)
Nrg   r.   Úapi_modeÚcopilotr]   Úchat_completionsr   )Úcopilot_model_api_mode)ro   )	r    rP   r%   r&   Ú_parse_api_modern   Úhermes_cli.modelsrt   rT   )ra   ro   rh   Úconfigured_modeÚ
model_namert   s         r(   Ú_copilot_runtime_api_modery   •   sü   € Ý˜iŸmšm¨JÑ7Ô7Ð=¸2Ñ>Ô>×DÒDÑFÔF×LÒLÑNÔNÐÝ% i§m¢m°JÑ&?Ô&?Ñ@Ô@€OØð Õ?À	ÐK^Ñ_Ô_ð ØÐå�Y—]’] 9Ñ-Ô-Ð3°Ñ4Ô4×:Ò:Ñ<Ô<€JØð "Ø!Ð!ð"Ø<Ð<Ð<Ð<Ð<Ð<à%Ð% j¸'ÐBÑBÔBÐBøÝð "ð "ð "Ø!Ð!Ð!ð"øøøs   Â:C Ã
CÃC>   rC   Úbedrock_conversers   rD   Úrawr   c                ó’   — t          | t          ¦  «        r1|                      ¦   «                              ¦   «         }|t          v r|S dS )z@Validate an api_mode value from config. Returns None if invalid.N)r^   r    r%   r&   Ú_VALID_API_MODES)r{   rF   s     r(   ru   ru   ª   sD   € å�#•sÑÔð Ø—Y’Y‘[”[×&Ò&Ñ(Ô(ˆ
ØÕ)Ð)Ð)ØÐØˆ4r*   )ra   ÚpoolÚtarget_modelÚentryr	   Úrequested_providerúOptional[Dict[str, Any]]r~   úOptional[CredentialPool]r   c           	     óJ  — |pt          ¦   «         }|p|                     d¦  «        pd}t          |dd ¦  «        pt          |dd ¦  «        pd                     d¦  «        }t          |dd ¦  «        pt          |dd¦  «        }d}	| d	k    rd
}	|pt          }�nT| dk    rd}	|pt
          }�nA| dk    rd}	|pd}�n3| dk    r£d}	t          |                     d¦  «        pd¦  «                             ¦   «                              ¦   «         }
d}|
dk    rIt          |                     d¦  «        pd¦  «                             ¦   «                              d¦  «        }|p|pd}�nŠ| dk    r|pt          }�ny| dk    rd
}	�no| dk    rd}	�ne| dk    r5t          |t          |dd¦  «        ¦  «        }	|pt          d         j        }�n*| dk    rßt          |                     d¦  «        pd¦  «                             ¦   «                              ¦   «         }
|
dk    rst          |                     d¦  «        pd¦  «                             ¦   «                              d¦  «        }|r|}t          |                     d¦  «        ¦  «        }|r|}	|	dk    rt          j        dd|¦  «        }�nEt          |                     d¦  «        pd¦  «                             ¦   «                              ¦   «         }t          j        | ¦  «        }|o0|                     d¦  «        |j                             d¦  «        k    }|| k    rO|rMt          |                     d¦  «        pd¦  «                             ¦   «                              d¦  «        }|r|}t          |                     d¦  «        ¦  «        }|rt!          | |¦  «        r|}	n*| dv rddlm}  || |¦  «        }	nt'          |¦  «        }|r|}	|	dk    r| dv rt          j        dd|¦  «        }| |	||t          |dd¦  «        ||dœS )Nr]   r.   Úruntime_base_urlr?   rB   Úruntime_api_keyÚaccess_tokenrs   úopenai-codexrC   ú
qwen-oauthúgoogle-gemini-clizcloudcode-pa://googleÚ	anthropicrD   rg   úhttps://api.anthropic.comÚ
openrouterÚxaiÚnousrr   úazure-foundryrq   ú/v1/?$©zopencode-zenzopencode-gor   ©Úopencode_model_api_modeÚsourcer~   )rg   rq   r?   ro   r•   Úcredential_poolr�   )rf   rP   Úgetattrr4   r   r   r    r%   r&   r   ry   r   Úinference_base_urlru   ÚreÚsubrn   rv   r”   rH   )rg   r€   r�   ra   r~   r   Úeffective_modelr?   ro   rq   r8   r7   rw   rh   ÚpconfigÚpool_url_is_defaultr”   re   s                     r(   Ú _resolve_runtime_from_pool_entryrž   ³   s�  € ð Ð0Õ.Ñ0Ô0€Ið $ÐE y§}¢}°YÑ'?Ô'?ÐEÀ2€OÝ˜Ð1°4Ñ8Ô8Ðb½GÀEÈ:ÐW[Ñ<\Ô<\ÐbÐ`b×jÒjÐknÑoÔo€HÝ�eÐ.°Ñ5Ô5Ð[½ÀÈÐXZÑ9[Ô9[€GØ!€HØ�>Ò!Ð!Ø$ˆØÐ5Õ5ˆ‰Ø	�\Ò	!Ð	!Ø%ˆØÐ4Õ4ˆ‰Ø	Ð(Ò	(Ð	(Ø%ˆØÐ6Ð6ˆ‰Ø	�[Ò	 Ð	 Ø'ˆÝ˜9Ÿ=š=¨Ñ4Ô4Ð:¸Ñ;Ô;×AÒAÑCÔC×IÒIÑKÔKˆØˆØ˜;Ò&Ð&Ý˜yŸ}š}¨ZÑ8Ô8Ð>¸BÑ?Ô?×EÒEÑGÔG×NÒNÈsÑSÔSˆLØÐJ 8ÐJÐ/Jˆ‰Ø	�\Ò	!Ð	!ØÐ2Õ2ˆ‰Ø	�UÒ	Ð	Ø$ˆ‰Ø	�VÒ	Ð	Ø%ˆ‰Ø	�YÒ	Ð	Ý,¨Y½ÀÐGXÐZ\Ñ8]Ô8]Ñ^Ô^ˆØÐNÕ0°Ô;ÔNˆ‰Ø	�_Ò	$Ð	$å˜9Ÿ=š=¨Ñ4Ô4Ð:¸Ñ;Ô;×AÒAÑCÔC×IÒIÑKÔKˆØ˜?Ò*Ð*Ý˜yŸ}š}¨ZÑ8Ô8Ð>¸BÑ?Ô?×EÒEÑGÔG×NÒNÈsÑSÔSˆLØð (Ø'�Ý-¨i¯mªm¸JÑ.GÔ.GÑHÔHˆOØð +Ø*�àÐ+Ò+Ð+Ý”v˜i¨¨XÑ6Ô6ˆHùå! )§-¢-°
Ñ";Ô";Ð"A¸rÑBÔB×HÒHÑJÔJ×PÒPÑRÔRÐõ
 $Ô'¨Ñ1Ô1ˆØ%Ðh¨(¯/ª/¸#Ñ*>Ô*>À'ÔB\×BcÒBcÐdgÑBhÔBhÒ*hÐØ (Ò*Ð*Ð/BÐ*Ý˜yŸ}š}¨ZÑ8Ô8Ð>¸BÑ?Ô?×EÒEÑGÔG×NÒNÈsÑSÔSˆLØð (Ø'�Ý)¨)¯-ª-¸
Ñ*CÔ*CÑDÔDˆØð 	$ÕCÀHÐNaÑbÔbð 	$Ø&ˆHˆHØÐ8Ð8Ð8ØAÐAÐAÐAÐAÐAØ.Ð.¨x¸ÑIÔIˆHˆHõ
 0°Ñ9Ô9ˆHØð $Ø#�ð Ð'Ò'Ð'¨HÐ8WÐ,WÐ,WÝ”6˜) R¨Ñ2Ô2ˆð ØØØÝ˜% ¨6Ñ2Ô2ØØ0ðð ð r*   Ú	requestedc                óÜ  — | r:|                       ¦   «         r&|                       ¦   «                              ¦   «         S t          ¦   «         }|                     d¦  «        }t	          |t
          ¦  «        r:|                      ¦   «         r&|                      ¦   «                              ¦   «         S t          j        dd¦  «                              ¦   «                              ¦   «         }|r|S dS )z=Resolve provider request from explicit arg, config, then env.rg   ÚHERMES_INFERENCE_PROVIDERr.   Úauto)r%   r&   rf   rP   r^   r    ÚosÚgetenv)rŸ   ra   r8   Úenv_providers       r(   Úresolve_requested_providerr¦     sÕ   € àð )�Y—_’_Ñ&Ô&ð )Ø�ŠÑ Ô ×&Ò&Ñ(Ô(Ð(å!Ñ#Ô#€IØ—=’= Ñ,Ô,€LÝ�,¥Ñ$Ô$ð ,¨×);Ò);Ñ)=Ô)=ð ,Ø×!Ò!Ñ#Ô#×)Ò)Ñ+Ô+Ð+õ ”9Ð8¸"Ñ=Ô=×CÒCÑEÔE×KÒKÑMÔM€LØð ØÐàˆ6r*   Úprovider_labelÚapi_mode_overridec                óL  — t          | ¦  «        }|sdS 	 t          |¦  «        }|                     ¦   «         sdS |                     ¦   «         }|€dS t	          |dd¦  «        pt	          |dd¦  «        }|sdS ||pt          | ¦  «        pd| |d|› �|dœS # t          $ r Y dS w xY w)zXCheck if a credential pool exists for a custom endpoint and return a runtime dict if so.Nr†   r‡   r.   rs   zpool:)rg   rq   r?   ro   r•   r–   )r
   r   Úhas_credentialsÚselectr—   rH   rT   )r?   r§   r¨   Úpool_keyr~   r€   Úpool_api_keys          r(   Ú_try_resolve_from_custom_poolr®   ,  só   € õ ,¨HÑ5Ô5€HØð ØˆtðÝ˜Ñ"Ô"ˆØ×#Ò#Ñ%Ô%ð 	Ø�4Ø—’‘”ˆØˆ=Ø�4Ý˜uÐ&7¸Ñ>Ô>ÐdÅ'È%ÐQ_ÐacÑBdÔBdˆØð 	Ø�4à&Ø)ÐeÕ-EÀhÑ-OÔ-OÐeÐSeØ Ø#Ø(˜hÐ(Ð(Ø#ð
ð 
ð 	
øõ ð ð ð Øˆtˆtðøøøs"   •#B ºB Á$B Á8B Â
B#Â"B#c           	     ó�
  — t          | pd¦  «        }|r|dk    rd S |dk    rd S |                     d¦  «        s'	 t          j        |¦  «         d S # t          $ r Y nw xY wt          ¦   «         }|                     d¦  «        }t          |t          ¦  «        �re| 	                    ¦   «         D �]O\  }}t          |t          ¦  «        sŒt          |¦  «        }t          |                     dd¦  «        pd¦  «                             ¦   «         }|r't          j        |d¦  «                             ¦   «         nd}|s7t          |                     dd¦  «        pd¦  «                             ¦   «         }|||d|› �hv r±|                     d¦  «        p+|                     d	¦  «        p|                     d
¦  «        pd}	|	rn|                     d|¦  «        |	                     ¦   «         ||                     dd¦  «        dœ}
t          |                     d¦  «        ¦  «        }|r||
d<   |
c S |                     dd¦  «        }|r¶t          |¦  «        }|||d|› �hv r�|                     d¦  «        p+|                     d	¦  «        p|                     d
¦  «        pd}	|	rZ||	                     ¦   «         ||                     dd¦  «        dœ}
t          |                     d¦  «        ¦  «        }|r||
d<   |
c S �ŒQ|                     d¦  «        }t          |t          ¦  «        rt                               d¦  «         d S t#          |¦  «        }|sd S |D �]ë}t          |t          ¦  «        sŒ|                     d¦  «        }|                     d
¦  «        }	t          |t          ¦  «        rt          |	t          ¦  «        sŒnt          |¦  «        }d|› �}t          |                     dd¦  «        pd¦  «                             ¦   «         }|rt          |¦  «        nd}|rd|› �nd}|||||hvrŒÞ|                     ¦   «         |	                     ¦   «         t          |                     dd¦  «        pd¦  «                             ¦   «         dœ}
t          |                     dd¦  «        pd¦  «                             ¦   «         }|r||
d<   |r||
d<   t          |                     d¦  «        ¦  «        }|r||
d<   t          |                     dd¦  «        pd¦  «                             ¦   «         }|r||
d<   |
c S d S )Nr.   r:   r¢   rj   Ú	providersÚkey_envro   ÚapirU   r?   ÚnameÚdefault_model)r³   r?   ro   r\   rq   Úcustom_providersz…custom_providers in config.yaml is a dict, not a list. Each entry must be prefixed with '-' in YAML. Run 'hermes doctor' for details.Úprovider_key)r³   r?   ro   r\   )r)   rk   Úauth_modr   r   r   rP   r^   r_   Úitemsr    r%   r£   r¤   ru   ÚloggerÚwarningr   )r�   Úrequested_normr`   r°   Úep_namer€   Ú	name_normr±   Úresolved_api_keyr?   Úresultrq   Údisplay_nameÚdisplay_normrµ   r³   Úmenu_keyr¶   Úprovider_key_normÚprovider_menu_keyrx   s                        r(   Ú_get_named_custom_providerrÅ   K  sÃ  € Ý4Ð5GÐ5MÈ2ÑNÔN€NØð ˜^¨xÒ7Ð7Øˆtð
 ˜ÒÐØˆtØ×$Ò$ YÑ/Ô/ð ð	ÝÔ% nÑ5Ô5Ð5ð �4øõ ð 	ð 	ð 	ØˆDð	øøøõ
 ‰]Œ]€Fð —
’
˜;Ñ'Ô'€IÝ�)�TÑ"Ô"ñ ,&Ø'ŸošoÑ/Ô/ð +	&ñ +	&‰NˆG�UÝ˜e¥TÑ*Ô*ð Øå7¸Ñ@Ô@ˆIå˜%Ÿ)š) I¨rÑ2Ô2Ð8°bÑ9Ô9×?Ò?ÑAÔAˆGØAHÐP�rœy¨°"Ñ5Ô5×;Ò;Ñ=Ô=Ð=ÈbÐà#ð OÝ#& u§y¢y°¸BÑ'?Ô'?Ð'EÀ2Ñ#FÔ#F×#LÒ#LÑ#NÔ#NÐ à '¨9Ð6KÀ	Ð6KÐ6KÐ!LÐLÐLà Ÿ9š9 UÑ+Ô+Ð^¨u¯yªy¸Ñ/?Ô/?Ð^À5Ç9Â9ÈZÑCXÔCXÐ^Ð\^�Øð 
"à %§	¢	¨&°'Ñ :Ô :Ø$,§N¢NÑ$4Ô$4Ø#3Ø!&§¢¨?¸BÑ!?Ô!?ð	ð �Fõ  /¨u¯yªy¸Ñ/DÔ/DÑEÔE�HØð 6Ø-5˜˜zÑ*Ø!�M�M�Mà Ÿ9š9 V¨RÑ0Ô0ˆLØð &Ý>¸|ÑLÔL�Ø! l°LÐBZÈLÐBZÐBZÐ%[Ð[Ð[à$Ÿyšy¨Ñ/Ô/Ðb°5·9²9¸UÑ3CÔ3CÐbÀuÇyÂyÐQ[ÑG\ÔG\ÐbÐ`b�HØð 
&à$0Ø(0¯ªÑ(8Ô(8Ø'7Ø%*§Y¢Y¨ÀÑ%CÔ%Cð	"ð "˜õ $3°5·9²9¸ZÑ3HÔ3HÑ#IÔ#I˜Ø#ð :Ø19˜F :Ñ.Ø%˜˜˜ùð —z’zÐ"4Ñ5Ô5ÐÝÐ"¥DÑ)Ô)ð Ý�Šð/ñ	
ô 	
ð 	
ð
 ˆtå6°vÑ>Ô>ÐØð Øˆtà!ð ñ ˆÝ˜%¥Ñ&Ô&ð 	ØØ�yŠy˜Ñ Ô ˆØ—9’9˜ZÑ(Ô(ˆÝ˜$¥Ñ$Ô$ð 	­J°xÅÑ,EÔ,Eð 	ØÝ3°DÑ9Ô9ˆ	Ø(˜YÐ(Ð(ˆÝ˜5Ÿ9š9 ^°RÑ8Ô8Ð>¸BÑ?Ô?×EÒEÑGÔGˆØMYÐaÕ;¸LÑIÔIÐIÐ_aÐØ=NÐVÐ9Ð&7Ð9Ð9Ð9ÐTVÐØ )¨XÐ7HÐJ[Ð!\Ð\Ð\Øà—J’J‘L”LØ ŸšÑ(Ô(Ý˜5Ÿ9š9 Y°Ñ3Ô3Ð9°rÑ:Ô:×@Ò@ÑBÔBð
ð 
ˆõ
 �e—i’i 	¨2Ñ.Ô.Ð4°"Ñ5Ô5×;Ò;Ñ=Ô=ˆØð 	(Ø 'ˆF�9ÑØð 	2Ø%1ˆF�>Ñ"Ý" 5§9¢9¨ZÑ#8Ô#8Ñ9Ô9ˆØð 	*Ø!)ˆF�:ÑÝ˜Ÿš 7¨BÑ/Ô/Ð5°2Ñ6Ô6×<Ò<Ñ>Ô>ˆ
Øð 	)Ø(ˆF�7‰OØˆˆˆàˆ4s   ºA Á
AÁA©Úexplicit_api_keyÚexplicit_base_urlrÇ   rÈ   c           
     ó   — t          | ¦  «        }|sd S |pd                     ¦   «         p|                     dd¦  «                             d¦  «        }|sd S t	          |d|                     d¦  «        ¦  «        }|r|                     d¦  «        }|r||d<   |S |pd                     ¦   «         t          |                     dd¦  «        pd¦  «                             ¦   «         t          j        t          |                     dd¦  «        pd¦  «                             ¦   «         d¦  «                             ¦   «         t          j        d	d¦  «                             ¦   «         t          j        d
d¦  «                             ¦   «         g}t          d„ |D ¦   «         d¦  «        }d|                     d¦  «        pt          |¦  «        pd||pdd|                     d| ¦  «        › �dœ}	|                     d¦  «        r|d         |	d<   |	S )Nr.   r?   rB   r:   rq   r\   ro   r±   ÚOPENAI_API_KEYÚOPENROUTER_API_KEYc              3  ó8   K  — | ]}t          |¦  «        ¯|V — Œd S ©N)r   ©Ú.0Ú	candidates     r(   ú	<genexpr>z0_resolve_named_custom_runtime.<locals>.<genexpr>â  s1   è è € ÐbÐb )ÕEVÐW`ÑEaÔEaÐb�IÐbÐbÐbÐbÐbÐbr*   rs   úno-key-requiredzcustom_provider:r³   ©rg   rq   r?   ro   r•   )
rÅ   r%   rP   r4   r®   r    r£   r¤   ÚnextrH   )
r�   rÇ   rÈ   Úcustom_providerr?   Úpool_resultrx   Úapi_key_candidatesro   r¿   s
             r(   Ú_resolve_named_custom_runtimerØ   À  s8  € õ 1Ð1CÑDÔD€OØð Øˆtð 
Ð	 ˜b×'Ò'Ñ)Ô)ð 	/Ø×Ò˜z¨2Ñ.Ô.ß‚fˆS�k„kð ð ð Øˆtõ 0°¸(ÀO×DWÒDWÐXbÑDcÔDcÑdÔd€KØð ð %×(Ò(¨Ñ1Ô1ˆ
Øð 	.Ø#-ˆK˜Ñ ØÐð 
Ð	˜R×&Ò&Ñ(Ô(ÝˆO×Ò 	¨2Ñ.Ô.Ð4°"Ñ5Ô5×;Ò;Ñ=Ô=Ý
Œ	•#�o×)Ò)¨)°RÑ8Ô8Ð>¸BÑ?Ô?×EÒEÑGÔGÈÑLÔL×RÒRÑTÔTÝ
Œ	Ð" BÑ'Ô'×-Ò-Ñ/Ô/Ý
Œ	Ð&¨Ñ+Ô+×1Ò1Ñ3Ô3ðÐõ ÐbÐbÐ/AÐbÑbÔbÐdfÑgÔg€Gð Ø#×'Ò'¨
Ñ3Ô3ð Ý# HÑ-Ô-ðàØØÐ/Ð/ØV _×%8Ò%8¸ÐASÑ%TÔ%TÐVÐVðð €Fð ×Ò˜7Ñ#Ô#ð 3Ø)¨'Ô2ˆˆw‰Ø€Mr*   c           	     ó   — t          ¦   «         }t          |                     d¦  «        t          ¦  «        r|                     d¦  «        nd}t          |                     d¦  «        t          ¦  «        r|                     d¦  «        nd}d}dD ]V}|                     |¦  «        }t          |t          ¦  «        r*|                     ¦   «         r|                     ¦   «         } nŒW| pd                     ¦   «                              ¦   «         }	|                     ¦   «                              ¦   «         }t          j        dd¦  «                             ¦   «         }
t          j        dd¦  «                             ¦   «         }d}|                     ¦   «         r+|s)|	dk    r|r|dk    rd	}n|	d
k    rt          ||¦  «        rd	}|pd                     ¦   «         p"|p |r|                     ¦   «         ndp|
pt           
                    d¦  «        }t          |d¦  «        }|r*|t          j        d¦  «        t          j        d¦  «        g}nUt          |d¦  «        }||r|nd|rt          j        d¦  «        ndt          j        d¦  «        t          j        d¦  «        g}t          d„ |D ¦   «         d¦  «        }|s|rdnd}|	d
k    rd
nd}|d
k    r7|r5t          ||t          |                     d¦  «        ¦  «        ¦  «        }|r|S |d
k    r|s|sd}|t          |                     d¦  «        ¦  «        pt          |¦  «        pd|||dœS )Nr?   r.   rg   )ro   r²   r   ÚCUSTOM_BASE_URLFr¢   Tr:   rB   r;   rË   rÊ   z
ollama.comÚOLLAMA_API_KEYc              3  óz   K  — | ]6}t          |¦  «        ¯t          |pd ¦  «                             ¦   «         V — Œ7dS )r.   N)r   r    r%   rÎ   s     r(   rÑ   z._resolve_openrouter_runtime.<locals>.<genexpr>;  sI   è è € ÐjÐj¨)ÕM^Ð_hÑMiÔMiÐj�ˆYˆ_˜"Ñ	Ô	×	#Ò	#Ñ	%Ô	%ÐjÐjÐjÐjÐjÐjr*   Úexplicitz
env/configr�   rq   rÒ   rs   rÓ   )rf   r^   rP   r    r%   r&   r£   r¤   r>   r   r4   r   rÔ   r®   ru   rH   )r�   rÇ   rÈ   ra   r7   r8   Úcfg_api_keyÚkÚvr»   Úenv_openrouter_base_urlÚenv_custom_base_urlÚuse_config_base_urlr?   Ú_is_openrouter_urlr×   Ú_is_ollama_urlro   r•   Úeffective_providerrÖ   s                        r(   Ú_resolve_openrouter_runtimerç   ô  sÁ  € õ "Ñ#Ô#€IÝ0:¸9¿=º=ÈÑ;TÔ;TÕVYÑ0ZÔ0ZÐb�9—=’= Ñ,Ô,Ð,Ð`b€LÝ0:¸9¿=º=ÈÑ;TÔ;TÕVYÑ0ZÔ0ZÐb�9—=’= Ñ,Ô,Ð,Ð`b€LØ€KØð ð ˆØ�MŠM˜!ÑÔˆÝ�a�ÑÔð 	 !§'¢'¡)¤)ð 	ØŸ'š'™)œ)ˆKØˆEøØ(Ð.¨B×5Ò5Ñ7Ô7×=Ò=Ñ?Ô?€NØ×%Ò%Ñ'Ô'×-Ò-Ñ/Ô/€Lå œiÐ(=¸rÑBÔB×HÒHÑJÔJÐÝœ)Ð$5°rÑ:Ô:×@Ò@ÑBÔBÐð
  ÐØ×ÒÑÔð 'Ð$5ð 'Ø˜VÒ#Ð#Øð + <°6Ò#9Ð#9Ø&*Ð#øØ˜xÒ'Ð'Õ,XØ˜,ñ-
ô -
Ð'ð #'Ðð 
Ð	 ˜b×'Ò'Ñ)Ô)ð 	Øð	à$7Ð?ˆL×ÒÑ Ô Ð ¸Rð	ð #ð	õ ß‚fˆS�k„kð õ /¨x¸ÑIÔIÐØð 
àÝŒIÐ*Ñ+Ô+ÝŒIÐ&Ñ'Ô'ð
ÐÐõ /¨x¸ÑFÔFˆàØ/Ð7ˆ[ˆ[°RØ,:ÐB�RŒYÐ'Ñ(Ô(Ð(ÀÝŒIÐ&Ñ'Ô'ÝŒIÐ*Ñ+Ô+ð
Ðõ ØjÐjÐ7IÐjÑjÔjØ
ñô €Gð
 -ÐTÐ0AÐTˆZˆZÈ€Fð &4°xÒ%?Ð%?˜˜À\Ðð ˜XÒ%Ð%¨(Ð%Ý3ØÐ(­/¸)¿-º-È
Ñ:SÔ:SÑ*TÔ*Tñ
ô 
ˆð ð 	ØÐà˜XÒ%Ð%¨gÐ%Ð>PÐ%Ø#ˆð 'Ý# I§M¢M°*Ñ$=Ô$=Ñ>Ô>ð Ý# HÑ-Ô-ðàØØØðð ð r*   c                óø  — t          |pd¦  «                             ¦   «         }t          |pd¦  «                             ¦   «                              d¦  «        }t          |                     d¦  «        pd¦  «                             ¦   «                              ¦   «         }d}d}|dk    rmt          |                     d¦  «        pd¦  «                             ¦   «                              d¦  «        }t          |                     d¦  «        ¦  «        pd}t          j        dd¦  «                             ¦   «                              d¦  «        }|p|p|}	|	st          d	¦  «        ‚|}
|
s'	 d
dl	m
}  |d¦  «        pd}
n# t          $ r d}
Y nw xY w|
s't          j        dd¦  «                             ¦   «         }
|
st          d¦  «        ‚|dk    rt          j        dd|	¦  «        }	|s|rdnd}d||	|
|| dœS )a|  Resolve an Azure Foundry runtime entry.

    Reads ``model.base_url`` + ``model.api_mode`` from config.yaml (or
    explicit overrides), pulls the API key from ``.env`` / env var, and
    strips a trailing ``/v1`` for Anthropic-style endpoints because the
    Anthropic SDK appends ``/v1/messages`` internally.

    Raises :class:`AuthError` when required values are missing.
    r.   rB   rg   rs   r�   r?   rq   ÚAZURE_FOUNDRY_BASE_URLzpAzure Foundry requires a base URL. Set it via 'hermes model' or the AZURE_FOUNDRY_BASE_URL environment variable.r   )Úget_env_valueÚAZURE_FOUNDRY_API_KEYzrAzure Foundry requires an API key. Set AZURE_FOUNDRY_API_KEY in ~/.hermes/.env or run 'hermes model' to configure.rD   r‘   rÝ   r`   ©rg   rq   r?   ro   r•   r�   )r    r%   r4   rP   r&   ru   r£   r¤   r   Úhermes_cli.configrê   rT   r™   rš   )r�   ra   rÇ   rÈ   Úexplicit_base_url_cleanr8   r7   Úcfg_api_modeÚenv_base_urlr?   ro   rê   r•   s                r(   Ú_resolve_azure_foundry_runtimerñ   ]  sL  € õ  Ð+Ð1¨rÑ2Ô2×8Ò8Ñ:Ô:ÐÝ!Ð"3Ð"9°rÑ:Ô:×@Ò@ÑBÔB×IÒIÈ#ÑNÔNÐå�y—}’} ZÑ0Ô0Ð6°BÑ7Ô7×=Ò=Ñ?Ô?×EÒEÑGÔG€LØ€LØ%€LØ�Ò&Ð&Ý˜9Ÿ=š=¨Ñ4Ô4Ð:¸Ñ;Ô;×AÒAÑCÔC×JÒJÈ3ÑOÔOˆÝ& y§}¢}°ZÑ'@Ô'@ÑAÔAÐWÐEWˆå”9Ð5°rÑ:Ô:×@Ò@ÑBÔB×IÒIÈ#ÑNÔN€LØ&ÐF¨,ÐF¸,€HØð 
Ýð?ñ
ô 
ð 	
ð
 €GØð ð	Ø7Ð7Ð7Ð7Ð7Ð7Ø#�mÐ$;Ñ<Ô<ÐBÀˆGˆGøÝð 	ð 	ð 	ØˆGˆGˆGð	øøøàð AÝ”)Ð3°RÑ8Ô8×>Ò>Ñ@Ô@ˆØð 
ÝðAñ
ô 
ð 	
ð Ð+Ò+Ð+Ý”6˜) R¨Ñ2Ô2ˆà,ÐPÐ0AÐPˆZˆZÈ€Fà#Ø ØØØØ0ðð ð s   Å/F ÆFÆFc                óÖ	  — t          |pd¦  «                             ¦   «         }t          |pd¦  «                             ¦   «                              d¦  «        }|s|sd S | dk    rÍt          |                     d¦  «        pd¦  «                             ¦   «                              ¦   «         }d}|dk    rIt          |                     d¦  «        pd¦  «                             ¦   «                              d¦  «        }|p|pd}|}|s!ddlm}	  |	¦   «         }|st          d	¦  «        ‚dd
||d|dœS | dk    r|pt          }|}d }
|sft          ¦   «         }|                     dd¦  «        }|                     d¦  «        }
|s+|                     dd¦  «                             d¦  «        p|}dd||d|
|dœS | dk    �r�t          j        d¦  «        pi }|pRt          |                     d¦  «        pt          j        ¦  «                             ¦   «                              d¦  «        }|p5t          |                     d¦  «        pd¦  «                             ¦   «         }|                     d¦  «        p|                     d¦  «        }|s·t          t          dt          t!          j        dd¦  «        ¦  «        ¦  «        t%          t!          j        dd¦  «        ¦  «        ¬¦  «        }|                     dd¦  «        }|                     d¦  «        }|s+|                     dd¦  «                             d¦  «        p|}dd||d||dœS | dk    rt'          ||||¬ ¦  «        S t)          j        | ¦  «        }|�rj|j        dk    �r^d}|j        r?t!          j        |j        d¦  «                             ¦   «                              d¦  «        }|}|sF| d!v r9t/          | ¦  «        }|                     dd¦  «                             d¦  «        }n	|p|j        }|}|sPt/          | ¦  «        }|                     dd¦  «        }|s)|                     dd¦  «                             d¦  «        }d}| d"k    rt3          ||¦  «        }nC| d#k    rd}n:t5          |                     d$¦  «        ¦  «        }|r|}nt7          |¦  «        }|r|}| ||                     d¦  «        |d|dœS d S )%Nr.   rB   r‹   rg   r?   rŒ   r   ©Úresolve_anthropic_tokenú‰No Anthropic credentials found. Set ANTHROPIC_TOKEN or ANTHROPIC_API_KEY, run 'claude setup-token', or authenticate with 'claude /login'.rD   rÝ   rì   rˆ   ro   Úlast_refreshrC   ©rg   rq   r?   ro   r•   rö   r�   r�   r˜   Ú	agent_keyÚagent_key_expires_atÚ
expires_até<   ÚHERMES_NOUS_MIN_KEY_TTL_SECONDSÚ1800ÚHERMES_NOUS_TIMEOUT_SECONDSÚ15©Úmin_key_ttl_secondsÚtimeout_secondsrs   ©rg   rq   r?   ro   r•   rú   r�   r�   ©r�   ra   rÇ   rÈ   )zkimi-codingzkimi-coding-cnrr   rŽ   rq   )r    r%   r4   rP   r&   Úagent.anthropic_adapterrô   r   r   r   r·   Úget_provider_auth_stateÚDEFAULT_NOUS_INFERENCE_URLr   ÚmaxÚintr£   r¤   Úfloatrñ   r   Ú	auth_typeÚbase_url_env_varr   r˜   ry   ru   rH   )rg   r�   ra   rÇ   rÈ   r8   r7   r?   ro   rô   rö   ÚcredsÚstaterú   rœ   Úenv_urlrq   rw   re   s                      r(   Ú_resolve_explicit_runtimer  ž  sŸ  € õ Ð+Ð1¨rÑ2Ô2×8Ò8Ñ:Ô:ÐÝÐ-Ð3°Ñ4Ô4×:Ò:Ñ<Ô<×CÒCÀCÑHÔHÐØð Ð$5ð Øˆtà�;ÒÐÝ˜9Ÿ=š=¨Ñ4Ô4Ð:¸Ñ;Ô;×AÒAÑCÔC×IÒIÑKÔKˆØˆØ˜;Ò&Ð&Ý˜yŸ}š}¨ZÑ8Ô8Ð>¸BÑ?Ô?×EÒEÑGÔG×NÒNÈsÑSÔSˆLØ$ÐS¨ÐSÐ8SˆØ"ˆØð 	ØGÐGÐGÐGÐGÐGà-Ð-Ñ/Ô/ˆGØð ÝðVñô ð ð
 $Ø,Ø ØØ Ø"4ð
ð 
ð 	
ð �>Ò!Ð!Ø$Ð>Õ(>ˆØ"ˆØˆØð 	MÝ5Ñ7Ô7ˆEØ—i’i 	¨2Ñ.Ô.ˆGØ Ÿ9š9 ^Ñ4Ô4ˆLØ$ð MØ Ÿ9š9 Z°Ñ4Ô4×;Ò;¸CÑ@Ô@ÐLÀH�à&Ø)Ø ØØ Ø(Ø"4ð
ð 
ð 	
ð �6ÒÑÝÔ0°Ñ8Ô8Ð>¸Bˆàð oÝ�5—9’9Ð1Ñ2Ô2ÐYµhÔ6YÑZÔZ×`Ò`ÑbÔb×iÒiÐjmÑnÔnð 	ð #ÐO¥c¨%¯)ª)°KÑ*@Ô*@Ð*FÀBÑ&GÔ&G×&MÒ&MÑ&OÔ&OˆØ—Y’YÐ5Ñ6Ô6ÐQ¸%¿)º)ÀLÑ:QÔ:Qˆ
Øð 	MÝ4Ý$'¨­Cµ´	Ð:[Ð]cÑ0dÔ0dÑ,eÔ,eÑ$fÔ$fÝ %¥b¤iÐ0MÈtÑ&TÔ&TÑ UÔ Uðñ ô ˆEð —i’i 	¨2Ñ.Ô.ˆGØŸš <Ñ0Ô0ˆJØ$ð MØ Ÿ9š9 Z°Ñ4Ô4×;Ò;¸CÑ@Ô@ÐLÀH�àØ*Ø ØØ Ø$Ø"4ð
ð 
ð 	
ð �?Ò"Ð"Ý-Ø1ØØ-Ø/ð	
ñ 
ô 
ð 	
õ  Ô# HÑ-Ô-€GØñ +
�7Ô$¨	Ò1Ñ1ØˆØÔ#ð 	RÝ”i Ô 8¸"Ñ=Ô=×CÒCÑEÔE×LÒLÈSÑQÔQˆGà$ˆØð 	AØÐ<Ð<Ð<Ý<¸XÑFÔF�Ø Ÿ9š9 Z°Ñ4Ô4×;Ò;¸CÑ@Ô@��à"Ð@ gÔ&@�à"ˆØð 	AÝ8¸ÑBÔBˆEØ—i’i 	¨2Ñ.Ô.ˆGØð AØ Ÿ9š9 Z°Ñ4Ô4×;Ò;¸CÑ@Ô@�à%ˆØ�yÒ Ð Ý0°¸GÑDÔDˆHˆHØ˜ÒÐØ(ˆHˆHå-¨i¯mªm¸JÑ.GÔ.GÑHÔHˆOØð (Ø*��õ 4°HÑ=Ô=�Øð (Ø'�Hð !Ø Ø Ÿš¨Ñ,Ô,ØØ Ø"4ð
ð 
ð 	
ð ˆ4r*   )rŸ   rÇ   rÈ   r   c                ó¤  — t          | ¦  «        }|pd                     ¦   «         }|dk    r„d|v r€|pd                     ¦   «         pMt          j        dd¦  «                             ¦   «         p&t          j        dd¦  «                             ¦   «         }dd|                     d¦  «        |d|d	œS |d
k    r!t          |t          ¦   «         ||¬¦  «        }|S t          |||¬¦  «        }|r||d<   |S t          |||¬¦  «        }	t          ¦   «         }
t          |	||
||¬¦  «        }|r|S |	dk    }|	dk    �rt          |
                     d¦  «        pd¦  «                             ¦   «                              ¦   «         }t          |
                     d¦  «        pd¦  «                             ¦   «         }t          j        dd¦  «                             ¦   «         }t          j        dd¦  «                             ¦   «         }t          |p|p|¦  «        }|r|dv rd}t          |p|¦  «        }|dv o| o| }	 |rt          |	¦  «        nd}n# t          $ r d}Y nw xY w|rð|                     ¦   «         rÜ|                     ¦   «         }d}|�"t%          |dd¦  «        pt%          |dd¦  «        }|	dk    rƒ|��|rt'          dt)          t          j        dd¦  «        ¦  «        ¦  «        }t%          |dd¦  «        t%          |d d¦  «        d!œ}t+          ||¦  «        st,                               d"¦  «         d}|�|rt1          |	|||
||¬#¦  «        S |	dk    rý	 t3          t'          dt)          t          j        dd¦  «        ¦  «        ¦  «        t5          t          j        d$d%¦  «        ¦  «        ¬&¦  «        }dd'|                     dd¦  «                             d¦  «        |                     d(d¦  «        |                     d)d*¦  «        |                     d+¦  «        |d,œS # t6          $ r$ |d-k    r‚ t,                               d.¦  «         Y nw xY w|	d/k    r¬	 t;          ¦   «         }d/d0|                     dd¦  «                             d¦  «        |                     d(d¦  «        |                     d)d1¦  «        |                     d2¦  «        |d3œS # t6          $ r$ |d-k    r‚ t,                               d4¦  «         Y nw xY w|	d5k    r¬	 t=          ¦   «         }d5d'|                     dd¦  «                             d¦  «        |                     d(d¦  «        |                     d)d6¦  «        |                     d7¦  «        |d8œS # t6          $ r$ |d-k    r‚ t,                               d9¦  «         Y nw xY w|	d:k    rÃ	 t?          ¦   «         }d:d'|                     dd¦  «        |                     d(d¦  «        |                     d)d;¦  «        |                     d7¦  «        |                     d<d¦  «        |                     d=d¦  «        |d>œ	S # t6          $ r$ |d-k    r‚ t,                               d?¦  «         Y nw xY w|	d@k    rŸtA          |	¦  «        }d@d'|                     dd¦  «                             d¦  «        |                     d(d¦  «        |                     dAd¦  «        tC          |                     dB¦  «        pg ¦  «        |                     d)dC¦  «        |dDœS |	dk    �rJt          |
                     d¦  «        pd¦  «                             ¦   «                              ¦   «         }d}|dk    r<|
                     d¦  «        pd                     ¦   «                              d¦  «        }|pdE}d|                     ¦   «         v p|od|                     ¦   «         v }|r`t          j        dd¦  «                             ¦   «         p&t          j        dd¦  «                             ¦   «         }|st7          dF¦  «        ‚n!dGdHl"m#}  |¦   «         }|st7          dI¦  «        ‚dd||dJ|d	œS |	dKk    �r‰dGdLl$m%}m&}m'}m(}  |dMv }!|!s |¦   «         st7          dNdO¬P¦  «        ‚tS          ¦   «                              dKi ¦  «        }"|"                     dQ¦  «        pd                     ¦   «         p	 |¦   «         }# |¦   «         pdR}$|"                     dSi ¦  «        }%d}&|%                     dT¦  «        rf|%                     dU¦  «        rQ|%dT         |%dU         dVœ}&|%                     dW¦  «        r|%dW         |&dX<   |%                     dY¦  «        r|%dY         |&dY<   t          |
                     dZ¦  «        pd¦  «                             ¦   «         }' | |'¦  «        rdKdd[|#› d\�d]|$|#d|d^œ}(ndKd_d[|#› d\�d]|$|#|d`œ}(|&r|&|(da<   |(S tU          j        |	¦  «        })|)�r|)j+        d(k    �rtY          |	¦  «        }t          |
                     d¦  «        pd¦  «                             ¦   «                              ¦   «         }d}||	k    r<|
                     d¦  «        pd                     ¦   «                              d¦  «        }|p(|                     dd¦  «                             d¦  «        }d'}*|	dbk    r%t[          |
|                     d(d¦  «        ¦  «        }*nÊ|	dck    rd0}*nÁt          |
                     d¦  «        pd¦  «                             ¦   «                              ¦   «         }+t]          |
                     dd¦  «        ¦  «        },|,rt_          |	|+¦  «        r|,}*nB|	dev r+dGdfl0m1}- |p|
                     dZd¦  «        }. |-|	|.¦  «        }*nte          |¦  «        }/|/r|/}*|*dk    r|	dev rtg          j4        dgd|¦  «        }|	|*||                     d(d¦  «        |                     d)dJ¦  «        |d	œS tk          |||¬¦  «        }(||(d<   |(S )ha)  Resolve runtime provider credentials for agent execution.

    target_model: Optional override for model_cfg.get("default") when
    computing provider-specific api_mode (e.g. OpenCode Zen/Go where different
    models route through different API surfaces). Callers performing an
    explicit mid-session model switch should pass the new model here so
    api_mode is derived from the model they are switching TO, not the stale
    persisted default. Other callers can leave it None to preserve existing
    behavior (api_mode derived from config).
    r.   r‹   z	azure.comÚAZURE_ANTHROPIC_KEYÚANTHROPIC_API_KEYrD   rB   zazure-explicitrì   r�   r  )r�   rÇ   rÈ   r�   rÆ   )rg   r�   ra   rÇ   rÈ   r�   rg   r?   ÚOPENAI_BASE_URLr   >   r¢   r:   T>   r¢   r�   Nr†   r‡   r�   rû   rü   rý   rø   rù   )rø   rù   zPNous pool entry agent_key expired/missing, falling through to runtime resolution)rg   r€   r�   ra   r~   r   rþ   rÿ   r   rs   ro   r•   Úportalrú   r  r¢   zUAuto-detected Nous provider but credentials failed; falling through to next provider.rˆ   rC   zhermes-auth-storerö   r÷   zVAuto-detected Codex provider but credentials failed; falling through to next provider.r‰   zqwen-cliÚexpires_at_ms)rg   rq   r?   ro   r•   r  r�   z@Qwen OAuth credentials failed; falling through to next provider.rŠ   zgoogle-oauthÚemailÚ
project_id)	rg   rq   r?   ro   r•   r  r  r  r�   zIGoogle Gemini OAuth credentials failed; falling through to next provider.zcopilot-acpÚcommandÚargsÚprocess)rg   rq   r?   ro   r  r  r•   r�   rŒ   zONo Azure Anthropic API key found. Set AZURE_ANTHROPIC_KEY or ANTHROPIC_API_KEY.r   ró   rõ   ÚenvÚbedrock)Úhas_aws_credentialsÚresolve_aws_auth_env_varÚresolve_bedrock_regionÚis_anthropic_bedrock_model)r  Úawszaws-bedrockzamazon-bedrockÚamazonzçNo AWS credentials found for Bedrock. Configure one of:
  - AWS_ACCESS_KEY_ID + AWS_SECRET_ACCESS_KEY
  - AWS_PROFILE (for SSO / named profiles)
  - IAM instance role (EC2, ECS, Lambda)
Or run 'aws configure' to set up credentials.Úno_aws_credentials)ÚcodeÚregionzaws-sdk-default-chainÚ	guardrailÚguardrail_identifierÚguardrail_version)ÚguardrailIdentifierÚguardrailVersionÚstream_processing_modeÚstreamProcessingModeÚtracer]   zhttps://bedrock-runtime.z.amazonaws.comzaws-sdk)rg   rq   r?   ro   r•   r&  Úbedrock_anthropicr�   rz   )rg   rq   r?   ro   r•   r&  r�   Úguardrail_configrr   rŽ   rq   r’   r“   r‘   )6r¦   r%   r£   r¤   r4   rñ   rf   rØ   r   r  r    rP   r&   r,   r   rT   rª   r«   r—   r  r	  r   r¹   Údebugrž   r   r
  r   Úinfor   r   r   r   Úlistr  rô   Úagent.bedrock_adapterr  r  r   r!  r   r   r  r   ry   ru   rn   rv   r”   rH   r™   rš   rç   )0rŸ   rÇ   rÈ   r   r�   Ú	_eff_baseÚ
_azure_keyÚazure_runtimeÚcustom_runtimerg   ra   Úexplicit_runtimeÚshould_use_poolr8   r7   Úenv_openai_base_urlrá   Úhas_custom_endpointÚhas_runtime_overrider~   r€   r­   Úmin_ttlÚ
nous_stater  r?   Ú_is_azure_endpointÚtokenrô   r  r  r   r!  Úis_explicitÚ_bedrock_cfgr&  Úauth_sourceÚ_grr0  Ú_current_modelÚruntimerœ   rq   rh   rw   r”   Ú
_effectivere   s0                                                   r(   Úresolve_runtime_providerrI  1  sþ  € õ" 4°IÑ>Ô>Ðð #Ð( b×/Ò/Ñ1Ô1€IØ˜[Ò(Ð(¨[¸IÐ-EÐ-EàÐ# ×*Ò*Ñ,Ô,ð :ÝŒyÐ.°Ñ3Ô3×9Ò9Ñ;Ô;ð:åŒyÐ,¨bÑ1Ô1×7Ò7Ñ9Ô9ð 	ð $Ø,Ø!×(Ò(¨Ñ-Ô-Ø!Ø&Ø"4ð
ð 
ð 	
ð ˜_Ò,Ð,Ý6Ø1Ý'Ñ)Ô)Ø-Ø/ð	
ñ 
ô 
ˆð Ðå2Ø-Ø)Ø+ðñ ô €Nð
 ð Ø/AˆÐ+Ñ,ØÐåØØ)Ø+ðñ ô €Hõ
 "Ñ#Ô#€IÝ0ØØ-ØØ)Ø+ðñ ô Ðð ð  ØÐà ,Ò.€OØ�<ÒÑÝ˜9Ÿ=š=¨Ñ4Ô4Ð:¸Ñ;Ô;×AÒAÑCÔC×IÒIÑKÔKˆÝ˜9Ÿ=š=¨Ñ4Ô4Ð:¸Ñ;Ô;×AÒAÑCÔCˆÝ œiÐ(9¸2Ñ>Ô>×DÒDÑFÔFÐÝ"$¤)Ð,AÀ2Ñ"FÔ"F×"LÒ"LÑ"NÔ"NÐÝ"Øð 'Ø"ð'à&ñ
ô 
Ðð
 ð 	'˜LÐ,>Ð>Ð>Ø"&ÐÝ#Ð$4Ð$IÐ8IÑJÔJÐàÐ"8Ð8ð )Ø'Ð'ð)à(Ð(ð 	ðØ&5Ð?�y˜Ñ"Ô"Ð"¸4ˆˆøÝð ð ð Øˆˆˆðøøøàð �×$Ò$Ñ&Ô&ð Ø—’‘”ˆØˆØÐå˜Ð0°$Ñ7Ô7ð 6Ý˜5 .°"Ñ5Ô5ð ð �vÒÐ %Ð"3¸Ð"3Ý˜"�c¥"¤)Ð,MÈvÑ"VÔ"VÑWÔWÑXÔXˆGå$ U¨K¸Ñ>Ô>Ý(/°Ð7MÈtÑ(TÔ(Tðð ˆJõ (¨
°GÑ<Ô<ð "Ý—’ÐoÑpÔpÐpØ!�ØÐ ÐÝ3Ø!ØØ#5Ø#ØØ)ðñ ô ð ð �6ÒÐð	=Ý4Ý$'¨­Cµ´	Ð:[Ð]cÑ0dÔ0dÑ,eÔ,eÑ$fÔ$fÝ %¥b¤iÐ0MÈtÑ&TÔ&TÑ UÔ Uðñ ô ˆEð
 #Ø.Ø!ŸIšI j°"Ñ5Ô5×<Ò<¸SÑAÔAØ Ÿ9š9 Y°Ñ3Ô3ØŸ)š) H¨hÑ7Ô7Ø#Ÿiši¨Ñ5Ô5Ø&8ðð ð øõ ð 	=ð 	=ð 	=Ø! VÒ+Ð+Øõ �KŠKð <ñ =ô =ð =ð =ð =ð	=øøøð �>Ò!Ð!ð	=Ý5Ñ7Ô7ˆEà*Ø-Ø!ŸIšI j°"Ñ5Ô5×<Ò<¸SÑAÔAØ Ÿ9š9 Y°Ñ3Ô3ØŸ)š) HÐ.AÑBÔBØ %§	¢	¨.Ñ 9Ô 9Ø&8ðð ð øõ ð 	=ð 	=ð 	=Ø! VÒ+Ð+Øõ �KŠKð <ñ =ô =ð =ð =ð =ð	=øøøð �<ÒÐð	=Ý4Ñ6Ô6ˆEà(Ø.Ø!ŸIšI j°"Ñ5Ô5×<Ò<¸SÑAÔAØ Ÿ9š9 Y°Ñ3Ô3ØŸ)š) H¨jÑ9Ô9Ø!&§¢¨?Ñ!;Ô!;Ø&8ðð ð øõ ð 	=ð 	=ð 	=Ø! VÒ+Ð+ØÝ�KŠKð <ñ =ô =ð =ð =ð =ð	=øøøð Ð&Ò&Ð&ð	=Ý<Ñ>Ô>ˆEà/Ø.Ø!ŸIšI j°"Ñ5Ô5Ø Ÿ9š9 Y°Ñ3Ô3ØŸ)š) H¨nÑ=Ô=Ø!&§¢¨?Ñ!;Ô!;ØŸš 7¨BÑ/Ô/Ø#Ÿiši¨°bÑ9Ô9Ø&8ð
ð 
ð 
øõ ð 	=ð 	=ð 	=Ø! VÒ+Ð+ØÝ�KŠKð <ñ =ô =ð =ð =ð =ð	=øøøð �=Ò Ð Ý=¸hÑGÔGˆà%Ø*ØŸ	š	 *¨bÑ1Ô1×8Ò8¸Ñ=Ô=Ø—y’y ¨BÑ/Ô/Ø—y’y ¨BÑ/Ô/Ý˜Ÿš 6Ñ*Ô*Ð0¨bÑ1Ô1Ø—i’i ¨)Ñ4Ô4Ø"4ð	
ð 	
ð 		
ð �;ÒÑõ ˜9Ÿ=š=¨Ñ4Ô4Ð:¸Ñ;Ô;×AÒAÑCÔC×IÒIÑKÔKˆØˆØ˜;Ò&Ð&Ø%ŸMšM¨*Ñ5Ô5Ð;¸×BÒBÑDÔD×KÒKÈCÑPÔPˆLØÐ>Ð#>ˆð )¨H¯NªNÑ,<Ô,<Ð<ð 
ØÐ@˜[¨L×,>Ò,>Ñ,@Ô,@Ð@ð 	ð ð 	å”	Ð/°Ñ4Ô4×:Ò:Ñ<Ô<ð >Ý”9Ð0°"Ñ5Ô5×;Ò;Ñ=Ô=ð ð ð ÝØeñô ð ðð
 HÐGÐGÐGÐGÐGØ+Ð+Ñ-Ô-ˆEØð ÝðVñô ð ð
 $Ø,Ø ØØØ"4ð
ð 
ð 	
ð �9ÒÑð	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð )Ð,iÐiˆØð 	Ð#6Ð#6Ñ#8Ô#8ð 	Ýð@ð
 *ðñ ô ð õ #‘}”}×(Ò(¨°BÑ7Ô7ˆà×"Ò" 8Ñ,Ô,Ð2°×9Ò9Ñ;Ô;ÐWÐ?UÐ?UÑ?WÔ?WˆØ.Ð.Ñ0Ô0ÐKÐ4Kˆà×Ò˜{¨BÑ/Ô/ˆØÐØ�7Š7Ð)Ñ*Ô*ð 	9¨s¯wªwÐ7JÑ/KÔ/Kð 	9à'*Ð+AÔ'BØ$'Ð(;Ô$<ð ð  Ðð �wŠwÐ/Ñ0Ô0ð YØ;>Ð?WÔ;XÐ Ð!7Ñ8Ø�wŠw�wÑÔð 9Ø,/°¬LÐ  Ñ)õ ˜YŸ]š]¨9Ñ5Ô5Ð;¸Ñ<Ô<×BÒBÑDÔDˆØ%Ð% nÑ5Ô5ð 	ð &Ø0ØM°vÐMÐMÐMØ$Ø%Ø Ø%)Ø&8ð	ð 	ˆGˆGð &Ø.ØM°vÐMÐMÐMØ$Ø%Ø Ø&8ðð ˆGð ð 	;Ø*:ˆGÐ&Ñ'Øˆõ  Ô# HÑ-Ô-€GØñ .
�7Ô$¨	Ò1Ñ1Ý4°XÑ>Ô>ˆõ
 ˜9Ÿ=š=¨Ñ4Ô4Ð:¸Ñ;Ô;×AÒAÑCÔC×IÒIÑKÔKˆØˆØ˜8Ò#Ð#Ø%ŸMšM¨*Ñ5Ô5Ð;¸×BÒBÑDÔD×KÒKÈCÑPÔPˆLØÐH 5§9¢9¨Z¸Ñ#<Ô#<×#CÒ#CÀCÑ#HÔ#HˆØ%ˆØ�yÒ Ð Ý0°¸E¿IºIÀiÐQSÑ<TÔ<TÑUÔUˆHˆHØ˜ÒÐØ(ˆHˆHå"% i§m¢m°JÑ&?Ô&?Ð&EÀ2Ñ"FÔ"F×"LÒ"LÑ"NÔ"N×"TÒ"TÑ"VÔ"VÐå-¨i¯mªm¸JÑ.GÔ.GÑHÔHˆOØð (Õ#GÈÐReÑ#fÔ#fð (Ø*��ØÐ<Ð<Ð<ØEÐEÐEÐEÐEÐEð *ÐI¨Y¯]ª]¸9ÀbÑ-IÔ-I�
Ø2Ð2°8¸ZÑHÔH��õ
 4°HÑ=Ô=�Øð (Ø'�HàÐ+Ò+Ð+°Ð<[Ð0[Ð0[Ý”v˜i¨¨XÑ6Ô6ˆHà Ø Ø Ø—y’y ¨BÑ/Ô/Ø—i’i ¨%Ñ0Ô0Ø"4ð
ð 
ð 	
õ *Ø-Ø)Ø+ðñ ô €Gð
 %7€GÐ Ñ!Ø€Ns^   È:I ÉIÉIÍC
P$ Ð$+QÑQÑA9S Ó+TÔTÔA9V Ö+V6Ö5V6× BY Ù+Y?Ù>Y?ÚerrorrT   c                óh   — t          | t          ¦  «        rt          | ¦  «        S t          | ¦  «        S rÍ   )r^   r   r   r    )rJ  s    r(   Úformat_runtime_provider_errorrL  Å  s.   € Ý�%�Ñ#Ô#ð (Ý  Ñ'Ô'Ð'Ýˆu‰:Œ:Ðr*   )r   r    r!   r    )r+   r    r!   r,   )r7   r    r8   r    r!   r,   )r?   r    r!   r@   )r?   r    r!   r    )r!   rZ   rÍ   )rg   r@   rh   r@   r!   r,   )ra   rZ   ro   r    r!   r    )r{   r   r!   r@   )rg   r    r€   r	   r�   r    ra   r‚   r~   rƒ   r   r@   r!   rZ   )rŸ   r@   r!   r    )r?   r    r§   r    r¨   r@   r!   r‚   )r�   r    r!   r‚   )r�   r    rÇ   r@   rÈ   r@   r!   r‚   )r�   r    rÇ   r@   rÈ   r@   r!   rZ   )
r�   r    ra   rZ   rÇ   r@   rÈ   r@   r!   rZ   )rg   r    r�   r    ra   rZ   rÇ   r@   rÈ   r@   r!   r‚   )
rŸ   r@   rÇ   r@   rÈ   r@   r   r@   r!   rZ   )rJ  rT   r!   r    )@Ú__doc__Ú
__future__r   Úloggingr£   r™   Útypingr   r   r   Ú	getLoggerÚ__name__r¹   Ú
hermes_clir   r·   Úagent.credential_poolr   r	   r
   r   Úhermes_cli.authr   r   r   r   r   r   r   r   r   r   r   r   r   r   rí   r   r   Úhermes_constantsr   Úutilsr   r   r)   r6   r>   rH   rY   rf   rn   ry   r}   ru   rž   r¦   r®   rÅ   rØ   rç   rñ   r  rI  rL  © r*   r(   ú<module>rY     sÄ  ðØ MÐ Mà "Ð "Ð "Ð "Ð "Ð "à €€€Ø 	€	€	€	Ø 	€	€	€	Ø &Ð &Ð &Ð &Ð &Ð &Ð &Ð &Ð &Ð &à	ˆÔ	˜8Ñ	$Ô	$€à 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø kÐ kÐ kÐ kÐ kÐ kÐ kÐ kÐ kÐ kÐ kÐ kðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð  KÐ JÐ JÐ JÐ JÐ JÐ JÐ JØ 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø :Ð :Ð :Ð :Ð :Ð :Ð :Ð :ð3ð 3ð 3ð 3ð=ð =ð =ð =ð
5ð 5ð 5ð 5ð$ð ð ð ð6ð ð ð ð*ð ð ð ð,8ð 8ð 8ð 8ð 8ð""ð "ð "ð "ð$ eÐdÐdÐ ðð ð ð ð +/Ø%)Ø"&ðcð cð cð cð cð cðLð ð ð ð ð, (,ðð ð ð ð ð>rð rð rð rðp '+Ø'+ð	1ð 1ð 1ð 1ð 1ð 1ðn '+Ø'+ð	fð fð fð fð fð fðZ '+Ø'+ð>ð >ð >ð >ð >ð >ðL '+Ø'+ðPð Pð Pð Pð Pð Pðj  $Ø&*Ø'+Ø"&ðQð Qð Qð Qð Qð Qðhð ð ð ð ð r*   