+
    „WÝjF  ã                  óº   € R t ^ RIHt ^ RIt^ RIt^ RIt^ RIHt ^ RIH	t	 ^ RI
Ht R R ltR R	 lt]! R
R7       ! R R4      4       tRtR R ltRR/R R lltR# )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               ó    € V ^8„  d   QhRRRR/# )é   ÚpartszIterable[object]Úreturnútuple[int, int, int]© )Úformats   "ÚMC:\Users\johnn\AppData\Local\hermes\hermes-agent\hermes_cli\sqlite_runtime.pyÚ__annotate__r      s   € ÷ ñ Ð*ð Ð/Cñ ó    c                ó¶   € V  Uu. uF  p\        V4      NK  	  ppVP                  ^ .^\        V4      ,
          ,          4       \        VR,          4      # u upi )é    :Né   N)ÚintÚextendÚlenÚtuple)r   ÚpartÚvaluess   &  r   Ú_version_tupler      sI   € Ù$)Ó*¡E˜DŒc�$Ži¡E€FÐ*Ø
‡M�M�1�#˜œS ›[�Õ)Ô*Ü�˜•ÓÐùò +s   …Ac               ó    € V ^8„  d   QhRRRR/# )r   Úversion_infoztuple[int, ...]r	   Úboolr   )r   s   "r   r   r      s   € ÷ ,ñ ,°ð ,ÀTñ ,r   c                óÈ   € \        V 4      pVR8  ;'       gG    VR8¬  ;'       g:    RTu;8*  ;'       d    R8  Mu ;'       g    RTu;8*  ;'       d    R8  '       * # u '       * # )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   )r   Úinfos   & r   Úis_sqlite_wal_reset_vulnerabler%      su   € ä˜,Ó'€DàˆyÑ÷ 	+ð 	+Ø�:Ñ÷	+ð 	+à˜×*Ô* 
Ô*÷	+ð 	+ð ˜×*Ô* 
Ñ*ô	,ð ,ñ +ô	,ð ,r   T)Úfrozenc                  ón   € ] tR t^!t$ RtR]R&   R]R&   R]R&   R]R&   R]R	&   R]R
&   ]R R l4       tRtR# )ÚSQLiteRuntimeInfoz7SQLite details reported by one exact Python executable.r   Ú
executableÚbase_prefixr
   Úpython_versionÚsqlite_versionÚstrÚsqlite_version_stringÚsqlite_source_idc               ó   € V ^8„  d   QhRR/# )r   r	   r   r   )r   s   "r   r   ÚSQLiteRuntimeInfo.__annotate__-   s   € ÷ Cñ C dñ Cr   c                	ó,   € \        V P                  4      # )N)r%   r,   )Úselfs   &r   Úwal_reset_vulnerableÚ&SQLiteRuntimeInfo.wal_reset_vulnerable,   s   € ä-¨d×.AÑ.AÓBÐBr   r   N)	Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú__annotations__Úpropertyr4   Ú__static_attributes__r   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               ó   € V ^8„  d   QhRR/# )r   r	   zdict[str, str]r   )r   s   "r   r   r   A   s   € ÷ ñ  .ñ r   c                 ón   € \        \        P                  4      p R F  pV P                  VR4       K  	  V # )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.N)ÚCONDA_DEFAULT_ENVÚCONDA_PREFIXÚ
PYTHONHOMEÚ
PYTHONPATHÚUV_PROJECT_ENVIRONMENTÚ	UV_PYTHONÚVIRTUAL_ENV)ÚdictÚosÚenvironÚpop)ÚenvÚkeys     r   Úisolated_interpreter_envrM   A   s3   € ô Œr�z‰zÓ
€Có,ˆà�‰��TÖñ,ð €Jr   Útimeoutg      >@c               ó$   € V ^8„  d   QhRRRRRR/# )r   Úpythonz
str | PathrN   Úfloatr	   zSQLiteRuntimeInfo | Noner   )r   s   "r   r   r   K   s"   € ÷ ñ  ð ¸ð ÐJbñ r   c               óŽ  €  \         P                  ! \        V 4      RR\        .RRRRVR\	        4       R7      pTP                  ^ 8w  d   R#  \        P                  ! TP                  4      p\        \        \        TR	,          4      4      \        \        TR
,          4      4      \        TR,          4      \        TR,          4      \        TR,          4      \        TP                  RR4      4      R7      #   \
        \         P                  3 d     R# i ; i  \        \         \"        \        P$                  3 d     R# i ; i)z;Probe SQLite in *python*, never the caller's linked SQLite.z-Iz-cTzutf-8ÚreplaceF)Úcapture_outputÚtextÚencodingÚerrorsrN   ÚcheckrK   Nr)   r*   r+   r,   r.   r/   Ú )r)   r*   r+   r,   r.   r/   )Ú
subprocessÚrunr-   Ú_PROBE_SCRIPTrM   ÚOSErrorÚTimeoutExpiredÚ
returncodeÚjsonÚloadsÚstdoutr(   r   r   ÚgetÚKeyErrorÚ	TypeErrorÚ
ValueErrorÚJSONDecodeError)rP   rN   ÚresultÚpayloads   &$  r   Úprobe_sqlite_runtimerj   K   s  € ðÜ—’Ü�‹[˜$ ¤mÐ4ÀTÐPTÐ_fÐoxð  CJØÔ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$   ‚7C9 ÁB+D Ã9DÄDÄ%EÅE)r:   Ú
__future__r   r`   rH   rZ   Údataclassesr   Úpathlibr   Útypingr   r   r%   r(   r\   rM   rj   r   r   r   Ú<module>ro      si   ðñõ #ã Û 	Û Ý !Ý Ý õõ,ñ �$Ô÷Cð Có ðCð€õ ðÀ÷ ñ r   