portacode 1.4.18.dev1__tar.gz → 1.4.19.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.18.dev1 → portacode-1.4.19.dev0}/PKG-INFO +1 -1
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/portacode/_version.py +2 -2
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/portacode/connection/handlers/WEBSOCKET_PROTOCOL.md +1 -1
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/portacode/connection/handlers/base.py +26 -5
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/portacode/connection/handlers/proxmox_infra.py +29 -2
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/portacode/connection/handlers/registry.py +16 -3
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/portacode.egg-info/PKG-INFO +1 -1
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/.claude/agents/communication-manager.md +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/.claude/settings.local.json +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/.gitignore +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/.gitmodules +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/LICENSE +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/MANIFEST.in +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/Makefile +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/README.md +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/backup.sh +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/connect.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/connect.sh +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/docker-compose.yaml +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/docs/images/device-transfer-button.png +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/docs/images/device-transfer-modal.png +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/docs/images/pair-device-button.png +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/docs/images/pairing-request.png +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/docs/images/student-workspace.png +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/README.md +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/simple_device/Dockerfile +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/simple_device/README.md +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/simple_device/data/device-01/.local/share/portacode/keys/id_portacode +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/simple_device/data/device-01/.local/share/portacode/keys/id_portacode.pub +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/simple_device/docker-compose.yaml +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/Dockerfile +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/README.md +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-01/.local/share/portacode/keys/id_portacode +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-01/.local/share/portacode/keys/id_portacode.pub +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-01/.local/share/portacode/run/gateway.pid +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-01/workspace/.gitignore +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-01/workspace/README.md +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-01/workspace/db.sqlite3 +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-01/workspace/galactic_bakeshop/__init__.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-01/workspace/galactic_bakeshop/__pycache__/__init__.cpython-311.pyc +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-01/workspace/galactic_bakeshop/__pycache__/settings.cpython-311.pyc +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-01/workspace/galactic_bakeshop/__pycache__/urls.cpython-311.pyc +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-01/workspace/galactic_bakeshop/__pycache__/wsgi.cpython-311.pyc +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-01/workspace/galactic_bakeshop/asgi.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-01/workspace/galactic_bakeshop/settings.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-01/workspace/galactic_bakeshop/urls.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-01/workspace/galactic_bakeshop/wsgi.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-01/workspace/manage.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-01/workspace/requirements.txt +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-01/workspace/templates/treats/home.html +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-01/workspace/treats/__init__.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-01/workspace/treats/__pycache__/__init__.cpython-311.pyc +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-01/workspace/treats/__pycache__/admin.cpython-311.pyc +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-01/workspace/treats/__pycache__/apps.cpython-311.pyc +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-01/workspace/treats/__pycache__/menu.cpython-311.pyc +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-01/workspace/treats/__pycache__/models.cpython-311.pyc +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-01/workspace/treats/__pycache__/urls.cpython-311.pyc +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-01/workspace/treats/__pycache__/views.cpython-311.pyc +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-01/workspace/treats/admin.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-01/workspace/treats/apps.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-01/workspace/treats/menu.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-01/workspace/treats/migrations/__init__.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-01/workspace/treats/migrations/__pycache__/__init__.cpython-311.pyc +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-01/workspace/treats/models.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-01/workspace/treats/tests.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-01/workspace/treats/urls.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-01/workspace/treats/views.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-02/.local/share/portacode/keys/id_portacode +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-02/.local/share/portacode/keys/id_portacode.pub +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-02/workspace/README.md +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-02/workspace/galactic_bakeshop/__init__.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-02/workspace/galactic_bakeshop/asgi.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-02/workspace/galactic_bakeshop/settings.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-02/workspace/galactic_bakeshop/urls.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-02/workspace/galactic_bakeshop/wsgi.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-02/workspace/manage.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-02/workspace/requirements.txt +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-02/workspace/templates/treats/home.html +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-02/workspace/treats/__init__.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-02/workspace/treats/admin.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-02/workspace/treats/apps.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-02/workspace/treats/menu.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-02/workspace/treats/migrations/__init__.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-02/workspace/treats/models.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-02/workspace/treats/tests.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-02/workspace/treats/urls.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-02/workspace/treats/views.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-03/.local/share/portacode/keys/id_portacode +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-03/.local/share/portacode/keys/id_portacode.pub +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-03/workspace/README.md +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-03/workspace/galactic_bakeshop/__init__.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-03/workspace/galactic_bakeshop/asgi.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-03/workspace/galactic_bakeshop/settings.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-03/workspace/galactic_bakeshop/urls.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-03/workspace/galactic_bakeshop/wsgi.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-03/workspace/manage.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-03/workspace/requirements.txt +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-03/workspace/templates/treats/home.html +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-03/workspace/treats/__init__.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-03/workspace/treats/admin.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-03/workspace/treats/apps.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-03/workspace/treats/menu.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-03/workspace/treats/migrations/__init__.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-03/workspace/treats/models.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-03/workspace/treats/tests.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-03/workspace/treats/urls.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-03/workspace/treats/views.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-04/.local/share/portacode/keys/id_portacode +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-04/.local/share/portacode/keys/id_portacode.pub +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-04/workspace/README.md +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-04/workspace/galactic_bakeshop/__init__.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-04/workspace/galactic_bakeshop/asgi.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-04/workspace/galactic_bakeshop/settings.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-04/workspace/galactic_bakeshop/urls.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-04/workspace/galactic_bakeshop/wsgi.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-04/workspace/manage.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-04/workspace/requirements.txt +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-04/workspace/templates/treats/home.html +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-04/workspace/treats/__init__.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-04/workspace/treats/admin.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-04/workspace/treats/apps.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-04/workspace/treats/menu.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-04/workspace/treats/migrations/__init__.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-04/workspace/treats/models.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-04/workspace/treats/tests.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-04/workspace/treats/urls.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-04/workspace/treats/views.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-05/.local/share/portacode/keys/id_portacode +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-05/.local/share/portacode/keys/id_portacode.pub +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-05/workspace/README.md +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-05/workspace/galactic_bakeshop/__init__.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-05/workspace/galactic_bakeshop/asgi.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-05/workspace/galactic_bakeshop/settings.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-05/workspace/galactic_bakeshop/urls.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-05/workspace/galactic_bakeshop/wsgi.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-05/workspace/manage.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-05/workspace/requirements.txt +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-05/workspace/templates/treats/home.html +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-05/workspace/treats/__init__.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-05/workspace/treats/admin.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-05/workspace/treats/apps.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-05/workspace/treats/menu.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-05/workspace/treats/migrations/__init__.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-05/workspace/treats/models.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-05/workspace/treats/tests.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-05/workspace/treats/urls.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-05/workspace/treats/views.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-06/.local/share/portacode/keys/id_portacode +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-06/.local/share/portacode/keys/id_portacode.pub +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-06/workspace/README.md +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-06/workspace/galactic_bakeshop/__init__.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-06/workspace/galactic_bakeshop/asgi.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-06/workspace/galactic_bakeshop/settings.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-06/workspace/galactic_bakeshop/urls.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-06/workspace/galactic_bakeshop/wsgi.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-06/workspace/manage.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-06/workspace/requirements.txt +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-06/workspace/templates/treats/home.html +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-06/workspace/treats/__init__.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-06/workspace/treats/admin.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-06/workspace/treats/apps.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-06/workspace/treats/menu.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-06/workspace/treats/migrations/__init__.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-06/workspace/treats/models.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-06/workspace/treats/tests.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-06/workspace/treats/urls.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-06/workspace/treats/views.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-07/.local/share/portacode/keys/id_portacode +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-07/.local/share/portacode/keys/id_portacode.pub +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-07/workspace/README.md +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-07/workspace/galactic_bakeshop/__init__.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-07/workspace/galactic_bakeshop/asgi.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-07/workspace/galactic_bakeshop/settings.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-07/workspace/galactic_bakeshop/urls.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-07/workspace/galactic_bakeshop/wsgi.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-07/workspace/manage.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-07/workspace/requirements.txt +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-07/workspace/templates/treats/home.html +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-07/workspace/treats/__init__.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-07/workspace/treats/admin.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-07/workspace/treats/apps.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-07/workspace/treats/menu.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-07/workspace/treats/migrations/__init__.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-07/workspace/treats/models.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-07/workspace/treats/tests.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-07/workspace/treats/urls.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-07/workspace/treats/views.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-08/.local/share/portacode/keys/id_portacode +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-08/.local/share/portacode/keys/id_portacode.pub +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-08/workspace/README.md +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-08/workspace/galactic_bakeshop/__init__.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-08/workspace/galactic_bakeshop/asgi.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-08/workspace/galactic_bakeshop/settings.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-08/workspace/galactic_bakeshop/urls.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-08/workspace/galactic_bakeshop/wsgi.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-08/workspace/manage.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-08/workspace/requirements.txt +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-08/workspace/templates/treats/home.html +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-08/workspace/treats/__init__.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-08/workspace/treats/admin.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-08/workspace/treats/apps.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-08/workspace/treats/menu.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-08/workspace/treats/migrations/__init__.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-08/workspace/treats/models.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-08/workspace/treats/tests.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-08/workspace/treats/urls.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-08/workspace/treats/views.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-09/.local/share/portacode/keys/id_portacode +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-09/.local/share/portacode/keys/id_portacode.pub +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-09/workspace/README.md +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-09/workspace/galactic_bakeshop/__init__.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-09/workspace/galactic_bakeshop/asgi.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-09/workspace/galactic_bakeshop/settings.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-09/workspace/galactic_bakeshop/urls.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-09/workspace/galactic_bakeshop/wsgi.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-09/workspace/manage.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-09/workspace/requirements.txt +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-09/workspace/templates/treats/home.html +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-09/workspace/treats/__init__.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-09/workspace/treats/admin.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-09/workspace/treats/apps.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-09/workspace/treats/menu.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-09/workspace/treats/migrations/__init__.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-09/workspace/treats/models.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-09/workspace/treats/tests.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-09/workspace/treats/urls.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-09/workspace/treats/views.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-10/.local/share/portacode/keys/id_portacode +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-10/.local/share/portacode/keys/id_portacode.pub +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-10/workspace/README.md +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-10/workspace/galactic_bakeshop/__init__.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-10/workspace/galactic_bakeshop/asgi.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-10/workspace/galactic_bakeshop/settings.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-10/workspace/galactic_bakeshop/urls.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-10/workspace/galactic_bakeshop/wsgi.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-10/workspace/manage.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-10/workspace/requirements.txt +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-10/workspace/templates/treats/home.html +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-10/workspace/treats/__init__.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-10/workspace/treats/admin.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-10/workspace/treats/apps.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-10/workspace/treats/menu.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-10/workspace/treats/migrations/__init__.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-10/workspace/treats/models.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-10/workspace/treats/tests.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-10/workspace/treats/urls.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/data/student-10/workspace/treats/views.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/docker-compose.yaml +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/initial_content/README.md +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/initial_content/galactic_bakeshop/__init__.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/initial_content/galactic_bakeshop/asgi.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/initial_content/galactic_bakeshop/settings.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/initial_content/galactic_bakeshop/urls.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/initial_content/galactic_bakeshop/wsgi.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/initial_content/manage.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/initial_content/requirements.txt +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/initial_content/templates/treats/home.html +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/initial_content/treats/__init__.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/initial_content/treats/admin.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/initial_content/treats/apps.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/initial_content/treats/menu.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/initial_content/treats/migrations/__init__.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/initial_content/treats/models.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/initial_content/treats/tests.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/initial_content/treats/urls.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/initial_content/treats/views.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/examples/workshop_fleet/instructions/WELCOME.md +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/portacode/README.md +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/portacode/__init__.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/portacode/__main__.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/portacode/cli.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/portacode/connection/README.md +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/portacode/connection/__init__.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/portacode/connection/client.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/portacode/connection/handlers/README.md +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/portacode/connection/handlers/__init__.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/portacode/connection/handlers/chunked_content.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/portacode/connection/handlers/diff_handlers.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/portacode/connection/handlers/file_handlers.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/portacode/connection/handlers/project_aware_file_handlers.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/portacode/connection/handlers/project_state/README.md +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/portacode/connection/handlers/project_state/__init__.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/portacode/connection/handlers/project_state/file_system_watcher.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/portacode/connection/handlers/project_state/git_manager.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/portacode/connection/handlers/project_state/handlers.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/portacode/connection/handlers/project_state/manager.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/portacode/connection/handlers/project_state/models.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/portacode/connection/handlers/project_state/utils.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/portacode/connection/handlers/project_state_handlers.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/portacode/connection/handlers/session.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/portacode/connection/handlers/system_handlers.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/portacode/connection/handlers/tab_factory.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/portacode/connection/handlers/terminal_handlers.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/portacode/connection/handlers/test_proxmox_infra.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/portacode/connection/handlers/update_handler.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/portacode/connection/multiplex.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/portacode/connection/terminal.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/portacode/data.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/portacode/keypair.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/portacode/link_capture/__init__.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/portacode/link_capture/__pycache__/__init__.cpython-311.pyc +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/portacode/link_capture/bin/__pycache__/link_capture_wrapper.cpython-311.pyc +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/portacode/link_capture/bin/elinks +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/portacode/link_capture/bin/gio-open +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/portacode/link_capture/bin/gnome-open +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/portacode/link_capture/bin/gvfs-open +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/portacode/link_capture/bin/kde-open +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/portacode/link_capture/bin/kfmclient +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/portacode/link_capture/bin/link_capture_exec.sh +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/portacode/link_capture/bin/link_capture_wrapper.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/portacode/link_capture/bin/links +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/portacode/link_capture/bin/links2 +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/portacode/link_capture/bin/lynx +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/portacode/link_capture/bin/mate-open +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/portacode/link_capture/bin/netsurf +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/portacode/link_capture/bin/sensible-browser +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/portacode/link_capture/bin/w3m +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/portacode/link_capture/bin/x-www-browser +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/portacode/link_capture/bin/xdg-open +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/portacode/logging_categories.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/portacode/pairing.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/portacode/service.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/portacode/static/js/test-ntp-clock.html +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/portacode/static/js/utils/ntp-clock.js +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/portacode/utils/NTP_ARCHITECTURE.md +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/portacode/utils/__init__.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/portacode/utils/diff_apply.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/portacode/utils/diff_renderer.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/portacode/utils/ntp_clock.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/portacode.egg-info/SOURCES.txt +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/portacode.egg-info/dependency_links.txt +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/portacode.egg-info/entry_points.txt +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/portacode.egg-info/requires.txt +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/portacode.egg-info/top_level.txt +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/pyproject.toml +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/restore.sh +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/run_tests.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/setup.cfg +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/setup.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/test.sh +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/test_modules/README.md +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/test_modules/__init__.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/test_modules/test_device_online.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/test_modules/test_file_operations.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/test_modules/test_git_status_ui.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/test_modules/test_login_flow.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/test_modules/test_navigate_testing_folder.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/test_modules/test_play_store_screenshots.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/test_modules/test_terminal_buffer_performance.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/test_modules/test_terminal_interaction.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/test_modules/test_terminal_loading_race_condition.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/test_modules/test_terminal_start.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/test_request_id.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/testing_framework/.env.example +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/testing_framework/README.md +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/testing_framework/__init__.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/testing_framework/cli.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/testing_framework/core/__init__.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/testing_framework/core/base_test.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/testing_framework/core/cli_manager.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/testing_framework/core/hierarchical_runner.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/testing_framework/core/playwright_manager.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/testing_framework/core/runner.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/testing_framework/core/shared_cli_manager.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/testing_framework/core/test_discovery.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/testing_framework/requirements.txt +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/todo/UI_UX/opening_a_file_on_desktop_results_in_nothing.md +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/todo/agent_context_management.md +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/todo/django_server_time_sync.md +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/todo/issues/device_performance_degradation.md +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/todo/issues/git_data_not_captured_in_proxmox.md +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/todo/issues/indefinite_resource_loading.md +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/todo/issues/portacode_service_silently_down.md +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/todo/issues/premature_terminal_exit.md +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/todo/issues/project_cpu_hotspots.md +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/todo/issues/terminals_exit_upon_starting.md +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/todo/issues/wrong_item_classification_on_client_side.md +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/todo/smartphone_terminal_input_frustrations.md +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/tools/generate_play_store_assets.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/tools/pairing_tester.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/tools/run_screenshot_suite.sh +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/tools/test_python_ntp_clock.py +0 -0
- {portacode-1.4.18.dev1 → portacode-1.4.19.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.19.dev0'
|
|
32
|
+
__version_tuple__ = version_tuple = (1, 4, 19, 'dev0')
|
|
33
33
|
|
|
34
34
|
__commit_id__ = commit_id = None
|
{portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/portacode/connection/handlers/WEBSOCKET_PROTOCOL.md
RENAMED
|
@@ -408,7 +408,7 @@ Deletes a managed container from Proxmox (stopping it first if necessary) and re
|
|
|
408
408
|
|
|
409
409
|
**Payload Fields:**
|
|
410
410
|
|
|
411
|
-
* `ctid` (string,
|
|
411
|
+
* `ctid` (string, optional): Identifier of the container to delete. If omitted, the handler resolves the CTID from the managed container records using `child_device_id`.
|
|
412
412
|
* `child_device_id` (string, required): Dashboard `Device.id` that should own the container metadata being purged.
|
|
413
413
|
|
|
414
414
|
**Responses:**
|
|
@@ -62,16 +62,18 @@ class BaseHandler(ABC):
|
|
|
62
62
|
# Get client session manager from context
|
|
63
63
|
client_session_manager = self.context.get("client_session_manager")
|
|
64
64
|
|
|
65
|
+
bypass_session_gate = bool(payload.get("bypass_session_gate"))
|
|
65
66
|
if client_session_manager and client_session_manager.has_interested_clients():
|
|
66
67
|
# Get target sessions
|
|
67
68
|
target_sessions = client_session_manager.get_target_sessions(project_id)
|
|
68
|
-
if not target_sessions:
|
|
69
|
+
if not target_sessions and not bypass_session_gate:
|
|
69
70
|
logger.debug("handler: No target sessions found, skipping response send")
|
|
70
71
|
return
|
|
71
72
|
|
|
72
73
|
# Add session targeting information
|
|
73
74
|
enhanced_payload = dict(payload)
|
|
74
|
-
|
|
75
|
+
if target_sessions:
|
|
76
|
+
enhanced_payload["client_sessions"] = target_sessions
|
|
75
77
|
|
|
76
78
|
# Add backward compatibility reply_channel (first session if not provided)
|
|
77
79
|
if not reply_channel:
|
|
@@ -89,15 +91,24 @@ class BaseHandler(ABC):
|
|
|
89
91
|
payload["reply_channel"] = reply_channel
|
|
90
92
|
await self.control_channel.send(payload)
|
|
91
93
|
|
|
92
|
-
async def send_error(
|
|
94
|
+
async def send_error(
|
|
95
|
+
self,
|
|
96
|
+
message: str,
|
|
97
|
+
reply_channel: Optional[str] = None,
|
|
98
|
+
project_id: str = None,
|
|
99
|
+
request_id: Optional[str] = None,
|
|
100
|
+
) -> None:
|
|
93
101
|
"""Send an error response with client session awareness.
|
|
94
102
|
|
|
95
103
|
Args:
|
|
96
104
|
message: Error message
|
|
97
105
|
reply_channel: Optional reply channel for backward compatibility
|
|
98
106
|
project_id: Optional project filter for targeting specific sessions
|
|
107
|
+
request_id: Optional request_id to correlate error with a request
|
|
99
108
|
"""
|
|
100
109
|
payload = {"event": "error", "message": message}
|
|
110
|
+
if request_id:
|
|
111
|
+
payload["request_id"] = request_id
|
|
101
112
|
await self.send_response(payload, reply_channel, project_id)
|
|
102
113
|
|
|
103
114
|
|
|
@@ -163,7 +174,12 @@ class AsyncHandler(BaseHandler):
|
|
|
163
174
|
logger.exception("handler: Error in async handler %s: %s", self.command_name, exc)
|
|
164
175
|
# Extract project_id from original message for error targeting
|
|
165
176
|
project_id = message.get("project_id")
|
|
166
|
-
await self.send_error(
|
|
177
|
+
await self.send_error(
|
|
178
|
+
str(exc),
|
|
179
|
+
reply_channel,
|
|
180
|
+
project_id,
|
|
181
|
+
request_id=message.get("request_id"),
|
|
182
|
+
)
|
|
167
183
|
|
|
168
184
|
|
|
169
185
|
class SyncHandler(BaseHandler):
|
|
@@ -216,4 +232,9 @@ class SyncHandler(BaseHandler):
|
|
|
216
232
|
logger.exception("Error in sync handler %s: %s", self.command_name, exc)
|
|
217
233
|
# Extract project_id from original message for error targeting
|
|
218
234
|
project_id = message.get("project_id")
|
|
219
|
-
await self.send_error(
|
|
235
|
+
await self.send_error(
|
|
236
|
+
str(exc),
|
|
237
|
+
reply_channel,
|
|
238
|
+
project_id,
|
|
239
|
+
request_id=message.get("request_id"),
|
|
240
|
+
)
|
{portacode-1.4.18.dev1 → portacode-1.4.19.dev0}/portacode/connection/handlers/proxmox_infra.py
RENAMED
|
@@ -116,6 +116,7 @@ def _emit_progress_event(
|
|
|
116
116
|
payload["details"] = details
|
|
117
117
|
if on_behalf_of_device:
|
|
118
118
|
payload["on_behalf_of_device"] = str(on_behalf_of_device)
|
|
119
|
+
payload["bypass_session_gate"] = True
|
|
119
120
|
|
|
120
121
|
future = asyncio.run_coroutine_threadsafe(handler.send_response(payload), loop)
|
|
121
122
|
future.add_done_callback(
|
|
@@ -1399,6 +1400,25 @@ def _parse_ctid(message: Dict[str, Any]) -> int:
|
|
|
1399
1400
|
raise ValueError("ctid is required")
|
|
1400
1401
|
|
|
1401
1402
|
|
|
1403
|
+
def _resolve_vmid_for_device(device_id: str) -> int:
|
|
1404
|
+
_initialize_managed_containers_state()
|
|
1405
|
+
records = list(_MANAGED_CONTAINERS_STATE.get("records", {}).values())
|
|
1406
|
+
for record in records:
|
|
1407
|
+
record_device_id = record.get("device_id")
|
|
1408
|
+
if record_device_id is None:
|
|
1409
|
+
continue
|
|
1410
|
+
if str(record_device_id) != str(device_id):
|
|
1411
|
+
continue
|
|
1412
|
+
vmid = record.get("vmid")
|
|
1413
|
+
if vmid is None:
|
|
1414
|
+
continue
|
|
1415
|
+
try:
|
|
1416
|
+
return int(str(vmid).strip())
|
|
1417
|
+
except ValueError:
|
|
1418
|
+
raise ValueError("ctid must be an integer") from None
|
|
1419
|
+
raise ValueError("ctid is required for remove_proxmox_container")
|
|
1420
|
+
|
|
1421
|
+
|
|
1402
1422
|
def _ensure_container_managed(
|
|
1403
1423
|
proxmox: Any, node: str, vmid: int, *, device_id: Optional[str] = None
|
|
1404
1424
|
) -> Tuple[Dict[str, Any], Dict[str, Any]]:
|
|
@@ -2331,6 +2351,7 @@ class CreateProxmoxContainerHandler(SyncHandler):
|
|
|
2331
2351
|
"setup_steps": steps,
|
|
2332
2352
|
"device_id": device_id,
|
|
2333
2353
|
"on_behalf_of_device": device_id,
|
|
2354
|
+
"bypass_session_gate": True,
|
|
2334
2355
|
"service_installed": service_installed,
|
|
2335
2356
|
"request_id": request_id,
|
|
2336
2357
|
},
|
|
@@ -2357,7 +2378,6 @@ class CreateProxmoxContainerHandler(SyncHandler):
|
|
|
2357
2378
|
"event": "proxmox_container_accepted",
|
|
2358
2379
|
"success": True,
|
|
2359
2380
|
"message": "Provisioning accepted; resources reserved.",
|
|
2360
|
-
"device_id": device_id,
|
|
2361
2381
|
"request_id": request_id,
|
|
2362
2382
|
}
|
|
2363
2383
|
|
|
@@ -2557,10 +2577,14 @@ class RemoveProxmoxContainerHandler(SyncHandler):
|
|
|
2557
2577
|
return "remove_proxmox_container"
|
|
2558
2578
|
|
|
2559
2579
|
def execute(self, message: Dict[str, Any]) -> Dict[str, Any]:
|
|
2560
|
-
vmid = _parse_ctid(message)
|
|
2561
2580
|
child_device_id = (message.get("child_device_id") or "").strip()
|
|
2562
2581
|
if not child_device_id:
|
|
2563
2582
|
raise ValueError("child_device_id is required for remove_proxmox_container")
|
|
2583
|
+
try:
|
|
2584
|
+
vmid = _parse_ctid(message)
|
|
2585
|
+
except ValueError:
|
|
2586
|
+
vmid = _resolve_vmid_for_device(child_device_id)
|
|
2587
|
+
request_id = message.get("request_id")
|
|
2564
2588
|
config = _ensure_infra_configured()
|
|
2565
2589
|
proxmox = _connect_proxmox(config)
|
|
2566
2590
|
node = _get_node_from_config(config)
|
|
@@ -2582,6 +2606,9 @@ class RemoveProxmoxContainerHandler(SyncHandler):
|
|
|
2582
2606
|
"delete_exitstatus": delete_status.get("exitstatus"),
|
|
2583
2607
|
},
|
|
2584
2608
|
"status": "deleted",
|
|
2609
|
+
"child_device_id": child_device_id,
|
|
2610
|
+
"on_behalf_of_device": child_device_id,
|
|
2611
|
+
"request_id": request_id,
|
|
2585
2612
|
"infra": infra,
|
|
2586
2613
|
}
|
|
2587
2614
|
|
|
@@ -106,12 +106,25 @@ class CommandRegistry:
|
|
|
106
106
|
except Exception as exc:
|
|
107
107
|
logger.exception("registry: Error dispatching command %s: %s", command_name, exc)
|
|
108
108
|
# Send session-aware error response
|
|
109
|
-
await self._send_session_aware_error(
|
|
109
|
+
await self._send_session_aware_error(
|
|
110
|
+
str(exc),
|
|
111
|
+
reply_channel,
|
|
112
|
+
message.get("project_id"),
|
|
113
|
+
request_id=message.get("request_id"),
|
|
114
|
+
)
|
|
110
115
|
return False
|
|
111
116
|
|
|
112
|
-
async def _send_session_aware_error(
|
|
117
|
+
async def _send_session_aware_error(
|
|
118
|
+
self,
|
|
119
|
+
message: str,
|
|
120
|
+
reply_channel: Optional[str] = None,
|
|
121
|
+
project_id: str = None,
|
|
122
|
+
request_id: Optional[str] = None,
|
|
123
|
+
) -> None:
|
|
113
124
|
"""Send an error response with client session awareness."""
|
|
114
125
|
error_payload = {"event": "error", "message": message}
|
|
126
|
+
if request_id:
|
|
127
|
+
error_payload["request_id"] = request_id
|
|
115
128
|
|
|
116
129
|
# Get client session manager from context
|
|
117
130
|
client_session_manager = self.context.get("client_session_manager")
|
|
@@ -151,4 +164,4 @@ class CommandRegistry:
|
|
|
151
164
|
|
|
152
165
|
# Update context for all existing handlers
|
|
153
166
|
for handler in self._handlers.values():
|
|
154
|
-
handler.context = self.context
|
|
167
|
+
handler.context = self.context
|
|
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
|
|
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
|