+
    jHàjUý  ã                  óö  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	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 ^ R	IHt ^ R
IHt ^ RIHt ^ RIHtHtH t H!t!H"t"H#t#H$t$H%t%H&t&H't'H(t(H)t) ^ RI*H+t+ ^ RI,H-t-H.t.H/t/H0t0H1t1H2t2H3t3 ^ RI4H5t5 R R lt6R R lt7R R lt8R R lt9R R lt:RÂR R llt;R R lt<R R l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R0kR1kR2kR3kR4kR5kR6kR7kR8kR9kR:kR;kR<kR=kR>k4      t?R?]@R@&   ]>! 0 RÃm4      tAR?]@RA&   RB RC ltBRD RE ltCRF RG ltDRH RI ltERJ RK ltFRL RM ltGRN RO ltHRP RQ ltIRR RS ltJRT RU ltKRV RW ltLRX RY ltMRZ R[ ltNR\ R] ltOR^ R_ ltPR` Ra ltQRb Rc ltRRd Re ltSRf Rg ltTRh Ri ltURj Rk ltVRl Rm ltWRn Ro ltXRp Rq ltYRr Rs ltZRt Ru lt[Rv Rw lt\Rx Ry lt]Rz R{ lt^R| R} lt_R~ R lt`R€ R� ltaR‚ Rƒ ltbR„ R… ltcR† R‡ ltdRˆ R‰ lteRŠ R‹ ltfRŒ R� ltgRŽ R� lthR� R‘ ltiR’ R“ ltjR” R• ltkR– R— ltlR˜ R™ ltmRš R› ltnRœ R� ltoRž RŸ ltpR  R¡ ltqR¢ R£ ltrR¤ R¥ ltsR¦ R§ lttR¨ R© ltuRª R« ltvR¬ R­ ltwR® R¯ ltx/ R ]IbR!]LbR"]MbR°]NbR±]NbR²]QbR#]RbR³]SbR$]TbR%]UbR´]WbRµ]WbR&]XbR']YbR(]ZbR)][bR*]\b/ R¶]]bR+]^bR,]bbR-]cbR.]ebR/]fbR0]gbR;]hbR<]ibR=]jbR1]kbR2]lbR·]2bR3]/bR4]-bR¸]3bR¹]mbCRº]qR»]rR6]JR¼]KR7]nR½]oR8]pR¾]sR9]vR:]xR>]0/CtyR¿tzRÀ RÁ lt{R# )ÄuO  ``hermes kanban â€¦`` â€” dispatch (``kanban_command``), task-verb handlers, ``run_slash`` for ``/kanban``.
DB work lives in ``kanban_db``; siblings: ``kanban_parser`` (argparse, re-exported ``build_parser``),
``kanban_output`` (text/--json), ``kanban_boards`` (``boards â€¦``), ``kanban_ops`` (dispatch/daemon/
tail/watch/gc/repair).
)ÚannotationsN)ÚPath)ÚOptional)Ú	kanban_db)Úkanban_db_connect)Úkanban_db_dispatch)Úkanban_db_workspace)Úkanban_db_notify)Úkanban_swarm)Úkanban_workflow)Ú_ATTACHMENT_FIELDSÚ_RUNS_RUN_FIELDSÚ_SHOW_RUN_FIELDSÚ_bulk_applyÚ_errÚ_fmt_countsÚ_fmt_task_lineÚ_fmt_tsÚ	_json_outÚ	_obj_dictÚ_print_jsonÚ_task_to_dict)Ú_dispatch_boards)Ú_cmd_daemonÚ_kanban_configÚ_cmd_dispatchÚ_cmd_gcÚ_cmd_repairÚ	_cmd_tailÚ
_cmd_watch)Úbuild_parserc               ó    € V ^8„  d   QhRRRR/# )é   ÚvalueÚstrÚreturnúOptional[str]© )Úformats   "Ú6/home/ubuntu/.hermes/hermes-agent/hermes_cli/kanban.pyÚ__annotate__r*   (   s   € ÷ Eñ E˜ð E ñ Eó    c                ó4   € V P                  4       R9   d   R# T # )z,``none`` / ``-`` / ``null`` mean "unassign".N>   Ú-ÚnoneÚnull)Úlower©r#   s   &r)   Ú_none_profiler2   (   s   € à—;‘;“=Ð$9Ô9ˆ4ÐD¸uÐDr+   c               ó    € V ^8„  d   QhRRRR/# )r"   Úrawr&   r%   ztuple[Optional[dict], int]r'   )r(   s   "r)   r*   r*   -   s   € ÷ 
ñ 
˜mð 
Ð0Jñ 
r+   c                ó  € V '       g   R#  \         P                  ! V 4      p\        V\        4      '       g   \	        R4      h V^ 3#   \        \         P
                  3 d   pR\        RT 2^4      3u Rp?# Rp?ii ; i)zJParse ``--metadata`` JSON; returns ``(dict|None, rc)`` with rc=2 on error.Nzmust be a JSON objectzkanban: --metadata: )Né    )ÚjsonÚloadsÚ
isinstanceÚdictÚ
ValueErrorÚJSONDecodeErrorr   )r4   ÚmetadataÚexcs   &  r)   Ú_parse_metadata_flagr?   -   s}   € çØˆð;Ü—:’:˜c“?ˆÜ˜(¤D×)Ò)ÜÐ4Ó5Ð5ð *ð �Qˆ;Ðøô œ×,Ñ,Ð-ô ;Ø”TÐ0°°Ð6¸Ó:Ð:Õ:ûð;ús   Œ7A ÁA>Á#A9Á3A>Á9A>c               ó$   € V ^8„  d   QhRRRRRR/# )r"   Úargsúargparse.NamespaceÚcmdr$   r%   z$tuple[Optional[dict[str, str]], int]r'   )r(   s   "r)   r*   r*   :   s(   € ÷ Kñ KÐ.ð K°Sð KÐ=añ Kr+   c                ó�   € \        V RR4      p\        V RR4      pVRJ VRJ 8w  d   R\        RV R2^4      3# Vf   / ^ 3# RVRV/^ 3# )z[``--state-type``/``--state-name`` must be given together: ``(kwargs, 0)`` or ``(None, 2)``.Ú
state_typeNÚ
state_namezkanban z7: pass both --state-type and --state-name, or omit both)Úgetattrr   )rA   rC   ÚstÚsns   &&  r)   Ú_run_state_kwargsrJ   :   sm   € ä	��| TÓ	*€BÜ	��| TÓ	*€BØ
ˆdˆ
˜˜d˜
Ô#Ø”T˜G C 5Ð(_Ð`ÐbcÓdÐdÐdØ’*ˆBÈÐJÐJ <°°\À2Ð"FÈÐJÐJr+   c               ó    € V ^8„  d   QhRRRR/# )r"   r#   r&   r%   z#tuple[Optional[str], Optional[str]]r'   )r(   s   "r)   r*   r*   C   s   € ÷ Gñ G ð GÐ3Vñ Gr+   c                óˆ  € V '       g   R# V P                  4       pVR9   d   VR3# R F}  w  r#VP                  V4      '       g   K  V\        V4      R P                  4       pV'       g   \        P                  ! RV R24      hV\
        P                  P                  V4      3u # 	  \        P                  ! RV : R24      h)	z¿``--workspace`` -> ``(kind, path|None)``: ``scratch``, ``worktree``, ``worktree:<p>``, ``dir:<p>``.
Omitted -> ``(None, None)`` so ``create_task`` can tell "default" from an explicit scratch.Nz--workspace z  requires a path after the colonzunknown --workspace value z7: use scratch, worktree, worktree:<path>, or dir:<path>)NN>   ÚscratchÚworktree))zdir:Údir)z	worktree:rN   )ÚstripÚ
startswithÚlenÚargparseÚArgumentTypeErrorÚosÚpathÚ
expanduser)r#   ÚvÚprefixÚkindrV   s   &    r)   Ú_parse_workspace_flagr[   C   sÅ   € ÷ ØÐØ�‰‹€AØÐ#Ô#Ø�4ˆyÐÛD‰ˆØ�|‰|˜F×#Ò#ÙØ”�V“�ˆ×$Ñ$Ó&ˆßÜ×,Ò,¨|¸F¸8ÐCcÐ-dÓeÐeØ”b—g‘g×(Ñ(¨Ó.Ð/Ò/ñ Eô ×
$Ò
$Ð'AÀ%Áð KFð &Fó Gð Gr+   c               ó    € V ^8„  d   QhRRRR/# ©r"   r#   r&   r%   r'   )r(   s   "r)   r*   r*   V   s   € ÷ ñ ˜mð °ñ r+   c                óh  € V f   R# V P                  4       pV'       g   \        P                  ! R4      hVP                  R4      '       d   \        P                  ! R4      h\        ;QJ d    R V 4       F  '       g   K   RM	  RM! R V 4       4      '       d   \        P                  ! R4      hV# )	zBNormalize an optional branch name from ``kanban create --branch``.Nz"--branch requires a non-empty namer-   z --branch must not start with '-'c              3  ó@   "  € T F  qP                  4       x € K  	  R # 5i©N)Úisspace)Ú.0Úchs   & r)   Ú	<genexpr>Ú%_parse_branch_flag.<locals>.<genexpr>_   s   é € Ð
)¡&˜B�:‰:�<ˆ<£&ùs   ‚TFz$--branch must not contain whitespace)rP   rS   rT   rQ   Úany)r#   Úbranchs   & r)   Ú_parse_branch_flagrh   V   s…   € à‚}ÙØ�[‰[‹]€FßÜ×(Ò(Ð)MÓNÐNØ×Ñ˜×ÒÜ×(Ò(Ð)KÓLÐLß
ƒsÑ
)¡&Ó
)‡s‡s‚sÑ
)¡&Ó
)×)Ò)Ü×(Ò(Ð)OÓPÐPØ€Mr+   c               ó    € V ^8„  d   QhRRRR/# )r"   Úhermes_homezOptional[Path]r%   ztuple[bool, str]r'   )r(   s   "r)   r*   r*   d   s   € ÷ "%ñ "%¨Nð "%ÐFVñ "%r+   c                ó  €  ^ RI Hp V! V RR7      pTP                  '       d   R# TP                  pT'       d2   \        \        4       P                  RR4      4      '       d	   RRT R23# T'       d   R	# R
#   \         d    Ru # i ; i)uÑ  ``(running, message)`` for the "will anything dispatch this?" warning: True when a gateway is
alive for this HERMES_HOME with ``kanban.dispatch_in_gateway`` on, else False + human guidance.
Fails OPEN (probe/config errors -> ``(True, "")``) â€” a missed warning beats crying wolf.
``hermes_home`` scopes the probe to a profile dir (dashboard backend); CLI callers pass None.

The dashboard plugin API passes it because the dashboard backend process can be running under a
different HERMES_HOME than the profile the request targets, which otherwise produced a "no gateway is
running" warning against a perfectly healthy profile gateway (#71211). CLI callers leave it ``None`` and
keep the existing process-level behavior.
)Úresolve_gateway_livenessF)Úprofile_dirÚ	use_cacheTÚdispatch_in_gatewayzgateway pid=z, dispatch enabled)TÚ )Fuà   Gateway is running but kanban.dispatch_in_gateway=false in config.yaml â€” the task will sit in 'ready' until you flip it back on and restart the gateway, OR run the legacy standalone daemon (`hermes kanban daemon --force`).)Fuú   No gateway is running â€” the task will sit in 'ready' until you start it. Run:
    hermes gateway start
The gateway hosts an embedded dispatcher (tick interval 60s by default); your task will be picked up on the next tick after the gateway comes up.)Úgateway.statusrl   Ú	ExceptionÚprobe_errorÚpidÚboolr   Úget)rj   rl   Úlivenessrt   s   &   r)   Ú_check_dispatcher_presencerx   d   s˜   € ðÝ;ñ ,¸ÈuÔUˆð ××ÐØÐØ
�,‰,€Cç
Œt”NÓ$×(Ñ(Ð)>ÀÓE×FÒFØ˜ S EÐ);Ð<Ð=Ð=ß
ðGð 	Gð%ð %øô ô ØÒðús   ‚A7 Á7BÂBc               ó    € V ^8„  d   QhRRRR/# ©r"   rA   rB   r%   Úintr'   )r(   s   "r)   r*   r*   ‹   s   € ÷ :*ñ :*Ð+ð :*°ñ :*r+   c                óæ  € \        V RR4      pV'       gA   \        V RR4      pVe   VP                  4        ^ # \        R\        P                  R7       ^ # \        V 4      '       d   \        R4      # VR8X  d   \        V 4      # \        V RR4      p\        P                  ! 4       pV'       d†    \        P                  ! V4      pT'       g   \        R
^4      # T\        P                  8w  d0   \        P                  ! T4      '       g   \        RT: RT R24      # \        P                  ! T4      pT;_uu_ 4        VR8X  d   \!        V 4      uuRRR4       #  \        P"                  ! 4        \&        P)                  T4      pT'       g   \        RT: 2^4      uuRRR4       #  \+        T! T 4      ;'       g    ^ 4      uuRRR4       #   \         d   p\        R	T 2^4      u Rp?# Rp?ii ; i  \$         d#   p\        RT 24      u Rp?uuRRR4       # Rp?ii ; i  \        \,        \.        3 d#   p\        R	T 24      u Rp?uuRRR4       # Rp?ii ; i  + '       g   i     R# ; i)uH   Entry point from ``hermes kanban â€¦``; returns a shell-style exit code.Úkanban_actionNÚ_kanban_parserz`usage: hermes kanban <action> [options]
Run 'hermes kanban --help' for the full list of actions.©ÚfilezKkanban: delegate_task child contexts cannot mutate Kanban tasks via the CLIÚboardsÚboardúkanban: zkanban: --board requires a slugzkanban: board z= does not exist. Create it with `hermes kanban boards create ú`.Úrepairz'kanban: could not initialize database: zkanban: unknown action )rG   Ú
print_helpÚprintÚsysÚstderrÚ _is_delegated_child_cli_mutationr   r   Ú
contextlibÚnullcontextÚkbÚ_normalize_board_slugr;   ÚDEFAULT_BOARDÚboard_existsÚscoped_current_boardr   Úinit_dbrr   Ú	_HANDLERSrv   r{   ÚRuntimeErrorÚPermissionError)rA   ÚactionÚparserÚboard_overrideÚboard_scopeÚnormedr>   Úhandlers   &       r)   Úkanban_commandrœ   ‹   s*  € ä�T˜?¨DÓ1€FßÜ˜Ð/°Ó6ˆØÒØ×ÑÔñ ô ð MÜSV×S]ÑS]õ_áô (¨×-Ò-ÜÐaÓbÐbð �ÔÜ Ó%Ð%ô ˜T 7¨DÓ1€NÜ×(Ò(Ó*€Kßð	-Ü×-Ò-¨nÓ=ˆF÷ ÜÐ9¸1Ó=Ð=ð ”R×%Ñ%Ô%¬b¯oªo¸f×.EÒ.EÜ˜.¨©
ð 3GØGMÀhÈbðRó Sð Sä×-Ò-¨fÓ5ˆç	Šð �XÔÜ˜tÓ$÷	 
Šð	IÜ�JŠJŒLô —-‘- Ó'ˆßÜÐ1°&±Ð<¸aÓ@÷ 
Šð	*Ü‘w˜t“}×)Ð)¨Ó*÷! 
Šøô ô 	-Ü˜( 3 %Ð(¨!Ó,Õ,ûð	-ûô( ô 	IÜÐAÀ#ÀÐGÓHÔH÷ 
Šûð	Iûô œL¬/Ð:ô 	*Ü˜( 3 %Ð(Ó)Ô)÷% 
Šûð"	*ú÷# 
�ˆús�   Â/G Ä=IÅG4Å0IÆIÆ(H$Æ<H$ÇG1ÇG,Ç&G1Ç,G1Ç4H!Ç?HÈH!ÈIÈH!È!IÈ$IÈ:IÉIÉIÉIÉIÉI0	c               ó   € V ^8„  d   QhRR/# ©r"   r%   r$   r'   )r(   s   "r)   r*   r*   Ê   s   € ÷ 2ñ 2˜ñ 2r+   c                 ó2   € ^ RI Hp  V ! R4      ;'       g    R# )z4Best-effort author name for an interactive CLI call.©Úcurrent_profile_nameÚuser)Úhermes_cli.profilesr¡   r    s    r)   Ú_profile_authorr¤   Ê   s   € å8Ù Ó'×1Ð1¨6Ð1r+   ÚinitÚcreateÚswarmÚassignÚreclaimÚreassignÚlinkÚunlinkÚclaimÚcommentÚattachz	attach-rmÚcompleteÚeditÚblockÚscheduleÚunblockÚpromoteÚarchiveÚdispatchÚdaemonr…   Ú	heartbeatznotify-subscribeznotify-unsubscribeÚspecifyÚ	decomposezrequest-reviewzrequest-changeszreopen-reviewÚgczfrozenset[str]Ú_DELEGATED_CHILD_DENIED_ACTIONSÚ%_DELEGATED_CHILD_DENIED_BOARD_ACTIONSc               ó    € V ^8„  d   QhRRRR/# )r"   rA   rB   r%   ru   r'   )r(   s   "r)   r*   r*   ß   s   € ÷ 	añ 	aÐ+=ð 	aÀ$ñ 	ar+   c                ó  € \        V R R4      pVR8X  d$   \        V RR4      ;'       g    R\        9  d   R# MV\        9  d   R# ^ RIHp V! \
        P                  ! 4       4      ;'       g    V! \
        P                  ! 4       4      # )r}   Nr�   Úboards_actionÚlistF)Úkanban_path_is_fenced)rG   r¾   r½   Úagent.delegation_contextrÃ   r�   Úkanban_homeÚkanban_db_path)rA   r–   rÃ   s   &  r)   rŠ   rŠ   ß   ss   € Ü�T˜?¨DÓ1€FØ�ÔÜ�D˜/¨4Ó0×:Ð:°FÔChÔhÙð ià	Ô6Ô	6ÙÝ>á ¤§¢Ó!1Ó2×`Ð`Ñ6KÌB×L]ÒL]ÓL_Ó6`Ð`r+   c               ó   € V ^8„  d   QhRR/# )r"   r%   r&   r'   )r(   s   "r)   r*   r*   ë   s   € ÷ 6ñ 6˜Mñ 6r+   c                óT   € V '       d    RP                  V 4      P                  4       # R# )zQFree-text positional ``nargs="*"`` words -> stripped string, or None when absent.Ú N)ÚjoinrP   )Úwordss   &r)   Ú_joined_wordsrÌ   ë   s    € ç&+ˆ3�8‰8�E‹?× Ñ Ó"Ð5°Ð5r+   c               ó    € V ^8„  d   QhRRRR/# r]   r'   )r(   s   "r)   r*   r*   ð   s   € ÷ >ñ >˜]ð >¨}ñ >r+   c                óB   € V f   R# V P                  4       ;'       g    R# )zQ``None`` stays ``None``; otherwise strip, and treat the empty string as ``None``.N)rP   r1   s   &r)   Ú_stripped_or_nonerÏ   ð   s   € à’=ˆ4Ð= u§{¡{£}×'<Ð'<¸Ð=r+   c               ó$   € V ^8„  d   QhRRRRRR/# )r"   Úfailr$   Údoner%   r{   r'   )r(   s   "r)   r*   r*   õ   s!   € ÷ ñ ˜ð  Cð ¨Cñ r+   c                óB   € V '       g   \        V4      # \        V4       ^ # )zMSingle-mutation handlers: print ``done`` (rc 0) or ``fail`` to stderr (rc 1).)r   r‡   )ÚokrÑ   rÒ   s   &&&r)   Ú
_ok_or_errrÕ   õ   s   € çÜ�D‹zÐÜ	ˆ$„KÙr+   c               ó    € V ^8„  d   QhRRRR/# )r"   rA   rB   r%   ú	list[str]r'   )r(   s   "r)   r*   r*   ý   s   € ÷ Cñ CÐ&ð C¨9ñ Cr+   c                óf   € V P                   .\        \        V RR4      ;'       g    . 4      ,           # )z:Positional ``task_id`` plus ``--ids`` extras (bulk verbs).ÚidsN)Útask_idrÂ   rG   )rA   s   &r)   Ú	_bulk_idsrÛ   ý   s)   € à�L‰Lˆ>œD¤¨¨u°dÓ!;×!AÐ!A¸rÓBÕBÐBr+   c               ó    € V ^8„  d   QhRRRR/# )r"   rA   rB   r%   ztuple[list[str], int]r'   )r(   s   "r)   r*   r*     s   € ÷ ñ Ð)ð Ð.Cñ r+   c                ór   € \        V P                  ;'       g    . 4      pV'       g   V\        R4      3# V^ 3# )zS``args.task_ids`` -> ``(ids, 0)`` or ``([], 1)`` after printing the standard error.ú at least one task_id is required)rÂ   Útask_idsr   )rA   rÙ   s   & r)   Ú_require_idsrà     s5   € ä
ˆt�}‰}×"Ð" Ó
#€CßØ”DÐ;Ó<Ð<Ð<Ø�ˆ6€Mr+   c               ó   € V ^8„  d   QhRR/# )r"   r%   úOptional[int]r'   )r(   s   "r)   r*   r*   
  s   € ÷ !ñ !˜Mñ !r+   c                ó¨  € V e   V R8X  d   R# \        V 4      P                  4       P                  4       p \        V4      #   \         d     Mi ; iR^R^<RRRR/pT'       d   TR,          T9   g   \	        R	T : R
24      h \        TRR 4      pM#  \         d   p\	        R	T : 24      ThRp?ii ; i\        Y2TR,          ,          ,          4      # )uu   ``30s`` / ``5m`` / ``2h`` / ``1d`` or a raw integer â†’ seconds; None for empty input;
ValueError on malformed input.Nrp   ÚsÚmÚhé  Údi€Q zmalformed duration z( (expected 30s, 5m, 2h, 1d, or a number)éÿÿÿÿ)r$   rP   r0   r{   r;   Úfloat)Úvalrä   ÚunitsÚnr>   s   &    r)   Ú_parse_durationrî   
  sÖ   € ð ‚{�c˜R”iÙÜˆC‹�‰Ó×ÑÓ €AðÜ�1‹vˆøÜô Ùðúà�!�S˜"˜c 4¨¨eÐ4€Eß�!�B•%˜5”.ÜÐ.¨s©gÐ5]Ð^Ó_Ð_ðAÜ�!�C�R�&‹M‰øÜô AÜÐ.¨s©gÐ6Ó7¸SÐ@ûðAúäˆq˜˜2�•<ÕÓ Ð s)   ¶
A ÁAÁAÂB ÂB2ÂB-Â-B2c               ó    € V ^8„  d   QhRRRR/# rz   r'   )r(   s   "r)   r*   r*     s   € ÷ ñ Ð&ð ¨3ñ r+   c                óN  € \         P                  ! 4       p\        R V 24       \        4         \         P                  ! 4       pV'       d1   \        R\        V4       R24       V F  p\        RV 24       K  	  M\        R4       \        R4       ^ #   \         d    . p L_i ; i)zKanban DB initialized at zDiscovered z7 profile(s) on disk; any of these can be an --assignee:ú  zmNo profiles found under ~/.hermes/profiles/.
Create one with `hermes -p <name> setup` before assigning tasks.a  
Next step: start the gateway so ready tasks actually get picked up.
  hermes gateway start

The gateway hosts an embedded dispatcher that ticks every 60 seconds
by default (config: kanban.dispatch_interval_seconds). Without a
running gateway, tasks stay in 'ready' forever.)r�   r’   r‡   Úlist_profiles_on_diskrr   rR   )rA   rV   ÚprofilesÚnames   &   r)   Ú	_cmd_initrõ     s¡   € Ü�:Š:‹<€DÜ	Ð% d VÐ
,Ô-Ü	„GðÜ×+Ò+Ó-ˆ÷ Ü�œC ›M˜?Ð*aÐbÔcÛˆDÜ�B�t�f�+Öò ô 	ð Qô 	Rä	ð	:ôñ øô! ô ØŠðús   ¯B ÂB$Â#B$c               ó    € V ^8„  d   QhRRRR/# rz   r'   )r(   s   "r)   r*   r*   8  s   € ÷ @ñ @Ð+ð @°ñ @r+   c                óF  € \         P                  ! 4       ;_uu_ 4       p\        P                  ! WP                  \        V R R4      \        V P                  4      R7      pRRR4       \        XRV P                   R2RV P                   24      #   + '       g   i     L8; i)ÚnoteN)rø   Úexpected_run_idzcannot heartbeat z (not running?)zHeartbeat recorded for )ÚkbcÚconnect_closingÚkbdÚheartbeat_workerrÚ   rG   Ú_worker_run_id_forrÕ   ©rA   ÚconnrÔ   s   &  r)   Ú_cmd_heartbeatr  8  s�   € Ü	×	Ò	×	Ô	 $Ü×!Ò! $¯©¼7À4ÈÐQUÓ;VÜ1CÀDÇLÁLÓ1QôSˆ÷ 
ô �bÐ-¨d¯l©l¨^¸?ÐKØ/°·±¨~Ð>ó@ð @÷ 
×	ús   žABÂB 	c               ó    € V ^8„  d   QhRRRR/# rz   r'   )r(   s   "r)   r*   r*   @  s   € ÷ ñ Ð+ð °ñ r+   c                óÂ  € \         P                  ! 4       ;_uu_ 4       p\        P                  ! V4      pR R R 4       \	        V X4      '       d   ^ # V'       g   \        R4       ^ # \        RR RRR R24       V FM  pVR,          '       d   R	MR
p\        VR,          R RVR R\        VR,          ;'       g    / R4       24       KO  	  ^ #   + '       g   i     L¡; i)NuA   (no assignees â€” create a profile with `hermes -p <name> setup`)ÚNAMEÚ20srñ   zON DISKÚ8sz  COUNTSÚon_diskÚyesÚnorô   Úcountsz(idle))rú   rû   r�   Úknown_assigneesr   r‡   r   )rA   r   ÚdataÚentryr  s   &    r)   Ú_cmd_assigneesr  @  sÁ   € Ü	×	Ò	×	Ô	 $Ü×!Ò! $Ó'ˆ÷ 
ä��t×ÒÙßÜÐQÔRÙÜ	ˆV�CˆL˜˜9 R˜.¨Ð
1Ô2ÛˆØ  ×+Ô+‘%°ˆÜ��v•˜sÐ# 2 g¨b \°´KÀÀhÅ×@UÐ@UÐSUÐW_Ó4`Ð3aÐbÖcñ ñ ÷ 
×	ús   žCÃC	c               ó    € V ^8„  d   QhRRRR/# rz   r'   )r(   s   "r)   r*   r*   O  s   € ÷ 9ñ 9Ð(ð 9¨Sñ 9r+   c                óø  € ^ RI Hp V P                  p\        V RR4      pVe   Ve   \	        R^4      # VeB    VR8X  d   \
        P                  P                  4       M\        V4      P                  RR7      p \        V P                  4      w  rV\        \        V R	R4      4      pT'       d   TR8w  d   \	        R^4      #  \!        \        T RR4      4      p\        T RR4      p	T	e   T	^8  d   \	        RT	 R2^4      # \$        P&                  ! 4       ;_uu_ 4       p
\(        P*                  ! T
3/ RT P,                  bRTbRT P.                  bRT P0                  ;'       g    \3        4       bRTbRTbRTbR\        T RR4      bRT P4                  bRT P6                  bR\9        T P:                  ;'       g    R44      bR\=        \        T RR4      4      bR \        T R R4      bR!TbR"\        T R"R4      ;'       g    RbRT	bR#\        T R#R4      bR$\        T R$R4      bR%\=        \        T R%R4      4      bR&\        T R&R4      bR'\        T R'R4      bR(\        T R(R)4      bR*T! 4       '       d    \>        P@                  PC                  R+4      MRb p\(        PD                  ! Y«4      pRRR4       \        T R,R4      '       d   \G        \I        X4      4       ^ # \K        R-X R.XPL                   R/TP.                  ;'       g    R R024       TPL                  R18X  dM   TP.                  '       d;   \O        4       w  rÞT'       g'   T'       d   \K        R2T 2\
        PP                  R37       ^ #   \         d   p\	        RT 2^4      u Rp?# Rp?ii ; i  \        P                   d   p\	        R
T 2^4      u Rp?# Rp?ii ; i  \"         d   p\	        RT 2^4      u Rp?# Rp?ii ; i  + '       g   i     ELK; i)5r6   )Ú"is_dispatcher_owned_worker_contextÚ	body_fileNz5kanban: --body and --body-file are mutually exclusiver-   z	utf-8-sig)Úencodingzkanban: --body-file: rg   rƒ   rN   z8kanban: --branch is only valid with --workspace worktreeÚmax_runtimezkanban: --max-runtime: Úmax_retriesz(kanban: --max-retries must be >= 1 (got z&); use 1 to trip on the first failure.ÚtitleÚbodyÚassigneeÚ
created_byÚworkspace_kindÚworkspace_pathÚbranch_nameÚ
project_idÚprojectÚtenantÚpriorityÚparentsÚtriageFÚidempotency_keyÚmax_runtime_secondsÚskillsÚmodel_overrideÚprovider_overrideÚ	goal_modeÚgoal_max_turnsÚcompletion_contractÚinitial_statusÚrunningÚcreator_task_idÚHERMES_KANBAN_TASKr7   zCreated ú  (z, assignee=Ú)Úreadyu   
âš   r   r'   ))rÄ   r  r  rG   r   rˆ   ÚstdinÚreadr   Ú	read_textÚOSErrorr[   Ú	workspacerh   rS   rT   rî   r;   rú   rû   r�   Úcreate_taskr  r  r  r¤   r  r   ÚtupleÚparentru   rU   Úenvironrv   Úget_taskr   r   r‡   Ústatusrx   r‰   )rA   r  r  r  r>   Úws_kindÚws_pathr  r  r  r   rÚ   Útaskr,  Úmessages   &              r)   Ú_cmd_createrA  O  sþ  € ÝKà�9‰9€DÜ˜˜k¨4Ó0€IØÒ˜IÒ1ÜÐKÈQÓOÐOØÒð	:Ø'0°CÔ'7”3—9‘9—>‘>Ô#¼TÀ)»_×=VÑ=VÐ`kÐ=VÓ=lˆDð)Ü0°·±Ó@ÑˆÜ(¬°°xÀÓ)FÓGˆ÷ �w *Ô,ÜÐNÐPQÓRÐRð8Ü%¤g¨d°MÀ4Ó&HÓIˆô ˜$ ¨tÓ4€KØÒ ;°¤?ÜÐ>¸{¸mð L:ð :Ø;<ó>ð 	>ä	×	Ò	×	Ô	 $Ü—.’.Øò
ØŸ
š
ð
Ù)-ð
Ø8<¿ºð
à—‘×;Ð;¬/Ó*;øð
ñ #ð
ñ 4;ð
ñ ITð
ô ˜t Y°Ô5ð	
ð ?C¿kºkð	
ð UY×TaÒTað	
ô
 ˜$Ÿ+™+×+Ð+¨Ô,ð
ô
 6:¼'À$ÈÐRWÓ:XÔ5Yð
ô $ DÐ*;¸TÔBð
ñ !,ð
ô 5<¸DÀ(ÈDÓ4Q×4YÐ4YÐUYøð
ñ $ð
ô 5<¸DÐBRÐTXÔ4Yð
ô & dÐ,?ÀÔFð
ô œ7 4¨°eÓ<Ô=ð
ô # 4Ð)9¸4Ô@ð
ô !(¨Ð.CÀTÔ Jð
ô # 4Ð)9¸9ÔEð
ñ !C× DÒ Dô  ŸZ™ZŸ^™^Ð,@ÔAØJNøð
ˆô" �{Š{˜4Ó)ˆ÷% 
ô& ˆt�V˜U×#Ò#Ü”M $Ó'Ô(ñ ô 	�˜˜	  T§[¡[ M°¸T¿]¹]×=QÐ=QÈcÐ<RÐRSÐTÔUð �;‰;˜'Ô! d§m§m mÜ9Ó;ÑˆGßŸwÜ˜ ˜yÐ)´·
±
Õ;Ùøô_ ô 	:ÜÐ/°¨uÐ5°qÓ9Õ9ûð	:ûô ×%Ñ%ô )Ü�h˜s˜eÐ$ aÓ(Õ(ûð)ûô ô 8ÜÐ-¨c¨UÐ3°QÓ7Õ7ûð8ú÷ 
×	Ð	úsn   ¹A M) Á:-N ÃO ÄBO(Æ8C.O(Í)NÍ4NÎNÎNÎN>Î%N9Î3N>Î9N>ÏO%ÏO ÏO%Ï O%Ï(O9	c               ó    € V ^8„  d   QhRRRR/# rz   r'   )r(   s   "r)   r*   r*   ‹  s   € ÷ ñ Ð'ð ¨Cñ r+   c                óh  €  V P                   ;'       g    .  Uu. uF  p\        P                  ! V4      NK  	  ppT'       g   \	        R^4      # \
        P                  ! 4       ;_uu_ 4       p\        P                  ! Y@P                  Y P                  T P                  T P                  T P                  ;'       g    \        4       T P                  \        T RR4      R7	      pRRR4       \        T RR4      '       d   \!        XP#                  4       4       ^ # \%        RXP&                   R2R	P)                  TP*                  4      ,           R
TP,                   RTP.                   2,           4       ^ # u upi   \         d   p\	        R T 2^4      u Rp?# Rp?ii ; i  + '       g   i     LÆ; i)zkanban swarm: Nz/kanban swarm: at least one --worker is requiredr#  )ÚgoalÚworkersÚverifier_assigneeÚsynthesizer_assigneer  r  r   r#  r7   FzSwarm root: z

Workers: ú, z
Verifier: z
Synthesizer: )ÚworkerÚksÚparse_worker_argr;   r   rú   rû   Úcreate_swarmrD  ÚverifierÚsynthesizerr  r  r¤   r   rG   r   Úas_dictr‡   Úroot_idrÊ   Ú
worker_idsÚverifier_idÚsynthesizer_id)rA   r4   rE  r>   r   Úcreateds   &     r)   Ú
_cmd_swarmrU  ‹  sn  € ð/Ø8<¿¹×8IÐ8IÀrÐ8IÓKÑ8I°”2×&Ò& sÖ+Ñ8IˆÐK÷ ÜÐEÀqÓIÐIÜ	×	Ò	×	Ô	 $Ü—/’/Ø—y‘y¨'Ç]Á]Ø!%×!1Ñ!1¸$¿+¹+Ø—‘×;Ð;¬/Ó*;ÀdÇmÁmÜ# DÐ*;¸TÓBô	
ˆ÷ 
ô ˆt�V˜U×#Ò#Ü�G—O‘OÓ%Ô&ñ ô	 	�˜WŸ_™_Ð-ð .ð Ø ŸI™I g×&8Ñ&8Ó9õ:ð=Ø"×.Ñ.Ð/ð 0Ø%×4Ñ4Ð5ð=7õ7ô 	8ñ ùò' LøÜô /Ü�n S EÐ*¨AÓ.Õ.ûð/ú÷ 
×	ús?   ‚E: •E: šE5¹E: Á,A7F!Å5E: Å:FÆFÆFÆFÆ!F1	c               ó    € V ^8„  d   QhRRRR/# rz   r'   )r(   s   "r)   r*   r*   £  s   € ÷ ñ Ð&ð ¨3ñ r+   c                ó’  € V P                   pV P                  '       d   V'       g   \        4       p\        P                  ! 4       ;_uu_ 4       p\
        P                  ! V4       \
        P                  ! W!V P                  V P                  V P                  V P                  \        V R R4      V P                  V P                  R7	      pRRR4       \        T X Uu. uF  p\!        V4      NK  	  up4      '       d   ^ #  \
        P"                  ! RR7      p\'        V4      ^8”  dD   \'        V4      ^,
          p\)        R\
        P*                  ! 4        RT RV^8w  d   RMR	 R
24       V'       g   \)        R4       ^ # V F  p\)        \-        V4      4       K  	  ^ #   + '       g   i     LÜ; iu upi   \$         d    . p L®i ; i)ÚsortN)r  r<  r  Ú
session_idÚinclude_archivedÚorder_byÚworkflow_template_idÚcurrent_step_keyF)rZ  zBoard: ú (z other boardrä   rp   u"    â€” `hermes kanban boards list`)
z(no matching tasks))r  Úminer¤   rú   rû   r�   Úrecompute_readyÚ
list_tasksr<  r  ÚsessionÚarchivedrG   r\  r]  r   r   Úlist_boardsrr   rR   r‡   Úget_current_boardr   )rA   r  r   ÚtasksÚtÚ
all_boardsÚother_counts   &      r)   Ú	_cmd_listrj  £  sh  € Ø�}‰}€HØ‡y‡y€yŸÜ"Ó$ˆÜ	×	Ò	×	Ô	 $ä
×Ò˜4Ô Ü—’Ø¨D¯K©KÀÇÁÐX\×XdÑXdØ!Ÿ]™]´W¸TÀ6È4Ó5PØ!%×!:Ñ!:ÈT×MbÑMbô
ˆ÷ 
ô �±%Ó8±%¨Qœ aÖ(±%Ñ8×9Ò9ÙðÜ—^’^°UÔ;ˆ
ô ˆ:ƒ˜ÔÜ˜*“o¨Õ)ˆÜ�œ×,Ò,Ó.Ð/¨r°+°¸lÐR]ÐabÔRbÉ3ÐhjÐJkð l/ð 0ô 	1çÜÐ#Ô$ÙÛˆÜŒn˜QÓÖ ñ á÷1 
×	üò 9øô
 ô ØŠ
ðús%   ÁA<FÃF1
Ä F6 ÆF.	Æ6GÇGc               ó$   € V ^8„  d   QhRRRRRR/# )r"   Úindentr$   Ú	with_kindru   r%   ÚNoner'   )r(   s   "r)   r*   r*   Â  s!   € ÷ 3ñ 3 cð 3¸ð 3À$ñ 3r+   c               óÆ  € RRRRRR/pV  EFK  pV'       d   VP                    RVP                   2MVP                  p\        V VP                  VP                  R4       R	VP                   R
V 24       VP
                  '       d�   VP
                  P                  4        UUu. uF?  w  rg\        V\        4      '       d   V RRP                  R V 4       4       2MV RV 2NKA  	  pppV'       d    \        V RRP                  V4       24       VP                   F1  p	V	P                  '       g   K  \        V RV	P                   24       K3  	  EKN  	  R# u uppi )zQShared human rendering for ``show`` and ``diagnostics`` (suggested actions only).Úwarningu   âš Úerrorz!!Úcriticalz!!!ú: Ú?z [ú] Ú=Ú,c              3  ó8   "  € T F  p\        V4      x € K  	  R # 5ir`   )r$   )rb   Úxs   & r)   rd   Ú%_print_diagnostics.<locals>.<genexpr>É  s   é € Ð#6±A¨q¤C¨§F F³Aùó   ‚z	   data: z | u      â†’ N)rZ   r  r‡   rv   Úseverityr  Úitemsr9   rÂ   rÊ   ÚactionsÚ	suggestedÚlabel)
Údiagsrl  rm  Ú
sev_markerrè   ÚheadÚkrX   ÚbitsÚas
   &&$       r)   Ú_print_diagnosticsr‡  Â  s4  € à˜U G¨T°:¸uÐE€JÜˆß)2�!—&‘&�˜˜AŸG™G˜9Ñ%¸¿¹ˆÜ��˜Ÿ™¨¯
©
°CÓ8Ð9¸¸A¿J¹J¸<ÀrÈ$ÈÐPÔQØ�6�6ˆ6à !§¡§¡¤ô0Ù .™˜ô =GÀqÌ$×<OÒ<O�q�c˜˜3Ÿ8™8Ñ#6±AÓ#6Ó6Ð7Ñ8ÐXYÐWZÐZ[Ð\]Ð[^ÐU_Ò_Ù .ð ñ 0çÜ˜˜ 	¨%¯*©*°TÓ*:Ð);Ð<Ô=Ø—”ˆAØ�{�{Š{Ü˜˜ ¨¯© yÐ1Ö2ô ó ùó0s   Â&AEc               ó    € V ^8„  d   QhRRRR/# )r"   r  r$   r%   rn  r'   )r(   s   "r)   r*   r*   Ò  s   € ÷ ñ ˜#ð ¨ñ r+   c                óX   € \        4        \        V 4       V F  p\        V4       K  	  R# )z?Blank line, ``title``, then each line (``show`` body sections).N©r‡   )r  ÚlinesÚlines   && r)   Ú_print_sectionr�  Ò  s   € ä	„GÜ	ˆ%„LÛˆÜˆdŽó r+   c               ó    € V ^8„  d   QhRRRR/# rz   r'   )r(   s   "r)   r*   r*   Ú  s   € ÷ `ñ `Ð&ð `¨3ñ `r+   c                óì  € \        V R 4      w  rV'       d   V# Rp\        V RR4      p\        P                  ! 4       ;_uu_ 4       p\        P
                  ! WPP                  4      pV'       g#   \        RV P                   24      uuRRR4       # \        P                  ! WPP                  4      p\        P                  ! WPP                  4      p\        P                  ! WPP                  4      p	\        P                  ! WPP                  4      p
\        P                  ! WPP                  3/ VB p\        P                  ! WPP                  4      pV'       g!   \        P                  ! WVP                  4      pRRR4       V'       dw   \!        R\#        X4      RXRX	RX
R	X Uu. uF  p\%        VR?4      NK  	  upR
X Uu. uF  p\%        VR@4      NK  	  upRX Uu. uF  p\%        V\&        4      NK  	  up/4       ^ # R R lp\)        RXP                   RVP*                   24       V! RVP,                  4       T! RVP.                  ;'       g    R4       VP0                  '       d   V! RVP0                  4       T! RVP2                   VP4                  '       d   RVP4                   2MR,           4       VP6                  '       d   V! RVP6                  4       VP8                  '       d#   V! RRP;                  VP8                  4      4       VP<                  '       d<   VP>                  '       d   RVP>                   R2MRpV! RVP<                   V 24       VP@                  e   \)        RVP@                   R24       Mq\C        4       PE                  R4      pVe8   \G        V4      \        PH                  8w  d   \)        R\G        V4       R 24       M\)        R\        PH                   R!24       T! R"\K        VPL                  4       R#VPN                  ;'       g    R 24       ^ R$I(H)p VPU                  VXXVR%7      pV'       d'   \)        R&\W        V4       R'24       \Y        VR(RR)7       VPZ                  '       d   V! R*\K        VPZ                  4      4       VP\                  '       d   V! R+\K        VP\                  4      4       X	'       d   V! RRP;                  V	4      4       X
'       d   V! RRP;                  V
4      4       VP^                  '       d   \a        R,VP^                  .4       VPb                  '       d   \a        R-VPb                  .4       MX'       d   \a        R.V.4       X'       d!   \a        R/\W        V4       R'2R0 V 4       4       V'       d$   \a        R1\W        V4       R'2R2 VRAR  4       4       V'       Edz   \)        4        \)        R3\W        V4       R'24       V EFP  pVPd                  '       d(   \g        ^ VPd                  VPZ                  ,
          4      MRpVe   V R42MR5pVPh                  ;'       g    VP,                  ;'       g    R5p\)        R6VP                  R7 R8VR9 R:VPj                  ;'       g    R R;V R;\K        VPZ                  4       2
4       VPl                  '       d5   \)        R<VPl                  Po                  4       ^ ,          R=,           24       VPp                  '       g   EK  \)        R>VPp                  Po                  4       ^ ,          R=,           24       EKS  	  ^ #   + '       g   i     ELã; iu upi u upi u upi )BÚshowNr7   Fúno such task: r?  Úlatest_summaryr!  ÚchildrenÚcommentsÚeventsÚrunsc               ó    € V ^8„  d   QhRRRR/# )r"   r€  r$   r%   rn  r'   )r(   s   "r)   r*   Ú_cmd_show.<locals>.__annotate__÷  s   € ÷ -ñ -�Sð - Dñ -r+   c                ó6   € \        R V R,           R V 24       R# )rñ   Ú:z<11NrŠ  )r€  r#   s   &&r)   ÚfieldÚ_cmd_show.<locals>.field÷  s   € Ü��5˜3•;˜sÐ# E 7Ð+Ö,r+   zTask rs  r<  r  r-   r  r6  z @ rp   rg   r%  rH  z (provider: r0  Úmodelz  max-retries: z (task)Úfailure_limitz (config kanban.failure_limit)z
 (default)rT  z by ©Úkanban_diagnostics)Úgraphz
  Diagnostics (z):ú    ©rm  ÚstartedÚ	completedzBody:zResult:zLatest summary:z
Comments (c              3  ó†   "  € T F7  pR \        VP                  4       RVP                   RVP                   2x € K9  	  R# 5i)ú  [ru  rs  N)r   Ú
created_atÚauthorr  )rb   Úcs   & r)   rd   Ú_cmd_show.<locals>.<genexpr>(  s8   é € Ð^ÑU]ÐPQ˜#œg a§l¡lÓ3Ð4°B°q·x±x°jÀÀ1Ç6Á6À(ÕKÓU]ùs   ‚?AzEvents (c           	   3  óü   "  € T Fr  pR \        VP                  4       RVP                  '       d   RVP                   R2MR RVP                   VP                  '       d   RVP                   2MR 2x € Kt  	  R# 5i)r§  Ú]z [run rp   rÉ   N)r   r¨  Úrun_idrZ   Úpayload)rb   Úes   & r)   rd   r«  *  ss   é € ð 4Má?K¸!ð ”'˜!Ÿ,™,Ó'Ð(¨À!Ç(Ç(À(¨F°1·8±8°*¸AÑ*>ÐPRÐ)SÐSTÐUV×U[ÑU[ÐT\Ø"#§)§) )��1—9‘9�+‰°Ð4õ6Û?Kùs   ‚AA<Á!A<zRuns (rä   Úactivez  #z<3rÉ   z<12z @rñ   u           â†’ :Né    Nz
        ! )r©  r  r¨  )rZ   r¯  r¨  r®  iìÿÿÿ)9rJ   rG   rú   rû   r�   r;  rÚ   r   Úlist_commentsÚlist_eventsÚ
parent_idsÚ	child_idsÚ	list_runsr’  Útask_graph_contextÚidr   r   r   r   r‡   r  r<  r  r  r  r  r  r%  rÊ   r&  r'  r  r   rv   r{   ÚDEFAULT_FAILURE_LIMITr   r¨  r  Ú
hermes_clir   Úcompute_task_diagnosticsrR   r‡  Ú
started_atÚcompleted_atr  r�  ÚresultÚended_atÚmaxÚoutcomeÚprofileÚsummaryÚ
splitlinesrq  )rA   ÚrskÚrcr¡  Ú	want_jsonr   r?  r”  r•  r!  r“  r–  r’  rª  r°  Úrr›  Ú_provÚcfg_valÚkdr�  ÚelapsedÚelrÂ  s   &                       r)   Ú	_cmd_showrÏ  Ú  sÒ  € Ü  fÓ-�G€Cß	Øˆ	Ø€EÜ˜˜f eÓ,€IÜ	×	Ò	×	Ô	 $Ü�{Š{˜4§¡Ó.ˆßÜ˜.¨¯©¨Ð7Ó8÷ 
Ò	ô ×#Ò# D¯,©,Ó7ˆÜ—’ §l¡lÓ3ˆÜ—-’- §l¡lÓ3ˆÜ—<’< §l¡lÓ3ˆÜ�|Š|˜D§,¡,Ñ6°#Ñ6ˆä×*Ò*¨4·±Ó>ˆßÜ×)Ò)¨$·±Ó8ˆE÷ 
÷ ÜØ”M $Ó'Ð)9¸>È9ÐV]Ð_iÐksØÑQYÓZÑQYÈAœ 1Ð&FÖGÑQYÑZØÑZ`ÓaÑZ`ÐUV”y Ð$OÖPÑZ`ÑaØ¹TÓB¹T¸”Y˜qÔ"2Ö3¹TÑBð	
ô 	ñ õ-ô 
ˆE�$—'‘'�˜"˜TŸZ™Z˜LÐ
)Ô*Ù	ˆ(�D—K‘KÔ Ù	ˆ*�d—m‘m×*Ð* sÔ+Ø‡{‡{€{Ùˆh˜Ÿ™Ô$Ù	ˆ+˜$×-Ñ-Ð.ÐRV×Re×ReÐRe°S¸×9LÑ9LÐ8MÑ3NÐkmÕnÔoØ××ÐÙˆh˜×(Ñ(Ô)Ø‡{‡{€{Ùˆh˜Ÿ	™	 $§+¡+Ó.Ô/Ø××ÐØ<@×<R×<RÐ<R�,˜t×5Ñ5Ð6°aÑ8ÐXZˆÙˆg˜$×-Ñ-Ð.¨u¨gÐ6Ô7à×ÑÒ#Ü� × 0Ñ 0Ð1°Ð9Õ:ä Ó"×&Ñ& Ó7ˆØÒ¤3 w£<´2×3KÑ3KÔ#KÜ�O¤C¨£L >Ð1OÐPÕQä�O¤B×$<Ñ$<Ð#=¸ZÐHÔIÙ	ˆ)œ §¡Ó0Ð1°°d·o±o×6LÐ6LÈÐ5MÐNÔOõ 4Ø×'Ñ'¨¨f°dÀ%Ð'ÓH€EßÜÐ!¤# e£* ¨RÐ0Ô1Ü˜5 &°EÕ:Ø‡‡€Ùˆiœ §¡Ó1Ô2Ø××ÐÙˆkœ7 4×#4Ñ#4Ó5Ô6ßÙˆi˜Ÿ™ 7Ó+Ô,ßÙˆj˜$Ÿ)™) HÓ-Ô.Ø‡y‡y€yÜ�w §¡ Ô,Ø‡{‡{€{Ü�y 4§;¡; -Õ0ß	ÜÐ(¨>Ð*:Ô;ßÜ˜¤C¨£M ?°"Ð5Ù^ÑU]Ó^ô	`çÜ˜¤# f£+ ¨bÐ1ñ 4Mà?EÀcÀd¹|ó4Mô 	N÷ €tÜŒÜ�”s˜4“y�k Ð$Ô%ÜˆAà;<¿:¿:¸:”c˜!˜QŸZ™Z¨!¯,©,Õ6Ô7È4ˆGØ")Ò"5�G�9˜A‘¸8ˆBØ—i‘i×7Ð7 1§8¡8×7Ð7¨xˆGÜ�C˜Ÿ™˜R�y  '¨# ¨b°·±×1AÐ1A¸cÐ0BÀ"ÀRÀDÈÌ7ÐST×S_ÑS_ÓK`ÐJaÐbÔcØ�y�yˆyÜ˜ Q§Y¡Y×%9Ñ%9Ó%;¸AÕ%>¸tÕ%DÐ$EÐFÔGØ�w�w‹wÜ˜
 1§7¡7×#5Ñ#5Ó#7¸Õ#:¸4Õ#@Ð"AÐB×Cñ ñ ÷u 
×	Ð	üò" [ùÚaùÚBs&   ÁA ]ÂC)]Æ$]'Ç ],Ç]1"Ý]$	c               ó    € V ^8„  d   QhRRRR/# rz   r'   )r(   s   "r)   r*   r*   =  s   € ÷ Qñ QÐ(ð Q¨Sñ Qr+   c           	     óH  € \        V P                  4      p\        P                  ! 4       ;_uu_ 4       p\        P
                  ! W P                  V4      pR R R 4       \        XRV P                   2RV P                   RT;'       g    R 24      #   + '       g   i     LD; i)Nr‘  z	Assigned ú to ú(unassigned))r2   rÃ  rú   rû   r�   Úassign_taskrÚ   rÕ   )rA   rÃ  r   rÔ   s   &   r)   Ú_cmd_assignrÕ  =  s~   € Ü˜DŸL™LÓ)€GÜ	×	Ò	×	Ô	 $Ü�^Š^˜D§,¡,°Ó8ˆ÷ 
ä�b˜N¨4¯<©<¨.Ð9Ø! $§,¡, ¨t°G×4MÐ4M¸~Ð3NÐOóQð Q÷ 
×	ús   ³"BÂB!	c               ó    € V ^8„  d   QhRRRR/# rz   r'   )r(   s   "r)   r*   r*   E  s   € ÷ ñ Ð+ð °ñ r+   c           	     ó`  € V P                   pVe   VP                  4       R9   d   R p\        V RR 4      p \        P                  ! 4       ;_uu_ 4       p\
        P                  ! W0P                  WR7      pR R R 4       X'       g   \        RT P                   24      # T'       d0   T'       d   T RT 2MTp\        RT P                   RT R24       ^ # \        R	T P                   R
24       ^ #   + '       g   i     L‚; i  \        \        3 d   p\        RT 2^4      u R p?# R p?ii ; i)NÚprovider)rØ  rƒ   r‘  rš  zSet model override on rs  z (applies on next dispatch)zCleared model override on z" (worker uses its profile default)>   rp   r-   r.   r/   )r�  r0   rG   rú   rû   r�   Úset_model_overriderÚ   r;   r”   r   r‡   )rA   r�  rØ  r   rÔ   r>   r€  s   &      r)   Ú_cmd_set_modelrÚ  E  s  € Ø�J‰J€EØÒ˜UŸ[™[›]Ð.GÔGØˆÜ�t˜Z¨Ó.€Hð)Ü× Ò ×"Ô" dÜ×&Ò& t¯\©\¸5ÔTˆB÷ #÷ Ü�n T§\¡\ NÐ3Ó4Ð4ßß)1�8�*˜A˜e˜WÑ%°uˆÜÐ& t§|¡| n°B°u°gÐ=XÐYÔZñ ô 	Ð*¨4¯<©<¨.Ð8ZÐ[Ô\Ù÷ #×"ûäœÐ%ô )Ü�h˜s˜eÐ$ aÓ(Õ(ûð)ús;   ¶D Á#C0Á6D Ã0D 	Ã;D Ä D ÄD-ÄD(Ä"D-Ä(D-c               ó    € V ^8„  d   QhRRRR/# rz   r'   )r(   s   "r)   r*   r*   Y  s   € ÷ 3ñ 3Ð)ð 3¨cñ 3r+   c                ó  € \         P                  ! 4       ;_uu_ 4       p\        P                  ! WP                  \        V R R4      R7      pRRR4       \        XRV P                   R2RV P                   24      #   + '       g   i     L8; i)ÚreasonN)rÝ  zcannot reclaim z (not running or unknown id)z
Reclaimed )rú   rû   r�   Úreclaim_taskrÚ   rG   rÕ   rÿ   s   &  r)   Ú_cmd_reclaimrß  Y  sl   € Ü	×	Ò	×	Ô	 $Ü�_Š_˜T§<¡<¼ÀÀhÐPTÓ8UÔVˆ÷ 
ä�b˜O¨D¯L©L¨>Ð9UÐVØ" 4§<¡< .Ð1ó3ð 3÷ 
×	ús   ž.A<Á<B	c               ó    € V ^8„  d   QhRRRR/# rz   r'   )r(   s   "r)   r*   r*   `  s   € ÷ 	ñ 	Ð*ð 	¨sñ 	r+   c                óÆ  € \        V P                  4      p\        \        V R R4      4      p\        P
                  ! 4       ;_uu_ 4       p\        P                  ! W0P                  W\        V RR4      R7      pRRR4       \        XRV P                   R2RV P                   RT;'       g    R	 2V'       d   R
,           4      # R,           4      #   + '       g   i     L`; i)r©   FrÝ  N)Úreclaim_firstrÝ  zcannot reassign uC    (unknown id, or still running â€” pass --reclaim to release first)zReassigned rÒ  rÓ  z (claim reclaimed)rp   )
r2   rÃ  ru   rG   rú   rû   r�   Úreassign_taskrÚ   rÕ   )rA   rÃ  r©   r   rÔ   s   &    r)   Ú_cmd_reassignrä  `  sÂ   € Ü˜DŸL™LÓ)€GÜ”7˜4 ¨EÓ2Ó3€GÜ	×	Ò	×	Ô	 $Ü×Ò˜d§L¡L°'ÔY`ÐaeÐgoÐquÓYvÔwˆ÷ 
äØ
Ø
˜4Ÿ<™<˜.Ð(kÐlØ
�d—l‘l�^ 4¨×(AÐ(A°>Ð'BÐC×_fÐG[Õoóð ð moÕoóð ÷ 
×	ús   Á	/CÃC 	c               ó$   € V ^8„  d   QhRRRRRR/# )r"   Útabler$   rÙ   r×   r%   zdict[str, list]r'   )r(   s   "r)   r*   r*   l  s!   € ÷ ñ ˜sð ¨ð °ñ r+   c                ó  € V Uu/ uF  q3. bK  	  ppRP                  R.\        V4      ,          4      pV P                  RV RV R2\        V4      4       F+  pVP	                  VR,          . 4      P                  V4       K-  	  V# u upi )zH``{task_id: [rows ordered by id]}`` for every id (empty list when none).rw  rt  zSELECT * FROM z WHERE task_id IN (z) ORDER BY idrÚ   )rÊ   rR   Úexecuter8  Ú
setdefaultÚappend)r   ræ  rÙ   ÚiÚbyÚplaceholdersÚrows   &&&    r)   Ú_rows_by_taskrï  l  s†   € áÓ	™�AˆRŠ%™€BÐ	Ø—8‘8˜S˜E¤C¨£HÕ,Ó-€LØ�|‰|˜n¨U¨GÐ3FÀ|ÀnÐTaÐbÔdiÐjmÓdnÖoˆØ
�‰�c˜)•n bÓ)×0Ñ0°Ö5ñ pà€Iùò	 
s   …Bc               ó    € V ^8„  d   QhRRRR/# rz   r'   )r(   s   "r)   r*   r*   u  s   € ÷ Kñ KÐ-ð K°#ñ Kr+   c                óî	  € ^ RI Hp ^ RIHp VP	                  V! 4       4      p\
        P                  ! 4       ;_uu_ 4       p\        V RR4      '       dÄ   \        P                  ! W@P                  4      pVf#   \        RV P                   24      uuRRR4       # V P                  VP                  V\        P                  ! W@P                  4      \        P                  ! W@P                  4      \        P                  ! W@P                  4      VR7      /pMÝ\!        VP#                  R4      P%                  4       4      pV Uu. uF  qˆR,          NK  	  p	p/ pV	'       d•   \'        VR	V	4      p
\'        VR
V	4      p\        P(                  ! WI4      pV F^  pVR,          pVP                  WŠP+                  V. 4      VP+                  V. 4      VP+                  V4      VR7      pV'       g   KZ  WæV&   K`  	  \        V RR4      pV'       dŠ   VP,                  P/                  V4      pVP1                  4        UUUu/ uFP  w  rÞV Uu. uF1  pVP,                  P/                  VP2                  4      V8¼  g   K/  VNK3  	  up;p'       g   KM  VVbKR  	  pppp/ pV'       d{   RP5                  R.\7        V4      ,          4      pVP#                  RV R2\9        VP;                  4       4      4       F'  pR& Uu/ uF  pVVV,          bK  	  upVVR,          &   K)  	  RRR4       \<        P>                  ! 4       p\        V RR4      '       dv   \A        XP1                  4        UUUu. uF=  w  rÞRV/XP+                  V/ 4      CRV Uu. uF  pVPC                  4       NK  	  up/CNK?  	  upppRRRVR. /.,           4       ^ # \E        RV 24       X'       g   \E        R4       ^ # \G        R VPI                  4        4       4      p\E        V R\7        V4       R24       VP1                  4        F“  w  rÞXP+                  V/ 4      p\E        RT RVP+                  R4      ;'       g    RR RVP+                  R4      ;'       g    R R! RVP+                  R4      ;'       g    R" 24       \K        VR#R$R%7       \E        4        K•  	  ^ # u upi u upi u upppi u upi   + '       g   i     ELÊ; iu upi u upppi )'zQList active diagnostics on the board via the same rule engine the dashboard uses.rŸ  )Úload_configr?  Nr‘  )r¡  Úconfigz.SELECT * FROM tasks WHERE status != 'archived'r¹  Útask_eventsÚ	task_runsr|  rw  rt  z;SELECT id, title, status, assignee FROM tasks WHERE id IN (r0  r  r<  r  r7   FrÚ   ÚdiagnosticsÚdispatch_profileszkanban.dispatch_profiles: z$No active diagnostics on this board.c              3  ó8   "  € T F  p\        V4      x € K  	  R # 5ir`   )rR   )rb   Údls   & r)   rd   Ú#_cmd_diagnostics.<locals>.<genexpr>¸  s   é € Ð9Ñ"8˜B”�B—�Ó"8ùr{  z active diagnostic(s) across z
 task(s):
rñ   r  z  @rÓ  Ú18sz
(untitled)r¢  Tr£  )r  r<  r  )&r»  r   Úhermes_cli.configrò  Úconfig_from_runtime_configrú   rû   rG   r�   r;  r?  r   r¼  r´  r·  r¸  rÂ   rè  Úfetchallrï  Útask_graph_contextsrv   ÚSEVERITY_ORDERÚindexr}  r|  rÊ   rR   r8  Úkeysrü   Ú"dispatch_profile_allowlist_summaryr   Úto_dictr‡   ÚsumÚvaluesr‡  )rA   rÌ  rò  Údiag_configr   r?  Údiags_by_taskÚrowsrÉ  rÙ   Úev_byÚrun_byÚgraph_byÚtidrù  ÚsevÚfloorrè   ÚkeptÚmetarí  r„  Ú	allowlistÚtotalrå   s   &                        r)   Ú_cmd_diagnosticsr  u  sr  € å3õ .à×/Ñ/±³Ó>€Kä	×	Ò	×	Ô	 $ä�4˜ ×&Ò&Ü—;’;˜t§Y¡YÓ/ˆDØŠ|Ü˜n¨T¯Y©Y¨KÐ8Ó9÷ 
Ò	ð "ŸY™Y¨×(CÑ(CØ”b—n’n T¯9©9Ó5´r·|²|ÀDÏ)É)Ó7TÜ×+Ò+¨D·)±)Ó<À[ð )Dó )Rð S‰Mô
 ˜Ÿ™Ð%UÓV×_Ñ_ÓaÓbˆDÙ$(Ó)¡D˜q�T—7�7¡DˆCÐ)ØˆMßÜ% d¨M¸3Ó?�Ü& t¨[¸#Ó>�Ü×1Ò1°$Ó<�Û�AØ˜D�'�CØ×4Ñ4°Q¿	¹	À#ÀrÓ8JÈFÏJÉJÐWZÐ\^ÓL_Ø;C¿<¹<ÈÓ;LÐU`ð 5ó b�Bç‘rØ-/ cÓ*ñ ô �d˜J¨Ó-ˆßØ×%Ñ%×+Ñ+¨CÓ0ˆEØ6C×6IÑ6IÔ6Kõ kÑ6K©7¨3Ù57Ó)h±R°¸2×;LÑ;L×;RÑ;RÐST×S]ÑS]Ó;^ÐbgÑ;g¯!¨!±RÑ)hÐ!h Ó!hô '˜S $šYÑ6KˆMò kð !#ˆßØŸ8™8 S E¬C°Ó,>Õ$>Ó?ˆLØ—\‘\Ð$_Ð`lÐ_mÐmnÐ"oÜ"'¨×(:Ñ(:Ó(<Ó"=ö?�á2QÓ RÑ2Q¨Q  A a¥D¢Ñ2QÑ R��Q�t•W“ñ?÷G 
ôP ×6Ò6Ó8€Iäˆt�V˜U×#Ò#ô 	Ø$1×$7Ñ$7Ô$9õ;Ù$9™˜ð   Ðd¨¯©°°bÓ(9Ðd¸=Ñ`bÓJcÑ`bÐ[\È1Ï9É9Î;Ñ`bÑJcÔdÙ$9ó;à! 4Ð)<¸iÈÐXZÐ[Ð\õ]ô 	^ñ ä	Ð& y kÐ
2Ô3ßÜÐ4Ô5ÙäÑ9 -×"6Ñ"6Ô"8Ó9Ó9€EÜ	ˆUˆGÐ0´°]Ó1CÐ0DÀKÐ
PÔQØ ×&Ñ&Ö(‰ˆØ�H‰H�S˜"ÓˆÜ��3�%�r˜!Ÿ%™% ›/×0Ð0¨S°Ð4°C¸¿¹¸jÓ8I×8[Ð8[È^Ð\_Ð7`Ð`bØ—‘�w“×/Ð/ <Ð0ð2ô 	3ä˜2˜v°Õ6ÜŽñ )ñ ùòg *ùò" *iùôkùò !S÷K 
×	Ð	üòZ Kdùô ;s‰   Á ASÂB)SÅSÅBSÇ,ASÈ8SÉ,SÉ4SÉ:SÊSÊSÊASË2S
ÌSÍ!S0Î S+Î	S0ÓSÓSÓSÓS(	Ó+S0c               ó    € V ^8„  d   QhRRRR/# rz   r'   )r(   s   "r)   r*   r*   Ã  s   € ÷ ñ Ð&ð ¨3ñ r+   c                ó6  € V P                   \        P                  P                  R 4      8X  d   \	        V P                   4      MRp\
        P                  ! 4       ;_uu_ 4       p\        P                  ! W P                  V P                   VR7      pRRR4       \        RV P                   RV P                    24       X'       dA   \        RV P                    RV P                   RV P                   RV P                    R	2	4       ^ #   + '       g   i     L; i)
r.  N)Úexpected_child_run_idzLinked ú -> zNote: u&    was ready and is now todo â€” parent z� is not done yet. The ready -> running claim re-checks parents, so the child only runs after the parent completes; use `hermes kanban unlink rÉ   z` to run it now.)Úchild_idrU   r:  rv   rþ   rú   rû   r�   Ú
link_tasksÚ	parent_idr‡   )rA   r  r   Úgateds   &   r)   Ú	_cmd_linkr  Ã  sß   € ð
 �=‰=œBŸJ™JŸN™NÐ+?Ó@Ô@ô 	˜4Ÿ=™=Ô)ØFJð ô 
×	Ò	×	Ô	 $Ü—’˜d§N¡N°D·M±MØ4IôKˆ÷ 
ô 
ˆG�D—N‘NÐ# 4¨¯© Ð
7Ô8ßÜØ�T—]‘]�OÐ#IØ�~‰~Ðð 4à48·N±NÐ3CÀ1ÀTÇ]Á]ÀOð Tðô	
ñ ÷ 
×	ús   Á#.DÄD	c               ó    € V ^8„  d   QhRRRR/# rz   r'   )r(   s   "r)   r*   r*   Ø  s   € ÷ Gñ GÐ(ð G¨Sñ Gr+   c                óL  € \         P                  ! 4       ;_uu_ 4       p\        P                  ! WP                  V P
                  4      pR R R 4       \        XRV P                   RV P
                   2RV P                   RV P
                   24      #   + '       g   i     LQ; i)NzNo such link: r  z	Unlinked )rú   rû   r�   Úunlink_tasksr  r  rÕ   rÿ   s   &  r)   Ú_cmd_unlinkr!  Ø  s{   € Ü	×	Ò	×	Ô	 $Ü�_Š_˜T§>¡>°4·=±=ÓAˆ÷ 
ä�b˜N¨4¯>©>Ð*:¸$¸t¿}¹}¸oÐNØ! $§.¡.Ð!1°°d·m±m°_ÐEóGð G÷ 
×	ús   ž,BÂB#	c               ó    € V ^8„  d   QhRRRR/# rz   r'   )r(   s   "r)   r*   r*   ß  s   € ÷ ñ Ð'ð ¨Cñ r+   c                ó¦  € \         P                  ! 4       ;_uu_ 4       p\        P                  ! WP                  V P
                  R 7      pVf�   \        P                  ! WP                  4      pVf#   \        RV P                   24      uuRRR4       # \        RV P                   RVP                   RVP                  ;'       g    R 24      uuRRR4       # \        P                  ! V4      p\        P                  ! WP                  \        V4      4       RRR4       \        RXP                   RX 24       ^ #   + '       g   i     L-; i)	)Úttl_secondsNr‘  zcannot claim z	: status=z lock=z(none)zClaimed z
Workspace: )rú   rû   r�   Ú
claim_taskrÚ   Úttlr;  r   r<  Ú
claim_lockÚkbwÚresolve_workspaceÚset_workspace_pathr¹  r$   r‡   )rA   r   r?  Úexistingr6  s   &    r)   Ú
_cmd_claimr,  ß  s  € Ü	×	Ò	×	Ô	 $Ü�}Š}˜T§<¡<¸T¿X¹XÔFˆØŠ<Ü—{’{ 4¯©Ó6ˆHØÒÜ˜n¨T¯\©\¨NÐ;Ó<÷ 
Ò	ô ˜-¨¯© ~°Y¸x¿¹Ð>Oð P Ø (× 3Ñ 3× ?Ð ?°xÐ@ðBó C÷ 
Ò	ô ×)Ò)¨$Ó/ˆ	Ü×Ò˜t§W¡W¬c°)«nÔ=÷ 
ô 
ˆH�T—W‘W�I˜]¨9¨+Ð
6Ô7Ù÷ 
×	ús   žA,E Â2E ÃE ÃA E Å E	c               ó    € V ^8„  d   QhRRRR/# rz   r'   )r(   s   "r)   r*   r*   î  s   € ÷ ñ Ð)ð ¨cñ r+   c           	     óž  € R P                  V P                  4      P                  4       pV P                  e†   V P                  ^8  d   \	        R^4      # \        V4      V P                  8”  dO   RV P                   R2pVR\        ^ V P                  \        V4      ,
          4       P                  4       V,           pV P                  ;'       g    \        4       p\        P                  ! 4       ;_uu_ 4       p\        P                  ! W@P                  W14       RRR4       \        RV P                   24       ^ #   + '       g   i     L*; i)rÉ   Nz"kanban: --max-len must be positivez

[trimmed to z chars by --max-len]zComment added to )rÊ   ÚtextrP   Úmax_lenr   rR   rÁ  Úrstripr©  r¤   rú   rû   r�   Úadd_commentrÚ   r‡   )rA   r  Úsuffixr©  r   s   &    r)   Ú_cmd_commentr4  î  sï   € Ø�8‰8�D—I‘IÓ×$Ñ$Ó&€DØ‡|�|ÒØ�<‰<˜!ÔÜÐ<¸aÓ@Ð@Üˆt‹9�t—|‘|Ô#Ø'¨¯© ~Ð5IÐJˆFØÐ<œ#˜a §¡´°F³Õ!;Ó<Ð=×DÑDÓFÈÕOˆDØ�[‰[×-Ð-œOÓ-€FÜ	×	Ò	×	Ô	 $Ü
�Š�tŸ\™\¨6Ô8÷ 
ä	Ð˜dŸl™l˜^Ð
,Ô-Ù÷ 
×	ús   Ã8"D<Ä<E	c               ó    € V ^8„  d   QhRRRR/# rz   r'   )r(   s   "r)   r*   r*   ý  s   € ÷ ñ Ð(ð ¨Sñ r+   c                ó,  € ^ RI p\        V P                  4       \        V P                  4      P                  4       pVP                  4       '       g   \        RV 24      # VP                  4       pV P                  ;'       g    VP                  pV P                  ;'       g    VP                  V4      ^ ,          pV P                  ;'       g    \        4       p \        P                  ! 4       ;_uu_ 4       p\         P"                  ! WpP                  WCVVR7      pRRR4       \'        RT RT P                   RX R\)        T4       R	2	4       ^ #   + '       g   i     L=; i  \         P$                   d   p	\        RT	 24      u Rp	?	# Rp	?	ii ; i)
z‘Attach a local file via the shared ``store_attachment_bytes`` path (same 25 MB cap and name
sanitisation as the dashboard upload and agent tool).Nzkanban: no such file: )Úcontent_typeÚuploaded_byrƒ   z	Attached rÒ  z (attachment rH  z bytes))Ú	mimetypesrþ   rÚ   r   rV   rW   Úis_filer   Ú
read_bytesrô   r7  Ú
guess_typer©  r¤   rú   rû   r�   Ústore_attachment_bytesÚAttachmentTooLarger‡   rR   )
rA   r9  Úsrcr  rô   r7  r8  r   Úatt_idr>   s
   &         r)   Ú_cmd_attachrA  ý  s;  € ó Ü�t—|‘|Ô$ä
ˆt�y‰y‹/×
$Ñ
$Ó
&€CØ�;‰;�=Š=ÜÐ,¨S¨EÐ2Ó3Ð3Ø�>‰>Ó€DØ�9‰9× Ð ˜Ÿ™€DØ×$Ñ$×EÐE¨	×(<Ñ(<¸TÓ(BÀ1Õ(E€LØ—+‘+×2Ð2¤Ó!2€Kð&Ü× Ò ×"Ô" dÜ×.Ò.¨t·\±\À4Ð\hØ;FôHˆF÷ #ô
 
ˆI�d�V˜4 §¡˜~¨]¸6¸(À"ÄSÈÃYÀKÈwÐ
WÔXÙ÷ #×"ûô × Ñ ô &Ü�h˜s˜eÐ$Ó%Õ%ûð&ús<   ÃE& Ã9%EÄE& ÅE#	ÅE& Å#E& Å&FÅ;FÆFÆFc               ó    € V ^8„  d   QhRRRR/# rz   r'   )r(   s   "r)   r*   r*     s   € ÷ ñ Ð-ð °#ñ r+   c                ó2  € \         P                  ! 4       ;_uu_ 4       p\        P                  ! WP                  4      f#   \        RV P                   24      uuR R R 4       # \        P                  ! WP                  4      pR R R 4       \        T X Uu. uF  p\        V\        4      NK  	  upRR7      '       d   ^ # V'       g   \        RV P                   24       ^ # \        RV P                   R24       V F~  pVP                  ;'       g    Rp\        RVP                   R	VP                   R
VP                   RT RVP                  ;'       g    R R24       \        RVP                    24       K€  	  ^ #   + '       g   i     EL; iu upi )Nr‘  T)ÚasciizNo attachments on zAttachments on rš  r-   r§  ru  r/  z bytes, z, by r0  z        )rú   rû   r�   r;  rÚ   r   Úlist_attachmentsr   r   r   r‡   r7  r¹  ÚfilenameÚsizer8  Ústored_path)rA   r   Úattsr†  Úcts   &    r)   Ú_cmd_attachmentsrK    s>  € Ü	×	Ò	×	Ô	 $Ü�;Š;�tŸ\™\Ó*Ò2Ü˜.¨¯©¨Ð7Ó8÷ 
Ò	ô ×"Ò" 4¯©Ó6ˆ÷ 
ô �Á$ÓGÁ$¸Qœ	 !Ô%7Ö8Á$ÑGÈt×TÓTÙßÜÐ" 4§<¡< .Ð1Ô2ÙÜ	ˆO˜DŸL™L˜>¨Ð
+Ô,ÛˆØ�^‰^×"Ð"˜sˆÜ��A—D‘D�6˜˜AŸJ™J˜< s¨1¯6©6¨(°(¸2¸$¸eÀAÇMÁM×DXÐDXÐUXÐCYÐYZÐ[Ô\Ü�˜Ÿ™˜Ð(Ö)ñ ñ ÷ 
×	Ð	üò Hs   ž:F Á# F ÂF
Æ F	c               ó    € V ^8„  d   QhRRRR/# rz   r'   )r(   s   "r)   r*   r*   &  s   € ÷ ñ Ð+ð °ñ r+   c                óT  € \         P                  ! 4       ;_uu_ 4       p\        P                  ! WP                  4      pR R R 4       Xf   \        RV P                   24      # \        RV P                   RVP                   RVP                   24       ^ #   + '       g   i     L`; i)Nzno such attachment: zDeleted attachment r^  z) from )	rú   rû   r�   Údelete_attachmentÚattachment_idr   r‡   rF  rÚ   )rA   r   Úremoveds   &  r)   Ú_cmd_attach_rmrQ  &  sˆ   € Ü	×	Ò	×	Ô	 $Ü×&Ò& t×-?Ñ-?Ó@ˆ÷ 
à‚ÜÐ*¨4×+=Ñ+=Ð*>Ð?Ó@Ð@Ü	Ð × 2Ñ 2Ð3°2°g×6FÑ6FÐ5GÀwÈwÏÉÐN_Ð
`ÔaÙ÷ 
×	ús   ž!BÂB'	c               ó    € V ^8„  d   QhRRRR/# )r"   rÚ   r$   r%   râ   r'   )r(   s   "r)   r*   r*   /  s   € ÷ 
ñ 
 ð 
¨ñ 
r+   c                óT  € \         P                  P                  R 4      pV'       d   W8w  d   \        RV RV  24      h\         P                  P                  R4      p\         P                  P                  R 4      V 8w  g	   V'       g   R#  \	        V4      #   \         d     R# i ; i)r.  zworker is scoped to task z; refusing to mutate ÚHERMES_KANBAN_RUN_IDN)rU   r:  rv   r;   r{   )rÚ   Úenv_tidr4   s   &  r)   rþ   rþ   /  s‡   € Ü�j‰j�n‰nÐ1Ó2€Gß�7Ô%ÜÐ4°W°IÐ=RÐSZÐR[Ð\Ó]Ð]Ü
�*‰*�.‰.Ð/Ó
0€CÜ	‡z�z‡~�~Ð*Ó+¨wÔ6¿cÙðÜ�3‹xˆøÜô Úðús   Â
B ÂB'Â&B'c               ó    € V ^8„  d   QhRRRR/# )r"   r?  zOptional[kb.Task]Úevidencer$   r'   )r(   s   "r)   r*   r*   <  s   € ÷ 2<ñ 2<Ð'8ð 2<ÀCñ 2<r+   c                óê  € V e   V P                   '       g   R#  ^ RIHp V! R4      w  r4Ve	   V'       g   R# ^ RIHp RRRr‡p ^ RIHp	Hp
H	p V	! 4       '       d   RMV! R	V P                   24      p T! V P                   R
V P                  ;'       g    R 2P                  4       VP                  4       R7      w  rg rØVe	   V
! V4       T'       d,   ^ RIpTP                  \         4      P#                  RT4       R# YfR8X  d   R3# T3#   \         d    RRrC Lòi ; i  Te
   T
! T4       i i ; i  \         d6   p^ RIpTP                  \         4      P#                  RTRR7        Rp?L¡Rp?ii ; i)u  Goal judge for every terminal worker handoff (including review).

Returns ``(verdict, reason_or_None)``: ``"done"`` allows; ``"blocked"`` = judge ruled the goal
unachievable; ``"continue"``/``"wait"`` reject with the judge's reason. Judge failures allow
the handoff (logged).

See #100954.
``{"done", None}`` means the judge allows the handoff; anything else is a rejection whose verdict
disambiguates the guidance the caller gives the worker (``continue`` = not done yet, ``blocked`` =
judged unachievable â€” see #100954).
NrÒ   )Úget_text_auxiliary_clientÚ
goal_judge)Ú
judge_goalrp   F)Úget_affinity_scopeÚreset_affinity_scopeÚset_affinity_scopezkanban:z

)rD  Úlast_responsez7goal judge check failed, allowing lifecycle handoff: %sT)Úexc_infoz7goal judge unreachable (%s), allowing lifecycle handoff)rÒ   N)r(  Úagent.auxiliary_clientrY  rr   Úhermes_cli.goalsr[  Úagent.portal_tagsr\  r]  r^  r¹  r  r  rP   ÚloggingÚ	getLoggerÚ__name__rp  )r?  rW  rY  Úclientr�  r[  ÚverdictrÝ  Útransport_failedr\  r]  r^  Úaffinity_tokenÚ_Ú	judge_excÚ_loggings   &&              r)   Ú_goal_mode_handoff_rejectionrn  <  sˆ  € ð ‚|˜4Ÿ>Ÿ>˜>ØÐð#ÝDá1°,Ó?‰ˆð ‚~ŸUØÐå+à(.°°EÐ%€GðG÷ 	cÑbÙ!3×!5Ò!5™Ñ;MÐPWÐX\×X_ÑX_ÐW`ÐNaÓ;bˆð	5Ù6@ØŸ
™
�| 4¨¯	©	¯¨°RÐ'8Ð9×?Ñ?ÓAØ&Ÿn™nÓ.ô70Ñ3ˆG˜Q ð Ò)Ù$ ^Ô4÷ ó 	#à×Ñœ8Ó$×,Ñ,Ð-fÐhnÔoØÐØ¨Ô.�TÐ;Ð;°FÐ;Ð;øôA ô #Ø˜d’ð#ûð$ Ò)Ù$ ^Õ4ð *ûäô GÛ"à×Ñœ8Ó$×,Ñ,Ð-fØ-6Àð 	-÷ 	Gñ 	GûðGúsG   šD Á.D2 Á3!D  Â+D  Ã D2 ÄDÄDÄ D/Ä/D2 Ä2E2Ä=+E-Å-E2c               ó0   € V ^8„  d   QhRRRRRRRRRRRR/# )	r"   r  r$   rW  ÚhandoffÚblocked_hintÚcontinue_hintr%   r&   r'   )r(   s   "r)   r*   r*   q  s9   € ÷ ñ  ð ¨sð ¸Sð ÐPSð Ø$'ðØ,9ñr+   c                ó˜   € \        \        P                  ! W4      V4      w  rgVR8X  d   RV RV RV RV 2# Ve   RV RV RV RV 2# R# )zÐGoal-mode judge gate shared by ``complete`` / ``request-review`` (mirrors tools/kanban_tools.py);
applied to every terminal handoff so request-review can't bypass it. Returns the error line, or
None to allow.Úblockedzkanban: goal z of u1    rejected: judge ruled the goal unachievable â€” z. Nz rejected by judge: )rn  r�   r;  )r   r  rW  rp  rq  rr  rh  Ú	rejections   &&&&&&  r)   Ú_goal_gate_errorrv  q  sx   € ô
 6´b·k²kÀ$Ó6LÈhÓWÑ€GØ�)ÔØ ˜y¨¨S¨Eð 2-Ø-6¨K°r¸,¸ðIð 	JàÒØ˜w˜i t¨C¨5Ð0DÀYÀKÈrÐR_ÐQ`ÐaÐaÙr+   c               ó    € V ^8„  d   QhRRRR/# rz   r'   )r(   s   "r)   r*   r*     s   € ÷ 1Zñ 1ZÐ*ð 1Z¨sñ 1Zr+   c                ó¶  a aaaa€ \        S 4      w  rV'       d   V# \        S RR4      o\        S RR4      p\        V4      ^8”  d   S'       g	   V'       d   \        R^4      # \	        V4      w  opV'       d   V# / o\
        P                  ! 4       ;_uu_ 4       oV VVVV3R lp\        WR SP                  4      uuRRR4       #   + '       g   i     R# ; i)z<Mark one or more tasks done. Supports a single id or a list.rÄ  Nr=   zÁkanban: --summary / --metadata are per-task and can't be used with multiple ids (would apply the same handoff to every task). Complete tasks one at a time, or drop the flags for the bulk close.c                óz  <€ \        ST S
;'       g    SP                  ;'       g    R P                  4       RRR4      pV'       d   VSV &   R# RV  R2SV &    \        P                  ! SV SP                  S
S	\        V 4      \        \        SRR4      4      R7      pT'       gG   \        P                  ! ST 4      pT'       d(   RP                  R T 4       4      pRT  RT RT  R2ST &   T#   \        P                   d    RT  R	T  R
2ST &    R# \        P                   d   pRT  RT R2ST &    Rp?R# Rp?ii ; i)rp   Ú
completionzWRe-scope with kanban edit, or record the block with kanban block instead of completing.z9Provide evidence matching the task's acceptance criteria.Fzcannot complete z (unknown id or terminal state)Úforce)r¿  rÄ  r=   rù   r{  zK: a live worker is running it. Wait for the worker, `hermes kanban reclaim zM` to release it, or re-run with --force to close its run and complete anyway.rs  zY. Pass --result/--summary describing what was done (an empty completion is not evidence).NrH  c              3  ó6   "  € T F  w  rV R V R2x € K  	  R# 5i)r^  r0  Nr'   )rb   rt   r<  s   &  r)   rd   Ú,_cmd_complete.<locals>.op.<locals>.<genexpr>«  s   é € Ð&WÉh¹{¸s¨#¨¨b°°¸Õ':Ëhùs   ‚z#: unsatisfied parent dependencies: z@; complete the parents first, or `hermes kanban unlink <parent> r„   )rv  r¿  rP   r�   Úcomplete_taskrþ   ru   rG   ÚLiveClaimErrorÚEmptyCompletionErrorÚunsatisfied_parentsrÊ   )r  Úgate_errrÒ   Ú	empty_errÚblockersÚdetailrA   r   Úfail_msgr=   rÄ  s   &     €€€€€r)   ÚopÚ_cmd_complete.<locals>.op�  sp  ø€ Ü'Ø�c˜G×8Ð8 t§{¡{×8Ð8°b×?Ñ?ÓAÀ<ØiØKóMˆH÷ Ø (�˜‘ÙØ.¨s¨eÐ3RÐSˆH�S‰MðÜ×'Ò'¨¨c¸$¿+¹+ÈwÐaiÜ8JÈ3Ó8OÜ.2´7¸4ÀÈ%Ó3PÓ.QôS�÷ ô ×1Ò1°$¸Ó<�ßØ!ŸY™YÑ&WÉhÓ&WÓW�FØ'7¸°uÐ<_Ð`fÐ_gð hfØfiÐejÐjlð&n�H˜S‘MàˆKøô# ×$Ñ$ô Ø#3°C°5ð 9CØCFÀ%ð HQð"R�˜‘ò Ü×*Ñ*ô Ø#3°C°5¸¸9¸+ð Fcð "d�˜‘åûðús%   ÁAC+ Ã+!D:ÄD:Ä"D:Ä#D5Ä5D:c                ó   € R V  2# )z
Completed r'   ©r  s   &r)   Ú<lambda>Ú_cmd_complete.<locals>.<lambda>°  s   € °*¸S¸EÑ0Br+   )	rà   rG   rR   r   r?   rú   rû   r   Ú__getitem__)	rA   rÙ   rÇ  Úraw_metar‡  r   r†  r=   rÄ  s	   f    @@@@r)   Ú_cmd_completer�    s¸   ü€ ä˜4Ó �G€Cß	Øˆ	Ü�d˜I tÓ,€GÜ�t˜Z¨Ó.€Hä
ˆ3ƒx�!„|Ÿ§HÜð Zà[\ó^ð 	^ô (¨Ó1�L€Hˆbß	Øˆ	Ø!€HÜ	×	Ò	×	Ô	 $÷	ñ 	ô@ ˜3Ñ$BÀH×DXÑDXÓY÷C 
×	×	Ó	ús   Â"CÃC	c               ó    € V ^8„  d   QhRRRR/# rz   r'   )r(   s   "r)   r*   r*   ³  s   € ÷ ñ Ð&ð ¨3ñ r+   c                óœ  € \        V R R4      p\        V RR4      p\        V RR4      p\        V RR4      p\        V RR4      p\        V RR4      pVf   Vf   Ve   \        R^4      # \        ;QJ d    R WEWa3 4       F  '       d   K   R	M	  R
M! R WEWa3 4       4      '       d   \        R^4      # \        V4      w  rxV'       d   V# \        P
                  ! 4       ;_uu_ 4       p	\        P                  ! W�P                  WEVWVR7      p
RRR4       \        X
RV P                   R2RV P                   24      #   + '       g   i     L8; i)r¿  Nr=   rÄ  r  r  r   z6kanban edit: --summary and --metadata require --resultc              3  ó(   "  € T F  qR J x € K
  	  R # 5ir`   r'   )rb   r#   s   & r)   rd   Ú_cmd_edit.<locals>.<genexpr>¼  s   é € Ð
FÑ&E˜U�D�=Ó&Eùs   ‚FTz=kanban edit: provide --title, --body, --priority, or --result)r  r  r   r¿  rÄ  r=   zcannot edit z: (unknown id, or --result used on a task that is not done)zEdited )
rG   r   Úallr?   rú   rû   r�   Ú	edit_taskrÚ   rÕ   )rA   r¿  Úraw_metadatarÄ  r  r  r   r=   rÇ  r   rÔ   s   &          r)   Ú	_cmd_editr—  ³  s/  € Ü�T˜8 TÓ*€FÜ˜4 ¨TÓ2€LÜ�d˜I tÓ,€GÜ�D˜' 4Ó(€EÜ�4˜ Ó&€DÜ�t˜Z¨Ó.€HØ‚~˜7Ò.°,Ò2JÜÐLÈaÓPÐPß
ƒsÑ
F u°HÑ&EÓ
F‡s‡s‚sÑ
F u°HÑ&EÓ
F×FÒFÜÐSÐUVÓWÐWÜ'¨Ó5�L€Hß	Øˆ	Ü	×	Ò	×	Ô	 $Ü�\Š\Ø—,‘, eÀØ°Xô
ˆ÷ 
ô
 Ø
Ø
�t—|‘|�nÐ$^Ð_Ø
�$—,‘,�Ð óð ÷ 
×	ús   Ã%&D;Ä;E	c               ó    € V ^8„  d   QhRRRR/# )r"   rÝ  r&   rY   r$   r'   )r(   s   "r)   r*   r*   Í  s   € ÷ ñ ˜]ð ¸Cñ r+   c                ó$   a aaaa€ VV VVV3R lpV# )zYWrap a per-task ``op`` so a ``reason`` is first recorded as a ``PREFIX: reason`` comment.c                ó`   <€ S'       d   \         P                  ! SV SS R S 24       S! V 4      # )rs  )r�   r2  )r  r©  r   r‡  rY   rÝ  s   &€€€€€r)   ÚrunÚ_commented.<locals>.runÏ  s,   ø€ ßÜ�NŠN˜4  f°°¸¸6¸(Ð.CÔDÙ�#‹wˆr+   r'   )r   rÝ  r©  rY   r‡  r›  s   fffff r)   Ú
_commentedr�  Í  s   ü€ ÷ñ ð €Jr+   c               ó    € V ^8„  d   QhRRRR/# rz   r'   )r(   s   "r)   r*   r*   Ö  s   € ÷ Oñ OÐ'ð O¨Cñ Or+   c                ód  aaaa€ \        V P                  4      o\        V R R4      o\        4       p\	        V 4      pS'       d   RS 2MRo\
        P                  ! 4       ;_uu_ 4       oVVV3R lp\        SSVRVVV3R l4      p\        W$VR 4      uuRRR4       #   + '       g   i     R# ; i)rZ   Nrs  rp   c                ó  <€ \         P                  ! SV 4      pV'       d   VP                  MR pVR8X  d   V  RS 2# SR8X  d   VR 8X  d	   RV  RS 2# VR8X  d*   V'       d   VP                  MSR8X  d   RMR	pV  R
V RS 2# RV  S 2# )rt  Útodou    â†’ todo (dependency wait)Ú
dependencyzBlocked z+ as needs_input (no open parent to wait on)r"  Úneeds_inputzneeds a human decisionzorchestration attention neededu'    â†’ triage (unblock loop detected â€” r0  )r�   r;  r<  Ú
block_kind)r  ÚlandedÚwhererh  r   rZ   r3  s   &   €€€r)   Úok_msgÚ_cmd_block.<locals>.ok_msgÝ  s¯   ø€ ä—[’[  sÓ+ˆFß%+�F—M’M°ˆEØ˜ŒØ˜Ð9¸&¸ÐBÐBØ�|Ô#¨°Ô(:Ø! # Ð&QÐRXÐQYÐZÐZØ˜Ô çMS¸×8IÒ8IÐY]ÐboÔ7oÑ3Ø @ð à˜ÐEÀgÀYÈaÐPVÈxÐXÐXØ˜c˜U 6 (Ð+Ð+r+   ÚBLOCKEDc           	     óL   <€ \         P                  ! SV SS\        V 4      R 7      # ))rÝ  rZ   rù   )r�   Ú
block_taskrþ   )r  r   rZ   rÝ  s   &€€€r)   r‹  Ú_cmd_block.<locals>.<lambda>ì  s"   ø€ ÄRÇ]Â]Ø�#˜f¨4ÔASÐTWÓAXõFZr+   c                ó   € R V  2# )zcannot block r'   rŠ  s   &r)   r‹  r¬  î  s   € ¸-ÈÀuÑ8Mr+   )	rÌ   rÝ  rG   r¤   rÛ   rú   rû   r�  r   )	rA   r©  rÙ   r§  r‡  r   rZ   rÝ  r3  s	   &    @@@@r)   Ú
_cmd_blockr®  Ö  sŒ   û€ Ü˜4Ÿ;™;Ó'€FÜ�4˜ Ó&€DÜÓ€FÜ
�D‹/€Cß$ˆr�&�‰]¨"€FÜ	×	Ò	×	Ô	 $÷	,ô ˜˜f f¨iö :Zó [ˆä˜3 FÑ,MÓN÷% 
×	×	Ó	ús   Á(+BÂB/	c               ó    € V ^8„  d   QhRRRR/# rz   r'   )r(   s   "r)   r*   r*   ñ  s   € ÷ rñ rÐ*ð r¨sñ rr+   c           
     ó>  aaa€ \        V P                  4      o\        4       p\        V 4      pS'       d   R S 2MRo\        P
                  ! 4       ;_uu_ 4       o\        SSVRVV3R l4      p\        W#V3R lR 4      uuRRR4       #   + '       g   i     R# ; i)rs  rp   Ú	SCHEDULEDc                óJ   <€ \         P                  ! SV S\        V 4      R 7      # )©rÝ  rù   )r�   Úschedule_taskrþ   )r  r   rÝ  s   &€€r)   r‹  Ú_cmd_schedule.<locals>.<lambda>÷  s!   ø€ Är×GWÒGWØ�#˜fÔ6HÈÓ6MõHOr+   c                ó   <€ R V  S 2# )z
Scheduled r'   ©r  r3  s   &€r)   r‹  rµ  ù  ó   ø€ °*¸S¸EÀ&ÀÑ0Jr+   c                ó   € R V  2# )zcannot schedule r'   rŠ  s   &r)   r‹  rµ  ù  s   € ÐZjÐknÐjoÑXpr+   N)rÌ   rÝ  r¤   rÛ   rú   rû   r�  r   )rA   r©  rÙ   r‡  r   rÝ  r3  s   &   @@@r)   Ú_cmd_schedulerº  ñ  sx   ú€ Ü˜4Ÿ;™;Ó'€FÜÓ€FÜ
�D‹/€Cß$ˆr�&�‰]¨"€FÜ	×	Ò	×	Ô	 $Ü˜˜f f¨kõ <Oó Pˆä˜3Ô$JÑLpÓq÷ 
×	×	Ó	ús   Á&BÂB	c               ó    € V ^8„  d   QhRRRR/# rz   r'   )r(   s   "r)   r*   r*   ü  s   € ÷ Yñ YÐ)ð Y¨cñ Yr+   c           
     óÆ  aa€ \         P                  P                  R 4      '       d   \        R4      # \	        V 4      w  rV'       d   V# \        \        V RR4      4      pV'       d   \        4       MRpV'       d   RV 2MRo\        P                  ! 4       ;_uu_ 4       o\        SW4RV3R l4      p\        WV3R lR	 4      uuRRR4       #   + '       g   i     R# ; i)
r.  zNkanban unblock is orchestrator-only; workers must hand off their assigned taskrÝ  Nrs  rp   ÚUNBLOCKc                ó2   <€ \         P                  ! SV 4      # r`   )r�   Úunblock_task©r  r   s   &€r)   r‹  Ú_cmd_unblock.<locals>.<lambda>  s   ø€ ÄRÇ_Â_ÐUYÐ[^ÔE_r+   c                ó   <€ R V  S 2# )z
Unblocked r'   r·  s   &€r)   r‹  rÁ    r¸  r+   c                ó   € R V  R2# )zcannot unblock z (not blocked/scheduled?)r'   rŠ  s   &r)   r‹  rÁ    s   € ¨¸¸Ð=VÑ'Wr+   )rU   r:  rv   r   rà   rÏ   rG   r¤   rú   rû   r�  r   )rA   rÙ   rÇ  rÝ  r©  r‡  r   r3  s   &     @@r)   Ú_cmd_unblockrÄ  ü  s§   ù€ Ü	‡z�z‡~�~Ð*×+Ò+ÜÐdÓeÐeÜ˜4Ó �G€Cß	Øˆ	Üœw t¨X°tÓ<Ó=€Fß"(Œ_Ô¨d€Fß$ˆr�&�‰]¨"€FÜ	×	Ò	×	Ô	 $Ü˜˜f¨iÔ9_Ó`ˆÜ˜3Ô$JÙWóY÷ 
×	×	Ó	ús   Â $CÃC 	c               ó    € V ^8„  d   QhRRRR/# rz   r'   )r(   s   "r)   r*   r*     s   € ÷ ñ Ð0ð °Sñ r+   c                óð  € V P                   p\        \        V R R4      4      p\        \        V RR4      4      w  r4V'       d   V# \        P
                  ! 4       ;_uu_ 4       p\        YQT;'       g    RRRR4      pV'       d   \        V4      uuRRR4       # \        P                  ! WQW#\        V RR4      \        V4      \        \        V RR	4      4      R
R7      w  rxV'       g&   \        RT RT;'       g    R 24      uuRRR4       # \        P                  ! WQ4      p	V	'       d   V	P                  MRp
\        RV 2V
'       d   RV
 2MR,           4       RRR4       ^ #   + '       g   i     ^ # ; i)rÄ  Nr=   rp   zreview handoffz@Record the block with kanban block instead of requesting review.z.Provide acceptance evidence matching the task.Úreviewerr{  FT)rÄ  r=   rÇ  rù   r{  Úwith_reasonzcannot request review for rs  znot running/ready?zRequested review for )rÚ   rÏ   rG   r?   rú   rû   rv  r   r�   Úrequest_reviewrþ   ru   Ú
latest_runrÄ  r‡   )rA   r  rÄ  r=   rÇ  r   r‚  rÔ   rÝ  Úpersisted_runÚdisplay_summarys   &          r)   Ú_cmd_request_reviewrÍ    sG  € Ø
�,‰,€CÜ¤¨¨i¸Ó >Ó?€GÜ'¬°°jÀ$Ó(GÓH�L€Hß	Øˆ	Ü	×	Ò	×	Ô	 $Ü#Ø�w—}�} "Ð&6ØNØ<ó>ˆ÷ Ü˜“>÷ 
Ò	ô ×&Ò&Ø˜wÄGÈDÐR\Ð^bÓDcÜ.¨sÓ3¼4ÄÈÈgÐW\Ó@]Ó;^Ðlpôr‰
ˆ÷ ÜÐ4°S°E¸¸F×<ZÐ<ZÐFZÐ;[Ð\Ó]÷ 
Ò	ô Ÿš dÓ0ˆß3@˜-×/Ò/ÀdˆÜÐ% c UÐ+Ï°°OÐ3DÑ/EÐ^`ÕaÔb÷ 
ñ ÷ 
Ö	ñ ús&   Á"!E$Â
E$ÂAE$Ã9E$ÄAE$Å$E5	c               ó    € V ^8„  d   QhRRRR/# rz   r'   )r(   s   "r)   r*   r*   #  s   € ÷ ñ Ð1ð °cñ r+   c           
     óÊ  € V P                   pR P                  V P                  4      P                  4       p\        P
                  ! 4       ;_uu_ 4       p\        P                  ! W1V\        V4      R7      w  rEV'       g&   \        RT RT;'       g    R 24      uuRRR4       # \        RV 2V'       d   RV 2MR,           4       RRR4       ^ #   + '       g   i     ^ # ; i)	rÉ   r³  zcannot request changes for rs  zinvalid review stateNzRequested changes for z; routed to rp   )rÚ   rÊ   rÝ  rP   rú   rû   r�   Úrequest_changesrþ   r   r‡   )rA   r  rÝ  r   rÔ   r…  s   &     r)   Ú_cmd_request_changesrÑ  #  sº   € Ø
�,‰,€CØ�X‰X�d—k‘kÓ"×(Ñ(Ó*€FÜ	×	Ò	×	Ô	 $Ü×'Ò'¨¸&ÔRdÐehÓRiÔj‰
ˆßÜÐ5°c°U¸"¸V×=]Ð=]ÐG]Ð<^Ð_Ó`÷ 
Ò	ô 	Ð& s eÐ,Ï6°,¸v¸hÑ0GÐWYÕZÔ[÷	 
ñ
 ÷ 
Ö	ñ
 ús   Á>CÂCÂ%"CÃC"	c               ó    € V ^8„  d   QhRRRR/# rz   r'   )r(   s   "r)   r*   r*   .  s   € ÷ Pñ PÐ/ð P°Cñ Pr+   c                óÖ  aaaa€ \        V 4      w  rV'       d   V# \        V R R4      oSeF   \        \        P                  ! SP                  4       4      4      P                  4       ;'       g    RoS'       d   \        4       MRoS'       d   RS 2MRo\        P                  ! 4       ;_uu_ 4       oVVV3R lp\        WV3R lR 4      uuRRR4       #   + '       g   i     R# ; i)rÝ  Nrs  rp   c                ó¢   <€ \         P                  ! SV 4      '       g   R # S'       d'   \         P                  ! ST S;'       g    RRS 24       R# )FÚoperatorzCHANGES REQUESTED: T)r�   Úreopen_review_taskr2  )r  r©  r   rÝ  s   &€€€r)   r‡  Ú_cmd_reopen_review.<locals>.op8  sC   ø€ Ü×(Ò(¨¨s×3Ò3ÙßÜ—’˜t S¨&×*>Ð*>°JÐBUÐV\ÐU]Ð@^Ô_Ùr+   c                ó   <€ R V  S 2# )z	Reopened r'   r·  s   &€r)   r‹  Ú$_cmd_reopen_review.<locals>.<lambda>?  s   ø€ °)¸C¸5ÀÀÑ0Ir+   c                ó   € R V  R2# )zcannot reopen z (not in review?)r'   rŠ  s   &r)   r‹  rÙ  @  s   € ¨¸°uÐ<MÑ'Nr+   )
rà   rG   r$   r�   Úredact_review_valuerP   r¤   rú   rû   r   )rA   rÙ   rÇ  r‡  r©  r   rÝ  r3  s   &   @@@@r)   Ú_cmd_reopen_reviewrÜ  .  sª   û€ Ü˜4Ó �G€Cß	Øˆ	Ü�T˜8 TÓ*€FØÒÜ”R×+Ò+¨F¯L©L«NÓ;Ó<×BÑBÓD×LÐLÈˆß"(Œ_Ô¨d€Fß$ˆr�&�‰]¨"€FÜ	×	Ò	×	Ô	 $÷	ô ˜3Ô$IÙNóP÷ 
×	×	Ó	ús   Â2CÃC(	c               ó    € V ^8„  d   QhRRRR/# rz   r'   )r(   s   "r)   r*   r*   C  s   € ÷ "ñ "Ð)ð "¨cñ "r+   c                ó°  € \        V P                  4      p\        4       p\        \        P                  \        V 4      4      4      p\        V P                  4      p. p\        P                  ! 4       ;_uu_ 4       pV F9  p\        P                  ! WgW!VR 7      w  r‰VP                  RVRVRVRVRV	/4       K;  	  RRR4       V U
u. uF  qªR,          '       d   K  V
NK  	  pp
\        V RR4      '       d1   \        \!        V4      ^8X  d
   V^ ,          MT4       V'       g   ^ # ^# V'       d   R	MR
pV'       d   RMRpV'       d   RV 2MR
pV F_  p
V
R,          '       d   \#        V RV
R,           RV V 24       K0  \#        RV
R,           RV
R,           2\$        P&                  R7       Ka  	  V'       g   ^ # ^#   + '       g   i     EL; iu up
i ))ÚactorrÝ  Údry_runrÚ   Úpromotedrà  rÝ  rq  Nr7   Fz (dry)rp   zWould promoteÚPromotedrs  rÉ   z	 -> readyzcannot promote r   )rÌ   rÝ  r¤   rÂ   r:   ÚfromkeysrÛ   ru   rà  rú   rû   r�   Úpromote_taskrê  rG   r   rR   r‡   rˆ   r‰   )rA   rÝ  r©  rÙ   rà  Úresultsr   r  rÔ   ÚerrrÉ  ÚfailedÚtagr€  r3  s   &              r)   Ú_cmd_promoteré  C  s‡  € Ü˜4Ÿ;™;Ó'€FÜÓ€Fä
Œt�}‰}œY t›_Ó-Ó
.€CÜ�4—<‘<Ó €Gà')€GÜ	×	Ò	×	Ô	 $ÛˆCÜ—o’o d°vÐV]Ô^‰GˆBØ�N‰N˜I s¨J¸¸IÀwØ$ f¨g°sð<ö =ñ ÷ 
ñ !Ó6™�A¨*¯©�aˆa™€FÐ6Üˆt�V˜U×#Ò#ä¤# g£,°!Ô"3�G˜A–J¸ÔAßˆqÐ% AÐ%ç‰( 2€Cß&‰O¨J€Eß$ˆr�&�‰]¨"€FÛˆØˆZ�=Œ=Ü�U�G˜1˜Q˜y�\˜N¨)°C°5¸¸ÐAÖBä�O A i¥L >°°A°gµJ°<Ð@ÄsÇzÁz×Rñ	 ÷
 ˆ1Ð! Ð!÷) 
×	Ð	üò 7s   Á;A F?ÃGÃGÆ?G	c               ó    € V ^8„  d   QhRRRR/# rz   r'   )r(   s   "r)   r*   r*   b  s   € ÷ _ñ _Ð)ð _¨cñ _r+   c                óÚ  a€ \        V P                  ;'       g    . 4      p\        \        V R R4      ;'       g    . 4      pV'       d   V'       d   \        R4      # V'       g   V'       g   \        R4      # \        P
                  ! 4       ;_uu_ 4       oV'       d   \        VV3R lR R 4      uuRRR4       # \        VV3R lR R	 4      uuRRR4       #   + '       g   i     R# ; i)
Ú	purge_idsNz;choose either task_ids to archive or --rm archived task_idsrÞ   c                ó2   <€ \         P                  ! SV 4      # r`   )r�   Údelete_archived_taskrÀ  s   &€r)   r‹  Ú_cmd_archive.<locals>.<lambda>k  s   ø€ ´b×6MÒ6MÈdÐTWÔ6Xr+   c                ó   € R V  2# )zDeleted r'   rŠ  s   &r)   r‹  rï  k  s   € ÐhpÐqtÐpuÑfvr+   c                ó   € R V  R2# )zcannot delete z (must already be archived)r'   rŠ  s   &r)   r‹  rï  l  s   € ¨^¸C¸5Ð@[Ñ+\r+   c                ó2   <€ \         P                  ! SV 4      # r`   )r�   Úarchive_taskrÀ  s   &€r)   r‹  rï  m  s   ø€ ¬B¯OªO¸DÀ#Ô,Fr+   c                ó   € R V  2# )z	Archived r'   rŠ  s   &r)   r‹  rï  n  s   € ¨°3°%Ñ'8r+   c                ó   € R V  2# )zcannot archive r'   rŠ  s   &r)   r‹  rï  n  s   € ÈÐX[ÐW\ÑF]r+   )rÂ   rß   rG   r   rú   rû   r   )rA   rÙ   rì  r   s   &  @r)   Ú_cmd_archiverö  b  s«   ø€ Ü
ˆt�}‰}×"Ð" Ó
#€CÜ”W˜T ;°Ó5×;Ð;¸Ó<€Iß
�yÜÐQÓRÐRß—yÜÐ6Ó7Ð7Ü	×	Ò	×	Ô	 $ßÜ˜yÔ*XÑZvÙ\ó^÷ 
Ò	ô ˜3Ô FÙ8Ñ:]ó_÷	 
×	×	Ó	ús   ÂCÂ;CÃC*	c               ó    € V ^8„  d   QhRRRR/# rz   r'   )r(   s   "r)   r*   r*   q  s   € ÷ ñ Ð'ð ¨Cñ r+   c           
     ó†  € \         P                  ! 4       ;_uu_ 4       p\        P                  ! V4      pR R R 4       \	        V X4      '       d   ^ # \        R4       \        P                  P                  4        F,  p\        RVR RVR,          P                  V^ 4       24       K.  	  VR,          '       dP   \        R4       \        VR,          P                  4       4       F   w  rE\        RVR R\        V4       24       K"  	  VR,          pVe   \        R	\        V4       R
24       ^ #   + '       g   i     EL; i)Nz
By status:rñ   r  Ú	by_statusÚby_assigneez
By assignee:r  Úoldest_ready_age_secondsz
Oldest ready task age: rä   )rú   rû   r�   Úboard_statsr   r‡   r   ÚDEFAULT_WORKFLOWr  rv   Úsortedr}  r   r{   )rA   r   Ústatsr„  Úwhor
  Úages   &      r)   Ú
_cmd_statsr  q  s  € Ü	×	Ò	×	Ô	 $Ü—’˜tÓ$ˆ÷ 
ä��u×ÒÙÜ	ˆ,ÔÜ×-Ñ-×2Ñ2Ö4ˆÜ��1�R�&˜˜5 Õ-×1Ñ1°!°QÓ7Ð8Ð9Ö:ñ 5àˆ]×ÔÜÐÔÜ! %¨Õ"6×"<Ñ"<Ó">Ö?‰KˆCÜ�B�s˜3�i˜r¤+¨fÓ"5Ð!6Ð7Ö8ñ @à
Ð*Õ
+€CØ
‚ÜÐ)¬#¨c«(¨°1Ð5Ô6Ù÷ 
×	Ð	ús   žD/Ä/E 	c               ó    € V ^8„  d   QhRRRR/# rz   r'   )r(   s   "r)   r*   r*   ƒ  s   € ÷ ñ Ð 2ð °sñ r+   c                ót  € R \        V R R4      3R\        V RR4      33 UUu/ uF  w  rV'       g   K  WbK  	  ppp\        P                  ! 4       ;_uu_ 4       p\        P                  ! W@P
                  4      f#   \        RV P
                   24      uuRRR4       # \        P                  ! Y@P
                  V P                  V P                  V P                  V P                  V P                  \        V RR4      V P                  ;'       g    \        4       \        V RR4      T;'       g    RR7       RRR4       \!        RV P                   RV P                   2V P                  '       d   RV P                   2MR	,           R
V P
                   2,           4       ^ # u uppi   + '       g   i     Ly; i)Úparent_chat_idNÚguild_idr‘  Úuser_id_altÚdelivery_mode)
rÚ   ÚplatformÚchat_idÚ	chat_typeÚ	thread_idÚuser_idr  Únotifier_profiler  Údelivery_metadatazSubscribed rš  rp   rÒ  )rG   rú   rû   r�   r;  rÚ   r   ÚkbnÚadd_notify_subr	  r
  r  r  r  r  r¤   r‡   )rA   Úkeyr#   r  r   s   &    r)   Ú_cmd_notify_subscriber  ƒ  sp  € ð œw tÐ-=¸tÓDÐEØœ  z°4Ó8Ð9ñ
ôñ
‰JˆCô ô 	ˆŠ
ñ
ð ñ ô 
×	Ò	×	Ô	 $Ü�;Š;�tŸ\™\Ó*Ò2Ü˜.¨¯©¨Ð7Ó8÷ 
Ò	ô 	×ÒØŸ,™,°·±ÈÏÉØ—n‘n°·±ÈÏÉÜ  m°TÓ:Ø!×2Ñ2×GÐG´oÓ6GÜ! $¨¸Ó>Ø/×7Ð7°4õ	
÷ 
ô 
ˆK˜Ÿ™� a¨¯© ~Ð
6ÐRV×R`×R`ÐR`¸A¸d¿n¹nÐ=MÑ:NÐfhÕ
iØ�4—<‘<�.Ð!õ"ô #áùó+÷ 
×	ús)   ¢F!³F!Á:F'ÂA0F'ÄF'Ä.F'Æ'F7	c               ó    € V ^8„  d   QhRRRR/# rz   r'   )r(   s   "r)   r*   r*   œ  s   € ÷ ñ Ð-ð °#ñ r+   c                ó.  € \         P                  ! 4       ;_uu_ 4       p\        P                  ! WP                  4      pR R R 4       \        V X4      '       d   ^ # V'       g   \        R4       ^ # V EF
  pVP                  R4      '       d   RVR,           2MRpVP                  R4      ;'       g    RVP                  R4      ;'       g    RreRP                  VP                  R	4      '       d   R
VR	,           2MRVR8X  d   RMRV 2VP                  R4      '       d   RVR,           2MRVR8X  d   RMRV 234      p\        RVR,          R RVR,           RVR,           V RVR,           RV 24       EK  	  ^ #   + '       g   i     ELM; i)Nz(no subscriptions)r  rš  rp   r  Únotifyr  Údmr  z  owner=z  chat_type=r  z  user_id_alt=z  mode=rñ   rÚ   Ú10sr	  r
  z  (since event Úlast_event_idr0  )	rú   rû   r  Úlist_notify_subsrÚ   r   r‡   rv   rÊ   )rA   r   Úsubsrä   ÚthrÚdmodeÚctypeÚextrass   &       r)   Ú_cmd_notify_listr   œ  ss  € Ü	×	Ò	×	Ô	 $Ü×#Ò# D¯,©,Ó7ˆ÷ 
ä��t×ÒÙßÜÐ"Ô#ÙÜˆØ&'§e¡e¨K×&8Ò&8��!�K•.Ð!Ñ"¸bˆØ—u‘u˜_Ó-×9Ð9°¸1¿5¹5ÀÓ;M×;UÐ;UÐQUˆuØ—‘Ø23·%±%Ð8J×2KÒ2Kˆh�qÐ+Õ,Ð-Ñ.ÐQSØ˜4”-‰B |°E°7Ð%;Ø34·5±5¸×3GÒ3Gˆn˜Q˜}Õ-Ð.Ñ/ÈRØ˜8Ô#‰B¨7°5°'Ð):ð	
ó ˆô 	��1�Y•< Ð$ B q¨¥} o°Q°q¸µ|°nÀSÀEÈÐYZÐ[jÕYkÐXlÐlmÐntÐmuÐv×wñ ñ ÷# 
×	Ð	ús   ž!FÆF	c               ó    € V ^8„  d   QhRRRR/# rz   r'   )r(   s   "r)   r*   r*   ±  s   € ÷ Yñ YÐ"4ð Y¸ñ Yr+   c           
     ó,  € \         P                  ! 4       ;_uu_ 4       p\        P                  ! WP                  V P
                  V P                  V P                  R 7      pRRR4       \        XRRV P                   24      #   + '       g   i     L*; i))rÚ   r	  r
  r  Nz(no such subscription)zUnsubscribed from )	rú   rû   r  Úremove_notify_subrÚ   r	  r
  r  rÕ   rÿ   s   &  r)   Ú_cmd_notify_unsubscriber$  ±  sk   € Ü	×	Ò	×	Ô	 $Ü×"Ò" 4·±ÈÏÉÐ_c×_kÑ_kØ,0¯N©Nô<ˆ÷ 
ô �bÐ2Ð6HÈÏÉÈÐ4WÓXÐX÷ 
×	ús   žABÂB	c               ó    € V ^8„  d   QhRRRR/# rz   r'   )r(   s   "r)   r*   r*   ¸  s   € ÷ ñ Ð%ð ¨#ñ r+   c                óB  € \         P                  ! V P                  V P                  R 7      pVf   \	        RV P                   R24      # \
        P                  P                  V4       VP                  R4      '       g    \
        P                  P                  R4       ^ # ))Ú
tail_bytesz(no log for u#    â€” task may not have spawned yet)Ú
)	r�   Úread_worker_logrÚ   Útailr   rˆ   ÚstdoutÚwriteÚendswith)rA   Úcontents   & r)   Ú_cmd_logr/  ¸  sr   € Ü× Ò  §¡¸$¿)¹)ÔD€GØ‚Ü�l 4§<¡< .Ð0SÐTÓUÐUÜ‡J�J×Ñ�WÔØ×Ñ˜D×!Ò!Ü�
‰
×Ñ˜ÔÙr+   c               ó    € V ^8„  d   QhRRRR/# rz   r'   )r(   s   "r)   r*   r*   Â  s   € ÷ ñ Ð&ð ¨3ñ r+   c                óÜ  € \        V R4      w  rV'       d   V# \        P                  ! 4       ;_uu_ 4       p\        P                  ! W0P
                  3/ VB pRRR4       \        T X Uu. uF  p\        V\        4      NK  	  up4      '       d   ^ # V'       g   \        RV P
                   R24       ^ # \        RR RRR	 RR
R RRR R24       \        V^4       EFr  w  reVP                  ;'       g    \        \        P                  ! 4       4      p\        ^ WuP                  ,
          4      pV^<8  d   V R2MVR8  d   V^<,           R2MVR,          R R2p	VP                   ;'       g!    VP                  '       g   RMVP"                  p
\        VR RV
R	 RVP$                  ;'       g    RR RV	R R\'        VP                  4       2	4       VP(                  '       d5   \        RVP(                  P+                  4       ^ ,          R,           24       VP,                  '       g   EKS  \        RVP,                  R,           24       EKu  	  ^ #   + '       g   i     EL; iu upi )z Show attempt history for a task.r–  Nz(no runs yet for r0  Ú#Ú3srñ   ÚOUTCOMEÚ12sÚPROFILEÚ16sÚELAPSEDz>8sz	  STARTEDrä   rç   rå   z.1fræ   z	(running)Ú3dr-   u	        â†’ :Néd   Nu	        âœ– )rJ   rú   rû   r�   r·  rÚ   r   r   r   r‡   Ú	enumeraterÀ  r{   ÚtimerÁ  r½  rÂ  r<  rÃ  r   rÄ  rÅ  rq  )rA   rÆ  rÇ  r   r–  rÉ  rë  ÚendrÍ  rÎ  rÂ  s   &          r)   Ú	_cmd_runsr>  Â  sö  € ä  fÓ-�G€Cß	Øˆ	Ü	×	Ò	×	Ô	 $Ü�|Š|˜D§,¡,Ñ6°#Ñ6ˆ÷ 
ä�ÁÓEÁ¸1œ	 !Ô%5Ö6ÁÑE×FÒFÙßÜÐ! $§,¡, ¨qÐ1Ô2ÙÜ	ˆS�ˆH�B�y �o R¨	°# °b¸À3¸ÀyÐ
QÔRÜ˜$ ×"‰ˆØ�j‰j×,Ð,œC¤§	¢	£Ó,ˆä�a˜Ÿ|™|Õ+Ó,ˆØ%¨œl�ˆy˜‰]ÀwÐQUÄ~°7¸bµ=°/ÀÑ0CÐ^eÐhlÕ^lÐmpÐ]qÐqrÐ[sˆØ—)‘)×LÐL°1·:·:°:¡À1Ç8Á8ˆÜ��2��b˜ ˜ R¨¯©×)9Ð)9°c¸3Ð'?¸rÀ"ÀSÀÈÌGÐTU×T`ÑT`ÓLaÐKbÐcÔdØ�9�9ˆ9Ü�I˜aŸi™i×2Ñ2Ó4°QÕ7¸Õ=Ð>Ð?Ô@Ø�7�7‹7Ü�I˜aŸg™g d�m˜_Ð-×.ñ #ñ ÷' 
×	Ð	üâEs   ¶"IÁ*I)
ÉI&	c               ó    € V ^8„  d   QhRRRR/# rz   r'   )r(   s   "r)   r*   r*   Ý  s   € ÷ ñ Ð)ð ¨cñ r+   c                óÎ   € \         P                  ! 4       ;_uu_ 4       p\        P                  ! WP                  4      pR R R 4       \        X4       ^ #   + '       g   i     L; ir`   )rú   rû   r�   Úbuild_worker_contextrÚ   r‡   )rA   r   r/  s   &  r)   Ú_cmd_contextrB  Ý  s?   € Ü	×	Ò	×	Ô	 $Ü×&Ò& t¯\©\Ó:ˆ÷ 
ä	ˆ$„KÙ÷ 
×	ús   ž!AÁA$	c          
     ó,   € V ^8„  d   QhRRRRRRRRRR	/# )
r"   rA   rB   Úverbr$   Újson_keyÚjson_fieldsztuple[str, ...]r%   r{   r'   )r(   s   "r)   r*   r*   ä  s3   € ÷ %1ñ %1Ð.ð %1°cð %1ÐSVð %1Ø#2ð%1ØADñ%1r+   c           	     ó  € \        \        V RR4      4      p\        V RR4      ;'       g    \        4       p\        \        V RR4      4      p	\        V RR4      p
V P                  '       d   V'       d   \	        R^4      # V'       dr   VP                  V
R7      pV'       gW   V	'       d&   \        \        P                  ! V^ R	^ /4      4       ^ # \        R
V
'       d   RV
: 2MR,           R,           4       ^ # M0V P                  '       d   V P                  .pM\	        RV R2^4      # ^ pV F¶  pV! WØR7      pVP                  '       d
   V^,          pV	'       d+   \        \        P                  ! \        Wå4      4      4       KY  VP                  '       d   \        V! V4      4       K~  \        RV RVP                   RVP                   2\        P                  R7       K¸  	  V'       g   V^8X  d   ^ # ^# V^ 8”  g	   V'       g   ^ # ^# )z§Shared driver for ``specify`` / ``decompose``: validate ids (one task id XOR ``--all``), run
``run_one(tid, author=...)`` per id, print JSON or human lines, exit code.Ú
all_triageFr©  Nr7   r  z0kanban: pass either a task id OR --all, not both)r  r  zNo triage tasksz for tenant rp   Ú.rƒ   z requires a task id or --all)r©  rÉ   rs  r   )ru   rG   r¤   rÚ   r   Úlist_triage_idsr‡   r7   ÚdumpsrÔ   r   rÝ  rˆ   r‰   )rA   rD  ÚmodÚrun_onerE  rF  Úhuman_okÚall_flagr©  rÈ  r  rÙ   Úok_countr  rÂ  s   &&&&&&&        r)   Ú_run_triage_sweeprQ  ä  sª  € ô ”G˜D ,°Ó6Ó7€HÜ�T˜8 TÓ*×?Ð?¬oÓ.?€FÜ”W˜T 6¨5Ó1Ó2€IÜ�T˜8 TÓ*€FØ‡|‡|€|ŸÜÐFÈÓJÐJßØ×!Ñ!¨Ð!Ó0ˆßßÜ”d—j’j (¨A¨w¸Ð!:Ó;Ô<ñ ô Ð'Ï¨\¸&¹Ñ+DÐTVÕWÐZ]Õ]Ô^Ùð ð 
��ˆØ�|‰|ˆn‰ä�h˜t˜fÐ$@ÐAÀ1ÓEÐEà€HÛˆÙ˜#Ô-ˆØ�:�:ˆ:Ø˜�MˆHßÜ”$—*’*œY wÓ<Ó=Ö>Ø�Z�ZˆZÜ‘(˜7Ó#Ö$ä�H˜T˜F ! G§O¡OÐ#4°B°w·~±~Ð6FÐGÌcÏjÉj×Yñ ÷ Ø ”MˆqÐ( qÐ(à˜A”§Sˆ1Ð0¨qÐ0r+   c               ó   € V ^8„  d   QhRR/# rž   r'   )r(   s   "r)   r*   r*     s   € ÷ Pñ P ñ Pr+   c                óJ   € V P                   '       d   R V P                   : 2# R# )u    â€” retitled: rp   )Ú	new_title)rÂ  s   &r)   Ú_retitled_suffixrU    s&   € Ø6=×6G×6GÐ6Gˆ_˜W×.Ñ.Ñ1Ð2ÐOÈRÐOr+   c               ó    € V ^8„  d   QhRRRR/# rz   r'   )r(   s   "r)   r*   r*     s   € ÷ _ñ _Ð)ð _¨cñ _r+   c           	     óD   € ^ RI Hp \        V RWP                  RRR 4      # )zCSpec a triage task (or all) via the auxiliary LLM, promote to todo.)Úkanban_specifyrº   Ú	specifiedc                ó8   € R V P                    R\        V 4       2# )ú
Specified u	    â†’ todo)rÚ   rU  ©Úos   &r)   r‹  Ú_cmd_specify.<locals>.<lambda>  s   € ¨°A·I±I°;¸iÔHXÐYZÓH[ÐG\Ñ']r+   )rÚ   rÔ   rÝ  rT  )r»  rX  rQ  Úspecify_task)rA   Úspecs   & r)   Ú_cmd_specifyra    s(   € å1ä˜T 9¨d×4EÑ4EÀ{ØEÙ]ó_ð _r+   c               ó   € V ^8„  d   QhRR/# rž   r'   )r(   s   "r)   r*   r*     s   € ÷ Nñ N˜Sñ Nr+   c                ó  € V P                   '       dU   V P                  '       dC   R V P                   R\        V P                  4       RRP	                  V P                  4       R2# RV P                   R\        V 4       2# )zDecomposed u    â†’ z children (rH  z); root promoted to todor[  u    â†’ todo (no fanout))Úfanoutr¶  rÚ   rR   rÊ   rU  r\  s   &r)   Ú_decompose_ok_linere    su   € Ø‡x‡x€x�A—K—K�KØ˜aŸi™i˜[¨¬c°!·+±+Ó.>Ð-?ð @Ø!ŸY™Y q§{¡{Ó3Ð4Ð4LðNð 	Oà˜Ÿ	™	�{Ð"7Ô8HÈÓ8KÐ7LÐMÐMr+   c               ó    € V ^8„  d   QhRRRR/# rz   r'   )r(   s   "r)   r*   r*      s   € ÷ rñ rÐ+ð r°ñ rr+   c           	     óJ   € ^ RI Hp \        V RWP                  RR\        4      # )zFFan a triage task (or all) out into child tasks via the auxiliary LLM.)Úkanban_decomposer»   Ú
decomposed)rÚ   rÔ   rÝ  rd  r¶  rT  )r»  rh  rQ  Údecompose_taskre  )rA   Údecomps   & r)   Ú_cmd_decomposerl     s(   € å5ä˜T ;°×8MÑ8MÈ|Ø\Ô^pórð rr+   rÂ   Úlsr�  z	set-modelrö  ÚdiagÚattachmentsr*  Úwatchrÿ  Úlogr–  Ú	assigneesznotify-listÚcontextu  **/kanban** â€” manage the shared task board.

Common subcommands:
  `list` (alias `ls`)   List tasks on the current board
  `show <id>`           Task details + comments + events
  `stats`               Per-status / per-assignee counts
  `create <title>â€¦`     Create a task (auto-subscribes you to events)
  `comment <id> <msg>`  Append a comment
  `attach <id> <path>`  Attach a local file; `attachments <id>` to list
  `complete <id>â€¦`      Mark task(s) done
  `request-review <id>` Enter first-class review; `request-changes <id> <reason>` returns an active review to its implementer
  `block <id> [reason]` Mark blocked; `schedule <id> [reason]` parks time-delay work; `unblock <id>` to revive
  `assign <id> <profile>`  Reassign
  `boards list`         Show all boards
  `assignees`           Known profiles + counts
  `context <id>`        Full worker-context dump
  `runs <id>`           Attempt history
  `log <id>`            Worker log

Run `/kanban <subcommand> -h` for arguments. Read-only commands are safe while an agent is running.c               ó    € V ^8„  d   QhRRRR/# )r"   Úrestr$   r%   r'   )r(   s   "r)   r*   r*   Z  s   € ÷ B2ñ B2�Cð B2˜Cñ B2r+   c           
     ó6  aaa€ ^ RI p. oV '       d�   V P                  4       '       dz   \        P                  ! V \        P
                  R8H  R7       FL  p\        V4      ^8¼  d)   V^ ,          VR,          8X  d   V^ ,          R9   d   V^R pSP                  V4       KN  	  S'       d   S^ ,          R9   d   \        # \        P                  ! RRR7      pRVn        \        VP                  RR7      4      oR	Sn        RSn        SP                   Uu. uF'  p\!        V\        P"                  4      '       g   K%  VNK)  	  upoS F7  pVP$                  P'                  4        F  w  rgR
V 2Vn        RVn        K  	  K9  	  R VVV3R llpVP)                  4       VP)                  4       r© \*        P,                  ! V	4      ;_uu_ 4        \*        P.                  ! V
4      ;_uu_ 4        SP1                  S4      pRRR4       RRR4       \*        P,                  ! T	4      ;_uu_ 4        \*        P.                  ! T
4      ;_uu_ 4         \=        X4       RRR4       RRR4       T	P5                  4       P7                  4       T
P5                  4       P7                  4       ríT'       d   T'       d   T RT 2# T'       d   T# T;'       g    R# u upi   + '       g   i     Lß; i  + '       g   i     Lê; i  \2         d�   pT	P5                  4       P7                  4       T
P5                  4       P7                  4       ríTP8                  R9   d   T'       d   Tu Rp?# T;'       g    TpT'       d   RT 2MRu Rp?# Rp?i\        P:                   d   pRT! 4        RT 2u Rp?# Rp?ii ; i  \2         d     ELi\>         d*   p\A        RT 2\B        PD                  R7        Rp?EL—Rp?ii ; i  + '       g   i     EL¨; i  + '       g   i     EL´; i)u·   Execute a ``/kanban â€¦`` string (``rest`` = everything after ``/kanban``) and return captured
stdout/stderr. Shared by the interactive CLI and the gateway so formatting is identical.NÚposix)rw  z/kanban-wrapF)ÚprogÚadd_helpÚ_top)Údestz/kanbanz/kanban c               ó   € V ^8„  d   QhRR/# rž   r'   )r(   s   "r)   r*   Úrun_slash.<locals>.__annotate__|  s   € ÷ 5ñ 5˜cñ 5r+   c                 óî   <€ S'       dP   S FI  p V P                   P                  S^ ,          4      pVf   K+  VP                  4       P                  4       u # 	  SP                  4       P                  4       # )r6   )Úchoicesrv   Úformat_usager1  )Ú_actionÚ	subparserÚkanban_parserÚ
subparsersÚtokenss     €€€r)   Ú_usage_for_errorÚ#run_slash.<locals>._usage_for_error|  s`   ø€ ßÛ%�Ø#ŸO™O×/Ñ/°°qµ	Ó:�	ØÔ(Ø$×1Ñ1Ó3×:Ñ:Ó<Ò<ñ &ð ×)Ñ)Ó+×2Ñ2Ó4Ð4r+   u   âš  /kanban usage error
u   âš  /kanban usage errorr(  zerror: r   z(no output)ré   )Ú'Ú">   rt  Úhelpú-hú--help>   Nr6   )#ÚiorP   ÚshlexÚsplitrU   rô   rR   rê  Ú_SLASH_KANBAN_HELPrS   ÚArgumentParserÚexit_on_errorr    Úadd_subparsersrx  Ú_actionsr9   Ú_SubParsersActionr  r}  ÚStringIOr‹   Úredirect_stdoutÚredirect_stderrÚ
parse_argsÚ
SystemExitÚgetvaluer1  ÚcodeÚArgumentErrorrœ   rr   r‡   rˆ   r‰   )ru  r�  ÚtokÚ_wrapr†  r�  Ú_nameÚ_choicer†  Úbuf_outÚbuf_errrA   r>   Úoutræ  r  rƒ  r„  r…  s   &               @@@r)   Ú	run_slashr¥  Z  s  ú€ ó ð
 €Fß�—
‘
—’Ü—;’;˜t¬2¯7©7°gÑ+=×>ˆCÜ�3‹x˜1Œ}  Q¥¨3¨r­7Ô!2°s¸1µvÀÔ7KØ˜!˜B�i�Ø�M‰M˜#Öñ ?÷ �V˜A•YÐ"?Ô?Ü!Ð!ô ×#Ò#¨À%ÔH€EØ€EÔÜ  ×!5Ñ!5¸6Ð!5Ó!BÓC€MØ"€MÔØ"'€MÔØ*×3Ò3ÓaÑ3˜´zÀ!ÄX×E_ÑE_×7`—!�!Ñ3Ña€JÛˆØ%Ÿo™o×3Ñ3Ö5‰NˆEØ% e WÐ-ˆGŒLØ$)ˆGÖ!ó 6ñ ÷
5ò 5ð —{‘{“} b§k¡k£mˆWð
GÜ×'Ò'¨×0Õ0´*×2LÒ2LÈW×2UÕ2UØ ×+Ñ+¨FÓ3ˆD÷ 3V×0ô 
×	#Ò	# G×	,Õ	,¬j×.HÒ.HÈ×.QÕ.Qð	4Ü˜4Ô ÷ /R×	,ð ×ÑÓ!×(Ñ(Ó*¨G×,<Ñ,<Ó,>×,EÑ,EÓ,Gˆß
�sØ��b˜˜ˆÐßˆ3Ð1˜C×0Ð0 =Ð1ùòM b÷  3V×2Uú×0×0ûäô YØ×#Ñ#Ó%×,Ñ,Ó.°×0@Ñ0@Ó0B×0IÑ0IÓ0KˆSØ�8‰8�yÔ §SØ�JØ�zˆz�cˆß59Ð*¨4¨&Ñ1Ð?XÕXûÜ×!Ñ!ô GØ*Ñ+;Ó+=Ð*>¸bÀÀÐFÕFûðGûô ô 	ÚÜô 	4Ü�G˜C˜5�/¬¯
©
×3Ó3ûð	4ú÷ /R×.QÐ.Qú×	,×	,Ð	,úsñ   Ä"KÄ:KÆ+K7 Ç	K$Ç(K	Ç:K$ÈK7 È(PÉO3	É	N/ÉPËK!ËK$Ë$K4	Ë/K7 Ë4K7 Ë7N,ÌAM=ÍM=ÍN,ÍM=Í&
M=Í1M=Í7N,Í=N,ÎN,ÎN'Î!N,Î'N,Î/O0Î:O3	Î=O0ÏO0ÏO+Ï%O3	Ï+O0Ï0O3	Ï3PÏ>	PÐP	r`   >
   ÚrmÚnewÚuser¦   ÚdeleteÚimportÚremoveÚrenameÚswitchúset-default-workdir)|Ú__conditional_annotations__Ú__doc__Ú
__future__r   rS   r‹   r7   rU   rŽ  rˆ   r<  Úpathlibr   Útypingr   r»  r   r�   r   rú   r   rü   r   r(  r	   r  r
   rJ  r   Úhermes_cli.kanban_outputr   r   r   r   r   r   r   r   r   r   r   r   Úhermes_cli.kanban_boardsr   Úhermes_cli.kanban_opsr   r   r   r   r   r   r   Úhermes_cli.kanban_parserr    r2   r?   rJ   r[   rh   rx   rœ   r¤   Ú	frozensetr½   Ú__annotations__r¾   rŠ   rÌ   rÏ   rÕ   rÛ   rà   rî   rõ   r  r  rA  rU  rj  r‡  r�  rÏ  rÕ  rÚ  rß  rä  rï  r  r  r!  r,  r4  rA  rK  rQ  rþ   rn  rv  r�  r—  r�  r®  rº  rÄ  rÍ  rÑ  rÜ  ré  rö  r  r  r   r$  r/  r>  rB  rQ  rU  ra  re  rl  r“   r�  r¥  )r¯  s   @r)   Ú<module>rº     sû  øðôõ #ã Û Û Û 	Û Û 
Û Ý Ý å &Ý /Ý 0Ý 1Ý .Ý )Ý &÷÷ ÷ ó õ
 6÷÷ ñ õ 2õ
Eõ

õKõGõ&÷"%õN:*õ~2ñ 3<ð =Ø
ð=Øð=Øð=Ø'ð=Ø)2ð=Ø4>ð=Ø@Fð=ØHPð=àð=àð=à ð=à"-ð=à/9ð=à;Að=àCJð=ð ð=ð ð=ð %ð=ð '0ð=ð 2<ð=ð >Fð=ð HPð=ð ð	=ð $ð	=ð &:ð	=ð <Eð	=ð GRð	=ð
 ð=ð
 (ð=ð
 *9ð=ð 	ð=ó 3Ð  ó ñ 9Bò Có 9Ð % ~ó õ	aõ6õ
>õ
õCõ
õ!õ(õ4@õõ9õxõ0õ>3õ õ`õFQõõ(3õ	õõKõ\õ*Gõõõõ.õ$õ
õ2<õjõ1Zõhõ4õOõ6rõYõõ0õPõ*"õ>_õõ$õ2õ*Yõõõ6õ%1õPPõ_õNõrðØ
ˆIðØ ðØ.5°zðà
ˆIðà˜Yðà(.°	ðð ˆkðð '¨ðð ˆ|ð	ð (¨ð	ð
 Ð#ðð
 &,Ð-=ðð ˆIðð   ðð /6°zðð ˆ|ðð & {ñð Ð#ðð &1°.ðð �ðð  & yðð 3:¸:ðð �ðð  )¨,ðð Ð)ðð ,=Ð>Rðð Ð'ðð *3°Lðð ˆ|ðð $ Yðð 1;¸Mðð ˆkðð # Jðð 18¸ñð 
ˆ8�V˜Y¨°^Ø�Ð!3Ð5JØÐ#Ð%9Ð;RØˆ|˜Y¨°kÀ>Øˆ'ñ'€	ð2Ð ÷2B2r+   