+
    jHàj#ˆ  ã                  ó�  a€ 0 t $ R t^ RIHt ^ RIt^ RIt^ RIHt ^ RIH	t	 ^ RI
Ht ^ RIHt ^ RIHt ^ RIHt ]P$                  ! ]4      tR	 R
 ltRRRRRRRRRRRRRRRR/tR]R&   R R lt]	! RR 7       ! R! R"4      4       t]! 0 ERŸm4      tR&]R'&   . ]! R(R)RRR#R(R*7      N]! R+R,RER R-R%R+R.7      N]! R/R0RRR1R27      N]! R3R4RRR5R67      N]! R7R8RRR5R67      N]! R9R:RRR;7      N]! R<R=RR>R?7      N]! R@RAR4      N]! RBRCRRRDER¡RE7      N]! RFRGRRHR?7      N]! RIRJRR-R?7      N]! RKRLRRMRRNRO7      N]! RPRQRER¢RRRS7      N]! RTRURRRVER£R5RW7      N]! RXRYRER¤RZRS7      N]! R[R\RR]R?7      N]! R^R_RRER¥R`R5Ra7      N]! RbRcRRRdRe7      N]! RfRgRRRhRe7      N]! RiRjRR%RiRk7      N]! RlRmRRR#Rn7      N]! RoRpRRRqR#Rr7      N]! RsRtRRRuR#Rr7      N]! RvRwRRRxR#Rr7      N]! RyRzRR{R#R|7      N]! R}R~RRR#R|7      N]! R€R�RER¦R#R‚7      N]! RƒR„RER§RR…ER¨R†7      N]! R‡RˆRER©R‰ERªR#R‡RŠ7      N]! R‹RŒRER«R{R#R‹R.7      N]! R�RŽRR�R�R#R�R‘7      N]! R’R“RER¬R”ER­R#R—7      N]! R˜R™RRšR?7      N]! R›RœRR�R?7      N]! RžRŸRER®R R�R#RžR¡7      N]! R¢R£RR¤R?7      N]! R¥R¦RR{R$R¥R§7      N]! R¨R©RRªR#R|7      N]! R•R«RR#R¬7      N]! R­R®RR¯ER¯R#R­R­R°7      N]! RR±RER°R²ER±R#R—7      N]! R³R´R4      N]! RµR¶RR#RµR·7      N]! R¸R¹RRER²R5Rº7      N]! R–R»RR-R�R¼7      N]! R½R¾R4      N]! R¿RÀRRR;7      N]! RÁRÂRRÃR$RÁRÄRÅ7      N]! RÆRÇRER³RÈR$RÆR.7      N]! RÉRÊRR-RNR¼7      N]! RËRÌRRER´R5RÍ7      N]! RÎRÏRRRÐERµRÑ7      N]! RÒRÓRRRÐERµER¶RÔ7      N]! RÕRÖRR×ER·RØ7      N]! RÙRÚRRRÛR#R5RÜ7      N]! RÝRÞRRRÐERµRÑ7      N]! RßRàRRÐERµR#R5Rá7      N]! RâRãRR#R¬7      N]! RäRåRRæER¸RØ7      N]! RçRèRRéER¹RØ7      N]! RêRëRRìERºRíRî7      N]! RïRðRRR-RNRñ7      N]! RòRóRRRôRõP9                  ]4       Rö2]R5RW7      N]! R÷RøRRùER»RúRî7      N]! RûRüRRRÐERµRÑ7      N]! RýRþRRÿER¼R#R5Rá7      N]! ER ERRERER½R#ER RNER7      N]! ERERRERRRNRO7      N]! ERERRRR5R67      N]! ER	ER
RRERER¾ER¿ER7      N]! ERERRERERÀRØ7      N]! ERERRERER7      N]! ERERRRERERÁRÑ7      N]! ERERRRERÂERER7      N]! ERERRERR?7      N]! ERERRERR?7      N]! ER ER!RRER"ERÃR5RW7      N]! ER#ER$RERÄER%ERÅER&7      N]! ER'ER(RERÆER)RS7      N]! ER*ER+RER"ERÇRíRî7      N]! ER,ER-RER"ERÈR#RíRá7      N]! ER.ER/RRR5R67      N]! ER0ER1RERÉRíER27      N]! ER3ER4RERÊRíER27      N]! ER5ER6RRER7ERËRÑ7      N]! RER8RRR5R67      N]! ER9ER:RRER;R#ER<ER=7      N]! ER>ER?RR#ER@ERAERB7      N]! ERCERDRRR#ERE7      N]! ERFERGRRR#R5ERH7      N]! ERIERJRERKR?7      N]! ERLERMRRERÌERN7      N]! EROERPRR#ERQERR7      N]! ERSERTR4      N]! ERUERVRERWRíERX7      N]! ERYERZRRERÍR5RÍ7      N]! ER[ER\RRER]R27      N]! ER^ER_RRER`R5ERa7      N]! ERbERcRRR5R67      N]! ERdEReRRERfR5ERa7      N]! ERgERhRR#R5ERR7      N]! ERiERjRERÎR#ERiERk7      N]! ERlERmRERnR?7      N]! ERoERpRRERÏERqR5Ra7      NtERr]ERs&   ERÐtERt ERu ltERv ERw lt ERx ERy lt!] U Uu/ uF$  q PD                  .V PF                  O F  qV bK  	  K&  	  upp t$ERz]ER{&   ER| ER} lt%ER~ ER lt&ER€ ER� lt'ER‚ ERƒ lt(ER„](ER…]'/t)] Uu/ uF7  q"PT                  '       g   K  ER†VPD                   2]+! VPT                  4      bK9  	  upt,ER‡]ERˆ&   ]PZ                  ! ER‰4      t.] F„  t/]/P`                  '       d   ].Pc                  ]/P`                  4      MRt2]2'       g   K<  ER†]/PD                   2],9  g   KS  ]2Pg                  ^ 4      Pi                  Rõ4      ],ER†]/PD                   2&   K†  	  RERÑRERÒ/t5ERŠ]ER‹&   ]! ERŒ ] 4       4      t6R&]ER�&   ERŽ ER� lt7]! ER� ] 4       4      t8R&]ER‘&   ER’ ER“ lt9ER” ER• lt:ER– ER— lt;ERÓER˜ ER™ llt<ERÓERš ER› llt=ERœ ER� lt>ERž t?R# u upp i u upi (Ô  a!  Slash command registry for the Hermes CLI and gateway.

Every consumer -- CLI help, gateway dispatch, Telegram BotCommands, Slack
subcommand mapping, autocomplete -- derives from ``COMMAND_REGISTRY``. To add a
command, append a ``CommandDef``; to add an alias, set ``aliases=("short",)``.
)ÚannotationsN)ÚIterable)Ú	dataclass)ÚOptional)Úis_truthy_value©Út)ÚINDICATOR_STYLESc               ó$   € V ^8„  d   QhRRRRRR/# )é   ÚkeyÚstrÚdefaultÚreturn© )Úformats   "Ú8/home/ubuntu/.hermes/hermes-agent/hermes_cli/commands.pyÚ__annotate__r      s!   € ÷ .ñ .�Cð . #ð .¨#ñ .ó    c                ó,   € \        V 4      pW 8X  d   V# T# )zL``t(key)`` with *default* when no catalog (not even ``en``) carries the key.r   )r   r   Úvalues   && r   Ú
_localizedr      s   € äˆc‹F€EØ”lˆ7Ð-¨Ð-r   ÚSessionÚsessionÚConfigurationÚconfigurationÚInfoÚinfozTools & SkillsÚtools_skillsÚPluginsÚpluginsÚExitÚexitÚContextÚcontextzBackground & AutomationÚbackground_automationúdict[str, str]Ú_CATEGORY_SLUGSc               ó    € V ^8„  d   QhRRRR/# )r   Úcategoryr   r   r   )r   s   "r   r   r   &   s   € ÷ Pñ P˜Sð P Sñ Pr   c                ó^   € \         P                  V 4      pV'       d   \        RV 2V 4      # T # )zDLocalized label for a registry category / help sub-group identifier.zslash.category.)r'   Úgetr   )r)   Úslugs   & r   Úcategory_labelr-   &   s-   € ä×Ñ˜xÓ(€Dß=AŒ:˜¨ vÐ.°Ó9ÐOÀxÐOr   T)Úfrozenc                  óî   € ] tR t^,t$ RtR]R&   R]R&   R]R&   RtR]R&   RtR]R	&   RtR]R
&   Rt	R]R&   Rt
R]R&   RtR]R&   RtR]R&   RtR]R&   RtR]R&   RtR]R&   RtR]R&   RtR]R&   R R ltRtR# )Ú
CommandDefz%Definition of a single slash command.r   ÚnameÚdescriptionr)   ztuple[str, ...]ÚaliasesÚ Ú	args_hintÚsubcommandsFÚboolÚcli_onlyÚgateway_onlyNú
str | NoneÚgateway_config_gateÚrejectÚbusy_policyÚbusy_handlerÚexecuteÚargument_modeÚdesktopztuple[str, ...] | NoneÚdesktop_subcommandsc               ó   € V ^8„  d   QhRR/# )r   r   r   r   )r   s   "r   r   ÚCommandDef.__annotate__K   s   € ÷ Nñ N˜#ñ Nr   c                óJ   € \        RV P                   R2V P                  4      # )z\Localized description (``slash.<name>.description``); ``description`` is the English source.zslash.z.description)r   r1   r2   )Úselfs   &r   ÚdescribeÚCommandDef.describeK   s"   € ä˜F 4§9¡9 +¨\Ð:¸D×<LÑ<LÓMÐMr   r   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú__annotations__r3   r5   r6   r8   r9   r;   r=   r>   r?   r@   rA   rB   rG   Ú__static_attributes__r   r   r   r0   r0   ,   s¢   ‡ á/Ø
ƒIØÓØƒMØ!€Gˆ_Ó!Ø€IˆsÓØ#%€K�Ó%Ø€HˆdÓØ€L�$ÓØ&*Ð˜Ó*ð
  €K�ÓØ#€L�*Ó#ð €GˆZÓØ $€M�:Ó$à€GˆZÓð 37ÐÐ/Ó6÷Nñ Nr   r0   Údispatchr<   Úinterrupt_then_dispatchzfrozenset[str]ÚVALID_BUSY_POLICIESÚstartz0Acknowledge platform start pings without a reply)r9   r=   r>   Únewz0Start a new session (fresh session ID + history)z[name])r3   r5   r=   r>   Útopicz,Enable or inspect Telegram DM topic sessionsz[off|help|session-id])r9   r5   Úclearz$Clear screen and start a new sessionÚterminal)r8   rA   Úredrawz6Force a full UI repaint (recovers from terminal drift)ÚhistoryzShow conversation history)r8   Úsavez8Export the current conversation (bare /save shows usage)z"<json|md|html> [filename] [redact])r5   Úretryz(Retry the last message (resend to agent)Úpromptz<Compose your next prompt in $EDITOR (markdown), then send itz[initial text])r8   r5   r3   Úundoz.Back up N user turns and re-prompt (default 1)z[N]Útitlez#Set a title for the current sessionÚhandoffzGHand off this session to a messaging platform (Telegram, Discord, etc.)z
<platform>Úoptions)r5   r8   r@   Úbranchz[Branch the current session (new thread on Discord/Telegram/Slack/Matrix; --here stays here)z[--here] [name])r3   r5   Úworktreez3Show, list, create, or prune isolated git worktreesz#[new [name]|list|prune [--dry-run]])r8   r5   r6   rA   ÚcompresszhCompress conversation context (add 'here [N]' to keep recent N turns; --preview shows what would happen)z.[here [N] | focus topic | --preview|--dry-run]ÚrollbackzWList or restore filesystem checkpoints (restores keep your hand-edits; --all overrides)z[number] [--all]Úsnapshotz8Create or restore state snapshots of Hermes config/statez[create|restore <id>|prune])r8   r3   r5   rA   Úexportz?Export a profile (config, skills, theme) to a shareable archivez[profile] [-o output.tar.gz])r8   r5   Úimportz0Import a shared profile archive as a new profilez <archive.tar.gz> [--name <name>]Ústopz%Kill all running background processes)r=   r>   ÚdiscardzFDrop a turn lost when Hermes restarted so this chat's queue runs again)r9   r=   Úpausez>Pause new work globally (emergency stop); '/pause off' resumesz[reason | off])r9   r5   r=   Úapprovez#Approve a pending dangerous commandz[session|always]Údenyz;Deny a pending dangerous command (optionally with a reason)z[all] [reason]Úbgz-Run a prompt in a separate background sessionú<prompt>)r5   r=   ÚbtwzJAsk a side question about the current conversation without interrupting itz
<question>Úagentsz$Show active agents and running tasks)r3   r=   Újourneyz"Open the learning journey timelinez[list|delete <id>|edit <id>])r3   r8   r5   r6   ÚqueuezKQueue a prompt for the next turn, or list/edit/rm/move/clear queued promptsz3[<prompt>|list|edit N <prompt>|rm N|move A B|clear])r3   r5   r6   r=   r>   Ústeerz>Inject a message after the next tool call without interruptingÚgoalz?Set a standing goal Hermes works on across turns until achievedzq[text | -- <text> | draft <text> | show | gate add <cmd> | pause | resume | clear | status | wait <pid> | unwait]Úmixed)r5   r@   r=   r>   Ú	heartbeatz<Set a recurring prompt that re-enters this session when idlez=[every <interval> <prompt> | status | pause | resume | clear]ÚstatusÚresume)r3   r5   r6   r=   Úrefinez>Review this conversation now and save lessons to memory/skillsz[focus instructions]ÚreviewzPSpawn an independent subagent to review the work just discussed (PR, code, docs)z[review instructions]Úloopz7Re-run a prompt on a recurring interval in this sessionzV[interval] <prompt> [--times N] [--until <condition>] | status | pause | resume | stop)r3   r5   r@   r=   r>   ÚplanzQWrite a markdown implementation plan to .hermes/plans/ without executing anythingz[task]ÚmoazTRun one prompt through the default Mixture of Agents preset, then restore your model)r5   r=   r>   Úsubgoalz/Add or manage extra criteria on the active goalz[text | remove N | clear]z,Show session, model, token, and context info)r=   ÚegresszShow Docker egress proxy statusz[status])r5   r6   r=   r>   r?   ziShow detailed context window view with usage gauge, category breakdown, compression stats, and throughputz[all]Úwhoamiz-Show your slash command access (admin / user)Úprofilez+Show active profile name and home directory)r=   r?   Úsethomez!Set this chat as the home channel)r9   r3   rA   z!Resume a previously-named session)r5   r@   Úsessionsz#Browse and resume previous sessionsÚconfigzShow current configurationÚmodelz2Switch model (session-scoped; --global to persist)zN[model] [--provider name] [--reasoning level] [--global|--session] [--refresh]Úhidden)r5   r=   r>   rA   zcodex-runtimez7Toggle codex app-server runtime for OpenAI/Codex modelsz[auto|codex_app_server]ÚpersonalityzSet a predefined personalityÚ	statusbarz#Toggle the context/model status bar)r8   r3   rA   Úbatteryz8Toggle a color-coded battery indicator in the status barz[on|off|status])r8   r5   r6   Ú
timestampsz2Toggle [HH:MM] timestamps on messages and /history)r8   r5   r6   r3   Údiffz)Show git changes in the working directoryz'[staged|all|session] [--stat] [path...])r5   r6   Úverbosez9Cycle tool progress display: off -> new -> all -> verbosezdisplay.tool_progress_command)r8   r;   r=   rA   ÚfocusuB   Toggle focus view â€” show only your prompt and the final responseÚfooterz7Toggle gateway runtime-metadata footer on final replies)r5   r6   r=   rA   Úyoloz7Toggle YOLO mode (skip all dangerous command approvals)Ú	approvalsz:Show or set the persistent dangerous-command approval modez[manual|smart|off]Ú	reasoningz#Manage reasoning effort and displayz'[level|show|hide|full|clamp] [--global]Úfastu`   Fast mode â€” OpenAI Priority Processing / Anthropic Fast Mode (normal/fast/auto/cold/ultrafast)z3[normal|fast|auto|cold|ultrafast|status] [--global]Úadvanced)r5   r6   rA   Úskinz%Show or change the display skin/theme)r8   r5   r@   Ú	indicatorz!Pick the TUI busy-indicator styleÚ[Ú|Ú]ÚvoicezToggle voice modez[on|off|tts|status]zcomposer-voiceÚwakez*Toggle the 'Hey Hermes' wake word listenerÚbusyz3Control how messages behave while Hermes is workingz[queue|steer|interrupt|status]Ú	autoprunez0Turn automatic pruning of old sessions on or offz[on|off|later|status])r5   r6   r=   r?   r@   Útoolsz4Manage tools: /tools [list|disable|enable] [name...]z[list|disable|enable] [name...]ÚtoolsetszList available toolsetsÚskillsz*Search, install, inspect, or manage skillszskills.write_approval)r8   r;   r6   rB   Úmemoryz7Review pending memory writes / toggle the approval gatez-[pending|approve|reject|approval] [id|on|off]Úbundlesz8List skill bundles (aliases /<name> for multiple skills))r?   Úpetz>Toggle or adopt a petdex mascot (/pet, /pet list, /pet <slug>)z[toggle|list|scale <n>|<slug>]Úhatchz,Generate a new petdex pet from a descriptionz[description])r8   r3   r5   ÚlearnzPLearn a reusable skill from anything you describe (dirs, URLs, this chat, notes)z<what to learn from>ÚinitzBGenerate or update AGENTS.md project instructions from a repo scanz[notes]ÚcronzManage scheduled tasksz[subcommand]Úsuggestionsz-Review suggested automations (accept/dismiss)z[accept|dismiss N | catalog])r3   r5   r6   Ú	blueprintz.Set up an automation from a blueprint templatez[name] [slot=value ...]ÚcuratorzGBackground skill maintenance (status, run, pin, archive, list-archived)Úkanbanz:Multi-profile collaboration board (tasks, links, comments)Úreloadz.Reload .env variables into the running sessionz
reload-mcpzReload MCP servers from config)r3   rA   zreload-skillsz?Re-scan ~/.hermes/skills/ for newly installed or removed skillsÚbrowserzaConnect browser tools to your live Chromium-family browser via CDP, or switch to Browser Use modez[connect|disconnect|status|use]z'List installed plugins and their statusÚcommandsz*Browse all commands and skills (paginated)z[page]Úgateway_commands)r9   r5   r=   r?   ÚhelpzQShow available commands (/help skills lists skill commands, /help <text> filters)Úgateway_helpz[skills|<filter>])r=   r?   r5   Úpalettez,Open the fuzzy command palette (also Ctrl+P))r8   r=   Úrestartz9Gracefully restart the gateway after draining active runs)r9   r=   rA   ÚusagezLShow token usage and rate limits; `reset` redeems a banked Codex limit resetz[reset [--force]]Úsubscriptionz0View your Nous plan and change it in the browser)r8   r3   Úloginz3Sign in with a Nous account (keeps your connectors)Úsettings)r=   rA   Útopupz7Show your Nous balance and manage billing on the portalÚinsightsz!Show usage insights and analyticsz[days])r5   rA   Ú	platformsz&Show gateway/messaging platform statusÚplatformz1Pause, resume, or list a failing gateway platformz<pause|resume|list> [name]Úcopyz-Copy the last assistant response to clipboardz[number])r8   r5   rA   Úpastez*Attach clipboard image from your clipboardÚimagez.Attach a local image file for your next promptz<path>Úupdatez)Update Hermes Agent to the latest versionÚversionzShow Hermes Agent version)r3   r=   r?   Údebugz@Upload debug report (system info + logs) and get shareable linksz[nous|local]Úquitz:Exit the CLI (use --delete to also remove session history)z
[--delete]zlist[CommandDef]ÚCOMMAND_REGISTRYc               ó    € V ^8„  d   QhRRRR/# )r   Úcmdr0   r   r:   r   )r   s   "r   r   r   d  s   € ÷ $ñ $˜Zð $¨Jñ $r   c                ór  a€ V P                   R	9   d   V P                   # V P                  ;'       g    RP                  4       oV P                  '       dY   S;'       dC    \        ;QJ d#    V3R l\
         4       F  '       g   K   RM	  RM! V3R l\
         4       4      pV'       d   R# R# S'       d   R# R# )
zGComposer mode: explicit on the CommandDef, else inferred from its args.r`   Útextru   r4   c              3  óH   <"  € T F  qSP                  4       9   x € K  	  R # 5i©N)Úlower)Ú.0ÚtokenÚhints   & €r   Ú	<genexpr>Ú&infer_argument_mode.<locals>.<genexpr>j  s   øé € ÐMÁ°u d§j¡j£lÖ2Ãùs   ƒ"TFN>   rÆ   ru   r`   )r@   r5   Ústripr6   ÚanyÚ_PROSE_HINTS)rÄ   ÚproserÌ   s   & @r   Úinfer_argument_moderÓ   d  sƒ   ø€ à
×ÑÐ8Ô8Ø× Ñ Ð Ø�M‰M×Ð˜R×&Ñ&Ó(€DØ
‡‡€Ø×MÐMŸ›ÔMÅÓMŸŸšÔMÅÓMÓMˆßˆwÐ. YÐ.ßˆ6Ð#˜tÐ#r   c               ó    € V ^8„  d   QhRRRR/# )r   rÄ   r0   r   zdict[str, object]r   )r   s   "r   r   r   o  s   € ÷ ñ ˜jð Ð->ñ r   c                ó„   € R\        V 4      RV P                  /pV P                  e   \        V P                  4      VR&   V# )uK   Wire shape for ``commands.catalog`` â€” reads the CommandDef, nothing else.r@   rA   rB   )rÓ   rA   rB   Úlist)rÄ   Úmetas   & r   Úcommand_desktop_metarØ   o  sD   € à.Ô0CÀCÓ0HÈ)ÐUX×U`ÑU`Ða€DØ
×ÑÒ*Ü&*¨3×+BÑ+BÓ&CˆÐ"Ñ#Ø€Kr   c               ó   € V ^8„  d   QhRR/# )r   r   zdict[str, str | None]r   )r   s   "r   r   r   w  s   € ÷ ñ Ð"7ñ r   c                 ó®   € \          U Uu/ uF=  p V P                  .V P                  O F  pRV 2V P                  ;'       g    RbK  	  K?  	  upp # u upp i )aµ  ``/name`` (and every alias) -> ``desktop`` disposition for EVERY registry command.

Offered built-ins (no ``desktop=`` value) map to ``None``: the desktop needs their names
too, or offline it cannot tell ``/context`` from a skill command and files it under
Skills / routes it down the extension path until the live catalog warms up.

The desktop app reads this live from ``commands.catalog``; the copy committed at
``apps/desktop/src/lib/desktop-slash-registry.json`` (``scripts/dump_desktop_slash_registry.py``)
is its offline fallback before the catalog answers, so the registry stays the ONLY place a
command's desktop disposition is authored. A test on each side fails when the two drift.
Ú/N)rÂ   r1   r3   rA   )rÄ   r   s     r   Údesktop_surface_registryrÜ   w  s]   € õ $ôá#ˆCØ—H‘HÐ+˜sŸ{™{Ó+ˆCð ˆCˆ5ˆ	�3—;‘;×&Ð& $Ò&á+ñ 	Ù#òð ùó s   Š7AÁAzdict[str, CommandDef]Ú_COMMAND_LOOKUPc               ó    € V ^8„  d   QhRRRR/# )r   r1   r   r   zCommandDef | Noner   )r   s   "r   r   r   �  s   € ÷ 9ñ 9˜#ð 9Ð"3ñ 9r   c                óf   € \         P                  V P                  4       P                  R4      4      # )zKResolve a command name or alias (leading slash optional) to its CommandDef.rÛ   )rÝ   r+   rÉ   Úlstrip©r1   s   &r   Úresolve_commandrâ   �  s$   € ä×Ñ˜tŸz™z›|×2Ñ2°3Ó7Ó8Ð8r   c               ó    € V ^8„  d   QhRRRR/# )r   rÄ   r0   r   r   r   )r   s   "r   r   r   ”  s   € ÷ nñ n˜Jð n¨3ñ nr   c                ó¨   € V P                   '       g   V P                  4       # \        RV P                  4       V P                  V P                   R7      # )z:CLI-facing localized description including the usage hint.zslash.shared.usage_suffix)r2   r1   r5   )r5   rG   r   r1   )rÄ   s   &r   Ú_build_descriptionrå   ”  s:   € à�=�=ˆ=Ø�|‰|‹~ÐÜÐ(°c·l±l³nÈ3Ï8É8Ð_b×_lÑ_lÔmÐmr   c               ó   € V ^8„  d   QhRR/# )r   r   zdict[str, dict[str, str]]r   )r   s   "r   r   r   ›  s   € ÷ ñ Ð$=ñ r   c                 óT  € / p \          F›  pVP                  '       d   K  RVP                   2\        V4      /pVP                   F/  p\        RVP                  4       VP                  R7      VRV 2&   K1  	  V P                  VP                  / 4      P                  V4       K�  	  V # )zìLocalized ``{category: {"/command": description}}`` (excludes gateway_only).

Built per call so a ``display.language`` change applies without a restart; category keys are
the registry identifiers -- render them with ``category_label``.
rÛ   zslash.shared.alias_for)r2   r1   )
rÂ   r9   r1   rå   r3   r   rG   Ú
setdefaultr)   r¾   )ÚgroupedrÄ   ÚentriesÚaliass       r   Úbuild_commands_by_categoryrì   ›  s—   € ð *,€GßˆØ××ÐÙØ�s—x‘x�j�>Ô#5°cÓ#:Ð;ˆØ—[”[ˆEÜ#$Ð%=È3Ï<É<Ë>Ð`c×`hÑ`hÔ#iˆG�a˜�w�KÓ ñ !à×Ñ˜3Ÿ<™<¨Ó,×3Ñ3°GÖ<ñ  ð €Nr   c               ó   € V ^8„  d   QhRR/# )r   r   r&   r   )r   s   "r   r   r   ¬  s   € ÷ ñ ˜ñ r   c                 ój   € / p \        4       P                  4        F  pV P                  V4       K  	  V # )zELocalized flat ``{"/command": description}`` (excludes gateway_only).)rì   Úvaluesr¾   )Úflatrê   s     r   Úbuild_commandsrñ   ¬  s.   € à€DÜ-Ó/×6Ñ6Ö8ˆØ�‰�GÖñ 9à€Kr   ÚCOMMANDSÚCOMMANDS_BY_CATEGORYrÛ   zdict[str, list[str]]ÚSUBCOMMANDSz[a-z]+(?:\|[a-z]+)+zdict[str, tuple[str, ...]]ÚHELP_SESSION_SUBGROUPSc              #  ó°   "  € T FL  qP                   '       d   VP                  '       g   K(  VP                  .VP                  O F  pVx € K	  	  KN  	  R # 5irÈ   )r8   r;   r1   r3   )rÊ   rÄ   r1   s   &  r   rÍ   rÍ   Î  sD   é € ð 3*Ù$ˆS¯L¯L¨L¸C×<SÕ<S„DØ—‘Ð(˜CŸK™KÓ(ˆõ 	Ù(ñ 	Ó$ùs
   ‚%A¬*AÚGATEWAY_KNOWN_COMMANDSc               ó    € V ^8„  d   QhRRRR/# )r   r1   r:   r   r7   r   )r   s   "r   r   r   Ó  s   € ÷ Wñ W :ð W°$ñ Wr   c                óÎ   a € S '       g   R# S \         9   ;'       gK    \        ;QJ d'    V 3R l\        4        4       F  '       g   K   R# 	  R# ! V 3R l\        4        4       4      # )z–True if ``name`` is a built-in or plugin gateway slash command (plugins looked
up lazily); decides whether the gateway emits ``command:<name>`` hooks.Fc              3  ó2   <"  € T F  w  rq1S8H  x € K  	  R # 5irÈ   r   )rÊ   Úplugin_nameÚ_dÚ_hr1   s   &   €r   rÍ   Ú+is_gateway_known_command.<locals>.<genexpr>Ø  s   øé € ð 1WÙ7UÑ 3 °�tÖÓ7Uùs   ƒT)r÷   rÐ   Ú_iter_plugin_command_entriesrá   s   fr   Úis_gateway_known_commandr   Ó  sh   ø€ ÷ ÙØÔ)Ñ)÷ Wð W¯S«Sô 1WÜ7SÔ7Uó1W¯S¬Sð WªSð W¨Sô 1WÜ7SÔ7Uó1Wó .Wð Wr   c              #  ó^   "  € T F#  qP                   R 8w  g   K  VP                  x € K%  	  R# 5i)r<   N)r=   r1   )rÊ   rÄ   s   & r   rÍ   rÍ   ß  s$   é € ð ;IÙ(�¯O©O¸xÑ,G„H€C‡H†HÓ(ùs   ‚-™-ÚACTIVE_SESSION_BYPASS_COMMANDSc               ó    € V ^8„  d   QhRRRR/# ©r   Úcommand_namer:   r   r7   r   )r   s   "r   r   r   ã  s   € ÷ Lñ L¨Zð L¸Dñ Lr   c                ób   € V '       d   \        V 4      MRpVRJ;'       d    VP                  R8H  # )zQGuard 1 (gateway/platforms/base.py) routes these through the cancel-handoff path.NrQ   )râ   r=   )r  rÄ   s   & r   Úis_interrupt_then_dispatchr  ã  s,   € ç+7Œ/˜,Ô
'¸T€CØ�dˆ?×KÐK˜sŸ™Ð2KÑKÐKr   c               ó    € V ^8„  d   QhRRRR/# r  r   )r   s   "r   r   r   é  s   € ÷ Pñ P¨zð P¸dñ Pr   c                ó0   € V '       d   \        V 4      RJ# R# )u„  True for any resolvable slash command: every recognized command is dispatched mid-run
(Guard-2 handler or the "busy" catch-all), never queued â€” gateway.run's safety net discards
command text reaching the pending queue, so a queued mid-run /model (or /reasoning, /voice,
/insights, /title, /resume, /retry, /undo, /compress, /usage, /reload-mcp, /sethome, /reset)
would silently interrupt the agent AND get discarded â€” a zero-char response. See issue
#5057 / PRs #6252, #10370, #4665. ACTIVE_SESSION_BYPASS_COMMANDS remains the subset with
explicit Level-2 handlers; the rest fall through to the catch-all.

See #10370, #4665, #5057, #6252.
NF)râ   )r  s   &r   Úshould_bypass_active_sessionr
  é  s   € ÷ 9EŒ?˜<Ó(°Ð4ÐOÈ%ÐOr   c               ó   € V ^8„  d   QhRR/# )r   r   zset[str]r   )r   s   "r   r   r   ÷  s   € ÷ bñ b˜xñ br   c                 ó„  € \          U u. uF  q P                  '       g   K  V NK  	  pp V'       g   \        4       #  ^ RIHpHp V! 4       pT Uu0 uFE  p\        T! T.TP                  P                  R4      O5!  RR7      '       g   K9  TP                  kKG  	  up# u up i   \         d    \        4       u # i ; iu upi )ztCanonical names of commands whose ``gateway_config_gate`` dotpath is truthy in
config.yaml (empty set on any error).)Úcfg_getÚread_raw_configÚ.F)r   )
rÂ   r;   ÚsetÚhermes_cli.configr  r  Ú	Exceptionr   Úsplitr1   )ÚcÚgatedr  r  ÚcfgrÄ   s         r   Ú_resolve_config_gatesr  ÷  s±   € õ )ÓBÑ(�1×,AÕ,A�QˆQÑ(€EÐBßÜ‹uˆðß>ÙÓˆñ !&ó b¡˜Ü™w sÐP¨S×-DÑ-D×-JÑ-JÈ3Ó-OÓPÐZ_×`Ð`ô ˆC�HŒH¡ñ bð bùò Cøô ô Ü‹uŠðüòbs'   ‰B¡B¼B" Á6B=Â
B=Â"B:Â9B:c               ó$   € V ^8„  d   QhRRRRRR/# )r   rÄ   r0   Úconfig_overrideszset[str] | Noner   r7   r   )r   s   "r   r   r     s"   € ÷ !ñ !˜zð !¸_ð !ÐX\ñ !r   c                ó�   € V P                   '       g   R# V P                  '       g   R# Ve   TM	\        4       pV P                  V9   # )zŠNot ``cli_only``, or its config gate is truthy (*config_overrides* from
``_resolve_config_gates()`` avoids re-reading config per command).TF)r8   r;   r  r1   )rÄ   r  Ú	overridess   && r   Ú_is_gateway_availabler    s?   € ð �<�<ˆ<ÙØ×"×"Ð"ÙØ$4Ò$@Ñ ÔF[ÓF]€IØ�8‰8�yÑ Ð r   c               ó    € V ^8„  d   QhRRRR/# )r   ÚallowedzOptional[Iterable[str]]r   z	list[str]r   )r   s   "r   r   r     s   € ÷ ñ Ð 7ð À9ñ r   c           	     óx  € \        4       pV f   RM
\        V 4      p. p\         EF  p\        WA4      '       g   K  Ve   VP                  V9  d   K.  VP
                  '       d   RVP
                   2MRpVP                   Uu. uFL  pVP                  RR4      VP                  P                  RR4      8X  d   WdP                  8w  d   KF  RV R2NKN  	  ppV'       d   \        RR	P                  V4      R
7      MRpVP                  RVP                   V RVP                  4        V 24       EK  	  V# u upi )a'  Generate gateway help text lines from the registry.

``allowed`` (canonical names) restricts the catalog to what the caller may run -- the
gateway passes a non-admin's slash-access floor + ``user_allowed_commands`` so /help never
advertises admin-only commands the dispatcher would then refuse.
NÚ r4   Ú-Ú_z`/Ú`zslash.shared.alias_notez, )r3   z` -- )r  r  rÂ   r  r1   r5   r3   Úreplacer   ÚjoinÚappendrG   )	r  r  Úallowed_setÚlinesrÄ   ÚargsÚaÚalias_partsÚ
alias_notes	   &        r   Úgateway_help_linesr-    s  € ô &Ó'€IØ!š/‘$¬s°7«|€KØ€EßÐˆÜ$ S×4Ò4ÙØÒ" s§x¡x°{Ô'BÙØ&)§m§m m��3—=‘=�/Ñ"¸ˆà*-¯+ª+ó e©+ QØ Ÿy™y¨¨cÓ2°c·h±h×6FÑ6FÀsÈCÓ6PÔPÐUV×ZbÑZbÑUbô !˜˜A˜3˜a“y©+ˆð eçU`”QÐ0¸$¿)¹)ÀKÓ:PÕQÐfhˆ
Ø�‰�r˜#Ÿ(™(˜ D 6¨¨s¯|©|«~Ð.>¸z¸lÐK×Lñ  ð €Lùò	es   ÂAD7Ã
D7c               ó   € V ^8„  d   QhRR/# )r   r   zlist[tuple[str, str, str]]r   )r   s   "r   r   r   )  s   € ÷ 
dñ 
dÐ&@ñ 
dr   c                 óÌ  €  ^ RI Hp  V ! 4       ;'       g    / pTP                  4        UUu. uF—  w  r#\	        T\
        4      '       g   K  \	        T\        4      '       g   K5  T\        TP                  R4      ;'       g    \        RTR7      4      \        TP                  R4      ;'       g    R4      P                  4       3NK™  	  upp#   \         d    . u # i ; iu uppi )z’(name, description, args_hint) for ``PluginContext.register_command`` slash commands.
Lazy so importing this module never forces plugin discovery.)Úget_plugin_commandsr2   z slash.shared.plugin_default_descrá   r5   r4   )
Úhermes_cli.pluginsr0  r  ÚitemsÚ
isinstancer   Údictr+   r   rÏ   )r0  r­   r1   r×   s       r   rÿ   rÿ   )  sÇ   € ðÝ:Ù&Ó(×.Ð.¨Bˆð
 'Ÿn™nÔ.ôdá.‘
�´*¸TÄ3×2Gô7äLVÐW[Ô]a×Lbô7ˆT”3�t—x‘x Ó.×bÐb´!Ð4VÐ]aÔ2bÓcÜ�—‘˜+Ó&×,Ð,¨"Ó-×3Ñ3Ó5ó7á.òdð døô ô ØŠ	ðüóds3   ‚C –C ¬C ÁC Á#C Â-C Â/C ÃCÃCc                óp   € \         P                  V 4      pVf   \        R\        : RV : 24      hV! 4       # )Nzmodule z has no attribute )Ú_LAZY_LOCALIZED_TABLESr+   ÚAttributeErrorrI   )r1   Ú	localizeds   & r   Ú__getattr__r9  6  s9   € Ü&×*Ñ*¨4Ó0€IØÒÜ˜w¤x¡lÐ2DÀTÁHÐMÓNÐNÙ‹;Ðr   >   r<   rP   rQ   )Úreset)Úcompose)Úfork)rT   rÖ   Úprune)Úcompact)Úsnap)Útasks)Úlearningúmemory-graph)rÖ   ÚdeleteÚedit)Úq)rÖ   rD  ÚrmÚmoverV   Úadd)Ús)Úhb)rw   rj   rx   rV   )Ú	proactive)rw   )Úctx)Úall)zset-home)Úcodex_runtime)Úsb)ÚonÚoffrw   )Úts)ÚstagedrM  r   )ÚmanualÚsmartrQ  )ÚnoneÚminimalÚlowÚmediumÚhighÚxhighÚmaxÚultraÚshowÚhiderP  rQ  ÚfullÚclampú--global)
Únormalr’   ÚautoÚcoldÚ	ultrafastr]  rw   rP  rQ  rb  )rP  rQ  Úttsrw   )rr   rs   Ú	interruptrw   )rP  rQ  Úlaterrw   )
ÚsearchÚbrowseÚinspectÚinstallÚauditÚpendingrk   r<   r‹   Úapproval)ro  rk   r<   r‹   rp  )ro  rk   r<   rp  )ÚtogglerÖ   ÚscalerQ  )zgenerate-pet)rÖ   rH  ÚcreaterD  rj   rx   ÚrunÚremove)Úsuggest)ÚacceptÚdismissÚcatalogrV   )Úbp)rw   rt  rj   rx   ÚpinÚunpinÚrestorezlist-archived)!r¥   Úboardsrs  rÖ   Úlsr^  ÚassignÚreclaimÚreassignÚdiagnosticsÚdiagÚlinkÚunlinkÚclaimÚcommentÚcompleterD  ÚblockÚunblockÚarchiveÚtailrP   Ústatsznotify-subscribeznotify-listznotify-unsubscribeÚlogÚrunsrv   Ú	assigneesr$   ÚspecifyÚgc)Ú
reload_mcp)Úreload_skills)ÚconnectÚ
disconnectrw   Úuse)Úupgrade)Úgateway)Úv)r"   )rn   z[textÚinstructionsz
[interval]z<what)rc   r>  r$   rL  rw   )rm   ro   rp   r@  rr   rE  rs   rI  rt   r~   rv   rJ  ry   r{   rK  r}   rq   rA  rB  rÈ   )@Ú__conditional_annotations__rM   Ú
__future__r   ÚloggingÚreÚcollections.abcr   Údataclassesr   Útypingr   Úutilsr   Ú
agent.i18nr   Úhermes_constantsr	   Ú	getLoggerrI   Úloggerr   r'   rN   r-   r0   Ú	frozensetrR   r%  rÂ   rÑ   rÓ   rØ   rÜ   r1   r3   rÝ   râ   rå   rì   rñ   r6  r6   rÖ   rô   ÚcompileÚ_PIPE_SUBS_REÚ_cmdr5   rj  Ú_mÚgroupr  rõ   r÷   r   r  r  r
  r  r  r-  rÿ   r9  )rÄ   r   r¬  r�  s   000@r   Ú<module>r¯     sv  øðôõ #ã Û 	Ý $Ý !Ý å !Ý Ý -à	×	Ò	˜8Ó	$€õ.ð ˆy˜/¨?¸FÀFØ�n i°¸FÀFØˆyÐ3Ð5Lð#€�ó õPñ �$Ô÷ Nð  Nó ð NñF '0Ó0aÓ&bÐ �^Ó bðJ&^áˆwÐJÈIØ ¨jÀwôPðJ&^ñ ˆuÐHÈ)Ù!¨XØ4À5ôJð	J&^ñ ˆwÐFÈ	Ø Ð,CôEðJ&^ñ ˆwÐ>À	Ø jô2ðJ&^ñ ˆxÐQÐS\Ø jô2ðJ&^ñ ˆyÐ5°yØôðJ&^ñ ˆvÐQÐS\Ø=ô?ðJ&^ñ" ˆwÐBÀIÓNð#J&^ñ$ ˆxÐWÐYbØÐ(8Á,ôPð%J&^ñ( ˆvÐGÈØô ð)J&^ñ, ˆwÐ=¸yÐT\Ô]ð-J&^ñ. ˆyÐcÐenØ%°ÀIôOð/J&^ñ2 ˆxÐvØ¡)Ð7HôJð3J&^ñ6 ˆzÐPÐR[ØÐ(MÙ3¸ZôIð7J&^ñ< ˆzð  Fð  HQÙ#Ð/_ôað=J&^ñ@ ˆzÐtÐvØ+ô-ðAJ&^ñD ˆzÐUÐW`Ø¡iÐ;XØ!ô#ðEJ&^ñJ ˆxÐZÐ\kØÐ(FôHðKJ&^ñN ˆxÐKÈ_ØÐ(JôLðOJ&^ñR ˆvÐ>À	Ø4À6ôKðSJ&^ñV ˆyÐbÐdmØ ¨jô:ðWJ&^ñZ ˆwÐXÐZcØ Ð,<È*ôVð[J&^ñ^ ˆyÐ?ÀØ Ð,>ÈJôXð_J&^ñb ˆvÐTÐV_Ø Ð,<È*ôVðcJ&^ñf ˆtÐDÀiØ#°ô=ðgJ&^ñj ˆuÐbÐdmØ%°:ô?ðkJ&^ñn ˆxÐ?ÀÙ!¨zô;ðoJ&^ñr ˆyÐ>ØÑ">ÈØ7ÑE_ôaðsJ&^ñx ˆwÐeÐgpÙÐ)^ÙIØ%°Gô=ðyJ&^ñ@ ˆwÐXÐZcÙ¨ÀÐZaôcðAJ&^ñD ˆvÐXÐZcð MØ$°*È6ôSðEJ&^ñJ ˆ{ÐZÐ\eÙÐ*iÙAØ%ô'ðKJ&^ñR ˆxÐYÐ[dØ/ô1ðSJ&^ñV ˆxÐkÐmvØ0ô2ðWJ&^ñZ ˆvÐPÐR[Ù%ØqØ$°*È6ôSð[J&^ñb ˆvÐjÐluØ!ô#ðcJ&^ñf ˆuÐlÐnwØ#°ÈôOðgJ&^ñj ˆyÐKÈYØ4À*ôNðkJ&^ñn ˆxÐGÈØ%ô'ðoJ&^ñr ˆxÐ:¸IØ#±È*Ø$¨hô8ðsJ&^ñx ˆyð  Fð  HQÙ¨7ÁÐV`ôbðyJ&^ñ| ˆxÐHÈ&ÓQð}J&^ñ~ ˆyÐGÈØ%¨yô:ðJ&^ñB ˆyÐ=¸yØ ©-ÀôMðCJ&^ñF ˆxÐ<¸iØ!°ô:ðGJ&^ñJ ˆzÐ@À)ÓLðKJ&^ñP ˆxÐ5°ØôðQJ&^ñT ˆwÐLÈoØiØ#°'À8ôMðUJ&^ñZ ˆÐ YØÑ(:ÐF_Ø#°/ôCð[J&^ñ` ˆ}Ð<¸oØ!°ô<ðaJ&^ñd ˆ{ÐAÀ?Ø¡g°zôCðeJ&^ñh ˆyÐTØ¨Ð9JÙ2ô4ðiJ&^ñn ˆ|ÐQÐSbØÐ(9Ù2¹GôEðoJ&^ñt ˆvÐBÀFØBÙ7ô9ðuJ&^ñz ˆyÐUØ¨ÐCbØ%¨zô;ð{J&^ñ@ ˆwÐ\Ø¨Ð9JÙ2ô4ðAJ&^ñF ˆxÐRØÐ*;ÑI`Ø%¨zô;ðGJ&^ñL ˆvÐPØ¨Jô8ðMJ&^ñP ˆ{ÐXØÐ*>Ù5ô7ðQJ&^ñV ˆ{ÐAÀ?ØBñ [ô\ðWJ&^ñ\ ˆvÐyð  |KØNÙvØ!ô#ð]J&^ñd ˆvÐ>ÀØ¨À	ôKðeJ&^ñh ˆ{Ð?ÀØ¨!¨C¯H©HÐ5EÓ,FÐ+GÀqÐ(IØ+°ZôAðiJ&^ñn ˆwÐ+¨_Ø.Ñ<ZØ'ô)ðoJ&^ñt ˆvÐCÀ_ØÐ(9ÑG^ô`ðuJ&^ñx ˆvÐLÈoØ9ÙDØ%¨zô;ðyJ&^ñ@ ‰{ÑNÐP_Ù0Ñ>^Ø%©{È)õUðAJ&^ñJ ‰wÑNÐP`Ù:ÀTÐYbôdðKJ&^ñN ‰zÑ4Ð6FØ jô2ðOJ&^ñR ‰xÑEØ¨$Ù#:ñPñ$0õ1ðSJ&^ñj ‰xÑRØÑ+ZÙGôIðkJ&^ñp ‰yÑTØ©õ4ðqJ&^ñt ‰uÑVÐXhØÑ(HÑVxôzðuJ&^ñx ‰wÑFØ¨$Ñ8IÑUdõfðyJ&^ñ| ‰wÑjØÑ+AôCð}J&^ñ@ ‰vÑ[Ø©9ô6ðAJ&^ñD ‰vÑ/Ð1AØ©Ù`Ø!ô#ðEJ&^ñL ‰}ÑMØ©ÑA_ÙDõFðMJ&^ñR ‰{ÑLØ©Ñ<UôWðSJ&^ñV ‰yÑcØ©>ÙkØ!ô#ðWJ&^ñ^ ‰xÑUØ©>ñRð &¨zô;ð_J&^ñp ‰xÑIÐK[Ø jô2ðqJ&^ñt ‰|Ñ=Ð?OÙ&°
õ<ðuJ&^ñx ‰Ñ aØÑ);ÀZõQðyJ&^ñ| ‰yÑ}ð  @PØÑ(IÙEôGð}J&^ñB ˆyÑCØ¨$¸
ôDðCJ&^ñJ ‰zÑGÈØ ©HÀ*Ù)õ+ðKJ&^ñP ‰vÑjÐlrð  AKÙ%Ñ1DõFðQJ&^ñT ‰yÑHÈ&Ø¨*õ6ðUJ&^ñX ‰yÑUÐW`Ø ¨jÀ*õNðYJ&^ñ\ ‰wÑfÐhnÙ,ô.ð]J&^ñ` ‰~ÑQÐSYØ¡lõ4ðaJ&^ñd ‰wÑMÈvØ%©zõ;ðeJ&^ñh ‰wÑQÐSYÓZðiJ&^ñj ‰zÑ>ÀÙ!¨:õ7ðkJ&^ñn ‰{ÑDÀfØ¡l¸JôHðoJ&^ñr ‰zÑNÐPVØ Ñ,HôJðsJ&^ñv ‰vÑFÈØ©
¸JõHðwJ&^ñz ‰wÑDÀfØ jô2ð{J&^ñ~ ‰wÑHÈ&Ø©¸*õFðJ&^ñB ‰xÑDÀfØ%¨zõ;ðCJ&^ñF ‰yÑ5°vÁvØ%©yõ:ðGJ&^ñJ ‰wÑZÐ\bÙ'ô)ðKJ&^ñR ‰vÑSÐU[Ø¡i¹<ÐQ[ô]ðSJ&^Ð Ñ"ô J^ñ\ L€÷$÷÷ñ* )ô*NÙ(�·X±XÐ4LÀÇÁÓ4L¨Sˆ‚HÑ4L�CÑ(ò*N€Ñ&ô N÷9÷
n÷÷"ñ % nÑ6LÐNhÐiÐ ñ
 9Ió%^Ù8H°×L\ÕL\Ô+�aˆ�	‰	€{€O‘T˜$×*Ñ*Ó+Ò+Ñ8Hñ%^€Ñ!ô ^ð —
’
Ñ1Ó2€Û€DØ15··°ˆ×	Ñ	˜dŸn™nÔ	-ÀT€Bß	�r‘�$—)‘)�ˆo [Ö0Ø')§x¡x°£{×'8Ñ'8¸Ó'=ˆ‘a˜Ÿ	™	�{�OÓ$ñ ð ÑBØñ  Uð6VÐ Ñ2ô Vñ *3ò 3*Ù$ó3*ó **Ð ˜ô *÷
Wñ 2;ò ;IÙ(ó;Ió 2IÐ  ô I÷L÷P÷b÷!ò !÷ò ÷0
dõùóW*Nùò^%^s   Û9*b=ÝcÝ2%c