portacode 1.4.12.dev9__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.dev9 → portacode-1.4.13.dev0}/PKG-INFO +1 -1
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/portacode/_version.py +2 -2
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/portacode/connection/handlers/proxmox_infra.py +103 -9
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/portacode.egg-info/PKG-INFO +1 -1
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/.claude/agents/communication-manager.md +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/.claude/settings.local.json +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/.gitignore +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/.gitmodules +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/LICENSE +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/MANIFEST.in +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/Makefile +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/README.md +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/backup.sh +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/connect.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/connect.sh +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/docker-compose.yaml +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/docs/images/device-transfer-button.png +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/docs/images/device-transfer-modal.png +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/docs/images/pair-device-button.png +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/docs/images/pairing-request.png +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/docs/images/student-workspace.png +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/README.md +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/simple_device/Dockerfile +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/simple_device/README.md +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/simple_device/data/device-01/.local/share/portacode/keys/id_portacode +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/simple_device/data/device-01/.local/share/portacode/keys/id_portacode.pub +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/simple_device/docker-compose.yaml +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/Dockerfile +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/README.md +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/.local/share/portacode/keys/id_portacode +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/.local/share/portacode/keys/id_portacode.pub +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/.local/share/portacode/run/gateway.pid +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/workspace/.gitignore +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/workspace/README.md +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/workspace/db.sqlite3 +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/workspace/galactic_bakeshop/__init__.py +0 -0
- {portacode-1.4.12.dev9 → 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.dev9 → 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.dev9 → 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.dev9 → 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.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/workspace/galactic_bakeshop/asgi.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/workspace/galactic_bakeshop/settings.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/workspace/galactic_bakeshop/urls.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/workspace/galactic_bakeshop/wsgi.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/workspace/manage.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/workspace/requirements.txt +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/workspace/templates/treats/home.html +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/workspace/treats/__init__.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/workspace/treats/__pycache__/__init__.cpython-311.pyc +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/workspace/treats/__pycache__/admin.cpython-311.pyc +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/workspace/treats/__pycache__/apps.cpython-311.pyc +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/workspace/treats/__pycache__/menu.cpython-311.pyc +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/workspace/treats/__pycache__/models.cpython-311.pyc +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/workspace/treats/__pycache__/urls.cpython-311.pyc +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/workspace/treats/__pycache__/views.cpython-311.pyc +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/workspace/treats/admin.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/workspace/treats/apps.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/workspace/treats/menu.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/workspace/treats/migrations/__init__.py +0 -0
- {portacode-1.4.12.dev9 → 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.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/workspace/treats/models.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/workspace/treats/tests.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/workspace/treats/urls.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-01/workspace/treats/views.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-02/.local/share/portacode/keys/id_portacode +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-02/.local/share/portacode/keys/id_portacode.pub +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-02/workspace/README.md +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-02/workspace/galactic_bakeshop/__init__.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-02/workspace/galactic_bakeshop/asgi.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-02/workspace/galactic_bakeshop/settings.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-02/workspace/galactic_bakeshop/urls.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-02/workspace/galactic_bakeshop/wsgi.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-02/workspace/manage.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-02/workspace/requirements.txt +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-02/workspace/templates/treats/home.html +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-02/workspace/treats/__init__.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-02/workspace/treats/admin.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-02/workspace/treats/apps.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-02/workspace/treats/menu.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-02/workspace/treats/migrations/__init__.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-02/workspace/treats/models.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-02/workspace/treats/tests.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-02/workspace/treats/urls.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-02/workspace/treats/views.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-03/.local/share/portacode/keys/id_portacode +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-03/.local/share/portacode/keys/id_portacode.pub +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-03/workspace/README.md +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-03/workspace/galactic_bakeshop/__init__.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-03/workspace/galactic_bakeshop/asgi.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-03/workspace/galactic_bakeshop/settings.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-03/workspace/galactic_bakeshop/urls.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-03/workspace/galactic_bakeshop/wsgi.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-03/workspace/manage.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-03/workspace/requirements.txt +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-03/workspace/templates/treats/home.html +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-03/workspace/treats/__init__.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-03/workspace/treats/admin.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-03/workspace/treats/apps.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-03/workspace/treats/menu.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-03/workspace/treats/migrations/__init__.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-03/workspace/treats/models.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-03/workspace/treats/tests.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-03/workspace/treats/urls.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-03/workspace/treats/views.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-04/.local/share/portacode/keys/id_portacode +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-04/.local/share/portacode/keys/id_portacode.pub +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-04/workspace/README.md +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-04/workspace/galactic_bakeshop/__init__.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-04/workspace/galactic_bakeshop/asgi.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-04/workspace/galactic_bakeshop/settings.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-04/workspace/galactic_bakeshop/urls.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-04/workspace/galactic_bakeshop/wsgi.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-04/workspace/manage.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-04/workspace/requirements.txt +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-04/workspace/templates/treats/home.html +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-04/workspace/treats/__init__.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-04/workspace/treats/admin.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-04/workspace/treats/apps.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-04/workspace/treats/menu.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-04/workspace/treats/migrations/__init__.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-04/workspace/treats/models.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-04/workspace/treats/tests.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-04/workspace/treats/urls.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-04/workspace/treats/views.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-05/.local/share/portacode/keys/id_portacode +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-05/.local/share/portacode/keys/id_portacode.pub +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-05/workspace/README.md +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-05/workspace/galactic_bakeshop/__init__.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-05/workspace/galactic_bakeshop/asgi.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-05/workspace/galactic_bakeshop/settings.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-05/workspace/galactic_bakeshop/urls.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-05/workspace/galactic_bakeshop/wsgi.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-05/workspace/manage.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-05/workspace/requirements.txt +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-05/workspace/templates/treats/home.html +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-05/workspace/treats/__init__.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-05/workspace/treats/admin.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-05/workspace/treats/apps.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-05/workspace/treats/menu.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-05/workspace/treats/migrations/__init__.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-05/workspace/treats/models.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-05/workspace/treats/tests.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-05/workspace/treats/urls.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-05/workspace/treats/views.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-06/.local/share/portacode/keys/id_portacode +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-06/.local/share/portacode/keys/id_portacode.pub +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-06/workspace/README.md +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-06/workspace/galactic_bakeshop/__init__.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-06/workspace/galactic_bakeshop/asgi.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-06/workspace/galactic_bakeshop/settings.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-06/workspace/galactic_bakeshop/urls.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-06/workspace/galactic_bakeshop/wsgi.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-06/workspace/manage.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-06/workspace/requirements.txt +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-06/workspace/templates/treats/home.html +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-06/workspace/treats/__init__.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-06/workspace/treats/admin.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-06/workspace/treats/apps.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-06/workspace/treats/menu.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-06/workspace/treats/migrations/__init__.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-06/workspace/treats/models.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-06/workspace/treats/tests.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-06/workspace/treats/urls.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-06/workspace/treats/views.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-07/.local/share/portacode/keys/id_portacode +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-07/.local/share/portacode/keys/id_portacode.pub +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-07/workspace/README.md +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-07/workspace/galactic_bakeshop/__init__.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-07/workspace/galactic_bakeshop/asgi.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-07/workspace/galactic_bakeshop/settings.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-07/workspace/galactic_bakeshop/urls.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-07/workspace/galactic_bakeshop/wsgi.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-07/workspace/manage.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-07/workspace/requirements.txt +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-07/workspace/templates/treats/home.html +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-07/workspace/treats/__init__.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-07/workspace/treats/admin.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-07/workspace/treats/apps.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-07/workspace/treats/menu.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-07/workspace/treats/migrations/__init__.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-07/workspace/treats/models.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-07/workspace/treats/tests.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-07/workspace/treats/urls.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-07/workspace/treats/views.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-08/.local/share/portacode/keys/id_portacode +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-08/.local/share/portacode/keys/id_portacode.pub +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-08/workspace/README.md +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-08/workspace/galactic_bakeshop/__init__.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-08/workspace/galactic_bakeshop/asgi.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-08/workspace/galactic_bakeshop/settings.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-08/workspace/galactic_bakeshop/urls.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-08/workspace/galactic_bakeshop/wsgi.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-08/workspace/manage.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-08/workspace/requirements.txt +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-08/workspace/templates/treats/home.html +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-08/workspace/treats/__init__.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-08/workspace/treats/admin.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-08/workspace/treats/apps.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-08/workspace/treats/menu.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-08/workspace/treats/migrations/__init__.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-08/workspace/treats/models.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-08/workspace/treats/tests.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-08/workspace/treats/urls.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-08/workspace/treats/views.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-09/.local/share/portacode/keys/id_portacode +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-09/.local/share/portacode/keys/id_portacode.pub +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-09/workspace/README.md +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-09/workspace/galactic_bakeshop/__init__.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-09/workspace/galactic_bakeshop/asgi.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-09/workspace/galactic_bakeshop/settings.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-09/workspace/galactic_bakeshop/urls.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-09/workspace/galactic_bakeshop/wsgi.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-09/workspace/manage.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-09/workspace/requirements.txt +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-09/workspace/templates/treats/home.html +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-09/workspace/treats/__init__.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-09/workspace/treats/admin.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-09/workspace/treats/apps.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-09/workspace/treats/menu.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-09/workspace/treats/migrations/__init__.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-09/workspace/treats/models.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-09/workspace/treats/tests.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-09/workspace/treats/urls.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-09/workspace/treats/views.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-10/.local/share/portacode/keys/id_portacode +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-10/.local/share/portacode/keys/id_portacode.pub +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-10/workspace/README.md +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-10/workspace/galactic_bakeshop/__init__.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-10/workspace/galactic_bakeshop/asgi.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-10/workspace/galactic_bakeshop/settings.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-10/workspace/galactic_bakeshop/urls.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-10/workspace/galactic_bakeshop/wsgi.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-10/workspace/manage.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-10/workspace/requirements.txt +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-10/workspace/templates/treats/home.html +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-10/workspace/treats/__init__.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-10/workspace/treats/admin.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-10/workspace/treats/apps.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-10/workspace/treats/menu.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-10/workspace/treats/migrations/__init__.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-10/workspace/treats/models.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-10/workspace/treats/tests.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-10/workspace/treats/urls.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/data/student-10/workspace/treats/views.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/docker-compose.yaml +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/initial_content/README.md +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/initial_content/galactic_bakeshop/__init__.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/initial_content/galactic_bakeshop/asgi.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/initial_content/galactic_bakeshop/settings.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/initial_content/galactic_bakeshop/urls.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/initial_content/galactic_bakeshop/wsgi.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/initial_content/manage.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/initial_content/requirements.txt +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/initial_content/templates/treats/home.html +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/initial_content/treats/__init__.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/initial_content/treats/admin.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/initial_content/treats/apps.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/initial_content/treats/menu.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/initial_content/treats/migrations/__init__.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/initial_content/treats/models.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/initial_content/treats/tests.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/initial_content/treats/urls.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/initial_content/treats/views.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/examples/workshop_fleet/instructions/WELCOME.md +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/portacode/README.md +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/portacode/__init__.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/portacode/__main__.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/portacode/cli.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/portacode/connection/README.md +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/portacode/connection/__init__.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/portacode/connection/client.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/portacode/connection/handlers/README.md +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/portacode/connection/handlers/WEBSOCKET_PROTOCOL.md +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/portacode/connection/handlers/__init__.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/portacode/connection/handlers/base.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/portacode/connection/handlers/chunked_content.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/portacode/connection/handlers/diff_handlers.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/portacode/connection/handlers/file_handlers.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/portacode/connection/handlers/project_aware_file_handlers.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/portacode/connection/handlers/project_state/README.md +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/portacode/connection/handlers/project_state/__init__.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/portacode/connection/handlers/project_state/file_system_watcher.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/portacode/connection/handlers/project_state/git_manager.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/portacode/connection/handlers/project_state/handlers.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/portacode/connection/handlers/project_state/manager.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/portacode/connection/handlers/project_state/models.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/portacode/connection/handlers/project_state/utils.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/portacode/connection/handlers/project_state_handlers.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/portacode/connection/handlers/registry.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/portacode/connection/handlers/session.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/portacode/connection/handlers/system_handlers.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/portacode/connection/handlers/tab_factory.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/portacode/connection/handlers/terminal_handlers.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/portacode/connection/handlers/update_handler.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/portacode/connection/multiplex.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/portacode/connection/terminal.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/portacode/data.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/portacode/keypair.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/portacode/link_capture/__init__.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/portacode/link_capture/__pycache__/__init__.cpython-311.pyc +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/portacode/link_capture/bin/__pycache__/link_capture_wrapper.cpython-311.pyc +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/portacode/link_capture/bin/elinks +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/portacode/link_capture/bin/gio-open +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/portacode/link_capture/bin/gnome-open +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/portacode/link_capture/bin/gvfs-open +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/portacode/link_capture/bin/kde-open +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/portacode/link_capture/bin/kfmclient +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/portacode/link_capture/bin/link_capture_exec.sh +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/portacode/link_capture/bin/link_capture_wrapper.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/portacode/link_capture/bin/links +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/portacode/link_capture/bin/links2 +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/portacode/link_capture/bin/lynx +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/portacode/link_capture/bin/mate-open +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/portacode/link_capture/bin/netsurf +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/portacode/link_capture/bin/sensible-browser +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/portacode/link_capture/bin/w3m +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/portacode/link_capture/bin/x-www-browser +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/portacode/link_capture/bin/xdg-open +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/portacode/logging_categories.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/portacode/pairing.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/portacode/service.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/portacode/static/js/test-ntp-clock.html +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/portacode/static/js/utils/ntp-clock.js +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/portacode/utils/NTP_ARCHITECTURE.md +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/portacode/utils/__init__.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/portacode/utils/diff_apply.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/portacode/utils/diff_renderer.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/portacode/utils/ntp_clock.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/portacode.egg-info/SOURCES.txt +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/portacode.egg-info/dependency_links.txt +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/portacode.egg-info/entry_points.txt +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/portacode.egg-info/requires.txt +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/portacode.egg-info/top_level.txt +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/pyproject.toml +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/restore.sh +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/run_tests.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/setup.cfg +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/setup.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/test.sh +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/test_modules/README.md +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/test_modules/__init__.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/test_modules/test_device_online.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/test_modules/test_file_operations.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/test_modules/test_git_status_ui.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/test_modules/test_login_flow.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/test_modules/test_navigate_testing_folder.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/test_modules/test_play_store_screenshots.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/test_modules/test_terminal_buffer_performance.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/test_modules/test_terminal_interaction.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/test_modules/test_terminal_loading_race_condition.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/test_modules/test_terminal_start.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/test_request_id.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/testing_framework/.env.example +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/testing_framework/README.md +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/testing_framework/__init__.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/testing_framework/cli.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/testing_framework/core/__init__.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/testing_framework/core/base_test.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/testing_framework/core/cli_manager.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/testing_framework/core/hierarchical_runner.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/testing_framework/core/playwright_manager.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/testing_framework/core/runner.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/testing_framework/core/shared_cli_manager.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/testing_framework/core/test_discovery.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/testing_framework/requirements.txt +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/todo/UI_UX/opening_a_file_on_desktop_results_in_nothing.md +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/todo/agent_context_management.md +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/todo/django_server_time_sync.md +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/todo/issues/device_performance_degradation.md +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/todo/issues/git_data_not_captured_in_proxmox.md +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/todo/issues/indefinite_resource_loading.md +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/todo/issues/portacode_service_silently_down.md +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/todo/issues/premature_terminal_exit.md +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/todo/issues/project_cpu_hotspots.md +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/todo/issues/terminals_exit_upon_starting.md +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/todo/issues/wrong_item_classification_on_client_side.md +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/todo/smartphone_terminal_input_frustrations.md +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/tools/generate_play_store_assets.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/tools/pairing_tester.py +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/tools/run_screenshot_suite.sh +0 -0
- {portacode-1.4.12.dev9 → portacode-1.4.13.dev0}/tools/test_python_ntp_clock.py +0 -0
- {portacode-1.4.12.dev9 → 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.dev9 → 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(
|
|
@@ -1050,8 +1053,14 @@ class CreateProxmoxContainerHandler(SyncHandler):
|
|
|
1050
1053
|
return "create_proxmox_container"
|
|
1051
1054
|
|
|
1052
1055
|
def execute(self, message: Dict[str, Any]) -> Dict[str, Any]:
|
|
1053
|
-
logger.info("create_proxmox_container command received")
|
|
1054
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
|
|
1055
1064
|
bootstrap_user, bootstrap_password, bootstrap_ssh_key = _get_provisioning_user_info(message)
|
|
1056
1065
|
bootstrap_steps = _build_bootstrap_steps(bootstrap_user, bootstrap_password, bootstrap_ssh_key)
|
|
1057
1066
|
total_steps = 3 + len(bootstrap_steps) + 2
|
|
@@ -1075,6 +1084,7 @@ class CreateProxmoxContainerHandler(SyncHandler):
|
|
|
1075
1084
|
message=start_message,
|
|
1076
1085
|
phase="lifecycle",
|
|
1077
1086
|
request_id=request_id,
|
|
1087
|
+
client_sessions=client_sessions,
|
|
1078
1088
|
)
|
|
1079
1089
|
try:
|
|
1080
1090
|
result = action()
|
|
@@ -1089,6 +1099,7 @@ class CreateProxmoxContainerHandler(SyncHandler):
|
|
|
1089
1099
|
message=f"{step_label} failed: {exc}",
|
|
1090
1100
|
phase="lifecycle",
|
|
1091
1101
|
request_id=request_id,
|
|
1102
|
+
client_sessions=client_sessions,
|
|
1092
1103
|
details={"error": str(exc)},
|
|
1093
1104
|
)
|
|
1094
1105
|
raise
|
|
@@ -1102,6 +1113,7 @@ class CreateProxmoxContainerHandler(SyncHandler):
|
|
|
1102
1113
|
message=success_message,
|
|
1103
1114
|
phase="lifecycle",
|
|
1104
1115
|
request_id=request_id,
|
|
1116
|
+
client_sessions=client_sessions,
|
|
1105
1117
|
)
|
|
1106
1118
|
current_step_index += 1
|
|
1107
1119
|
return result
|
|
@@ -1131,7 +1143,7 @@ class CreateProxmoxContainerHandler(SyncHandler):
|
|
|
1131
1143
|
payload["cpuunits"] = max(int(payload["cpus"] * 1024), 10)
|
|
1132
1144
|
payload["memory"] = int(payload["ram_mib"])
|
|
1133
1145
|
payload["node"] = node
|
|
1134
|
-
logger.
|
|
1146
|
+
logger.info(
|
|
1135
1147
|
"Provisioning container node=%s template=%s ram=%s cpu=%s storage=%s",
|
|
1136
1148
|
node,
|
|
1137
1149
|
payload["template"],
|
|
@@ -1144,6 +1156,12 @@ class CreateProxmoxContainerHandler(SyncHandler):
|
|
|
1144
1156
|
payload["created_at"] = datetime.utcnow().isoformat() + "Z"
|
|
1145
1157
|
payload["status"] = "creating"
|
|
1146
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
|
+
)
|
|
1147
1165
|
return proxmox, node, vmid, payload
|
|
1148
1166
|
|
|
1149
1167
|
proxmox, node, vmid, payload = _run_lifecycle_step(
|
|
@@ -1202,9 +1220,16 @@ class CreateProxmoxContainerHandler(SyncHandler):
|
|
|
1202
1220
|
message=message_text,
|
|
1203
1221
|
phase="bootstrap",
|
|
1204
1222
|
request_id=request_id,
|
|
1223
|
+
client_sessions=client_sessions,
|
|
1205
1224
|
details=details or None,
|
|
1206
1225
|
)
|
|
1207
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
|
+
)
|
|
1208
1233
|
public_key, steps = _bootstrap_portacode(
|
|
1209
1234
|
vmid,
|
|
1210
1235
|
payload["username"],
|
|
@@ -1217,7 +1242,7 @@ class CreateProxmoxContainerHandler(SyncHandler):
|
|
|
1217
1242
|
)
|
|
1218
1243
|
current_step_index += len(bootstrap_steps)
|
|
1219
1244
|
|
|
1220
|
-
|
|
1245
|
+
response = {
|
|
1221
1246
|
"event": "proxmox_container_created",
|
|
1222
1247
|
"success": True,
|
|
1223
1248
|
"message": f"Container {vmid} is ready and Portacode key captured.",
|
|
@@ -1234,6 +1259,9 @@ class CreateProxmoxContainerHandler(SyncHandler):
|
|
|
1234
1259
|
},
|
|
1235
1260
|
"setup_steps": steps,
|
|
1236
1261
|
}
|
|
1262
|
+
if client_sessions:
|
|
1263
|
+
response["client_sessions"] = client_sessions
|
|
1264
|
+
return response
|
|
1237
1265
|
|
|
1238
1266
|
|
|
1239
1267
|
class StartPortacodeServiceHandler(SyncHandler):
|
|
@@ -1261,6 +1289,15 @@ class StartPortacodeServiceHandler(SyncHandler):
|
|
|
1261
1289
|
start_index = int(message.get("step_index", 1))
|
|
1262
1290
|
total_steps = int(message.get("total_steps", start_index + 2))
|
|
1263
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
|
+
)
|
|
1264
1301
|
|
|
1265
1302
|
auth_step_name = "setup_device_authentication"
|
|
1266
1303
|
auth_label = "Setting up device authentication"
|
|
@@ -1274,6 +1311,7 @@ class StartPortacodeServiceHandler(SyncHandler):
|
|
|
1274
1311
|
message="Notifying the server of the new device…",
|
|
1275
1312
|
phase="service",
|
|
1276
1313
|
request_id=request_id,
|
|
1314
|
+
client_sessions=client_sessions,
|
|
1277
1315
|
)
|
|
1278
1316
|
_emit_progress_event(
|
|
1279
1317
|
self,
|
|
@@ -1285,6 +1323,7 @@ class StartPortacodeServiceHandler(SyncHandler):
|
|
|
1285
1323
|
message="Authentication metadata recorded.",
|
|
1286
1324
|
phase="service",
|
|
1287
1325
|
request_id=request_id,
|
|
1326
|
+
client_sessions=client_sessions,
|
|
1288
1327
|
)
|
|
1289
1328
|
|
|
1290
1329
|
install_step = start_index + 1
|
|
@@ -1299,6 +1338,7 @@ class StartPortacodeServiceHandler(SyncHandler):
|
|
|
1299
1338
|
message="Running sudo portacode service install…",
|
|
1300
1339
|
phase="service",
|
|
1301
1340
|
request_id=request_id,
|
|
1341
|
+
client_sessions=client_sessions,
|
|
1302
1342
|
)
|
|
1303
1343
|
|
|
1304
1344
|
cmd = f"su - {user} -c 'sudo -S portacode service install'"
|
|
@@ -1315,6 +1355,7 @@ class StartPortacodeServiceHandler(SyncHandler):
|
|
|
1315
1355
|
message=f"{install_label} failed: {res.get('stderr') or res.get('stdout')}",
|
|
1316
1356
|
phase="service",
|
|
1317
1357
|
request_id=request_id,
|
|
1358
|
+
client_sessions=client_sessions,
|
|
1318
1359
|
details={
|
|
1319
1360
|
"stderr": res.get("stderr"),
|
|
1320
1361
|
"stdout": res.get("stdout"),
|
|
@@ -1322,6 +1363,12 @@ class StartPortacodeServiceHandler(SyncHandler):
|
|
|
1322
1363
|
)
|
|
1323
1364
|
raise RuntimeError(res.get("stderr") or res.get("stdout") or "Service install failed")
|
|
1324
1365
|
|
|
1366
|
+
logger.info(
|
|
1367
|
+
"portacode service install command completed vmid=%s returncode=%s",
|
|
1368
|
+
vmid,
|
|
1369
|
+
res["returncode"],
|
|
1370
|
+
)
|
|
1371
|
+
|
|
1325
1372
|
_emit_progress_event(
|
|
1326
1373
|
self,
|
|
1327
1374
|
step_index=install_step,
|
|
@@ -1332,14 +1379,18 @@ class StartPortacodeServiceHandler(SyncHandler):
|
|
|
1332
1379
|
message="Portacode service install finished.",
|
|
1333
1380
|
phase="service",
|
|
1334
1381
|
request_id=request_id,
|
|
1382
|
+
client_sessions=client_sessions,
|
|
1335
1383
|
)
|
|
1336
1384
|
|
|
1337
|
-
|
|
1385
|
+
response = {
|
|
1338
1386
|
"event": "proxmox_service_started",
|
|
1339
1387
|
"success": True,
|
|
1340
1388
|
"message": "Portacode service install completed",
|
|
1341
1389
|
"ctid": str(vmid),
|
|
1342
1390
|
}
|
|
1391
|
+
if client_sessions:
|
|
1392
|
+
response["client_sessions"] = client_sessions
|
|
1393
|
+
return response
|
|
1343
1394
|
|
|
1344
1395
|
|
|
1345
1396
|
class StartProxmoxContainerHandler(SyncHandler):
|
|
@@ -1355,12 +1406,20 @@ class StartProxmoxContainerHandler(SyncHandler):
|
|
|
1355
1406
|
proxmox = _connect_proxmox(config)
|
|
1356
1407
|
node = _get_node_from_config(config)
|
|
1357
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
|
+
)
|
|
1358
1417
|
|
|
1359
1418
|
status, elapsed = _start_container(proxmox, node, vmid)
|
|
1360
1419
|
_update_container_record(vmid, {"status": "running"})
|
|
1361
1420
|
|
|
1362
1421
|
infra = get_infra_snapshot()
|
|
1363
|
-
|
|
1422
|
+
response = {
|
|
1364
1423
|
"event": "proxmox_container_action",
|
|
1365
1424
|
"action": "start",
|
|
1366
1425
|
"success": True,
|
|
@@ -1370,6 +1429,9 @@ class StartProxmoxContainerHandler(SyncHandler):
|
|
|
1370
1429
|
"status": status.get("status"),
|
|
1371
1430
|
"infra": infra,
|
|
1372
1431
|
}
|
|
1432
|
+
if client_sessions:
|
|
1433
|
+
response["client_sessions"] = client_sessions
|
|
1434
|
+
return response
|
|
1373
1435
|
|
|
1374
1436
|
|
|
1375
1437
|
class StopProxmoxContainerHandler(SyncHandler):
|
|
@@ -1385,6 +1447,14 @@ class StopProxmoxContainerHandler(SyncHandler):
|
|
|
1385
1447
|
proxmox = _connect_proxmox(config)
|
|
1386
1448
|
node = _get_node_from_config(config)
|
|
1387
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
|
+
)
|
|
1388
1458
|
|
|
1389
1459
|
status, elapsed = _stop_container(proxmox, node, vmid)
|
|
1390
1460
|
final_status = status.get("status") or "stopped"
|
|
@@ -1396,7 +1466,7 @@ class StopProxmoxContainerHandler(SyncHandler):
|
|
|
1396
1466
|
if final_status != "running" and elapsed == 0.0
|
|
1397
1467
|
else f"Stopped container {vmid} in {elapsed:.1f}s."
|
|
1398
1468
|
)
|
|
1399
|
-
|
|
1469
|
+
response = {
|
|
1400
1470
|
"event": "proxmox_container_action",
|
|
1401
1471
|
"action": "stop",
|
|
1402
1472
|
"success": True,
|
|
@@ -1406,6 +1476,9 @@ class StopProxmoxContainerHandler(SyncHandler):
|
|
|
1406
1476
|
"status": final_status,
|
|
1407
1477
|
"infra": infra,
|
|
1408
1478
|
}
|
|
1479
|
+
if client_sessions:
|
|
1480
|
+
response["client_sessions"] = client_sessions
|
|
1481
|
+
return response
|
|
1409
1482
|
|
|
1410
1483
|
|
|
1411
1484
|
class RemoveProxmoxContainerHandler(SyncHandler):
|
|
@@ -1421,13 +1494,21 @@ class RemoveProxmoxContainerHandler(SyncHandler):
|
|
|
1421
1494
|
proxmox = _connect_proxmox(config)
|
|
1422
1495
|
node = _get_node_from_config(config)
|
|
1423
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
|
+
)
|
|
1424
1505
|
|
|
1425
1506
|
stop_status, stop_elapsed = _stop_container(proxmox, node, vmid)
|
|
1426
1507
|
delete_status, delete_elapsed = _delete_container(proxmox, node, vmid)
|
|
1427
1508
|
_remove_container_record(vmid)
|
|
1428
1509
|
|
|
1429
1510
|
infra = get_infra_snapshot()
|
|
1430
|
-
|
|
1511
|
+
response = {
|
|
1431
1512
|
"event": "proxmox_container_action",
|
|
1432
1513
|
"action": "remove",
|
|
1433
1514
|
"success": True,
|
|
@@ -1440,6 +1521,9 @@ class RemoveProxmoxContainerHandler(SyncHandler):
|
|
|
1440
1521
|
"status": "deleted",
|
|
1441
1522
|
"infra": infra,
|
|
1442
1523
|
}
|
|
1524
|
+
if client_sessions:
|
|
1525
|
+
response["client_sessions"] = client_sessions
|
|
1526
|
+
return response
|
|
1443
1527
|
|
|
1444
1528
|
|
|
1445
1529
|
class ConfigureProxmoxInfraHandler(SyncHandler):
|
|
@@ -1453,13 +1537,18 @@ class ConfigureProxmoxInfraHandler(SyncHandler):
|
|
|
1453
1537
|
verify_ssl = bool(message.get("verify_ssl"))
|
|
1454
1538
|
if not token_identifier or not token_value:
|
|
1455
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
|
|
1456
1542
|
snapshot = configure_infrastructure(token_identifier, token_value, verify_ssl=verify_ssl)
|
|
1457
|
-
|
|
1543
|
+
response = {
|
|
1458
1544
|
"event": "proxmox_infra_configured",
|
|
1459
1545
|
"success": True,
|
|
1460
1546
|
"message": "Proxmox infrastructure configured",
|
|
1461
1547
|
"infra": snapshot,
|
|
1462
1548
|
}
|
|
1549
|
+
if client_sessions:
|
|
1550
|
+
response["client_sessions"] = client_sessions
|
|
1551
|
+
return response
|
|
1463
1552
|
|
|
1464
1553
|
|
|
1465
1554
|
class RevertProxmoxInfraHandler(SyncHandler):
|
|
@@ -1468,10 +1557,15 @@ class RevertProxmoxInfraHandler(SyncHandler):
|
|
|
1468
1557
|
return "revert_proxmox_infra"
|
|
1469
1558
|
|
|
1470
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
|
|
1471
1562
|
snapshot = revert_infrastructure()
|
|
1472
|
-
|
|
1563
|
+
response = {
|
|
1473
1564
|
"event": "proxmox_infra_reverted",
|
|
1474
1565
|
"success": True,
|
|
1475
1566
|
"message": "Proxmox infrastructure configuration reverted",
|
|
1476
1567
|
"infra": snapshot,
|
|
1477
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
|
|
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
|