portacode 1.4.12.dev8__tar.gz → 1.4.13.dev0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/PKG-INFO +1 -1
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/_version.py +2 -2
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/connection/handlers/proxmox_infra.py +128 -21
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode.egg-info/PKG-INFO +1 -1
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/.claude/agents/communication-manager.md +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/.claude/settings.local.json +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/.gitignore +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/.gitmodules +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/LICENSE +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/MANIFEST.in +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/Makefile +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/README.md +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/backup.sh +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/connect.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/connect.sh +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/docker-compose.yaml +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/docs/images/device-transfer-button.png +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/docs/images/device-transfer-modal.png +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/docs/images/pair-device-button.png +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/docs/images/pairing-request.png +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/docs/images/student-workspace.png +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/README.md +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/simple_device/Dockerfile +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/simple_device/README.md +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/simple_device/data/device-01/.local/share/portacode/keys/id_portacode +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/simple_device/data/device-01/.local/share/portacode/keys/id_portacode.pub +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/simple_device/docker-compose.yaml +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/Dockerfile +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/README.md +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/.local/share/portacode/keys/id_portacode +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/.local/share/portacode/keys/id_portacode.pub +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/.local/share/portacode/run/gateway.pid +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/workspace/.gitignore +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/workspace/README.md +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/workspace/db.sqlite3 +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/workspace/galactic_bakeshop/__init__.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/workspace/galactic_bakeshop/__pycache__/__init__.cpython-311.pyc +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/workspace/galactic_bakeshop/__pycache__/settings.cpython-311.pyc +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/workspace/galactic_bakeshop/__pycache__/urls.cpython-311.pyc +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/workspace/galactic_bakeshop/__pycache__/wsgi.cpython-311.pyc +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/workspace/galactic_bakeshop/asgi.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/workspace/galactic_bakeshop/settings.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/workspace/galactic_bakeshop/urls.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/workspace/galactic_bakeshop/wsgi.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/workspace/manage.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/workspace/requirements.txt +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/workspace/templates/treats/home.html +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/workspace/treats/__init__.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/workspace/treats/__pycache__/__init__.cpython-311.pyc +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/workspace/treats/__pycache__/admin.cpython-311.pyc +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/workspace/treats/__pycache__/apps.cpython-311.pyc +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/workspace/treats/__pycache__/menu.cpython-311.pyc +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/workspace/treats/__pycache__/models.cpython-311.pyc +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/workspace/treats/__pycache__/urls.cpython-311.pyc +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/workspace/treats/__pycache__/views.cpython-311.pyc +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/workspace/treats/admin.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/workspace/treats/apps.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/workspace/treats/menu.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/workspace/treats/migrations/__init__.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/workspace/treats/migrations/__pycache__/__init__.cpython-311.pyc +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/workspace/treats/models.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/workspace/treats/tests.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/workspace/treats/urls.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/workspace/treats/views.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-02/.local/share/portacode/keys/id_portacode +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-02/.local/share/portacode/keys/id_portacode.pub +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-02/workspace/README.md +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-02/workspace/galactic_bakeshop/__init__.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-02/workspace/galactic_bakeshop/asgi.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-02/workspace/galactic_bakeshop/settings.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-02/workspace/galactic_bakeshop/urls.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-02/workspace/galactic_bakeshop/wsgi.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-02/workspace/manage.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-02/workspace/requirements.txt +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-02/workspace/templates/treats/home.html +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-02/workspace/treats/__init__.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-02/workspace/treats/admin.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-02/workspace/treats/apps.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-02/workspace/treats/menu.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-02/workspace/treats/migrations/__init__.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-02/workspace/treats/models.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-02/workspace/treats/tests.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-02/workspace/treats/urls.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-02/workspace/treats/views.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-03/.local/share/portacode/keys/id_portacode +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-03/.local/share/portacode/keys/id_portacode.pub +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-03/workspace/README.md +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-03/workspace/galactic_bakeshop/__init__.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-03/workspace/galactic_bakeshop/asgi.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-03/workspace/galactic_bakeshop/settings.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-03/workspace/galactic_bakeshop/urls.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-03/workspace/galactic_bakeshop/wsgi.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-03/workspace/manage.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-03/workspace/requirements.txt +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-03/workspace/templates/treats/home.html +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-03/workspace/treats/__init__.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-03/workspace/treats/admin.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-03/workspace/treats/apps.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-03/workspace/treats/menu.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-03/workspace/treats/migrations/__init__.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-03/workspace/treats/models.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-03/workspace/treats/tests.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-03/workspace/treats/urls.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-03/workspace/treats/views.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-04/.local/share/portacode/keys/id_portacode +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-04/.local/share/portacode/keys/id_portacode.pub +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-04/workspace/README.md +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-04/workspace/galactic_bakeshop/__init__.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-04/workspace/galactic_bakeshop/asgi.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-04/workspace/galactic_bakeshop/settings.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-04/workspace/galactic_bakeshop/urls.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-04/workspace/galactic_bakeshop/wsgi.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-04/workspace/manage.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-04/workspace/requirements.txt +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-04/workspace/templates/treats/home.html +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-04/workspace/treats/__init__.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-04/workspace/treats/admin.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-04/workspace/treats/apps.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-04/workspace/treats/menu.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-04/workspace/treats/migrations/__init__.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-04/workspace/treats/models.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-04/workspace/treats/tests.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-04/workspace/treats/urls.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-04/workspace/treats/views.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-05/.local/share/portacode/keys/id_portacode +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-05/.local/share/portacode/keys/id_portacode.pub +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-05/workspace/README.md +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-05/workspace/galactic_bakeshop/__init__.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-05/workspace/galactic_bakeshop/asgi.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-05/workspace/galactic_bakeshop/settings.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-05/workspace/galactic_bakeshop/urls.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-05/workspace/galactic_bakeshop/wsgi.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-05/workspace/manage.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-05/workspace/requirements.txt +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-05/workspace/templates/treats/home.html +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-05/workspace/treats/__init__.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-05/workspace/treats/admin.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-05/workspace/treats/apps.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-05/workspace/treats/menu.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-05/workspace/treats/migrations/__init__.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-05/workspace/treats/models.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-05/workspace/treats/tests.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-05/workspace/treats/urls.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-05/workspace/treats/views.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-06/.local/share/portacode/keys/id_portacode +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-06/.local/share/portacode/keys/id_portacode.pub +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-06/workspace/README.md +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-06/workspace/galactic_bakeshop/__init__.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-06/workspace/galactic_bakeshop/asgi.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-06/workspace/galactic_bakeshop/settings.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-06/workspace/galactic_bakeshop/urls.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-06/workspace/galactic_bakeshop/wsgi.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-06/workspace/manage.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-06/workspace/requirements.txt +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-06/workspace/templates/treats/home.html +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-06/workspace/treats/__init__.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-06/workspace/treats/admin.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-06/workspace/treats/apps.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-06/workspace/treats/menu.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-06/workspace/treats/migrations/__init__.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-06/workspace/treats/models.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-06/workspace/treats/tests.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-06/workspace/treats/urls.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-06/workspace/treats/views.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-07/.local/share/portacode/keys/id_portacode +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-07/.local/share/portacode/keys/id_portacode.pub +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-07/workspace/README.md +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-07/workspace/galactic_bakeshop/__init__.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-07/workspace/galactic_bakeshop/asgi.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-07/workspace/galactic_bakeshop/settings.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-07/workspace/galactic_bakeshop/urls.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-07/workspace/galactic_bakeshop/wsgi.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-07/workspace/manage.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-07/workspace/requirements.txt +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-07/workspace/templates/treats/home.html +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-07/workspace/treats/__init__.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-07/workspace/treats/admin.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-07/workspace/treats/apps.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-07/workspace/treats/menu.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-07/workspace/treats/migrations/__init__.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-07/workspace/treats/models.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-07/workspace/treats/tests.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-07/workspace/treats/urls.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-07/workspace/treats/views.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-08/.local/share/portacode/keys/id_portacode +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-08/.local/share/portacode/keys/id_portacode.pub +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-08/workspace/README.md +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-08/workspace/galactic_bakeshop/__init__.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-08/workspace/galactic_bakeshop/asgi.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-08/workspace/galactic_bakeshop/settings.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-08/workspace/galactic_bakeshop/urls.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-08/workspace/galactic_bakeshop/wsgi.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-08/workspace/manage.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-08/workspace/requirements.txt +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-08/workspace/templates/treats/home.html +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-08/workspace/treats/__init__.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-08/workspace/treats/admin.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-08/workspace/treats/apps.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-08/workspace/treats/menu.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-08/workspace/treats/migrations/__init__.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-08/workspace/treats/models.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-08/workspace/treats/tests.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-08/workspace/treats/urls.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-08/workspace/treats/views.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-09/.local/share/portacode/keys/id_portacode +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-09/.local/share/portacode/keys/id_portacode.pub +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-09/workspace/README.md +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-09/workspace/galactic_bakeshop/__init__.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-09/workspace/galactic_bakeshop/asgi.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-09/workspace/galactic_bakeshop/settings.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-09/workspace/galactic_bakeshop/urls.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-09/workspace/galactic_bakeshop/wsgi.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-09/workspace/manage.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-09/workspace/requirements.txt +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-09/workspace/templates/treats/home.html +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-09/workspace/treats/__init__.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-09/workspace/treats/admin.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-09/workspace/treats/apps.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-09/workspace/treats/menu.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-09/workspace/treats/migrations/__init__.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-09/workspace/treats/models.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-09/workspace/treats/tests.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-09/workspace/treats/urls.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-09/workspace/treats/views.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-10/.local/share/portacode/keys/id_portacode +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-10/.local/share/portacode/keys/id_portacode.pub +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-10/workspace/README.md +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-10/workspace/galactic_bakeshop/__init__.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-10/workspace/galactic_bakeshop/asgi.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-10/workspace/galactic_bakeshop/settings.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-10/workspace/galactic_bakeshop/urls.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-10/workspace/galactic_bakeshop/wsgi.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-10/workspace/manage.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-10/workspace/requirements.txt +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-10/workspace/templates/treats/home.html +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-10/workspace/treats/__init__.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-10/workspace/treats/admin.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-10/workspace/treats/apps.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-10/workspace/treats/menu.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-10/workspace/treats/migrations/__init__.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-10/workspace/treats/models.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-10/workspace/treats/tests.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-10/workspace/treats/urls.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-10/workspace/treats/views.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/docker-compose.yaml +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/initial_content/README.md +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/initial_content/galactic_bakeshop/__init__.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/initial_content/galactic_bakeshop/asgi.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/initial_content/galactic_bakeshop/settings.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/initial_content/galactic_bakeshop/urls.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/initial_content/galactic_bakeshop/wsgi.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/initial_content/manage.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/initial_content/requirements.txt +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/initial_content/templates/treats/home.html +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/initial_content/treats/__init__.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/initial_content/treats/admin.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/initial_content/treats/apps.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/initial_content/treats/menu.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/initial_content/treats/migrations/__init__.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/initial_content/treats/models.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/initial_content/treats/tests.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/initial_content/treats/urls.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/initial_content/treats/views.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/examples/workshop_fleet/instructions/WELCOME.md +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/README.md +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/__init__.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/__main__.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/cli.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/connection/README.md +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/connection/__init__.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/connection/client.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/connection/handlers/README.md +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/connection/handlers/WEBSOCKET_PROTOCOL.md +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/connection/handlers/__init__.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/connection/handlers/base.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/connection/handlers/chunked_content.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/connection/handlers/diff_handlers.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/connection/handlers/file_handlers.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/connection/handlers/project_aware_file_handlers.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/connection/handlers/project_state/README.md +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/connection/handlers/project_state/__init__.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/connection/handlers/project_state/file_system_watcher.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/connection/handlers/project_state/git_manager.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/connection/handlers/project_state/handlers.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/connection/handlers/project_state/manager.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/connection/handlers/project_state/models.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/connection/handlers/project_state/utils.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/connection/handlers/project_state_handlers.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/connection/handlers/registry.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/connection/handlers/session.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/connection/handlers/system_handlers.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/connection/handlers/tab_factory.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/connection/handlers/terminal_handlers.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/connection/handlers/update_handler.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/connection/multiplex.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/connection/terminal.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/data.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/keypair.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/link_capture/__init__.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/link_capture/__pycache__/__init__.cpython-311.pyc +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/link_capture/bin/__pycache__/link_capture_wrapper.cpython-311.pyc +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/link_capture/bin/elinks +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/link_capture/bin/gio-open +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/link_capture/bin/gnome-open +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/link_capture/bin/gvfs-open +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/link_capture/bin/kde-open +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/link_capture/bin/kfmclient +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/link_capture/bin/link_capture_exec.sh +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/link_capture/bin/link_capture_wrapper.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/link_capture/bin/links +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/link_capture/bin/links2 +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/link_capture/bin/lynx +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/link_capture/bin/mate-open +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/link_capture/bin/netsurf +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/link_capture/bin/sensible-browser +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/link_capture/bin/w3m +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/link_capture/bin/x-www-browser +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/link_capture/bin/xdg-open +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/logging_categories.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/pairing.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/service.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/static/js/test-ntp-clock.html +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/static/js/utils/ntp-clock.js +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/utils/NTP_ARCHITECTURE.md +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/utils/__init__.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/utils/diff_apply.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/utils/diff_renderer.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/utils/ntp_clock.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode.egg-info/SOURCES.txt +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode.egg-info/dependency_links.txt +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode.egg-info/entry_points.txt +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode.egg-info/requires.txt +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode.egg-info/top_level.txt +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/pyproject.toml +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/restore.sh +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/run_tests.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/setup.cfg +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/setup.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/test.sh +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/test_modules/README.md +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/test_modules/__init__.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/test_modules/test_device_online.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/test_modules/test_file_operations.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/test_modules/test_git_status_ui.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/test_modules/test_login_flow.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/test_modules/test_navigate_testing_folder.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/test_modules/test_play_store_screenshots.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/test_modules/test_terminal_buffer_performance.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/test_modules/test_terminal_interaction.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/test_modules/test_terminal_loading_race_condition.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/test_modules/test_terminal_start.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/test_request_id.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/testing_framework/.env.example +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/testing_framework/README.md +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/testing_framework/__init__.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/testing_framework/cli.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/testing_framework/core/__init__.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/testing_framework/core/base_test.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/testing_framework/core/cli_manager.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/testing_framework/core/hierarchical_runner.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/testing_framework/core/playwright_manager.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/testing_framework/core/runner.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/testing_framework/core/shared_cli_manager.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/testing_framework/core/test_discovery.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/testing_framework/requirements.txt +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/todo/UI_UX/opening_a_file_on_desktop_results_in_nothing.md +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/todo/agent_context_management.md +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/todo/django_server_time_sync.md +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/todo/issues/device_performance_degradation.md +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/todo/issues/git_data_not_captured_in_proxmox.md +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/todo/issues/indefinite_resource_loading.md +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/todo/issues/portacode_service_silently_down.md +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/todo/issues/premature_terminal_exit.md +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/todo/issues/project_cpu_hotspots.md +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/todo/issues/terminals_exit_upon_starting.md +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/todo/issues/wrong_item_classification_on_client_side.md +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/todo/smartphone_terminal_input_frustrations.md +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/tools/generate_play_store_assets.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/tools/pairing_tester.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/tools/run_screenshot_suite.sh +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/tools/test_python_ntp_clock.py +0 -0
- {portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/validate.sh +0 -0
|
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
|
|
|
28
28
|
commit_id: COMMIT_ID
|
|
29
29
|
__commit_id__: COMMIT_ID
|
|
30
30
|
|
|
31
|
-
__version__ = version = '1.4.
|
|
32
|
-
__version_tuple__ = version_tuple = (1, 4,
|
|
31
|
+
__version__ = version = '1.4.13.dev0'
|
|
32
|
+
__version_tuple__ = version_tuple = (1, 4, 13, 'dev0')
|
|
33
33
|
|
|
34
34
|
__commit_id__ = commit_id = None
|
{portacode-1.4.12.dev8 → portacode-1.4.13.dev0}/portacode/connection/handlers/proxmox_infra.py
RENAMED
|
@@ -59,6 +59,7 @@ def _emit_progress_event(
|
|
|
59
59
|
message: str,
|
|
60
60
|
phase: str,
|
|
61
61
|
request_id: Optional[str],
|
|
62
|
+
client_sessions: Optional[List[str]] = None,
|
|
62
63
|
details: Optional[Dict[str, Any]] = None,
|
|
63
64
|
) -> None:
|
|
64
65
|
loop = handler.context.get("event_loop")
|
|
@@ -84,6 +85,8 @@ def _emit_progress_event(
|
|
|
84
85
|
payload["request_id"] = request_id
|
|
85
86
|
if details:
|
|
86
87
|
payload["details"] = details
|
|
88
|
+
if client_sessions:
|
|
89
|
+
payload["client_sessions"] = client_sessions
|
|
87
90
|
|
|
88
91
|
future = asyncio.run_coroutine_threadsafe(handler.send_response(payload), loop)
|
|
89
92
|
future.add_done_callback(
|
|
@@ -704,9 +707,12 @@ def _portacode_connect_and_read_key(vmid: int, user: str, timeout_s: int = 10) -
|
|
|
704
707
|
stable = 0
|
|
705
708
|
history: List[Dict[str, Any]] = []
|
|
706
709
|
|
|
710
|
+
process_exited = False
|
|
711
|
+
exit_out = exit_err = ""
|
|
707
712
|
while time.time() - start < timeout_s:
|
|
708
713
|
if proc.poll() is not None:
|
|
709
|
-
|
|
714
|
+
process_exited = True
|
|
715
|
+
exit_out, exit_err = proc.communicate(timeout=1)
|
|
710
716
|
history.append(
|
|
711
717
|
{
|
|
712
718
|
"timestamp_s": round(time.time() - start, 2),
|
|
@@ -714,13 +720,7 @@ def _portacode_connect_and_read_key(vmid: int, user: str, timeout_s: int = 10) -
|
|
|
714
720
|
"returncode": proc.returncode,
|
|
715
721
|
}
|
|
716
722
|
)
|
|
717
|
-
|
|
718
|
-
"ok": False,
|
|
719
|
-
"error": "portacode connect exited before keys were created",
|
|
720
|
-
"stdout": (out or "").strip(),
|
|
721
|
-
"stderr": (err or "").strip(),
|
|
722
|
-
"history": history,
|
|
723
|
-
}
|
|
723
|
+
break
|
|
724
724
|
pub_size = file_size(pub_path)
|
|
725
725
|
priv_size = file_size(priv_path)
|
|
726
726
|
if pub_size and priv_size:
|
|
@@ -749,13 +749,29 @@ def _portacode_connect_and_read_key(vmid: int, user: str, timeout_s: int = 10) -
|
|
|
749
749
|
)
|
|
750
750
|
time.sleep(1)
|
|
751
751
|
|
|
752
|
-
|
|
752
|
+
final_pub = file_size(pub_path)
|
|
753
|
+
final_priv = file_size(priv_path)
|
|
754
|
+
if final_pub and final_priv:
|
|
755
|
+
key_res = _run_pct(vmid, f"su - {user} -c 'cat {pub_path}'")
|
|
756
|
+
if not process_exited:
|
|
757
|
+
proc.terminate()
|
|
758
|
+
try:
|
|
759
|
+
proc.wait(timeout=3)
|
|
760
|
+
except subprocess.TimeoutExpired:
|
|
761
|
+
proc.kill()
|
|
762
|
+
return {
|
|
763
|
+
"ok": True,
|
|
764
|
+
"public_key": key_res["stdout"].strip(),
|
|
765
|
+
"history": history,
|
|
766
|
+
}
|
|
767
|
+
|
|
768
|
+
if not process_exited:
|
|
753
769
|
proc.terminate()
|
|
754
770
|
try:
|
|
755
771
|
proc.wait(timeout=3)
|
|
756
772
|
except subprocess.TimeoutExpired:
|
|
757
773
|
proc.kill()
|
|
758
|
-
|
|
774
|
+
exit_out, exit_err = proc.communicate(timeout=1)
|
|
759
775
|
history.append(
|
|
760
776
|
{
|
|
761
777
|
"timestamp_s": round(time.time() - start, 2),
|
|
@@ -765,8 +781,8 @@ def _portacode_connect_and_read_key(vmid: int, user: str, timeout_s: int = 10) -
|
|
|
765
781
|
return {
|
|
766
782
|
"ok": False,
|
|
767
783
|
"error": "timed out waiting for portacode key files",
|
|
768
|
-
"stdout": (
|
|
769
|
-
"stderr": (
|
|
784
|
+
"stdout": (exit_out or "").strip(),
|
|
785
|
+
"stderr": (exit_err or "").strip(),
|
|
770
786
|
"history": history,
|
|
771
787
|
}
|
|
772
788
|
|
|
@@ -1037,8 +1053,14 @@ class CreateProxmoxContainerHandler(SyncHandler):
|
|
|
1037
1053
|
return "create_proxmox_container"
|
|
1038
1054
|
|
|
1039
1055
|
def execute(self, message: Dict[str, Any]) -> Dict[str, Any]:
|
|
1040
|
-
logger.info("create_proxmox_container command received")
|
|
1041
1056
|
request_id = message.get("request_id")
|
|
1057
|
+
source_client_session = message.get("source_client_session")
|
|
1058
|
+
logger.info(
|
|
1059
|
+
"create_proxmox_container command received request_id=%s client_session=%s",
|
|
1060
|
+
request_id,
|
|
1061
|
+
source_client_session,
|
|
1062
|
+
)
|
|
1063
|
+
client_sessions = [source_client_session] if source_client_session else None
|
|
1042
1064
|
bootstrap_user, bootstrap_password, bootstrap_ssh_key = _get_provisioning_user_info(message)
|
|
1043
1065
|
bootstrap_steps = _build_bootstrap_steps(bootstrap_user, bootstrap_password, bootstrap_ssh_key)
|
|
1044
1066
|
total_steps = 3 + len(bootstrap_steps) + 2
|
|
@@ -1062,6 +1084,7 @@ class CreateProxmoxContainerHandler(SyncHandler):
|
|
|
1062
1084
|
message=start_message,
|
|
1063
1085
|
phase="lifecycle",
|
|
1064
1086
|
request_id=request_id,
|
|
1087
|
+
client_sessions=client_sessions,
|
|
1065
1088
|
)
|
|
1066
1089
|
try:
|
|
1067
1090
|
result = action()
|
|
@@ -1076,6 +1099,7 @@ class CreateProxmoxContainerHandler(SyncHandler):
|
|
|
1076
1099
|
message=f"{step_label} failed: {exc}",
|
|
1077
1100
|
phase="lifecycle",
|
|
1078
1101
|
request_id=request_id,
|
|
1102
|
+
client_sessions=client_sessions,
|
|
1079
1103
|
details={"error": str(exc)},
|
|
1080
1104
|
)
|
|
1081
1105
|
raise
|
|
@@ -1089,6 +1113,7 @@ class CreateProxmoxContainerHandler(SyncHandler):
|
|
|
1089
1113
|
message=success_message,
|
|
1090
1114
|
phase="lifecycle",
|
|
1091
1115
|
request_id=request_id,
|
|
1116
|
+
client_sessions=client_sessions,
|
|
1092
1117
|
)
|
|
1093
1118
|
current_step_index += 1
|
|
1094
1119
|
return result
|
|
@@ -1118,7 +1143,7 @@ class CreateProxmoxContainerHandler(SyncHandler):
|
|
|
1118
1143
|
payload["cpuunits"] = max(int(payload["cpus"] * 1024), 10)
|
|
1119
1144
|
payload["memory"] = int(payload["ram_mib"])
|
|
1120
1145
|
payload["node"] = node
|
|
1121
|
-
logger.
|
|
1146
|
+
logger.info(
|
|
1122
1147
|
"Provisioning container node=%s template=%s ram=%s cpu=%s storage=%s",
|
|
1123
1148
|
node,
|
|
1124
1149
|
payload["template"],
|
|
@@ -1131,6 +1156,12 @@ class CreateProxmoxContainerHandler(SyncHandler):
|
|
|
1131
1156
|
payload["created_at"] = datetime.utcnow().isoformat() + "Z"
|
|
1132
1157
|
payload["status"] = "creating"
|
|
1133
1158
|
_write_container_record(vmid, payload)
|
|
1159
|
+
logger.info(
|
|
1160
|
+
"Container record written vmid=%s hostname=%s client_session=%s",
|
|
1161
|
+
vmid,
|
|
1162
|
+
payload["hostname"],
|
|
1163
|
+
source_client_session,
|
|
1164
|
+
)
|
|
1134
1165
|
return proxmox, node, vmid, payload
|
|
1135
1166
|
|
|
1136
1167
|
proxmox, node, vmid, payload = _run_lifecycle_step(
|
|
@@ -1189,9 +1220,16 @@ class CreateProxmoxContainerHandler(SyncHandler):
|
|
|
1189
1220
|
message=message_text,
|
|
1190
1221
|
phase="bootstrap",
|
|
1191
1222
|
request_id=request_id,
|
|
1223
|
+
client_sessions=client_sessions,
|
|
1192
1224
|
details=details or None,
|
|
1193
1225
|
)
|
|
1194
1226
|
|
|
1227
|
+
logger.info(
|
|
1228
|
+
"Bootstrapping Portacode in container vmid=%s user=%s client_session=%s",
|
|
1229
|
+
vmid,
|
|
1230
|
+
payload["username"],
|
|
1231
|
+
source_client_session,
|
|
1232
|
+
)
|
|
1195
1233
|
public_key, steps = _bootstrap_portacode(
|
|
1196
1234
|
vmid,
|
|
1197
1235
|
payload["username"],
|
|
@@ -1204,7 +1242,7 @@ class CreateProxmoxContainerHandler(SyncHandler):
|
|
|
1204
1242
|
)
|
|
1205
1243
|
current_step_index += len(bootstrap_steps)
|
|
1206
1244
|
|
|
1207
|
-
|
|
1245
|
+
response = {
|
|
1208
1246
|
"event": "proxmox_container_created",
|
|
1209
1247
|
"success": True,
|
|
1210
1248
|
"message": f"Container {vmid} is ready and Portacode key captured.",
|
|
@@ -1221,6 +1259,9 @@ class CreateProxmoxContainerHandler(SyncHandler):
|
|
|
1221
1259
|
},
|
|
1222
1260
|
"setup_steps": steps,
|
|
1223
1261
|
}
|
|
1262
|
+
if client_sessions:
|
|
1263
|
+
response["client_sessions"] = client_sessions
|
|
1264
|
+
return response
|
|
1224
1265
|
|
|
1225
1266
|
|
|
1226
1267
|
class StartPortacodeServiceHandler(SyncHandler):
|
|
@@ -1248,6 +1289,15 @@ class StartPortacodeServiceHandler(SyncHandler):
|
|
|
1248
1289
|
start_index = int(message.get("step_index", 1))
|
|
1249
1290
|
total_steps = int(message.get("total_steps", start_index + 2))
|
|
1250
1291
|
request_id = message.get("request_id")
|
|
1292
|
+
source_client_session = message.get("source_client_session")
|
|
1293
|
+
client_sessions = [source_client_session] if source_client_session else None
|
|
1294
|
+
|
|
1295
|
+
logger.info(
|
|
1296
|
+
"start_portacode_service invoked vmid=%s user=%s client_session=%s",
|
|
1297
|
+
vmid,
|
|
1298
|
+
user,
|
|
1299
|
+
source_client_session,
|
|
1300
|
+
)
|
|
1251
1301
|
|
|
1252
1302
|
auth_step_name = "setup_device_authentication"
|
|
1253
1303
|
auth_label = "Setting up device authentication"
|
|
@@ -1261,6 +1311,7 @@ class StartPortacodeServiceHandler(SyncHandler):
|
|
|
1261
1311
|
message="Notifying the server of the new device…",
|
|
1262
1312
|
phase="service",
|
|
1263
1313
|
request_id=request_id,
|
|
1314
|
+
client_sessions=client_sessions,
|
|
1264
1315
|
)
|
|
1265
1316
|
_emit_progress_event(
|
|
1266
1317
|
self,
|
|
@@ -1272,6 +1323,7 @@ class StartPortacodeServiceHandler(SyncHandler):
|
|
|
1272
1323
|
message="Authentication metadata recorded.",
|
|
1273
1324
|
phase="service",
|
|
1274
1325
|
request_id=request_id,
|
|
1326
|
+
client_sessions=client_sessions,
|
|
1275
1327
|
)
|
|
1276
1328
|
|
|
1277
1329
|
install_step = start_index + 1
|
|
@@ -1286,6 +1338,7 @@ class StartPortacodeServiceHandler(SyncHandler):
|
|
|
1286
1338
|
message="Running sudo portacode service install…",
|
|
1287
1339
|
phase="service",
|
|
1288
1340
|
request_id=request_id,
|
|
1341
|
+
client_sessions=client_sessions,
|
|
1289
1342
|
)
|
|
1290
1343
|
|
|
1291
1344
|
cmd = f"su - {user} -c 'sudo -S portacode service install'"
|
|
@@ -1302,6 +1355,7 @@ class StartPortacodeServiceHandler(SyncHandler):
|
|
|
1302
1355
|
message=f"{install_label} failed: {res.get('stderr') or res.get('stdout')}",
|
|
1303
1356
|
phase="service",
|
|
1304
1357
|
request_id=request_id,
|
|
1358
|
+
client_sessions=client_sessions,
|
|
1305
1359
|
details={
|
|
1306
1360
|
"stderr": res.get("stderr"),
|
|
1307
1361
|
"stdout": res.get("stdout"),
|
|
@@ -1309,6 +1363,12 @@ class StartPortacodeServiceHandler(SyncHandler):
|
|
|
1309
1363
|
)
|
|
1310
1364
|
raise RuntimeError(res.get("stderr") or res.get("stdout") or "Service install failed")
|
|
1311
1365
|
|
|
1366
|
+
logger.info(
|
|
1367
|
+
"portacode service install command completed vmid=%s returncode=%s",
|
|
1368
|
+
vmid,
|
|
1369
|
+
res["returncode"],
|
|
1370
|
+
)
|
|
1371
|
+
|
|
1312
1372
|
_emit_progress_event(
|
|
1313
1373
|
self,
|
|
1314
1374
|
step_index=install_step,
|
|
@@ -1319,14 +1379,18 @@ class StartPortacodeServiceHandler(SyncHandler):
|
|
|
1319
1379
|
message="Portacode service install finished.",
|
|
1320
1380
|
phase="service",
|
|
1321
1381
|
request_id=request_id,
|
|
1382
|
+
client_sessions=client_sessions,
|
|
1322
1383
|
)
|
|
1323
1384
|
|
|
1324
|
-
|
|
1385
|
+
response = {
|
|
1325
1386
|
"event": "proxmox_service_started",
|
|
1326
1387
|
"success": True,
|
|
1327
1388
|
"message": "Portacode service install completed",
|
|
1328
1389
|
"ctid": str(vmid),
|
|
1329
1390
|
}
|
|
1391
|
+
if client_sessions:
|
|
1392
|
+
response["client_sessions"] = client_sessions
|
|
1393
|
+
return response
|
|
1330
1394
|
|
|
1331
1395
|
|
|
1332
1396
|
class StartProxmoxContainerHandler(SyncHandler):
|
|
@@ -1342,12 +1406,20 @@ class StartProxmoxContainerHandler(SyncHandler):
|
|
|
1342
1406
|
proxmox = _connect_proxmox(config)
|
|
1343
1407
|
node = _get_node_from_config(config)
|
|
1344
1408
|
_ensure_container_managed(proxmox, node, vmid)
|
|
1409
|
+
source_client_session = message.get("source_client_session")
|
|
1410
|
+
client_sessions = [source_client_session] if source_client_session else None
|
|
1411
|
+
|
|
1412
|
+
logger.info(
|
|
1413
|
+
"start_proxmox_container invoked vmid=%s client_session=%s",
|
|
1414
|
+
vmid,
|
|
1415
|
+
source_client_session,
|
|
1416
|
+
)
|
|
1345
1417
|
|
|
1346
1418
|
status, elapsed = _start_container(proxmox, node, vmid)
|
|
1347
1419
|
_update_container_record(vmid, {"status": "running"})
|
|
1348
1420
|
|
|
1349
1421
|
infra = get_infra_snapshot()
|
|
1350
|
-
|
|
1422
|
+
response = {
|
|
1351
1423
|
"event": "proxmox_container_action",
|
|
1352
1424
|
"action": "start",
|
|
1353
1425
|
"success": True,
|
|
@@ -1357,6 +1429,9 @@ class StartProxmoxContainerHandler(SyncHandler):
|
|
|
1357
1429
|
"status": status.get("status"),
|
|
1358
1430
|
"infra": infra,
|
|
1359
1431
|
}
|
|
1432
|
+
if client_sessions:
|
|
1433
|
+
response["client_sessions"] = client_sessions
|
|
1434
|
+
return response
|
|
1360
1435
|
|
|
1361
1436
|
|
|
1362
1437
|
class StopProxmoxContainerHandler(SyncHandler):
|
|
@@ -1372,6 +1447,14 @@ class StopProxmoxContainerHandler(SyncHandler):
|
|
|
1372
1447
|
proxmox = _connect_proxmox(config)
|
|
1373
1448
|
node = _get_node_from_config(config)
|
|
1374
1449
|
_ensure_container_managed(proxmox, node, vmid)
|
|
1450
|
+
source_client_session = message.get("source_client_session")
|
|
1451
|
+
client_sessions = [source_client_session] if source_client_session else None
|
|
1452
|
+
|
|
1453
|
+
logger.info(
|
|
1454
|
+
"stop_proxmox_container invoked vmid=%s client_session=%s",
|
|
1455
|
+
vmid,
|
|
1456
|
+
source_client_session,
|
|
1457
|
+
)
|
|
1375
1458
|
|
|
1376
1459
|
status, elapsed = _stop_container(proxmox, node, vmid)
|
|
1377
1460
|
final_status = status.get("status") or "stopped"
|
|
@@ -1383,7 +1466,7 @@ class StopProxmoxContainerHandler(SyncHandler):
|
|
|
1383
1466
|
if final_status != "running" and elapsed == 0.0
|
|
1384
1467
|
else f"Stopped container {vmid} in {elapsed:.1f}s."
|
|
1385
1468
|
)
|
|
1386
|
-
|
|
1469
|
+
response = {
|
|
1387
1470
|
"event": "proxmox_container_action",
|
|
1388
1471
|
"action": "stop",
|
|
1389
1472
|
"success": True,
|
|
@@ -1393,6 +1476,9 @@ class StopProxmoxContainerHandler(SyncHandler):
|
|
|
1393
1476
|
"status": final_status,
|
|
1394
1477
|
"infra": infra,
|
|
1395
1478
|
}
|
|
1479
|
+
if client_sessions:
|
|
1480
|
+
response["client_sessions"] = client_sessions
|
|
1481
|
+
return response
|
|
1396
1482
|
|
|
1397
1483
|
|
|
1398
1484
|
class RemoveProxmoxContainerHandler(SyncHandler):
|
|
@@ -1408,13 +1494,21 @@ class RemoveProxmoxContainerHandler(SyncHandler):
|
|
|
1408
1494
|
proxmox = _connect_proxmox(config)
|
|
1409
1495
|
node = _get_node_from_config(config)
|
|
1410
1496
|
_ensure_container_managed(proxmox, node, vmid)
|
|
1497
|
+
source_client_session = message.get("source_client_session")
|
|
1498
|
+
client_sessions = [source_client_session] if source_client_session else None
|
|
1499
|
+
|
|
1500
|
+
logger.info(
|
|
1501
|
+
"remove_proxmox_container invoked vmid=%s client_session=%s",
|
|
1502
|
+
vmid,
|
|
1503
|
+
source_client_session,
|
|
1504
|
+
)
|
|
1411
1505
|
|
|
1412
1506
|
stop_status, stop_elapsed = _stop_container(proxmox, node, vmid)
|
|
1413
1507
|
delete_status, delete_elapsed = _delete_container(proxmox, node, vmid)
|
|
1414
1508
|
_remove_container_record(vmid)
|
|
1415
1509
|
|
|
1416
1510
|
infra = get_infra_snapshot()
|
|
1417
|
-
|
|
1511
|
+
response = {
|
|
1418
1512
|
"event": "proxmox_container_action",
|
|
1419
1513
|
"action": "remove",
|
|
1420
1514
|
"success": True,
|
|
@@ -1427,6 +1521,9 @@ class RemoveProxmoxContainerHandler(SyncHandler):
|
|
|
1427
1521
|
"status": "deleted",
|
|
1428
1522
|
"infra": infra,
|
|
1429
1523
|
}
|
|
1524
|
+
if client_sessions:
|
|
1525
|
+
response["client_sessions"] = client_sessions
|
|
1526
|
+
return response
|
|
1430
1527
|
|
|
1431
1528
|
|
|
1432
1529
|
class ConfigureProxmoxInfraHandler(SyncHandler):
|
|
@@ -1440,13 +1537,18 @@ class ConfigureProxmoxInfraHandler(SyncHandler):
|
|
|
1440
1537
|
verify_ssl = bool(message.get("verify_ssl"))
|
|
1441
1538
|
if not token_identifier or not token_value:
|
|
1442
1539
|
raise ValueError("token_identifier and token_value are required")
|
|
1540
|
+
source_client_session = message.get("source_client_session")
|
|
1541
|
+
client_sessions = [source_client_session] if source_client_session else None
|
|
1443
1542
|
snapshot = configure_infrastructure(token_identifier, token_value, verify_ssl=verify_ssl)
|
|
1444
|
-
|
|
1543
|
+
response = {
|
|
1445
1544
|
"event": "proxmox_infra_configured",
|
|
1446
1545
|
"success": True,
|
|
1447
1546
|
"message": "Proxmox infrastructure configured",
|
|
1448
1547
|
"infra": snapshot,
|
|
1449
1548
|
}
|
|
1549
|
+
if client_sessions:
|
|
1550
|
+
response["client_sessions"] = client_sessions
|
|
1551
|
+
return response
|
|
1450
1552
|
|
|
1451
1553
|
|
|
1452
1554
|
class RevertProxmoxInfraHandler(SyncHandler):
|
|
@@ -1455,10 +1557,15 @@ class RevertProxmoxInfraHandler(SyncHandler):
|
|
|
1455
1557
|
return "revert_proxmox_infra"
|
|
1456
1558
|
|
|
1457
1559
|
def execute(self, message: Dict[str, Any]) -> Dict[str, Any]:
|
|
1560
|
+
source_client_session = message.get("source_client_session")
|
|
1561
|
+
client_sessions = [source_client_session] if source_client_session else None
|
|
1458
1562
|
snapshot = revert_infrastructure()
|
|
1459
|
-
|
|
1563
|
+
response = {
|
|
1460
1564
|
"event": "proxmox_infra_reverted",
|
|
1461
1565
|
"success": True,
|
|
1462
1566
|
"message": "Proxmox infrastructure configuration reverted",
|
|
1463
1567
|
"infra": snapshot,
|
|
1464
1568
|
}
|
|
1569
|
+
if client_sessions:
|
|
1570
|
+
response["client_sessions"] = client_sessions
|
|
1571
|
+
return response
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|