
    PL
j                    \    d Z ddlmZ ddlZddlZej        dk    Zdad	dZ e             dS )
u  Windows UTF-8 bootstrap for Hermes entry points.

Python on Windows has two long-standing text-encoding footguns:

1. ``sys.stdout`` / ``sys.stderr`` are bound to the console code page
   (``cp1252`` on US-locale installs), so ``print("café")`` crashes with
   ``UnicodeEncodeError: 'charmap' codec can't encode character``.

2. Child processes spawned via ``subprocess`` don't know to use UTF-8
   unless ``PYTHONUTF8`` and/or ``PYTHONIOENCODING`` are set in their
   environment — so any Python subprocess (the execute_code sandbox,
   delegation children, linter subprocesses, etc.) inherits the same
   cp1252 defaults and hits the same UnicodeEncodeError.

This module fixes both on Windows *only* — POSIX is untouched.  It
should be imported at the very top of every Hermes entry point
(``hermes``, ``hermes-agent``, ``hermes-acp``, ``python -m gateway.run``,
``batch_runner.py``, ``cron/scheduler.py``) before any other imports
that might do file I/O or print to stdout.

What this module does on Windows:

  - Sets ``os.environ["PYTHONUTF8"] = "1"`` (PEP 540 UTF-8 mode) so
    every child process we spawn uses UTF-8 for ``open()`` and stdio.
  - Sets ``os.environ["PYTHONIOENCODING"] = "utf-8"`` for belt-and-
    suspenders — some tools read this instead of / in addition to
    ``PYTHONUTF8``.
  - Reconfigures ``sys.stdout`` / ``sys.stderr`` to UTF-8 in the current
    process, using the ``reconfigure()`` API (Python 3.7+).  This fixes
    ``print("café")`` in the parent without a re-exec.

What this module does NOT do:

  - It does not re-exec Python with ``-X utf8``, so ``open()`` calls in
    the *current* process still default to locale encoding.  Those need
    an explicit ``encoding="utf-8"`` at the call site (lint rule
    ``PLW1514`` / ``PYI058``).  Ruff is the right tool for that sweep.

What this module does on POSIX:

  - Nothing.  POSIX systems are already UTF-8 by default in 99% of cases,
    and we don't want to touch ``LANG``/``LC_*`` behavior that users may
    have configured intentionally.  If someone hits a C/POSIX locale on
    Linux, they can export ``PYTHONUTF8=1`` themselves — we won't override.

Idempotent: safe to call multiple times.  ``_bootstrap_once`` guards
against double-reconfigure.
    )annotationsNwin32Freturnboolc                    t           sdS t          rdS t          j                            dd           t          j                            dd           dD ]T} t          t          | d          }|t          |dd          }|/	  |dd	
           ># t          t          f$ r Y Qw xY wt          t          dd          }|9t          |dd          }|&	  |dd	
           n# t          t          f$ r Y nw xY wdadS )ul  Apply the Windows UTF-8 bootstrap if we're on Windows.

    Returns True if bootstrap was applied (i.e. we're on Windows and
    haven't already done this), False otherwise.  The return value is
    advisory — callers normally don't need it, but tests may want to
    assert the path was taken.

    Idempotent: subsequent calls after the first are a no-op.
    F
PYTHONUTF81PYTHONIOENCODINGzutf-8)stdoutstderrNreconfigurereplace)encodingerrorsstdinT)	_IS_WINDOWS_bootstrap_appliedosenviron
setdefaultgetattrsysOSError
ValueError)stream_namestreamr   r   s       4/home/kuhnn/.hermes/hermes-agent/hermes_bootstrap.pyapply_windows_utf8_bootstrapr   ;   sZ     u u J,,,,J,g666 ,  k400>fmT::
 	K;;;;;$ 	 	 	 D	 C$''Ee]D99"WY?????Z(    4s$   BB'&B'C$ $C87C8)r   r   )	__doc__
__future__r   r   r   platformr   r   r        r   <module>r$      st   / /b # " " " " " 				 



lg% ? ? ? ?L       r#   