+
    jHàjþ  ã                  ó¦   € R t ^ RIHt ^ RIHt RtRtRtR R ltR R	 lt	R
 R lt
R R ltR R ltR R ltR R ltR R ltR R ltR R ltR# )u…  Shared wording for the exec-approval prompt every messaging surface renders.

The button card (``BasePlatformAdapter._format_exec_approval``) and the plain-text
``/approve`` fallback (``gateway.run._format_exec_approval_fallback``) must tell the user
the same three things: what Hermes wants to run, why it was flagged, and that silence means
the command does NOT run once ``approvals.timeout`` elapses. Keeping the text here means one
edit changes every platform; adapters only wrap these strings in their own markup.

The ``EA_*`` / ``APPROVAL_TIMED_OUT_NOTICE`` module constants are the English source of truth
(catalog keys ``gateway.exec_approval.*``); anything that renders the prompt calls the sibling
accessors (``ea_header_text()`` â€¦) so the active ``display.language`` is honoured at render time.

No imports from ``gateway.platforms.base`` or ``gateway.run`` â€” both import this module.
)Úannotations©Útz0Hermes wants to run a command that needs your OKzWhy it was flaggedu—   âŒ› Approval timed out after {window} â€” the command was NOT run. Ask me to try again if you still want it, or raise approvals.timeout in config.yaml.c               ó   € V ^8„  d   QhRR/# ©é   ÚreturnÚstr© )Úformats   "ÚI/home/ubuntu/.hermes/hermes-agent/gateway/platforms/base_exec_approval.pyÚ__annotate__r      s   € ÷ -ñ -˜ñ -ó    c                 ó   € \        R4      # )zLocalized ``EA_HEADER_TEXT``.zgateway.exec_approval.headerr   r
   r   r   Úea_header_textr      s   € äÐ+Ó,Ð,r   c               ó   € V ^8„  d   QhRR/# r   r
   )r   s   "r   r   r   #   s   € ÷ 3ñ 3˜cñ 3r   c                 ó   € \        R4      # )z#Localized ``EA_REASON_LABEL_TEXT``.z"gateway.exec_approval.reason_labelr   r
   r   r   Úea_reason_label_textr   #   s   € äÐ1Ó2Ð2r   c               ó   € V ^8„  d   QhRR/# r   r
   )r   s   "r   r   r   (   s   € ÷ 6ñ 6 ñ 6r   c                 ó   € \        R4      # )zPLocalized smart-deny sentence (bare; adapters add their own line breaks/markup).z%gateway.exec_approval.smart_deny_liner   r
   r   r   Úea_smart_deny_line_textr   (   s   € äÐ4Ó5Ð5r   c               ó   € V ^8„  d   QhRR/# r   r
   )r   s   "r   r   r   -   s   € ÷ 5ñ 5 ñ 5r   c                 ó   € \        R4      # )zMLocalized default "why it was flagged" reason when the approval carries none.z$gateway.exec_approval.default_reasonr   r
   r   r   Úea_default_reason_textr   -   s   € äÐ3Ó4Ð4r   c               ó   € V ^8„  d   QhRR/# )r   r   zdict[str, str]r
   )r   s   "r   r   r   2   s   € ÷ ñ ˜.ñ r   c            
     ó^   € R\        R4      R\        R4      R\        R4      R\        R4      /# )	zALocalized ``choice -> button label`` for the four approval tiers.Úoncez!gateway.exec_approval.action_onceÚsessionz$gateway.exec_approval.action_sessionÚalwaysz#gateway.exec_approval.action_alwaysÚdenyz!gateway.exec_approval.action_denyr   r
   r   r   Úea_action_labelsr    2   s:   € ð 	”Ð5Ó6Ø”1Ð;Ó<Ø”!Ð9Ó:Ø”Ð5Ó6ð	ð r   c               ó    € V ^8„  d   QhRRRR/# )r   Úwindowr	   r   r
   )r   s   "r   r   r   <   s   € ÷ Fñ F cð F¨cñ Fr   c                ó   € \        RV R7      # )zLLocalized ``APPROVAL_TIMED_OUT_NOTICE`` for an already-formatted ``window``.z&gateway.exec_approval.timed_out_notice©r"   r   r$   s   &r   Úapproval_timed_out_noticer%   <   s   € äÐ5¸fÔEÐEr   c               ó   € V ^8„  d   QhRR/# )r   r   Úintr
   )r   s   "r   r   r   A   s   € ÷ #ñ # #ñ #r   c                 ó   € ^ RI Hp  V ! 4       # )zZThe configured ``approvals.timeout`` (default 300s); module attribute so tests can pin it.©Ú_get_approval_timeout)Útools.approval_contextr*   r)   s    r   Úapproval_timeout_secondsr,   A   s   € å<Ù Ó"Ð"r   c               ó    € V ^8„  d   QhRRRR/# )r   Úsecondsr'   r   r	   r
   )r   s   "r   r   r   G   s   € ÷ ñ  Cð ¨Cñ r   c                ó   € ^ RI Hp V! V 4      # )u½   Human wording for a timeout (300 â†’ "5 minutes"); one formatter shared with the CLI notice and
the tool result's ``user_summary`` â€” see ``tools.approval_context.format_approval_window``.)Úformat_approval_window)r+   r0   )r.   Ú_shareds   & r   r0   r0   G   s   € õ IÙ�7ÓÐr   c               ó    € V ^8„  d   QhRRRR/# ©r   Ú	timeout_sr'   r   r	   r
   )r   s   "r   r   r   N   s   € ÷ Yñ Y¨Sð Y°Sñ Yr   c                ó.   € \        R\        V 4      R7      # )zCThe last line of every approval prompt: doing nothing is a safe no.zgateway.exec_approval.deadliner$   )r   r0   ©r4   s   &r   Úformat_approval_deadline_liner7   N   s   € äÐ-Ô6LÈYÓ6WÔXÐXr   c               ó    € V ^8„  d   QhRRRR/# r3   r
   )r   s   "r   r   r   S   s   € ÷ Hñ H°ð H¸ñ Hr   c                ó*   € \        \        V 4      4      # )N)r%   r0   r6   s   &r   Ú format_approval_timed_out_noticer:   S   s   € Ü$Ô%;¸IÓ%FÓGÐGr   N)Ú__doc__Ú
__future__r   Ú
agent.i18nr   ÚEA_HEADER_TEXTÚEA_REASON_LABEL_TEXTÚAPPROVAL_TIMED_OUT_NOTICEr   r   r   r   r    r%   r,   r0   r7   r:   r
   r   r   Ú<module>rA      s`   ðñõ #å ð D€Ø+Ð ð[ð õ
-õ
3õ
6õ
5õ
õFõ
#õõY÷
Hr   