railwayapp 5.68.0

Interact with Railway via CLI
�

Ĝ�j$4���dZddlZddlZddlZddlZddlZddlZddlm	Z	ddl
Z
ddlZddlZddl
Z
ddlZddlZdZdZGd�de��Zd�Zd	�Zd
�Zd�Zdd
�Zd�Zd�Zdd�Zd�Zd�Zd�Zd�Ze dkr�	eej!ej"��e	j#����Z$e%dej&e$��zd���dS#ee'e(e)f$r0Z*e%de*��ej+���ej,d��YdZ*[*dSdZ*[*wwxYwdS)zNDetached Codex App Server bootstrap; requests and credentials travel over SSH.�N)�Pathii�c��eZdZdS)�
SetupErrorN)�__name__�
__module__�__qualname__���2/tmp/railway-cli/src/commands/cloud_agent/codex.pyrrs�������Dr
rc��|�d��}|�d��5}tj|d��t	j||��ddd��n#1swxYwY|�|��dS)Nz.tmp�w�)�with_suffix�open�os�chmod�json�dump�replace)�path�value�	temporary�streams    r�savers���� � ��(�(�I�	����	�	�!��
���E�"�"�"��	�%�� � � �!�!�!�!�!�!�!�!�!�!�!����!�!�!�!����d�����s�+A"�"A&�)A&c��	td|�d�������dd��d���}|ddkrdn|dS#tt
f$rYdSwxYw)Nz/proc/z/stat�)�r�Z�)r�	read_text�rsplit�split�OSError�
IndexError)�pid�fieldss  r�
process_startr' s�����)�s�)�)�)�*�*�4�4�6�6�=�=�c�1�E�E�a�H�N�N�P�P���a�y�C�'�'�t�t�V�B�Z�7���Z� �����t�t����s�A&A)�)A>�=A>c��tj�d��}t|o |�d��o|d|k��S)N�RAILWAY_FACTORY_VM_ID�vm_id)r�environ�get�bool)�state�currents  r�restored_stater0(sC���j�n�n�4�5�5�G���L�E�I�I�g�.�.�L�5��>�W�3L�M�M�Mr
c���t|��rdS|�d��|�d��}}t|t��o|dko|duot	|��|kS)NFr%�startr)r0r,�
isinstance�intr')r.r%r2s   r�
owned_processr5-so���e�����u����5�!�!�5�9�9�W�#5�#5��C��c�3���a�C�!�G�a��T�0A�a�m�TW�FX�FX�\a�Fa�ar
Fc�N�tj�d|d���}i}|r?tjtjd�������}dd|dd�}|rd	|��|d
<	|�d|rdnd
|���|�	��}|r�|j
dkr�tjtj|dz�
������������}|�d��|kr	|���dS|j
|���S#t"tjjf$rY|���dSwxYw#|���wxYw)N�	127.0.0.1r)�timeout��Upgrade�	websocket�13)�
Connectionr:zSec-WebSocket-KeyzSec-WebSocket-VersionzBearer �
Authorization�GET�/z/readyz)�headers�ez$258EAFA5-E914-47DA-95CA-C5AB0DC85B11zSec-WebSocket-Accept)�http�client�HTTPConnection�base64�	b64encoder�urandom�decode�request�getresponse�status�hashlib�sha1�encode�digest�	getheader�closer#�
HTTPException)�port�tokenr;�
connectionrA�key�response�expecteds        r�proberZ4s�����+�+�K��q�+�I�I�J��G��L���r�z�"�~�~�.�.�5�5�7�7��!*�{�(+�d�L�L���5�#4�U�#4�#4��� �
����5��"A�#�#�	�7��S�S�S��)�)�+�+���	���C�/�/��'����=�=�E�E�G�G�)�)��f�h�h�������
��!�!�"8�9�9�X�E�E��
	��������	��	��������
�T�[�.�/������������������	���������s+�1B5E�=E�F�3F�
F�F�F$c�|�t|��dko)t||d��dkot|d���dkS)N��TrB)r;i�)rZ)rTrUs  r�healthyr]OsG���$�K�K�3��
3�5��u�d�#;�#;�s�#B�
3��d�d�+�+�+�s�2�4r
c�8�	dD]�}tj��5}|�tjtjd��|�||f��|�d��ddd��n#1swxYwY��dS#t$rYdSwxYw)N)z0.0.0.0r7rTF)�socket�
setsockopt�
SOL_SOCKET�SO_REUSEADDR�bind�listenr#)rT�address�socks   r�port_availablergTs���
�0�	�	�G�����
�D����� 1�6�3F��J�J�J��	�	�7�D�/�*�*�*����A����
�
�
�
�
�
�
�
�
�
�
����
�
�
�
���t�������u�u����s5�B�AA=�1B�=B	�B�B	�B�
B�B�codexc����	tjt|��ddg|dddd����t�fd�dD����st	d���tjt|��d	g|dddd���j���}n*#ttjf$rt	d
��d�wxYwtj
d|��}|st	d���|d
S)N�
app-serverz--helpT�)�env�capture_output�textr8�checkc3�*�K�|]
}|�jvV��dS)N)�stdout)�.0�flag�help_results  �r�	<genexpr>zruntime.<locals>.<genexpr>fs+�����g�g�$�4�;�-�-�g�g�g�g�g�gr
)�	--ws-auth�--ws-token-file�--listenzMUpdate Codex on this agent: authenticated App Server WebSockets are required.z	--versionzUCould not run Codex on this agent. Install a current @openai/codex release and retry.z6codex-cli ([0-9]+\.[0-9]+\.[0-9]+(?:-[a-zA-Z0-9.-]+)?)z,Could not identify the remote Codex version.r)�
subprocess�run�str�allrrq�stripr#�SubprocessError�re�	fullmatch)�environment�binary�version�matchrts    @r�runtimer�bs'���|� �n�c�&�k�k�<��%J�P[�48�t�R�W[�]�]�]���g�g�g�g�:f�g�g�g�g�g�	n��l�m�m�m��.�#�f�+�+�{�!;��04�4��SW�Y�Y�Y�Y_�`e�`e�`g�`g�	����Z�/�0�|�|�|��p�q�q�w{�{�|�����L�R�T[�\�\�E��I��G�H�H�H���8�Os�BB�'B?c���|dz}	|�d��5}tjgd�|tjtj|ddd���}|j���}tjd|��std���t|��d	z|z}|d
z}|���s<tjddd
t|��ddd|��g|tj||dd���t||��|krtd���t|��|fcddd��S#1swxYwYdS#ttjf$rtd|�d���d�wxYw)Nz
update.logr
)�npm�viewz@openai/codex@latestr�T�<)rl�stdinrq�stderrrnr8roz*[0-9]+\.[0-9]+\.[0-9]+(?:-[a-zA-Z0-9.-]+)?z5Could not identify the latest official Codex release.z.railway/runtimes/codex-serverznode_modules/.bin/codexr��installz--prefixz
--no-auditz	--no-fundz@openai/codex@�)rlr�rqr�r8roz@The installed Codex server does not match the requested release.zCould not update Codex. Check z on the agent and retry.)rryrz�DEVNULL�PIPErqr}rr�rr�is_filer{r�r#r~)	�home�rootr��log_path�log�resultr��prefixr�s	         r�update_runtimer�rs����l�"�H�h�
�]�]�3�
�
�	(�3��^�$V�$V�$V�(3�:�;M�+5�?�3�T�,.�d�<�<�<�F��m�)�)�+�+�G��<� M�w�W�W�
Z� �!X�Y�Y�Y��$�Z�Z�"B�B�W�L�F��7�7�F��>�>�#�#�
P����y�*�c�&�k�k�<� +�-G�g�-G�-G� I�#.�j�6H�&)�#�s�$�P�P�P�P��{�F�+�+�w�6�6� �!c�d�d�d��v�;�;��'�#	(�	(�	(�	(�	(�	(�	(�	(�	(�	(�	(�	(����	(�	(�	(�	(�	(�	(��$
�Z�/�0�h�h�h��\�(�\�\�\�]�]�cg�g�h���s/�E�D
D6�)E�6D:�:E�=D:�>E�+E.c�N�t|��r%tj|dtj��tj��dz}t|��rKtj��|krtd���tjd��t|���IdSdS)Nr%rkzKThe previous Codex server did not stop for its update. Retry once it exits.g�������?)	r5r�killpg�signal�SIGTERM�time�	monotonicr�sleep)r.�deadlines  r�
stop_ownedr��s����U���0�
�	�%��,���/�/�/��~���"�$�H�
��
�
���>���x�'�'��j�k�k�k��
�3������
�
�����r
c���tj�d��}|rp|���r|���std���t
|��}d|cxkrdkrnn|tdfvrtd���t|��r|�dt��}ng|r|}nb|r+t|��s|�dt��}n5tj�dt����rtnt}t|��tusd|cxkrdkr	nn|dkrtd	���|S)
N�RAILWAY_CODE_PORTz5RAILWAY_CODE_PORT must be a valid code endpoint port.ii��iV"zJRAILWAY_CODE_PORT must be 1024-65535, excluding the app and gateway ports.rT�RAILWAY_PUBLIC_DOMAIN_z/The saved Codex server has an unsupported port.)rr+r,�isascii�	isdecimalrr4�LEGACY_PORTr5r0�	CODE_PORT�type)r.�
configuredrTs   r�server_portr��s|������ 3�4�4�J��k��!�!�#�#�	V�:�+?�+?�+A�+A�	V��T�U�U�U���_�_�
��z�*�*�*�*�U�*�*�*�*�*�j�[�$�<O�.O�.O��i�j�j�j��U���b��y�y���-�-���	�b����	�b�~�e�,�,�b��y�y���-�-����J�N�N�+O�I�+O�+O�P�P�a�y�y�Va���D�z�z����D�D�$9�$9�$9�$9�E�$9�$9�$9�$9�$9�T�T�\�\��J�K�K�K��Kr
c��tjd��|�dd��}|dvrtd���t	|��dzdz}|dz}|d	kr�|���r&t
j|�����ni}t|��}t|��r^|�d
��rI|�d��r4t||d
��r|d|�d��d
�SdS|dkr#|���std���|�ddd���tj
|d��|dz�d��5}	tj|tjtjz��n#t&$rtd��d�wxYw|���r&t
j|�����ni}t|��}|dkrW|�d��r|�d
��std���t)||d|d
���}t+t	|d���d�����}t	|�����std���tj�d|����}	|	s*|t2krtj�d��}	|	rt5jd|	��std|�d����|�d
��p|�d
��}
t9|
t*��rt5jd|
��std ���t|��}|ret||
��std!|d"z�d#����|�d��|kr&td$|�d���d%����t)tjt+|���&��}|�d'�|�d(d)��z|d(<|s"t;|��std*|�d+����|dks|s@t=|||��\}
}|r*|�d��|krt?|��d,}|�s`t;|��std*|�d+����|d-z}|� |
��tj
|d.��t)|
|||tj�d/���0��}tC||��|d"z�d��5}tEj#|
d1d2d3|��d4d5d6t+|��d7d8d7d9g||tDj$|tDj%dd�:��}ddd��n#1swxYwY|�&|j'tQ|j'���;��tC||��tSj*��d<z}	tSj*��|kr�|�+���td=|d"z�d#����tY|��d>kr t||
��std?���nAtSj-d@��tSj*��|k��tdA|d"z�d#����nG#t\$r:|�+���$tj/|j't`j1���wxYw|rY|�dB��sDtj�d/��r%tjd/|dB<tC||��t)dC|	�dD�|
||d|�E��cddd��S#1swxYwYdS)FN�?�actionr2)r2�connect�inspectz Unsupported Codex server action.z.railwayrhzserver.jsonr�rU�	directoryr�)r�r�r�zVThis agent has no managed Codex server. Run railway code --codex --agent <name> first.Ti�)�parents�exist_ok�modez
setup.lockr
zEAnother Codex setup is running on this agent. Retry when it finishes.zTThe saved Codex connection is incomplete. Rerun railway code --codex --agent <name>.)r�rU)�strictz.Codex's working directory must be a directory.r��RAILWAY_PUBLIC_DOMAINz[a-zA-Z0-9.-]+z0This agent has no valid public address for port �.z[a-zA-Z0-9_-]{43,}z8Codex requires a high-entropy URL-safe connection token.z-The managed Codex server is unhealthy. Check z
server.logz on the agent.zCodex is already serving z1. Use connect or --new for a different directory.)�HOMEz/.local/bin:�PATHz/usr/local/bin:/usr/bin:/binzPort z= is occupied by another process. Use --new for a fresh agent.Fzserver-tokenrr))rUr�r�rTr*rjrxz
ws://0.0.0.0:rvzcapability-tokenrwz-czapproval_policy="never"z!sandbox_mode="danger-full-access")�cwdrlr�rqr��	close_fds�start_new_session)r%r2�-z#Codex exited during startup. Check r\z;Codex did not enforce WebSocket authentication; stopped it.g�?zCodex startup timed out. Check r*zwss://z:443)�urlrUr�r��reused)2r�umaskr,rr�existsr�loadsr r�r5r]�mkdirrr�fcntl�flock�LOCK_EX�LOCK_NB�BlockingIOError�dictr{�resolve�is_dirr+r�rr�r3rgr�r��
write_textrry�Popenr��STDOUT�updater%r'r�r��pollrZr��
BaseExceptionr�r�r�)rJr�r�r��
state_pathr.rT�lockr��domainrUr�r�r�r��
token_pathr��childr�s                   r�setupr��s����H�U�O�O�O�
�[�[��7�
+�
+�F�
�4�4�4��;�<�<�<���:�:�
�"�W�,�D��
�%�J�
����6@�6G�6G�6I�6I�Q��
�:�/�/�1�1�2�2�2�r���5�!�!���%� � �	V�U�Y�Y�w�%7�%7�	V�E�I�I�k�<R�<R�	V��D�%��.�1�1�	V�!&�{�!3��	�	�)�@T�@T�U�U�U��t�
����:�#4�#4�#6�#6���q�r�r�r��J�J�t�d��J�7�7�7��H�T�5����
��
�	#�	#�C�	(�	(�O=�D�	p��K��e�m�e�m�;�<�<�<�<���	p�	p�	p��d�e�e�ko�o�	p����6@�6G�6G�6I�6I�Q��
�:�/�/�1�1�2�2�2�r���5�!�!���Y����9�9�[�)�)�
y����7�1C�1C�
y� �!w�x�x�x��7�e�K�.@��g��W�W�W�G���W�[�1�2�2�:�:�$�:�G�G�H�H�	��I���%�%�'�'�	O��M�N�N�N����� ?�� ?� ?�@�@���	=�$�+�-�-��Z�^�^�$;�<�<�F��	Y�R�\�*;�V�D�D�	Y��W�PT�W�W�W�X�X�X��	�	�'�"�"�:�g�k�k�'�&:�&:���%��%�%�	Y�R�\�:O�QV�-W�-W�	Y��W�X�X�X��u�%�%���	H��4��'�'�
v� �!t�QU�Xd�Qd�!t�!t�!t�u�u�u��y�y��%�%��2�2� �"G�U�Y�Y�{�=S�=S�"G�"G�"G�H�H�H��2�:�C��I�I�6�6�6��!%�3�3�3�k�o�o�f�Nl�6m�6m�m��F���	j�n�T�2�2�	j��h�T�h�h�h�i�i�i��W���F��,�T�4��E�E�O�F�G��
�%�)�)�I�.�.�'�9�9��5�!�!�!����"	�!�$�'�'�
n� �!l��!l�!l�!l�m�m�m���.�J��!�!�%�(�(�(��H�Z��'�'�'��u�	�7�QU�!�z�~�~�.E�F�F�H�H�H�E���U�#�#�#���%�+�+�C�0�0�
�C�"�(��\�:�7M�t�7M�7M� �"4�6G��Z����4�d�<_�a�"�{�*�:L��z�'8�D�\`�����
�
�
�
�
�
�
�
�
�
�
����
�
�
�
�
�L�L�U�Y�m�E�I�.F�.F�L�G�G�G���U�#�#�#��~�'�'�"�,�H�
��n�&�&��1�1��z�z�|�|�/�(�)r�t�Vb�Ob�)r�)r�)r�s�s�s��T�{�{�c�)�)�&�t�U�3�3�l�",�-j�"k�"k�k���J�t�$�$�$��n�&�&��1�1�%�%j�t�l�GZ�%j�%j�%j�k�k�k���!�
�
�
��:�:�<�<�'��I�e�i���8�8�8��
�����	$�%�)�)�G�,�,�	$�����@W�1X�1X�	$��Z�(?�@�E�'�N���U�#�#�#��-��-�-�-�U�i�!�)�,�V�=�=�=�]O=�O=�O=�O=�O=�O=�O=�O=�O=�O=�O=�O=����O=�O=�O=�O=�O=�O=sl�_
�,F5�4_
�5G�O_
�A
W+�_
�+W/	�/_
�2W/	�3A_
�B5\�_
�A]�A;_
�
_�_�__main__zRAILWAY_CODEX_CONNECTION=T)�flushzCodex setup failed: )�filer)NF)rh)-�__doc__rFr�rM�http.clientrCrr�pathlibrrr�r_ry�sysr�r�r��	Exceptionrrr'r0r5rZr]rgr�r�r�r�r�r�loadr�r�r��print�dumpsr#�
ValueError�KeyError�errorr��exitr	r
r�<module>r�s_��T�T�
�
�
�
�����������������	�	�	�	�������	�	�	�	�
�
�
�
�
�
�
�
�����
�
�
�
������	���	�	�	�	�	��	�	�	�������N�N�N�
b�b�b�����64�4�4�
���
�
�
�
� h�h�h�6������0a=�a=�a=�H�z������y�t�y���+�+�Y�T�Y�[�[�9�9��
��)�J�D�J�v�,>�,>�>�d�K�K�K�K�K�K�����X�6����
��,�U�,�,�3�:�>�>�>�>����������������������	�s�8A
C�	C=�
%C8�8C=