Ë
    âß²j"  ã                  ó¦   — d Z ddlmZ ddlZddlZddlZddlmZ ddlm	Z	 ddl
mZ dd„Zdd„Z ed	¬
«       G d„ d«      «       ZdZdd„Zddœdd„Zy)zðImport-safe helpers for inspecting a Python interpreter's linked SQLite.

This module intentionally depends only on the standard library. Installer and update code must be
able to use it before Hermes' third-party dependencies are healthy.
é    )ÚannotationsN)Ú	dataclass)ÚPath)ÚIterablec                óš   — | D �cg c]  }t        |«      ‘Œ }}|j                  dgdt        |«      z
  z  «       t        |d d «      S c c}w )Nr   é   )ÚintÚextendÚlenÚtuple)ÚpartsÚpartÚvaluess      ú>/home/ubuntu/.hermes/hermes-agent/hermes_cli/sqlite_runtime.pyÚ_version_tupler      sJ   € Ø$)Ö*˜DŒc�$�iÐ*€FÐ*Ø
‡M�M�1�#˜œS ›[™Ñ)Ô*Ü�˜˜�ÓÐùò +s   …Ac                ó|   — t        | «      }|dk  xs* |dk\  xs# d|cxk  xr dk  nc xs d|cxk  xr dk   S c  S )z>Return whether *version_info* contains SQLite's WAL-reset bug.)r   é   r   )r   é3   r   )r   é2   r   )r   r   r   )r   é,   é   )r   é-   r   )r   )Úversion_infoÚinfos     r   Úis_sqlite_wal_reset_vulnerabler      s`   € ä˜,Ó'€DàˆyÑò 	+Ø�:Ñò	+à˜Ö* 
Ô*ò	+ð ˜Ö* 
Ñ*ð	,ð ,ñ +ð	,ð ,ó    T)Úfrozenc                  ó`   — e Zd ZU dZded<   ded<   ded<   ded<   ded	<   ded
<   edd„«       Zy)ÚSQLiteRuntimeInfoz7SQLite details reported by one exact Python executable.r   Ú
executableÚbase_prefixútuple[int, int, int]Úpython_versionÚsqlite_versionÚstrÚsqlite_version_stringÚsqlite_source_idc                ó,   — t        | j                  «      S )N)r   r$   )Úselfs    r   Úwal_reset_vulnerablez&SQLiteRuntimeInfo.wal_reset_vulnerable,   s   € ä-¨d×.AÑ.AÓBÐBr   N)ÚreturnÚbool)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú__annotations__Úpropertyr*   © r   r   r   r   !   s=   … áAàÓØÓØ(Ó(Ø(Ó(ØÓØÓàòCó ñCr   r   aÜ  
import json, sqlite3, sys
conn = sqlite3.connect(":memory:")
try:
    row = conn.execute("SELECT sqlite_source_id()").fetchone()
finally:
    conn.close()
print(json.dumps({
    "base_prefix": sys.base_prefix, "executable": sys.executable,
    "python_version": list(sys.version_info[:3]), "sqlite_version": list(sqlite3.sqlite_version_info),
    "sqlite_version_string": sqlite3.sqlite_version,
    "sqlite_source_id": str(row[0]) if row and row[0] is not None else "",
}))
c                 ój   — t        t        j                  «      } dD ]  }| j                  |d«       Œ | S )z”Copy of ``os.environ`` with conda/uv/venv/PYTHON* overrides stripped, so a child interpreter
    reports its *own* runtime rather than the caller's.)ÚCONDA_DEFAULT_ENVÚCONDA_PREFIXÚ
PYTHONHOMEÚ
PYTHONPATHÚUV_PROJECT_ENVIRONMENTÚ	UV_PYTHONÚVIRTUAL_ENVN)ÚdictÚosÚenvironÚpop)ÚenvÚkeys     r   Úisolated_interpreter_envrB   A   s8   € ô Œr�z‰zÓ
€Cð,ò ˆà�‰��TÕðð €Jr   g      >@)Útimeoutc               óL  — 	 t        j                  t        | «      ddt        gdd|dt	        «       ¬«      }|j                  dk7  ry	 t        j                  |j                  «      }t        t        t        |d   «      «      t        t        |d	   «      «      t        |d
   «      t        |d   «      t        |d   «      t        |j                  dd«      «      ¬«      S # t
        t         j                  f$ r Y yw xY w# t        t         t"        t        j$                  f$ r Y yw xY w)z;Probe SQLite in *python*, never the caller's linked SQLite.z-Iz-cTF)Úcapture_outputÚtextrC   Úcheckr@   Nr   r    r!   r#   r$   r&   r'   Ú )r    r!   r#   r$   r&   r'   )Ú
subprocessÚrunr%   Ú_PROBE_SCRIPTrB   ÚOSErrorÚTimeoutExpiredÚ
returncodeÚjsonÚloadsÚstdoutr   r   r   ÚgetÚKeyErrorÚ	TypeErrorÚ
ValueErrorÚJSONDecodeError)ÚpythonrC   ÚresultÚpayloads       r   Úprobe_sqlite_runtimerZ   K   s  € ðÜ—‘Ü�‹[˜$ ¤mÐ4ÀTÐPTÐ^eØÔ5Ó7ô9ˆð
 ×Ñ˜AÒØð	Ü—*‘*˜VŸ]™]Ó+ˆÜ ÜœC ¨Ñ 5Ó6Ó7ÄTÌ#ÈgÐVcÑNdÓJeÓEfÜ)¨'Ð2BÑ*CÓDÜ)¨'Ð2BÑ*CÓDÜ"% gÐ.EÑ&FÓ"GÜ  §¡Ð-?ÀÓ!DÓEôGð 	Gøô ”Z×.Ñ.Ð/ò Ùðûô ”i¤¬T×-AÑ-AÐBò Ùðús$   ‚4C ÁBC= ÃC:Ã9C:Ã=#D#Ä"D#)r   zIterable[object]r+   r"   )r   ztuple[int, ...]r+   r,   )r+   zdict[str, str])rW   z
str | PathrC   Úfloatr+   zSQLiteRuntimeInfo | None)r0   Ú
__future__r   rO   r=   rI   Údataclassesr   Úpathlibr   Útypingr   r   r   r   rK   rB   rZ   r3   r   r   ú<module>r`      sd   ðñõ #ã Û 	Û Ý !Ý Ý óó,ñ �$Ô÷Cð Có ðCð€ó ð BFö r   