ctx-tui 2.0.4

Manage repo-scoped work contexts: fresh checkouts wrapped in terminal multiplexer sessions
Documentation
�

"�j4���
�SSKrSSKrSSKrSSKrSSKJr SSKJr SSK	r	SSK
JrJrJ
r
JrJr SSKJrJrJr SSKJrJr SSKJrJrJr \"SS	9"S
S55r\	R8"SS9\	R:"S
S9\	R<S\	R>SS4Sj555r \ RC5\	RD"S5\	RD"SSS9\	RF"SSSSS9\	RF"SSSSSSS 9\	RF"S!S"SS#S$9\	RHS%\S\%S\%S-S\%S-S\&\%S&4S'\'SS4S(j5555555r(S)\S\&\%S&4S\)\%\%44S*jr*SbS%\S\%S\%S-S\%S-S+\)\%\%4S'\'SS4S,jjr+\ RCS-5\	RD"S5\	RHS%\S\%SS4S.j555r,S)\S/\-\
R>S\-\-\%4S0jr.\ RCS15\	RF"S2SS3S$9\	RHS%\S4\'SS4S5j555r/\ RC5\	RD"S6S7SS89\	RF"S9SS:S$9\	RHS%\S6\&\%S&4S;\'SS4S<j5555r0S%\S\%S;\'S\%S-4S=jr1\ RC5\	RD"S6S7S>9\	RF"S?SS@S$9\	RHS%\S6\&\%S&4SA\'SS4SBj5555r2S%\S\%S\%S-4SCjr3\ RC5\	RD"S5\	RHS%\S\%SS4SDj555r4\ RC5\	RF"SESFSSGS$9\	RHS%\SF\'SS4SHj555r5\ RCSI5ScSJj5r6\ RC5ScSKj5r7\ R9SSL9ScSMj5r8\8R95ScSNj5r9\9RCSO5ScSPj5r:\9RCSQ5ScSRj5r;\ R95ScSSj5r<\<RCST5\	RD"SU5\	RF"SVSWS9\	RHS%\SU\%S\%S-SS4SXj5555r=\<RCS15\	RHS%\SS4SYj55r>\<RCSZ5\	RD"SSS9\	RF"S[SS\S$9\	RHS%\S\%S-S]\'SS4S^j5555r?\<RCS_5\	RD"S6S7SS89\	RHS%\S6\&\%S&4SS4S`j555r@ScSajrAg)d�N)�	dataclass)�Path)�claude_hook�claude_trust�contexts�repos�status)�Config�ConfigError�load_config)�LayoutError�
accepted_keys)�Multiplexer�MultiplexerError�get_multiplexerT)�frozenc�.�\rSrSr%Sr\\S'\\S'Srg)�Deps�z/Injectable dependencies shared by all commands.�cfg�mux�N)	�__name__�
__module__�__qualname__�__firstlineno__�__doc__r
�__annotations__r�__static_attributes__r��A/Users/michael/dev/contexts/ctx/rewrite-it-in-rust/src/ctx/cli.pyrrs��9�	�K�	�r r)�invoke_without_commandzctx-tui)�package_name�	click_ctx�returnc���URc9[5n[U[URUR
55UlURcUR[5 gg)z!Manage repo-scoped work contexts.N)	�objrrr�multiplexer�layout�invoked_subcommand�invoke�tui)r$rs  r!�clir-sQ��
�}�}���m���S�/�#�/�/�3�:�:�"N�O�	�
��#�#�+������,r �repo�nameF)�requiredz-bz--branch�basez1Base branch (default: the repo's default branch).)�helpz-sz--set�assignmentsz	KEY=VALUEzHPass a value to the layout's builtin panes (e.g. prompt=... for claude).)�multiple�metavarr2z-dz--detachz*Start the session without attaching to it.)�is_flagr2�deps.�detachc	�F�[URU5n[XX#XeS9 g)zrCreate a context: fresh checkout of REPO on a new local branch.

NAME defaults to a random adjective-animal pair.
)r8N)�_parse_assignmentsr�_create_and_open)r7r.r/r1r3r8�valuess       r!�newr=$s ��4 ����+�
6�F��T��V�Cr rc�B�[UR5n0nUH�nURS5upVnU(aU(d[R"SUS35eXS;a[R"SUS35eXR;a[R"SUS35eXsU'M� U$)N�=z--set needs KEY=VALUE, got '�'z
--set gives 'z' twicez'no builtin pane in the layout accepts ')rr)�	partition�click�ClickException)rr3�acceptedr<�
assignment�key�sep�values        r!r:r:Bs����S�Z�Z�(�H��F�!�
�$�.�.�s�3���%��#��&�&�)E�j�\�QR�'S�T�T��=��&�&��s�e�7�'C�D�D����&�&�)P�QT�PU�UV�'W�X�X��s��"��Mr r<c
��Uc [R"UR5n[R"[R
"URXU55n[R"SURSURS[R"U535 U(aUR R#Xd5 gUR R%Xd5 g![[[4a%n[R"[U55UeSnAff=f![&a%n[R"[U55UeSnAff=f)Nzcreated z at z on )r�random_namer�asyncio�run�create_context�
ValueError�FileExistsError�FileNotFoundErrorrBrC�str�echo�	qualified�path�current_branchr�create�openr)r7r.r/r1r<r8�ctx�excs        r!r;r;Qs���6��<��'�'����1�D��k�k�(�1�1�$�(�(�D��M�N��
�J�J��#�-�-���S�X�X�J�d�8�;R�;R�SV�;W�:X�Y�Z�6���H�H�O�O�C�(��H�H�M�M�#�&��
��):�;�6��"�"�3�s�8�,�#�5��6���6��"�"�3�s�8�,�#�5��6�s6�AC"�#"D�D�"D�7 D�D�
E�) E	�	ErWc�(�[R"URU5n[R"URU5(aD[R"URU5n[
R"SUR35 URRU5 g![[4a%n[
R"[U55UeSnAff=f![a%n[
R"[U55UeSnAff=f)zSAttach to a context's session, unarchiving it and recreating the session if needed.�unarchived N)r�find_anyr�is_archived�unarchive_contextrBrRrS�LookupErrorrOrCrQrrWr�r7r/rXrYs    r!�open_rais���
6�������$�/��������#�.�.��,�,�T�X�X�s�;�C��J�J��S�]�]�O�4�5�6����
�
�c���
��)�6��"�"�3�s�8�,�#�5��6���6��"�"�3�s�8�,�#�5��6�s0�BB*�C"�*C�: C�C�"
D�, D�D�ctxsc��Z^# �[R"U4SjU56IShv�N$N7f)z3Every context's status cells, fetched concurrently.c3�R># �UHn[R"TU5v� M g7f�N)r	�status_cells)�.0rXrs  �r!�	<genexpr>�$_all_status_cells.<locals>.<genexpr>}s!����!P�4�C�&�"5�"5�c�3�"?�"?�4�s�$'N)rK�gather)rrbs` r!�_all_status_cellsrk{s!�������!P�4�!P�Q�Q�Q�Q�s�!+�)�+�listz
--archivedzList archived contexts instead.�archivedc�V^�U(a![R"UR5nO [R"UR5nU(d [R
"U(aSOS5 g[
SURR55nSSSS/UQ7/n[R"[URU55n[X%S	S
9HDupgURURUR[R"U5/UQ75 MF [![#US55V^s/sHm[%U4SjU55PM n	nUHGn
[X�S	S
9n[R
"S
R'SU55R)55 MI gs snf)z8List contexts with branch, dirtiness, and session state.zno archived contextszno contextsNc3�T# �UHoRR5v� M  g7fre)r/�upper)rg�ss  r!rh�list_.<locals>.<genexpr>�s���A��A��������s�&(�NAME�REPO�BRANCH�STATUST)�strictrc3�@># �UHn[UT5v� M g7fre)�len)rg�row�columns  �r!rhrr�s����3�d�s�#�c�&�k�"�"�d�s�z  c3�H# �UHupURU5v� M g7fre)�ljust)rg�cell�widths   r!rhrr�s���H�%�;�4�T�Z�Z��.�.�%�s� ")r�
list_archivedr�
list_contextsrBrR�tupler	rKrLrk�zip�appendr/r.rU�rangery�max�join�rstrip)r7rm�all_contexts�status_names�rows�	cell_rowsrX�	ctx_cellsr{�widthsrz�cellss        `   r!�list_r��s=���
��-�-�d�h�h�7���-�-�d�h�h�7���
�
�
�X�)�=�I���A������A�A�L�
�V�X�x�?�,�?�@�D����-�d�h�h��E�F�I��l�d�C������S�X�X�s�x�x��)@�)@��)E�R�	�R�S�D�BG��D�QR�G��BU�
V�BU��c�3�d�3�3�BU�F�
V����C��-��
�
�
�4�9�9�H�%�H�H�O�O�Q�R���Ws�7F&�names�����)�nargsr0z--forcez.Delete even with uncommitted or unpushed work.�forcec��SnUH2n[XU5nU(dM[R"SU3SS9 SnM4 U(a[R"S5 gg)zODelete contexts, archived or not: kill their sessions and remove the checkouts.F�error: T��err�N)�_remove_onerBrR�sys�exit)r7r�r��failedr/�errors      r!�rmr��sS���F����D��.���5��J�J����(�d�3��F�	�
������r c�&�[R"URU5nU(d�/n[R
"U5(aUR
S5 [R"U5nU(aUR
[U5S35 U(a!URSSRU5S3$[R"U5 [R"SUR35 URRU5(aURR!U5 g![an[	U5sSnA$SnAff=f!URRU5(aURR!U5 ff=f)zBDelete one context, returning an error message instead of raising.Nzuncommitted changesz unpushed commit(s)z has z and z; use --force to delete anywayzremoved )rr\rr_rQ�is_dirtyr��unpushed_commitsryrSr��remove_contextrBrRr�exists�kill)r7r/r�rXrY�problems�unpusheds       r!r�r��s+���������$�/��������S�!�!��O�O�1�2��,�,�S�1����O�O�s�8�}�o�-@�A�B���m�m�_�E�'�,�,�x�*@�)A�A_�`�`������$�
�
�
�X�c�m�m�_�-�.��8�8�?�?�3����H�H�M�M�#����)���3�x�����$�8�8�?�?�3����H�H�M�M�#�� �s)�!D0�;9E�0
E�:
E
�E�
E�>F)r�z--emptyz)Permanently delete all archived contexts.�emptyc���U(a�U(a[R"S5e[[R"UR
55n[R"UR
5 [R"SUS35 gU(d[R"S5eSnUH1n[X5nU(dM[R"SU3SS	9 SnM3 U(a[R"S
5 gg)zCArchive contexts: kill their sessions and move the checkouts aside.z--empty takes no context nameszemptied archive (z context(s))Nz provide context names or --emptyFr�Tr�r�)rB�
UsageErrorryrr�r�
empty_archiverR�_archive_oner�r�)r7r�r��countr�r/r�s       r!�archiver��s���
���"�"�#C�D�D��H�*�*�4�8�8�4�5�����t�x�x�(�
�
�
�&�u�g�\�:�;������A�B�B�
�F����T�(���5��J�J����(�d�3��F�	�
������r c��[R"URU5n[R"URU5 URRU5(aURRU5 [R"SUR35 g![[
4an[
U5sSnA$SnAff=f)zCArchive one context, returning an error message instead of raising.Nz	archived )
r�find_contextr�archive_contextr_rOrQrr�r�rBrRrSr`s    r!r�r��s�����#�#�D�H�H�d�3��� � ����3�/��x�x���s������
�
�c��	�J�J��3�=�=�/�*�+���
��)���3�x����s�AB#�#C�3
C�=C�Cc�@�[R"URU5n[R"URU5n[R"SUR35 g![[
4a%n[R"[U55UeSnAff=f)zRestore an archived context.Nr[)r�
find_archivedrr^r_rOrBrCrQrRrS)r7r/rmrXrYs     r!�	unarchiver��sz��
6��)�)�$�(�(�D�9���(�(����8�<��
�J�J��S�]�]�O�,�-��
��)�6��"�"�3�s�8�,�#�5��6�s�AA(�(B�8 B�Bz--exit�exit_on_openz%Exit the TUI after opening a context.c��SSKJnJnJn U"URUR
US9R
5=US`=bBun [R"URU5nUR
RU5 g =US`=bup�n	 [XXY05 g cgg![[4a%n[R"[U55UeSnAff=f)z(Manage contexts and repos interactively.r)�CtxTui�
NewRequest�OpenRequest)r�)r/N)r.r/r1)�ctx.tuir�r�r�rrrLrr�rWr_rrBrCrQr;)
r7r�r�r�r�r/rXrY�	repo_namer1s
          r!r,r,�s���
8�7�
����4�8�8�,�
?�
C�
C�
E�
#�[�
#�
#�
>��+�+�D�H�H�d�;�����
�
�c�"�$�>�Z�
=�
=��T�d�"�=�>�
����	 �!1�2�
>��*�*�3�s�8�4�#�=��
>�s�<B�C�- C
�
Cz
agent-docsc��[RRS5RS5R	5n[
R"USS9 g)zDPrint ctx usage docs for coding agents, ready to install as a skill.rXz
agent_docs.mdF��nlN��	importlib�	resources�files�joinpath�	read_textrBrR)�docss r!�
agent_docsr�s<�����$�$�U�+�4�4�_�E�O�O�Q�D�	�J�J�t��r c��[RRS5RS5R	5n[
R"USS9 g)z(Print the installed version's changelog.rXzCHANGELOG.mdFr�Nr�)�texts r!�	changelogr�s<�����$�$�U�+�4�4�^�D�N�N�P�D�	�J�J�t��r )�hiddenc��g)z"Entry points backing the builtins.Nrrr r!�builtinr���r c��g)zAdapters for Claude Code.Nrrr r!�clauder�!r�r zstatus-hookc��[R"[RR	5[
R"55 g)zDFeed the agent status column from a Claude Code hook event on stdin.N)r�handler��stdin�readr�cwdrr r!�claude_hook_r�&s%�����s�y�y�~�~�'�����4r �trustc�V�[R"[R"55 g)zIMark the current directory trusted so Claude Code skips its trust dialog.N)rr�rr�rr r!�
claude_trust_r�,s�����t�x�x�z�"r c��g)zManage registered repositories.Nrrr r!r.r.2r�r �add�urlz--namez*Registry name (default: derived from URL).c�:�[R"SU35 [R"[R
"URX55n[R"SUS35 g![a%n[R"[U55UeSnAff=f)z;Register a repository by cloning a local bare mirror of it.zcloning Nzregistered 'r@)
rBrRrKrLr�add_reporrOrCrQ)r7r�r/�
registeredrYs     r!�repo_addr�7sy��
�J�J��#��� �6��[�[�������#�!D�E�
�
�J�J��j�\��+�,���6��"�"�3�s�8�,�#�5��6�s�5A+�+
B�5 B�Bc	���[R"UR5H=n[R"US[R
"URU535 M? g)zList registered repositories.�	N)r�
repo_namesrrBrR�repo_url)r7r/s  r!�	repo_listr�EsD��� � ����*��
�
�
�d�V�2�e�n�n�T�X�X�t�<�=�>�?�+r �defaultz--clearzClear the default repo.�clearc��U(aUU(a[R"S5e[R"URS5 [R
"S5 gUc@[R"UR5n[R
"U(aUOS5 g[R"URU5 [R
"SUS35 g![a%n[R"[U55UeSnAff=f)z<Show or set the repo new contexts are created in by default.z--clear takes no repo nameNzcleared default repozno default repozdefault repo is 'r@)
rBr�r�set_default_reporrR�default_reporPrCrQ)r7r/r��currentrYs     r!�repo_defaultr�Ms���
���"�"�#?�@�@�
���t�x�x��.�
�
�
�)�*���|��$�$�T�X�X�.��
�
�
�g�7�+<�=��6�
���t�x�x��.�
�J�J�"�4�&��*�+���6��"�"�3�s�8�,�#�5��6�s�!!C�
D�' D�Dr�c�2�SnUH?n[R"URU5 [R
"SUS35 MA U(a[R"S5 gg![a%n[R
"SU3SS9 SnSnAM�SnAff=f)	zARemove registered repositories' mirrors (contexts are untouched).Fr�Tr�Nz	removed 'r@r�)r�remove_reporrPrBrRr�r�)r7r�r�r/rYs     r!�repo_rmr�ds���
�F���	����d�h�h��-�
	�
�
�Y�t�f�A�&�'����������!�	��J�J�����D�1��F���	�s�!A'�'
B�1B�Bc��[5 g![Ra�nSR[	[
UR55nSUS3nUR=(d SR5n[R"U(aUSU3OUSS9 [R"UR=(d S5 SnAgSnAf[a8n[R"S	U3SS9 [R"S5 SnAgSnAf[a8n[R"S
U3SS9 [R"S5 SnAgSnAff=f)N� zerror: command failed (�)��
Tr�r�zerror: invalid layout: zerror: invalid config: )r-�
subprocess�CalledProcessErrorr��maprQ�cmd�stderr�striprBrRr�r��
returncoder
r)rYr��message�details    r!�mainr�vs���
�����(�(�&��h�h�s�3����(�)��+�C�5��2���*�*�"��)�)�+��
�
�
�V�g�Y�b���)��d�K�������$�1�%�%����
�
�
�,�S�E�2��=����������
�
�
�,�S�E�2��=���������s-�

�E	�BC�
E	�.D�
E	�.E�E	)F)r%N)BrK�importlib.resourcesr�r�r��dataclassesr�pathlibrrBrXrrrrr	�
ctx.configr
rr�
ctx.layoutr
r�ctx.multiplexerrrrr�group�version_option�pass_context�Contextr-�command�argument�option�pass_objrQr��boolr=�dictr:r;rarlrkr�r�r�r�r�r�r,r�r�r�r�r�r�r.r�r�r�r�r�rr r!�<module>rs�����
�!���B�B�7�7�1�J�J��$���������D�)����9�-�����5�=�=��T���.�*����������������'����d�J��-`�a�������
��	S�
����d�J��3_�`����
D�
�
D�

�
D���*�
D���*�	
D�
�s�C�x��
D�
�

D�
�
D��a��b�(���
D� �F���s�C�x���T�#�s�(�^��*�
6�
�6�

�6���*�6���*�	6�

��c��N�6�
�
6�
�6�0���V����������6��6�C�6�D�6����6�R��R�t�H�4D�4D�/E�R�$�t�TW�y�/�R�
���V�����l�D�/P�Q����S��S��S��S��R��S�(��������r�D�1����i��,\�]����	�T�	�%��S��/�	�$�	�4�	��^�2��	��d��#��d��s�T�z��6��������r�"����i��,W�X�����$��u�S�#�X���t�����Y�#���*
�t�
�3�
�3��:�
�������������.�D�.��.��.����.��������h���;b�c�����d��$��4���d���(���\���������������$���-��-�	����$��$����
��5��5�
�����#��#�
����*�
�*����e����������h�I�J����-�4�-�c�-��t��-��-��K���-����f�����@�D�@�T�@���@����i�������'����i��,E�F����,�t�,�3��:�,�d�,�t�,��G�(��,�&���d������r�D�1�����$��u�S�#�X���4���2���r