portacode 1.4.17.dev8__tar.gz → 1.4.17.dev9__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.17.dev8 → portacode-1.4.17.dev9}/PKG-INFO +1 -1
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/portacode/_version.py +2 -2
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/portacode/service.py +109 -2
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/portacode.egg-info/PKG-INFO +1 -1
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/.claude/agents/communication-manager.md +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/.claude/settings.local.json +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/.gitignore +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/.gitmodules +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/LICENSE +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/MANIFEST.in +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/Makefile +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/README.md +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/backup.sh +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/connect.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/connect.sh +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/docker-compose.yaml +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/docs/images/device-transfer-button.png +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/docs/images/device-transfer-modal.png +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/docs/images/pair-device-button.png +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/docs/images/pairing-request.png +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/docs/images/student-workspace.png +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/README.md +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/simple_device/Dockerfile +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/simple_device/README.md +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/simple_device/data/device-01/.local/share/portacode/keys/id_portacode +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/simple_device/data/device-01/.local/share/portacode/keys/id_portacode.pub +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/simple_device/docker-compose.yaml +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/Dockerfile +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/README.md +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-01/.local/share/portacode/keys/id_portacode +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-01/.local/share/portacode/keys/id_portacode.pub +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-01/.local/share/portacode/run/gateway.pid +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-01/workspace/.gitignore +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-01/workspace/README.md +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-01/workspace/db.sqlite3 +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-01/workspace/galactic_bakeshop/__init__.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-01/workspace/galactic_bakeshop/__pycache__/__init__.cpython-311.pyc +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-01/workspace/galactic_bakeshop/__pycache__/settings.cpython-311.pyc +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-01/workspace/galactic_bakeshop/__pycache__/urls.cpython-311.pyc +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-01/workspace/galactic_bakeshop/__pycache__/wsgi.cpython-311.pyc +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-01/workspace/galactic_bakeshop/asgi.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-01/workspace/galactic_bakeshop/settings.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-01/workspace/galactic_bakeshop/urls.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-01/workspace/galactic_bakeshop/wsgi.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-01/workspace/manage.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-01/workspace/requirements.txt +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-01/workspace/templates/treats/home.html +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-01/workspace/treats/__init__.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-01/workspace/treats/__pycache__/__init__.cpython-311.pyc +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-01/workspace/treats/__pycache__/admin.cpython-311.pyc +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-01/workspace/treats/__pycache__/apps.cpython-311.pyc +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-01/workspace/treats/__pycache__/menu.cpython-311.pyc +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-01/workspace/treats/__pycache__/models.cpython-311.pyc +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-01/workspace/treats/__pycache__/urls.cpython-311.pyc +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-01/workspace/treats/__pycache__/views.cpython-311.pyc +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-01/workspace/treats/admin.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-01/workspace/treats/apps.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-01/workspace/treats/menu.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-01/workspace/treats/migrations/__init__.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-01/workspace/treats/migrations/__pycache__/__init__.cpython-311.pyc +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-01/workspace/treats/models.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-01/workspace/treats/tests.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-01/workspace/treats/urls.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-01/workspace/treats/views.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-02/.local/share/portacode/keys/id_portacode +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-02/.local/share/portacode/keys/id_portacode.pub +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-02/workspace/README.md +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-02/workspace/galactic_bakeshop/__init__.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-02/workspace/galactic_bakeshop/asgi.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-02/workspace/galactic_bakeshop/settings.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-02/workspace/galactic_bakeshop/urls.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-02/workspace/galactic_bakeshop/wsgi.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-02/workspace/manage.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-02/workspace/requirements.txt +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-02/workspace/templates/treats/home.html +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-02/workspace/treats/__init__.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-02/workspace/treats/admin.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-02/workspace/treats/apps.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-02/workspace/treats/menu.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-02/workspace/treats/migrations/__init__.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-02/workspace/treats/models.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-02/workspace/treats/tests.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-02/workspace/treats/urls.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-02/workspace/treats/views.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-03/.local/share/portacode/keys/id_portacode +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-03/.local/share/portacode/keys/id_portacode.pub +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-03/workspace/README.md +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-03/workspace/galactic_bakeshop/__init__.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-03/workspace/galactic_bakeshop/asgi.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-03/workspace/galactic_bakeshop/settings.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-03/workspace/galactic_bakeshop/urls.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-03/workspace/galactic_bakeshop/wsgi.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-03/workspace/manage.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-03/workspace/requirements.txt +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-03/workspace/templates/treats/home.html +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-03/workspace/treats/__init__.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-03/workspace/treats/admin.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-03/workspace/treats/apps.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-03/workspace/treats/menu.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-03/workspace/treats/migrations/__init__.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-03/workspace/treats/models.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-03/workspace/treats/tests.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-03/workspace/treats/urls.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-03/workspace/treats/views.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-04/.local/share/portacode/keys/id_portacode +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-04/.local/share/portacode/keys/id_portacode.pub +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-04/workspace/README.md +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-04/workspace/galactic_bakeshop/__init__.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-04/workspace/galactic_bakeshop/asgi.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-04/workspace/galactic_bakeshop/settings.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-04/workspace/galactic_bakeshop/urls.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-04/workspace/galactic_bakeshop/wsgi.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-04/workspace/manage.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-04/workspace/requirements.txt +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-04/workspace/templates/treats/home.html +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-04/workspace/treats/__init__.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-04/workspace/treats/admin.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-04/workspace/treats/apps.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-04/workspace/treats/menu.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-04/workspace/treats/migrations/__init__.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-04/workspace/treats/models.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-04/workspace/treats/tests.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-04/workspace/treats/urls.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-04/workspace/treats/views.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-05/.local/share/portacode/keys/id_portacode +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-05/.local/share/portacode/keys/id_portacode.pub +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-05/workspace/README.md +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-05/workspace/galactic_bakeshop/__init__.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-05/workspace/galactic_bakeshop/asgi.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-05/workspace/galactic_bakeshop/settings.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-05/workspace/galactic_bakeshop/urls.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-05/workspace/galactic_bakeshop/wsgi.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-05/workspace/manage.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-05/workspace/requirements.txt +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-05/workspace/templates/treats/home.html +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-05/workspace/treats/__init__.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-05/workspace/treats/admin.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-05/workspace/treats/apps.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-05/workspace/treats/menu.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-05/workspace/treats/migrations/__init__.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-05/workspace/treats/models.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-05/workspace/treats/tests.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-05/workspace/treats/urls.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-05/workspace/treats/views.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-06/.local/share/portacode/keys/id_portacode +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-06/.local/share/portacode/keys/id_portacode.pub +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-06/workspace/README.md +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-06/workspace/galactic_bakeshop/__init__.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-06/workspace/galactic_bakeshop/asgi.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-06/workspace/galactic_bakeshop/settings.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-06/workspace/galactic_bakeshop/urls.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-06/workspace/galactic_bakeshop/wsgi.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-06/workspace/manage.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-06/workspace/requirements.txt +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-06/workspace/templates/treats/home.html +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-06/workspace/treats/__init__.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-06/workspace/treats/admin.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-06/workspace/treats/apps.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-06/workspace/treats/menu.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-06/workspace/treats/migrations/__init__.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-06/workspace/treats/models.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-06/workspace/treats/tests.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-06/workspace/treats/urls.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-06/workspace/treats/views.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-07/.local/share/portacode/keys/id_portacode +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-07/.local/share/portacode/keys/id_portacode.pub +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-07/workspace/README.md +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-07/workspace/galactic_bakeshop/__init__.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-07/workspace/galactic_bakeshop/asgi.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-07/workspace/galactic_bakeshop/settings.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-07/workspace/galactic_bakeshop/urls.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-07/workspace/galactic_bakeshop/wsgi.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-07/workspace/manage.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-07/workspace/requirements.txt +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-07/workspace/templates/treats/home.html +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-07/workspace/treats/__init__.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-07/workspace/treats/admin.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-07/workspace/treats/apps.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-07/workspace/treats/menu.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-07/workspace/treats/migrations/__init__.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-07/workspace/treats/models.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-07/workspace/treats/tests.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-07/workspace/treats/urls.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-07/workspace/treats/views.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-08/.local/share/portacode/keys/id_portacode +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-08/.local/share/portacode/keys/id_portacode.pub +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-08/workspace/README.md +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-08/workspace/galactic_bakeshop/__init__.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-08/workspace/galactic_bakeshop/asgi.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-08/workspace/galactic_bakeshop/settings.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-08/workspace/galactic_bakeshop/urls.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-08/workspace/galactic_bakeshop/wsgi.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-08/workspace/manage.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-08/workspace/requirements.txt +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-08/workspace/templates/treats/home.html +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-08/workspace/treats/__init__.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-08/workspace/treats/admin.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-08/workspace/treats/apps.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-08/workspace/treats/menu.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-08/workspace/treats/migrations/__init__.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-08/workspace/treats/models.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-08/workspace/treats/tests.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-08/workspace/treats/urls.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-08/workspace/treats/views.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-09/.local/share/portacode/keys/id_portacode +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-09/.local/share/portacode/keys/id_portacode.pub +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-09/workspace/README.md +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-09/workspace/galactic_bakeshop/__init__.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-09/workspace/galactic_bakeshop/asgi.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-09/workspace/galactic_bakeshop/settings.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-09/workspace/galactic_bakeshop/urls.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-09/workspace/galactic_bakeshop/wsgi.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-09/workspace/manage.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-09/workspace/requirements.txt +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-09/workspace/templates/treats/home.html +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-09/workspace/treats/__init__.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-09/workspace/treats/admin.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-09/workspace/treats/apps.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-09/workspace/treats/menu.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-09/workspace/treats/migrations/__init__.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-09/workspace/treats/models.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-09/workspace/treats/tests.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-09/workspace/treats/urls.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-09/workspace/treats/views.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-10/.local/share/portacode/keys/id_portacode +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-10/.local/share/portacode/keys/id_portacode.pub +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-10/workspace/README.md +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-10/workspace/galactic_bakeshop/__init__.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-10/workspace/galactic_bakeshop/asgi.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-10/workspace/galactic_bakeshop/settings.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-10/workspace/galactic_bakeshop/urls.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-10/workspace/galactic_bakeshop/wsgi.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-10/workspace/manage.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-10/workspace/requirements.txt +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-10/workspace/templates/treats/home.html +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-10/workspace/treats/__init__.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-10/workspace/treats/admin.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-10/workspace/treats/apps.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-10/workspace/treats/menu.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-10/workspace/treats/migrations/__init__.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-10/workspace/treats/models.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-10/workspace/treats/tests.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-10/workspace/treats/urls.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/data/student-10/workspace/treats/views.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/docker-compose.yaml +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/initial_content/README.md +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/initial_content/galactic_bakeshop/__init__.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/initial_content/galactic_bakeshop/asgi.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/initial_content/galactic_bakeshop/settings.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/initial_content/galactic_bakeshop/urls.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/initial_content/galactic_bakeshop/wsgi.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/initial_content/manage.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/initial_content/requirements.txt +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/initial_content/templates/treats/home.html +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/initial_content/treats/__init__.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/initial_content/treats/admin.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/initial_content/treats/apps.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/initial_content/treats/menu.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/initial_content/treats/migrations/__init__.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/initial_content/treats/models.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/initial_content/treats/tests.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/initial_content/treats/urls.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/initial_content/treats/views.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/examples/workshop_fleet/instructions/WELCOME.md +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/portacode/README.md +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/portacode/__init__.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/portacode/__main__.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/portacode/cli.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/portacode/connection/README.md +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/portacode/connection/__init__.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/portacode/connection/client.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/portacode/connection/handlers/README.md +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/portacode/connection/handlers/WEBSOCKET_PROTOCOL.md +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/portacode/connection/handlers/__init__.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/portacode/connection/handlers/base.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/portacode/connection/handlers/chunked_content.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/portacode/connection/handlers/diff_handlers.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/portacode/connection/handlers/file_handlers.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/portacode/connection/handlers/project_aware_file_handlers.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/portacode/connection/handlers/project_state/README.md +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/portacode/connection/handlers/project_state/__init__.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/portacode/connection/handlers/project_state/file_system_watcher.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/portacode/connection/handlers/project_state/git_manager.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/portacode/connection/handlers/project_state/handlers.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/portacode/connection/handlers/project_state/manager.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/portacode/connection/handlers/project_state/models.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/portacode/connection/handlers/project_state/utils.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/portacode/connection/handlers/project_state_handlers.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/portacode/connection/handlers/proxmox_infra.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/portacode/connection/handlers/registry.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/portacode/connection/handlers/session.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/portacode/connection/handlers/system_handlers.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/portacode/connection/handlers/tab_factory.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/portacode/connection/handlers/terminal_handlers.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/portacode/connection/handlers/test_proxmox_infra.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/portacode/connection/handlers/update_handler.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/portacode/connection/multiplex.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/portacode/connection/terminal.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/portacode/data.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/portacode/keypair.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/portacode/link_capture/__init__.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/portacode/link_capture/__pycache__/__init__.cpython-311.pyc +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/portacode/link_capture/bin/__pycache__/link_capture_wrapper.cpython-311.pyc +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/portacode/link_capture/bin/elinks +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/portacode/link_capture/bin/gio-open +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/portacode/link_capture/bin/gnome-open +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/portacode/link_capture/bin/gvfs-open +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/portacode/link_capture/bin/kde-open +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/portacode/link_capture/bin/kfmclient +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/portacode/link_capture/bin/link_capture_exec.sh +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/portacode/link_capture/bin/link_capture_wrapper.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/portacode/link_capture/bin/links +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/portacode/link_capture/bin/links2 +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/portacode/link_capture/bin/lynx +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/portacode/link_capture/bin/mate-open +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/portacode/link_capture/bin/netsurf +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/portacode/link_capture/bin/sensible-browser +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/portacode/link_capture/bin/w3m +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/portacode/link_capture/bin/x-www-browser +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/portacode/link_capture/bin/xdg-open +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/portacode/logging_categories.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/portacode/pairing.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/portacode/static/js/test-ntp-clock.html +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/portacode/static/js/utils/ntp-clock.js +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/portacode/utils/NTP_ARCHITECTURE.md +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/portacode/utils/__init__.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/portacode/utils/diff_apply.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/portacode/utils/diff_renderer.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/portacode/utils/ntp_clock.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/portacode.egg-info/SOURCES.txt +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/portacode.egg-info/dependency_links.txt +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/portacode.egg-info/entry_points.txt +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/portacode.egg-info/requires.txt +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/portacode.egg-info/top_level.txt +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/pyproject.toml +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/restore.sh +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/run_tests.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/setup.cfg +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/setup.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/test.sh +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/test_modules/README.md +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/test_modules/__init__.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/test_modules/test_device_online.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/test_modules/test_file_operations.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/test_modules/test_git_status_ui.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/test_modules/test_login_flow.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/test_modules/test_navigate_testing_folder.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/test_modules/test_play_store_screenshots.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/test_modules/test_terminal_buffer_performance.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/test_modules/test_terminal_interaction.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/test_modules/test_terminal_loading_race_condition.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/test_modules/test_terminal_start.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/test_request_id.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/testing_framework/.env.example +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/testing_framework/README.md +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/testing_framework/__init__.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/testing_framework/cli.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/testing_framework/core/__init__.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/testing_framework/core/base_test.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/testing_framework/core/cli_manager.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/testing_framework/core/hierarchical_runner.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/testing_framework/core/playwright_manager.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/testing_framework/core/runner.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/testing_framework/core/shared_cli_manager.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/testing_framework/core/test_discovery.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/testing_framework/requirements.txt +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/todo/UI_UX/opening_a_file_on_desktop_results_in_nothing.md +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/todo/agent_context_management.md +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/todo/django_server_time_sync.md +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/todo/issues/device_performance_degradation.md +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/todo/issues/git_data_not_captured_in_proxmox.md +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/todo/issues/indefinite_resource_loading.md +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/todo/issues/portacode_service_silently_down.md +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/todo/issues/premature_terminal_exit.md +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/todo/issues/project_cpu_hotspots.md +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/todo/issues/terminals_exit_upon_starting.md +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/todo/issues/wrong_item_classification_on_client_side.md +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/todo/smartphone_terminal_input_frustrations.md +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/tools/generate_play_store_assets.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/tools/pairing_tester.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/tools/run_screenshot_suite.sh +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/tools/test_python_ntp_clock.py +0 -0
- {portacode-1.4.17.dev8 → portacode-1.4.17.dev9}/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.17.
|
|
32
|
-
__version_tuple__ = version_tuple = (1, 4, 17, '
|
|
31
|
+
__version__ = version = '1.4.17.dev9'
|
|
32
|
+
__version_tuple__ = version_tuple = (1, 4, 17, 'dev9')
|
|
33
33
|
|
|
34
34
|
__commit_id__ = commit_id = None
|
|
@@ -6,6 +6,7 @@ runs ``portacode connect`` automatically at login / boot.
|
|
|
6
6
|
Platforms implemented:
|
|
7
7
|
|
|
8
8
|
• Linux (systemd **user** service) – no root privileges required
|
|
9
|
+
• Linux (OpenRC service) – system-wide (e.g., Alpine)
|
|
9
10
|
• macOS (launchd LaunchAgent plist) – per-user
|
|
10
11
|
• Windows (Task Scheduler *ONLOGON* task) – highest privilege, current user
|
|
11
12
|
|
|
@@ -26,6 +27,7 @@ import os
|
|
|
26
27
|
from typing import Protocol
|
|
27
28
|
import shutil
|
|
28
29
|
import pwd
|
|
30
|
+
import tempfile
|
|
29
31
|
|
|
30
32
|
__all__ = [
|
|
31
33
|
"ServiceManager",
|
|
@@ -199,6 +201,107 @@ class _SystemdUserService:
|
|
|
199
201
|
return (status or "") + "\n--- recent logs ---\n" + (journal or "<no logs>")
|
|
200
202
|
|
|
201
203
|
|
|
204
|
+
# ---------------------------------------------------------------------------
|
|
205
|
+
# Linux – OpenRC implementation (e.g., Alpine)
|
|
206
|
+
# ---------------------------------------------------------------------------
|
|
207
|
+
class _OpenRCService:
|
|
208
|
+
NAME = "portacode"
|
|
209
|
+
|
|
210
|
+
def __init__(self) -> None:
|
|
211
|
+
self.init_path = Path("/etc/init.d") / self.NAME
|
|
212
|
+
self.user = os.environ.get("SUDO_USER") or os.environ.get("USER") or os.getlogin()
|
|
213
|
+
try:
|
|
214
|
+
self.home = Path(pwd.getpwnam(self.user).pw_dir)
|
|
215
|
+
except KeyError:
|
|
216
|
+
self.home = Path("/root") if self.user == "root" else Path(f"/home/{self.user}")
|
|
217
|
+
self.python = shutil.which("python3") or sys.executable
|
|
218
|
+
self.log_dir = Path("/var/log/portacode")
|
|
219
|
+
self.log_path = self.log_dir / "connect.log"
|
|
220
|
+
|
|
221
|
+
def _run(self, *args: str) -> subprocess.CompletedProcess[str]:
|
|
222
|
+
prefix = ["sudo"] if os.geteuid() != 0 else []
|
|
223
|
+
cmd = [*prefix, *args]
|
|
224
|
+
return subprocess.run(cmd, text=True, capture_output=True)
|
|
225
|
+
|
|
226
|
+
def _write_init_script(self) -> None:
|
|
227
|
+
script = textwrap.dedent(f"""
|
|
228
|
+
#!/sbin/openrc-run
|
|
229
|
+
description="Portacode persistent connection"
|
|
230
|
+
|
|
231
|
+
command="{self.python}"
|
|
232
|
+
command_args="-m portacode connect --non-interactive"
|
|
233
|
+
command_user="{self.user}"
|
|
234
|
+
command_background="yes"
|
|
235
|
+
pidfile="/run/portacode.pid"
|
|
236
|
+
directory="{self.home}"
|
|
237
|
+
output_log="{self.log_path}"
|
|
238
|
+
error_log="{self.log_path}"
|
|
239
|
+
|
|
240
|
+
depend() {{
|
|
241
|
+
need net
|
|
242
|
+
}}
|
|
243
|
+
|
|
244
|
+
start_pre() {{
|
|
245
|
+
checkpath --directory --mode 0755 /var/log/portacode
|
|
246
|
+
}}
|
|
247
|
+
""").lstrip()
|
|
248
|
+
|
|
249
|
+
tmp_path = Path(tempfile.gettempdir()) / f"portacode-init-{os.getpid()}"
|
|
250
|
+
tmp_path.write_text(script)
|
|
251
|
+
if os.geteuid() != 0:
|
|
252
|
+
self._run("install", "-m", "755", str(tmp_path), str(self.init_path))
|
|
253
|
+
else:
|
|
254
|
+
self.init_path.parent.mkdir(parents=True, exist_ok=True)
|
|
255
|
+
shutil.copyfile(tmp_path, self.init_path)
|
|
256
|
+
self.init_path.chmod(0o755)
|
|
257
|
+
try:
|
|
258
|
+
tmp_path.unlink()
|
|
259
|
+
except Exception:
|
|
260
|
+
pass
|
|
261
|
+
|
|
262
|
+
def install(self) -> None:
|
|
263
|
+
self._write_init_script()
|
|
264
|
+
self._run("rc-update", "add", self.NAME, "default")
|
|
265
|
+
self._run("rc-service", self.NAME, "start")
|
|
266
|
+
|
|
267
|
+
def uninstall(self) -> None:
|
|
268
|
+
self._run("rc-service", self.NAME, "stop")
|
|
269
|
+
self._run("rc-update", "del", self.NAME, "default")
|
|
270
|
+
if self.init_path.exists():
|
|
271
|
+
if os.geteuid() != 0:
|
|
272
|
+
self._run("rm", "-f", str(self.init_path))
|
|
273
|
+
else:
|
|
274
|
+
self.init_path.unlink()
|
|
275
|
+
|
|
276
|
+
def start(self) -> None:
|
|
277
|
+
self._run("rc-service", self.NAME, "start")
|
|
278
|
+
|
|
279
|
+
def stop(self) -> None:
|
|
280
|
+
self._run("rc-service", self.NAME, "stop")
|
|
281
|
+
|
|
282
|
+
def status(self) -> str:
|
|
283
|
+
res = self._run("rc-service", self.NAME, "status")
|
|
284
|
+
out = (res.stdout or res.stderr or "").strip().lower()
|
|
285
|
+
if "started" in out or "running" in out:
|
|
286
|
+
return "running"
|
|
287
|
+
if "stopped" in out:
|
|
288
|
+
return "stopped"
|
|
289
|
+
return out or "unknown"
|
|
290
|
+
|
|
291
|
+
def status_verbose(self) -> str:
|
|
292
|
+
res = self._run("rc-service", self.NAME, "status")
|
|
293
|
+
status = res.stdout or res.stderr or ""
|
|
294
|
+
log_tail = "<no logs>"
|
|
295
|
+
try:
|
|
296
|
+
if self.log_path.exists():
|
|
297
|
+
with self.log_path.open("r", encoding="utf-8", errors="ignore") as fh:
|
|
298
|
+
lines = fh.readlines()
|
|
299
|
+
log_tail = "".join(lines[-20:]) or "<no logs>"
|
|
300
|
+
except Exception:
|
|
301
|
+
pass
|
|
302
|
+
return (status or "").rstrip() + "\n--- recent logs ---\n" + log_tail
|
|
303
|
+
|
|
304
|
+
|
|
202
305
|
# ---------------------------------------------------------------------------
|
|
203
306
|
# macOS – launchd (LaunchAgent) implementation
|
|
204
307
|
# ---------------------------------------------------------------------------
|
|
@@ -422,9 +525,13 @@ class _WindowsTask:
|
|
|
422
525
|
def get_manager(system_mode: bool = False) -> ServiceManager:
|
|
423
526
|
system = platform.system().lower()
|
|
424
527
|
if system == "linux":
|
|
425
|
-
|
|
528
|
+
if shutil.which("systemctl"):
|
|
529
|
+
return _SystemdUserService(system_mode=system_mode) # type: ignore[return-value]
|
|
530
|
+
if shutil.which("rc-service") or Path("/sbin/openrc").exists():
|
|
531
|
+
return _OpenRCService() # type: ignore[return-value]
|
|
532
|
+
raise RuntimeError("Unsupported Linux init system (no systemctl or rc-service found)")
|
|
426
533
|
if system == "darwin":
|
|
427
534
|
return _LaunchdService() # type: ignore[return-value]
|
|
428
535
|
if system.startswith("windows") or system == "windows":
|
|
429
536
|
return _WindowsTask() # type: ignore[return-value]
|
|
430
|
-
raise RuntimeError(f"Unsupported platform: {system}")
|
|
537
|
+
raise RuntimeError(f"Unsupported platform: {system}")
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|