+
    iHàj¡r  ã                  óˆ  a € 0 t $ R t^ RIHt ^ RIt^ RIt^ RIt^ RIt^ RIt^ RI	H
t
 ^ RIHt ^ RIHtHt ^ RIHt ]P$                  ! R4      tRt0 RƒmtR„tR…t]! 0 R	kR
kRkRkRkRkRkRkRkRkRkRkRkRkRkRkRkRkRkRkRkRkRkR kR!kR"kR#kR$kR%kR&kR'kR(kR)kR*kR+kR,kR-kR.kR/kR0kR1kR2k4      t]! 0 R†m4      tR3tR‡tRˆtR‰t^tRŠt R4t!R5R‹R6RŒ/t"R7]#R8&   R9t$R:t%R;t&R�t'/ ](PS                  RŽR<4      C](PS                  R�R=4      C](PS                  R�R>4      Ct*]
! R?R@7       ! RA RB4      4       t+]+! RCRD7      t,]+! R]]$R]'RE7      t-RF RG lt.RH RI lt/RJ RK lt0RL RM lt1RN RO lt2RP RQ lt3RR RS lt4RT RU lt5RV RW lt6RX RY lt7RZ R[ lt8R\ R] lt9]
! R?R@7       ! R^ R_4      4       t:R`RRaRRbRRcR/Rd Re llt;R`RRaRRbR/Rf Rg llt<R`RRaRRbR/Rh Ri llt=R`RRaRRbR/Rj Rk llt>R`RRaRRbRRcRRlRRmR/Rn Ro llt?R`RRaRRbR/Rp Rq llt@Rr Rs ltARt Ru ltBRv Rw ltC]
! R?R@7       ! Rx Ry4      4       tDRz R{ ltER| R} ltFR‘R~ R lltGR€tHR‘R� R‚ lltIR# )’a†  Coding-context awareness: the single place that decides "are we coding?".

In a code workspace on an interactive surface Hermes adopts a **coding posture**: a
frozen :class:`RuntimeMode` built from a :class:`ContextProfile` (pure data). The
system prompt reads ``system_prompt_parts()``; the toolset collapses ONLY under opt-in
``focus`` (never strips a user-enabled toolset). ``agent.coding_context``: ``auto``
(default, prompt-only) / ``focus`` / ``on`` / ``off``. Resolved once, immutable; the
workspace snapshot is probed once per session and replayed through
``system_prompt_parts(workspace_block=...)`` on every later build (cache safety).
)ÚannotationsN)Ú	dataclass)ÚPath)ÚAnyÚOptional)Úbounded_git_probezhermes.coding_contextÚcodingz.pyz.pyiz.ipynbz.jsz.jsxz.tsz.tsxz.mjsz.cjsz.goz.rsz.javaz.ktz.ktsz.scalaz.rbz.phpz.cz.hz.ccz.cppz.hppz.csz.swiftz.mz.mmz.dartz.exz.exsz.luaz.shz.bashz.zshz.sqlz.vuez.sveltez.rz.jlz.hsz.cljz.erlz.pliô  g      @ÚpatchÚreplacez&dict[str, tuple[tuple[str, ...], str]]Ú_EDIT_FORMAT_GUIDANCEuU
  You are a coding agent pairing with the user inside their codebase. Operate like a careful senior engineer.

Gather context first:
- Read the relevant files with `read_file` and locate code with `search_files` before changing anything. Trace a symbol to its definition and usages rather than guessing its shape.
- Batch independent lookups: when several reads/searches don't depend on each other, issue them together in one turn instead of one at a time.
- Never invent files, symbols, APIs, or imports. If you haven't seen it in the repo, go look. Don't assume a library is available â€” check the project manifest (pyproject.toml / package.json / Cargo.toml / go.mod) and how neighbouring files import it.

Make changes through the tools, not the chat:
- Edit with `patch`/`write_file`. Do NOT print code blocks to the user as a substitute for editing â€” apply the change, then summarise it. Only show code when the user explicitly asks to see it.
- Match the project's existing style and conventions; AGENTS.md / CLAUDE.md / .cursorrules already in context win over your defaults. Touch only what the task needs â€” no drive-by refactors, renames, or reformatting â€” and add any imports/dependencies your code requires.
- If an edit fails to apply, re-read the file to get the current exact contents before retrying â€” don't repeat a stale patch. If the same region fails twice, rewrite the enclosing function or file with `write_file` instead of attempting a third patch.

Verify, and know when to stop:
- Use `terminal` for git, builds, tests, and inspection. Run the relevant tests/linter/build and confirm they pass before claiming the work is done.
- Terminal state persists across calls: current directory and exported environment variables carry forward. Activate a virtualenv or export setup vars once, then reuse that state instead of re-sourcing it before every test command.
- Fix root causes, not symptoms: when you find a bug, check sibling call paths for the same flaw and fix the class, not just the reported site.
- When fixing linter/type errors on a file, stop after about three attempts on the same file and ask the user rather than looping.
- Track multi-step work with `todo_list`. Reference code as `path:line` instead of pasting whole files.

Respect the user's repo: don't commit, push, or rewrite history unless asked, and never read, print, or commit secrets â€” leave `.env` and credential files alone unless the user explicitly asks. The Workspace block below is a snapshot from session start â€” re-run `git status`/`git branch` before relying on it. Be concise: lead with the change or answer, not a preamble.zg- Track multi-step work with `todo_list`. Reference code as `path:line` instead of pasting whole files.z?- Reference code as `path:line` instead of pasting whole files.ÚfocusÚonÚoffT)Úfrozenc                  ó^   € ] tR t^–t$ RtR]R&   RtR]R&   RtR]R&   RtR]R	&   Rt	R
]R&   Rt
R# )ÚContextProfileuô   A named operating posture (pure data). ``toolset``: collapse target under ``focus``
(``None`` keeps the platform default). ``compact_skill_categories``: DEMOTED to
names-only under ``focus`` â€” deny-list, never hidden, so recall keeps working.ÚstrÚnameNúOptional[str]ÚtoolsetÚ ÚguidanceÚ
model_hintztuple[str, ...]Úcompact_skill_categories© )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú__annotations__r   r   r   r   Ú__static_attributes__r   ó    Ú9/home/ubuntu/.hermes/hermes-agent/agent/coding_context.pyr   r   –   s8   ‡ ñXð ƒIØ!€Gˆ]Ó!Ø€HˆcÓØ $€J�Ó$Ø02Ð˜o×2r"   r   Úgeneral)r   )r   r   r   r   r   c               ó    € V ^8„  d   QhRRRR/# )é   Úmodelr   Úreturnr   )Úformats   "r#   Ú__annotate__r*   ¬   s   € ÷ ñ ˜ð ¨=ñ r"   c                ó  a€ T ;'       g    RP                  4       o\        P                  4        FV  w  pw  r#S'       g   K  \        ;QJ d    V3R lV 4       F  '       g   K   RM	  RM! V3R lV 4       4      '       g   KT  Vu # 	  R# )zMEdit-format family key for a model id, or ``None`` (neutral wording applies).r   c              3  ó,   <"  € T F	  qS9   x € K  	  R # 5i©Nr   )Ú.0ÚnÚlowereds   & €r#   Ú	<genexpr>Ú _model_family.<locals>.<genexpr>°   s   øé € Ð9±¨A ž<³ùs   ƒTFN)Úlowerr   ÚitemsÚany)r'   ÚfamilyÚneedlesÚ_liner0   s   &   @r#   Ú_model_familyr9   ¬   sb   ø€ à�{ˆ{˜×!Ñ!Ó#€GÜ$9×$?Ñ$?Ö$AÑ ˆÑ �ß‰7—s“sÔ9±Ó9—s—s’sÔ9±Ó9×9Ô9ØŠMñ %Bñ r"   c          
     ó,   € V ^8„  d   QhRRRRRRRRR	R/# )
r&   ÚconfigúOptional[dict[str, Any]]Úkeyr   Údefaultr   ÚreadonlyÚboolr(   r   )r)   s   "r#   r*   r*   µ   s9   € ÷ Eñ EÐ 8ð E¸sð EÈSð EÐ_cð EÐhkñ Er"   c               óØ   € V f     ^ RI HpHp V'       d   V! 4       MV! 4       p T ;'       g    / P	                  R/ 4      ;'       g    / P	                  W4      #   \         d    / p  LDi ; i)z>``config["agent"][key]``, loading config when none was passed.)Úload_configÚload_config_readonlyÚagent)Úhermes_cli.configrB   rC   Ú	ExceptionÚget)r;   r=   r>   r?   rB   rC   s   &&&$  r#   Ú_agent_config_valuerH   µ   sb   € à‚~ð	ßKß/7Ñ)Ô+¹[»]ˆFð �\ˆ\�r×Ñ˜w¨Ó+×1Ð1¨r×6Ñ6°sÓDÐDøô ô 	ØŠFð	ús   †A –A ÁA)Á(A)c               ó    € V ^8„  d   QhRRRR/# )r&   r;   r<   r(   r   r   )r)   s   "r#   r*   r*   À   s   € ÷ ?ñ ?Ð1ð ?°cñ ?r"   c                ó–   € \        V RRRR7      p\        P                  \        V4      P	                  4       P                  4       R4      # )z=Normalized ``agent.coding_context`` mode (auto/focus/on/off).Úcoding_contextÚautoT©r?   )rH   Ú_MODE_ALIASESrG   r   Ústripr3   )r;   Úraws   & r#   Ú_coding_moderQ   À   s:   € ä
˜fÐ&6¸ÈÔ
N€CÜ×ÑœS ›XŸ^™^Ó-×3Ñ3Ó5°vÓ>Ð>r"   c               ó    € V ^8„  d   QhRRRR/# )r&   ÚcwdúOptional[str | Path]r(   r   r   )r)   s   "r#   r*   r*   Æ   s   € ÷ !ñ !Ð*ð !¨tñ !r"   c                ó¾   € V '       d   \        V 4      P                  4       #  ^ RIHp V! 4       #   \         d"    \        \
        P                  ! 4       4      u # i ; i)é    )Úresolve_agent_cwd)r   Ú
expanduserÚagent.runtime_cwdrW   rF   ÚosÚgetcwd)rS   rW   s   & r#   Ú_resolve_cwdr\   Æ   sI   € ß
Ü�C‹y×#Ñ#Ó%Ð%ð!Ý7Ù Ó"Ð"øÜô !Ü”B—I’I“KÓ Ò ð!ús   £0 °)AÁAc               ó    € V ^8„  d   QhRRRR/# ©r&   rS   r   r(   úOptional[Path]r   )r)   s   "r#   r*   r*   Ð   s   € ÷ Yñ Y�4ð Y˜Nñ Yr"   c                ób   € V P                  4       p\        R  V.VP                  O 4       R4      # )c              3  ób   "  € T F%  qR ,          P                  4       '       g   K!  Vx € K'  	  R# 5i)ú.gitN©Úexists)r.   Úps   & r#   r1   Ú_git_root.<locals>.<genexpr>Ò   s!   é € ÐQÑ7�qÀ½J×;NÑ;N×;P—’Ó7ùs   ‚/¥
/N)ÚresolveÚnextÚparents)rS   Úcurrents   & r#   Ú	_git_rootrk   Ð   s-   € Ø�k‰k‹m€GÜÑQ˜WÐ7 w§¡Ñ7ÓQÐSWÓXÐXr"   c               ó   € V ^8„  d   QhRR/# )r&   r(   r_   r   )r)   s   "r#   r*   r*   Õ   s   € ÷ ñ ˆ~ñ r"   c                 óz   €  \         P                  ! 4       P                  4       #   \        \        3 d     R # i ; ir-   )r   Úhomerg   ÚOSErrorÚRuntimeErrorr   r"   r#   Ú_homerq   Õ   s3   € ðÜ�yŠy‹{×"Ñ"Ó$Ð$øÜ”\Ð"ô Úðús   ‚"% ¥:¹:c               ó    € V ^8„  d   QhRRRR/# r^   r   )r)   s   "r#   r*   r*   Ü   s   € ÷ ñ �dð ˜~ñ r"   c                ó¦  a€ V P                  4       p \        \        P                  ! 4       4      P                  4       p\        4       V3pV.VP                  O5R,           FX  oSV9  g   K  \        ;QJ d#    V3R l\         4       F  '       g   K   RM	  RM! V3R l\         4       4      '       g   KV  Su # 	  R#   \         d    Rp L�i ; i)uõ   Nearest ancestor (â‰¤6 levels) that looks like a project root, or ``None``. ``$HOME``
and the shared temp root are skipped: a Makefile/AGENTS.md in the home dir is global
config, and a stray manifest in /tmp must not flip every session under it.N:Né   Nc              3  óR   <"  € T F  pSV,          P                  4       x € K  	  R # 5ir-   rc   )r.   ÚmarkerÚparents   & €r#   r1   Ú_marker_root.<locals>.<genexpr>ç   s#   øé € Ð%`ÑO_ÀV v°¥×&>Ñ&>×&@Ð&@ÓO_ùs   ƒ$'TF)	rg   r   ÚtempfileÚ
gettempdirrF   rq   ri   r5   Ú_PROJECT_MARKERS)rS   rj   Ú	temp_rootÚskiprw   s   &   @r#   Ú_marker_rootr~   Ü   s§   ø€ ð �k‰k‹m€GðÜœ×,Ò,Ó.Ó/×7Ñ7Ó9ˆ	ô ‹G�YÐ€DØÐ-˜WŸ_™_Ñ-¨b×1Ð1ˆØ˜Ö§#£#Ô%`ÕO_Ó%`§#§#¢#Ô%`ÕO_Ó%`×"`Ô"`ØŠMñ 2ñ øô ô ØŠ	ðús   “,C  Ã CÃCc               ó    € V ^8„  d   QhRRRR/# )r&   Úrootr   r(   r@   r   )r)   s   "r#   r*   r*   ì   s   € ÷ ñ ˜$ð  4ñ r"   c                óP  € ^ pV R3.pV'       Ed[   VP                  4       w  r4 \        P                  ! V4      pT;_uu_ 4        T EF  pT^,          pT\        8”  d    RRR4       R#  TP                  4       '       dU   \        P                  P                  TP                  4      ^,          P                  4       \        9   d    RRR4       R# KŽ  T'       d   TP                  4       '       df   TP                  \        9  dN   TP                  P                  R4      '       g*   TP                  \        TP                  4      R34       EK  EK  EK  EK  EK  	  RRR4       EKc  R#   \         d     EKt  i ; i  \         d     EKH  i ; i  + '       g   i     EK�  ; i)zEBounded check for source files in the root and its immediate subdirs.TNFÚ.)ÚpoprZ   Úscandirro   Ú_CODE_SCAN_MAX_ENTRIESÚis_fileÚpathÚsplitextr   r3   Ú_CODE_EXTENSIONSÚis_dirÚ_CODE_SCAN_SKIP_DIRSÚ
startswithÚappendr   )r€   ÚseenÚstackÚ	directoryÚis_rootÚentriesÚentrys   &      r#   Ú_has_code_filesr”   ì   sQ  € à€DØ�Dˆ\ˆN€Eß
ˆ%Ø"ŸY™Y›[Ñˆ	ð	Ü—j’j Ó+ˆG÷ ŠWÜ �Ø˜•	�ØÔ0Ô0Ø ÷	 ‰Wð
Ø—}‘}—’ÜŸ7™7×+Ñ+¨E¯J©JÓ7¸Õ:×@Ñ@ÓBÔFVÔVØ#'÷ ‰Wñ Wç  U§\¡\§^¢^¸¿
¹
ÔJ^Ô8^Ðgl×gqÑgq×g|Ñg|ð  ~A÷  hBò  hBØŸ™¤d¨5¯:©:Ó&6¸Ð%>×?ò hBÒ8^¢^šñ !÷ ŠWñ øô ô 	Ûð	ûô ô Ûðú÷ �W‰Wúsl   ¤E- ÁFÁ+F ÂAF ÃFÃFÃF ÃF Ã35F Ä)&F ÅFÅ-E=Å<E=Æ F	ÆFÆF	ÆFÆF%	c               ó(   € V ^8„  d   QhRRRRRRRR/# )r&   Úmoder   ÚplatformrS   r   r(   r   r   )r)   s   "r#   r*   r*     s(   € ÷ ñ ˜#ð ¨ð °4ð ¸Nñ r"   c                ó<  € V R8X  d   \         # V R8X  d   \        # V'       d.   VP                  4       P                  4       \        9  d   \         # \        V4      e   \        # \        V4      pVe'   V\        4       8w  d   \        V4      '       d   \        # \         # )a   ``auto``/``focus``: coding when the surface is interactive AND the cwd is a code
workspace (project root, or a git repo that actually holds code; a repo rooted at
``$HOME`` is NOT a signal). ``on``/``off`` force. Not memoized: one gateway serves many cwds.r   r   )	ÚGENERAL_PROFILEÚCODING_PROFILErO   r3   ÚINTERACTIVE_CODING_PLATFORMSr~   rk   rq   r”   )r–   r—   rS   Úgit_roots   &&& r#   Ú_detect_profiler�     s~   € ð ˆu„}ÜÐØˆt„|ÜÐß�H—N‘NÓ$×*Ñ*Ó,Ô4PÔPÜÐÜ�CÓÒ$ÜÐÜ˜‹~€HØÒ ¬E«GÔ 3¼È×8QÒ8QÜÐÜÐr"   c               ó    € V ^8„  d   QhRRRR/# ©r&   r;   r<   r(   ú	list[str]r   )r)   s   "r#   r*   r*     s   € ÷ 	ñ 	Ð!9ð 	¸iñ 	r"   c                ó¸   €  ^ RI Hp ^ RIHp \	        T! V f   V! 4       4      4      # T 4      4      #   \
         d    \        P                  RRR7       . u # i ; i)uµ   Names of MCP servers the user has enabled â€” kept in the coding posture. The profile default's
resolver, so plugin-provided servers stay too; *config* None reads the user's config.)Úread_raw_config)Úenabled_mcp_server_namesz9Could not list enabled MCP servers for the coding postureT)Úexc_info)rE   r¢   Úhermes_cli.tools_configr£   ÚsortedrF   ÚloggerÚdebug)r;   r¢   r£   s   &  r#   Ú_enabled_mcp_serversr©     sW   € ðÝ5ÝDÜÑ.ÀFÂN©Ó/@Ó_Ó`Ð`ÐX^Ó_Ó`Ð`øÜô Ü�‰ÐPÐ[_ˆÔ`ØŠ	ðús   ‚%2 ¨	2 ²$AÁAc               ó    € V ^8„  d   QhRRRR/# rŸ   r   )r)   s   "r#   r*   r*   $  s   € ÷ ;ñ ;Ð6ð ;¸9ñ ;r"   c                ó&   € \         .\        V 4      O# )zCThe coding posture's toolset list; callers own the ``focus`` check.)ÚCODING_TOOLSETr©   ©r;   s   &r#   Ú_posture_toolsetsr®   $  s   € äÐ:Ô1°&Ó9Ð:Ð:r"   c               ó    € V ^8„  d   QhRRRR/# ©r&   r;   r<   r(   úOptional[list[str]]r   )r)   s   "r#   r*   r*   )  s    € ÷ Rñ RÐ3ð RÐ8Kñ Rr"   c                ó<   € \        V 4      R8X  d   \        V 4      # R# )z›The coding posture's toolsets when ``agent.coding_context`` is ``focus``, else None, for a
session whose workspace decision is already made (no cwd probe).r   N)rQ   r®   r­   s   &r#   Úfocus_toolsetsr³   )  s!   € ô )5°VÓ(<ÀÔ(GÔ˜VÓ$ÐQÈTÐQr"   c                  óÈ   € ] tR tRt$ RtR]R&   R]R&   R]R&   R	tR]R
&   RtR]R&   RtR]R&   ]	R R l4       t
]	R R l4       tRR R lltRR R lltR R ltR R ltRtR# )ÚRuntimeModei1  aP  The resolved operating posture for a session; immutable, built once via
:func:`resolve_runtime_mode` and never re-resolved mid-session (prompt cache).
``config_mode``: normalized ``agent.coding_context`` (toolset collapse gated on
``focus``); ``model``: steers edit-format guidance only; ``instructions``:
``agent.coding_instructions``.r   Úprofiler   Úsurfacer   rS   rL   Úconfig_modeNr   r'   r   Úinstructionsc               ó   € V ^8„  d   QhRR/# )r&   r(   r   r   )r)   s   "r#   r*   ÚRuntimeMode.__annotate__A  s   € ÷ !ñ !�cñ !r"   c                	ó.   € V P                   P                  # r-   )r¶   r   ©Úselfs   &r#   ÚkindÚRuntimeMode.kind@  s   € à�|‰|× Ñ Ð r"   c               ó   € V ^8„  d   QhRR/# )r&   r(   r@   r   )r)   s   "r#   r*   r»   E  s   € ÷ 8ñ 8˜4ñ 8r"   c                	óP   € V P                   P                  \        P                  8H  # r-   )r¶   r   rš   r½   s   &r#   Ú	is_codingÚRuntimeMode.is_codingD  s   € à�|‰|× Ñ ¤N×$7Ñ$7Ñ7Ð7r"   c               ó    € V ^8„  d   QhRRRR/# r°   r   )r)   s   "r#   r*   r»   H  s   € ÷ )ñ )Ð(@ð )ÐL_ñ )r"   c                ón   € V P                   R8w  g   V P                  P                  f   R# \        V4      # )zïToolset list (only under ``focus``), or ``None`` to keep the platform default. Callers
apply it only when the user hasn't pinned a selection (``--toolsets``, ``HERMES_TUI_TOOLSETS``).
*config* None lists MCP servers from the user's config.r   N)r¸   r¶   r   r®   )r¾   r;   s   &&r#   Útoolset_selectionÚRuntimeMode.toolset_selectionH  s/   € ð ×Ñ˜wÔ&¨$¯,©,×*>Ñ*>Ò*FÙÜ  Ó(Ð(r"   c               ó    € V ^8„  d   QhRRRR/# )r&   Úworkspace_blockr   r(   ú&tuple[list[str], list[str], list[str]]r   )r)   s   "r#   r*   r»   P  s#   € ÷ Bñ BÈ-ð Bð  dJñ Br"   c                ó  € V P                   '       g   . . . 3# . pV P                  P                  '       d   V P                  P                  pVe"   RV9  d   VP                  \        \
        4      p\        V P                  4      pVe   V R\        V,          ^,           2pVP                  V4       Vf   \        V P                  4      MTpV P                  '       d   RV P                   2.M. pY6'       d   V.V3# . V3# )ui  Return (prefix, workspace, trailing) posture blocks in the historical flat order â€”
brief, snapshot, operator instructions â€” so prompt assembly can put a cache boundary
before the snapshot without changing persisted bytes. The brief carries the model-family
edit-format nudge (one cached string); ``valid_tool_names`` drops the ``todo_list``
sentence when that tool isn't loaded; operator instructions ride their own block so
the brief stays byte-stable. ``workspace_block`` replays a snapshot the caller already
pinned at session start (``""`` = no workspace) instead of re-running the git probe;
``None`` probes.Ú	todo_listÚ
z%Operator instructions (from config):
)rÃ   r¶   r   r
   Ú_TODO_SENTENCEÚ_NO_TODO_SENTENCEr9   r'   r   r�   Úbuild_coding_workspace_blockrS   r¹   )r¾   Úvalid_tool_namesrÊ   ÚprefixÚbriefr6   Ú	workspaceÚtrailings   &&&     r#   Úsystem_prompt_partsÚRuntimeMode.system_prompt_partsP  sï   € ð �~�~ˆ~Ø�r˜2�:ÐØˆØ�<‰<× × Ð Ø—L‘L×)Ñ)ˆEØÒ+°ÐCSÔ0SØŸ™¤nÔ6GÓH�Ü" 4§:¡:Ó.ˆFØÒ!Ø ˜' Ô$9¸&Õ$AÀ!Õ$DÐ#EÐF�Ø�M‰M˜%Ô Ø>MÒ>UÔ0°·±Ô:Ð[jˆ	ØUY×Uf×UfÐUfÐ<¸T×=NÑ=NÐ<OÐPÑQÐlnˆØ¦i˜	�{¸ÐAÐA°R¸ÐAÐAr"   c               ó   € V ^8„  d   QhRR/# )r&   r(   r    r   )r)   s   "r#   r*   r»   h  s   € ÷ 0ñ 0˜yñ 0r"   c                ó8   € V P                  4       w  rp. VOVOVO# )z4Posture blocks as one flat list in historical order.)r×   )r¾   rÓ   rÕ   rÖ   s   &   r#   Úsystem_blocksÚRuntimeMode.system_blocksh  s*   € à&*×&>Ñ&>Ó&@Ñ#ˆ˜8Ø/�Ð/˜)Ð/ hÐ/Ð/r"   c               ó   € V ^8„  d   QhRR/# )r&   r(   úfrozenset[str]r   )r)   s   "r#   r*   r»   m  s   € ÷ @ñ @¨.ñ @r"   c                óš   € V P                   '       d   V P                  R8w  d   \        4       # \        V P                  P                  4      # )zÝSkill categories to demote to names-only in the skill index. Gated on ``focus``
like the toolset collapse (index changes under ``auto`` proved too surprising).
Demoted, never hidden: pruning caused silent capability loss.r   )rÃ   r¸   Ú	frozensetr¶   r   r½   s   &r#   r   Ú$RuntimeMode.compact_skill_categoriesm  s7   € ð �~�~ˆ~ ×!1Ñ!1°WÔ!<Ü“;ÐÜ˜Ÿ™×>Ñ>Ó?Ð?r"   r   r-   )NN)r   r   r   r   r   r    r¸   r'   r¹   Úpropertyr¿   rÃ   rÇ   r×   rÛ   r   r!   r   r"   r#   rµ   rµ   1  sy   ‡ ñ&ð ÓØƒLØ	ƒIØ€K�ÓØ€Eˆ=ÓØ€L�#Óàô!ó ð!ð ô8ó ð8÷)÷Bõ00÷
@ñ @r"   rµ   r—   rS   r;   r'   c          
     ó,   € V ^8„  d   QhRRRRRRRRRR	/# )
r&   r—   r   rS   rT   r;   r<   r'   r(   rµ   r   )r)   s   "r#   r*   r*   v  s6   € ÷ ñ ØðØ,@ðØQiðàðð ñr"   c           	     óh  € \        V4      p\        V4      p\        VRRRR7      p\        V\        \
        34      '       d   TMT;'       g    R.pRP                  R V 4       4      p\        \        YP;'       g    RP                  4       P                  4       V4      T ;'       g    RVVVVR7      # )uX  Resolve the operating posture once (a handful of ``stat`` calls) â€” the single entry
point every domain should call; the result is safe to hold for the session. ``model``
only steers edit-format guidance; ``agent.coding_instructions`` (str or list) becomes
the trailing block so a user can pin workflow rules without editing the shipped brief.Úcoding_instructionsr   FrM   rÎ   c              3  ó–   "  € T F?  p\        V4      P                  4       '       g   K$  \        V4      P                  4       x € KA  	  R # 5ir-   )r   rO   )r.   Úitems   & r#   r1   Ú'resolve_runtime_mode.<locals>.<genexpr>‚  s.   é € ÐV¹5°4ÄCÈÃIÇOÁO×DUÔ.œS ›YŸ_™_×.Ð.»5ùs
   ‚!A	¨!A	)r¶   r·   rS   r¸   r'   r¹   )r\   rQ   rH   Ú
isinstanceÚlistÚtupleÚjoinrµ   r�   rO   r3   )	r—   rS   r;   r'   Úresolved_cwdr–   rP   r4   r¹   s	   $$$$     r#   Úresolve_runtime_moderî   v  s    € ô   Ó$€LÜ˜Ó€DÜ
˜fÐ&;¸RÈ%Ô
P€CÜ˜c¤D¬% =×1Ò1‰C¸¿	¸	¸r°{€EØ—9‘9ÑV¹5ÓVÓV€LÜÜ §~ ~°2×&<Ñ&<Ó&>×&DÑ&DÓ&FÈÓUØ—�˜BØØØØ!ôð r"   c               ó(   € V ^8„  d   QhRRRRRRRR/# ©	r&   r—   r   rS   rT   r;   r<   r(   r@   r   )r)   s   "r#   r*   r*   �  s5   € ÷ Uñ U =ð UÐ>Rð UÐc{ð Uð  HLñ Ur"   c                ó0   € \        WVR7      P                  # )z>Whether Hermes should operate in its coding posture right now.©r—   rS   r;   )rî   rÃ   rò   s   $$$r#   Úis_coding_contextró   �  s   € ä¨À6ÔJ×TÑTÐTr"   c               ó(   € V ^8„  d   QhRRRRRRRR/# rð   r   )r)   s   "r#   r*   r*   ”  s5   € ÷ lñ l Mð lÐ?Sð lÐd|ð lð  IMñ lr"   c                óH   € \        V4      R8H  ;'       d    \        WVR7      # )z¦Whether *cwd* selects the coding posture's toolsets (``focus`` and a code workspace), without
building them; ``focus_toolsets`` builds them once the decision is made.r   rò   )rQ   ró   rò   s   $$$r#   Úin_focus_workspacerö   ”  s%   € ô ˜Ó 7Ñ*×kÐkÔ/@È(ÐdjÔ/kÐkr"   c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r&   r—   r   rS   rT   r;   r<   r(   r±   r   )r)   s   "r#   r*   r*   š  s5   € ÷ eñ e -ð eÐ=Qð eÐbzð eð  GZñ er"   c                ó^   € \        V4      R8w  d   R# \        WVR7      P                  V4      # )zPToolset selection for the coding posture (``None`` unless ``focus`` and active).r   Nrò   )rQ   rî   rÇ   rò   s   $$$r#   Úcoding_selectionrù   š  s+   € ä�FÓ˜wÔ&ÙÜ¨À6ÔJ×\Ñ\Ð]cÓdÐdr"   rÒ   rÊ   c               ó0   € V ^8„  d   QhRRRRRRRRRRR	R
/# )r&   r—   r   rS   rT   r;   r<   r'   rÊ   r(   rË   r   )r)   s   "r#   r*   r*   ¡  sF   € ÷ hñ hØðhØ,@ðhØQiðhàðhàIVðhð ,ñhr"   c                ó@   € \        WW#R7      pVP                  WER7      # )z¦Return coding prefix, workspace snapshot, and trailing guidance.  ``workspace_block``
replays the caller's pinned session-start snapshot instead of probing git again.)r—   rS   r;   r'   )rÒ   rÊ   )rî   r×   )r—   rS   r;   r'   rÒ   rÊ   r–   s   $$$$$$ r#   Úcoding_system_prompt_partsrü   ¡  s%   € ô  ¨À6ÔW€DØ×#Ñ#Ð5EÐ#ÓgÐgr"   c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r&   r—   r   rS   rT   r;   r<   r(   rÞ   r   )r)   s   "r#   r*   r*   «  s9   € ÷ fñ f°ð fÐL`ð fð  rJð fð  Vdñ fr"   c                ó8   € \        WVR7      P                  4       # )zTSkill categories the active posture demotes to names-only (empty outside ``focus``).rò   )rî   r   rò   s   $$$r#   Úcoding_compact_skill_categoriesrÿ   «  s   € ä¨À6ÔJ×cÑcÓeÐer"   c               ó$   € V ^8„  d   QhRRRRRR/# )r&   rS   r   Úargsr   r(   r   )r)   s   "r#   r*   r*   ²  s&   € ÷ Sñ Sˆdð S˜3ð S 3ñ Sr"   c                ó@   € \        RR\        V 4      .VO\        R7      # )u  ``git -C <cwd> <args>`` â†’ stripped stdout, or ``""`` on any failure. bounded_git_probe
bounds post-kill cleanup on Windows â€” plain ``subprocess.run(timeout=...)`` deadlocked
when a killed git left a suspended descendant holding the pipe handles.

See #66037.
Úgitú-C)Útimeout)r   r   Ú_GIT_TIMEOUT)rS   r  s   &*r#   Ú_gitr  ²  s!   € ô ˜e T¬3¨s«8Ð;°dÐ;Ä\ÔRÐRr"   c               ó    € V ^8„  d   QhRRRR/# )r&   Ú	porcelainr   r(   z%tuple[dict[str, str], dict[str, int]]r   )r)   s   "r#   r*   r*   ¼  s   € ÷ ñ ˜Sð Ð%Jñ r"   c                ó  € / pR^ R^ R^ R^ /pV P                  4        EF_  pVP                  R4      '       d6   VP                  ^R7      pVR,          W^,          P                  R4      &   KP  VP                  R4      '       dJ   VP                  4       pV^,          P	                  R4      V^,          P	                  R	4      uVR
&   VR&   K°  VP                  R4      '       d[   VP                  ^R7      ^,          pVR;;,          V^ ,          R8g  ,          uu&   VR;;,          V^,          R8g  ,          uu&   EK!  VP                  R4      '       g   EK;  Y#^ ,          R8X  d   RMR;;,          ^,          uu&   EKb  	  W3# )zAParse ``git status --porcelain=2 --branch`` into branch + counts.ÚstagedÚmodifiedÚ	untrackedÚ	conflicts)Úmaxsplitzbranch.z# branch.abÚ+Ú-ÚaheadÚbehindr‚   Úu)z# branch.headz# branch.upstreaméÿÿÿÿ)z1 z2 )zu z? )Ú
splitlinesrŒ   ÚsplitÚremoveprefixÚlstrip)r	  ÚbranchÚcountsÚlineÚpartsÚxys   &     r#   Ú_parse_statusr  ¼  s<  € à€FØ˜˜: q¨+°q¸+ÀqÐI€FØ×$Ñ$×&ˆØ�?‰?ÐA×BÒBØ—J‘J¨�JÓ*ˆEØ7<¸RµyˆF˜•8×(Ñ(¨Ó3Ó4Ø�_‰_˜]×+Ò+Ø—J‘J“LˆEØ05°aµ·±ÀÓ0DÀeÈAÅhÇoÁoÐVYÓFZÐ-ˆF�7‰O˜V HÓ-Ø�_‰_˜\×*Ò*Ø—‘ Q�Ó'¨Õ*ˆBØ�8×  1¥¨¡Õ,ÓØ�:× " Q¥%¨3¡,Õ.ÖØ�_‰_˜\×*Õ*Ø q¥'¨S¤.‘;°k×BÀaÕGÖBñ 'ð ˆ>Ðr"   c               ó    € V ^8„  d   QhRRRR/# )r&   r‡   r   r(   r   r   )r)   s   "r#   r*   r*   Ð  s   € ÷ ñ �dð ˜sñ r"   c                óÄ   €  V P                  4       '       d$   V P                  4       P                  \        8”  d   R# V P	                  RRR7      #   \
         d     R# i ; i)uK   Read a small text file, or ``""`` â€” never raises, never reads huge files.r   z	utf-8-sigr
   )ÚencodingÚerrors)r†   ÚstatÚst_sizeÚ_MAX_FACT_FILE_BYTESÚ	read_textro   )r‡   s   &r#   Ú_read_smallr(  Ð  sN   € ðØ�|‰|�~Š~ §¡£×!4Ñ!4Ô7KÔ!KÙØ�~‰~ {¸9ˆ~ÓEÐEøÜô Úðús   ‚A ˜#A ½A ÁAÁAc                  óD   € ] tR tRt$ RtR]R&   R]R&   R]R&   R]R&   RtR	# )
ÚProjectFactsiÚ  ua   Structured project facts â€” exposed so non-prompt consumers (desktop verify UI) don't re-detect.r    Ú	manifestsÚpackage_managersÚverify_commandsÚcontext_filesr   N)r   r   r   r   r   r    r!   r   r"   r#   r*  r*  Ú  s   ‡ ákàÓØÓØÓØ×r"   r*  c               ó    € V ^8„  d   QhRRRR/# )r&   r€   r   r(   r*  r   )r)   s   "r#   r*   r*   ä  s   € ÷ ñ ˜tð ¨ñ r"   c           
     ó®  a aaa€ . pS R,          R,          P                  4       '       d   VP                  R4       S R,          P                  4       '       d…    \        P                  ! \	        S R,          4      ;'       g    R4      P                  R4      ;'       g    / o\        V 3R l\         4       R4      oVP                  VV3R l\         4       4       S R	,          P                  4       '       g   R
\	        S R,          4      9   d   VP                  R4       \	        S R,          4      oVP                  V3R l\         4       4       \        \         Uu. uF0  q"\        9  g   K  S V,          P                  4       '       g   K.  VNK2  	  up\        \         P#                  V 3R l. \$        O\        O 4       4      4      \        \         P#                  V4      4      R\&         \         Uu. uF$  pS V,          P                  4       '       g   K"  VNK&  	  upR7      #   \        P                  \        3 d    / o EL¦i ; iu upi u upi )z^Detect manifests, package manager(s), verify commands, context files (single source of truth).Úscriptszrun_tests.shzscripts/run_tests.shúpackage.jsonz{}c              3  ój   <"  € T F(  w  rSV,          P                  4       '       g   K$  Vx € K*  	  R # 5ir-   ©r†   ©r.   ÚlockÚpmr€   s   &  €r#   r1   Ú'detect_project_facts.<locals>.<genexpr>î  s$   øé € ÐR©™X˜T¸4À$½;×:OÑ:O×:Q—b’b«ùó   ƒ!3©
3Únpmc              3  óB   <"  € T F  qS9   g   K  S R V 2x € K  	  R# 5i)z run Nr   )r.   r   Újs_pmr1  s   & €€r#   r1   r8  ï  s$   øé € Ð[¹°ÐSZÉ?Ô+˜˜˜u T FÕ+»ùs   ƒ�z
pytest.iniz[tool.pytestúpyproject.tomlÚpytestÚMakefilec              3  óÎ   <"  € T FZ  pS'       g   K  \         P                  ! R \         P                  ! V4       R2S\         P                  4      '       g   KS  RV 2x € K\  	  R# 5i)Ú^z\s*:zmake N)ÚreÚsearchÚescapeÚ	MULTILINE)r.   r   Úmakefiles   & €r#   r1   r8  ó  sM   øé € ð Ù#2˜4Üô 	ÜŸ	š	 Q¤r§y¢y°£Ð&7°tÐ"<¸hÌÏÉ×Uô 	ˆ%�ˆv�£?ùs   ƒ
A%’AA%ÁA%c              3  ój   <"  € T F(  w  rSV,          P                  4       '       g   K$  Vx € K*  	  R # 5ir-   r4  r5  s   &  €r#   r1   r8  ù  s(   øé € ð ,
Ù?‘8�4ÀDÈ4ÅK×CXÑCX×CZ�BŠBÓ?ùr9  N)r+  r,  r-  r.  )r†   r�   ÚjsonÚloadsr(  rG   ÚJSONDecodeErrorÚAttributeErrorrh   Ú_JS_LOCKFILESÚextendÚ_VERIFY_TARGETSr*  r{   Ú_CONTEXT_FILESrê   ÚdictÚfromkeysÚ_PY_LOCKFILESÚ_MAX_VERIFY_COMMANDS)r€   ÚverifyÚmÚcr<  rF  r1  s   f   @@@r#   Údetect_project_factsrW  ä  sÎ  û€ à€FØˆyÕ˜>Õ)×2Ñ2×4Ò4Ø�‰Ð,Ô-Øˆ~Õ×&Ñ&×(Ò(ð	Ü—j’j¤¨T°NÕ-BÓ!C×!KÐ!KÀtÓL×PÑPÐQZÓ[×aÐaÐ_aˆGô ÔR­ÓRÐTYÓZˆØ�‰Õ[½Ó[Ô[Øˆ|Õ×$Ñ$×&Ò&¨.¼KÈÐO_ÕH_Ó<`Ô*`Ø�‰�hÔÜ˜4 *Õ,Ó-€HØ
‡M�Mô Ý#2óô ô Ý.ÓcÑ.˜¼>Ñ2I”1ÈtÐVWÍx×N`ÑN`×Nb—1�1Ñ.ÑcÜœdŸm™mô ,
Ø?¤Ð?´Ñ?ó,
ó 
ó ô œTŸ]™]¨6Ó2Ó3Ð4IÔ5IÐJÝ"0ÓI¡.˜Q°T¸AµX×4FÑ4F×4H—q�q¡.ÑIôð øô ×$Ñ$¤nÐ5ô 	Ø‹Gð	üò dùò
 Js<   Á(H) ÂH) Â H) Å IÅ1IÆIÇ7IÈIÈ)I
É	I
c               ó    € V ^8„  d   QhRRRR/# )r&   rS   rT   r(   z%tuple[Optional[Path], Optional[Path]]r   )r)   s   "r#   r*   r*     s   € ÷ 8ñ 8Ð.ð 8Ð3Xñ 8r"   c                óZ   € \        V 4      p\        V4      pY";'       g    \        V4      3# )zR(git_root, workspace_root) for *cwd*; workspace root is git root else marker root.)r\   rk   r~   )rS   Úresolvedrœ   s   &  r#   Ú_workspace_rootsr[    s,   € ä˜CÓ €HÜ˜Ó"€HØ×7Ð7¤¨hÓ!7Ð7Ð7r"   c               ó    € V ^8„  d   QhRRRR/# )r&   rS   rT   r(   r<   r   )r)   s   "r#   r*   r*     s   € ÷ ñ Ð/ð Ð;Sñ r"   c           
     ó¸   € \        V 4      w  rVf   R# \        V4      pR\        V4      RVP                  RVP                  RVP
                  RVP                  /# )uZ   Structured project facts for ``cwd`` (desktop verify UI) â€” ``None`` outside a workspace.Nr€   r+  ÚpackageManagersÚverifyCommandsÚcontextFiles)r[  rW  r   r+  r,  r-  r.  )rS   Ú_r€   Úfs   &   r#   Úproject_facts_forrc    s[   € ä˜sÓ#�G€AØ‚|ÙÜ˜TÓ"€Aà”�D“	Ø�Q—[‘[Ø˜1×-Ñ-Ø˜!×+Ñ+Ø˜Ÿ™ðð r"   uR   Workspace (snapshot at session start â€” re-check with `git` before acting on it):c               ó    € V ^8„  d   QhRRRR/# )r&   rS   rT   r(   r   r   )r)   s   "r#   r*   r*     s   € ÷ 6ñ 6Ð&:ð 6Àcñ 6r"   c                ó®  € \        V 4      w  rVf   R# \        RV 2.pVEe   ^ RIHp V! V4      pVf   RM \	        RR\        V4      RRR.\        VR	7      p\        V4      w  rxVP                  R
R4      p	V	R8X  d   VP                  R4       MƒV	'       d|   VP                  RR4      VP                  RR4      rºVP                  R4      '       d   RVR,           2MRpV'       d   W«3R-8w  d
   RV
 RV R2MRpVP                  RV	 V V 24       \        VRR4      \        VRR4      rþV'       di   V'       da   \        V4      P                  4       \        V4      P                  4       8w  d,   V	'       d   V	R8w  d   RV	 2MRpVP                  RV R24       VP                  4        UUu. uF  w  ppV'       g   K  V RV 2NK  	  pppTP                  RV'       d   RP                  V4      MR 24       \        VR R!R"4      pV'       d*   VP                  R#.R$ VP!                  4        4       O4       \#        V4      pVP$                  '       dj   VP&                  '       d    R%R&P                  VP&                  4       R2MRpVP                  R'RP                  VP$                  R(,          4       V 24       VP(                  '       d.   VP                  R)R*P                  VP(                  4       24       VP*                  '       d.   VP                  R+RP                  VP*                  4       24       R,P                  V4      # u uppi ).u§   Workspace snapshot for the system prompt (empty outside a workspace): git state when
in a repo, plus project facts â€” so marker-only (non-git) projects still get one.r   z- Root: )Únoninteractive_repo_git_envr  r  Ústatusz--porcelain=2z--branch)r  ÚenvÚheadz
(detached)z- Branch: (detached HEAD)r  Ú0r  Úupstreamu    â†’ z (ahead z	, behind Ú)z
- Branch: z	rev-parsez	--git-dirz--git-common-dirz on branch z- Worktree: linked, isolatedz¤ (git state shared with primary tree). Changes here do not affect the main working tree or other agents; commit and push your changes, and open a PR if appropriate.Ú z
- Status: z, ÚcleanÚlogz-3z--pretty=%h %sz- Recent commits:c              3  ó,   "  € T F
  pR V 2x € K  	  R# 5i)z    Nr   )r.   rV  s   & r#   r1   Ú/build_coding_workspace_block.<locals>.<genexpr>F  s   é € Ð0YÑEXÀ°4¸°sµÓEXùs   ‚z (Ú/z- Project: :Né   Nz
- Verify: z; z- Context files: rÎ   )rj  rj  )r[  ÚWORKSPACE_BLOCK_HEADERÚhermes_cli._subprocess_compatrf  r   r   r  r  rG   r�   r  r   rg   r4   rì   rM  r  rW  r+  r,  r-  r.  )rS   rœ   r€   Úlinesrf  Ú
status_envrg  r  r  ri  r  r  rk  ÚabÚgit_dirÚ
common_dirÚ	on_branchÚlabelr/   ÚdirtyÚrecentrb  Úmanagerss   &                      r#   rÑ   rÑ     sù  € ô & cÓ*�N€HØ‚|ÙäØ
�4�&Ðð€Eð Óõ 	NÙ0°Ó6ˆ
Ø!Ò)‘Ô/@Ø�Dœ#˜d›) X¨À
ÐKÔUaÐgqô0sˆä& vÓ.‰ˆØ�z‰z˜& "Ó%ˆØ�<ÔØ�L‰LÐ4Õ5ßØ"ŸJ™J w°Ó4°f·j±jÀÈ3Ó6O�6Ø:@¿*¹*ÀZ×:PÒ:P˜ &¨Õ"4Ð!5Ñ6ÐVXˆHß9AÀuÀoÐYcÔFc�8˜E˜7 )¨F¨8°1Ñ5ÐikˆBØ�L‰L˜: d V¨H¨:°b°TÐ:Ô;ô # 4¨°kÓBÄDÈÈ{Ð\nÓDo�ß—z¤d¨7£m×&;Ñ&;Ó&=ÄÀjÓAQ×AYÑAYÓA[Ô&[ß04¸ÀÔ9M˜+ d VÑ,ÐSUˆIØ�L‰LØ.¨y¨kð :&ð &ô'ð
 17·±´ÔD±¡H E¨1Ä!”�A�3�a˜�w“±ˆÑDØ�‰�z·e $§)¡)¨EÔ"2ÀÐ!IÐJÔKä�d˜E 4Ð)9Ó:ˆßØ�L‰LÐ-ÐZÑ0YÀV×EVÑEVÔEXÓ0YÐZÔ[ä˜TÓ"€AØ‡{‡{€{Ø;<×;M×;MÐ;M�R˜Ÿ™ ×!3Ñ!3Ó4Ð5°QÑ7ÐSUˆØ�‰�{ 4§9¡9¨Q¯[©[¸­_Ó#=Ð">¸x¸jÐIÔJØ××ÐØ�‰�z $§)¡)¨A×,=Ñ,=Ó">Ð!?Ð@ÔAØ‡‡€Ø�‰Ð(¨¯©°1·?±?Ó)CÐ(DÐEÔFØ�9‰9�UÓÐùó Es   Æ0MÇM>   r   ÚacpÚcliÚtuiÚdesktop)r=  zsetup.pyz	setup.cfgzrequirements.txtr2  ztsconfig.jsonz	deno.jsonz
Cargo.tomlzgo.modzpom.xmlzbuild.gradlezbuild.gradle.ktsÚGemfilezcomposer.jsonzmix.exszpubspec.yamlzCMakeLists.txtr?  Ú
Dockerfileú	AGENTS.mdú	CLAUDE.mdú.cursorrules)r†  r‡  rˆ  >   ÚdistÚvenvÚbuildÚtargetÚvendorÚ__pycache__Únode_modulesrb   ú.nextú.venvú.turbo))zuv.lockÚuv)zpoetry.lockÚpoetry)zPipfile.lockÚpipenv))zpnpm-lock.yamlÚpnpm)z	bun.lockbÚbun)zbun.lockr—  )z	yarn.lockÚyarn)zpackage-lock.jsonr:  )ÚtestÚtestsÚlintÚ	typecheckÚcheckr‹  Úfmtr)   i   ))ÚgptÚcodexuÈ   - Edit format: author new files with `write_file`; for edits to existing code use `patch` with `mode='patch'` (V4A diff) â€” including single-file edits. It's the edit format you handle most reliably.))ÚclaudeÚsonnetÚopusÚhaikuÚgeminiÚgemmaÚdeepseekÚqwenÚkimiÚglmÚgrokÚhermesÚllamaÚmistralÚdevstralÚminimaxuð   - Edit format: author new files with `write_file`; for edits to existing code prefer `patch` in `mode='replace'` â€” match a unique snippet and swap it. Reach for `mode='patch'` (V4A) only when an edit genuinely spans several files at once.)ÚappleÚcommunicationÚcookingÚcreativeÚemailÚfinanceÚgamingÚgifsÚhealthÚmediaÚmusicznote-takingÚproductivityÚshoppingz
smart-homezsocial-mediaÚtravelÚyuanbao)r   ÚstrictÚlean)r   ÚtrueÚyesÚ1Úalways)r   ÚfalseÚnorj  Úneverr-   )JÚ__conditional_annotations__r   Ú
__future__r   rH  ÚloggingrZ   rB  ry   Údataclassesr   Úpathlibr   Útypingr   r   ru  r   Ú	getLoggerr§   r¬   r›   r{   rO  rà   r‰   r‹   r…   rR  rL  rN  rS  r&  r  r   r    ÚCODING_AGENT_GUIDANCErÏ   rÐ   Ú_NON_CODING_SKILL_CATEGORIESrP  rQ  rN   r   r™   rš   r9   rH   rQ   r\   rk   rq   r~   r”   r�   r©   r®   r³   rµ   rî   ró   rö   rù   rü   rÿ   r  r  r(  r*  rW  r[  rc  rt  rÑ   )rÉ  s   @r#   Ú<module>rÒ     s—  øðô	õ #ã Û Û 	Û 	Û Ý !Ý ß  å ;à	×	Ò	Ð2Ó	3€à€ò  DÐ ðÐ ð <€ñ ð Ø	ðØðØðØ"ðØ$*ðØ,1ðØ39ðØ;AðØCIðØKPðØRWðØY`ðØbgðØioðàðàðàðà!ðà#'ðà).ðà06ðà8>ðà@EðàGOðàQUðàW\ðà^eðàglðàntðð ðð ðð ðð #ðð %+ðð -3ðð 5>ðð @Dðð FKðð MRðð TZðð \bðð diðó Ð ñ
 !ò "ó Ð ð Ð àZ€ð€ð \€ØÐ Ø!Ð Ø€ð ð ð ð ðAÐ Ð=ó ð(.ð ðd2ð ð VÐ ð Ð ðØ
‡m�mÐ/°Ó9ðà
‡m�mÐ8¸$Ó?ðð ‡m�mÐ8¸%Ó@ð€ñ �$Ô÷	3ð 	3ó ð	3ñ ! iÔ0€ÙØ	˜>Ð4IÐV^Ø9ô€õõEõ?õ!õYõ
õõ õ4õ$	õ;õ
Rñ �$Ô÷A@ð A@ó ðA@ðHØ!%ðØCGðØlpðà÷ð2U°4ð UÐUYð Uð  C÷ Uð
l°Dð lÐVZð lð  @D÷ lðe°$ð eÐTXð eð  ~B÷ eðhØ!%ðhØCGðhØlpðhàðhà26ðhàY]÷hðfÀð fÐcgð fð  MQ÷ fõSõõ(ñ �$Ô÷ð ó ðõõ:8÷ð nÐ ÷6ñ 6r"   